From e6169793b07f4160949e1ae10f11703aaa25c24d Mon Sep 17 00:00:00 2001 From: janniks Date: Mon, 18 Sep 2023 12:44:01 +0200 Subject: [PATCH 01/49] chore: wip --- packages/sbtc/CHANGELOG.md | 484 ++++++++++++++++ packages/sbtc/README.md | 667 ++++++++++++++++++++++ packages/sbtc/jest.config.js | 3 + packages/sbtc/package.json | 51 ++ packages/sbtc/src/index.ts | 37 ++ packages/sbtc/tsconfig.build.json | 27 + packages/sbtc/tsconfig.json | 7 + packages/sbtc/webpack.config.js | 7 + packages/transactions/tests/types.test.ts | 1 + 9 files changed, 1284 insertions(+) create mode 100644 packages/sbtc/CHANGELOG.md create mode 100644 packages/sbtc/README.md create mode 100644 packages/sbtc/jest.config.js create mode 100644 packages/sbtc/package.json create mode 100644 packages/sbtc/src/index.ts create mode 100644 packages/sbtc/tsconfig.build.json create mode 100644 packages/sbtc/tsconfig.json create mode 100644 packages/sbtc/webpack.config.js diff --git a/packages/sbtc/CHANGELOG.md b/packages/sbtc/CHANGELOG.md new file mode 100644 index 000000000..c315918c0 --- /dev/null +++ b/packages/sbtc/CHANGELOG.md @@ -0,0 +1,484 @@ +# Change Log + +All notable changes to this project will be documented in this file. +See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. + +## [6.7.0](https://github.com/hirosystems/stacks.js/compare/v6.5.5...v6.7.0) (2023-07-24) + + +### Features + +* **stacking:** add getSecondsUntilStackingDeadline helper method ([#1528](https://github.com/hirosystems/stacks.js/issues/1528)) ([3c819c2](https://github.com/hirosystems/stacks.js/commit/3c819c28ebda8b79aa7d0fcb3edf447f72324457)) + + + +## [6.6.0](https://github.com/hirosystems/stacks.js/compare/v6.5.5...v6.6.0) (2023-07-24) + + +### Features + +* **stacking:** add getSecondsUntilStackingDeadline helper method ([#1528](https://github.com/hirosystems/stacks.js/issues/1528)) ([3c819c2](https://github.com/hirosystems/stacks.js/commit/3c819c28ebda8b79aa7d0fcb3edf447f72324457)) + + + +## [6.5.5](https://github.com/hirosystems/stacks.js/compare/v6.5.4...v6.5.5) (2023-07-14) + + +### Bug Fixes + +* add missing none type for delegation without until_burn_ht ([b9cf9ef](https://github.com/hirosystems/stacks.js/commit/b9cf9efb1f89967bd2866e89f2d54e130b76a65e)) +* update AccountExtendedBalances interface ([89dc787](https://github.com/hirosystems/stacks.js/commit/89dc78791b5d1db00799917e858a76addc49f963)) + + + +## [6.5.4](https://github.com/hirosystems/stacks.js/compare/v6.5.3...v6.5.4) (2023-05-17) + + +### Bug Fixes + +* Use StacksNetworkName instead of union type ([#1500](https://github.com/hirosystems/stacks.js/pull/1500)) ([efd2255](https://github.com/hirosystems/stacks.js/commit/efd2255f979ed64b90ac33246d99cd4809620400)) + + + +## [6.5.3](https://github.com/hirosystems/stacks.js/compare/v6.5.2...v6.5.3) (2023-05-11) + + +### Bug Fixes + +* add missing fields from `PoxInfo` ([acb7d78](https://github.com/hirosystems/stacks.js/commit/acb7d78881515949b48352b4c0a55b4de91178ee)) +* **pox-3:** include pox-3 error codes ([c72d82a](https://github.com/hirosystems/stacks.js/commit/c72d82ab0b0de30bb54541064c97bcd44171f5de)) +* **pox-3:** update stacking lib to always use the latest activated / current pox contract ([a2aac09](https://github.com/hirosystems/stacks.js/commit/a2aac09e5be07238b4af36af4fdd7deb09afdb11)) + + + +## [6.5.2](https://github.com/hirosystems/stacks.js/compare/v6.5.1...v6.5.2) (2023-04-28) + + +### Bug Fixes + +* **stacking:** return full principal instead of only address ([7e92f7f](https://github.com/hirosystems/stacks.js/commit/7e92f7fbdae14483b1ebcbaefd774202cb215d54)) + + + +## [6.5.1](https://github.com/hirosystems/stacks.js/compare/v6.5.0...v6.5.1) (2023-04-19) + +**Note:** Version bump only for package @stacks/stacking + + + + + +## [6.5.0](https://github.com/hirosystems/stacks.js/compare/v6.4.0...v6.5.0) (2023-03-26) + + +### Bug Fixes + +* allow contract principals in stackingclient ([ade6345](https://github.com/hirosystems/stacks.js/commit/ade63453fc5150bc2f849702ec4b814e1a51780c)) + + + +## [6.4.0](https://github.com/hirosystems/stacks.js/compare/v6.3.0...v6.4.0) (2023-03-19) + +**Note:** Version bump only for package @stacks/stacking + + + + + +## [6.3.0](https://github.com/hirosystems/stacks.js/compare/v6.2.1...v6.3.0) (2023-03-17) + +**Note:** Version bump only for package @stacks/stacking + + + + + +## [6.2.0](https://github.com/hirosystems/stacks.js/compare/v6.1.1...v6.2.0) (2023-02-22) + + +### Bug Fixes + +* add missing fee and nonce to all stacking methods ([d81cfd1](https://github.com/hirosystems/stacks.js/commit/d81cfd1b8d1f21e737e6d98bfaa65924b3c871cc)) + + + +## [6.1.1](https://github.com/hirosystems/stacks.js/compare/v6.1.0...v6.1.1) (2023-01-30) + +**Note:** Version bump only for package @stacks/stacking + + + + + +## [6.1.0](https://github.com/hirosystems/stacks.js/compare/v6.0.2...v6.1.0) (2023-01-06) + +**Note:** Version bump only for package @stacks/stacking + + + + + +## [6.0.2](https://github.com/hirosystems/stacks.js/compare/v6.0.1...v6.0.2) (2022-11-30) + + +### Bug Fixes + +* remove stacking into period3 check ([#1402](https://github.com/hirosystems/stacks.js/issues/1402)) ([d38fcc2](https://github.com/hirosystems/stacks.js/commit/d38fcc2a92e2079e34ab4a1fa94353f0ccdb2a6c)) + + + +## [6.0.1](https://github.com/hirosystems/stacks.js/compare/v6.0.0...v6.0.1) (2022-11-24) + + +### Bug Fixes + +* remove hard-coded fee for `stackAggregationCommitIndexed` ([1edb181](https://github.com/hirosystems/stacks.js/commit/1edb181f521231b516d15b4f198600cd4c7bbeff)) + + + +## [6.0.0](https://github.com/hirosystems/stacks.js/compare/v5.0.3...v6.0.0) (2022-11-23) + + +### ⚠ BREAKING CHANGES + +* Removes the getBTCAddress method, since it does not work with modern BTC addresses. + +### Features + +* A StackingClient will now automatically detect which PoX version to use for Stacking. +* Adds the following PoX Stacking methods to the StackingClient: `stackExtend`, `stackIncrease`, `delegateStackExtend`, `delegateStackIncrease`, `stackAggregationCommitIndexed`, `stackAggregationIncrease`. +* Adds the following helper methods to the StackingClient: `getAccountExtendedBalances`, `getAccountBalanceLocked`, `getDelegationStatus`, `getRewardSet`. +* Add PoX-2 methods to @stacks/stacking client ([#1354](https://github.com/hirosystems/stacks.js/issues/1354)) ([25e326a](https://github.com/hirosystems/stacks.js/commit/25e326a8df74b92fd09b1e4dfa218eb77fd8a952)) + + + +## [5.0.3](https://github.com/hirosystems/stacks.js/compare/v5.0.2...v5.0.3) (2022-11-18) + +**Note:** Version bump only for package @stacks/stacking + + + + + +## [5.0.2](https://github.com/hirosystems/stacks.js/compare/v5.0.1...v5.0.2) (2022-10-19) + +**Note:** Version bump only for package @stacks/stacking + + + + + +## [5.0.1](https://github.com/hirosystems/stacks.js/compare/v5.0.0...v5.0.1) (2022-10-04) + +**Note:** Version bump only for package @stacks/stacking + + + + + +## [5.0.0](https://github.com/hirosystems/stacks.js/compare/v4.3.8...v5.0.0) (2022-09-30) + + +### ⚠ BREAKING CHANGES + +* remove previously deprecated functions +* Removes compatibility with `bip32` package from @stacks/wallet-sdk. Now all derivation methods only rely on HDKey from @scure/bip32. +* To reduce the bundle sizes of applications using Stacks.js we are moving away from Buffer (a polyfill to match Node.js APIs) to Uint8Arrays (which Buffers use in the background anyway). To make the switch easier we have introduced a variety of methods for converting between strings and Uint8Arrays: `hexToBytes`, `bytesToHex`, `utf8ToBytes`, `bytesToUtf8`, `asciiToBytes`, `bytesToAscii`, and `concatBytes`. + + +### Features + +* switch from buffer to uint8array ([#1343](https://github.com/hirosystems/stacks.js/issues/1343)) ([5445b73](https://github.com/hirosystems/stacks.js/commit/5445b73e05ec0c09414395331bfd37788545f1e1)) + + +### Bug Fixes + +* remove previously deprecated functions ([b2a5f96](https://github.com/hirosystems/stacks.js/commit/b2a5f96fd24e8da7cb9b4e1cf4d7b654f6e5b00c)) + + + +## [4.3.8](https://github.com/hirosystems/stacks.js/compare/v4.3.7...v4.3.8) (2022-09-29) + +**Note:** Version bump only for package @stacks/stacking + + + + + +## [4.3.7](https://github.com/hirosystems/stacks.js/compare/v4.3.6...v4.3.7) (2022-09-28) + +**Note:** Version bump only for package @stacks/stacking + + + + + +## [4.3.5](https://github.com/hirosystems/stacks.js/compare/v4.3.4...v4.3.5) (2022-08-23) + +**Note:** Version bump only for package @stacks/stacking + + + + + +## [4.3.4](https://github.com/hirosystems/stacks.js/compare/v4.3.3...v4.3.4) (2022-08-02) + +**Note:** Version bump only for package @stacks/stacking + + + + + +## [4.3.3](https://github.com/hirosystems/stacks.js/compare/v4.3.2...v4.3.3) (2022-07-19) + + +### Bug Fixes + +* update version buffer size for pox addresses ([b7acc7d](https://github.com/hirosystems/stacks.js/commit/b7acc7de73e90a1969048696c481182d7ada21eb)) + + + + + +## [4.3.2](https://github.com/hirosystems/stacks.js/compare/v4.3.1...v4.3.2) (2022-07-11) + +**Note:** Version bump only for package @stacks/stacking + + + + + +## [4.3.1](https://github.com/hirosystems/stacks.js/compare/v4.3.0...v4.3.1) (2022-07-01) + + +### Bug Fixes + +* use correct buffer size for hashmode in stacking ([ca51914](https://github.com/hirosystems/stacks.js/commit/ca51914276da9434ac8df9cb9e7fb1e648ad2173)) + + + + + +# [4.3.0](https://github.com/hirosystems/stacks.js/compare/v4.2.2...v4.3.0) (2022-06-16) + +**Note:** Version bump only for package @stacks/stacking + + + + + +## [4.2.2](https://github.com/hirosystems/stacks.js/compare/v4.2.2-beta.0...v4.2.2) (2022-06-01) + +**Note:** Version bump only for package @stacks/stacking + + + + + +# [4.2.0](https://github.com/hirosystems/stacks.js/compare/v4.1.2...v4.2.0) (2022-05-25) + + +### Bug Fixes + +* offload bitcoinjs from stacking, closes [#1259](https://github.com/hirosystems/stacks.js/issues/1259) ([8912bca](https://github.com/hirosystems/stacks.js/commit/8912bca06b1281e453ff09b3513f0e08906eeae6)) + + + + + +# [4.1.0](https://github.com/blockstack/blockstack.js/compare/v4.0.2...v4.1.0) (2022-05-19) + + +### Features + +* add fetch middleware for api keys and request init ([ef45632](https://github.com/blockstack/blockstack.js/commit/ef456327a3e1dcdc2aa364cbe55e47225029c5d2)) + + + + + +## [4.0.2](https://github.com/blockstack/blockstack.js/compare/v4.0.2-beta.1...v4.0.2) (2022-05-19) + +**Note:** Version bump only for package @stacks/stacking + + + + + +## [4.0.1](https://github.com/blockstack/blockstack.js/compare/v4.0.1-beta.1...v4.0.1) (2022-05-09) + +**Note:** Version bump only for package @stacks/stacking + + + + + +# [4.0.0](https://github.com/blockstack/blockstack.js/compare/v4.0.0-beta.2...v4.0.0) (2022-04-20) + +**Note:** Version bump only for package @stacks/stacking + + + + + +# [3.5.0](https://github.com/blockstack/blockstack.js/compare/v3.5.0-beta.3...v3.5.0) (2022-03-30) + +**Note:** Version bump only for package @stacks/stacking + + + + + +# [3.3.0](https://github.com/blockstack/blockstack.js/compare/v3.2.1-beta.0...v3.3.0) (2022-02-23) + +**Note:** Version bump only for package @stacks/stacking + + + + + +## [3.2.1-beta.0](https://github.com/blockstack/blockstack.js/compare/v3.2.0...v3.2.1-beta.0) (2022-02-23) + +**Note:** Version bump only for package @stacks/stacking + + + + + +# [3.2.0](https://github.com/blockstack/blockstack.js/compare/v3.1.1...v3.2.0) (2022-02-02) + +**Note:** Version bump only for package @stacks/stacking + + + + + +# [3.1.0](https://github.com/blockstack/blockstack.js/compare/v3.0.0...v3.1.0) (2021-12-16) + +**Note:** Version bump only for package @stacks/stacking + + + + + +## [2.0.1](https://github.com/blockstack/blockstack.js/compare/v2.0.1-beta.2...v2.0.1) (2021-08-09) + +**Note:** Version bump only for package @stacks/stacking + + + + + +## [2.0.1-beta.2](https://github.com/blockstack/blockstack.js/compare/v2.0.1-beta.1...v2.0.1-beta.2) (2021-08-06) + +**Note:** Version bump only for package @stacks/stacking + + + + + +## [2.0.1-beta.1](https://github.com/blockstack/blockstack.js/compare/v2.0.0-beta.1...v2.0.1-beta.1) (2021-07-26) + + +### Features + +* refactor all js `number` and `bn.js` usages in Clarity integer values to native bigint ([1f78339](https://github.com/blockstack/blockstack.js/commit/1f783397e7f5b38aabb6e0342af71b58022aed4c)) + + + + + +# [2.0.0-beta.2](https://github.com/blockstack/blockstack.js/compare/v2.0.0-beta.1...v2.0.0-beta.2) (2021-07-26) + + +### Features + +* refactor all js `number` and `bn.js` usages in Clarity integer values to native bigint ([1f78339](https://github.com/blockstack/blockstack.js/commit/1f783397e7f5b38aabb6e0342af71b58022aed4c)) + + + + + +## [1.4.1](https://github.com/blockstack/blockstack.js/compare/v1.4.1-alpha.0...v1.4.1) (2021-04-20) + +**Note:** Version bump only for package @stacks/stacking + + + + + +## [1.3.5](https://github.com/blockstack/blockstack.js/compare/v1.3.4...v1.3.5) (2021-03-26) + +**Note:** Version bump only for package @stacks/stacking + + + + + +## [1.3.4](https://github.com/blockstack/blockstack.js/compare/v1.3.3...v1.3.4) (2021-03-18) + + +### Features + +* export stacking/utils functions ([24c7314](https://github.com/blockstack/blockstack.js/commit/24c73148afafceb5be9e172a8bc325e1ad54a800)) + + +### Reverts + +* Revert "v1.4.0" ([4356ddb](https://github.com/blockstack/blockstack.js/commit/4356ddbc8d83a83c97efaf6d8d1a7abefbc4f6d9)) + + + + + +## [1.3.3](https://github.com/blockstack/blockstack.js/compare/v1.3.2...v1.3.3) (2021-03-18) + + +### Bug Fixes + +* [#973](https://github.com/blockstack/blockstack.js/issues/973) stacking lib only allow p2pkh and p2sh btc addresses ([af00bd5](https://github.com/blockstack/blockstack.js/commit/af00bd5f315a4877f6af0fd71e6373d664afbe6a)) + + + + + +## [1.3.2](https://github.com/blockstack/blockstack.js/compare/v1.3.1...v1.3.2) (2021-03-11) + +**Note:** Version bump only for package @stacks/stacking + + + + + +## [1.3.1](https://github.com/blockstack/blockstack.js/compare/v1.3.0...v1.3.1) (2021-03-10) + +**Note:** Version bump only for package @stacks/stacking + + + + + +# [1.3.0](https://github.com/blockstack/blockstack.js/compare/v1.2.4...v1.3.0) (2021-03-08) + +**Note:** Version bump only for package @stacks/stacking + + + + + +## [1.2.4](https://github.com/blockstack/blockstack.js/compare/v1.2.3...v1.2.4) (2021-02-26) + +**Note:** Version bump only for package @stacks/stacking + + + + + +## [1.2.3](https://github.com/blockstack/blockstack.js/compare/v1.2.2...v1.2.3) (2021-02-25) + + +### Bug Fixes + +* don't multiply with cycleDuration ([a6fab4e](https://github.com/blockstack/blockstack.js/commit/a6fab4e5c3038cf4eaa7bd997b7d4c5104ca6858)) +* getDelegateStxOptions ([42eea7e](https://github.com/blockstack/blockstack.js/commit/42eea7ec9da23fae67ea8499e0db51665acffe0e)) +* prettier ([f09f446](https://github.com/blockstack/blockstack.js/commit/f09f4462d887f3dc9684d0d861e8a56c44fb88fe)) diff --git a/packages/sbtc/README.md b/packages/sbtc/README.md new file mode 100644 index 000000000..112d912fe --- /dev/null +++ b/packages/sbtc/README.md @@ -0,0 +1,667 @@ +# @stacks/stacking [![npm](https://img.shields.io/npm/v/@stacks/stacking?color=red)](https://www.npmjs.com/package/@stacks/stacking) + +Library for PoX Stacking. + +> **Note**: [Not all methods](https://stacks.js.org/classes/_stacks_stacking.StackingClient#:~:text=methods%20-%20pox-2) are available before the 2.1 fork. These will throw if used on a <2.1 chain. + +## Installation + +```shell +npm install @stacks/stacking +``` + +- [Initialization](#initialization) +- [Stack STX](#stack-stx) + - [Check stacking eligibility](#check-stacking-eligibility) + - [Broadcast the stacking transaction](#broadcast-the-stacking-transaction) + - [Extend stacking](#extend-stacking) + - [Increase amount stacked](#increase-amount-stacked) +- [Client helpers](#client-helpers) + - [Will Stacking be executed in the next cycle?](#will-stacking-be-executed-in-the-next-cycle) + - [How long (in seconds) is a Stacking cycle?](#how-long-in-seconds-is-a-stacking-cycle) + - [How much estimated time is left (in seconds) to submit a stacking transaction for the upcoming reward cycle?](#how-much-estimated-time-is-left-in-seconds-to-submit-a-stacking-transaction-for-the-upcoming-reward-cycle) + - [Does account have sufficient STX to meet minimum threshold?](#does-account-have-sufficient-stx-to-meet-minimum-threshold) + - [Get PoX info](#get-pox-info) + - [Get Stacks node info](#get-stacks-node-info) + - [Get account balance](#get-account-balance) + - [Get account balance locked](#get-account-balance-locked) + - [Get account balances (from API)](#get-account-balances-from-api) + - [Get account stacking status](#get-account-stacking-status) + - [Get PoX operation info (current period and PoX contract versions)](#get-pox-operation-info-current-period-and-pox-contract-versions) +- [Delegated stacking](#delegated-stacking) + - [Stacking in a pool](#stacking-in-a-pool) + - [Delegate STX](#delegate-stx) + - [Revoke delegation](#revoke-delegation) + - [Operating a pool / Stacking for others](#operating-a-pool--stacking-for-others) + - [Stack delegated STX](#stack-delegated-stx) + - [Extend delegated STX](#extend-delegated-stx) + - [Increase delegated STX](#increase-delegated-stx) + - [Commit to stacking](#commit-to-stacking) + - [Increase existing commitment](#increase-existing-commitment) + - [Pool helpers](#pool-helpers) + - [Get burnchain rewards](#get-burnchain-rewards) + - [Get burnchain rewards total](#get-burnchain-rewards-total) + - [Get burnchain reward holders](#get-burnchain-reward-holders) + - [Get reward set by index](#get-reward-set-by-index) + +## Initialization + +Initialize a `StackingClient` to interact with the Stacking contract. + +> **Note:** The `StackingClient` sets its transactions `AnchorMode` to `Any` by default. + +```typescript +import { StacksTestnet, StacksMainnet } from '@stacks/network'; +import { StackingClient } from '@stacks/stacking'; + +// for mainnet: const network = new StacksMainnet(); +const network = new StacksTestnet(); +// the stacks STX address +const address = 'ST3XKKN4RPV69NN1PHFDNX3TYKXT7XPC4N8KC1ARH'; +const client = new StackingClient(address, network); +``` + +## Stack STX + +### Check stacking eligibility + +```typescript +// a BTC address for reward payouts +const poxAddress = 'mvuYDknzDtPgGqm2GnbAbmGMLwiyW3AwFP'; +// number cycles to stack +const cycles = 3; + +// Refer to initialization section to create client instance +const stackingEligibility = await client.canStack({ poxAddress, cycles }); + +// { +// eligible: false, +// reason: 'ERR_STACKING_INVALID_LOCK_PERIOD', +// } +``` + +### Broadcast the stacking transaction + +```typescript +// a BTC address for reward payouts +const poxAddress = 'mvuYDknzDtPgGqm2GnbAbmGMLwiyW3AwFP'; +// number cycles to stack +const cycles = 3; +// how much to stack, in microSTX +const amountMicroStx = 100000000000n; +// private key for transaction signing +const privateKey = 'd48f215481c16cbe6426f8e557df9b78895661971d71735126545abddcd5377001'; +// block height at which to stack +const burnBlockHeight = 2000; + +// Refer to initialization section to create client instance +const stackingResults = await client.stack({ + amountMicroStx, + poxAddress, + cycles, + privateKey, + burnBlockHeight, +}); + +// { +// txid: '0xf6e9dbf6a26c1b73a14738606cb2232375d1b440246e6bbc14a45b3a66618481', +// } +``` + +### Extend stacking + +Extends previously stacked funds without cooldown. + +```typescript +// number cycles to extend stacking by +const extendCycles = 3; +// a BTC address for reward payouts +const poxAddress = 'mvuYDknzDtPgGqm2GnbAbmGMLwiyW3AwFP'; +// private key for transaction signing +const privateKey = 'd48f215481c16cbe6426f8e557df9b78895661971d71735126545abddcd5377001'; + +const extendResults = await client.stackExtend({ + extendCycles, + poxAddress, + privateKey, +}); + +// { +// txid: '0xf6e9dbf6a26c1b73a14738606cb2232375d1b440246e6bbc14a45b3a66618481', +// } +``` + +### Increase amount stacked + +Increases the amount of funds stacked/locked after previously stacking. + +```typescript +// how much to increase by, in microSTX +const increaseBy = 3000000; +// private key for transaction signing +const privateKey = 'd48f215481c16cbe6426f8e557df9b78895661971d71735126545abddcd5377001'; + +const increaseResults = await client.stackIncrease({ + increaseBy, + privateKey, +}); + +// { +// txid: '0xf6e9dbf6a26c1b73a14738606cb2232375d1b440246e6bbc14a45b3a66618481', +// } +``` + +## Client helpers + +### Will Stacking be executed in the next cycle? + +```typescript +const stackingEnabledNextCycle = await client.isStackingEnabledNextCycle(); + +// true / false +``` + +### How long (in seconds) is a Stacking cycle? + +```typescript +const cycleDuration = await client.getCycleDuration(); + +// 120 +``` + +### How much estimated time is left (in seconds) to submit a stacking transaction for the upcoming reward cycle? + +```typescript +const seconds = await client.getSecondsUntilStackingDeadline(); + +// 600000 +``` + +### Does account have sufficient STX to meet minimum threshold? + +```typescript +const hasMinStxAmount = await client.hasMinimumStx(); + +// true / false +``` + +### Get PoX info + +```typescript +const poxInfo = await client.getPoxInfo(); + +// { +// contract_id: 'ST000000000000000000002AMW42H.pox', +// first_burnchain_block_height: 0, +// min_amount_ustx: 83335083333333, +// prepare_cycle_length: 30, +// rejection_fraction: 3333333333333333, +// reward_cycle_id: 17, +// reward_cycle_length: 120, +// rejection_votes_left_required: 0, +// total_liquid_supply_ustx: 40000840000000000 +// } +``` + +### Get Stacks node info + +```typescript +const coreInfo = await client.getCoreInfo(); + +// { +// peer_version: 385875968, +// pox_consensus: 'bb88a6e6e65fa7c974d3f6e91a941d05cc3dff8e', +// burn_block_height: 2133, +// stable_pox_consensus: '2284451c3e623237def1f8caed1c11fa46b6f0cc', +// stable_burn_block_height: 2132, +// server_version: 'blockstack-core 0.0.1 => 23.0.0.0 (HEAD:a4deb7a+, release build, linux [x86_64])', +// network_id: 2147483648, +// parent_network_id: 3669344250, +// stacks_tip_height: 1797, +// stacks_tip: '016df36c6a154cb6114c469a28cc0ce8b415a7af0527f13f15e66e27aa480f94', +// stacks_tip_consensus_hash: 'bb88a6e6e65fa7c974d3f6e91a941d05cc3dff8e', +// unanchored_tip: '6b93d2c62fc07cf44302d4928211944d2debf476e5c71fb725fb298a037323cc', +// exit_at_block_height: null +// } +``` + +### Get account balance + +```typescript +const responseBalanceInfo = await client.getAccountBalance(); + +// 800000000000 +``` + +### Get account balance locked + +```typescript +const responseBalanceLockedInfo = await client.getAccountBalanceLocked(); + +// 40000000000 +``` + +### Get account balances (from API) + +```typescript +const responseBalancesInfo = await client.getAccountExtendedBalances(); + +// { +// stx: { +// balance: '1000000', +// total_sent: '0', +// total_received: '1000000', +// lock_tx_id: '0xec94e7d20af8979b44d17a0520c126bf742b999a0fc7ddbcbe0ab21b228ecc8c', +// locked: '50000', +// lock_height: 100, +// burnchain_lock_height: 100, +// burnchain_unlock_height: 200, +// }, +// fungible_tokens: {}, +// non_fungible_tokens: {}, +// } +``` + +### Get account stacking status + +```typescript +const stackingStatus = await client.getStatus(); + +// { +// stacked: true, +// details: { +// first_reward_cycle: 18, +// lock_period: 10, +// unlock_height: 3020, +// pox_address: { +// version: '00', +// hashbytes: '05cf52a44bf3e6829b4f8c221cc675355bf83b7d' +// } +// } +// } +``` + +### Get PoX operation info (current period and PoX contract versions) + +```typescript +const poxOperationInfo = await client.getPoxOperationInfo(); + +// { +// period: 'Period3', +// pox1: { +// contract_id: 'ST000000000000000000002AMW42H.pox', +// activation_burnchain_block_height: 0, +// first_reward_cycle_id: 0, +// }, +// pox2: { +// contract_id: 'ST000000000000000000002AMW42H.pox-2', +// activation_burnchain_block_height: 120, +// first_reward_cycle_id: 25, +// }, +// } +``` + +## Delegated stacking + +These are the methods for creating the required transactions for delegated stacking: + +- [Stacking in a pool](#stacking-in-a-pool) + - [`.delegateStx` Delegate STX](#delegate-stx) + - [`.revokeDelegateStx` Revoke delegation](#revoke-delegation) +- [Operating a pool](#operating-a-pool) + - [`.delegateStackStx` Stack delegated STX](#stack-delegated-stx) + - [`.stackAggregationCommit` Commit to stacking](#commit-to-stacking) + +```mermaid +sequenceDiagram + User->>Stacks Blockchain: tx: `delegateStx`
Delegate funds to pool,
by pool's STX address + Stacks Blockchain-->Pool Operator: Monitored by + Pool Operator->>Stacks Blockchain: tx: `delegateStackStx`
Lock delegated funds + Pool Operator->>Stacks Blockchain: tx: `stackAggregationCommit`
Commit stacking for each cycle +``` + +### Stacking in a pool + +If you are the account owner ("stacker"), you can delegate or revoke delegation rights. + +#### Delegate STX + +```typescript +// STX address of the pool/pool +const delegateTo = 'ST2MCYPWTFMD2MGR5YY695EJG0G1R4J2BTJPRGM7H'; +// burn height at which the delegation relationship should be revoked (optional) +const untilBurnBlockHeight = 5000; +// how much to stack, in microSTX +const amountMicroStx = 100000000000n; +// private key for transaction signing +const privateKey = 'd48f215481c16cbe6426f8e557df9b78895661971d71735126545abddcd5377001'; + +const delegetateResponse = await client.delegateStx({ + amountMicroStx, + delegateTo, + untilBurnBlockHeight, // optional + privateKey, +}); + +// { +// txid: '0xf6e9dbf6a26c1b73a14738606cb2232375d1b440246e6bbc14a45b3a66618481', +// } +``` + +#### Revoke delegation + +```typescript +// private key for transaction signing +const privateKey = 'd48f215481c16cbe6426f8e557df9b78895661971d71735126545abddcd5377001'; + +const revokeResponse = await client.revokeDelegateStx(privateKey); + +// { +// txid: '0xf6e9dbf6a26c1b73a14738606cb2232375d1b440246e6bbc14a45b3a66618481', +// } +``` + +### Operating a pool / Stacking for others + +If you are a pool operator (or wish to stack with someone else's funds), you can stack ("lock up") tokens for your users and commit to stacking participation for upcoming reward cycles. +These users need to first "delegate" some or all of their funds to you (the "delegator"). +The following examples refer to the "delegator" as pool, but in practice a delegator can also stack for only single or few individuals. +Even a group of friends could stack together and share a multi-sig BTC wallet for payouts. + +#### Stack delegated STX + +Stack STX, which have been previously delegated to the pool. +This step only locks the funds (partial stacking). +The pool operator will also need to ["commit"](#commit-to-stacking) to a reward cycle. + +```typescript +import { getNonce } from '@stacks/transactions'; +import { StacksTestnet, StacksMainnet } from '@stacks/network'; +import { StackingClient } from '@stacks/stacking'; + +// for mainnet: const network = new StacksMainnet(); +const network = new StacksTestnet(); +// the stacks STX address +const address = 'ST3XKKN4RPV69NN1PHFDNX3TYKXT7XPC4N8KC1ARH'; +// pools would initiate a different client +const poolAddress = 'ST22X605P0QX2BJC3NXEENXDPFCNJPHE02DTX5V74'; +// pool private key for transaction signing +const poolPrivateKey = 'd48f215481c16cbe6426f8e557df9b78895661971d71735126545abddcd5377001'; +// the BTC address for reward payouts +const poolBtcAddress = 'msiYwJCvXEzjgq6hDwD9ueBka6MTfN962Z'; +// how much to stack, in microSTX +const amountMicroStx = 100000000000n; +// block height at which to stack +const burnBlockHeight = 2000; +// number cycles to stack +const cycles = 3; +// if you call this method multiple times in the same block, you need to increase the nonce manually +let nonce = await getNonce(poolAddress, network); +nonce = nonce + 1n; + +const poolClient = new StackingClient(poolAddress, network); + +const delegetateStackResponses = await poolClient.delegateStackStx({ + stacker: address, + amountMicroStx, + poxAddress: poolBtcAddress, + burnBlockHeight, + cycles, + privateKey: poolPrivateKey, + nonce, // optional +}); + +// { +// txid: '0xf6e9dbf6a26c1b73a14738606cb2232375d1b440246e6bbc14a45b3a66618481', +// } +``` + +#### Extend delegated STX + +Extend stacking of STX previously delegated to the pool. + +```typescript +import { getNonce } from '@stacks/transactions'; +import { StacksTestnet, StacksMainnet } from '@stacks/network'; +import { StackingClient } from '@stacks/stacking'; + +// for mainnet: const network = new StacksMainnet(); +const network = new StacksTestnet(); +// the stacks STX address +const address = 'ST3XKKN4RPV69NN1PHFDNX3TYKXT7XPC4N8KC1ARH'; +// pools would initiate a different client +const poolAddress = 'ST22X605P0QX2BJC3NXEENXDPFCNJPHE02DTX5V74'; +// pool private key for transaction signing +const poolPrivateKey = 'd48f215481c16cbe6426f8e557df9b78895661971d71735126545abddcd5377001'; +// the BTC address for reward payouts +const poolBtcAddress = 'msiYwJCvXEzjgq6hDwD9ueBka6MTfN962Z'; +// number of cycles to extend by +const extendCount = 3; +// if you call this method multiple times in the same block, you need to increase the nonce manually +let nonce = await getNonce(poolAddress, network); +nonce = nonce + 1n; + +const poolClient = new StackingClient(poolAddress, network); + +const delegetateExtendResponses = await poolClient.delegateStackExtend({ + extendCount, + stacker: address, + poxAddress: poolBtcAddress, + privateKey: poolPrivateKey, + nonce, // optional +}); + +// { +// txid: '0xf6e9dbf6a26c1b73a14738606cb2232375d1b440246e6bbc14a45b3a66618481', +// } +``` + +#### Increase delegated STX + +Increase the locked amount of delegated STX stacked. + +```typescript +import { getNonce } from '@stacks/transactions'; +import { StacksTestnet, StacksMainnet } from '@stacks/network'; +import { StackingClient } from '@stacks/stacking'; + +// for mainnet: const network = new StacksMainnet(); +const network = new StacksTestnet(); +// the stacks STX address +const address = 'ST3XKKN4RPV69NN1PHFDNX3TYKXT7XPC4N8KC1ARH'; +// pools would initiate a different client +const poolAddress = 'ST22X605P0QX2BJC3NXEENXDPFCNJPHE02DTX5V74'; +// pool private key for transaction signing +const poolPrivateKey = 'd48f215481c16cbe6426f8e557df9b78895661971d71735126545abddcd5377001'; +// the BTC address for reward payouts +const poolBtcAddress = 'msiYwJCvXEzjgq6hDwD9ueBka6MTfN962Z'; +// amount to increase by, in microSTX +const increaseBy = 3; +// if you call this method multiple times in the same block, you need to increase the nonce manually +let nonce = await getNonce(poolAddress, network); +nonce = nonce + 1n; + +const poolClient = new StackingClient(poolAddress, network); + +const delegetateIncreaseResponses = await poolClient.delegateStackIncrease({ + increaseBy, + stacker: address, + poxAddress: poolBtcAddress, + privateKey: poolPrivateKey, + nonce, // optional +}); + +// { +// txid: '0xf6e9dbf6a26c1b73a14738606cb2232375d1b440246e6bbc14a45b3a66618481', +// } +``` + +#### Commit to stacking + +The result of this commit transaction will contain the index of the pools reward set entry. + +```typescript +// reward cycle id to commit to +const rewardCycle = 12; +// the BTC address for reward payouts +const poolBtcAddress = 'msiYwJCvXEzjgq6hDwD9ueBka6MTfN962Z'; +// Private key +const privateKeyDelegate = 'd48f215481c16cbe6426f8e557df9b78895661971d71735126545abddcd5377001'; + +const delegetateCommitResponse = await poolClient.stackAggregationCommitIndexed({ + rewardCycle, + poxAddress: poolBtcAddress, + privateKey: privateKeyDelegate, +}); + +// { +// txid: '0xf6e9dbf6a26c1b73a14738606cb2232375d1b440246e6bbc14a45b3a66618481', +// } +``` + +#### Increase existing commitment + +The result of this commit transaction will contain the index of the pools reward set entry. + +```typescript +// reward cycle id to commit to +const rewardCycle = 12; +// reward set entry index +const rewardIndex = 3; +// the BTC address for reward payouts +const poolBtcAddress = 'msiYwJCvXEzjgq6hDwD9ueBka6MTfN962Z'; +// Private key +const privateKeyDelegate = 'd48f215481c16cbe6426f8e557df9b78895661971d71735126545abddcd5377001'; + +const delegetateIncreaseResponse = await poolClient.stackAggregationIncrease({ + rewardCycle, + rewardIndex, + poxAddress: poolBtcAddress, + privateKey: privateKeyDelegate, +}); + +// { +// txid: '0xf6e9dbf6a26c1b73a14738606cb2232375d1b440246e6bbc14a45b3a66618481', +// } +``` + +#### Pool helpers + +##### Get burnchain rewards + +```typescript +import { StacksTestnet, StacksMainnet } from '@stacks/network'; +import { StackingClient } from '@stacks/stacking'; + +const address = 'myfTfju9XSMRusaY2qTitSEMSchsWRA441'; +// for mainnet: const network = new StacksMainnet(); +const network = new StacksTestnet(); +const client = new StackingClient(address, network); +const options = { limit: 2, offset: 0 }; + +const rewards = await client.getRewardsForBtcAddress(options); + +// { +// limit: 2, +// offset: 0, +// results: [ +// { +// canonical: true, +// burn_block_hash: '0x000000000000002083ca8303a2262d09a824cecb34b78f13a04787e4f05441d3', +// burn_block_height: 2004622, +// burn_amount: '0', +// reward_recipient: 'myfTfju9XSMRusaY2qTitSEMSchsWRA441', +// reward_amount: '20000', +// reward_index: 0 +// }, +// { +// canonical: true, +// burn_block_hash: '0x000000000000002f72213de621f9daf60d76aed3902a811561d06373b2fa6123', +// burn_block_height: 2004621, +// burn_amount: '0', +// reward_recipient: 'myfTfju9XSMRusaY2qTitSEMSchsWRA441', +// reward_amount: '20000', +// reward_index: 0 +// } +// ] +// }; +``` + +##### Get burnchain rewards total + +```typescript +import { StacksTestnet, StacksMainnet } from '@stacks/network'; +import { StackingClient } from '@stacks/stacking'; + +const address = 'myfTfju9XSMRusaY2qTitSEMSchsWRA441'; +// for mainnet: const network = new StacksMainnet(); +const network = new StacksTestnet(); +const client = new StackingClient(address, network); + +const total = await client.getRewardsTotalForBtcAddress(); +// { +// reward_recipient: 'myfTfju9XSMRusaY2qTitSEMSchsWRA441', +// reward_amount: '0' +// } +``` + +##### Get burnchain reward holders + +```typescript +import { StacksTestnet, StacksMainnet } from '@stacks/network'; +import { StackingClient } from '@stacks/stacking'; + +const address = 'myfTfju9XSMRusaY2qTitSEMSchsWRA441'; +// for mainnet: const network = new StacksMainnet(); +const network = new StacksTestnet(); +const client = new StackingClient(address, network); +const options = { limit: 2, offset: 0 }; + +const rewardHolders = await client.getRewardHoldersForBtcAddress(options); +// { +// limit: 2, +// offset: 0, +// total: 46, +// results: [ +// { +// canonical: true, +// burn_block_hash: '0x000000000000002083ca8303a2262d09a824cecb34b78f13a04787e4f05441d3', +// burn_block_height: 2004622, +// address: 'myfTfju9XSMRusaY2qTitSEMSchsWRA441', +// slot_index: 1 +// }, +// { +// canonical: true, +// burn_block_hash: '0x000000000000002083ca8303a2262d09a824cecb34b78f13a04787e4f05441d3', +// burn_block_height: 2004622, +// address: 'myfTfju9XSMRusaY2qTitSEMSchsWRA441', +// slot_index: 0 +// } +// ] +// }; +``` + +##### Get reward set by index + +```typescript +import { StacksTestnet, StacksMainnet } from '@stacks/network'; +import { StackingClient } from '@stacks/stacking'; + +const address = 'myfTfju9XSMRusaY2qTitSEMSchsWRA441'; +// for mainnet: const network = new StacksMainnet(); +const network = new StacksTestnet(); +const client = new StackingClient(address, network); + +const rewardSetItem = await client.getRewardSet({ + rewardCyleId: 49, + rewardSetIndex: 3, +}); + +// { +// pox_address: { +// version: 0, +// hashbytes: [ 67, 89, 107, 83, 134, 244, 102, 134, 62, 37, 101, 141, 223, 148, 189, 15, 173, 171, 0, 72 ] +// }, +// total_ustx: 1875230000000000 +// } +``` diff --git a/packages/sbtc/jest.config.js b/packages/sbtc/jest.config.js new file mode 100644 index 000000000..fe8e05183 --- /dev/null +++ b/packages/sbtc/jest.config.js @@ -0,0 +1,3 @@ +const makeJestConfig = require('../../configs/jestConfig'); + +module.exports = makeJestConfig(__dirname); diff --git a/packages/sbtc/package.json b/packages/sbtc/package.json new file mode 100644 index 000000000..3a9fea4db --- /dev/null +++ b/packages/sbtc/package.json @@ -0,0 +1,51 @@ +{ + "name": "@stacks/sbtc", + "version": "6.7.0", + "description": "Library for sBTC.", + "license": "MIT", + "author": "Hiro Systems PBC (https://hiro.so)", + "homepage": "https://hiro.so/stacks-js", + "scripts": { + "build": "npm run clean && npm run build:cjs && npm run build:esm && npm run build:umd", + "build:cjs": "tsc -b tsconfig.build.json", + "build:esm": "tsc -p tsconfig.build.json --module ES6 --outDir ./dist/esm", + "build:umd": "NODE_OPTIONS=--max-old-space-size=8192 webpack --config webpack.config.js", + "clean": "rimraf dist && tsc -b tsconfig.build.json --clean", + "pack": "npm pack", + "prepublishOnly": "npm run test && NODE_ENV=production npm run build", + "start": "tsc -b tsconfig.build.json --watch --verbose", + "test": "jest", + "test:watch": "jest --watch --coverage=false", + "typecheck": "tsc --noEmit", + "typecheck:watch": "npm run typecheck -- --watch" + }, + "dependencies": { + "@stacks/encryption": "^6.7.0", + "@stacks/transactions": "^6.7.0" + }, + "devDependencies": { + "jest-fetch-mock": "^3.0.3", + "rimraf": "^3.0.2" + }, + "sideEffects": false, + "typings": "dist/index.d.ts", + "main": "dist/index.js", + "module": "dist/esm/index.js", + "umd:main": "dist/umd/index.js", + "unpkg": "dist/umd/index.js", + "files": [ + "dist", + "src" + ], + "keywords": [ + "sBTC", + "Stacks" + ], + "repository": { + "type": "git", + "url": "git+https://github.com/hirosystems/stacks.js.git" + }, + "bugs": { + "url": "https://github.com/hirosystems/stacks.js/issues" + } +} diff --git a/packages/sbtc/src/index.ts b/packages/sbtc/src/index.ts new file mode 100644 index 000000000..8187e2eea --- /dev/null +++ b/packages/sbtc/src/index.ts @@ -0,0 +1,37 @@ +interface MintOptions { + amount: number; // (amount uint) + destination: string; // (destination principal) + depositTxid: string; // (deposit-txid (buff 32)) + burnChainHeight: number; // (burn-chain-height uint) + merkleProof: string[]; // (merkle-proof (list 14 (buff 32))) + txIndex: number; // (tx-index uint) + treeDepth: number; // (tree-depth uint) + blockHeader: string; // (block-header (buff 80))) +} + +export class sBTCClient { + constructor(public network: StacksNetwork) {} + + /** + + */ + async mint(options: MintOptions): Promise { + const [contractAddress, contractName] = this.parseContractId(options?.contractId); + const result = await callReadOnlyFunction({ + network: this.network, + senderAddress: this.address, + contractAddress, + contractName, + functionArgs: [uintCV(options.rewardCyleId), uintCV(options.rewardSetIndex)], + functionName: 'get-reward-set-pox-address', + }); + + return unwrapMap(result as OptionalCV, tuple => ({ + pox_address: { + version: ((tuple.data['pox-addr'] as TupleCV).data['version'] as BufferCV).buffer, + hashbytes: ((tuple.data['pox-addr'] as TupleCV).data['hashbytes'] as BufferCV).buffer, + }, + total_ustx: (tuple.data['total-ustx'] as UIntCV).value, + })); + } +} diff --git a/packages/sbtc/tsconfig.build.json b/packages/sbtc/tsconfig.build.json new file mode 100644 index 000000000..8d57d415d --- /dev/null +++ b/packages/sbtc/tsconfig.build.json @@ -0,0 +1,27 @@ +{ + "extends": "../../tsconfig.build.json", + "compilerOptions": { + "noEmit": false, + "outDir": "./dist", + "rootDir": "./src", + "tsBuildInfoFile": "./tsconfig.build.tsbuildinfo", + "composite": true + }, + "references": [ + { + "path": "../common/tsconfig.build.json" + }, + { + "path": "../encryption/tsconfig.build.json" + }, + { + "path": "../network/tsconfig.build.json" + }, + { + "path": "../transactions/tsconfig.build.json" + } + ], + "include": [ + "src/**/*" + ] +} diff --git a/packages/sbtc/tsconfig.json b/packages/sbtc/tsconfig.json new file mode 100644 index 000000000..006aa1705 --- /dev/null +++ b/packages/sbtc/tsconfig.json @@ -0,0 +1,7 @@ +{ + "extends": "../../tsconfig.json", + "include": ["src/**/*", "tests/**/*"], + "typedocOptions": { + "entryPoints": ["src/index.ts"] + } +} diff --git a/packages/sbtc/webpack.config.js b/packages/sbtc/webpack.config.js new file mode 100644 index 000000000..a41c22f84 --- /dev/null +++ b/packages/sbtc/webpack.config.js @@ -0,0 +1,7 @@ +const config = require('../../configs/webpack.config.js'); + +config.output.library.name = 'StacksStacking'; + +config.resolve.fallback = {}; + +module.exports = config; diff --git a/packages/transactions/tests/types.test.ts b/packages/transactions/tests/types.test.ts index 0ff906afc..643d917fd 100644 --- a/packages/transactions/tests/types.test.ts +++ b/packages/transactions/tests/types.test.ts @@ -55,6 +55,7 @@ test('Length prefixed list serialization and deserialization', () => { expect(deserialized.values.length).toBe(addressList.length); for (let index = 0; index < addressList.length; index++) { + // todo: toString() doesn't make sense FIX expect(deserialized.values[index].toString()).toBe(addressList[index].toString()); } }); From fa05cc1a71a617f4172ff6e0b4877bf3d93177af Mon Sep 17 00:00:00 2001 From: janniks Date: Thu, 21 Sep 2023 15:31:18 +0200 Subject: [PATCH 02/49] chore: wip --- package-lock.json | 125 ++++++++ packages/sbtc/package.json | 7 +- packages/sbtc/src/index.ts | 2 + packages/sbtc/src/transactions/constants.ts | 9 + packages/sbtc/src/transactions/deposit.ts | 310 ++++++++++++++++++++ packages/sbtc/src/tx.ts | 0 6 files changed, 452 insertions(+), 1 deletion(-) create mode 100644 packages/sbtc/src/transactions/constants.ts create mode 100644 packages/sbtc/src/transactions/deposit.ts create mode 100644 packages/sbtc/src/tx.ts diff --git a/package-lock.json b/package-lock.json index 645cb163d..088bae2b6 100644 --- a/package-lock.json +++ b/package-lock.json @@ -3428,6 +3428,28 @@ "node": ">=6 <7 || >=8" } }, + "node_modules/@noble/curves": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@noble/curves/-/curves-1.2.0.tgz", + "integrity": "sha512-oYclrNgRaM9SsBUBVbb8M6DTV7ZHRTKugureoYEncY5c65HOmRzvSiTE3y5CYaPYJA/GVkrhXEoF0M3Ya9PMnw==", + "dependencies": { + "@noble/hashes": "1.3.2" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/@noble/curves/node_modules/@noble/hashes": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.3.2.tgz", + "integrity": "sha512-MVC8EAQp7MvEcm30KWENFjgR+Mkmf+D189XJTkFIlwohU5hcBbn1ZkKq7KVTi2Hme3PMGF390DaL52beVrIihQ==", + "engines": { + "node": ">= 16" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, "node_modules/@noble/hashes": { "version": "1.1.5", "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.1.5.tgz", @@ -4245,6 +4267,39 @@ "@scure/base": "~1.1.0" } }, + "node_modules/@scure/btc-signer": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@scure/btc-signer/-/btc-signer-1.1.0.tgz", + "integrity": "sha512-kCX7WaaTJr0VZIXDvaY0wNZfzZoZuLnPz4G0qmKXN8bnNx5M86wb1cce9XrZcfzb0jrVAbZJqNpxmE1e7Ka2hA==", + "dependencies": { + "@noble/curves": "~1.2.0", + "@noble/hashes": "~1.3.1", + "@scure/base": "~1.1.3", + "micro-packed": "~0.3.2" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/@scure/btc-signer/node_modules/@noble/hashes": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.3.2.tgz", + "integrity": "sha512-MVC8EAQp7MvEcm30KWENFjgR+Mkmf+D189XJTkFIlwohU5hcBbn1ZkKq7KVTi2Hme3PMGF390DaL52beVrIihQ==", + "engines": { + "node": ">= 16" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/@scure/btc-signer/node_modules/@scure/base": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/@scure/base/-/base-1.1.3.tgz", + "integrity": "sha512-/+SgoRjLq7Xlf0CWuLHq2LUZeL/w65kfzAPG5NH9pcmBhs+nunQTn4gvdwgMTIXnt9b2C/1SeL2XiysZEyIC9Q==", + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, "node_modules/@sigstore/bundle": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/@sigstore/bundle/-/bundle-1.0.0.tgz", @@ -4394,6 +4449,10 @@ "resolved": "packages/profile", "link": true }, + "node_modules/@stacks/sbtc": { + "resolved": "packages/sbtc", + "link": true + }, "node_modules/@stacks/stacking": { "resolved": "packages/stacking", "link": true @@ -16501,6 +16560,20 @@ "node": ">= 0.6" } }, + "node_modules/micro-packed": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/micro-packed/-/micro-packed-0.3.2.tgz", + "integrity": "sha512-D1Bq0/lVOzdxhnX5vylCxZpdw5LylH7Vd81py0DfRsKUP36XYpwvy8ZIsECVo3UfnoROn8pdKqkOzL7Cd82sGA==", + "funding": [ + { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + ], + "dependencies": { + "@scure/base": "~1.1.1" + } + }, "node_modules/micromatch": { "version": "4.0.5", "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", @@ -23880,6 +23953,58 @@ "url": "https://github.com/sponsors/isaacs" } }, + "packages/sbtc": { + "name": "@stacks/sbtc", + "version": "6.7.0", + "license": "MIT", + "dependencies": { + "@noble/secp256k1": "^2.0.0", + "@scure/base": "^1.1.3", + "@scure/btc-signer": "^1.1.0", + "@stacks/encryption": "^6.7.0", + "@stacks/transactions": "^6.7.0", + "c32check": "^2.0.0", + "micro-packed": "^0.3.2" + }, + "devDependencies": { + "jest-fetch-mock": "^3.0.3", + "rimraf": "^3.0.2" + } + }, + "packages/sbtc/node_modules/@noble/secp256k1": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@noble/secp256k1/-/secp256k1-2.0.0.tgz", + "integrity": "sha512-rUGBd95e2a45rlmFTqQJYEFA4/gdIARFfuTuTqLglz0PZ6AKyzyXsEZZq7UZn8hZsvaBgpCzKKBJizT2cJERXw==", + "funding": [ + { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + ] + }, + "packages/sbtc/node_modules/@scure/base": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/@scure/base/-/base-1.1.3.tgz", + "integrity": "sha512-/+SgoRjLq7Xlf0CWuLHq2LUZeL/w65kfzAPG5NH9pcmBhs+nunQTn4gvdwgMTIXnt9b2C/1SeL2XiysZEyIC9Q==", + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "packages/sbtc/node_modules/rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "dev": true, + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, "packages/stacking": { "name": "@stacks/stacking", "version": "6.9.0", diff --git a/packages/sbtc/package.json b/packages/sbtc/package.json index 3a9fea4db..79b77acbd 100644 --- a/packages/sbtc/package.json +++ b/packages/sbtc/package.json @@ -20,8 +20,13 @@ "typecheck:watch": "npm run typecheck -- --watch" }, "dependencies": { + "@noble/secp256k1": "^2.0.0", + "@scure/base": "^1.1.3", + "@scure/btc-signer": "^1.1.0", "@stacks/encryption": "^6.7.0", - "@stacks/transactions": "^6.7.0" + "@stacks/transactions": "^6.7.0", + "c32check": "^2.0.0", + "micro-packed": "^0.3.2" }, "devDependencies": { "jest-fetch-mock": "^3.0.3", diff --git a/packages/sbtc/src/index.ts b/packages/sbtc/src/index.ts index 8187e2eea..350e99d94 100644 --- a/packages/sbtc/src/index.ts +++ b/packages/sbtc/src/index.ts @@ -1,3 +1,5 @@ +// PLACEHOLDER FILE + interface MintOptions { amount: number; // (amount uint) destination: string; // (destination principal) diff --git a/packages/sbtc/src/transactions/constants.ts b/packages/sbtc/src/transactions/constants.ts new file mode 100644 index 000000000..c10e68e85 --- /dev/null +++ b/packages/sbtc/src/transactions/constants.ts @@ -0,0 +1,9 @@ +export enum MagicBytes { + Mainnet = '5832', + Testnet = '5432', +} + +export enum OpCode { + PegIn = '3C', + PegOut = '3E', +} diff --git a/packages/sbtc/src/transactions/deposit.ts b/packages/sbtc/src/transactions/deposit.ts new file mode 100644 index 000000000..0bd68ff5a --- /dev/null +++ b/packages/sbtc/src/transactions/deposit.ts @@ -0,0 +1,310 @@ +import * as btc from '@scure/btc-signer'; +import * as secp from '@noble/secp256k1'; +import * as P from 'micro-packed'; +import { hex } from '@scure/base'; +import type { BridgeTransactionType, UTXO } from './types/sbtc_types.js'; +import { toStorable, buildDepositPayload, buildDepositPayloadOpReturn } from './payload_utils.js'; +import { addInputs, inputAmt } from './wallet_utils.js'; +import { MagicBytes as MagicBytes, MagicBytes, OPCodes, OpCode } from './constants.js'; +import { c32addressDecode } from 'c32check'; + +export const REVEAL_PAYMENT = 10001; // todo: is this const? +export const DUST = 500; // todo: double-check what this has to be set to + +const concat = P.concatBytes; + +interface BitcoinNetwork { + bech32: string; + pubKeyHash: number; + scriptHash: number; + wif: number; +} + +export const NETWORK: BitcoinNetwork = btc.NETWORK; +export const TEST_NETWORK: BitcoinNetwork = btc.TEST_NETWORK; + +interface DepositOpts { + network?: BitcoinNetwork; + amount: number; + btcFeeRates: any; + addressInfo: any; + stacksAddress: string; + sbtcWalletAddress: string; + cardinal: string; + userPaymentPubKey: string; +} + +export function buildSBtcDepositBtcPayload({ + network: net, + address, +}: { + network: BitcoinNetwork; + address: string; +}): Uint8Array { + const magicBytes = + net.bech32 === 'tb' ? hex.decode(MagicBytes.Testnet) : hex.decode(MagicBytes.Mainnet); + const opCodeBytes = hex.decode(OpCode.PegIn); + return concat(magicBytes, opCodeBytes, stacksAddressBytes(address)); +} + +function stacksAddressBytes(address: string): Uint8Array { + const [addr, contractName] = address.split('.'); + const [version, hash] = c32addressDecode(addr); + const versionBytes = hex.decode(version.toString(16)); + const hashBytes = hex.decode(hash); + + return concat(versionBytes, hashBytes, lpContractNameBytes(contractName)); +} + +function lpContractNameBytes(contractName?: string): Uint8Array { + if (!contractName) return Uint8Array.from([0]); // empty + + const cnameBuf = new TextEncoder().encode(contractName); + const cnameLen = cnameBuf.byteLength; + if (cnameBuf.length > 40) throw new Error('Contract name is too long - max 40 characters'); + return concat(cnameLen, cnameBuf); +} + +function optionalLengthPrefixed( + something: T | null | undefined, + fn: (something: T) => Uint8Array, + maxLength?: number = -1 +): Uint8Array { + if (!something) return Uint8Array.from([0]); // empty + + const bytes = fn(something); + const length = bytes.byteLength; + if (maxLength >= 0 && bytes.length > maxLength) { + throw new Error(`ByteLength exceeds maximum length of ${maxLength}`); + } + return concat(hex.length, bytes); +} + +/** + * + */ +export function buildOpReturnDepositTransaction({ + network = NETWORK, + amount, + btcFeeRates, + addressInfo, + stacksAddress, + sbtcWalletAddress, + cardinal, + userPaymentPubKey, +}: DepositOpts) { + opts.network = opts.network ?? NETWORK; // mainnet by default + const data = buildDepositPayloadOpReturn(network, stacksAddress); + const txFees = calculateDepositFees( + network, + false, + amount, + btcFeeRates.feeInfo, + addressInfo, + sbtcWalletAddress, + data + ); + const tx = new btc.Transaction({ + allowUnknowInput: true, + allowUnknowOutput: true, + allowUnknownInputs: true, + allowUnknownOutputs: true, + }); + // no reveal fee for op_return + addInputs(network, amount, 0, tx, false, addressInfo.utxos, userPaymentPubKey); + tx.addOutput({ script: btc.Script.encode(['RETURN', data]), amount: BigInt(0) }); + tx.addOutputAddress(sbtcWalletAddress, BigInt(amount), net); + const changeAmount = inputAmt(tx) - (amount + txFees[1]); + if (changeAmount > 0) tx.addOutputAddress(cardinal, BigInt(changeAmount), net); + return tx; +} + +/** + * @param network + * @param amount the amount to deposit plus the reveal transaction gas fee + * @param btcFeeRates current rates + * @param addressInfo the utxos to spend from + * @param commitTxAddress the commitment address - contains the taproot data and the payload + * @param cardinal the change address + * @param userPaymentPubKey pubkey needed to spend script hash inputs + * @returns transaction object + */ +export function buildOpDropDepositTransaction( + network: string, + amount: number, + btcFeeRates: any, + addressInfo: any, + commitTxAddress: string, + cardinal: string, + userPaymentPubKey: string +) { + const net = network === 'testnet' ? btc.TEST_NETWORK : btc.NETWORK; + const txFees = calculateDepositFees( + network, + true, + amount, + btcFeeRates.feeInfo, + addressInfo, + commitTxAddress, + undefined + ); + const tx = new btc.Transaction({ + allowUnknowInput: true, + allowUnknowOutput: true, + allowUnknownInputs: true, + allowUnknownOutputs: true, + }); + addInputs(network, amount, REVEAL_PAYMENT, tx, false, addressInfo.utxos, userPaymentPubKey); + tx.addOutputAddress(commitTxAddress, BigInt(amount), net); + const changeAmount = inputAmt(tx) - (amount + txFees[1]); + if (changeAmount > 0) tx.addOutputAddress(cardinal, BigInt(changeAmount), net); + return tx; +} + +export function getOpReturnDepositRequest( + network: string, + amount: number, + commitKeys: any, + stacksAddress: string, + sbtcWalletAddress: string, + cardinal: string +): BridgeTransactionType { + if (!stacksAddress) throw new Error('Stacks address missing'); + const data = buildDepositPayloadOpReturn(network, stacksAddress); + //console.log('reclaimAddr.pubkey: ' + commitKeys.reclaimPubKey) + //console.log('revealAddr.pubkey: ' + commitKeys.revealPubKey) + + const req: BridgeTransactionType = { + originator: stacksAddress, + fromBtcAddress: cardinal, + revealPub: commitKeys.revealPubKey, + reclaimPub: commitKeys.reclaimPubKey, + status: 1, + tries: 0, + mode: 'op_return', + amount: amount, + requestType: 'deposit', + wallet: hex.encode(data), + stacksAddress: stacksAddress, + sbtcWalletAddress: sbtcWalletAddress, + }; + return req; +} + +export function getOpDropDepositRequest( + network: string, + revealFee: number, + commitKeys: any, + stacksAddress: string, + sbtcWalletAddress: string, + cardinal: string +): BridgeTransactionType { + const net = network === 'testnet' ? btc.TEST_NETWORK : btc.NETWORK; + if (!stacksAddress) throw new Error('Address needed'); + //console.log('reclaimAddr.pubkey: ' + commitKeys.reclaimPubKey) + //console.log('revealAddr.pubkey: ' + commitKeys.revealPubKey) + + const data = buildData(network, stacksAddress, revealFee, true); + const scripts = [ + { script: btc.Script.encode([data, 'DROP', hex.decode(commitKeys.revealPubKey), 'CHECKSIG']) }, + { + script: btc.Script.encode([ + 'IF', + 144, + 'CHECKSEQUENCEVERIFY', + 'DROP', + hex.decode(commitKeys.reclaimPubKey), + 'CHECKSIG', + 'ENDIF', + ]), + }, + ]; + const script = btc.p2tr(btc.TAPROOT_UNSPENDABLE_KEY, scripts, net, true); + const req: BridgeTransactionType = { + originator: stacksAddress, + fromBtcAddress: cardinal, + revealPub: commitKeys.revealPubKey, + reclaimPub: commitKeys.reclaimPubKey, + status: 1, + tries: 0, + mode: 'op_drop', + amount: revealFee, + requestType: 'deposit', + wallet: + "p2tr(TAPROOT_UNSPENDABLE_KEY, [{ script: Script.encode([data, 'DROP', revealPubK, 'CHECKSIG']) }, { script: Script.encode([reclaimPubKey, 'CHECKSIG']) }], net, true)", + stacksAddress: stacksAddress, + sbtcWalletAddress: sbtcWalletAddress, + }; + req.commitTxScript = toStorable(script); + return req; +} + +function buildData( + network: string, + sigOrPrin: string, + revealFee: number, + opDrop: boolean +): Uint8Array { + const net = network === 'testnet' ? btc.TEST_NETWORK : btc.NETWORK; + if (opDrop) { + return buildDepositPayload(net, revealFee, sigOrPrin, opDrop, undefined); + } + return buildDepositPayloadOpReturn(net, sigOrPrin); +} + +export function maxCommit(addressInfo: any) { + if (!addressInfo || !addressInfo.utxos || addressInfo.utxos.length === 0) return 0; + const summ = addressInfo?.utxos + ?.map((item: { value: number }) => item.value) + .reduce((prev: number, curr: number) => prev + curr, 0); + return summ || 0; +} + +export function calculateDepositFees( + network: string, + opDrop: boolean, + amount: number, + feeInfo: any, + addressInfo: any, + commitTxScriptAddress: string, + data: Uint8Array | undefined +) { + try { + const net = network === 'testnet' ? btc.TEST_NETWORK : btc.NETWORK; + let vsize = 0; + const tx = new btc.Transaction({ + allowUnknowInput: true, + allowUnknowOutput: true, + allowUnknownInputs: true, + allowUnknownOutputs: true, + }); + addInputs( + network, + amount, + REVEAL_PAYMENT, + tx, + true, + addressInfo.utxos, + hex.encode(secp.getPublicKey(privKey, true)) + ); + if (!opDrop) { + if (data) tx.addOutput({ script: btc.Script.encode(['RETURN', data]), amount: BigInt(0) }); + tx.addOutputAddress(commitTxScriptAddress, BigInt(amount), net); + } else { + tx.addOutputAddress(commitTxScriptAddress, BigInt(amount), net); + } + const changeAmount = inputAmt(tx) - amount; + if (changeAmount > 0) tx.addOutputAddress(addressInfo.address, BigInt(changeAmount), net); + //tx.sign(privKey); + //tx.finalize(); + vsize = tx.vsize; + const fees = [ + Math.floor((vsize * feeInfo['low_fee_per_kb']) / 1024), + Math.floor((vsize * feeInfo['medium_fee_per_kb']) / 1024), + Math.floor((vsize * feeInfo['high_fee_per_kb']) / 1024), + ]; + return fees; + } catch (err: any) { + return [850, 1000, 1150]; + } +} diff --git a/packages/sbtc/src/tx.ts b/packages/sbtc/src/tx.ts new file mode 100644 index 000000000..e69de29bb From f1e2a0e02d41529447479f46b56fbb2ca00f6de3 Mon Sep 17 00:00:00 2001 From: janniks Date: Mon, 2 Oct 2023 11:02:37 +0200 Subject: [PATCH 03/49] feat: wip --- configs/webpack.config.js | 2 +- lerna.json | 2 +- package-lock.json | 1023 ++++++++++++++++++++- packages/sbtc/README.md | 668 +------------- packages/sbtc/jest.config.js | 3 - packages/sbtc/package.json | 10 +- packages/sbtc/src/index.ts | 40 +- packages/sbtc/src/transactions/api.ts | 130 +++ packages/sbtc/src/transactions/deposit.ts | 484 +++++----- packages/sbtc/src/transactions/index.ts | 3 + packages/sbtc/tests/deposit.test.ts | 61 ++ packages/sbtc/tsconfig.build.json | 7 +- packages/sbtc/webpack.config.js | 2 +- vitest.config.ts | 7 + 14 files changed, 1435 insertions(+), 1007 deletions(-) delete mode 100644 packages/sbtc/jest.config.js create mode 100644 packages/sbtc/src/transactions/api.ts create mode 100644 packages/sbtc/src/transactions/index.ts create mode 100644 packages/sbtc/tests/deposit.test.ts create mode 100644 vitest.config.ts diff --git a/configs/webpack.config.js b/configs/webpack.config.js index cb9ebdcba..6f25b8899 100644 --- a/configs/webpack.config.js +++ b/configs/webpack.config.js @@ -43,7 +43,7 @@ module.exports = { { loader: 'esbuild-loader', options: { - target: 'es2017', + target: 'es2020', tsconfig: 'tsconfig.build.json', }, }, diff --git a/lerna.json b/lerna.json index 90df0e668..bbcc99f12 100644 --- a/lerna.json +++ b/lerna.json @@ -1,5 +1,5 @@ { - "version": "6.9.0", + "version": "independent", "registry": "https://registry.npmjs.org/", "publishConfig": { "access": "public" diff --git a/package-lock.json b/package-lock.json index 088bae2b6..b4ab4efc5 100644 --- a/package-lock.json +++ b/package-lock.json @@ -4449,7 +4449,7 @@ "resolved": "packages/profile", "link": true }, - "node_modules/@stacks/sbtc": { + "node_modules/@stacks/sbtc-developer-release": { "resolved": "packages/sbtc", "link": true }, @@ -4621,6 +4621,21 @@ "@types/node": "*" } }, + "node_modules/@types/chai": { + "version": "4.3.6", + "resolved": "https://registry.npmjs.org/@types/chai/-/chai-4.3.6.tgz", + "integrity": "sha512-VOVRLM1mBxIRxydiViqPcKn6MIxZytrbMpd6RJLIWKxUNr3zux8no0Oc7kJx0WAPIitgZ0gkrDS+btlqQpubpw==", + "dev": true + }, + "node_modules/@types/chai-subset": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/@types/chai-subset/-/chai-subset-1.3.3.tgz", + "integrity": "sha512-frBecisrNGz+F4T6bcc+NLeolfiojh5FxW2klu669+8BARtyQv2C/GkNW6FUodVe4BroGMP/wER/YDGc7rEllw==", + "dev": true, + "dependencies": { + "@types/chai": "*" + } + }, "node_modules/@types/common-tags": { "version": "1.8.1", "resolved": "https://registry.npmjs.org/@types/common-tags/-/common-tags-1.8.1.tgz", @@ -5189,6 +5204,101 @@ "url": "https://opencollective.com/typescript-eslint" } }, + "node_modules/@vitest/expect": { + "version": "0.34.6", + "resolved": "https://registry.npmjs.org/@vitest/expect/-/expect-0.34.6.tgz", + "integrity": "sha512-QUzKpUQRc1qC7qdGo7rMK3AkETI7w18gTCUrsNnyjjJKYiuUB9+TQK3QnR1unhCnWRC0AbKv2omLGQDF/mIjOw==", + "dev": true, + "dependencies": { + "@vitest/spy": "0.34.6", + "@vitest/utils": "0.34.6", + "chai": "^4.3.10" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/@vitest/runner": { + "version": "0.34.6", + "resolved": "https://registry.npmjs.org/@vitest/runner/-/runner-0.34.6.tgz", + "integrity": "sha512-1CUQgtJSLF47NnhN+F9X2ycxUP0kLHQ/JWvNHbeBfwW8CzEGgeskzNnHDyv1ieKTltuR6sdIHV+nmR6kPxQqzQ==", + "dev": true, + "dependencies": { + "@vitest/utils": "0.34.6", + "p-limit": "^4.0.0", + "pathe": "^1.1.1" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/@vitest/runner/node_modules/p-limit": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-4.0.0.tgz", + "integrity": "sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ==", + "dev": true, + "dependencies": { + "yocto-queue": "^1.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@vitest/runner/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==", + "dev": true, + "engines": { + "node": ">=12.20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@vitest/snapshot": { + "version": "0.34.6", + "resolved": "https://registry.npmjs.org/@vitest/snapshot/-/snapshot-0.34.6.tgz", + "integrity": "sha512-B3OZqYn6k4VaN011D+ve+AA4whM4QkcwcrwaKwAbyyvS/NB1hCWjFIBQxAQQSQir9/RtyAAGuq+4RJmbn2dH4w==", + "dev": true, + "dependencies": { + "magic-string": "^0.30.1", + "pathe": "^1.1.1", + "pretty-format": "^29.5.0" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/@vitest/spy": { + "version": "0.34.6", + "resolved": "https://registry.npmjs.org/@vitest/spy/-/spy-0.34.6.tgz", + "integrity": "sha512-xaCvneSaeBw/cz8ySmF7ZwGvL0lBjfvqc1LpQ/vcdHEvpLn3Ff1vAvjw+CoGn0802l++5L/pxb7whwcWAw+DUQ==", + "dev": true, + "dependencies": { + "tinyspy": "^2.1.1" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/@vitest/utils": { + "version": "0.34.6", + "resolved": "https://registry.npmjs.org/@vitest/utils/-/utils-0.34.6.tgz", + "integrity": "sha512-IG5aDD8S6zlvloDsnzHw0Ut5xczlF+kv2BOTo+iXfPr54Yhi5qbVOgGB1hZaVq4iJ4C/MZ2J0y15IlsV/ZcI0A==", + "dev": true, + "dependencies": { + "diff-sequences": "^29.4.3", + "loupe": "^2.3.6", + "pretty-format": "^29.5.0" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, "node_modules/@webassemblyjs/ast": { "version": "1.11.6", "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.11.6.tgz", @@ -5910,6 +6020,15 @@ "node": ">=0.8" } }, + "node_modules/assertion-error": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-1.1.0.tgz", + "integrity": "sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==", + "dev": true, + "engines": { + "node": "*" + } + }, "node_modules/ast-module-types": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/ast-module-types/-/ast-module-types-4.0.0.tgz", @@ -6775,6 +6894,15 @@ "node": ">=8" } }, + "node_modules/cac": { + "version": "6.7.14", + "resolved": "https://registry.npmjs.org/cac/-/cac-6.7.14.tgz", + "integrity": "sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, "node_modules/cacache": { "version": "17.1.3", "resolved": "https://registry.npmjs.org/cacache/-/cacache-17.1.3.tgz", @@ -6937,6 +7065,24 @@ "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", "integrity": "sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw==" }, + "node_modules/chai": { + "version": "4.3.10", + "resolved": "https://registry.npmjs.org/chai/-/chai-4.3.10.tgz", + "integrity": "sha512-0UXG04VuVbruMUYbJ6JctvH0YnC/4q3/AkT18q4NaITo91CUm0liMS9VqzT9vZhVQ/1eqPanMWjBM+Juhfb/9g==", + "dev": true, + "dependencies": { + "assertion-error": "^1.1.0", + "check-error": "^1.0.3", + "deep-eql": "^4.1.3", + "get-func-name": "^2.0.2", + "loupe": "^2.3.6", + "pathval": "^1.1.1", + "type-detect": "^4.0.8" + }, + "engines": { + "node": ">=4" + } + }, "node_modules/chalk": { "version": "2.4.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", @@ -6964,6 +7110,18 @@ "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz", "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==" }, + "node_modules/check-error": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/check-error/-/check-error-1.0.3.tgz", + "integrity": "sha512-iKEoDYaRmd1mxM90a2OEfWhjsjPpYPuQ+lMYsoxB126+t8fw7ySEO48nmDg5COTjxDI65/Y2OWpeEHk3ZOe8zg==", + "dev": true, + "dependencies": { + "get-func-name": "^2.0.2" + }, + "engines": { + "node": "*" + } + }, "node_modules/cheerio": { "version": "0.22.0", "resolved": "https://registry.npmjs.org/cheerio/-/cheerio-0.22.0.tgz", @@ -8484,6 +8642,18 @@ } } }, + "node_modules/deep-eql": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-4.1.3.tgz", + "integrity": "sha512-WaEtAOpRA1MQ0eohqZjpGD8zdI0Ovsm8mmFhaDN8dvDZzyoUMcYDnf5Y6iu7HTXxf8JDS23qWa4a+hKCDyOPzw==", + "dev": true, + "dependencies": { + "type-detect": "^4.0.0" + }, + "engines": { + "node": ">=6" + } + }, "node_modules/deep-extend": { "version": "0.6.0", "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", @@ -10913,6 +11083,15 @@ "node": "6.* || 8.* || >= 10.*" } }, + "node_modules/get-func-name": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.2.tgz", + "integrity": "sha512-8vXOvuE167CtIc3OyItco7N/dpRtBbYOsPsXCz7X/PMnlGjYjSGuZJgM1Y7mmew7BKf9BqvLX2tnOVy1BBUsxQ==", + "dev": true, + "engines": { + "node": "*" + } + }, "node_modules/get-intrinsic": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.1.tgz", @@ -15861,6 +16040,18 @@ "node": ">=8.9.0" } }, + "node_modules/local-pkg": { + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/local-pkg/-/local-pkg-0.4.3.tgz", + "integrity": "sha512-SFppqq5p42fe2qcZQqqEOiVRXl+WCP1MdT6k7BDEW1j++sp5fIY+/fdRQitvKgB5BrBcmrs5m/L0v2FrU5MY1g==", + "dev": true, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, "node_modules/locate-path": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", @@ -16111,6 +16302,15 @@ "triple-beam": "^1.3.0" } }, + "node_modules/loupe": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/loupe/-/loupe-2.3.6.tgz", + "integrity": "sha512-RaPMZKiMy8/JruncMU5Bt6na1eftNoo++R4Y+N2FrxkDVTrGvcyzFTsaGif4QTeKESheMGegbhw6iUAq+5A8zA==", + "dev": true, + "dependencies": { + "get-func-name": "^2.0.0" + } + }, "node_modules/lru-cache": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", @@ -16244,6 +16444,18 @@ "node": ">=8" } }, + "node_modules/magic-string": { + "version": "0.30.4", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.4.tgz", + "integrity": "sha512-Q/TKtsC5BPm0kGqgBIF9oXAs/xEf2vRKiIB4wCRQTJOQIByZ1d+NnUOotvJOvNpi5RNIgVOMC3pOuaP1ZTDlVg==", + "dev": true, + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.4.15" + }, + "engines": { + "node": ">=12" + } + }, "node_modules/make-dir": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-4.0.0.tgz", @@ -16924,6 +17136,18 @@ "node": ">=10" } }, + "node_modules/mlly": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/mlly/-/mlly-1.4.2.tgz", + "integrity": "sha512-i/Ykufi2t1EZ6NaPLdfnZk2AX8cs0d+mTzVKuPfqPKPatxLApaBoxJQ9x1/uckXtrS/U5oisPMDkNs0yQTaBRg==", + "dev": true, + "dependencies": { + "acorn": "^8.10.0", + "pathe": "^1.1.1", + "pkg-types": "^1.0.3", + "ufo": "^1.3.0" + } + }, "node_modules/modify-values": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/modify-values/-/modify-values-1.0.1.tgz", @@ -18674,6 +18898,21 @@ "node": ">=8" } }, + "node_modules/pathe": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/pathe/-/pathe-1.1.1.tgz", + "integrity": "sha512-d+RQGp0MAYTIaDBIMmOfMwz3E+LOZnxx1HZd5R18mmCZY0QBlK0LDZfPc8FW8Ed2DlvsuE6PRjroDY+wg4+j/Q==", + "dev": true + }, + "node_modules/pathval": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/pathval/-/pathval-1.1.1.tgz", + "integrity": "sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==", + "dev": true, + "engines": { + "node": "*" + } + }, "node_modules/pbkdf2": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.1.2.tgz", @@ -18783,6 +19022,17 @@ "node": ">=8" } }, + "node_modules/pkg-types": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/pkg-types/-/pkg-types-1.0.3.tgz", + "integrity": "sha512-nN7pYi0AQqJnoLPC9eHFQ8AcyaixBUOwvqc5TDnIKCMEE6I0y8P7OKA7fPexsXGCGxQDl/cmrLAp26LhcwxZ4A==", + "dev": true, + "dependencies": { + "jsonc-parser": "^3.2.0", + "mlly": "^1.2.0", + "pathe": "^1.1.0" + } + }, "node_modules/pluralize": { "version": "8.0.0", "resolved": "https://registry.npmjs.org/pluralize/-/pluralize-8.0.0.tgz", @@ -20291,6 +20541,22 @@ "node": ">=8" } }, + "node_modules/rollup": { + "version": "3.29.4", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-3.29.4.tgz", + "integrity": "sha512-oWzmBZwvYrU0iJHtDmhsm662rC15FRXmcjCk1xD771dFDx5jJ02ufAQQTn0etB2emNk4J9EZg/yWKpsn9BWGRw==", + "dev": true, + "bin": { + "rollup": "dist/bin/rollup" + }, + "engines": { + "node": ">=14.18.0", + "npm": ">=8.0.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, "node_modules/run-applescript": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/run-applescript/-/run-applescript-5.0.0.tgz", @@ -20668,6 +20934,12 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/siginfo": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/siginfo/-/siginfo-2.0.0.tgz", + "integrity": "sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g==", + "dev": true + }, "node_modules/signal-exit": { "version": "3.0.7", "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", @@ -21219,6 +21491,12 @@ "node": ">=8" } }, + "node_modules/stackback": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/stackback/-/stackback-0.0.2.tgz", + "integrity": "sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==", + "dev": true + }, "node_modules/statuses": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", @@ -21227,6 +21505,12 @@ "node": ">= 0.8" } }, + "node_modules/std-env": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/std-env/-/std-env-3.4.3.tgz", + "integrity": "sha512-f9aPhy8fYBuMN+sNfakZV18U39PbalgjXG3lLB9WkaYTxijru61wb57V9wxxNthXM5Sd88ETBWi29qLAsHO52Q==", + "dev": true + }, "node_modules/stream-browserify": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/stream-browserify/-/stream-browserify-3.0.0.tgz", @@ -21458,6 +21742,18 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/strip-literal": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/strip-literal/-/strip-literal-1.3.0.tgz", + "integrity": "sha512-PugKzOsyXpArk0yWmUwqOZecSO0GH0bPoctLcqNDH9J04pVW3lflYE0ujElBGTloevcxF5MofAOZ7C5l2b+wLg==", + "dev": true, + "dependencies": { + "acorn": "^8.10.0" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, "node_modules/strong-log-transformer": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/strong-log-transformer/-/strong-log-transformer-2.1.0.tgz", @@ -21810,6 +22106,30 @@ "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" }, + "node_modules/tinybench": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/tinybench/-/tinybench-2.5.1.tgz", + "integrity": "sha512-65NKvSuAVDP/n4CqH+a9w2kTlLReS9vhsAP06MWx+/89nMinJyB2icyl58RIcqCmIggpojIGeuJGhjU1aGMBSg==", + "dev": true + }, + "node_modules/tinypool": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/tinypool/-/tinypool-0.7.0.tgz", + "integrity": "sha512-zSYNUlYSMhJ6Zdou4cJwo/p7w5nmAH17GRfU/ui3ctvjXFErXXkruT4MWW6poDeXgCaIBlGLrfU6TbTXxyGMww==", + "dev": true, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/tinyspy": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/tinyspy/-/tinyspy-2.1.1.tgz", + "integrity": "sha512-XPJL2uSzcOyBMky6OFrusqWlzfFrXtE0hPuMgW8A2HmaqrPo4ZQHRN/V0QXN3FSjKxpsbRrFc5LI7KOwBsT1/w==", + "dev": true, + "engines": { + "node": ">=14.0.0" + } + }, "node_modules/titleize": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/titleize/-/titleize-3.0.0.tgz", @@ -22420,6 +22740,12 @@ "node": ">=14.17" } }, + "node_modules/ufo": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/ufo/-/ufo-1.3.1.tgz", + "integrity": "sha512-uY/99gMLIOlJPwATcMVYfqDSxUR9//AUcgZMzwfSTJPDKzA1S8mX4VLqa+fiAtveraQUBCz4FFcwVZBGbwBXIw==", + "dev": true + }, "node_modules/uglify-js": { "version": "3.17.4", "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.17.4.tgz", @@ -22683,57 +23009,601 @@ "extsprintf": "^1.2.0" } }, - "node_modules/vscode-oniguruma": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/vscode-oniguruma/-/vscode-oniguruma-1.7.0.tgz", - "integrity": "sha512-L9WMGRfrjOhgHSdOYgCt/yRMsXzLDJSL7BPrOZt73gU0iWO4mpqzqQzOz5srxqTvMBaR0XZTSrVWo4j55Rc6cA==", - "dev": true - }, - "node_modules/vscode-textmate": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/vscode-textmate/-/vscode-textmate-8.0.0.tgz", - "integrity": "sha512-AFbieoL7a5LMqcnOF04ji+rpXadgOXnZsxQr//r83kLPr7biP7am3g9zbaZIaBGwBRWeSvoMD4mgPdX3e4NWBg==", - "dev": true - }, - "node_modules/w3c-hr-time": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/w3c-hr-time/-/w3c-hr-time-1.0.2.tgz", - "integrity": "sha512-z8P5DvDNjKDoFIHK7q8r8lackT6l+jo/Ye3HOle7l9nICP9lf1Ci25fy9vHd0JOWewkIFzXIEig3TdKT7JQ5fQ==", - "deprecated": "Use your platform's native performance.now() and performance.timeOrigin.", + "node_modules/vite": { + "version": "4.4.9", + "resolved": "https://registry.npmjs.org/vite/-/vite-4.4.9.tgz", + "integrity": "sha512-2mbUn2LlUmNASWwSCNSJ/EG2HuSRTnVNaydp6vMCm5VIqJsjMfbIWtbH2kDuwUVW5mMUKKZvGPX/rqeqVvv1XA==", "dev": true, "dependencies": { - "browser-process-hrtime": "^1.0.0" + "esbuild": "^0.18.10", + "postcss": "^8.4.27", + "rollup": "^3.27.1" + }, + "bin": { + "vite": "bin/vite.js" + }, + "engines": { + "node": "^14.18.0 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/vitejs/vite?sponsor=1" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + }, + "peerDependencies": { + "@types/node": ">= 14", + "less": "*", + "lightningcss": "^1.21.0", + "sass": "*", + "stylus": "*", + "sugarss": "*", + "terser": "^5.4.0" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + }, + "less": { + "optional": true + }, + "lightningcss": { + "optional": true + }, + "sass": { + "optional": true + }, + "stylus": { + "optional": true + }, + "sugarss": { + "optional": true + }, + "terser": { + "optional": true + } } }, - "node_modules/w3c-xmlserializer": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-2.0.0.tgz", - "integrity": "sha512-4tzD0mF8iSiMiNs30BiLO3EpfGLZUT2MSX/G+o7ZywDzliWQ3OPtTZ0PTC3B3ca1UAf4cJMHB+2Bf56EriJuRA==", + "node_modules/vite-node": { + "version": "0.34.6", + "resolved": "https://registry.npmjs.org/vite-node/-/vite-node-0.34.6.tgz", + "integrity": "sha512-nlBMJ9x6n7/Amaz6F3zJ97EBwR2FkzhBRxF5e+jE6LA3yi6Wtc2lyTij1OnDMIr34v5g/tVQtsVAzhT0jc5ygA==", "dev": true, "dependencies": { - "xml-name-validator": "^3.0.0" + "cac": "^6.7.14", + "debug": "^4.3.4", + "mlly": "^1.4.0", + "pathe": "^1.1.1", + "picocolors": "^1.0.0", + "vite": "^3.0.0 || ^4.0.0 || ^5.0.0-0" + }, + "bin": { + "vite-node": "vite-node.mjs" }, "engines": { - "node": ">=10" + "node": ">=v14.18.0" + }, + "funding": { + "url": "https://opencollective.com/vitest" } }, - "node_modules/walkdir": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/walkdir/-/walkdir-0.4.1.tgz", - "integrity": "sha512-3eBwRyEln6E1MSzcxcVpQIhRG8Q1jLvEqRmCZqS3dsfXEDR/AhOF4d+jHg1qvDCpYaVRZjENPQyrVxAkQqxPgQ==", + "node_modules/vite/node_modules/@esbuild/android-arm": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.18.20.tgz", + "integrity": "sha512-fyi7TDI/ijKKNZTUJAQqiG5T7YjJXgnzkURqmGj13C6dCqckZBLdl4h7bkhHt/t0WP+zO9/zwroDvANaOqO5Sw==", + "cpu": [ + "arm" + ], "dev": true, + "optional": true, + "os": [ + "android" + ], "engines": { - "node": ">=6.0.0" + "node": ">=12" } }, - "node_modules/walker": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/walker/-/walker-1.0.8.tgz", - "integrity": "sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==", + "node_modules/vite/node_modules/@esbuild/android-arm64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.18.20.tgz", + "integrity": "sha512-Nz4rJcchGDtENV0eMKUNa6L12zz2zBDXuhj/Vjh18zGqB44Bi7MBMSXjgunJgjRhCmKOjnPuZp4Mb6OKqtMHLQ==", + "cpu": [ + "arm64" + ], "dev": true, - "dependencies": { - "makeerror": "1.0.12" - } + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/android-x64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.18.20.tgz", + "integrity": "sha512-8GDdlePJA8D6zlZYJV/jnrRAi6rOiNaCC/JclcXpB+KIuvfBN4owLtgzY2bsxnx666XjJx2kDPUmnTtR8qKQUg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/darwin-arm64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.18.20.tgz", + "integrity": "sha512-bxRHW5kHU38zS2lPTPOyuyTm+S+eobPUnTNkdJEfAddYgEcll4xkT8DB9d2008DtTbl7uJag2HuE5NZAZgnNEA==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/darwin-x64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.18.20.tgz", + "integrity": "sha512-pc5gxlMDxzm513qPGbCbDukOdsGtKhfxD1zJKXjCCcU7ju50O7MeAZ8c4krSJcOIJGFR+qx21yMMVYwiQvyTyQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/freebsd-arm64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.18.20.tgz", + "integrity": "sha512-yqDQHy4QHevpMAaxhhIwYPMv1NECwOvIpGCZkECn8w2WFHXjEwrBn3CeNIYsibZ/iZEUemj++M26W3cNR5h+Tw==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/freebsd-x64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.18.20.tgz", + "integrity": "sha512-tgWRPPuQsd3RmBZwarGVHZQvtzfEBOreNuxEMKFcd5DaDn2PbBxfwLcj4+aenoh7ctXcbXmOQIn8HI6mCSw5MQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/linux-arm": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.18.20.tgz", + "integrity": "sha512-/5bHkMWnq1EgKr1V+Ybz3s1hWXok7mDFUMQ4cG10AfW3wL02PSZi5kFpYKrptDsgb2WAJIvRcDm+qIvXf/apvg==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/linux-arm64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.18.20.tgz", + "integrity": "sha512-2YbscF+UL7SQAVIpnWvYwM+3LskyDmPhe31pE7/aoTMFKKzIc9lLbyGUpmmb8a8AixOL61sQ/mFh3jEjHYFvdA==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/linux-ia32": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.18.20.tgz", + "integrity": "sha512-P4etWwq6IsReT0E1KHU40bOnzMHoH73aXp96Fs8TIT6z9Hu8G6+0SHSw9i2isWrD2nbx2qo5yUqACgdfVGx7TA==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/linux-loong64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.18.20.tgz", + "integrity": "sha512-nXW8nqBTrOpDLPgPY9uV+/1DjxoQ7DoB2N8eocyq8I9XuqJ7BiAMDMf9n1xZM9TgW0J8zrquIb/A7s3BJv7rjg==", + "cpu": [ + "loong64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/linux-mips64el": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.18.20.tgz", + "integrity": "sha512-d5NeaXZcHp8PzYy5VnXV3VSd2D328Zb+9dEq5HE6bw6+N86JVPExrA6O68OPwobntbNJ0pzCpUFZTo3w0GyetQ==", + "cpu": [ + "mips64el" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/linux-ppc64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.18.20.tgz", + "integrity": "sha512-WHPyeScRNcmANnLQkq6AfyXRFr5D6N2sKgkFo2FqguP44Nw2eyDlbTdZwd9GYk98DZG9QItIiTlFLHJHjxP3FA==", + "cpu": [ + "ppc64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/linux-riscv64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.18.20.tgz", + "integrity": "sha512-WSxo6h5ecI5XH34KC7w5veNnKkju3zBRLEQNY7mv5mtBmrP/MjNBCAlsM2u5hDBlS3NGcTQpoBvRzqBcRtpq1A==", + "cpu": [ + "riscv64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/linux-s390x": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.18.20.tgz", + "integrity": "sha512-+8231GMs3mAEth6Ja1iK0a1sQ3ohfcpzpRLH8uuc5/KVDFneH6jtAJLFGafpzpMRO6DzJ6AvXKze9LfFMrIHVQ==", + "cpu": [ + "s390x" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/linux-x64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.18.20.tgz", + "integrity": "sha512-UYqiqemphJcNsFEskc73jQ7B9jgwjWrSayxawS6UVFZGWrAAtkzjxSqnoclCXxWtfwLdzU+vTpcNYhpn43uP1w==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/netbsd-x64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.18.20.tgz", + "integrity": "sha512-iO1c++VP6xUBUmltHZoMtCUdPlnPGdBom6IrO4gyKPFFVBKioIImVooR5I83nTew5UOYrk3gIJhbZh8X44y06A==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/openbsd-x64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.18.20.tgz", + "integrity": "sha512-e5e4YSsuQfX4cxcygw/UCPIEP6wbIL+se3sxPdCiMbFLBWu0eiZOJ7WoD+ptCLrmjZBK1Wk7I6D/I3NglUGOxg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/sunos-x64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.18.20.tgz", + "integrity": "sha512-kDbFRFp0YpTQVVrqUd5FTYmWo45zGaXe0X8E1G/LKFC0v8x0vWrhOWSLITcCn63lmZIxfOMXtCfti/RxN/0wnQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/win32-arm64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.18.20.tgz", + "integrity": "sha512-ddYFR6ItYgoaq4v4JmQQaAI5s7npztfV4Ag6NrhiaW0RrnOXqBkgwZLofVTlq1daVTQNhtI5oieTvkRPfZrePg==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/win32-ia32": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.18.20.tgz", + "integrity": "sha512-Wv7QBi3ID/rROT08SABTS7eV4hX26sVduqDOTe1MvGMjNd3EjOz4b7zeexIR62GTIEKrfJXKL9LFxTYgkyeu7g==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/win32-x64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.18.20.tgz", + "integrity": "sha512-kTdfRcSiDfQca/y9QIkng02avJ+NCaQvrMejlsB3RRv5sE9rRoeBPISaZpKxHELzRxZyLvNts1P27W3wV+8geQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/esbuild": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.18.20.tgz", + "integrity": "sha512-ceqxoedUrcayh7Y7ZX6NdbbDzGROiyVBgC4PriJThBKSVPWnnFHZAkfI1lJT8QFkOwH4qOS2SJkS4wvpGl8BpA==", + "dev": true, + "hasInstallScript": true, + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=12" + }, + "optionalDependencies": { + "@esbuild/android-arm": "0.18.20", + "@esbuild/android-arm64": "0.18.20", + "@esbuild/android-x64": "0.18.20", + "@esbuild/darwin-arm64": "0.18.20", + "@esbuild/darwin-x64": "0.18.20", + "@esbuild/freebsd-arm64": "0.18.20", + "@esbuild/freebsd-x64": "0.18.20", + "@esbuild/linux-arm": "0.18.20", + "@esbuild/linux-arm64": "0.18.20", + "@esbuild/linux-ia32": "0.18.20", + "@esbuild/linux-loong64": "0.18.20", + "@esbuild/linux-mips64el": "0.18.20", + "@esbuild/linux-ppc64": "0.18.20", + "@esbuild/linux-riscv64": "0.18.20", + "@esbuild/linux-s390x": "0.18.20", + "@esbuild/linux-x64": "0.18.20", + "@esbuild/netbsd-x64": "0.18.20", + "@esbuild/openbsd-x64": "0.18.20", + "@esbuild/sunos-x64": "0.18.20", + "@esbuild/win32-arm64": "0.18.20", + "@esbuild/win32-ia32": "0.18.20", + "@esbuild/win32-x64": "0.18.20" + } + }, + "node_modules/vitest": { + "version": "0.34.6", + "resolved": "https://registry.npmjs.org/vitest/-/vitest-0.34.6.tgz", + "integrity": "sha512-+5CALsOvbNKnS+ZHMXtuUC7nL8/7F1F2DnHGjSsszX8zCjWSSviphCb/NuS9Nzf4Q03KyyDRBAXhF/8lffME4Q==", + "dev": true, + "dependencies": { + "@types/chai": "^4.3.5", + "@types/chai-subset": "^1.3.3", + "@types/node": "*", + "@vitest/expect": "0.34.6", + "@vitest/runner": "0.34.6", + "@vitest/snapshot": "0.34.6", + "@vitest/spy": "0.34.6", + "@vitest/utils": "0.34.6", + "acorn": "^8.9.0", + "acorn-walk": "^8.2.0", + "cac": "^6.7.14", + "chai": "^4.3.10", + "debug": "^4.3.4", + "local-pkg": "^0.4.3", + "magic-string": "^0.30.1", + "pathe": "^1.1.1", + "picocolors": "^1.0.0", + "std-env": "^3.3.3", + "strip-literal": "^1.0.1", + "tinybench": "^2.5.0", + "tinypool": "^0.7.0", + "vite": "^3.1.0 || ^4.0.0 || ^5.0.0-0", + "vite-node": "0.34.6", + "why-is-node-running": "^2.2.2" + }, + "bin": { + "vitest": "vitest.mjs" + }, + "engines": { + "node": ">=v14.18.0" + }, + "funding": { + "url": "https://opencollective.com/vitest" + }, + "peerDependencies": { + "@edge-runtime/vm": "*", + "@vitest/browser": "*", + "@vitest/ui": "*", + "happy-dom": "*", + "jsdom": "*", + "playwright": "*", + "safaridriver": "*", + "webdriverio": "*" + }, + "peerDependenciesMeta": { + "@edge-runtime/vm": { + "optional": true + }, + "@vitest/browser": { + "optional": true + }, + "@vitest/ui": { + "optional": true + }, + "happy-dom": { + "optional": true + }, + "jsdom": { + "optional": true + }, + "playwright": { + "optional": true + }, + "safaridriver": { + "optional": true + }, + "webdriverio": { + "optional": true + } + } + }, + "node_modules/vscode-oniguruma": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/vscode-oniguruma/-/vscode-oniguruma-1.7.0.tgz", + "integrity": "sha512-L9WMGRfrjOhgHSdOYgCt/yRMsXzLDJSL7BPrOZt73gU0iWO4mpqzqQzOz5srxqTvMBaR0XZTSrVWo4j55Rc6cA==", + "dev": true + }, + "node_modules/vscode-textmate": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/vscode-textmate/-/vscode-textmate-8.0.0.tgz", + "integrity": "sha512-AFbieoL7a5LMqcnOF04ji+rpXadgOXnZsxQr//r83kLPr7biP7am3g9zbaZIaBGwBRWeSvoMD4mgPdX3e4NWBg==", + "dev": true + }, + "node_modules/w3c-hr-time": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/w3c-hr-time/-/w3c-hr-time-1.0.2.tgz", + "integrity": "sha512-z8P5DvDNjKDoFIHK7q8r8lackT6l+jo/Ye3HOle7l9nICP9lf1Ci25fy9vHd0JOWewkIFzXIEig3TdKT7JQ5fQ==", + "deprecated": "Use your platform's native performance.now() and performance.timeOrigin.", + "dev": true, + "dependencies": { + "browser-process-hrtime": "^1.0.0" + } + }, + "node_modules/w3c-xmlserializer": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-2.0.0.tgz", + "integrity": "sha512-4tzD0mF8iSiMiNs30BiLO3EpfGLZUT2MSX/G+o7ZywDzliWQ3OPtTZ0PTC3B3ca1UAf4cJMHB+2Bf56EriJuRA==", + "dev": true, + "dependencies": { + "xml-name-validator": "^3.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/walkdir": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/walkdir/-/walkdir-0.4.1.tgz", + "integrity": "sha512-3eBwRyEln6E1MSzcxcVpQIhRG8Q1jLvEqRmCZqS3dsfXEDR/AhOF4d+jHg1qvDCpYaVRZjENPQyrVxAkQqxPgQ==", + "dev": true, + "engines": { + "node": ">=6.0.0" + } + }, + "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, + "dependencies": { + "makeerror": "1.0.12" + } }, "node_modules/watchpack": { "version": "2.4.0", @@ -23122,6 +23992,22 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/why-is-node-running": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/why-is-node-running/-/why-is-node-running-2.2.2.tgz", + "integrity": "sha512-6tSwToZxTOcotxHeA+qGCq1mVzKR3CwcJGmVcY+QE8SHy6TnpFnh8PAvPNHYr7EcuVeG0QSMxtYCuO1ta/G/oA==", + "dev": true, + "dependencies": { + "siginfo": "^2.0.0", + "stackback": "0.0.2" + }, + "bin": { + "why-is-node-running": "cli.js" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/wide-align": { "version": "1.1.5", "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.5.tgz", @@ -23954,21 +24840,37 @@ } }, "packages/sbtc": { - "name": "@stacks/sbtc", - "version": "6.7.0", + "name": "@stacks/sbtc-developer-release", + "version": "0.1.0", "license": "MIT", "dependencies": { "@noble/secp256k1": "^2.0.0", "@scure/base": "^1.1.3", "@scure/btc-signer": "^1.1.0", + "@stacks/common": "^6.7.0", "@stacks/encryption": "^6.7.0", "@stacks/transactions": "^6.7.0", "c32check": "^2.0.0", "micro-packed": "^0.3.2" }, "devDependencies": { + "@scure/bip32": "^1.3.2", + "@scure/bip39": "^1.2.1", "jest-fetch-mock": "^3.0.3", - "rimraf": "^3.0.2" + "rimraf": "^3.0.2", + "vitest": "^0.34.6" + } + }, + "packages/sbtc/node_modules/@noble/hashes": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.3.2.tgz", + "integrity": "sha512-MVC8EAQp7MvEcm30KWENFjgR+Mkmf+D189XJTkFIlwohU5hcBbn1ZkKq7KVTi2Hme3PMGF390DaL52beVrIihQ==", + "dev": true, + "engines": { + "node": ">= 16" + }, + "funding": { + "url": "https://paulmillr.com/funding/" } }, "packages/sbtc/node_modules/@noble/secp256k1": { @@ -23990,6 +24892,47 @@ "url": "https://paulmillr.com/funding/" } }, + "packages/sbtc/node_modules/@scure/bip32": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/@scure/bip32/-/bip32-1.3.2.tgz", + "integrity": "sha512-N1ZhksgwD3OBlwTv3R6KFEcPojl/W4ElJOeCZdi+vuI5QmTFwLq3OFf2zd2ROpKvxFdgZ6hUpb0dx9bVNEwYCA==", + "dev": true, + "dependencies": { + "@noble/curves": "~1.2.0", + "@noble/hashes": "~1.3.2", + "@scure/base": "~1.1.2" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "packages/sbtc/node_modules/@scure/bip39": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@scure/bip39/-/bip39-1.2.1.tgz", + "integrity": "sha512-Z3/Fsz1yr904dduJD0NpiyRHhRYHdcnyh73FZWiV+/qhWi83wNJ3NWolYqCEN+ZWsUz2TWwajJggcRE9r1zUYg==", + "dev": true, + "dependencies": { + "@noble/hashes": "~1.3.0", + "@scure/base": "~1.1.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "packages/sbtc/node_modules/@stacks/common": { + "version": "6.8.1", + "resolved": "https://registry.npmjs.org/@stacks/common/-/common-6.8.1.tgz", + "integrity": "sha512-ewL9GLZNQYa5a/3K4xSHlHIgHkD4rwWW/QEaPId8zQIaL+1O9qCaF4LX9orNQeOmEk8kvG0x2xGV54fXKCZeWQ==", + "dependencies": { + "@types/bn.js": "^5.1.0", + "@types/node": "^18.0.4" + } + }, + "packages/sbtc/node_modules/@types/node": { + "version": "18.18.1", + "resolved": "https://registry.npmjs.org/@types/node/-/node-18.18.1.tgz", + "integrity": "sha512-3G42sxmm0fF2+Vtb9TJQpnjmP+uKlWvFa8KoEGquh4gqRmoUG/N0ufuhikw6HEsdG2G2oIKhog1GCTfz9v5NdQ==" + }, "packages/sbtc/node_modules/rimraf": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", diff --git a/packages/sbtc/README.md b/packages/sbtc/README.md index 112d912fe..e50464f39 100644 --- a/packages/sbtc/README.md +++ b/packages/sbtc/README.md @@ -1,667 +1 @@ -# @stacks/stacking [![npm](https://img.shields.io/npm/v/@stacks/stacking?color=red)](https://www.npmjs.com/package/@stacks/stacking) - -Library for PoX Stacking. - -> **Note**: [Not all methods](https://stacks.js.org/classes/_stacks_stacking.StackingClient#:~:text=methods%20-%20pox-2) are available before the 2.1 fork. These will throw if used on a <2.1 chain. - -## Installation - -```shell -npm install @stacks/stacking -``` - -- [Initialization](#initialization) -- [Stack STX](#stack-stx) - - [Check stacking eligibility](#check-stacking-eligibility) - - [Broadcast the stacking transaction](#broadcast-the-stacking-transaction) - - [Extend stacking](#extend-stacking) - - [Increase amount stacked](#increase-amount-stacked) -- [Client helpers](#client-helpers) - - [Will Stacking be executed in the next cycle?](#will-stacking-be-executed-in-the-next-cycle) - - [How long (in seconds) is a Stacking cycle?](#how-long-in-seconds-is-a-stacking-cycle) - - [How much estimated time is left (in seconds) to submit a stacking transaction for the upcoming reward cycle?](#how-much-estimated-time-is-left-in-seconds-to-submit-a-stacking-transaction-for-the-upcoming-reward-cycle) - - [Does account have sufficient STX to meet minimum threshold?](#does-account-have-sufficient-stx-to-meet-minimum-threshold) - - [Get PoX info](#get-pox-info) - - [Get Stacks node info](#get-stacks-node-info) - - [Get account balance](#get-account-balance) - - [Get account balance locked](#get-account-balance-locked) - - [Get account balances (from API)](#get-account-balances-from-api) - - [Get account stacking status](#get-account-stacking-status) - - [Get PoX operation info (current period and PoX contract versions)](#get-pox-operation-info-current-period-and-pox-contract-versions) -- [Delegated stacking](#delegated-stacking) - - [Stacking in a pool](#stacking-in-a-pool) - - [Delegate STX](#delegate-stx) - - [Revoke delegation](#revoke-delegation) - - [Operating a pool / Stacking for others](#operating-a-pool--stacking-for-others) - - [Stack delegated STX](#stack-delegated-stx) - - [Extend delegated STX](#extend-delegated-stx) - - [Increase delegated STX](#increase-delegated-stx) - - [Commit to stacking](#commit-to-stacking) - - [Increase existing commitment](#increase-existing-commitment) - - [Pool helpers](#pool-helpers) - - [Get burnchain rewards](#get-burnchain-rewards) - - [Get burnchain rewards total](#get-burnchain-rewards-total) - - [Get burnchain reward holders](#get-burnchain-reward-holders) - - [Get reward set by index](#get-reward-set-by-index) - -## Initialization - -Initialize a `StackingClient` to interact with the Stacking contract. - -> **Note:** The `StackingClient` sets its transactions `AnchorMode` to `Any` by default. - -```typescript -import { StacksTestnet, StacksMainnet } from '@stacks/network'; -import { StackingClient } from '@stacks/stacking'; - -// for mainnet: const network = new StacksMainnet(); -const network = new StacksTestnet(); -// the stacks STX address -const address = 'ST3XKKN4RPV69NN1PHFDNX3TYKXT7XPC4N8KC1ARH'; -const client = new StackingClient(address, network); -``` - -## Stack STX - -### Check stacking eligibility - -```typescript -// a BTC address for reward payouts -const poxAddress = 'mvuYDknzDtPgGqm2GnbAbmGMLwiyW3AwFP'; -// number cycles to stack -const cycles = 3; - -// Refer to initialization section to create client instance -const stackingEligibility = await client.canStack({ poxAddress, cycles }); - -// { -// eligible: false, -// reason: 'ERR_STACKING_INVALID_LOCK_PERIOD', -// } -``` - -### Broadcast the stacking transaction - -```typescript -// a BTC address for reward payouts -const poxAddress = 'mvuYDknzDtPgGqm2GnbAbmGMLwiyW3AwFP'; -// number cycles to stack -const cycles = 3; -// how much to stack, in microSTX -const amountMicroStx = 100000000000n; -// private key for transaction signing -const privateKey = 'd48f215481c16cbe6426f8e557df9b78895661971d71735126545abddcd5377001'; -// block height at which to stack -const burnBlockHeight = 2000; - -// Refer to initialization section to create client instance -const stackingResults = await client.stack({ - amountMicroStx, - poxAddress, - cycles, - privateKey, - burnBlockHeight, -}); - -// { -// txid: '0xf6e9dbf6a26c1b73a14738606cb2232375d1b440246e6bbc14a45b3a66618481', -// } -``` - -### Extend stacking - -Extends previously stacked funds without cooldown. - -```typescript -// number cycles to extend stacking by -const extendCycles = 3; -// a BTC address for reward payouts -const poxAddress = 'mvuYDknzDtPgGqm2GnbAbmGMLwiyW3AwFP'; -// private key for transaction signing -const privateKey = 'd48f215481c16cbe6426f8e557df9b78895661971d71735126545abddcd5377001'; - -const extendResults = await client.stackExtend({ - extendCycles, - poxAddress, - privateKey, -}); - -// { -// txid: '0xf6e9dbf6a26c1b73a14738606cb2232375d1b440246e6bbc14a45b3a66618481', -// } -``` - -### Increase amount stacked - -Increases the amount of funds stacked/locked after previously stacking. - -```typescript -// how much to increase by, in microSTX -const increaseBy = 3000000; -// private key for transaction signing -const privateKey = 'd48f215481c16cbe6426f8e557df9b78895661971d71735126545abddcd5377001'; - -const increaseResults = await client.stackIncrease({ - increaseBy, - privateKey, -}); - -// { -// txid: '0xf6e9dbf6a26c1b73a14738606cb2232375d1b440246e6bbc14a45b3a66618481', -// } -``` - -## Client helpers - -### Will Stacking be executed in the next cycle? - -```typescript -const stackingEnabledNextCycle = await client.isStackingEnabledNextCycle(); - -// true / false -``` - -### How long (in seconds) is a Stacking cycle? - -```typescript -const cycleDuration = await client.getCycleDuration(); - -// 120 -``` - -### How much estimated time is left (in seconds) to submit a stacking transaction for the upcoming reward cycle? - -```typescript -const seconds = await client.getSecondsUntilStackingDeadline(); - -// 600000 -``` - -### Does account have sufficient STX to meet minimum threshold? - -```typescript -const hasMinStxAmount = await client.hasMinimumStx(); - -// true / false -``` - -### Get PoX info - -```typescript -const poxInfo = await client.getPoxInfo(); - -// { -// contract_id: 'ST000000000000000000002AMW42H.pox', -// first_burnchain_block_height: 0, -// min_amount_ustx: 83335083333333, -// prepare_cycle_length: 30, -// rejection_fraction: 3333333333333333, -// reward_cycle_id: 17, -// reward_cycle_length: 120, -// rejection_votes_left_required: 0, -// total_liquid_supply_ustx: 40000840000000000 -// } -``` - -### Get Stacks node info - -```typescript -const coreInfo = await client.getCoreInfo(); - -// { -// peer_version: 385875968, -// pox_consensus: 'bb88a6e6e65fa7c974d3f6e91a941d05cc3dff8e', -// burn_block_height: 2133, -// stable_pox_consensus: '2284451c3e623237def1f8caed1c11fa46b6f0cc', -// stable_burn_block_height: 2132, -// server_version: 'blockstack-core 0.0.1 => 23.0.0.0 (HEAD:a4deb7a+, release build, linux [x86_64])', -// network_id: 2147483648, -// parent_network_id: 3669344250, -// stacks_tip_height: 1797, -// stacks_tip: '016df36c6a154cb6114c469a28cc0ce8b415a7af0527f13f15e66e27aa480f94', -// stacks_tip_consensus_hash: 'bb88a6e6e65fa7c974d3f6e91a941d05cc3dff8e', -// unanchored_tip: '6b93d2c62fc07cf44302d4928211944d2debf476e5c71fb725fb298a037323cc', -// exit_at_block_height: null -// } -``` - -### Get account balance - -```typescript -const responseBalanceInfo = await client.getAccountBalance(); - -// 800000000000 -``` - -### Get account balance locked - -```typescript -const responseBalanceLockedInfo = await client.getAccountBalanceLocked(); - -// 40000000000 -``` - -### Get account balances (from API) - -```typescript -const responseBalancesInfo = await client.getAccountExtendedBalances(); - -// { -// stx: { -// balance: '1000000', -// total_sent: '0', -// total_received: '1000000', -// lock_tx_id: '0xec94e7d20af8979b44d17a0520c126bf742b999a0fc7ddbcbe0ab21b228ecc8c', -// locked: '50000', -// lock_height: 100, -// burnchain_lock_height: 100, -// burnchain_unlock_height: 200, -// }, -// fungible_tokens: {}, -// non_fungible_tokens: {}, -// } -``` - -### Get account stacking status - -```typescript -const stackingStatus = await client.getStatus(); - -// { -// stacked: true, -// details: { -// first_reward_cycle: 18, -// lock_period: 10, -// unlock_height: 3020, -// pox_address: { -// version: '00', -// hashbytes: '05cf52a44bf3e6829b4f8c221cc675355bf83b7d' -// } -// } -// } -``` - -### Get PoX operation info (current period and PoX contract versions) - -```typescript -const poxOperationInfo = await client.getPoxOperationInfo(); - -// { -// period: 'Period3', -// pox1: { -// contract_id: 'ST000000000000000000002AMW42H.pox', -// activation_burnchain_block_height: 0, -// first_reward_cycle_id: 0, -// }, -// pox2: { -// contract_id: 'ST000000000000000000002AMW42H.pox-2', -// activation_burnchain_block_height: 120, -// first_reward_cycle_id: 25, -// }, -// } -``` - -## Delegated stacking - -These are the methods for creating the required transactions for delegated stacking: - -- [Stacking in a pool](#stacking-in-a-pool) - - [`.delegateStx` Delegate STX](#delegate-stx) - - [`.revokeDelegateStx` Revoke delegation](#revoke-delegation) -- [Operating a pool](#operating-a-pool) - - [`.delegateStackStx` Stack delegated STX](#stack-delegated-stx) - - [`.stackAggregationCommit` Commit to stacking](#commit-to-stacking) - -```mermaid -sequenceDiagram - User->>Stacks Blockchain: tx: `delegateStx`
Delegate funds to pool,
by pool's STX address - Stacks Blockchain-->Pool Operator: Monitored by - Pool Operator->>Stacks Blockchain: tx: `delegateStackStx`
Lock delegated funds - Pool Operator->>Stacks Blockchain: tx: `stackAggregationCommit`
Commit stacking for each cycle -``` - -### Stacking in a pool - -If you are the account owner ("stacker"), you can delegate or revoke delegation rights. - -#### Delegate STX - -```typescript -// STX address of the pool/pool -const delegateTo = 'ST2MCYPWTFMD2MGR5YY695EJG0G1R4J2BTJPRGM7H'; -// burn height at which the delegation relationship should be revoked (optional) -const untilBurnBlockHeight = 5000; -// how much to stack, in microSTX -const amountMicroStx = 100000000000n; -// private key for transaction signing -const privateKey = 'd48f215481c16cbe6426f8e557df9b78895661971d71735126545abddcd5377001'; - -const delegetateResponse = await client.delegateStx({ - amountMicroStx, - delegateTo, - untilBurnBlockHeight, // optional - privateKey, -}); - -// { -// txid: '0xf6e9dbf6a26c1b73a14738606cb2232375d1b440246e6bbc14a45b3a66618481', -// } -``` - -#### Revoke delegation - -```typescript -// private key for transaction signing -const privateKey = 'd48f215481c16cbe6426f8e557df9b78895661971d71735126545abddcd5377001'; - -const revokeResponse = await client.revokeDelegateStx(privateKey); - -// { -// txid: '0xf6e9dbf6a26c1b73a14738606cb2232375d1b440246e6bbc14a45b3a66618481', -// } -``` - -### Operating a pool / Stacking for others - -If you are a pool operator (or wish to stack with someone else's funds), you can stack ("lock up") tokens for your users and commit to stacking participation for upcoming reward cycles. -These users need to first "delegate" some or all of their funds to you (the "delegator"). -The following examples refer to the "delegator" as pool, but in practice a delegator can also stack for only single or few individuals. -Even a group of friends could stack together and share a multi-sig BTC wallet for payouts. - -#### Stack delegated STX - -Stack STX, which have been previously delegated to the pool. -This step only locks the funds (partial stacking). -The pool operator will also need to ["commit"](#commit-to-stacking) to a reward cycle. - -```typescript -import { getNonce } from '@stacks/transactions'; -import { StacksTestnet, StacksMainnet } from '@stacks/network'; -import { StackingClient } from '@stacks/stacking'; - -// for mainnet: const network = new StacksMainnet(); -const network = new StacksTestnet(); -// the stacks STX address -const address = 'ST3XKKN4RPV69NN1PHFDNX3TYKXT7XPC4N8KC1ARH'; -// pools would initiate a different client -const poolAddress = 'ST22X605P0QX2BJC3NXEENXDPFCNJPHE02DTX5V74'; -// pool private key for transaction signing -const poolPrivateKey = 'd48f215481c16cbe6426f8e557df9b78895661971d71735126545abddcd5377001'; -// the BTC address for reward payouts -const poolBtcAddress = 'msiYwJCvXEzjgq6hDwD9ueBka6MTfN962Z'; -// how much to stack, in microSTX -const amountMicroStx = 100000000000n; -// block height at which to stack -const burnBlockHeight = 2000; -// number cycles to stack -const cycles = 3; -// if you call this method multiple times in the same block, you need to increase the nonce manually -let nonce = await getNonce(poolAddress, network); -nonce = nonce + 1n; - -const poolClient = new StackingClient(poolAddress, network); - -const delegetateStackResponses = await poolClient.delegateStackStx({ - stacker: address, - amountMicroStx, - poxAddress: poolBtcAddress, - burnBlockHeight, - cycles, - privateKey: poolPrivateKey, - nonce, // optional -}); - -// { -// txid: '0xf6e9dbf6a26c1b73a14738606cb2232375d1b440246e6bbc14a45b3a66618481', -// } -``` - -#### Extend delegated STX - -Extend stacking of STX previously delegated to the pool. - -```typescript -import { getNonce } from '@stacks/transactions'; -import { StacksTestnet, StacksMainnet } from '@stacks/network'; -import { StackingClient } from '@stacks/stacking'; - -// for mainnet: const network = new StacksMainnet(); -const network = new StacksTestnet(); -// the stacks STX address -const address = 'ST3XKKN4RPV69NN1PHFDNX3TYKXT7XPC4N8KC1ARH'; -// pools would initiate a different client -const poolAddress = 'ST22X605P0QX2BJC3NXEENXDPFCNJPHE02DTX5V74'; -// pool private key for transaction signing -const poolPrivateKey = 'd48f215481c16cbe6426f8e557df9b78895661971d71735126545abddcd5377001'; -// the BTC address for reward payouts -const poolBtcAddress = 'msiYwJCvXEzjgq6hDwD9ueBka6MTfN962Z'; -// number of cycles to extend by -const extendCount = 3; -// if you call this method multiple times in the same block, you need to increase the nonce manually -let nonce = await getNonce(poolAddress, network); -nonce = nonce + 1n; - -const poolClient = new StackingClient(poolAddress, network); - -const delegetateExtendResponses = await poolClient.delegateStackExtend({ - extendCount, - stacker: address, - poxAddress: poolBtcAddress, - privateKey: poolPrivateKey, - nonce, // optional -}); - -// { -// txid: '0xf6e9dbf6a26c1b73a14738606cb2232375d1b440246e6bbc14a45b3a66618481', -// } -``` - -#### Increase delegated STX - -Increase the locked amount of delegated STX stacked. - -```typescript -import { getNonce } from '@stacks/transactions'; -import { StacksTestnet, StacksMainnet } from '@stacks/network'; -import { StackingClient } from '@stacks/stacking'; - -// for mainnet: const network = new StacksMainnet(); -const network = new StacksTestnet(); -// the stacks STX address -const address = 'ST3XKKN4RPV69NN1PHFDNX3TYKXT7XPC4N8KC1ARH'; -// pools would initiate a different client -const poolAddress = 'ST22X605P0QX2BJC3NXEENXDPFCNJPHE02DTX5V74'; -// pool private key for transaction signing -const poolPrivateKey = 'd48f215481c16cbe6426f8e557df9b78895661971d71735126545abddcd5377001'; -// the BTC address for reward payouts -const poolBtcAddress = 'msiYwJCvXEzjgq6hDwD9ueBka6MTfN962Z'; -// amount to increase by, in microSTX -const increaseBy = 3; -// if you call this method multiple times in the same block, you need to increase the nonce manually -let nonce = await getNonce(poolAddress, network); -nonce = nonce + 1n; - -const poolClient = new StackingClient(poolAddress, network); - -const delegetateIncreaseResponses = await poolClient.delegateStackIncrease({ - increaseBy, - stacker: address, - poxAddress: poolBtcAddress, - privateKey: poolPrivateKey, - nonce, // optional -}); - -// { -// txid: '0xf6e9dbf6a26c1b73a14738606cb2232375d1b440246e6bbc14a45b3a66618481', -// } -``` - -#### Commit to stacking - -The result of this commit transaction will contain the index of the pools reward set entry. - -```typescript -// reward cycle id to commit to -const rewardCycle = 12; -// the BTC address for reward payouts -const poolBtcAddress = 'msiYwJCvXEzjgq6hDwD9ueBka6MTfN962Z'; -// Private key -const privateKeyDelegate = 'd48f215481c16cbe6426f8e557df9b78895661971d71735126545abddcd5377001'; - -const delegetateCommitResponse = await poolClient.stackAggregationCommitIndexed({ - rewardCycle, - poxAddress: poolBtcAddress, - privateKey: privateKeyDelegate, -}); - -// { -// txid: '0xf6e9dbf6a26c1b73a14738606cb2232375d1b440246e6bbc14a45b3a66618481', -// } -``` - -#### Increase existing commitment - -The result of this commit transaction will contain the index of the pools reward set entry. - -```typescript -// reward cycle id to commit to -const rewardCycle = 12; -// reward set entry index -const rewardIndex = 3; -// the BTC address for reward payouts -const poolBtcAddress = 'msiYwJCvXEzjgq6hDwD9ueBka6MTfN962Z'; -// Private key -const privateKeyDelegate = 'd48f215481c16cbe6426f8e557df9b78895661971d71735126545abddcd5377001'; - -const delegetateIncreaseResponse = await poolClient.stackAggregationIncrease({ - rewardCycle, - rewardIndex, - poxAddress: poolBtcAddress, - privateKey: privateKeyDelegate, -}); - -// { -// txid: '0xf6e9dbf6a26c1b73a14738606cb2232375d1b440246e6bbc14a45b3a66618481', -// } -``` - -#### Pool helpers - -##### Get burnchain rewards - -```typescript -import { StacksTestnet, StacksMainnet } from '@stacks/network'; -import { StackingClient } from '@stacks/stacking'; - -const address = 'myfTfju9XSMRusaY2qTitSEMSchsWRA441'; -// for mainnet: const network = new StacksMainnet(); -const network = new StacksTestnet(); -const client = new StackingClient(address, network); -const options = { limit: 2, offset: 0 }; - -const rewards = await client.getRewardsForBtcAddress(options); - -// { -// limit: 2, -// offset: 0, -// results: [ -// { -// canonical: true, -// burn_block_hash: '0x000000000000002083ca8303a2262d09a824cecb34b78f13a04787e4f05441d3', -// burn_block_height: 2004622, -// burn_amount: '0', -// reward_recipient: 'myfTfju9XSMRusaY2qTitSEMSchsWRA441', -// reward_amount: '20000', -// reward_index: 0 -// }, -// { -// canonical: true, -// burn_block_hash: '0x000000000000002f72213de621f9daf60d76aed3902a811561d06373b2fa6123', -// burn_block_height: 2004621, -// burn_amount: '0', -// reward_recipient: 'myfTfju9XSMRusaY2qTitSEMSchsWRA441', -// reward_amount: '20000', -// reward_index: 0 -// } -// ] -// }; -``` - -##### Get burnchain rewards total - -```typescript -import { StacksTestnet, StacksMainnet } from '@stacks/network'; -import { StackingClient } from '@stacks/stacking'; - -const address = 'myfTfju9XSMRusaY2qTitSEMSchsWRA441'; -// for mainnet: const network = new StacksMainnet(); -const network = new StacksTestnet(); -const client = new StackingClient(address, network); - -const total = await client.getRewardsTotalForBtcAddress(); -// { -// reward_recipient: 'myfTfju9XSMRusaY2qTitSEMSchsWRA441', -// reward_amount: '0' -// } -``` - -##### Get burnchain reward holders - -```typescript -import { StacksTestnet, StacksMainnet } from '@stacks/network'; -import { StackingClient } from '@stacks/stacking'; - -const address = 'myfTfju9XSMRusaY2qTitSEMSchsWRA441'; -// for mainnet: const network = new StacksMainnet(); -const network = new StacksTestnet(); -const client = new StackingClient(address, network); -const options = { limit: 2, offset: 0 }; - -const rewardHolders = await client.getRewardHoldersForBtcAddress(options); -// { -// limit: 2, -// offset: 0, -// total: 46, -// results: [ -// { -// canonical: true, -// burn_block_hash: '0x000000000000002083ca8303a2262d09a824cecb34b78f13a04787e4f05441d3', -// burn_block_height: 2004622, -// address: 'myfTfju9XSMRusaY2qTitSEMSchsWRA441', -// slot_index: 1 -// }, -// { -// canonical: true, -// burn_block_hash: '0x000000000000002083ca8303a2262d09a824cecb34b78f13a04787e4f05441d3', -// burn_block_height: 2004622, -// address: 'myfTfju9XSMRusaY2qTitSEMSchsWRA441', -// slot_index: 0 -// } -// ] -// }; -``` - -##### Get reward set by index - -```typescript -import { StacksTestnet, StacksMainnet } from '@stacks/network'; -import { StackingClient } from '@stacks/stacking'; - -const address = 'myfTfju9XSMRusaY2qTitSEMSchsWRA441'; -// for mainnet: const network = new StacksMainnet(); -const network = new StacksTestnet(); -const client = new StackingClient(address, network); - -const rewardSetItem = await client.getRewardSet({ - rewardCyleId: 49, - rewardSetIndex: 3, -}); - -// { -// pox_address: { -// version: 0, -// hashbytes: [ 67, 89, 107, 83, 134, 244, 102, 134, 62, 37, 101, 141, 223, 148, 189, 15, 173, 171, 0, 72 ] -// }, -// total_ustx: 1875230000000000 -// } -``` +# @stacks/sbtc-developer-release diff --git a/packages/sbtc/jest.config.js b/packages/sbtc/jest.config.js deleted file mode 100644 index fe8e05183..000000000 --- a/packages/sbtc/jest.config.js +++ /dev/null @@ -1,3 +0,0 @@ -const makeJestConfig = require('../../configs/jestConfig'); - -module.exports = makeJestConfig(__dirname); diff --git a/packages/sbtc/package.json b/packages/sbtc/package.json index 79b77acbd..543978784 100644 --- a/packages/sbtc/package.json +++ b/packages/sbtc/package.json @@ -1,6 +1,6 @@ { - "name": "@stacks/sbtc", - "version": "6.7.0", + "name": "@stacks/sbtc-developer-release", + "version": "0.1.0", "description": "Library for sBTC.", "license": "MIT", "author": "Hiro Systems PBC (https://hiro.so)", @@ -23,14 +23,18 @@ "@noble/secp256k1": "^2.0.0", "@scure/base": "^1.1.3", "@scure/btc-signer": "^1.1.0", + "@stacks/common": "^6.7.0", "@stacks/encryption": "^6.7.0", "@stacks/transactions": "^6.7.0", "c32check": "^2.0.0", "micro-packed": "^0.3.2" }, "devDependencies": { + "@scure/bip32": "^1.3.2", + "@scure/bip39": "^1.2.1", "jest-fetch-mock": "^3.0.3", - "rimraf": "^3.0.2" + "rimraf": "^3.0.2", + "vitest": "^0.34.6" }, "sideEffects": false, "typings": "dist/index.d.ts", diff --git a/packages/sbtc/src/index.ts b/packages/sbtc/src/index.ts index 350e99d94..af47bf885 100644 --- a/packages/sbtc/src/index.ts +++ b/packages/sbtc/src/index.ts @@ -1,39 +1 @@ -// PLACEHOLDER FILE - -interface MintOptions { - amount: number; // (amount uint) - destination: string; // (destination principal) - depositTxid: string; // (deposit-txid (buff 32)) - burnChainHeight: number; // (burn-chain-height uint) - merkleProof: string[]; // (merkle-proof (list 14 (buff 32))) - txIndex: number; // (tx-index uint) - treeDepth: number; // (tree-depth uint) - blockHeader: string; // (block-header (buff 80))) -} - -export class sBTCClient { - constructor(public network: StacksNetwork) {} - - /** - - */ - async mint(options: MintOptions): Promise { - const [contractAddress, contractName] = this.parseContractId(options?.contractId); - const result = await callReadOnlyFunction({ - network: this.network, - senderAddress: this.address, - contractAddress, - contractName, - functionArgs: [uintCV(options.rewardCyleId), uintCV(options.rewardSetIndex)], - functionName: 'get-reward-set-pox-address', - }); - - return unwrapMap(result as OptionalCV, tuple => ({ - pox_address: { - version: ((tuple.data['pox-addr'] as TupleCV).data['version'] as BufferCV).buffer, - hashbytes: ((tuple.data['pox-addr'] as TupleCV).data['hashbytes'] as BufferCV).buffer, - }, - total_ustx: (tuple.data['total-ustx'] as UIntCV).value, - })); - } -} +export * from './transactions'; diff --git a/packages/sbtc/src/transactions/api.ts b/packages/sbtc/src/transactions/api.ts new file mode 100644 index 000000000..a8ef55055 --- /dev/null +++ b/packages/sbtc/src/transactions/api.ts @@ -0,0 +1,130 @@ +import * as btc from '@scure/btc-signer'; +import { Cl } from '@stacks/transactions'; + +// https://blockstream.info/api/address/1KFHE7w8BhaENAswwryaoccDb6qcT6DbYY/utxo +// [{"txid":"033e44b535c5709d30234921608219ee5ca1e320fa9def44715eaeb2b7ad52d3","vout":0,"status":{"confirmed":false},"value":42200}] +export type BlockstreamUtxo = { + txid: string; + vout: number; + value: number; + status: + | { + confirmed: false; + } + | { + confirmed: true; + block_height: number; + block_hash: string; + block_time: number; + }; +}; + +export type BlockstreamUtxoWithTxHex = BlockstreamUtxo & { + hex: string; +}; + +export async function fetchUtxos(address: string): Promise { + // todo: error handling? + return (await fetch(`https://blockstream.info/testnet/api/address/${address}/utxo`).then(res => + res.json() + )) as BlockstreamUtxo[]; +} + +export async function fetchTxHex(txid: string): Promise { + // todo: error handling? + return await fetch(`https://blockstream.info/testnet/api/tx/${txid}/hex`).then(res => res.text()); +} + +type BlockstreamFeeEstimates = { + [K in + | '1' + | '2' + | '3' + | '4' + | '5' + | '6' + | '7' + | '8' + | '9' + | '10' + | '11' + | '12' + | '13' + | '14' + | '15' + | '16' + | '17' + | '18' + | '19' + | '20' + | '21' + | '22' + | '23' + | '24' + | '25' + | '144' + | '504' + | '1008']: number; +}; + +export async function estimateFeeRates(): Promise { + return await fetch(`https://blockstream.info/testnet/api/fee-estimates`).then(res => res.json()); +} + +export async function estimateFeeRate(target: 'low' | 'medium' | 'high' | number): Promise { + const feeEstimates = await estimateFeeRates(); + const t = + typeof target === 'number' + ? target.toString() + : target === 'high' + ? '1' + : target === 'medium' + ? '2' + : '3'; + if (t in feeEstimates) { + return feeEstimates[t as keyof BlockstreamFeeEstimates]; + } + + throw new Error(`Invalid fee target: ${target}`); +} + +export async function broadcastTx(tx: btc.Transaction): Promise { + return await fetch(`https://blockstream.info/testnet/api/tx`, { + method: 'POST', + body: tx.hex, + }).then(res => res.text()); +} + +export async function stacksCallReadOnly({ + contractAddress, + functionName, + sender = 'ST000000000000000000002AMW42H', + args = [], +}: { + contractAddress: string; + functionName: string; + sender?: string; + args?: string[]; +}) { + contractAddress = contractAddress.replace('.', '/'); + return await fetch( + `https://api.testnet.hiro.so/v2/contracts/call-read/${contractAddress}/${encodeURIComponent( + functionName + )}`, + { + method: 'POST', + headers: { + Accept: 'application/json', + 'Content-Type': 'application/json', + }, + body: JSON.stringify({ sender, arguments: args }), + } + ) + .then(res => res.json()) + .then(res => Cl.deserialize(res.result)); +} + +// export async function informBridgeApi(txid: string) { +// // todo +// return 'txid'; +// } diff --git a/packages/sbtc/src/transactions/deposit.ts b/packages/sbtc/src/transactions/deposit.ts index 0bd68ff5a..8bceccca6 100644 --- a/packages/sbtc/src/transactions/deposit.ts +++ b/packages/sbtc/src/transactions/deposit.ts @@ -1,15 +1,20 @@ import * as btc from '@scure/btc-signer'; -import * as secp from '@noble/secp256k1'; -import * as P from 'micro-packed'; -import { hex } from '@scure/base'; -import type { BridgeTransactionType, UTXO } from './types/sbtc_types.js'; -import { toStorable, buildDepositPayload, buildDepositPayloadOpReturn } from './payload_utils.js'; -import { addInputs, inputAmt } from './wallet_utils.js'; -import { MagicBytes as MagicBytes, MagicBytes, OPCodes, OpCode } from './constants.js'; +import { hexToBytes, intToHex, utf8ToBytes } from '@stacks/common'; import { c32addressDecode } from 'c32check'; +import * as P from 'micro-packed'; +import * as api from './api'; +import { BlockstreamUtxo, BlockstreamUtxoWithTxHex } from './api'; +import { MagicBytes, OpCode } from './constants'; + +// todo: move to constants? -export const REVEAL_PAYMENT = 10001; // todo: is this const? -export const DUST = 500; // todo: double-check what this has to be set to +// Estimates based on https://bitcoinops.org/en/tools/calc-size/ +const OVERHEAD_TX = 4 + 1 + 1 + 4; // new btc.Transaction().vsize +// const OVERHEAD_INPUT = 36 + 1 + 4 + 0.25; +// const OVERHEAD_OUTPUT = 8 + 1; +// const OVERHEAD_INPUT_P2PKH = 107; +const VSIZE_INPUT_P2WPKH = 68; +// const OVERHEAD_OUTPUT_P2PKH = 25; const concat = P.concatBytes; @@ -23,17 +28,6 @@ interface BitcoinNetwork { export const NETWORK: BitcoinNetwork = btc.NETWORK; export const TEST_NETWORK: BitcoinNetwork = btc.TEST_NETWORK; -interface DepositOpts { - network?: BitcoinNetwork; - amount: number; - btcFeeRates: any; - addressInfo: any; - stacksAddress: string; - sbtcWalletAddress: string; - cardinal: string; - userPaymentPubKey: string; -} - export function buildSBtcDepositBtcPayload({ network: net, address, @@ -42,269 +36,267 @@ export function buildSBtcDepositBtcPayload({ address: string; }): Uint8Array { const magicBytes = - net.bech32 === 'tb' ? hex.decode(MagicBytes.Testnet) : hex.decode(MagicBytes.Mainnet); - const opCodeBytes = hex.decode(OpCode.PegIn); + net.bech32 === 'tb' ? hexToBytes(MagicBytes.Testnet) : hexToBytes(MagicBytes.Mainnet); + const opCodeBytes = hexToBytes(OpCode.PegIn); return concat(magicBytes, opCodeBytes, stacksAddressBytes(address)); } function stacksAddressBytes(address: string): Uint8Array { const [addr, contractName] = address.split('.'); const [version, hash] = c32addressDecode(addr); - const versionBytes = hex.decode(version.toString(16)); - const hashBytes = hex.decode(hash); + const versionBytes = hexToBytes(version.toString(16)); + const hashBytes = hexToBytes(hash); + const contractNameBytes = lengthPrefixedString(contractName, utf8ToBytes); - return concat(versionBytes, hashBytes, lpContractNameBytes(contractName)); + return concat(versionBytes, hashBytes, contractNameBytes); } -function lpContractNameBytes(contractName?: string): Uint8Array { - if (!contractName) return Uint8Array.from([0]); // empty +// todo: move to utils somewhere +function lengthPrefixedString( + something: string | null | undefined, + map: (something: string) => Uint8Array = utf8ToBytes, + maxByteLength: number = 40, + prefixByteLength: number = 1 +): Uint8Array { + if (!something) return Uint8Array.from([0]); // empty or nullish (optional) + + const bytes = map(something); + if (maxByteLength >= 0 && bytes.byteLength > maxByteLength) + throw new RangeError(`Content byteLength exceeds maximum length of ${maxByteLength}`); - const cnameBuf = new TextEncoder().encode(contractName); - const cnameLen = cnameBuf.byteLength; - if (cnameBuf.length > 40) throw new Error('Contract name is too long - max 40 characters'); - return concat(cnameLen, cnameBuf); + const prefixBytes = hexToBytes(intToHex(bytes.byteLength, prefixByteLength)); + if (prefixBytes.byteLength > prefixByteLength) + throw new RangeError(`Prefix byteLength exceeds maximum length of ${prefixByteLength}`); + + return concat(prefixBytes, bytes); } -function optionalLengthPrefixed( - something: T | null | undefined, - fn: (something: T) => Uint8Array, - maxLength?: number = -1 -): Uint8Array { - if (!something) return Uint8Array.from([0]); // empty +// todo: add p2sh for xverse +async function defaultUtxoToSpendable( + utxo: BlockstreamUtxo | BlockstreamUtxoWithTxHex +): Promise<{ input: btc.TransactionInput; vsize?: number }> { + const utxoWithTx: BlockstreamUtxoWithTxHex = + 'hex' in utxo ? utxo : { ...utxo, hex: await api.fetchTxHex(utxo.txid) }; + + const tx = btc.Transaction.fromRaw(hexToBytes(utxoWithTx.hex), { + allowUnknownOutputs: true, + allowUnknownInputs: true, + }); + + const outputToSpend = tx.getOutput(utxo.vout); + if (!outputToSpend?.script) throw new Error('No script found on utxo tx'); + const spendScript = btc.OutScript.decode(outputToSpend.script); + + try { + if (spendScript.type !== 'wpkh') throw new Error('Non-p2wpkh utxo found'); - const bytes = fn(something); - const length = bytes.byteLength; - if (maxLength >= 0 && bytes.length > maxLength) { - throw new Error(`ByteLength exceeds maximum length of ${maxLength}`); + const spendableInput: btc.TransactionInput = { + txid: hexToBytes(utxo.txid), + index: utxo.vout, + ...outputToSpend, + witnessUtxo: { + script: outputToSpend.script, + amount: BigInt(utxo.value), + }, + }; + new btc.Transaction().addInput(spendableInput); // validate, throws if invalid + return { input: spendableInput, vsize: VSIZE_INPUT_P2WPKH }; + } catch (e) { + throw new Error(`Utxo doesn't match spendable type, ${JSON.stringify(utxo)}`); } - return concat(hex.length, bytes); } +// todo: after DR? +// async function tryAllToSpendable( +// utxo: BlockstreamUtxo | BlockstreamUtxoWithTxHex +// ): Promise { +// const utxoWithTx: BlockstreamUtxoWithTxHex = +// 'hex' in utxo ? utxo : { ...utxo, hex: await fetchTxHex(utxo.txid) }; + +// const tx = btc.Transaction.fromRaw(hexToBytes(utxoWithTx.hex), { +// allowUnknownOutputs: true, +// allowUnknownInputs: true, +// }); + +// const outputToSpend = tx.getOutput(utxo.vout); +// if (!outputToSpend?.script) throw new Error('No script found on utxo tx'); +// const spendScript = btc.OutScript.decode(outputToSpend.script); + +// try { +// switch (spendScript.type) { +// case 'wpkh': +// // +// } +// } catch (e) { +// throw new Error(`Utxo doesn't match spendable type, ${JSON.stringify(utxo)}`); +// } +// } + +type UtxoToSpendableFn = ( + utxo: BlockstreamUtxo | BlockstreamUtxoWithTxHex +) => Promise<{ input: btc.TransactionInput; vsize?: number }>; + +export async function utxoSelect({ + utxos, + utxoToSpendable = defaultUtxoToSpendable, + outputs, + feeRate, +}: { + utxos: (BlockstreamUtxo | BlockstreamUtxoWithTxHex)[]; + utxoToSpendable?: UtxoToSpendableFn; + outputs: btc.TransactionOutput[]; + feeRate: number; +}): Promise<{ + inputs: btc.TransactionInput[]; + outputs: btc.TransactionOutput[]; + totalSats: bigint; + changeSats: bigint; +}> { + const outputsValue = outputs.reduce( + (acc: bigint, o: btc.TransactionOutput) => acc + (o.amount ?? 0n), + 0n + ); + + const inputs: btc.TransactionInput[] = []; // collect inputs + let inputRunning = 0n; + + let vsizeRunning = txBytes([], outputs); + + for (const utxo of utxos) { + try { + const { input, vsize } = await utxoToSpendable(utxo); + const inputVsize = vsize ?? inputBytes(input); + const utxoFee = feeRate * inputVsize; + + if (utxoFee > utxo.value) continue; // skip if utxo is too small to pay fee + + // add input + inputs.push(input); + inputRunning += BigInt(utxo.value); + vsizeRunning += inputVsize; + + // check if we have enough inputs + const fee = feeRate * vsizeRunning; + if (inputRunning >= outputsValue + BigInt(fee)) { + const changeSats = inputRunning - (outputsValue + BigInt(fee)); + return { inputs, outputs, totalSats: inputRunning, changeSats }; + } + } catch (e) { + continue; // skip if utxo is not spendable + } + } + + throw new Error('Not enough funds'); +} + +/** */ +export const buildSbtcDepositTx = buildSbtcDepositTxOpReturn; // default to OP RETURN for developer release + +const SBTC_PEG_ADDRESS = 'tb1q3tj2fr9scwmcw3rq5m6jslva65f2rqjxt2t0zh'; // todo: auto-fetch or hardcode if final /** * */ -export function buildOpReturnDepositTransaction({ - network = NETWORK, - amount, - btcFeeRates, - addressInfo, +export function buildSbtcDepositTxOpReturn({ + network = TEST_NETWORK, // default to testnet for developer release + amountSats, stacksAddress, - sbtcWalletAddress, - cardinal, - userPaymentPubKey, -}: DepositOpts) { - opts.network = opts.network ?? NETWORK; // mainnet by default - const data = buildDepositPayloadOpReturn(network, stacksAddress); - const txFees = calculateDepositFees( - network, - false, - amount, - btcFeeRates.feeInfo, - addressInfo, - sbtcWalletAddress, - data - ); + pegAddress = SBTC_PEG_ADDRESS, +}: { + network?: BitcoinNetwork; + amountSats: number; + stacksAddress: string; + pegAddress?: string; +}) { + const data = buildSBtcDepositBtcPayload({ network, address: stacksAddress }); + const tx = new btc.Transaction({ - allowUnknowInput: true, - allowUnknowOutput: true, + // todo: disbale unknown allowUnknownInputs: true, allowUnknownOutputs: true, }); - // no reveal fee for op_return - addInputs(network, amount, 0, tx, false, addressInfo.utxos, userPaymentPubKey); tx.addOutput({ script: btc.Script.encode(['RETURN', data]), amount: BigInt(0) }); - tx.addOutputAddress(sbtcWalletAddress, BigInt(amount), net); - const changeAmount = inputAmt(tx) - (amount + txFees[1]); - if (changeAmount > 0) tx.addOutputAddress(cardinal, BigInt(changeAmount), net); + tx.addOutputAddress(pegAddress, BigInt(amountSats), network); + return tx; } -/** - * @param network - * @param amount the amount to deposit plus the reveal transaction gas fee - * @param btcFeeRates current rates - * @param addressInfo the utxos to spend from - * @param commitTxAddress the commitment address - contains the taproot data and the payload - * @param cardinal the change address - * @param userPaymentPubKey pubkey needed to spend script hash inputs - * @returns transaction object - */ -export function buildOpDropDepositTransaction( - network: string, - amount: number, - btcFeeRates: any, - addressInfo: any, - commitTxAddress: string, - cardinal: string, - userPaymentPubKey: string -) { - const net = network === 'testnet' ? btc.TEST_NETWORK : btc.NETWORK; - const txFees = calculateDepositFees( - network, - true, - amount, - btcFeeRates.feeInfo, - addressInfo, - commitTxAddress, - undefined - ); - const tx = new btc.Transaction({ - allowUnknowInput: true, - allowUnknowOutput: true, - allowUnknownInputs: true, - allowUnknownOutputs: true, - }); - addInputs(network, amount, REVEAL_PAYMENT, tx, false, addressInfo.utxos, userPaymentPubKey); - tx.addOutputAddress(commitTxAddress, BigInt(amount), net); - const changeAmount = inputAmt(tx) - (amount + txFees[1]); - if (changeAmount > 0) tx.addOutputAddress(cardinal, BigInt(changeAmount), net); +export async function sbtcDepositHelper({ + network = TEST_NETWORK, // default to testnet for developer release + amountSats, + stacksAddress, + bitcoinChangeAddress, + utxos, + feeRate, + pegAddress = SBTC_PEG_ADDRESS, +}: { + network?: BitcoinNetwork; + amountSats: number; + stacksAddress: string; + bitcoinChangeAddress: string; + utxos: (BlockstreamUtxo | BlockstreamUtxoWithTxHex)[]; + feeRate: number; + pegAddress?: string; +}) { + const tx = buildSbtcDepositTxOpReturn({ network, amountSats, stacksAddress, pegAddress }); + + // we separate this part, since wallets could handle it themselves + const pay = await paymentInfo({ tx, utxos, feeRate }); + for (const input of pay.inputs) tx.addInput(input); + // for (const output of pay.outputs) tx.addOutput(output); // outputs are already on tx; todo: refactor? + + const changeAfterAdditionalOutput = BigInt(VSIZE_INPUT_P2WPKH * feeRate) - pay.changeSats; + if (changeAfterAdditionalOutput > dustMinimum(VSIZE_INPUT_P2WPKH, feeRate)) { + tx.addOutputAddress(bitcoinChangeAddress, changeAfterAdditionalOutput, network); + } + return tx; } -export function getOpReturnDepositRequest( - network: string, - amount: number, - commitKeys: any, - stacksAddress: string, - sbtcWalletAddress: string, - cardinal: string -): BridgeTransactionType { - if (!stacksAddress) throw new Error('Stacks address missing'); - const data = buildDepositPayloadOpReturn(network, stacksAddress); - //console.log('reclaimAddr.pubkey: ' + commitKeys.reclaimPubKey) - //console.log('revealAddr.pubkey: ' + commitKeys.revealPubKey) - - const req: BridgeTransactionType = { - originator: stacksAddress, - fromBtcAddress: cardinal, - revealPub: commitKeys.revealPubKey, - reclaimPub: commitKeys.reclaimPubKey, - status: 1, - tries: 0, - mode: 'op_return', - amount: amount, - requestType: 'deposit', - wallet: hex.encode(data), - stacksAddress: stacksAddress, - sbtcWalletAddress: sbtcWalletAddress, - }; - return req; +export async function paymentInfo({ + tx, + feeRate, + utxos, + utxoToSpendable = defaultUtxoToSpendable, +}: { + tx: btc.Transaction; + feeRate: number; + utxos: (BlockstreamUtxo | BlockstreamUtxoWithTxHex)[]; + utxoToSpendable?: UtxoToSpendableFn; +}) { + const outputs = []; + for (let i = 0; i < tx.outputsLength; i++) { + outputs.push(tx.getOutput(i)); + } + + return await utxoSelect({ utxos, utxoToSpendable, outputs, feeRate }); } -export function getOpDropDepositRequest( - network: string, - revealFee: number, - commitKeys: any, - stacksAddress: string, - sbtcWalletAddress: string, - cardinal: string -): BridgeTransactionType { - const net = network === 'testnet' ? btc.TEST_NETWORK : btc.NETWORK; - if (!stacksAddress) throw new Error('Address needed'); - //console.log('reclaimAddr.pubkey: ' + commitKeys.reclaimPubKey) - //console.log('revealAddr.pubkey: ' + commitKeys.revealPubKey) - - const data = buildData(network, stacksAddress, revealFee, true); - const scripts = [ - { script: btc.Script.encode([data, 'DROP', hex.decode(commitKeys.revealPubKey), 'CHECKSIG']) }, - { - script: btc.Script.encode([ - 'IF', - 144, - 'CHECKSEQUENCEVERIFY', - 'DROP', - hex.decode(commitKeys.reclaimPubKey), - 'CHECKSIG', - 'ENDIF', - ]), - }, - ]; - const script = btc.p2tr(btc.TAPROOT_UNSPENDABLE_KEY, scripts, net, true); - const req: BridgeTransactionType = { - originator: stacksAddress, - fromBtcAddress: cardinal, - revealPub: commitKeys.revealPubKey, - reclaimPub: commitKeys.reclaimPubKey, - status: 1, - tries: 0, - mode: 'op_drop', - amount: revealFee, - requestType: 'deposit', - wallet: - "p2tr(TAPROOT_UNSPENDABLE_KEY, [{ script: Script.encode([data, 'DROP', revealPubK, 'CHECKSIG']) }, { script: Script.encode([reclaimPubKey, 'CHECKSIG']) }], net, true)", - stacksAddress: stacksAddress, - sbtcWalletAddress: sbtcWalletAddress, - }; - req.commitTxScript = toStorable(script); - return req; +const plus = (a: number, b: number) => a + b; + +function txBytes(inputs: btc.TransactionInput[], outputs: btc.TransactionOutput[]) { + return ( + OVERHEAD_TX + inputs.map(inputBytes).reduce(plus, 0) + outputs.map(outputBytes).reduce(plus, 0) + ); } -function buildData( - network: string, - sigOrPrin: string, - revealFee: number, - opDrop: boolean -): Uint8Array { - const net = network === 'testnet' ? btc.TEST_NETWORK : btc.NETWORK; - if (opDrop) { - return buildDepositPayload(net, revealFee, sigOrPrin, opDrop, undefined); - } - return buildDepositPayloadOpReturn(net, sigOrPrin); +// todo: switch to estimating? + +function inputBytes(input: btc.TransactionInput) { + const tmpTx = new btc.Transaction({ allowUnknownInputs: true }); + const originalSize = tmpTx.vsize; + tmpTx.addInput(input); + return tmpTx.vsize - originalSize; + // return OVERHEAD_INPUT + (input.finalScriptWitness ? input.finalScriptWitness.byteLength : OVERHEAD_INPUT_P2PKH); } -export function maxCommit(addressInfo: any) { - if (!addressInfo || !addressInfo.utxos || addressInfo.utxos.length === 0) return 0; - const summ = addressInfo?.utxos - ?.map((item: { value: number }) => item.value) - .reduce((prev: number, curr: number) => prev + curr, 0); - return summ || 0; +function outputBytes(output: btc.TransactionOutput) { + const tmpTx = new btc.Transaction({ allowUnknownOutputs: true }); + const originalSize = tmpTx.vsize; + tmpTx.addOutput(output); + return tmpTx.vsize - originalSize; + // return OVERHEAD_OUTPUT + (output.script ? output.script.byteLength : OVERHEAD_OUTPUT_P2PKH); } -export function calculateDepositFees( - network: string, - opDrop: boolean, - amount: number, - feeInfo: any, - addressInfo: any, - commitTxScriptAddress: string, - data: Uint8Array | undefined -) { - try { - const net = network === 'testnet' ? btc.TEST_NETWORK : btc.NETWORK; - let vsize = 0; - const tx = new btc.Transaction({ - allowUnknowInput: true, - allowUnknowOutput: true, - allowUnknownInputs: true, - allowUnknownOutputs: true, - }); - addInputs( - network, - amount, - REVEAL_PAYMENT, - tx, - true, - addressInfo.utxos, - hex.encode(secp.getPublicKey(privKey, true)) - ); - if (!opDrop) { - if (data) tx.addOutput({ script: btc.Script.encode(['RETURN', data]), amount: BigInt(0) }); - tx.addOutputAddress(commitTxScriptAddress, BigInt(amount), net); - } else { - tx.addOutputAddress(commitTxScriptAddress, BigInt(amount), net); - } - const changeAmount = inputAmt(tx) - amount; - if (changeAmount > 0) tx.addOutputAddress(addressInfo.address, BigInt(changeAmount), net); - //tx.sign(privKey); - //tx.finalize(); - vsize = tx.vsize; - const fees = [ - Math.floor((vsize * feeInfo['low_fee_per_kb']) / 1024), - Math.floor((vsize * feeInfo['medium_fee_per_kb']) / 1024), - Math.floor((vsize * feeInfo['high_fee_per_kb']) / 1024), - ]; - return fees; - } catch (err: any) { - return [850, 1000, 1150]; - } +function dustMinimum(inputVsize: number, feeRate: number) { + return inputVsize * feeRate; } diff --git a/packages/sbtc/src/transactions/index.ts b/packages/sbtc/src/transactions/index.ts new file mode 100644 index 000000000..23f5769d0 --- /dev/null +++ b/packages/sbtc/src/transactions/index.ts @@ -0,0 +1,3 @@ +export * from './api'; +export * from './deposit'; +export * from './constants'; diff --git a/packages/sbtc/tests/deposit.test.ts b/packages/sbtc/tests/deposit.test.ts new file mode 100644 index 000000000..3e0c764ef --- /dev/null +++ b/packages/sbtc/tests/deposit.test.ts @@ -0,0 +1,61 @@ +import { HDKey } from '@scure/bip32'; +import * as bip39 from '@scure/bip39'; +import * as btc from '@scure/btc-signer'; +import { describe, expect, test } from 'vitest'; +import { sbtcDepositHelper } from '../src'; +import * as api from '../src/transactions/api'; + +describe('mock integration test', () => { + test('deposit', async () => { + // == Wallet =================================================================== + const seed = await bip39.mnemonicToSeed( + 'twice kind fence tip hidden tilt action fragile skin nothing glory cousin green tomorrow spring wrist shed math olympic multiply hip blue scout claw' + ); + + const TESTNET_VERSION = { + private: 0x00000000, + public: 0x043587cf, + }; + const hdkey = HDKey.fromMasterSeed(seed, TESTNET_VERSION); + + const chainCode = 1; // testnet = 1, mainnet = 0 + const accountIndex = 0; + const path = `m/84'/${chainCode}'/${accountIndex}'/0/0`; + + const privKey = hdkey.derive(path).privateKey!; + const address = btc.getAddress('wpkh', privKey, btc.TEST_NETWORK)!; + + // == sBTC ===================================================================== + + const TARGET_STACKS_ADDRESS = 'ST1PQHQKV0RJXZFY1DGX8MNSNYVE3VGZJSRTPGZGM'; + + // Tx building (most simple interface) + const tx = await sbtcDepositHelper({ + stacksAddress: TARGET_STACKS_ADDRESS, + amountSats: 1_000, + + feeRate: await api.estimateFeeRate('low'), + utxos: await api.fetchUtxos(address), + + bitcoinChangeAddress: address, + }); + + tx.sign(privKey); + tx.finalize(); + + expect(tx).toBeDefined(); // yay, it didn't throw + }); +}); + +// api.broadcastTx(tx); + +// == Advanced ================================================================= + +// const PEG_PUB_KEY = ( +// await api.stacksCallReadOnly({ +// contractAddress: "ST1R1061ZT6KPJXQ7PAXPFB6ZAZ6ZWW28G8HXK9G5.romeo-bridge", +// functionName: "get-bitcoin-wallet-public-key", +// sender: TARGET_STACKS_ADDRESS, // not actually used in call +// }) +// ).value.buffer; +// const PEG_ADDRESS = btc.p2tr(PEG_PUB_KEY, undefined, btc.TEST_NETWORK).address; diff --git a/packages/sbtc/tsconfig.build.json b/packages/sbtc/tsconfig.build.json index 8d57d415d..e6c63a0c7 100644 --- a/packages/sbtc/tsconfig.build.json +++ b/packages/sbtc/tsconfig.build.json @@ -11,9 +11,6 @@ { "path": "../common/tsconfig.build.json" }, - { - "path": "../encryption/tsconfig.build.json" - }, { "path": "../network/tsconfig.build.json" }, @@ -21,7 +18,5 @@ "path": "../transactions/tsconfig.build.json" } ], - "include": [ - "src/**/*" - ] + "include": ["src/**/*"] } diff --git a/packages/sbtc/webpack.config.js b/packages/sbtc/webpack.config.js index a41c22f84..9abb3d136 100644 --- a/packages/sbtc/webpack.config.js +++ b/packages/sbtc/webpack.config.js @@ -1,6 +1,6 @@ const config = require('../../configs/webpack.config.js'); -config.output.library.name = 'StacksStacking'; +config.output.library.name = 'StacksSbtc'; config.resolve.fallback = {}; diff --git a/vitest.config.ts b/vitest.config.ts new file mode 100644 index 000000000..31e4d9e3c --- /dev/null +++ b/vitest.config.ts @@ -0,0 +1,7 @@ +import { defineConfig } from 'vitest/config'; + +export default defineConfig({ + test: { + testTimeout: process.env.CI ? 5_000 : 1_000_000, + }, +}); From 040a9a545d37cf0c32d9ab610889f8943bf10af5 Mon Sep 17 00:00:00 2001 From: janniks Date: Mon, 2 Oct 2023 18:07:20 +0200 Subject: [PATCH 04/49] test: update tests --- packages/sbtc/package.json | 2 +- packages/sbtc/src/transactions/api.ts | 22 ++++++++++++++++++++++ packages/sbtc/src/transactions/deposit.ts | 14 +++++++------- 3 files changed, 30 insertions(+), 8 deletions(-) diff --git a/packages/sbtc/package.json b/packages/sbtc/package.json index 543978784..e4bec5ec2 100644 --- a/packages/sbtc/package.json +++ b/packages/sbtc/package.json @@ -14,7 +14,7 @@ "pack": "npm pack", "prepublishOnly": "npm run test && NODE_ENV=production npm run build", "start": "tsc -b tsconfig.build.json --watch --verbose", - "test": "jest", + "test": "vitest", "test:watch": "jest --watch --coverage=false", "typecheck": "tsc --noEmit", "typecheck:watch": "npm run typecheck -- --watch" diff --git a/packages/sbtc/src/transactions/api.ts b/packages/sbtc/src/transactions/api.ts index a8ef55055..3e8354958 100644 --- a/packages/sbtc/src/transactions/api.ts +++ b/packages/sbtc/src/transactions/api.ts @@ -128,3 +128,25 @@ export async function stacksCallReadOnly({ // // todo // return 'txid'; // } + +interface SbtcDevEnvApiUrls { + bitcoinExplorerApiUrl: string; + bitcoinNodeUrl: string; + bitcoinApiUrl: string; // electrs + + stacksExplorerApiUrl: string; + stacksNodeUrl: string; + stacksApiUrl: string; + + sbtcBridgeApiUrl: string; +} + +export class sbtcDevEnvApi { + urls: SbtcDevEnvApiUrls; + + constructor(urls: SbtcDevEnvApiUrls) { + this.urls = urls; + + this.urls.sbtcBridgeApiUrl ??= 'http://127.0.0.1:3010/'; + } +} diff --git a/packages/sbtc/src/transactions/deposit.ts b/packages/sbtc/src/transactions/deposit.ts index 8bceccca6..048d269cb 100644 --- a/packages/sbtc/src/transactions/deposit.ts +++ b/packages/sbtc/src/transactions/deposit.ts @@ -148,7 +148,6 @@ export async function utxoSelect({ feeRate: number; }): Promise<{ inputs: btc.TransactionInput[]; - outputs: btc.TransactionOutput[]; totalSats: bigint; changeSats: bigint; }> { @@ -177,9 +176,9 @@ export async function utxoSelect({ // check if we have enough inputs const fee = feeRate * vsizeRunning; - if (inputRunning >= outputsValue + BigInt(fee)) { - const changeSats = inputRunning - (outputsValue + BigInt(fee)); - return { inputs, outputs, totalSats: inputRunning, changeSats }; + if (inputRunning >= outputsValue + BigInt(Math.ceil(fee))) { + const changeSats = inputRunning - (outputsValue + BigInt(Math.ceil(fee))); + return { inputs, totalSats: inputRunning, changeSats }; } } catch (e) { continue; // skip if utxo is not spendable @@ -242,9 +241,10 @@ export async function sbtcDepositHelper({ // we separate this part, since wallets could handle it themselves const pay = await paymentInfo({ tx, utxos, feeRate }); for (const input of pay.inputs) tx.addInput(input); - // for (const output of pay.outputs) tx.addOutput(output); // outputs are already on tx; todo: refactor? + // outputs are already on tx - const changeAfterAdditionalOutput = BigInt(VSIZE_INPUT_P2WPKH * feeRate) - pay.changeSats; + const changeAfterAdditionalOutput = + BigInt(Math.ceil(VSIZE_INPUT_P2WPKH * feeRate)) - pay.changeSats; if (changeAfterAdditionalOutput > dustMinimum(VSIZE_INPUT_P2WPKH, feeRate)) { tx.addOutputAddress(bitcoinChangeAddress, changeAfterAdditionalOutput, network); } @@ -298,5 +298,5 @@ function outputBytes(output: btc.TransactionOutput) { } function dustMinimum(inputVsize: number, feeRate: number) { - return inputVsize * feeRate; + return Math.ceil(inputVsize * feeRate); } From ef9d854a1927d1ba4b1df14a1a7b27016cb24b51 Mon Sep 17 00:00:00 2001 From: janniks Date: Tue, 3 Oct 2023 00:24:45 +0200 Subject: [PATCH 05/49] refactor: add withdraw stubs --- packages/sbtc/src/transactions/constants.ts | 22 ++ packages/sbtc/src/transactions/deposit.ts | 226 +------------------- packages/sbtc/src/transactions/index.ts | 6 +- packages/sbtc/src/transactions/utils.ts | 207 ++++++++++++++++++ packages/sbtc/src/transactions/withdraw.ts | 88 ++++++++ 5 files changed, 332 insertions(+), 217 deletions(-) create mode 100644 packages/sbtc/src/transactions/utils.ts create mode 100644 packages/sbtc/src/transactions/withdraw.ts diff --git a/packages/sbtc/src/transactions/constants.ts b/packages/sbtc/src/transactions/constants.ts index c10e68e85..df4b5b735 100644 --- a/packages/sbtc/src/transactions/constants.ts +++ b/packages/sbtc/src/transactions/constants.ts @@ -1,3 +1,17 @@ +import * as btc from '@scure/btc-signer'; + +export const SBTC_PEG_ADDRESS = 'tb1q3tj2fr9scwmcw3rq5m6jslva65f2rqjxt2t0zh'; // todo: auto-fetch or hardcode if final + +export interface BitcoinNetwork { + bech32: string; + pubKeyHash: number; + scriptHash: number; + wif: number; +} + +export const NETWORK: BitcoinNetwork = btc.NETWORK; +export const TEST_NETWORK: BitcoinNetwork = btc.TEST_NETWORK; + export enum MagicBytes { Mainnet = '5832', Testnet = '5432', @@ -7,3 +21,11 @@ export enum OpCode { PegIn = '3C', PegOut = '3E', } + +// Estimates based on https://bitcoinops.org/en/tools/calc-size/ +export const OVERHEAD_TX = 4 + 1 + 1 + 4; // new btc.Transaction().vsize +// const OVERHEAD_INPUT = 36 + 1 + 4 + 0.25; +// const OVERHEAD_OUTPUT = 8 + 1; +// const OVERHEAD_INPUT_P2PKH = 107; +export const VSIZE_INPUT_P2WPKH = 68; +// const OVERHEAD_OUTPUT_P2PKH = 25; diff --git a/packages/sbtc/src/transactions/deposit.ts b/packages/sbtc/src/transactions/deposit.ts index 048d269cb..249c3a682 100644 --- a/packages/sbtc/src/transactions/deposit.ts +++ b/packages/sbtc/src/transactions/deposit.ts @@ -4,30 +4,21 @@ import { c32addressDecode } from 'c32check'; import * as P from 'micro-packed'; import * as api from './api'; import { BlockstreamUtxo, BlockstreamUtxoWithTxHex } from './api'; -import { MagicBytes, OpCode } from './constants'; +import { + BitcoinNetwork, + MagicBytes, + OVERHEAD_TX, + OpCode, + SBTC_PEG_ADDRESS, + TEST_NETWORK, + VSIZE_INPUT_P2WPKH, +} from './constants'; +import { dustMinimum, paymentInfo, stacksAddressBytes } from './utils'; // todo: move to constants? -// Estimates based on https://bitcoinops.org/en/tools/calc-size/ -const OVERHEAD_TX = 4 + 1 + 1 + 4; // new btc.Transaction().vsize -// const OVERHEAD_INPUT = 36 + 1 + 4 + 0.25; -// const OVERHEAD_OUTPUT = 8 + 1; -// const OVERHEAD_INPUT_P2PKH = 107; -const VSIZE_INPUT_P2WPKH = 68; -// const OVERHEAD_OUTPUT_P2PKH = 25; - const concat = P.concatBytes; -interface BitcoinNetwork { - bech32: string; - pubKeyHash: number; - scriptHash: number; - wif: number; -} - -export const NETWORK: BitcoinNetwork = btc.NETWORK; -export const TEST_NETWORK: BitcoinNetwork = btc.TEST_NETWORK; - export function buildSBtcDepositBtcPayload({ network: net, address, @@ -41,157 +32,9 @@ export function buildSBtcDepositBtcPayload({ return concat(magicBytes, opCodeBytes, stacksAddressBytes(address)); } -function stacksAddressBytes(address: string): Uint8Array { - const [addr, contractName] = address.split('.'); - const [version, hash] = c32addressDecode(addr); - const versionBytes = hexToBytes(version.toString(16)); - const hashBytes = hexToBytes(hash); - const contractNameBytes = lengthPrefixedString(contractName, utf8ToBytes); - - return concat(versionBytes, hashBytes, contractNameBytes); -} - -// todo: move to utils somewhere -function lengthPrefixedString( - something: string | null | undefined, - map: (something: string) => Uint8Array = utf8ToBytes, - maxByteLength: number = 40, - prefixByteLength: number = 1 -): Uint8Array { - if (!something) return Uint8Array.from([0]); // empty or nullish (optional) - - const bytes = map(something); - if (maxByteLength >= 0 && bytes.byteLength > maxByteLength) - throw new RangeError(`Content byteLength exceeds maximum length of ${maxByteLength}`); - - const prefixBytes = hexToBytes(intToHex(bytes.byteLength, prefixByteLength)); - if (prefixBytes.byteLength > prefixByteLength) - throw new RangeError(`Prefix byteLength exceeds maximum length of ${prefixByteLength}`); - - return concat(prefixBytes, bytes); -} - -// todo: add p2sh for xverse -async function defaultUtxoToSpendable( - utxo: BlockstreamUtxo | BlockstreamUtxoWithTxHex -): Promise<{ input: btc.TransactionInput; vsize?: number }> { - const utxoWithTx: BlockstreamUtxoWithTxHex = - 'hex' in utxo ? utxo : { ...utxo, hex: await api.fetchTxHex(utxo.txid) }; - - const tx = btc.Transaction.fromRaw(hexToBytes(utxoWithTx.hex), { - allowUnknownOutputs: true, - allowUnknownInputs: true, - }); - - const outputToSpend = tx.getOutput(utxo.vout); - if (!outputToSpend?.script) throw new Error('No script found on utxo tx'); - const spendScript = btc.OutScript.decode(outputToSpend.script); - - try { - if (spendScript.type !== 'wpkh') throw new Error('Non-p2wpkh utxo found'); - - const spendableInput: btc.TransactionInput = { - txid: hexToBytes(utxo.txid), - index: utxo.vout, - ...outputToSpend, - witnessUtxo: { - script: outputToSpend.script, - amount: BigInt(utxo.value), - }, - }; - new btc.Transaction().addInput(spendableInput); // validate, throws if invalid - return { input: spendableInput, vsize: VSIZE_INPUT_P2WPKH }; - } catch (e) { - throw new Error(`Utxo doesn't match spendable type, ${JSON.stringify(utxo)}`); - } -} - -// todo: after DR? -// async function tryAllToSpendable( -// utxo: BlockstreamUtxo | BlockstreamUtxoWithTxHex -// ): Promise { -// const utxoWithTx: BlockstreamUtxoWithTxHex = -// 'hex' in utxo ? utxo : { ...utxo, hex: await fetchTxHex(utxo.txid) }; - -// const tx = btc.Transaction.fromRaw(hexToBytes(utxoWithTx.hex), { -// allowUnknownOutputs: true, -// allowUnknownInputs: true, -// }); - -// const outputToSpend = tx.getOutput(utxo.vout); -// if (!outputToSpend?.script) throw new Error('No script found on utxo tx'); -// const spendScript = btc.OutScript.decode(outputToSpend.script); - -// try { -// switch (spendScript.type) { -// case 'wpkh': -// // -// } -// } catch (e) { -// throw new Error(`Utxo doesn't match spendable type, ${JSON.stringify(utxo)}`); -// } -// } - -type UtxoToSpendableFn = ( - utxo: BlockstreamUtxo | BlockstreamUtxoWithTxHex -) => Promise<{ input: btc.TransactionInput; vsize?: number }>; - -export async function utxoSelect({ - utxos, - utxoToSpendable = defaultUtxoToSpendable, - outputs, - feeRate, -}: { - utxos: (BlockstreamUtxo | BlockstreamUtxoWithTxHex)[]; - utxoToSpendable?: UtxoToSpendableFn; - outputs: btc.TransactionOutput[]; - feeRate: number; -}): Promise<{ - inputs: btc.TransactionInput[]; - totalSats: bigint; - changeSats: bigint; -}> { - const outputsValue = outputs.reduce( - (acc: bigint, o: btc.TransactionOutput) => acc + (o.amount ?? 0n), - 0n - ); - - const inputs: btc.TransactionInput[] = []; // collect inputs - let inputRunning = 0n; - - let vsizeRunning = txBytes([], outputs); - - for (const utxo of utxos) { - try { - const { input, vsize } = await utxoToSpendable(utxo); - const inputVsize = vsize ?? inputBytes(input); - const utxoFee = feeRate * inputVsize; - - if (utxoFee > utxo.value) continue; // skip if utxo is too small to pay fee - - // add input - inputs.push(input); - inputRunning += BigInt(utxo.value); - vsizeRunning += inputVsize; - - // check if we have enough inputs - const fee = feeRate * vsizeRunning; - if (inputRunning >= outputsValue + BigInt(Math.ceil(fee))) { - const changeSats = inputRunning - (outputsValue + BigInt(Math.ceil(fee))); - return { inputs, totalSats: inputRunning, changeSats }; - } - } catch (e) { - continue; // skip if utxo is not spendable - } - } - - throw new Error('Not enough funds'); -} - /** */ export const buildSbtcDepositTx = buildSbtcDepositTxOpReturn; // default to OP RETURN for developer release -const SBTC_PEG_ADDRESS = 'tb1q3tj2fr9scwmcw3rq5m6jslva65f2rqjxt2t0zh'; // todo: auto-fetch or hardcode if final /** * */ @@ -251,52 +94,3 @@ export async function sbtcDepositHelper({ return tx; } - -export async function paymentInfo({ - tx, - feeRate, - utxos, - utxoToSpendable = defaultUtxoToSpendable, -}: { - tx: btc.Transaction; - feeRate: number; - utxos: (BlockstreamUtxo | BlockstreamUtxoWithTxHex)[]; - utxoToSpendable?: UtxoToSpendableFn; -}) { - const outputs = []; - for (let i = 0; i < tx.outputsLength; i++) { - outputs.push(tx.getOutput(i)); - } - - return await utxoSelect({ utxos, utxoToSpendable, outputs, feeRate }); -} - -const plus = (a: number, b: number) => a + b; - -function txBytes(inputs: btc.TransactionInput[], outputs: btc.TransactionOutput[]) { - return ( - OVERHEAD_TX + inputs.map(inputBytes).reduce(plus, 0) + outputs.map(outputBytes).reduce(plus, 0) - ); -} - -// todo: switch to estimating? - -function inputBytes(input: btc.TransactionInput) { - const tmpTx = new btc.Transaction({ allowUnknownInputs: true }); - const originalSize = tmpTx.vsize; - tmpTx.addInput(input); - return tmpTx.vsize - originalSize; - // return OVERHEAD_INPUT + (input.finalScriptWitness ? input.finalScriptWitness.byteLength : OVERHEAD_INPUT_P2PKH); -} - -function outputBytes(output: btc.TransactionOutput) { - const tmpTx = new btc.Transaction({ allowUnknownOutputs: true }); - const originalSize = tmpTx.vsize; - tmpTx.addOutput(output); - return tmpTx.vsize - originalSize; - // return OVERHEAD_OUTPUT + (output.script ? output.script.byteLength : OVERHEAD_OUTPUT_P2PKH); -} - -function dustMinimum(inputVsize: number, feeRate: number) { - return Math.ceil(inputVsize * feeRate); -} diff --git a/packages/sbtc/src/transactions/index.ts b/packages/sbtc/src/transactions/index.ts index 23f5769d0..a966746ac 100644 --- a/packages/sbtc/src/transactions/index.ts +++ b/packages/sbtc/src/transactions/index.ts @@ -1,3 +1,7 @@ export * from './api'; -export * from './deposit'; export * from './constants'; + +export * from './deposit'; +export * from './withdraw'; + +export * from './utils'; diff --git a/packages/sbtc/src/transactions/utils.ts b/packages/sbtc/src/transactions/utils.ts new file mode 100644 index 000000000..52f3ef189 --- /dev/null +++ b/packages/sbtc/src/transactions/utils.ts @@ -0,0 +1,207 @@ +import * as btc from '@scure/btc-signer'; +import { hexToBytes, intToHex, utf8ToBytes } from '@stacks/common'; +import { c32addressDecode } from 'c32check'; +import * as P from 'micro-packed'; +import * as api from './api'; +import { BlockstreamUtxo, BlockstreamUtxoWithTxHex } from './api'; + +import { OVERHEAD_TX, VSIZE_INPUT_P2WPKH } from './constants'; + +const concat = P.concatBytes; + +// todo: move to transactions package +export function stacksAddressBytes(address: string): Uint8Array { + const [addr, contractName] = address.split('.'); + const [version, hash] = c32addressDecode(addr); + const versionBytes = hexToBytes(version.toString(16)); + const hashBytes = hexToBytes(hash); + const contractNameBytes = lengthPrefixedString(contractName, utf8ToBytes); + + return concat(versionBytes, hashBytes, contractNameBytes); +} + +// todo: move to transactions package +export function lengthPrefixedString( + something: string | null | undefined, + map: (something: string) => Uint8Array = utf8ToBytes, + maxByteLength: number = 40, + prefixByteLength: number = 1 +): Uint8Array { + if (!something) return Uint8Array.from([0]); // empty or nullish (optional) + + const bytes = map(something); + if (maxByteLength >= 0 && bytes.byteLength > maxByteLength) + throw new RangeError(`Content byteLength exceeds maximum length of ${maxByteLength}`); + + const prefixBytes = hexToBytes(intToHex(bytes.byteLength, prefixByteLength)); + if (prefixBytes.byteLength > prefixByteLength) + throw new RangeError(`Prefix byteLength exceeds maximum length of ${prefixByteLength}`); + + return concat(prefixBytes, bytes); +} + +export async function paymentInfo({ + tx, + feeRate, + utxos, + utxoToSpendable = defaultUtxoToSpendable, +}: { + tx: btc.Transaction; + feeRate: number; + utxos: (BlockstreamUtxo | BlockstreamUtxoWithTxHex)[]; + utxoToSpendable?: UtxoToSpendableFn; +}) { + const outputs = []; + for (let i = 0; i < tx.outputsLength; i++) { + outputs.push(tx.getOutput(i)); + } + + return await utxoSelect({ utxos, utxoToSpendable, outputs, feeRate }); +} + +const plus = (a: number, b: number) => a + b; + +export function txBytes(inputs: btc.TransactionInput[], outputs: btc.TransactionOutput[]) { + return ( + OVERHEAD_TX + inputs.map(inputBytes).reduce(plus, 0) + outputs.map(outputBytes).reduce(plus, 0) + ); +} + +// todo: switch to estimating? + +export function inputBytes(input: btc.TransactionInput) { + const tmpTx = new btc.Transaction({ allowUnknownInputs: true }); + const originalSize = tmpTx.vsize; + tmpTx.addInput(input); + return tmpTx.vsize - originalSize; + // return OVERHEAD_INPUT + (input.finalScriptWitness ? input.finalScriptWitness.byteLength : OVERHEAD_INPUT_P2PKH); +} + +export function outputBytes(output: btc.TransactionOutput) { + const tmpTx = new btc.Transaction({ allowUnknownOutputs: true }); + const originalSize = tmpTx.vsize; + tmpTx.addOutput(output); + return tmpTx.vsize - originalSize; + // return OVERHEAD_OUTPUT + (output.script ? output.script.byteLength : OVERHEAD_OUTPUT_P2PKH); +} + +export function dustMinimum(inputVsize: number, feeRate: number) { + return Math.ceil(inputVsize * feeRate); +} + +export type UtxoToSpendableFn = ( + utxo: BlockstreamUtxo | BlockstreamUtxoWithTxHex +) => Promise<{ input: btc.TransactionInput; vsize?: number }>; + +export async function utxoSelect({ + utxos, + utxoToSpendable = defaultUtxoToSpendable, + outputs, + feeRate, +}: { + utxos: (BlockstreamUtxo | BlockstreamUtxoWithTxHex)[]; + utxoToSpendable?: UtxoToSpendableFn; + outputs: btc.TransactionOutput[]; + feeRate: number; +}): Promise<{ + inputs: btc.TransactionInput[]; + totalSats: bigint; + changeSats: bigint; +}> { + const outputsValue = outputs.reduce( + (acc: bigint, o: btc.TransactionOutput) => acc + (o.amount ?? 0n), + 0n + ); + + const inputs: btc.TransactionInput[] = []; // collect inputs + let inputRunning = 0n; + + let vsizeRunning = txBytes([], outputs); + + for (const utxo of utxos) { + try { + const { input, vsize } = await utxoToSpendable(utxo); + const inputVsize = vsize ?? inputBytes(input); + const utxoFee = feeRate * inputVsize; + + if (utxoFee > utxo.value) continue; // skip if utxo is too small to pay fee + + // add input + inputs.push(input); + inputRunning += BigInt(utxo.value); + vsizeRunning += inputVsize; + + // check if we have enough inputs + const fee = feeRate * vsizeRunning; + if (inputRunning >= outputsValue + BigInt(Math.ceil(fee))) { + const changeSats = inputRunning - (outputsValue + BigInt(Math.ceil(fee))); + return { inputs, totalSats: inputRunning, changeSats }; + } + } catch (e) { + continue; // skip if utxo is not spendable + } + } + + throw new Error('Not enough funds'); +} + +// todo: add p2sh for xverse +async function defaultUtxoToSpendable( + utxo: BlockstreamUtxo | BlockstreamUtxoWithTxHex +): Promise<{ input: btc.TransactionInput; vsize?: number }> { + const utxoWithTx: BlockstreamUtxoWithTxHex = + 'hex' in utxo ? utxo : { ...utxo, hex: await api.fetchTxHex(utxo.txid) }; + + const tx = btc.Transaction.fromRaw(hexToBytes(utxoWithTx.hex), { + allowUnknownOutputs: true, + allowUnknownInputs: true, + }); + + const outputToSpend = tx.getOutput(utxo.vout); + if (!outputToSpend?.script) throw new Error('No script found on utxo tx'); + const spendScript = btc.OutScript.decode(outputToSpend.script); + + try { + if (spendScript.type !== 'wpkh') throw new Error('Non-p2wpkh utxo found'); + + const spendableInput: btc.TransactionInput = { + txid: hexToBytes(utxo.txid), + index: utxo.vout, + ...outputToSpend, + witnessUtxo: { + script: outputToSpend.script, + amount: BigInt(utxo.value), + }, + }; + new btc.Transaction().addInput(spendableInput); // validate, throws if invalid + return { input: spendableInput, vsize: VSIZE_INPUT_P2WPKH }; + } catch (e) { + throw new Error(`Utxo doesn't match spendable type, ${JSON.stringify(utxo)}`); + } +} + +// todo: after DR? +// async function tryAllToSpendable( +// utxo: BlockstreamUtxo | BlockstreamUtxoWithTxHex +// ): Promise { +// const utxoWithTx: BlockstreamUtxoWithTxHex = +// 'hex' in utxo ? utxo : { ...utxo, hex: await fetchTxHex(utxo.txid) }; + +// const tx = btc.Transaction.fromRaw(hexToBytes(utxoWithTx.hex), { +// allowUnknownOutputs: true, +// allowUnknownInputs: true, +// }); + +// const outputToSpend = tx.getOutput(utxo.vout); +// if (!outputToSpend?.script) throw new Error('No script found on utxo tx'); +// const spendScript = btc.OutScript.decode(outputToSpend.script); + +// try { +// switch (spendScript.type) { +// case 'wpkh': +// // +// } +// } catch (e) { +// throw new Error(`Utxo doesn't match spendable type, ${JSON.stringify(utxo)}`); +// } +// } diff --git a/packages/sbtc/src/transactions/withdraw.ts b/packages/sbtc/src/transactions/withdraw.ts new file mode 100644 index 000000000..e5837b4e4 --- /dev/null +++ b/packages/sbtc/src/transactions/withdraw.ts @@ -0,0 +1,88 @@ +import * as btc from '@scure/btc-signer'; +import { hexToBytes } from '@stacks/common'; +import * as P from 'micro-packed'; +import { BlockstreamUtxo, BlockstreamUtxoWithTxHex } from './api'; +import { + BitcoinNetwork, + MagicBytes, + OpCode, + SBTC_PEG_ADDRESS, + TEST_NETWORK, + VSIZE_INPUT_P2WPKH, +} from './constants'; + +import { dustMinimum, paymentInfo, stacksAddressBytes } from './utils'; + +const concat = P.concatBytes; + +export async function sbtcWithdrawHelper({ + network = TEST_NETWORK, // default to testnet for developer release + amountSats, + signature, + stacksAddress, + bitcoinChangeAddress, + utxos, + feeRate, + pegAddress = SBTC_PEG_ADDRESS, +}: { + network?: BitcoinNetwork; + amountSats: number; + signature: string; + stacksAddress: string; + bitcoinChangeAddress: string; + utxos: (BlockstreamUtxo | BlockstreamUtxoWithTxHex)[]; + feeRate: number; + pegAddress?: string; +}) { + const tx = buildSbtcWithdrawTxOpReturn({ network, amountSats, stacksAddress, pegAddress }); + + // we separate this part, since wallets could handle it themselves + const pay = await paymentInfo({ tx, utxos, feeRate }); + for (const input of pay.inputs) tx.addInput(input); + // outputs are already on tx + + const changeAfterAdditionalOutput = + BigInt(Math.ceil(VSIZE_INPUT_P2WPKH * feeRate)) - pay.changeSats; + if (changeAfterAdditionalOutput > dustMinimum(VSIZE_INPUT_P2WPKH, feeRate)) { + tx.addOutputAddress(bitcoinChangeAddress, changeAfterAdditionalOutput, network); + } + + return tx; +} + +export function buildSbtcWithdrawTxOpReturn({ + network = TEST_NETWORK, // default to testnet for developer release + amountSats, + stacksAddress, + pegAddress = SBTC_PEG_ADDRESS, +}: { + network?: BitcoinNetwork; + amountSats: number; + stacksAddress: string; + pegAddress?: string; +}) { + const data = buildSBtcWithdrawBtcPayload({ network, address: stacksAddress }); + + const tx = new btc.Transaction({ + // todo: disbale unknown + allowUnknownInputs: true, + allowUnknownOutputs: true, + }); + tx.addOutput({ script: btc.Script.encode(['RETURN', data]), amount: BigInt(0) }); + tx.addOutputAddress(pegAddress, BigInt(amountSats), network); + + return tx; +} + +export function buildSBtcWithdrawBtcPayload({ + network: net, + address, +}: { + network: BitcoinNetwork; + address: string; +}): Uint8Array { + const magicBytes = + net.bech32 === 'tb' ? hexToBytes(MagicBytes.Testnet) : hexToBytes(MagicBytes.Mainnet); + const opCodeBytes = hexToBytes(OpCode.PegOut); + return concat(magicBytes, opCodeBytes, stacksAddressBytes(address)); +} From 7f3c32dad941ba3c4b29e9fc63f46d49ecfada93 Mon Sep 17 00:00:00 2001 From: janniks Date: Tue, 3 Oct 2023 00:25:35 +0200 Subject: [PATCH 06/49] build: fix unused --- packages/sbtc/src/transactions/deposit.ts | 5 +---- packages/sbtc/src/transactions/withdraw.ts | 1 + 2 files changed, 2 insertions(+), 4 deletions(-) diff --git a/packages/sbtc/src/transactions/deposit.ts b/packages/sbtc/src/transactions/deposit.ts index 249c3a682..db4201913 100644 --- a/packages/sbtc/src/transactions/deposit.ts +++ b/packages/sbtc/src/transactions/deposit.ts @@ -1,13 +1,10 @@ import * as btc from '@scure/btc-signer'; -import { hexToBytes, intToHex, utf8ToBytes } from '@stacks/common'; -import { c32addressDecode } from 'c32check'; +import { hexToBytes } from '@stacks/common'; import * as P from 'micro-packed'; -import * as api from './api'; import { BlockstreamUtxo, BlockstreamUtxoWithTxHex } from './api'; import { BitcoinNetwork, MagicBytes, - OVERHEAD_TX, OpCode, SBTC_PEG_ADDRESS, TEST_NETWORK, diff --git a/packages/sbtc/src/transactions/withdraw.ts b/packages/sbtc/src/transactions/withdraw.ts index e5837b4e4..80484090b 100644 --- a/packages/sbtc/src/transactions/withdraw.ts +++ b/packages/sbtc/src/transactions/withdraw.ts @@ -35,6 +35,7 @@ export async function sbtcWithdrawHelper({ pegAddress?: string; }) { const tx = buildSbtcWithdrawTxOpReturn({ network, amountSats, stacksAddress, pegAddress }); + console.log(signature); // we separate this part, since wallets could handle it themselves const pay = await paymentInfo({ tx, utxos, feeRate }); From 57e52829989f5e1fac22d6ac4c3e9494b8f05298 Mon Sep 17 00:00:00 2001 From: janniks Date: Tue, 3 Oct 2023 00:35:50 +0200 Subject: [PATCH 07/49] ci: add package folder --- tsconfig.json | 1 + 1 file changed, 1 insertion(+) diff --git a/tsconfig.json b/tsconfig.json index 14cc61235..a634f90d1 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -32,6 +32,7 @@ "packages/common", "packages/keychain", "packages/profile", + "packages/sbtc", "packages/storage", "packages/wallet-sdk" ], From 6b4f1b7a4839a0bfec64154285e1f830d45b1b6d Mon Sep 17 00:00:00 2001 From: janniks Date: Tue, 3 Oct 2023 01:08:32 +0200 Subject: [PATCH 08/49] fix: update withdraw interface --- packages/sbtc/src/transactions/withdraw.ts | 53 ++++++++++++---------- 1 file changed, 28 insertions(+), 25 deletions(-) diff --git a/packages/sbtc/src/transactions/withdraw.ts b/packages/sbtc/src/transactions/withdraw.ts index 80484090b..b35396d01 100644 --- a/packages/sbtc/src/transactions/withdraw.ts +++ b/packages/sbtc/src/transactions/withdraw.ts @@ -2,16 +2,9 @@ import * as btc from '@scure/btc-signer'; import { hexToBytes } from '@stacks/common'; import * as P from 'micro-packed'; import { BlockstreamUtxo, BlockstreamUtxoWithTxHex } from './api'; -import { - BitcoinNetwork, - MagicBytes, - OpCode, - SBTC_PEG_ADDRESS, - TEST_NETWORK, - VSIZE_INPUT_P2WPKH, -} from './constants'; +import { BitcoinNetwork, MagicBytes, OpCode, TEST_NETWORK, VSIZE_INPUT_P2WPKH } from './constants'; -import { dustMinimum, paymentInfo, stacksAddressBytes } from './utils'; +import { dustMinimum, paymentInfo } from './utils'; const concat = P.concatBytes; @@ -19,23 +12,27 @@ export async function sbtcWithdrawHelper({ network = TEST_NETWORK, // default to testnet for developer release amountSats, signature, - stacksAddress, + bitcoinAddress, bitcoinChangeAddress, utxos, feeRate, - pegAddress = SBTC_PEG_ADDRESS, }: { network?: BitcoinNetwork; amountSats: number; signature: string; - stacksAddress: string; - bitcoinChangeAddress: string; + bitcoinAddress: string; + bitcoinChangeAddress?: string; utxos: (BlockstreamUtxo | BlockstreamUtxoWithTxHex)[]; feeRate: number; - pegAddress?: string; }) { - const tx = buildSbtcWithdrawTxOpReturn({ network, amountSats, stacksAddress, pegAddress }); - console.log(signature); + bitcoinChangeAddress ??= bitcoinAddress; + + const tx = buildSbtcWithdrawTxOpReturn({ + network, + amountSats, + signature, + bitcoinAddress, + }); // we separate this part, since wallets could handle it themselves const pay = await paymentInfo({ tx, utxos, feeRate }); @@ -51,18 +48,20 @@ export async function sbtcWithdrawHelper({ return tx; } +const DUST = 500; + export function buildSbtcWithdrawTxOpReturn({ network = TEST_NETWORK, // default to testnet for developer release amountSats, - stacksAddress, - pegAddress = SBTC_PEG_ADDRESS, + signature, + bitcoinAddress, }: { network?: BitcoinNetwork; amountSats: number; - stacksAddress: string; - pegAddress?: string; + signature: string; + bitcoinAddress: string; }) { - const data = buildSBtcWithdrawBtcPayload({ network, address: stacksAddress }); + const data = buildSBtcWithdrawBtcPayload({ network, amountSats, signature }); const tx = new btc.Transaction({ // todo: disbale unknown @@ -70,20 +69,24 @@ export function buildSbtcWithdrawTxOpReturn({ allowUnknownOutputs: true, }); tx.addOutput({ script: btc.Script.encode(['RETURN', data]), amount: BigInt(0) }); - tx.addOutputAddress(pegAddress, BigInt(amountSats), network); + tx.addOutputAddress(bitcoinAddress, BigInt(DUST), network); return tx; } export function buildSBtcWithdrawBtcPayload({ network: net, - address, + amountSats, + signature, }: { network: BitcoinNetwork; - address: string; + amountSats: number; + signature: string; }): Uint8Array { const magicBytes = net.bech32 === 'tb' ? hexToBytes(MagicBytes.Testnet) : hexToBytes(MagicBytes.Mainnet); const opCodeBytes = hexToBytes(OpCode.PegOut); - return concat(magicBytes, opCodeBytes, stacksAddressBytes(address)); + const amountBytes = P.U64BE.encode(BigInt(amountSats)); + const signatureBytes = hexToBytes(signature); + return concat(magicBytes, opCodeBytes, amountBytes, signatureBytes); } From cef03eb63a4a8202aae4221c3356e6f0ad6303cc Mon Sep 17 00:00:00 2001 From: janniks Date: Tue, 3 Oct 2023 14:50:37 +0200 Subject: [PATCH 09/49] refactor: add helpers --- package-lock.json | 10 + packages/sbtc/package.json | 1 + packages/sbtc/src/transactions/api.ts | 218 +++++++++++++------- packages/sbtc/src/transactions/constants.ts | 48 ++++- packages/sbtc/tests/api.test.ts | 14 ++ 5 files changed, 201 insertions(+), 90 deletions(-) create mode 100644 packages/sbtc/tests/api.test.ts diff --git a/package-lock.json b/package-lock.json index b4ab4efc5..669bf9051 100644 --- a/package-lock.json +++ b/package-lock.json @@ -594,6 +594,15 @@ "integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==", "dev": true }, + "node_modules/@btc-helpers/rpc": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@btc-helpers/rpc/-/rpc-2.0.0.tgz", + "integrity": "sha512-Y5T3MUCW3lMENJiOJEk4DOwTW6GY/b/xmcf+kxoPZZw2uCyY+m3a9wV9wrJdIceqv3ET2iLFbGHjLwl25UYwGA==", + "dependencies": { + "@scure/base": "^1.1.1", + "cross-fetch": "^3.1.5" + } + }, "node_modules/@changesets/apply-release-plan": { "version": "6.1.4", "resolved": "https://registry.npmjs.org/@changesets/apply-release-plan/-/apply-release-plan-6.1.4.tgz", @@ -24844,6 +24853,7 @@ "version": "0.1.0", "license": "MIT", "dependencies": { + "@btc-helpers/rpc": "^2.0.0", "@noble/secp256k1": "^2.0.0", "@scure/base": "^1.1.3", "@scure/btc-signer": "^1.1.0", diff --git a/packages/sbtc/package.json b/packages/sbtc/package.json index e4bec5ec2..c12467ce0 100644 --- a/packages/sbtc/package.json +++ b/packages/sbtc/package.json @@ -20,6 +20,7 @@ "typecheck:watch": "npm run typecheck -- --watch" }, "dependencies": { + "@btc-helpers/rpc": "^2.0.0", "@noble/secp256k1": "^2.0.0", "@scure/base": "^1.1.3", "@scure/btc-signer": "^1.1.0", diff --git a/packages/sbtc/src/transactions/api.ts b/packages/sbtc/src/transactions/api.ts index 3e8354958..631e2d2be 100644 --- a/packages/sbtc/src/transactions/api.ts +++ b/packages/sbtc/src/transactions/api.ts @@ -1,3 +1,5 @@ +import RpcClient from '@btc-helpers/rpc'; +import { RpcCallSpec } from '@btc-helpers/rpc/dist/callspec'; import * as btc from '@scure/btc-signer'; import { Cl } from '@stacks/transactions'; @@ -23,19 +25,78 @@ export type BlockstreamUtxoWithTxHex = BlockstreamUtxo & { hex: string; }; -export async function fetchUtxos(address: string): Promise { - // todo: error handling? - return (await fetch(`https://blockstream.info/testnet/api/address/${address}/utxo`).then(res => - res.json() - )) as BlockstreamUtxo[]; -} +export class TestnetApi { + async fetchUtxos(address: string): Promise { + // todo: error handling? + return fetch(`https://blockstream.info/testnet/api/address/${address}/utxo`).then(res => + res.json() + ); + } + + async fetchTxHex(txid: string): Promise { + // todo: error handling? + return fetch(`https://blockstream.info/testnet/api/tx/${txid}/hex`).then(res => res.text()); + } + + async estimateFeeRates(): Promise { + return fetch(`https://blockstream.info/testnet/api/fee-estimates`).then(res => res.json()); + } + + async estimateFeeRate(target: 'low' | 'medium' | 'high' | number): Promise { + const feeEstimates = await this.estimateFeeRates(); + const t = + typeof target === 'number' + ? target.toString() + : target === 'high' + ? '1' + : target === 'medium' + ? '2' + : '3'; + if (t in feeEstimates) { + return feeEstimates[t as keyof BlockstreamFeeEstimates]; + } + + throw new Error(`Invalid fee target: ${target}`); + } -export async function fetchTxHex(txid: string): Promise { - // todo: error handling? - return await fetch(`https://blockstream.info/testnet/api/tx/${txid}/hex`).then(res => res.text()); + async broadcastTx(tx: btc.Transaction): Promise { + return await fetch(`https://blockstream.info/testnet/api/tx`, { + method: 'POST', + body: tx.hex, + }).then(res => res.text()); + } + + async stacksCallReadOnly({ + contractAddress, + functionName, + sender = 'ST000000000000000000002AMW42H', + args = [], + }: { + contractAddress: string; + functionName: string; + sender?: string; + args?: string[]; + }) { + contractAddress = contractAddress.replace('.', '/'); + return await fetch( + `https://api.testnet.hiro.so/v2/contracts/call-read/${contractAddress}/${encodeURIComponent( + functionName + )}`, + { + method: 'POST', + headers: { + Accept: 'application/json', + 'Content-Type': 'application/json', + }, + body: JSON.stringify({ sender, arguments: args }), + } + ) + .then(res => res.json()) + .then(res => Cl.deserialize(res.result)); + } } -type BlockstreamFeeEstimates = { +export type BlockstreamFeeEstimates = { [K in | '1' | '2' @@ -67,86 +128,83 @@ type BlockstreamFeeEstimates = { | '1008']: number; }; -export async function estimateFeeRates(): Promise { - return await fetch(`https://blockstream.info/testnet/api/fee-estimates`).then(res => res.json()); +export interface DevEnvApiUrls { + bitcoinCoreRpcUrl: string; + bitcoinElectrumApiUrl: string; // electrs + stacksApiUrl: string; + sbtcBridgeApiUrl: string; } -export async function estimateFeeRate(target: 'low' | 'medium' | 'high' | number): Promise { - const feeEstimates = await estimateFeeRates(); - const t = - typeof target === 'number' - ? target.toString() - : target === 'high' - ? '1' - : target === 'medium' - ? '2' - : '3'; - if (t in feeEstimates) { - return feeEstimates[t as keyof BlockstreamFeeEstimates]; +export class DevEnvApi { + urls: DevEnvApiUrls; + btcRpc: RpcClient & RpcCallSpec; + + constructor(urls?: Partial) { + this.urls = Object.assign( + { + bitcoinCoreRpcUrl: 'http://127.0.0.1:18443/', + bitcoinElectrumApiUrl: 'http://127.0.0.1:60401/', + stacksApiUrl: 'http://127.0.0.1:3999/', + sbtcBridgeApiUrl: 'http://127.0.0.1:3010/', + }, + urls + ); + + this.btcRpc = new RpcClient('http://devnet:devnet@127.0.0.1:18443').Typed; } - throw new Error(`Invalid fee target: ${target}`); -} + /** + * Fetches utxos for a given address. + * If no utxos are found, imports the address, rescans, and tries again. + * @param address address or script hash of wallet to fetch utxos for + */ + async fetchUtxos(address: string): Promise { + let unspent = await this.btcRpc.listunspent({ + addresses: [address], + }); + + if (unspent?.length === 0) { + await this.btcRpc.importaddress({ address, rescan: true }); + await sleep(500); + unspent = await this.btcRpc.listunspent({ + addresses: [address], + }); + } -export async function broadcastTx(tx: btc.Transaction): Promise { - return await fetch(`https://blockstream.info/testnet/api/tx`, { - method: 'POST', - body: tx.hex, - }).then(res => res.text()); -} + const utxos = unspent.map((u: any) => ({ + txid: u.txid, + vout: u.vout, + value: u.amount, + confirmed: u.confirmations > 0, + })); -export async function stacksCallReadOnly({ - contractAddress, - functionName, - sender = 'ST000000000000000000002AMW42H', - args = [], -}: { - contractAddress: string; - functionName: string; - sender?: string; - args?: string[]; -}) { - contractAddress = contractAddress.replace('.', '/'); - return await fetch( - `https://api.testnet.hiro.so/v2/contracts/call-read/${contractAddress}/${encodeURIComponent( - functionName - )}`, - { - method: 'POST', - headers: { - Accept: 'application/json', - 'Content-Type': 'application/json', - }, - body: JSON.stringify({ sender, arguments: args }), + for (const u of utxos) { + u.hex = await this.fetchTxHex(u.txid); // sequential, to soften the load on the work queue } - ) - .then(res => res.json()) - .then(res => Cl.deserialize(res.result)); -} -// export async function informBridgeApi(txid: string) { -// // todo -// return 'txid'; -// } - -interface SbtcDevEnvApiUrls { - bitcoinExplorerApiUrl: string; - bitcoinNodeUrl: string; - bitcoinApiUrl: string; // electrs + return utxos; + } - stacksExplorerApiUrl: string; - stacksNodeUrl: string; - stacksApiUrl: string; + async fetchTxHex(txid: string): Promise { + return this.btcRpc.gettransaction({ txid }).then((tx: any) => tx.hex); + } - sbtcBridgeApiUrl: string; + // Fake impl for devenv + // eslint-disable-next-line @typescript-eslint/require-await + async estimateFeeRate(target: 'low' | 'medium' | 'high' | number): Promise { + switch (target) { + case 'high': + return 1; + case 'medium': + return 2; + case 'low': + return 3; + default: + return target; + } + } } -export class sbtcDevEnvApi { - urls: SbtcDevEnvApiUrls; - - constructor(urls: SbtcDevEnvApiUrls) { - this.urls = urls; - - this.urls.sbtcBridgeApiUrl ??= 'http://127.0.0.1:3010/'; - } +export function sleep(ms: number) { + return new Promise(resolve => setTimeout(resolve, ms)); } diff --git a/packages/sbtc/src/transactions/constants.ts b/packages/sbtc/src/transactions/constants.ts index df4b5b735..57a3117eb 100644 --- a/packages/sbtc/src/transactions/constants.ts +++ b/packages/sbtc/src/transactions/constants.ts @@ -2,16 +2,6 @@ import * as btc from '@scure/btc-signer'; export const SBTC_PEG_ADDRESS = 'tb1q3tj2fr9scwmcw3rq5m6jslva65f2rqjxt2t0zh'; // todo: auto-fetch or hardcode if final -export interface BitcoinNetwork { - bech32: string; - pubKeyHash: number; - scriptHash: number; - wif: number; -} - -export const NETWORK: BitcoinNetwork = btc.NETWORK; -export const TEST_NETWORK: BitcoinNetwork = btc.TEST_NETWORK; - export enum MagicBytes { Mainnet = '5832', Testnet = '5432', @@ -22,6 +12,44 @@ export enum OpCode { PegOut = '3E', } +export type BitcoinNetwork = { + bech32: string; + pubKeyHash: number; + scriptHash: number; + wif: number; + bip32: { + public: number; + private: number; + }; + bip84: { + coin: number; + }; +}; + +export const MAINNET: BitcoinNetwork = { + ...btc.NETWORK, + bip32: { + public: 0x0488b21e, + private: 0x0488ade4, + }, + bip84: { + coin: 0, + }, +}; + +export const TESTNET: BitcoinNetwork = { + ...btc.TEST_NETWORK, + bip32: { + public: 0x043587cf, + private: 0x04358394, + }, + bip84: { + coin: 1, + }, +}; + +export const REGTEST: BitcoinNetwork = { ...TESTNET, bech32: 'bcrt' }; + // Estimates based on https://bitcoinops.org/en/tools/calc-size/ export const OVERHEAD_TX = 4 + 1 + 1 + 4; // new btc.Transaction().vsize // const OVERHEAD_INPUT = 36 + 1 + 4 + 0.25; diff --git a/packages/sbtc/tests/api.test.ts b/packages/sbtc/tests/api.test.ts new file mode 100644 index 000000000..acb99e66b --- /dev/null +++ b/packages/sbtc/tests/api.test.ts @@ -0,0 +1,14 @@ +import { describe, expect, test } from 'vitest'; +import { DevEnvApi } from '../src'; + +describe('api tests', () => { + test('fetch utxos bitcoin rpc', async () => { + const devEnv = new DevEnvApi(); + const unspent = await devEnv.fetchUtxos('mqVnk6NPRdhntvfm4hh9vvjiRkFDUuSYsH'); + + expect(unspent.length).toBeGreaterThan(0); + expect(unspent[0]).toMatchObject( + expect.objectContaining({ txid: expect.any(String), hex: expect.any(String) }) + ); + }); +}); From 4b1dc94e54b5f29e54f1525073f828df438ab113 Mon Sep 17 00:00:00 2001 From: janniks Date: Tue, 3 Oct 2023 17:45:53 +0200 Subject: [PATCH 10/49] chore: wip --- packages/sbtc/src/transactions/api.ts | 107 ++++++++---------- packages/sbtc/src/transactions/deposit.ts | 4 +- packages/sbtc/src/transactions/utils.ts | 121 +++++++++++++++++---- packages/sbtc/src/transactions/withdraw.ts | 10 +- packages/sbtc/tests/api.test.ts | 21 +++- packages/sbtc/tests/testHelpers.ts | 20 ++++ 6 files changed, 191 insertions(+), 92 deletions(-) create mode 100644 packages/sbtc/tests/testHelpers.ts diff --git a/packages/sbtc/src/transactions/api.ts b/packages/sbtc/src/transactions/api.ts index 631e2d2be..75307c2b9 100644 --- a/packages/sbtc/src/transactions/api.ts +++ b/packages/sbtc/src/transactions/api.ts @@ -2,35 +2,42 @@ import RpcClient from '@btc-helpers/rpc'; import { RpcCallSpec } from '@btc-helpers/rpc/dist/callspec'; import * as btc from '@scure/btc-signer'; import { Cl } from '@stacks/transactions'; +import { wrapLazyProxy } from './utils'; +/** todo */ // https://blockstream.info/api/address/1KFHE7w8BhaENAswwryaoccDb6qcT6DbYY/utxo // [{"txid":"033e44b535c5709d30234921608219ee5ca1e320fa9def44715eaeb2b7ad52d3","vout":0,"status":{"confirmed":false},"value":42200}] export type BlockstreamUtxo = { txid: string; vout: number; value: number; - status: - | { - confirmed: false; - } - | { - confirmed: true; - block_height: number; - block_hash: string; - block_time: number; - }; + status: { + confirmed: boolean; + }; +}; + +/** todo */ +export type BlockstreamUtxoWithTx = BlockstreamUtxo & { + tx: string | Promise; }; -export type BlockstreamUtxoWithTxHex = BlockstreamUtxo & { - hex: string; +export type UtxoSpend = BlockstreamUtxo & { + input: btc.TransactionInput; }; -export class TestnetApi { - async fetchUtxos(address: string): Promise { +/** todo */ +export type BlockstreamFeeEstimates = + // prettier-ignore + { [K in | '1' | '2' | '3' | '4' | '5' | '6' | '7' | '8' | '9' | '10' | '11' | '12' | '13' | '14' | '15' | '16' | '17' | '18' | '19' | '20' | '21' | '22' | '23' | '24' | '25' | '144' | '504' | '1008']: number; }; + +export class TestnetHelper { + async fetchUtxos(address: string): Promise { // todo: error handling? - return fetch(`https://blockstream.info/testnet/api/address/${address}/utxo`).then(res => - res.json() - ); + return fetch(`https://blockstream.info/testnet/api/address/${address}/utxo`) + .then(res => res.json()) + .then((utxos: BlockstreamUtxo[]) => + utxos.map(u => wrapLazyProxy(u, 'tx', () => this.fetchTxHex(u.txid))) + ); } async fetchTxHex(txid: string): Promise { @@ -96,56 +103,28 @@ export class TestnetApi { } } -export type BlockstreamFeeEstimates = { - [K in - | '1' - | '2' - | '3' - | '4' - | '5' - | '6' - | '7' - | '8' - | '9' - | '10' - | '11' - | '12' - | '13' - | '14' - | '15' - | '16' - | '17' - | '18' - | '19' - | '20' - | '21' - | '22' - | '23' - | '24' - | '25' - | '144' - | '504' - | '1008']: number; -}; - -export interface DevEnvApiUrls { +/** todo */ +export interface DevEnvUrls { bitcoinCoreRpcUrl: string; bitcoinElectrumApiUrl: string; // electrs + bitcoinExplorerUrl: string; // explorer can access electrum stacksApiUrl: string; sbtcBridgeApiUrl: string; } -export class DevEnvApi { - urls: DevEnvApiUrls; +// todo: rename to helper, and add wallets etc. +export class DevEnvHelper { + urls: DevEnvUrls; btcRpc: RpcClient & RpcCallSpec; - constructor(urls?: Partial) { + constructor(urls?: Partial) { this.urls = Object.assign( { - bitcoinCoreRpcUrl: 'http://127.0.0.1:18443/', - bitcoinElectrumApiUrl: 'http://127.0.0.1:60401/', - stacksApiUrl: 'http://127.0.0.1:3999/', - sbtcBridgeApiUrl: 'http://127.0.0.1:3010/', + bitcoinCoreRpcUrl: 'http://127.0.0.1:18443', + bitcoinElectrumApiUrl: 'http://127.0.0.1:60401', + bitcoinExplorerUrl: 'http://127.0.0.1:3002', + stacksApiUrl: 'http://127.0.0.1:3999', + sbtcBridgeApiUrl: 'http://127.0.0.1:3010', }, urls ); @@ -158,7 +137,7 @@ export class DevEnvApi { * If no utxos are found, imports the address, rescans, and tries again. * @param address address or script hash of wallet to fetch utxos for */ - async fetchUtxos(address: string): Promise { + async fetchUtxos(address: string): Promise { let unspent = await this.btcRpc.listunspent({ addresses: [address], }); @@ -179,7 +158,7 @@ export class DevEnvApi { })); for (const u of utxos) { - u.hex = await this.fetchTxHex(u.txid); // sequential, to soften the load on the work queue + u.tx = await this.fetchTxHex(u.txid); // sequential, to soften the load on the work queue } return utxos; @@ -189,6 +168,16 @@ export class DevEnvApi { return this.btcRpc.gettransaction({ txid }).then((tx: any) => tx.hex); } + /** + */ + async getBalance(address: string): Promise { + const addressInfo = await fetch(`${this.urls.bitcoinExplorerUrl}/api/address/${address}`).then( + r => r.json() + ); + + return addressInfo.txHistory.balanceSat; + } + // Fake impl for devenv // eslint-disable-next-line @typescript-eslint/require-await async estimateFeeRate(target: 'low' | 'medium' | 'high' | number): Promise { diff --git a/packages/sbtc/src/transactions/deposit.ts b/packages/sbtc/src/transactions/deposit.ts index db4201913..f390d2cf3 100644 --- a/packages/sbtc/src/transactions/deposit.ts +++ b/packages/sbtc/src/transactions/deposit.ts @@ -1,7 +1,7 @@ import * as btc from '@scure/btc-signer'; import { hexToBytes } from '@stacks/common'; import * as P from 'micro-packed'; -import { BlockstreamUtxo, BlockstreamUtxoWithTxHex } from './api'; +import { BlockstreamUtxo, BlockstreamUtxoWithTx } from './api'; import { BitcoinNetwork, MagicBytes, @@ -72,7 +72,7 @@ export async function sbtcDepositHelper({ amountSats: number; stacksAddress: string; bitcoinChangeAddress: string; - utxos: (BlockstreamUtxo | BlockstreamUtxoWithTxHex)[]; + utxos: BlockstreamUtxoWithTx[]; feeRate: number; pegAddress?: string; }) { diff --git a/packages/sbtc/src/transactions/utils.ts b/packages/sbtc/src/transactions/utils.ts index 52f3ef189..b3592aa65 100644 --- a/packages/sbtc/src/transactions/utils.ts +++ b/packages/sbtc/src/transactions/utils.ts @@ -2,8 +2,8 @@ import * as btc from '@scure/btc-signer'; import { hexToBytes, intToHex, utf8ToBytes } from '@stacks/common'; import { c32addressDecode } from 'c32check'; import * as P from 'micro-packed'; -import * as api from './api'; -import { BlockstreamUtxo, BlockstreamUtxoWithTxHex } from './api'; + +import { BlockstreamUtxo, BlockstreamUtxoWithTx } from './api'; import { OVERHEAD_TX, VSIZE_INPUT_P2WPKH } from './constants'; @@ -48,7 +48,7 @@ export async function paymentInfo({ }: { tx: btc.Transaction; feeRate: number; - utxos: (BlockstreamUtxo | BlockstreamUtxoWithTxHex)[]; + utxos: BlockstreamUtxoWithTx[]; utxoToSpendable?: UtxoToSpendableFn; }) { const outputs = []; @@ -90,7 +90,7 @@ export function dustMinimum(inputVsize: number, feeRate: number) { } export type UtxoToSpendableFn = ( - utxo: BlockstreamUtxo | BlockstreamUtxoWithTxHex + utxo: BlockstreamUtxoWithTx ) => Promise<{ input: btc.TransactionInput; vsize?: number }>; export async function utxoSelect({ @@ -99,7 +99,7 @@ export async function utxoSelect({ outputs, feeRate, }: { - utxos: (BlockstreamUtxo | BlockstreamUtxoWithTxHex)[]; + utxos: BlockstreamUtxoWithTx[]; utxoToSpendable?: UtxoToSpendableFn; outputs: btc.TransactionOutput[]; feeRate: number; @@ -147,12 +147,10 @@ export async function utxoSelect({ // todo: add p2sh for xverse async function defaultUtxoToSpendable( - utxo: BlockstreamUtxo | BlockstreamUtxoWithTxHex + utxo: BlockstreamUtxoWithTx ): Promise<{ input: btc.TransactionInput; vsize?: number }> { - const utxoWithTx: BlockstreamUtxoWithTxHex = - 'hex' in utxo ? utxo : { ...utxo, hex: await api.fetchTxHex(utxo.txid) }; - - const tx = btc.Transaction.fromRaw(hexToBytes(utxoWithTx.hex), { + const hex = await utxo.tx; + const tx = btc.Transaction.fromRaw(hexToBytes(hex), { allowUnknownOutputs: true, allowUnknownInputs: true, }); @@ -162,24 +160,73 @@ async function defaultUtxoToSpendable( const spendScript = btc.OutScript.decode(outputToSpend.script); try { - if (spendScript.type !== 'wpkh') throw new Error('Non-p2wpkh utxo found'); - - const spendableInput: btc.TransactionInput = { - txid: hexToBytes(utxo.txid), - index: utxo.vout, - ...outputToSpend, - witnessUtxo: { - script: outputToSpend.script, - amount: BigInt(utxo.value), - }, - }; - new btc.Transaction().addInput(spendableInput); // validate, throws if invalid - return { input: spendableInput, vsize: VSIZE_INPUT_P2WPKH }; + switch (spendScript.type) { + case 'sh': + // todo: refactor!!! + let p2ret; + for (let i = 0; i < 10; i++) { + try { + if (i === 0) { + p2ret = btc.p2sh(btc.p2wpkh(hexToBytes(paymentPublicKey)), net) + } else if (i === 1) { + p2ret = btc.p2sh(btc.p2wsh(btc.p2wpkh(hexToBytes(paymentPublicKey))), net) + } else if (i === 2) { + p2ret = btc.p2sh(btc.p2wsh(btc.p2pkh(hexToBytes(paymentPublicKey)), net)) + } else if (i === 3) { + p2ret = btc.p2sh(btc.p2ms(1, [hexToBytes(paymentPublicKey)]), net) + } else if (i === 4) { + p2ret = btc.p2sh(btc.p2pkh(hexToBytes(paymentPublicKey)), net) + } else if (i === 5) { + p2ret = btc.p2sh(btc.p2sh(btc.p2pkh(hexToBytes(paymentPublicKey)), net)) + } else if (i === 6) { + p2ret = btc.p2sh(btc.p2sh(btc.p2wpkh(hexToBytes(paymentPublicKey)), net)) + } + if (i < 3) { + const nextI = { + txid: hexToBytes(utxo.txid), + index: utxo.vout, + witnessUtxo: { + script: p2ret.script, + amount: BigInt(utxo.value), + }, + redeemScript: p2ret.redeemScript, + } + new btc.Transaction().addInput(spendableInput); // validate, throws if invalid + transaction.addInput(nextI); + } else { + const nextI = redeemScriptAddInput(utxo, p2ret, hexy) + new btc.Transaction().addInput(spendableInput); // validate, throws if invalid + transaction.addInput(nextI); + } + //('Tx type: ' + i + ' --> input added') + break; + } catch (err:any) { + console.log('Error: not tx type: ' + i); + } + case 'wpkh': + const spendableInput: btc.TransactionInput = { + txid: hexToBytes(utxo.txid), + index: utxo.vout, + ...outputToSpend, + witnessUtxo: { + script: outputToSpend.script, + amount: BigInt(utxo.value), + }, + }; + new btc.Transaction().addInput(spendableInput); // validate, throws if invalid + return { input: spendableInput, vsize: VSIZE_INPUT_P2WPKH }; + + default: + throw new Error('Unsupported script type. Currently, only p2sh and p2wpkh are supported.'); + } } catch (e) { - throw new Error(`Utxo doesn't match spendable type, ${JSON.stringify(utxo)}`); + throw new Error(`Utxo doesn't match spendable type, ${JSON.stringify(utxo)}`, { cause: e }); } } +const x : btc.TransactionInput | btc.TransactionOutput = {} as any; +if ('index' in x) x + // todo: after DR? // async function tryAllToSpendable( // utxo: BlockstreamUtxo | BlockstreamUtxoWithTxHex @@ -205,3 +252,29 @@ async function defaultUtxoToSpendable( // throw new Error(`Utxo doesn't match spendable type, ${JSON.stringify(utxo)}`); // } // } + +type LazyLoadable = T & Record; + +export function wrapLazyProxy< + T extends { + [key: string]: any; + }, + K extends string, + R, +>(target: T, key: K, resolution: () => R | Promise): LazyLoadable { + return new Proxy(target, { + get(obj, prop: string) { + if (prop === key && obj[prop] === undefined) { + (obj as any)[prop] = Promise.resolve(resolution).catch(error => { + delete obj[prop]; + throw error; + }); + } + return obj[prop]; + }, + has(obj, prop) { + if (prop === key) return true; + return prop in obj; + }, + }); +} diff --git a/packages/sbtc/src/transactions/withdraw.ts b/packages/sbtc/src/transactions/withdraw.ts index b35396d01..68d3a81c2 100644 --- a/packages/sbtc/src/transactions/withdraw.ts +++ b/packages/sbtc/src/transactions/withdraw.ts @@ -1,15 +1,15 @@ import * as btc from '@scure/btc-signer'; import { hexToBytes } from '@stacks/common'; import * as P from 'micro-packed'; -import { BlockstreamUtxo, BlockstreamUtxoWithTxHex } from './api'; -import { BitcoinNetwork, MagicBytes, OpCode, TEST_NETWORK, VSIZE_INPUT_P2WPKH } from './constants'; +import { BlockstreamUtxoWithTx } from './api'; +import { BitcoinNetwork, MagicBytes, OpCode, TESTNET, VSIZE_INPUT_P2WPKH } from './constants'; import { dustMinimum, paymentInfo } from './utils'; const concat = P.concatBytes; export async function sbtcWithdrawHelper({ - network = TEST_NETWORK, // default to testnet for developer release + network = TESTNET, // default to testnet for developer release amountSats, signature, bitcoinAddress, @@ -22,7 +22,7 @@ export async function sbtcWithdrawHelper({ signature: string; bitcoinAddress: string; bitcoinChangeAddress?: string; - utxos: (BlockstreamUtxo | BlockstreamUtxoWithTxHex)[]; + utxos: BlockstreamUtxoWithTx[]; feeRate: number; }) { bitcoinChangeAddress ??= bitcoinAddress; @@ -51,7 +51,7 @@ export async function sbtcWithdrawHelper({ const DUST = 500; export function buildSbtcWithdrawTxOpReturn({ - network = TEST_NETWORK, // default to testnet for developer release + network = TESTNET, // default to testnet for developer release amountSats, signature, bitcoinAddress, diff --git a/packages/sbtc/tests/api.test.ts b/packages/sbtc/tests/api.test.ts index acb99e66b..456789bf5 100644 --- a/packages/sbtc/tests/api.test.ts +++ b/packages/sbtc/tests/api.test.ts @@ -1,9 +1,10 @@ import { describe, expect, test } from 'vitest'; -import { DevEnvApi } from '../src'; +import { DevEnvHelper } from '../src'; +import { WALLET_00, getBitcoinAccount } from './testHelpers'; describe('api tests', () => { test('fetch utxos bitcoin rpc', async () => { - const devEnv = new DevEnvApi(); + const devEnv = new DevEnvHelper(); const unspent = await devEnv.fetchUtxos('mqVnk6NPRdhntvfm4hh9vvjiRkFDUuSYsH'); expect(unspent.length).toBeGreaterThan(0); @@ -12,3 +13,19 @@ describe('api tests', () => { ); }); }); + +test('minting bitcoin increases balance', async () => { + const wallet01 = getBitcoinAccount(WALLET_00); + + const devEnv = new DevEnvHelper(); + const balance = await devEnv.getBalance(wallet01.address); + + await devEnv.btcRpc.generatetoaddress({ + nblocks: 1, + address: wallet01.address, + }); + + const balanceAfter = await devEnv.getBalance(wallet01.address); + + expect(balanceAfter).toBeGreaterThan(balance); +}); diff --git a/packages/sbtc/tests/testHelpers.ts b/packages/sbtc/tests/testHelpers.ts new file mode 100644 index 000000000..358a4f6a5 --- /dev/null +++ b/packages/sbtc/tests/testHelpers.ts @@ -0,0 +1,20 @@ +import { HDKey } from '@scure/bip32'; +import * as btc from '@scure/btc-signer'; +import { hexToBytes } from '@stacks/common'; +import { REGTEST } from '../src'; + +export const WALLET_00 = + 'twice kind fence tip hidden tilt action fragile skin nothing glory cousin green tomorrow spring wrist shed math olympic multiply hip blue scout claw'; +export const WALLET_01 = + 'sell invite acquire kitten bamboo drastic jelly vivid peace spawn twice guilt pave pen trash pretty park cube fragile unaware remain midnight betray rebuild'; + +export function getBitcoinAccount(mnemonic: string, idx: number = 0) { + const hdkey = HDKey.fromMasterSeed(hexToBytes(mnemonic), REGTEST.bip32); + + const path = `m/84'/${REGTEST.bip84.coin}'/${idx}'/0/0`; + + const privateKey = hdkey.derive(path).privateKey!; + const address = btc.getAddress('wpkh', privateKey, REGTEST)!; + + return { privateKey, address }; +} From f08dab180c2903e649b4996fb7f37c83942858d7 Mon Sep 17 00:00:00 2001 From: janniks Date: Wed, 4 Oct 2023 15:11:52 +0200 Subject: [PATCH 11/49] refactor: update --- .vscode/launch.json | 126 ------------ .vscode/settings.json | 12 +- packages/sbtc/src/transactions/api.ts | 21 +- packages/sbtc/src/transactions/deposit.ts | 39 ++-- packages/sbtc/src/transactions/utils.ts | 213 ++++++++++++--------- packages/sbtc/src/transactions/withdraw.ts | 17 +- packages/sbtc/tests/api.test.ts | 33 ++-- packages/sbtc/tests/deposit.test.ts | 50 ++--- packages/sbtc/tests/testHelpers.ts | 11 +- 9 files changed, 234 insertions(+), 288 deletions(-) diff --git a/.vscode/launch.json b/.vscode/launch.json index 7dee9d110..e69de29bb 100644 --- a/.vscode/launch.json +++ b/.vscode/launch.json @@ -1,126 +0,0 @@ -{ - "version": "0.2.0", - "configurations": [ - { - "type": "node", - "request": "launch", - "name": "Jest: auth", - "cwd": "${workspaceFolder}/packages/auth", - "program": "./node_modules/.bin/jest", - "args": [ - "--runInBand" - ], - "console": "integratedTerminal" - }, - { - "type": "node", - "request": "launch", - "name": "Jest: bns", - "cwd": "${workspaceFolder}/packages/bns", - "program": "./node_modules/.bin/jest", - "args": [ - "--runInBand" - ], - "console": "integratedTerminal" - }, - { - "type": "node", - "request": "launch", - "name": "Jest: cli", - "cwd": "${workspaceFolder}/packages/cli", - "program": "./node_modules/.bin/jest", - "args": [ - "--runInBand" - ], - "console": "integratedTerminal" - }, - { - "type": "node", - "request": "launch", - "name": "Jest: common", - "cwd": "${workspaceFolder}/packages/common", - "program": "./node_modules/.bin/jest", - "args": [ - "--runInBand" - ], - "console": "integratedTerminal" - }, - { - "type": "node", - "request": "launch", - "name": "Jest: encryption", - "cwd": "${workspaceFolder}/packages/encryption", - "program": "./node_modules/.bin/jest", - "args": [ - "--runInBand" - ], - "console": "integratedTerminal" - }, - { - "type": "node", - "request": "launch", - "name": "Jest: keychain", - "cwd": "${workspaceFolder}/packages/keychain", - "program": "./node_modules/.bin/jest", - "args": [ - "--runInBand" - ], - "console": "integratedTerminal" - }, - { - "type": "node", - "request": "launch", - "name": "Jest: network", - "cwd": "${workspaceFolder}/packages/network", - "program": "./node_modules/.bin/jest", - "args": [ - "--runInBand" - ], - "console": "integratedTerminal" - }, - { - "type": "node", - "request": "launch", - "name": "Jest: profile", - "cwd": "${workspaceFolder}/packages/profile", - "program": "./node_modules/.bin/jest", - "args": [ - "--runInBand" - ], - "console": "integratedTerminal" - }, - { - "type": "node", - "request": "launch", - "name": "Jest: stacking", - "cwd": "${workspaceFolder}/packages/stacking", - "program": "./node_modules/.bin/jest", - "args": [ - "--runInBand" - ], - "console": "integratedTerminal" - }, - { - "type": "node", - "request": "launch", - "name": "Jest: storage", - "cwd": "${workspaceFolder}/packages/storage", - "program": "./node_modules/.bin/jest", - "args": [ - "--runInBand" - ], - "console": "integratedTerminal" - }, - { - "type": "node", - "request": "launch", - "name": "Jest: transactions", - "cwd": "${workspaceFolder}/packages/transactions", - "program": "./node_modules/.bin/jest", - "args": [ - "--runInBand" - ], - "console": "integratedTerminal" - }, - ] -} diff --git a/.vscode/settings.json b/.vscode/settings.json index ae982e010..0460de78d 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -1,3 +1,13 @@ { - "markdown.extension.toc.levels": "2..6" + "markdown.extension.toc.levels": "2..6", + + // Jest -> Vitest: Run + "jestrunner.jestCommand": "npx vitest run", + + // Jest -> Vitest: Debug (Hack) + "jestrunner.jestPath": "node_modules/.bin/vitest", + "jestrunner.runOptions": ["--"], + "jestrunner.debugOptions": { + "args": ["run"] + } } diff --git a/packages/sbtc/src/transactions/api.ts b/packages/sbtc/src/transactions/api.ts index 75307c2b9..d6359feea 100644 --- a/packages/sbtc/src/transactions/api.ts +++ b/packages/sbtc/src/transactions/api.ts @@ -17,12 +17,13 @@ export type BlockstreamUtxo = { }; /** todo */ -export type BlockstreamUtxoWithTx = BlockstreamUtxo & { +export type UtxoWithTx = BlockstreamUtxo & { tx: string | Promise; }; -export type UtxoSpend = BlockstreamUtxo & { - input: btc.TransactionInput; +export type SpendableUtxo = BlockstreamUtxo & { + input: btc.TransactionInput | Promise; + vsize?: number | Promise; }; /** todo */ @@ -31,7 +32,7 @@ export type BlockstreamFeeEstimates = { [K in | '1' | '2' | '3' | '4' | '5' | '6' | '7' | '8' | '9' | '10' | '11' | '12' | '13' | '14' | '15' | '16' | '17' | '18' | '19' | '20' | '21' | '22' | '23' | '24' | '25' | '144' | '504' | '1008']: number; }; export class TestnetHelper { - async fetchUtxos(address: string): Promise { + async fetchUtxos(address: string): Promise { // todo: error handling? return fetch(`https://blockstream.info/testnet/api/address/${address}/utxo`) .then(res => res.json()) @@ -120,7 +121,7 @@ export class DevEnvHelper { constructor(urls?: Partial) { this.urls = Object.assign( { - bitcoinCoreRpcUrl: 'http://127.0.0.1:18443', + bitcoinCoreRpcUrl: 'http://devnet:devnet@127.0.0.1:18443', bitcoinElectrumApiUrl: 'http://127.0.0.1:60401', bitcoinExplorerUrl: 'http://127.0.0.1:3002', stacksApiUrl: 'http://127.0.0.1:3999', @@ -129,7 +130,7 @@ export class DevEnvHelper { urls ); - this.btcRpc = new RpcClient('http://devnet:devnet@127.0.0.1:18443').Typed; + this.btcRpc = new RpcClient(this.urls.bitcoinCoreRpcUrl).Typed; } /** @@ -137,7 +138,7 @@ export class DevEnvHelper { * If no utxos are found, imports the address, rescans, and tries again. * @param address address or script hash of wallet to fetch utxos for */ - async fetchUtxos(address: string): Promise { + async fetchUtxos(address: string): Promise { let unspent = await this.btcRpc.listunspent({ addresses: [address], }); @@ -153,7 +154,7 @@ export class DevEnvHelper { const utxos = unspent.map((u: any) => ({ txid: u.txid, vout: u.vout, - value: u.amount, + value: Math.round(u.amount * 1e8), // Bitcoin to satoshis confirmed: u.confirmations > 0, })); @@ -192,6 +193,10 @@ export class DevEnvHelper { return target; } } + + async broadcastTx(tx: btc.Transaction): Promise { + return await this.btcRpc.sendrawtransaction({ hexstring: tx.hex, maxfeerate: 1000 }); + } } export function sleep(ms: number) { diff --git a/packages/sbtc/src/transactions/deposit.ts b/packages/sbtc/src/transactions/deposit.ts index f390d2cf3..e6d233a95 100644 --- a/packages/sbtc/src/transactions/deposit.ts +++ b/packages/sbtc/src/transactions/deposit.ts @@ -1,18 +1,23 @@ import * as btc from '@scure/btc-signer'; import { hexToBytes } from '@stacks/common'; import * as P from 'micro-packed'; -import { BlockstreamUtxo, BlockstreamUtxoWithTx } from './api'; +import { UtxoWithTx } from './api'; import { BitcoinNetwork, MagicBytes, OpCode, SBTC_PEG_ADDRESS, - TEST_NETWORK, + TESTNET, VSIZE_INPUT_P2WPKH, } from './constants'; -import { dustMinimum, paymentInfo, stacksAddressBytes } from './utils'; - -// todo: move to constants? +import { + DEFAULT_UTXO_TO_SPENDABLE, + SpendableByScriptTypes, + dustMinimum, + paymentInfo, + shUtxoToSpendable, + stacksAddressBytes, +} from './utils'; const concat = P.concatBytes; @@ -36,7 +41,7 @@ export const buildSbtcDepositTx = buildSbtcDepositTxOpReturn; // default to OP R * */ export function buildSbtcDepositTxOpReturn({ - network = TEST_NETWORK, // default to testnet for developer release + network = TESTNET, // default to testnet for developer release amountSats, stacksAddress, pegAddress = SBTC_PEG_ADDRESS, @@ -60,28 +65,40 @@ export function buildSbtcDepositTxOpReturn({ } export async function sbtcDepositHelper({ - network = TEST_NETWORK, // default to testnet for developer release + network = TESTNET, // default to testnet for developer release amountSats, stacksAddress, bitcoinChangeAddress, - utxos, feeRate, + utxos, + utxoToSpendable = DEFAULT_UTXO_TO_SPENDABLE, pegAddress = SBTC_PEG_ADDRESS, + paymentPublicKey, }: { network?: BitcoinNetwork; amountSats: number; stacksAddress: string; bitcoinChangeAddress: string; - utxos: BlockstreamUtxoWithTx[]; feeRate: number; + utxos: UtxoWithTx[]; + /** + * Tries to convert p2wpk and p2sh utxos to spendable inputs by default. + * To extend, add your own function that takes a {@link UtxoToSpendableOpts} + * and returns a {@link Spendable}. + */ + utxoToSpendable?: Partial; pegAddress?: string; + paymentPublicKey?: string; }) { + if (paymentPublicKey) { + utxoToSpendable.sh = shUtxoToSpendable.bind(null, network, paymentPublicKey); + } + const tx = buildSbtcDepositTxOpReturn({ network, amountSats, stacksAddress, pegAddress }); // we separate this part, since wallets could handle it themselves - const pay = await paymentInfo({ tx, utxos, feeRate }); + const pay = await paymentInfo({ tx, feeRate, utxos, utxoToSpendable }); for (const input of pay.inputs) tx.addInput(input); - // outputs are already on tx const changeAfterAdditionalOutput = BigInt(Math.ceil(VSIZE_INPUT_P2WPKH * feeRate)) - pay.changeSats; diff --git a/packages/sbtc/src/transactions/utils.ts b/packages/sbtc/src/transactions/utils.ts index b3592aa65..aa50e2e1e 100644 --- a/packages/sbtc/src/transactions/utils.ts +++ b/packages/sbtc/src/transactions/utils.ts @@ -2,10 +2,8 @@ import * as btc from '@scure/btc-signer'; import { hexToBytes, intToHex, utf8ToBytes } from '@stacks/common'; import { c32addressDecode } from 'c32check'; import * as P from 'micro-packed'; - -import { BlockstreamUtxo, BlockstreamUtxoWithTx } from './api'; - -import { OVERHEAD_TX, VSIZE_INPUT_P2WPKH } from './constants'; +import { UtxoWithTx } from './api'; +import { BitcoinNetwork, OVERHEAD_TX, VSIZE_INPUT_P2WPKH } from './constants'; const concat = P.concatBytes; @@ -44,22 +42,20 @@ export async function paymentInfo({ tx, feeRate, utxos, - utxoToSpendable = defaultUtxoToSpendable, + utxoToSpendable, }: { tx: btc.Transaction; feeRate: number; - utxos: BlockstreamUtxoWithTx[]; - utxoToSpendable?: UtxoToSpendableFn; + utxos: UtxoWithTx[]; + utxoToSpendable: Partial; }) { - const outputs = []; - for (let i = 0; i < tx.outputsLength; i++) { - outputs.push(tx.getOutput(i)); - } + const outputs = []; // can't enumerate directly + for (let i = 0; i < tx.outputsLength; i++) outputs.push(tx.getOutput(i)); - return await utxoSelect({ utxos, utxoToSpendable, outputs, feeRate }); + return await utxoSelect({ feeRate, utxos, utxoToSpendable, outputs }); } -const plus = (a: number, b: number) => a + b; +// == vsizing ================================================================== export function txBytes(inputs: btc.TransactionInput[], outputs: btc.TransactionOutput[]) { return ( @@ -89,20 +85,112 @@ export function dustMinimum(inputVsize: number, feeRate: number) { return Math.ceil(inputVsize * feeRate); } -export type UtxoToSpendableFn = ( - utxo: BlockstreamUtxoWithTx -) => Promise<{ input: btc.TransactionInput; vsize?: number }>; +const plus = (a: number, b: number) => a + b; + +export type Spendable = { input: btc.TransactionInput; vsize?: number }; + +export type SpendableByScriptTypes = + // prettier-ignore + { [Property in 'unknown' | 'sh' | 'wpkh' | 'wsh' | 'pk' | 'pkh' | 'ms' | 'tr' | 'tr_ns' | 'tr_ms']: (opts: UtxoToSpendableOpts) => Spendable | Promise; }; + +export const DEFAULT_UTXO_TO_SPENDABLE: Partial = { + wpkh: wpkhUtxoToSpendable, + // sh: shUtxoToSpendable, // needs partial applying to work +}; + +interface UtxoToSpendableOpts { + tx: btc.Transaction; + txHex: string; + utxo: UtxoWithTx; + output: ReturnType; + spendScript: ReturnType; +} + +export function wpkhUtxoToSpendable(opts: UtxoToSpendableOpts) { + if (!opts.output?.script) throw new Error('No script found on utxo tx'); + + const spendableInput: btc.TransactionInput = { + txid: hexToBytes(opts.utxo.txid), + index: opts.utxo.vout, + ...opts.output, + witnessUtxo: { + script: opts.output.script, + amount: BigInt(opts.utxo.value), + }, + }; + + new btc.Transaction().addInput(spendableInput); // validate, throws if invalid + return { input: spendableInput, vsize: VSIZE_INPUT_P2WPKH }; +} + +export function shUtxoToSpendable( + net: BitcoinNetwork, + paymentPublicKey: string, + opts: UtxoToSpendableOpts +): Spendable | Promise { + if (!opts.output?.script) throw new Error('No script found on utxo tx'); + + let p2shRet; + // Taken from https://github.com/Stacks-Builders/sbtc-bridge-api/blob/97e14f3e1bfb76e215c8f0311555240703ef9d69/sbtc-bridge-lib/src/wallet_utils.ts#L196 + // todo: refactor!!! + for (let i = 0; i < 10; i++) { + try { + if (i === 0) { + p2shRet = btc.p2sh(btc.p2wpkh(hexToBytes(paymentPublicKey)), net); + } else if (i === 1) { + p2shRet = btc.p2sh(btc.p2wsh(btc.p2wpkh(hexToBytes(paymentPublicKey))), net); + } else if (i === 2) { + p2shRet = btc.p2sh(btc.p2wsh(btc.p2pkh(hexToBytes(paymentPublicKey)), net)); + } else if (i === 3) { + p2shRet = btc.p2sh(btc.p2ms(1, [hexToBytes(paymentPublicKey)]), net); + } else if (i === 4) { + p2shRet = btc.p2sh(btc.p2pkh(hexToBytes(paymentPublicKey)), net); + } else if (i === 5) { + p2shRet = btc.p2sh(btc.p2sh(btc.p2pkh(hexToBytes(paymentPublicKey)), net)); + } else if (i === 6) { + p2shRet = btc.p2sh(btc.p2sh(btc.p2wpkh(hexToBytes(paymentPublicKey)), net)); + } + + if (!p2shRet) throw new Error('No valid p2sh variant found.'); + + // wrapped witness script + if (i < 3) { + const input = { + txid: hexToBytes(opts.utxo.txid), + index: opts.utxo.vout, + witnessUtxo: { + script: p2shRet.script, + amount: BigInt(opts.utxo.value), + }, + redeemScript: p2shRet.redeemScript, + }; + new btc.Transaction().addInput(input); + return { input, vsize: VSIZE_INPUT_P2WPKH + (p2shRet.script?.byteLength ?? 0) }; + } + + const input = { + txid: hexToBytes(opts.utxo.txid), + index: opts.utxo.vout, + nonWitnessUtxo: opts.txHex, + redeemScript: p2shRet.redeemScript, + }; + new btc.Transaction().addInput(input); + return { input, vsize: p2shRet.script?.byteLength ?? 0 }; + } catch (e) {} + } + throw new Error('No valid p2sh variant found.'); +} export async function utxoSelect({ + feeRate, utxos, - utxoToSpendable = defaultUtxoToSpendable, + utxoToSpendable, outputs, - feeRate, }: { - utxos: BlockstreamUtxoWithTx[]; - utxoToSpendable?: UtxoToSpendableFn; - outputs: btc.TransactionOutput[]; feeRate: number; + utxos: UtxoWithTx[]; + utxoToSpendable: Partial; + outputs: btc.TransactionOutput[]; }): Promise<{ inputs: btc.TransactionInput[]; totalSats: bigint; @@ -120,7 +208,7 @@ export async function utxoSelect({ for (const utxo of utxos) { try { - const { input, vsize } = await utxoToSpendable(utxo); + const { input, vsize } = await switchUtxoToSpendable(utxo, utxoToSpendable); const inputVsize = vsize ?? inputBytes(input); const utxoFee = feeRate * inputVsize; @@ -146,9 +234,10 @@ export async function utxoSelect({ } // todo: add p2sh for xverse -async function defaultUtxoToSpendable( - utxo: BlockstreamUtxoWithTx -): Promise<{ input: btc.TransactionInput; vsize?: number }> { +export async function switchUtxoToSpendable( + utxo: UtxoWithTx, + utxoToSpendable: Partial +): Promise { const hex = await utxo.tx; const tx = btc.Transaction.fromRaw(hexToBytes(hex), { allowUnknownOutputs: true, @@ -160,72 +249,22 @@ async function defaultUtxoToSpendable( const spendScript = btc.OutScript.decode(outputToSpend.script); try { - switch (spendScript.type) { - case 'sh': - // todo: refactor!!! - let p2ret; - for (let i = 0; i < 10; i++) { - try { - if (i === 0) { - p2ret = btc.p2sh(btc.p2wpkh(hexToBytes(paymentPublicKey)), net) - } else if (i === 1) { - p2ret = btc.p2sh(btc.p2wsh(btc.p2wpkh(hexToBytes(paymentPublicKey))), net) - } else if (i === 2) { - p2ret = btc.p2sh(btc.p2wsh(btc.p2pkh(hexToBytes(paymentPublicKey)), net)) - } else if (i === 3) { - p2ret = btc.p2sh(btc.p2ms(1, [hexToBytes(paymentPublicKey)]), net) - } else if (i === 4) { - p2ret = btc.p2sh(btc.p2pkh(hexToBytes(paymentPublicKey)), net) - } else if (i === 5) { - p2ret = btc.p2sh(btc.p2sh(btc.p2pkh(hexToBytes(paymentPublicKey)), net)) - } else if (i === 6) { - p2ret = btc.p2sh(btc.p2sh(btc.p2wpkh(hexToBytes(paymentPublicKey)), net)) - } - if (i < 3) { - const nextI = { - txid: hexToBytes(utxo.txid), - index: utxo.vout, - witnessUtxo: { - script: p2ret.script, - amount: BigInt(utxo.value), - }, - redeemScript: p2ret.redeemScript, - } - new btc.Transaction().addInput(spendableInput); // validate, throws if invalid - transaction.addInput(nextI); - } else { - const nextI = redeemScriptAddInput(utxo, p2ret, hexy) - new btc.Transaction().addInput(spendableInput); // validate, throws if invalid - transaction.addInput(nextI); - } - //('Tx type: ' + i + ' --> input added') - break; - } catch (err:any) { - console.log('Error: not tx type: ' + i); - } - case 'wpkh': - const spendableInput: btc.TransactionInput = { - txid: hexToBytes(utxo.txid), - index: utxo.vout, - ...outputToSpend, - witnessUtxo: { - script: outputToSpend.script, - amount: BigInt(utxo.value), - }, - }; - new btc.Transaction().addInput(spendableInput); // validate, throws if invalid - return { input: spendableInput, vsize: VSIZE_INPUT_P2WPKH }; - - default: - throw new Error('Unsupported script type. Currently, only p2sh and p2wpkh are supported.'); - } + const fn = utxoToSpendable[spendScript.type]; + if (!fn) throw new Error(`Unsupported script type: ${spendScript.type}`); + + return await fn({ + tx, + utxo, + output: outputToSpend, + spendScript, + }); } catch (e) { - throw new Error(`Utxo doesn't match spendable type, ${JSON.stringify(utxo)}`, { cause: e }); + throw new Error(`Failed to make utxo spendable. ${JSON.stringify(utxo)}`, { cause: e }); } } -const x : btc.TransactionInput | btc.TransactionOutput = {} as any; -if ('index' in x) x +const x: btc.TransactionInput | btc.TransactionOutput = {} as any; +if ('index' in x) x; // todo: after DR? // async function tryAllToSpendable( diff --git a/packages/sbtc/src/transactions/withdraw.ts b/packages/sbtc/src/transactions/withdraw.ts index 68d3a81c2..2ffd9efbd 100644 --- a/packages/sbtc/src/transactions/withdraw.ts +++ b/packages/sbtc/src/transactions/withdraw.ts @@ -1,29 +1,33 @@ import * as btc from '@scure/btc-signer'; import { hexToBytes } from '@stacks/common'; import * as P from 'micro-packed'; -import { BlockstreamUtxoWithTx } from './api'; +import { UtxoWithTx } from './api'; import { BitcoinNetwork, MagicBytes, OpCode, TESTNET, VSIZE_INPUT_P2WPKH } from './constants'; -import { dustMinimum, paymentInfo } from './utils'; +import { SpendableByScriptTypes, dustMinimum, paymentInfo } from './utils'; const concat = P.concatBytes; +const DUST = 500; // todo: double-check + export async function sbtcWithdrawHelper({ network = TESTNET, // default to testnet for developer release amountSats, signature, bitcoinAddress, bitcoinChangeAddress, - utxos, feeRate, + utxos, + utxoToSpendable, }: { network?: BitcoinNetwork; amountSats: number; signature: string; bitcoinAddress: string; bitcoinChangeAddress?: string; - utxos: BlockstreamUtxoWithTx[]; feeRate: number; + utxos: UtxoWithTx[]; + utxoToSpendable: Partial; }) { bitcoinChangeAddress ??= bitcoinAddress; @@ -35,9 +39,8 @@ export async function sbtcWithdrawHelper({ }); // we separate this part, since wallets could handle it themselves - const pay = await paymentInfo({ tx, utxos, feeRate }); + const pay = await paymentInfo({ tx, feeRate, utxos, utxoToSpendable }); for (const input of pay.inputs) tx.addInput(input); - // outputs are already on tx const changeAfterAdditionalOutput = BigInt(Math.ceil(VSIZE_INPUT_P2WPKH * feeRate)) - pay.changeSats; @@ -48,7 +51,7 @@ export async function sbtcWithdrawHelper({ return tx; } -const DUST = 500; +export const buildSbtcWithdrawTx = buildSbtcWithdrawTxOpReturn; // default to OP RETURN for developer release export function buildSbtcWithdrawTxOpReturn({ network = TESTNET, // default to testnet for developer release diff --git a/packages/sbtc/tests/api.test.ts b/packages/sbtc/tests/api.test.ts index 456789bf5..53192d4e2 100644 --- a/packages/sbtc/tests/api.test.ts +++ b/packages/sbtc/tests/api.test.ts @@ -1,31 +1,34 @@ -import { describe, expect, test } from 'vitest'; +import { expect, test } from 'vitest'; import { DevEnvHelper } from '../src'; -import { WALLET_00, getBitcoinAccount } from './testHelpers'; - -describe('api tests', () => { - test('fetch utxos bitcoin rpc', async () => { - const devEnv = new DevEnvHelper(); - const unspent = await devEnv.fetchUtxos('mqVnk6NPRdhntvfm4hh9vvjiRkFDUuSYsH'); - - expect(unspent.length).toBeGreaterThan(0); - expect(unspent[0]).toMatchObject( - expect.objectContaining({ txid: expect.any(String), hex: expect.any(String) }) - ); - }); -}); +import { WALLET_00, getBitcoinAccount, sleep } from './testHelpers'; test('minting bitcoin increases balance', async () => { - const wallet01 = getBitcoinAccount(WALLET_00); + const wallet01 = await getBitcoinAccount(WALLET_00); const devEnv = new DevEnvHelper(); const balance = await devEnv.getBalance(wallet01.address); + console.log('balance', balance); await devEnv.btcRpc.generatetoaddress({ nblocks: 1, address: wallet01.address, }); + await sleep(1000); const balanceAfter = await devEnv.getBalance(wallet01.address); expect(balanceAfter).toBeGreaterThan(balance); + console.log('balanceAfter', balanceAfter); +}); + +test('fetch utxos bitcoin rpc', async () => { + const wallet01 = await getBitcoinAccount(WALLET_00); + + const devEnv = new DevEnvHelper(); + const unspent = await devEnv.fetchUtxos(wallet01.address); + + expect(unspent.length).toBeGreaterThan(0); + expect(unspent[0]).toMatchObject( + expect.objectContaining({ txid: expect.any(String), tx: expect.any(String) }) + ); }); diff --git a/packages/sbtc/tests/deposit.test.ts b/packages/sbtc/tests/deposit.test.ts index 3e0c764ef..625fa28da 100644 --- a/packages/sbtc/tests/deposit.test.ts +++ b/packages/sbtc/tests/deposit.test.ts @@ -1,49 +1,39 @@ -import { HDKey } from '@scure/bip32'; -import * as bip39 from '@scure/bip39'; -import * as btc from '@scure/btc-signer'; import { describe, expect, test } from 'vitest'; -import { sbtcDepositHelper } from '../src'; -import * as api from '../src/transactions/api'; +import { DevEnvHelper, sbtcDepositHelper } from '../src'; +import { WALLET_00, getBitcoinAccount } from './testHelpers'; describe('mock integration test', () => { - test('deposit', async () => { - // == Wallet =================================================================== - const seed = await bip39.mnemonicToSeed( - 'twice kind fence tip hidden tilt action fragile skin nothing glory cousin green tomorrow spring wrist shed math olympic multiply hip blue scout claw' - ); - - const TESTNET_VERSION = { - private: 0x00000000, - public: 0x043587cf, - }; - const hdkey = HDKey.fromMasterSeed(seed, TESTNET_VERSION); - - const chainCode = 1; // testnet = 1, mainnet = 0 - const accountIndex = 0; - const path = `m/84'/${chainCode}'/${accountIndex}'/0/0`; + const dev = new DevEnvHelper(); - const privKey = hdkey.derive(path).privateKey!; - const address = btc.getAddress('wpkh', privKey, btc.TEST_NETWORK)!; + test('deposit', async () => { + const wallet01 = await getBitcoinAccount(WALLET_00); + const targetStacksAddress = 'ST1PQHQKV0RJXZFY1DGX8MNSNYVE3VGZJSRTPGZGM'; - // == sBTC ===================================================================== + const balance = await dev.getBalance(wallet01.address); + expect(balance).toBeGreaterThan(0); - const TARGET_STACKS_ADDRESS = 'ST1PQHQKV0RJXZFY1DGX8MNSNYVE3VGZJSRTPGZGM'; + const utxos = await dev.fetchUtxos(wallet01.address); + expect(utxos.length).toBeGreaterThan(0); - // Tx building (most simple interface) + // Tx building (most simple interface) OR more simple: remove duplicate args and assume defaults const tx = await sbtcDepositHelper({ - stacksAddress: TARGET_STACKS_ADDRESS, + stacksAddress: targetStacksAddress, amountSats: 1_000, - feeRate: await api.estimateFeeRate('low'), - utxos: await api.fetchUtxos(address), + feeRate: await dev.estimateFeeRate('low'), + utxos, - bitcoinChangeAddress: address, + bitcoinChangeAddress: wallet01.address, }); - tx.sign(privKey); + tx.sign(wallet01.privateKey); tx.finalize(); expect(tx).toBeDefined(); // yay, it didn't throw + + // Tx broadcasting + const txid = await dev.broadcastTx(tx); + expect(txid).toBeDefined(); }); }); diff --git a/packages/sbtc/tests/testHelpers.ts b/packages/sbtc/tests/testHelpers.ts index 358a4f6a5..442904334 100644 --- a/packages/sbtc/tests/testHelpers.ts +++ b/packages/sbtc/tests/testHelpers.ts @@ -1,6 +1,6 @@ import { HDKey } from '@scure/bip32'; +import * as bip39 from '@scure/bip39'; import * as btc from '@scure/btc-signer'; -import { hexToBytes } from '@stacks/common'; import { REGTEST } from '../src'; export const WALLET_00 = @@ -8,8 +8,9 @@ export const WALLET_00 = export const WALLET_01 = 'sell invite acquire kitten bamboo drastic jelly vivid peace spawn twice guilt pave pen trash pretty park cube fragile unaware remain midnight betray rebuild'; -export function getBitcoinAccount(mnemonic: string, idx: number = 0) { - const hdkey = HDKey.fromMasterSeed(hexToBytes(mnemonic), REGTEST.bip32); +export async function getBitcoinAccount(mnemonic: string, idx: number = 0) { + const seed = await bip39.mnemonicToSeed(mnemonic); + const hdkey = HDKey.fromMasterSeed(seed, REGTEST.bip32); const path = `m/84'/${REGTEST.bip84.coin}'/${idx}'/0/0`; @@ -18,3 +19,7 @@ export function getBitcoinAccount(mnemonic: string, idx: number = 0) { return { privateKey, address }; } + +export function sleep(ms: number) { + return new Promise(resolve => setTimeout(resolve, ms)); +} From c8a0040923aeb25828a423341d7fdcaa8a339992 Mon Sep 17 00:00:00 2001 From: janniks Date: Wed, 4 Oct 2023 17:35:15 +0200 Subject: [PATCH 12/49] refactor: devenv progress --- package-lock.json | 1 + packages/sbtc/package.json | 1 + packages/sbtc/src/transactions/api.ts | 33 +++++++------ packages/sbtc/src/transactions/constants.ts | 2 +- packages/sbtc/tests/api.test.ts | 27 ++++++----- packages/sbtc/tests/deposit.test.ts | 51 ++++++++++----------- packages/sbtc/tests/testHelpers.ts | 32 ++++++++++++- 7 files changed, 89 insertions(+), 58 deletions(-) diff --git a/package-lock.json b/package-lock.json index 669bf9051..e9851a9c7 100644 --- a/package-lock.json +++ b/package-lock.json @@ -24860,6 +24860,7 @@ "@stacks/common": "^6.7.0", "@stacks/encryption": "^6.7.0", "@stacks/transactions": "^6.7.0", + "@stacks/wallet-sdk": "^6.7.0", "c32check": "^2.0.0", "micro-packed": "^0.3.2" }, diff --git a/packages/sbtc/package.json b/packages/sbtc/package.json index c12467ce0..b548f3961 100644 --- a/packages/sbtc/package.json +++ b/packages/sbtc/package.json @@ -27,6 +27,7 @@ "@stacks/common": "^6.7.0", "@stacks/encryption": "^6.7.0", "@stacks/transactions": "^6.7.0", + "@stacks/wallet-sdk": "^6.7.0", "c32check": "^2.0.0", "micro-packed": "^0.3.2" }, diff --git a/packages/sbtc/src/transactions/api.ts b/packages/sbtc/src/transactions/api.ts index d6359feea..198fb1ac0 100644 --- a/packages/sbtc/src/transactions/api.ts +++ b/packages/sbtc/src/transactions/api.ts @@ -1,7 +1,7 @@ import RpcClient from '@btc-helpers/rpc'; import { RpcCallSpec } from '@btc-helpers/rpc/dist/callspec'; import * as btc from '@scure/btc-signer'; -import { Cl } from '@stacks/transactions'; +import { COINBASE_BYTES_LENGTH, Cl } from '@stacks/transactions'; import { wrapLazyProxy } from './utils'; /** todo */ @@ -105,7 +105,7 @@ export class TestnetHelper { } /** todo */ -export interface DevEnvUrls { +export interface DevEnvConfig { bitcoinCoreRpcUrl: string; bitcoinElectrumApiUrl: string; // electrs bitcoinExplorerUrl: string; // explorer can access electrum @@ -115,11 +115,11 @@ export interface DevEnvUrls { // todo: rename to helper, and add wallets etc. export class DevEnvHelper { - urls: DevEnvUrls; + config: DevEnvConfig; btcRpc: RpcClient & RpcCallSpec; - constructor(urls?: Partial) { - this.urls = Object.assign( + constructor(config?: Partial) { + this.config = Object.assign( { bitcoinCoreRpcUrl: 'http://devnet:devnet@127.0.0.1:18443', bitcoinElectrumApiUrl: 'http://127.0.0.1:60401', @@ -127,10 +127,10 @@ export class DevEnvHelper { stacksApiUrl: 'http://127.0.0.1:3999', sbtcBridgeApiUrl: 'http://127.0.0.1:3010', }, - urls + config ); - this.btcRpc = new RpcClient(this.urls.bitcoinCoreRpcUrl).Typed; + this.btcRpc = new RpcClient(this.config.bitcoinCoreRpcUrl).Typed; } /** @@ -144,11 +144,14 @@ export class DevEnvHelper { }); if (unspent?.length === 0) { - await this.btcRpc.importaddress({ address, rescan: true }); - await sleep(500); - unspent = await this.btcRpc.listunspent({ - addresses: [address], - }); + const addressInfo = await this.btcRpc.getaddressinfo({ address }); + if (!addressInfo.iswatchonly) { + // only import if not already imported + await this.btcRpc.importaddress({ address, rescan: true }); + unspent = await this.btcRpc.listunspent({ + addresses: [address], + }); + } } const utxos = unspent.map((u: any) => ({ @@ -172,9 +175,9 @@ export class DevEnvHelper { /** */ async getBalance(address: string): Promise { - const addressInfo = await fetch(`${this.urls.bitcoinExplorerUrl}/api/address/${address}`).then( - r => r.json() - ); + const addressInfo = await fetch( + `${this.config.bitcoinExplorerUrl}/api/address/${address}` + ).then(r => r.json()); return addressInfo.txHistory.balanceSat; } diff --git a/packages/sbtc/src/transactions/constants.ts b/packages/sbtc/src/transactions/constants.ts index 57a3117eb..68e199967 100644 --- a/packages/sbtc/src/transactions/constants.ts +++ b/packages/sbtc/src/transactions/constants.ts @@ -1,6 +1,6 @@ import * as btc from '@scure/btc-signer'; -export const SBTC_PEG_ADDRESS = 'tb1q3tj2fr9scwmcw3rq5m6jslva65f2rqjxt2t0zh'; // todo: auto-fetch or hardcode if final +export const SBTC_PEG_ADDRESS = 'mqVnk6NPRdhntvfm4hh9vvjiRkFDUuSYsH'; // todo: auto-fetch or hardcode if final export enum MagicBytes { Mainnet = '5832', diff --git a/packages/sbtc/tests/api.test.ts b/packages/sbtc/tests/api.test.ts index 53192d4e2..7b09a593f 100644 --- a/packages/sbtc/tests/api.test.ts +++ b/packages/sbtc/tests/api.test.ts @@ -1,31 +1,30 @@ +import * as btc from '@scure/btc-signer'; +import { hexToBytes } from '@stacks/common'; import { expect, test } from 'vitest'; import { DevEnvHelper } from '../src'; -import { WALLET_00, getBitcoinAccount, sleep } from './testHelpers'; +import { WALLET_01, getBitcoinAccount } from './testHelpers'; + +const dev = new DevEnvHelper(); test('minting bitcoin increases balance', async () => { - const wallet01 = await getBitcoinAccount(WALLET_00); + const wallet = await getBitcoinAccount(WALLET_01); - const devEnv = new DevEnvHelper(); - const balance = await devEnv.getBalance(wallet01.address); - console.log('balance', balance); + const balance = await dev.getBalance(wallet.address); - await devEnv.btcRpc.generatetoaddress({ - nblocks: 1, - address: wallet01.address, + await dev.btcRpc.generatetoaddress({ + nblocks: 101, // more than 100 blocks, because coinbase txs mature after 100 blocks + address: wallet.address, }); - await sleep(1000); - const balanceAfter = await devEnv.getBalance(wallet01.address); + const balanceAfter = await dev.getBalance(wallet.address); expect(balanceAfter).toBeGreaterThan(balance); - console.log('balanceAfter', balanceAfter); }); test('fetch utxos bitcoin rpc', async () => { - const wallet01 = await getBitcoinAccount(WALLET_00); + const wallet = await getBitcoinAccount(WALLET_01); - const devEnv = new DevEnvHelper(); - const unspent = await devEnv.fetchUtxos(wallet01.address); + const unspent = await dev.fetchUtxos(wallet.address); expect(unspent.length).toBeGreaterThan(0); expect(unspent[0]).toMatchObject( diff --git a/packages/sbtc/tests/deposit.test.ts b/packages/sbtc/tests/deposit.test.ts index 625fa28da..09c28655f 100644 --- a/packages/sbtc/tests/deposit.test.ts +++ b/packages/sbtc/tests/deposit.test.ts @@ -1,40 +1,39 @@ -import { describe, expect, test } from 'vitest'; +import { expect, test } from 'vitest'; import { DevEnvHelper, sbtcDepositHelper } from '../src'; -import { WALLET_00, getBitcoinAccount } from './testHelpers'; +import { WALLET_01, getBitcoinAccount, getStacksAccount } from './testHelpers'; -describe('mock integration test', () => { - const dev = new DevEnvHelper(); +const dev = new DevEnvHelper(); - test('deposit', async () => { - const wallet01 = await getBitcoinAccount(WALLET_00); - const targetStacksAddress = 'ST1PQHQKV0RJXZFY1DGX8MNSNYVE3VGZJSRTPGZGM'; +test('deposit', async () => { + const bitcoinAccount = await getBitcoinAccount(WALLET_01); + const stacksAccount = await getStacksAccount(WALLET_01); + console.log('stacksAccount.address', stacksAccount.address); - const balance = await dev.getBalance(wallet01.address); - expect(balance).toBeGreaterThan(0); + const balance = await dev.getBalance(bitcoinAccount.address); + expect(balance).toBeGreaterThan(0); - const utxos = await dev.fetchUtxos(wallet01.address); - expect(utxos.length).toBeGreaterThan(0); + const utxos = await dev.fetchUtxos(bitcoinAccount.address); + expect(utxos.length).toBeGreaterThan(0); - // Tx building (most simple interface) OR more simple: remove duplicate args and assume defaults - const tx = await sbtcDepositHelper({ - stacksAddress: targetStacksAddress, - amountSats: 1_000, + // Tx building (most simple interface) OR more simple: remove duplicate args and assume defaults + const tx = await sbtcDepositHelper({ + stacksAddress: stacksAccount.address, + amountSats: 1_000, - feeRate: await dev.estimateFeeRate('low'), - utxos, + feeRate: await dev.estimateFeeRate('low'), + utxos, - bitcoinChangeAddress: wallet01.address, - }); + bitcoinChangeAddress: bitcoinAccount.address, + }); - tx.sign(wallet01.privateKey); - tx.finalize(); + tx.sign(bitcoinAccount.privateKey); + tx.finalize(); - expect(tx).toBeDefined(); // yay, it didn't throw + expect(tx).toBeDefined(); // yay, it didn't throw - // Tx broadcasting - const txid = await dev.broadcastTx(tx); - expect(txid).toBeDefined(); - }); + // Tx broadcasting + const txid = await dev.broadcastTx(tx); + expect(txid).toBeDefined(); }); // api.broadcastTx(tx); diff --git a/packages/sbtc/tests/testHelpers.ts b/packages/sbtc/tests/testHelpers.ts index 442904334..87dc7ccef 100644 --- a/packages/sbtc/tests/testHelpers.ts +++ b/packages/sbtc/tests/testHelpers.ts @@ -2,11 +2,20 @@ import { HDKey } from '@scure/bip32'; import * as bip39 from '@scure/bip39'; import * as btc from '@scure/btc-signer'; import { REGTEST } from '../src'; +import { + DerivationType, + deriveAccount, + generateNewAccount, + generateWallet, + getRootNode, + getStxAddress, +} from '@stacks/wallet-sdk'; +import { TransactionVersion } from '@stacks/transactions'; -export const WALLET_00 = - 'twice kind fence tip hidden tilt action fragile skin nothing glory cousin green tomorrow spring wrist shed math olympic multiply hip blue scout claw'; export const WALLET_01 = 'sell invite acquire kitten bamboo drastic jelly vivid peace spawn twice guilt pave pen trash pretty park cube fragile unaware remain midnight betray rebuild'; +export const WALLET_02 = + 'hold excess usual excess ring elephant install account glad dry fragile donkey gaze humble truck breeze nation gasp vacuum limb head keep delay hospital'; export async function getBitcoinAccount(mnemonic: string, idx: number = 0) { const seed = await bip39.mnemonicToSeed(mnemonic); @@ -20,6 +29,25 @@ export async function getBitcoinAccount(mnemonic: string, idx: number = 0) { return { privateKey, address }; } +export async function getStacksAccount(mnemonic: string, idx: number = 0) { + const wallet = await generateWallet({ + secretKey: mnemonic, + password: '', + }); + + const account = deriveAccount({ + rootNode: getRootNode(wallet), + index: idx, + salt: wallet.salt, + stxDerivationType: DerivationType.Wallet, + }); + + return { + ...account, + address: getStxAddress({ account, transactionVersion: TransactionVersion.Testnet }), + }; +} + export function sleep(ms: number) { return new Promise(resolve => setTimeout(resolve, ms)); } From 7008fa2cfebcfaa453ac8bc7dbee43017e2b2541 Mon Sep 17 00:00:00 2001 From: janniks Date: Wed, 4 Oct 2023 23:10:53 +0200 Subject: [PATCH 13/49] chore: wip --- packages/sbtc/src/transactions/api.ts | 53 ++++++++++++++++++++++++++- packages/sbtc/tests/api.test.ts | 14 +++++-- packages/sbtc/tests/deposit.test.ts | 6 +++ 3 files changed, 68 insertions(+), 5 deletions(-) diff --git a/packages/sbtc/src/transactions/api.ts b/packages/sbtc/src/transactions/api.ts index 198fb1ac0..817ed46fe 100644 --- a/packages/sbtc/src/transactions/api.ts +++ b/packages/sbtc/src/transactions/api.ts @@ -1,8 +1,9 @@ import RpcClient from '@btc-helpers/rpc'; import { RpcCallSpec } from '@btc-helpers/rpc/dist/callspec'; import * as btc from '@scure/btc-signer'; -import { COINBASE_BYTES_LENGTH, Cl } from '@stacks/transactions'; +import { BufferCV, COINBASE_BYTES_LENGTH, Cl, SomeCV } from '@stacks/transactions'; import { wrapLazyProxy } from './utils'; +import { REGTEST } from './constants'; /** todo */ // https://blockstream.info/api/address/1KFHE7w8BhaENAswwryaoccDb6qcT6DbYY/utxo @@ -200,6 +201,56 @@ export class DevEnvHelper { async broadcastTx(tx: btc.Transaction): Promise { return await this.btcRpc.sendrawtransaction({ hexstring: tx.hex, maxfeerate: 1000 }); } + + // todo abstract for both testnet and devenv classes + async stacksCallReadOnly({ + contractAddress, + functionName, + sender = 'ST000000000000000000002AMW42H', + args = [], + }: { + contractAddress: string; + functionName: string; + sender?: string; + args?: string[]; + }) { + contractAddress = contractAddress.replace('.', '/'); + + return await fetch( + `${this.config.stacksApiUrl}/v2/contracts/call-read/${contractAddress}/${encodeURIComponent( + functionName + )}`, + { + method: 'POST', + headers: { + Accept: 'application/json', + 'Content-Type': 'application/json', + }, + body: JSON.stringify({ sender, arguments: args }), + } + ) + .then(res => { + return res.json(); + }) + .then(res => { + return Cl.deserialize(res.result); + }); + } + + async getSbtcPegAddress(contractAddress: string): Promise { + const publicKey = ( + (await this.stacksCallReadOnly({ + contractAddress, + functionName: 'get-bitcoin-wallet-public-key', + })) as SomeCV + ).value.buffer; + + return btc.Address(REGTEST).encode({ + type: 'tr', + // strip y byte + pubkey: publicKey.length === 33 ? publicKey.subarray(1) : publicKey, + }); + } } export function sleep(ms: number) { diff --git a/packages/sbtc/tests/api.test.ts b/packages/sbtc/tests/api.test.ts index 7b09a593f..f9968d4ae 100644 --- a/packages/sbtc/tests/api.test.ts +++ b/packages/sbtc/tests/api.test.ts @@ -1,5 +1,3 @@ -import * as btc from '@scure/btc-signer'; -import { hexToBytes } from '@stacks/common'; import { expect, test } from 'vitest'; import { DevEnvHelper } from '../src'; import { WALLET_01, getBitcoinAccount } from './testHelpers'; @@ -17,11 +15,10 @@ test('minting bitcoin increases balance', async () => { }); const balanceAfter = await dev.getBalance(wallet.address); - expect(balanceAfter).toBeGreaterThan(balance); }); -test('fetch utxos bitcoin rpc', async () => { +test('fetch utxos', async () => { const wallet = await getBitcoinAccount(WALLET_01); const unspent = await dev.fetchUtxos(wallet.address); @@ -31,3 +28,12 @@ test('fetch utxos bitcoin rpc', async () => { expect.objectContaining({ txid: expect.any(String), tx: expect.any(String) }) ); }); + +test('get balance', async () => { + const wallet = await getBitcoinAccount(WALLET_01); + + const balance = await dev.getBalance(wallet.address); + console.log('balance', balance); + + expect(balance).toBeGreaterThan(0); +}); diff --git a/packages/sbtc/tests/deposit.test.ts b/packages/sbtc/tests/deposit.test.ts index 09c28655f..c872e8a2f 100644 --- a/packages/sbtc/tests/deposit.test.ts +++ b/packages/sbtc/tests/deposit.test.ts @@ -4,6 +4,12 @@ import { WALLET_01, getBitcoinAccount, getStacksAccount } from './testHelpers'; const dev = new DevEnvHelper(); +test('get address', async () => { + const str = await dev.getSbtcPegAddress('ST1PQHQKV0RJXZFY1DGX8MNSNYVE3VGZJSRTPGZGM.asset'); + + console.log('str', str); +}); + test('deposit', async () => { const bitcoinAccount = await getBitcoinAccount(WALLET_01); const stacksAccount = await getStacksAccount(WALLET_01); From 98129e82633ffe34b396571e3c58425d0e8d9a00 Mon Sep 17 00:00:00 2001 From: janniks Date: Thu, 5 Oct 2023 16:24:37 +0200 Subject: [PATCH 14/49] chore: wip --- packages/sbtc/src/transactions/api.ts | 4 ++-- packages/sbtc/src/transactions/constants.ts | 4 +++- packages/sbtc/src/transactions/deposit.ts | 6 +++--- packages/sbtc/src/transactions/withdraw.ts | 6 +++--- packages/sbtc/tests/deposit.test.ts | 10 ++++------ 5 files changed, 15 insertions(+), 15 deletions(-) diff --git a/packages/sbtc/src/transactions/api.ts b/packages/sbtc/src/transactions/api.ts index 817ed46fe..454d10fdf 100644 --- a/packages/sbtc/src/transactions/api.ts +++ b/packages/sbtc/src/transactions/api.ts @@ -1,9 +1,9 @@ import RpcClient from '@btc-helpers/rpc'; import { RpcCallSpec } from '@btc-helpers/rpc/dist/callspec'; import * as btc from '@scure/btc-signer'; -import { BufferCV, COINBASE_BYTES_LENGTH, Cl, SomeCV } from '@stacks/transactions'; -import { wrapLazyProxy } from './utils'; +import { BufferCV, Cl, SomeCV } from '@stacks/transactions'; import { REGTEST } from './constants'; +import { wrapLazyProxy } from './utils'; /** todo */ // https://blockstream.info/api/address/1KFHE7w8BhaENAswwryaoccDb6qcT6DbYY/utxo diff --git a/packages/sbtc/src/transactions/constants.ts b/packages/sbtc/src/transactions/constants.ts index 68e199967..7c2a2f77e 100644 --- a/packages/sbtc/src/transactions/constants.ts +++ b/packages/sbtc/src/transactions/constants.ts @@ -1,6 +1,8 @@ import * as btc from '@scure/btc-signer'; -export const SBTC_PEG_ADDRESS = 'mqVnk6NPRdhntvfm4hh9vvjiRkFDUuSYsH'; // todo: auto-fetch or hardcode if final +// todo: auto-fetch or hardcode if final +// or replace with testnet final address +export const SBTC_PEG_ADDRESS = 'bcrt1pjzju437r8ldynactcxcgvmaqhfafgsxemej8lm9czvkwka4ffhaqxpc5d2'; export enum MagicBytes { Mainnet = '5832', diff --git a/packages/sbtc/src/transactions/deposit.ts b/packages/sbtc/src/transactions/deposit.ts index e6d233a95..886c6f2ae 100644 --- a/packages/sbtc/src/transactions/deposit.ts +++ b/packages/sbtc/src/transactions/deposit.ts @@ -6,8 +6,8 @@ import { BitcoinNetwork, MagicBytes, OpCode, + REGTEST, SBTC_PEG_ADDRESS, - TESTNET, VSIZE_INPUT_P2WPKH, } from './constants'; import { @@ -41,7 +41,7 @@ export const buildSbtcDepositTx = buildSbtcDepositTxOpReturn; // default to OP R * */ export function buildSbtcDepositTxOpReturn({ - network = TESTNET, // default to testnet for developer release + network = REGTEST, amountSats, stacksAddress, pegAddress = SBTC_PEG_ADDRESS, @@ -65,7 +65,7 @@ export function buildSbtcDepositTxOpReturn({ } export async function sbtcDepositHelper({ - network = TESTNET, // default to testnet for developer release + network = REGTEST, amountSats, stacksAddress, bitcoinChangeAddress, diff --git a/packages/sbtc/src/transactions/withdraw.ts b/packages/sbtc/src/transactions/withdraw.ts index 2ffd9efbd..08e2e24b0 100644 --- a/packages/sbtc/src/transactions/withdraw.ts +++ b/packages/sbtc/src/transactions/withdraw.ts @@ -2,7 +2,7 @@ import * as btc from '@scure/btc-signer'; import { hexToBytes } from '@stacks/common'; import * as P from 'micro-packed'; import { UtxoWithTx } from './api'; -import { BitcoinNetwork, MagicBytes, OpCode, TESTNET, VSIZE_INPUT_P2WPKH } from './constants'; +import { BitcoinNetwork, MagicBytes, OpCode, REGTEST, VSIZE_INPUT_P2WPKH } from './constants'; import { SpendableByScriptTypes, dustMinimum, paymentInfo } from './utils'; @@ -11,7 +11,7 @@ const concat = P.concatBytes; const DUST = 500; // todo: double-check export async function sbtcWithdrawHelper({ - network = TESTNET, // default to testnet for developer release + network = REGTEST, amountSats, signature, bitcoinAddress, @@ -54,7 +54,7 @@ export async function sbtcWithdrawHelper({ export const buildSbtcWithdrawTx = buildSbtcWithdrawTxOpReturn; // default to OP RETURN for developer release export function buildSbtcWithdrawTxOpReturn({ - network = TESTNET, // default to testnet for developer release + network = REGTEST, amountSats, signature, bitcoinAddress, diff --git a/packages/sbtc/tests/deposit.test.ts b/packages/sbtc/tests/deposit.test.ts index c872e8a2f..3b4ce80ac 100644 --- a/packages/sbtc/tests/deposit.test.ts +++ b/packages/sbtc/tests/deposit.test.ts @@ -4,12 +4,6 @@ import { WALLET_01, getBitcoinAccount, getStacksAccount } from './testHelpers'; const dev = new DevEnvHelper(); -test('get address', async () => { - const str = await dev.getSbtcPegAddress('ST1PQHQKV0RJXZFY1DGX8MNSNYVE3VGZJSRTPGZGM.asset'); - - console.log('str', str); -}); - test('deposit', async () => { const bitcoinAccount = await getBitcoinAccount(WALLET_01); const stacksAccount = await getStacksAccount(WALLET_01); @@ -21,8 +15,12 @@ test('deposit', async () => { const utxos = await dev.fetchUtxos(bitcoinAccount.address); expect(utxos.length).toBeGreaterThan(0); + const pegAddress = await dev.getSbtcPegAddress('ST1PQHQKV0RJXZFY1DGX8MNSNYVE3VGZJSRTPGZGM.asset'); + // Tx building (most simple interface) OR more simple: remove duplicate args and assume defaults const tx = await sbtcDepositHelper({ + pegAddress, // sBTC contract emitted public key => tr btc address + stacksAddress: stacksAccount.address, amountSats: 1_000, From 80fc99e2c00eced8ba4179e4994ddf1f8abf6340 Mon Sep 17 00:00:00 2001 From: janniks Date: Fri, 6 Oct 2023 13:16:18 +0200 Subject: [PATCH 15/49] fix: update to match cli --- package-lock.json | 3359 +++++++++++-------- packages/sbtc/package.json | 1 + packages/sbtc/src/transactions/api.ts | 22 +- packages/sbtc/src/transactions/constants.ts | 14 +- packages/sbtc/src/transactions/deposit.ts | 8 +- packages/sbtc/src/transactions/utils.ts | 2 +- packages/sbtc/tests/api.test.ts | 19 +- packages/sbtc/tests/deposit.test.ts | 81 +- packages/sbtc/tests/testHelpers.ts | 29 +- 9 files changed, 2042 insertions(+), 1493 deletions(-) diff --git a/package-lock.json b/package-lock.json index e9851a9c7..53de93a77 100644 --- a/package-lock.json +++ b/package-lock.json @@ -70,12 +70,12 @@ } }, "node_modules/@babel/code-frame": { - "version": "7.22.10", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.22.10.tgz", - "integrity": "sha512-/KKIMG4UEL35WmI9OlvMhurwtytjvXoFcGNrOvyG9zIzA8YmPjVtIZUf7b05+TPO7G7/GEmLHDaoCgACHl9hhA==", + "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.10", + "@babel/highlight": "^7.22.13", "chalk": "^2.4.2" }, "engines": { @@ -83,34 +83,34 @@ } }, "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.22.20", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.22.20.tgz", + "integrity": "sha512-BQYjKbpXjoXwFW5jGqiizJQQT/aC7pFm9Ok1OWssonuguICi264lbgMzRp2ZMmRSlfkX6DsWDDcsrctK8Rwfiw==", "dev": true, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/core": { - "version": "7.22.10", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.22.10.tgz", - "integrity": "sha512-fTmqbbUBAwCcre6zPzNngvsI0aNrPZe77AeqvDxWM9Nm+04RrJ3CAmGHA9f7lJQY6ZMhRztNemy4uslDxTX4Qw==", + "version": "7.23.0", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.23.0.tgz", + "integrity": "sha512-97z/ju/Jy1rZmDxybphrBuI+jtJjFVoz7Mr9yUQVVVi+DNZE333uFQeMOqcCIy1x3WYBIbWftUSLmbNXNT7qFQ==", "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.10", - "@babel/parser": "^7.22.10", - "@babel/template": "^7.22.5", - "@babel/traverse": "^7.22.10", - "@babel/types": "^7.22.10", - "convert-source-map": "^1.7.0", + "@babel/code-frame": "^7.22.13", + "@babel/generator": "^7.23.0", + "@babel/helper-compilation-targets": "^7.22.15", + "@babel/helper-module-transforms": "^7.23.0", + "@babel/helpers": "^7.23.0", + "@babel/parser": "^7.23.0", + "@babel/template": "^7.22.15", + "@babel/traverse": "^7.23.0", + "@babel/types": "^7.23.0", + "convert-source-map": "^2.0.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.2", - "json5": "^2.2.2", + "json5": "^2.2.3", "semver": "^6.3.1" }, "engines": { @@ -121,12 +121,6 @@ "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", @@ -137,12 +131,12 @@ } }, "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.23.0", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.23.0.tgz", + "integrity": "sha512-lN85QRR+5IbYrMWM6Y4pE/noaQtg4pNiqeNGX60eqOfo6gtEj6uw/JagelB8vVztSd7R6M5n1+PQkDbHbBRU4g==", "dev": true, "dependencies": { - "@babel/types": "^7.22.10", + "@babel/types": "^7.23.0", "@jridgewell/gen-mapping": "^0.3.2", "@jridgewell/trace-mapping": "^0.3.17", "jsesc": "^2.5.1" @@ -152,13 +146,13 @@ } }, "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.22.15", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.22.15.tgz", + "integrity": "sha512-y6EEzULok0Qvz8yyLkCvVX+02ic+By2UdOhylwUOvOn9dvYc9mKICJuuU1n1XBI02YWsNsnrY1kc6DVbjcXbtw==", "dev": true, "dependencies": { "@babel/compat-data": "^7.22.9", - "@babel/helper-validator-option": "^7.22.5", + "@babel/helper-validator-option": "^7.22.15", "browserslist": "^4.21.9", "lru-cache": "^5.1.1", "semver": "^6.3.1" @@ -177,22 +171,22 @@ } }, "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==", + "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==", "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==", + "version": "7.23.0", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.23.0.tgz", + "integrity": "sha512-OErEqsrxjZTJciZ4Oo+eoZqeW9UIiOcuYKRJA4ZAgV9myA+pOXhhmpfNCKjEH/auVfEYVFJ6y1Tc4r0eIApqiw==", "dev": true, "dependencies": { - "@babel/template": "^7.22.5", - "@babel/types": "^7.22.5" + "@babel/template": "^7.22.15", + "@babel/types": "^7.23.0" }, "engines": { "node": ">=6.9.0" @@ -211,28 +205,28 @@ } }, "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.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==", "dev": true, "dependencies": { - "@babel/types": "^7.22.5" + "@babel/types": "^7.22.15" }, "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.23.0", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.23.0.tgz", + "integrity": "sha512-WhDWw1tdrlT0gMgUJSlX0IQvoO1eN279zrAUbVB+KpV2c3Tylz8+GnKOLllCS6Z/iZQEyVYxhZVUdPTqs2YYPw==", "dev": true, "dependencies": { - "@babel/helper-environment-visitor": "^7.22.5", - "@babel/helper-module-imports": "^7.22.5", + "@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.5" + "@babel/helper-validator-identifier": "^7.22.20" }, "engines": { "node": ">=6.9.0" @@ -284,44 +278,44 @@ } }, "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.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==", "dev": true, "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.22.15", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.22.15.tgz", + "integrity": "sha512-bMn7RmyFjY/mdECUbgn9eoSY4vqvacUnS9i9vGAGttgFWesO6B4CYWA7XlpbWgBt71iv/hfbPlynohStqnu5hA==", "dev": true, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helpers": { - "version": "7.22.10", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.22.10.tgz", - "integrity": "sha512-a41J4NW8HyZa1I1vAndrraTlPZ/eZoga2ZgS7fEr0tZJGVU4xqdE80CEm0CcNjha5EZ8fTBYLKHF0kqDUuAwQw==", + "version": "7.23.1", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.23.1.tgz", + "integrity": "sha512-chNpneuK18yW5Oxsr+t553UZzzAs3aZnFm4bxhebsNTeshrC95yA7l5yl7GBAG+JG1rF0F7zzD2EixK9mWSDoA==", "dev": true, "dependencies": { - "@babel/template": "^7.22.5", - "@babel/traverse": "^7.22.10", - "@babel/types": "^7.22.10" + "@babel/template": "^7.22.15", + "@babel/traverse": "^7.23.0", + "@babel/types": "^7.23.0" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/highlight": { - "version": "7.22.10", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.22.10.tgz", - "integrity": "sha512-78aUtVcT7MUscr0K5mIEnkwxPE0MaxkR5RxRwuHaQ+JuU5AmTPhY+do2mdzVTnIJJpyBglql2pehuBIWHug+WQ==", + "version": "7.22.20", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.22.20.tgz", + "integrity": "sha512-dkdMCN3py0+ksCgYmGG8jKeGA/8Tk+gJwSYYlFGxG5lmhfKNoAy004YpLxpS1W2J8m/EK2Ew+yOs9pVRwO89mg==", "dev": true, "dependencies": { - "@babel/helper-validator-identifier": "^7.22.5", + "@babel/helper-validator-identifier": "^7.22.20", "chalk": "^2.4.2", "js-tokens": "^4.0.0" }, @@ -330,9 +324,9 @@ } }, "node_modules/@babel/parser": { - "version": "7.22.10", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.22.10.tgz", - "integrity": "sha512-lNbdGsQb9ekfsnjFGhEiF4hfFqGgfOP3H3d27re3n+CGhNuTSUEQdfWk556sTLNTloczcdM5TYF2LhzmDQKyvQ==", + "version": "7.23.0", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.23.0.tgz", + "integrity": "sha512-vvPKKdMemU85V9WE/l5wZEmImpCtLqbnTvqDS2U1fJ96KrxoW7KrXhNsNCblQlg8Ck4b85yxdTyelsMUgFUXiw==", "dev": true, "bin": { "parser": "bin/babel-parser.js" @@ -519,9 +513,9 @@ } }, "node_modules/@babel/runtime": { - "version": "7.22.10", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.22.10.tgz", - "integrity": "sha512-21t/fkKLMZI4pqP2wlmsQAWnYW1PDyKyyUV4vCi+B25ydmdaYTKXPwCj0BzSUnZf4seIiYvSA3jcZ3gdsMFkLQ==", + "version": "7.23.1", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.23.1.tgz", + "integrity": "sha512-hC2v6p8ZSI/W0HUzh3V8C5g+NwSKzKPtJwSpTjwl0o297GP9+ZLQSkdvHz46CM3LqyoXxq+5G9komY+eSqSO0g==", "dev": true, "dependencies": { "regenerator-runtime": "^0.14.0" @@ -531,33 +525,33 @@ } }, "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.22.15", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.22.15.tgz", + "integrity": "sha512-QPErUVm4uyJa60rkI73qneDacvdvzxshT3kksGqlGWYdOTIUOwJ7RDUL8sGqslY1uXWSL6xMFKEXDS3ox2uF0w==", "dev": true, "dependencies": { - "@babel/code-frame": "^7.22.5", - "@babel/parser": "^7.22.5", - "@babel/types": "^7.22.5" + "@babel/code-frame": "^7.22.13", + "@babel/parser": "^7.22.15", + "@babel/types": "^7.22.15" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/traverse": { - "version": "7.22.10", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.22.10.tgz", - "integrity": "sha512-Q/urqV4pRByiNNpb/f5OSv28ZlGJiFiiTh+GAHktbIrkPhPbl90+uW6SmpoLyZqutrg9AEaEf3Q/ZBRHBXgxig==", + "version": "7.23.0", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.23.0.tgz", + "integrity": "sha512-t/QaEvyIoIkwzpiZ7aoSKK8kObQYeF7T2v+dazAYCb8SXtp58zEVkWW7zAnju8FNKNdr4ScAOEDmMItbyOmEYw==", "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/code-frame": "^7.22.13", + "@babel/generator": "^7.23.0", + "@babel/helper-environment-visitor": "^7.22.20", + "@babel/helper-function-name": "^7.23.0", "@babel/helper-hoist-variables": "^7.22.5", "@babel/helper-split-export-declaration": "^7.22.6", - "@babel/parser": "^7.22.10", - "@babel/types": "^7.22.10", + "@babel/parser": "^7.23.0", + "@babel/types": "^7.23.0", "debug": "^4.1.0", "globals": "^11.1.0" }, @@ -575,13 +569,13 @@ } }, "node_modules/@babel/types": { - "version": "7.22.10", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.22.10.tgz", - "integrity": "sha512-obaoigiLrlDZ7TUQln/8m4mSqIW2QFeOrCQc9r+xsaHGNoplVNYlRVpsfE8Vj35GEm2ZH4ZhrNYogs/3fj85kg==", + "version": "7.23.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.23.0.tgz", + "integrity": "sha512-0oIyUfKoI3mSqMvsxBdclDwxXKXAUA8v/apZbc+iSyARYou1o8ZGDxbUYyLFoW2arqS2jDGqJuZvv1d/io1axg==", "dev": true, "dependencies": { "@babel/helper-string-parser": "^7.22.5", - "@babel/helper-validator-identifier": "^7.22.5", + "@babel/helper-validator-identifier": "^7.22.20", "to-fast-properties": "^2.0.0" }, "engines": { @@ -870,14 +864,14 @@ } }, "node_modules/@commitlint/cli": { - "version": "17.7.1", - "resolved": "https://registry.npmjs.org/@commitlint/cli/-/cli-17.7.1.tgz", - "integrity": "sha512-BCm/AT06SNCQtvFv921iNhudOHuY16LswT0R3OeolVGLk8oP+Rk9TfQfgjH7QPMjhvp76bNqGFEcpKojxUNW1g==", + "version": "17.7.2", + "resolved": "https://registry.npmjs.org/@commitlint/cli/-/cli-17.7.2.tgz", + "integrity": "sha512-t3N7TZq7lOeqTOyEgfGcaltHqEJf7YDlPg75MldeVPPyz14jZq/+mbGF9tueDLFX8R6RwdymrN6D+U5XwZ8Iwg==", "dev": true, "dependencies": { "@commitlint/format": "^17.4.4", "@commitlint/lint": "^17.7.0", - "@commitlint/load": "^17.7.1", + "@commitlint/load": "^17.7.2", "@commitlint/read": "^17.5.1", "@commitlint/types": "^17.4.4", "execa": "^5.0.0", @@ -918,28 +912,6 @@ "node": ">=v14" } }, - "node_modules/@commitlint/config-validator/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/@commitlint/config-validator/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/@commitlint/ensure": { "version": "17.6.7", "resolved": "https://registry.npmjs.org/@commitlint/ensure/-/ensure-17.6.7.tgz", @@ -1078,16 +1050,16 @@ } }, "node_modules/@commitlint/load": { - "version": "17.7.1", - "resolved": "https://registry.npmjs.org/@commitlint/load/-/load-17.7.1.tgz", - "integrity": "sha512-S/QSOjE1ztdogYj61p6n3UbkUvweR17FQ0zDbNtoTLc+Hz7vvfS7ehoTMQ27hPSjVBpp7SzEcOQu081RLjKHJQ==", + "version": "17.7.2", + "resolved": "https://registry.npmjs.org/@commitlint/load/-/load-17.7.2.tgz", + "integrity": "sha512-XA7WTnsjHZ4YH6ZYsrnxgLdXzriwMMq+utZUET6spbOEEIPBCDLdOQXS26P+v3TTO4hUHOEhzUquaBv3jbBixw==", "dev": true, "dependencies": { "@commitlint/config-validator": "^17.6.7", "@commitlint/execute-rule": "^17.4.0", "@commitlint/resolve-extends": "^17.6.7", "@commitlint/types": "^17.4.4", - "@types/node": "20.4.7", + "@types/node": "20.5.1", "chalk": "^4.1.0", "cosmiconfig": "^8.0.0", "cosmiconfig-typescript-loader": "^4.0.0", @@ -1437,9 +1409,9 @@ } }, "node_modules/@esbuild/android-arm": { - "version": "0.19.0", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.19.0.tgz", - "integrity": "sha512-GAkjUyHgWTYuex3evPd5V7uV/XS4LMKr1PWHRPW1xNyy/Jx08x3uTrDFRefBYLKT/KpaWM8/YMQcwbp5a3yIDA==", + "version": "0.19.4", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.19.4.tgz", + "integrity": "sha512-uBIbiYMeSsy2U0XQoOGVVcpIktjLMEKa7ryz2RLr7L/vTnANNEsPVAh4xOv7ondGz6ac1zVb0F8Jx20rQikffQ==", "cpu": [ "arm" ], @@ -1453,9 +1425,9 @@ } }, "node_modules/@esbuild/android-arm64": { - "version": "0.19.0", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.19.0.tgz", - "integrity": "sha512-AzsozJnB+RNaDncBCs3Ys5g3kqhPFUueItfEaCpp89JH2naFNX2mYDIvUgPYMqqjm8hiFoo+jklb3QHZyR3ubw==", + "version": "0.19.4", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.19.4.tgz", + "integrity": "sha512-mRsi2vJsk4Bx/AFsNBqOH2fqedxn5L/moT58xgg51DjX1la64Z3Npicut2VbhvDFO26qjWtPMsVxCd80YTFVeg==", "cpu": [ "arm64" ], @@ -1469,9 +1441,9 @@ } }, "node_modules/@esbuild/android-x64": { - "version": "0.19.0", - "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.19.0.tgz", - "integrity": "sha512-SUG8/qiVhljBDpdkHQ9DvOWbp7hFFIP0OzxOTptbmVsgBgzY6JWowmMd6yJuOhapfxmj/DrvwKmjRLvVSIAKZg==", + "version": "0.19.4", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.19.4.tgz", + "integrity": "sha512-4iPufZ1TMOD3oBlGFqHXBpa3KFT46aLl6Vy7gwed0ZSYgHaZ/mihbYb4t7Z9etjkC9Al3ZYIoOaHrU60gcMy7g==", "cpu": [ "x64" ], @@ -1485,9 +1457,9 @@ } }, "node_modules/@esbuild/darwin-arm64": { - "version": "0.19.0", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.19.0.tgz", - "integrity": "sha512-HkxZ8k3Jvcw0FORPNTavA8BMgQjLOB6AajT+iXmil7BwY3gU1hWvJJAyWyEogCmA4LdbGvKF8vEykdmJ4xNJJQ==", + "version": "0.19.4", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.19.4.tgz", + "integrity": "sha512-Lviw8EzxsVQKpbS+rSt6/6zjn9ashUZ7Tbuvc2YENgRl0yZTktGlachZ9KMJUsVjZEGFVu336kl5lBgDN6PmpA==", "cpu": [ "arm64" ], @@ -1501,9 +1473,9 @@ } }, "node_modules/@esbuild/darwin-x64": { - "version": "0.19.0", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.19.0.tgz", - "integrity": "sha512-9IRWJjqpWFHM9a5Qs3r3bK834NCFuDY5ZaLrmTjqE+10B6w65UMQzeZjh794JcxpHolsAHqwsN/33crUXNCM2Q==", + "version": "0.19.4", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.19.4.tgz", + "integrity": "sha512-YHbSFlLgDwglFn0lAO3Zsdrife9jcQXQhgRp77YiTDja23FrC2uwnhXMNkAucthsf+Psr7sTwYEryxz6FPAVqw==", "cpu": [ "x64" ], @@ -1517,9 +1489,9 @@ } }, "node_modules/@esbuild/freebsd-arm64": { - "version": "0.19.0", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.19.0.tgz", - "integrity": "sha512-s7i2WcXcK0V1PJHVBe7NsGddsL62a9Vhpz2U7zapPrwKoFuxPP9jybwX8SXnropR/AOj3ppt2ern4ItblU6UQQ==", + "version": "0.19.4", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.19.4.tgz", + "integrity": "sha512-vz59ijyrTG22Hshaj620e5yhs2dU1WJy723ofc+KUgxVCM6zxQESmWdMuVmUzxtGqtj5heHyB44PjV/HKsEmuQ==", "cpu": [ "arm64" ], @@ -1533,9 +1505,9 @@ } }, "node_modules/@esbuild/freebsd-x64": { - "version": "0.19.0", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.19.0.tgz", - "integrity": "sha512-NMdBSSdgwHCqCsucU5k1xflIIRU0qi1QZnM6+vdGy5fvxm1c8rKh50VzsWsIVTFUG3l91AtRxVwoz3Lcvy3I5w==", + "version": "0.19.4", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.19.4.tgz", + "integrity": "sha512-3sRbQ6W5kAiVQRBWREGJNd1YE7OgzS0AmOGjDmX/qZZecq8NFlQsQH0IfXjjmD0XtUYqr64e0EKNFjMUlPL3Cw==", "cpu": [ "x64" ], @@ -1549,9 +1521,9 @@ } }, "node_modules/@esbuild/linux-arm": { - "version": "0.19.0", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.19.0.tgz", - "integrity": "sha512-2F1+lH7ZBcCcgxiSs8EXQV0PPJJdTNiNcXxDb61vzxTRJJkXX1I/ye9mAhfHyScXzHaEibEXg1Jq9SW586zz7w==", + "version": "0.19.4", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.19.4.tgz", + "integrity": "sha512-z/4ArqOo9EImzTi4b6Vq+pthLnepFzJ92BnofU1jgNlcVb+UqynVFdoXMCFreTK7FdhqAzH0vmdwW5373Hm9pg==", "cpu": [ "arm" ], @@ -1565,9 +1537,9 @@ } }, "node_modules/@esbuild/linux-arm64": { - "version": "0.19.0", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.19.0.tgz", - "integrity": "sha512-I4zvE2srSZxRPapFnNqj+NL3sDJ1wkvEZqt903OZUlBBgigrQMvzUowvP/TTTu2OGYe1oweg5MFilfyrElIFag==", + "version": "0.19.4", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.19.4.tgz", + "integrity": "sha512-ZWmWORaPbsPwmyu7eIEATFlaqm0QGt+joRE9sKcnVUG3oBbr/KYdNE2TnkzdQwX6EDRdg/x8Q4EZQTXoClUqqA==", "cpu": [ "arm64" ], @@ -1581,9 +1553,9 @@ } }, "node_modules/@esbuild/linux-ia32": { - "version": "0.19.0", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.19.0.tgz", - "integrity": "sha512-dz2Q7+P92r1Evc8kEN+cQnB3qqPjmCrOZ+EdBTn8lEc1yN8WDgaDORQQiX+mxaijbH8npXBT9GxUqE52Gt6Y+g==", + "version": "0.19.4", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.19.4.tgz", + "integrity": "sha512-EGc4vYM7i1GRUIMqRZNCTzJh25MHePYsnQfKDexD8uPTCm9mK56NIL04LUfX2aaJ+C9vyEp2fJ7jbqFEYgO9lQ==", "cpu": [ "ia32" ], @@ -1597,9 +1569,9 @@ } }, "node_modules/@esbuild/linux-loong64": { - "version": "0.19.0", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.19.0.tgz", - "integrity": "sha512-IcVJovJVflih4oFahhUw+N7YgNbuMSVFNr38awb0LNzfaiIfdqIh518nOfYaNQU3aVfiJnOIRVJDSAP4k35WxA==", + "version": "0.19.4", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.19.4.tgz", + "integrity": "sha512-WVhIKO26kmm8lPmNrUikxSpXcgd6HDog0cx12BUfA2PkmURHSgx9G6vA19lrlQOMw+UjMZ+l3PpbtzffCxFDRg==", "cpu": [ "loong64" ], @@ -1613,9 +1585,9 @@ } }, "node_modules/@esbuild/linux-mips64el": { - "version": "0.19.0", - "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.19.0.tgz", - "integrity": "sha512-bZGRAGySMquWsKw0gIdsClwfvgbsSq/7oq5KVu1H1r9Il+WzOcfkV1hguntIuBjRVL8agI95i4AukjdAV2YpUw==", + "version": "0.19.4", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.19.4.tgz", + "integrity": "sha512-keYY+Hlj5w86hNp5JJPuZNbvW4jql7c1eXdBUHIJGTeN/+0QFutU3GrS+c27L+NTmzi73yhtojHk+lr2+502Mw==", "cpu": [ "mips64el" ], @@ -1629,9 +1601,9 @@ } }, "node_modules/@esbuild/linux-ppc64": { - "version": "0.19.0", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.19.0.tgz", - "integrity": "sha512-3LC6H5/gCDorxoRBUdpLV/m7UthYSdar0XcCu+ypycQxMS08MabZ06y1D1yZlDzL/BvOYliRNRWVG/YJJvQdbg==", + "version": "0.19.4", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.19.4.tgz", + "integrity": "sha512-tQ92n0WMXyEsCH4m32S21fND8VxNiVazUbU4IUGVXQpWiaAxOBvtOtbEt3cXIV3GEBydYsY8pyeRMJx9kn3rvw==", "cpu": [ "ppc64" ], @@ -1645,9 +1617,9 @@ } }, "node_modules/@esbuild/linux-riscv64": { - "version": "0.19.0", - "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.19.0.tgz", - "integrity": "sha512-jfvdKjWk+Cp2sgLtEEdSHXO7qckrw2B2eFBaoRdmfhThqZs29GMMg7q/LsQpybA7BxCLLEs4di5ucsWzZC5XPA==", + "version": "0.19.4", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.19.4.tgz", + "integrity": "sha512-tRRBey6fG9tqGH6V75xH3lFPpj9E8BH+N+zjSUCnFOX93kEzqS0WdyJHkta/mmJHn7MBaa++9P4ARiU4ykjhig==", "cpu": [ "riscv64" ], @@ -1661,9 +1633,9 @@ } }, "node_modules/@esbuild/linux-s390x": { - "version": "0.19.0", - "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.19.0.tgz", - "integrity": "sha512-ofcucfNLkoXmcnJaw9ugdEOf40AWKGt09WBFCkpor+vFJVvmk/8OPjl/qRtks2Z7BuZbG3ztJuK1zS9z5Cgx9A==", + "version": "0.19.4", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.19.4.tgz", + "integrity": "sha512-152aLpQqKZYhThiJ+uAM4PcuLCAOxDsCekIbnGzPKVBRUDlgaaAfaUl5NYkB1hgY6WN4sPkejxKlANgVcGl9Qg==", "cpu": [ "s390x" ], @@ -1677,9 +1649,9 @@ } }, "node_modules/@esbuild/linux-x64": { - "version": "0.19.0", - "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.19.0.tgz", - "integrity": "sha512-Fpf7zNDBti3xrQKQKLdXT0hTyOxgFdRJIMtNy8x1az9ATR9/GJ1brYbB/GLWoXhKiHsoWs+2DLkFVNNMTCLEwA==", + "version": "0.19.4", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.19.4.tgz", + "integrity": "sha512-Mi4aNA3rz1BNFtB7aGadMD0MavmzuuXNTaYL6/uiYIs08U7YMPETpgNn5oue3ICr+inKwItOwSsJDYkrE9ekVg==", "cpu": [ "x64" ], @@ -1693,9 +1665,9 @@ } }, "node_modules/@esbuild/netbsd-x64": { - "version": "0.19.0", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.19.0.tgz", - "integrity": "sha512-AMQAp/5oENgDOvVhvOlbhVe1pWii7oFAMRHlmTjSEMcpjTpIHtFXhv9uAFgUERHm3eYtNvS9Vf+gT55cwuI6Aw==", + "version": "0.19.4", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.19.4.tgz", + "integrity": "sha512-9+Wxx1i5N/CYo505CTT7T+ix4lVzEdz0uCoYGxM5JDVlP2YdDC1Bdz+Khv6IbqmisT0Si928eAxbmGkcbiuM/A==", "cpu": [ "x64" ], @@ -1709,9 +1681,9 @@ } }, "node_modules/@esbuild/openbsd-x64": { - "version": "0.19.0", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.19.0.tgz", - "integrity": "sha512-fDztEve1QUs3h/Dw2AUmBlWGkNQbhDoD05ppm5jKvzQv+HVuV13so7m5RYeiSMIC2XQy7PAjZh+afkxAnCRZxA==", + "version": "0.19.4", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.19.4.tgz", + "integrity": "sha512-MFsHleM5/rWRW9EivFssop+OulYVUoVcqkyOkjiynKBCGBj9Lihl7kh9IzrreDyXa4sNkquei5/DTP4uCk25xw==", "cpu": [ "x64" ], @@ -1725,9 +1697,9 @@ } }, "node_modules/@esbuild/sunos-x64": { - "version": "0.19.0", - "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.19.0.tgz", - "integrity": "sha512-bKZzJ2/rvUjDzA5Ddyva2tMk89WzNJEibZEaq+wY6SiqPlwgFbqyQLimouxLHiHh1itb5P3SNCIF1bc2bw5H9w==", + "version": "0.19.4", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.19.4.tgz", + "integrity": "sha512-6Xq8SpK46yLvrGxjp6HftkDwPP49puU4OF0hEL4dTxqCbfx09LyrbUj/D7tmIRMj5D5FCUPksBbxyQhp8tmHzw==", "cpu": [ "x64" ], @@ -1741,9 +1713,9 @@ } }, "node_modules/@esbuild/win32-arm64": { - "version": "0.19.0", - "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.19.0.tgz", - "integrity": "sha512-NQJ+4jmnA79saI+sE+QzcEls19uZkoEmdxo7r//PDOjIpX8pmoWtTnWg6XcbnO7o4fieyAwb5U2LvgWynF4diA==", + "version": "0.19.4", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.19.4.tgz", + "integrity": "sha512-PkIl7Jq4mP6ke7QKwyg4fD4Xvn8PXisagV/+HntWoDEdmerB2LTukRZg728Yd1Fj+LuEX75t/hKXE2Ppk8Hh1w==", "cpu": [ "arm64" ], @@ -1757,9 +1729,9 @@ } }, "node_modules/@esbuild/win32-ia32": { - "version": "0.19.0", - "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.19.0.tgz", - "integrity": "sha512-uyxiZAnsfu9diHm9/rIH2soecF/HWLXYUhJKW4q1+/LLmNQ+55lRjvSUDhUmsgJtSUscRJB/3S4RNiTb9o9mCg==", + "version": "0.19.4", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.19.4.tgz", + "integrity": "sha512-ga676Hnvw7/ycdKB53qPusvsKdwrWzEyJ+AtItHGoARszIqvjffTwaaW3b2L6l90i7MO9i+dlAW415INuRhSGg==", "cpu": [ "ia32" ], @@ -1773,9 +1745,9 @@ } }, "node_modules/@esbuild/win32-x64": { - "version": "0.19.0", - "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.19.0.tgz", - "integrity": "sha512-jl+NXUjK2StMgqnZnqgNjZuerFG8zQqWXMBZdMMv4W/aO1ZKQaYWZBxTrtWKphkCBVEMh0wMVfGgOd2BjOZqUQ==", + "version": "0.19.4", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.19.4.tgz", + "integrity": "sha512-HP0GDNla1T3ZL8Ko/SHAS2GgtjOg+VmWnnYLhuTksr++EnduYB0f3Y2LzHsUwb2iQ13JGoY6G3R8h6Du/WG6uA==", "cpu": [ "x64" ], @@ -1804,18 +1776,18 @@ } }, "node_modules/@eslint-community/regexpp": { - "version": "4.6.2", - "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.6.2.tgz", - "integrity": "sha512-pPTNuaAG3QMH+buKyBIGJs3g/S5y0caxw0ygM3YyE6yJFySwiGGSzA+mM3KJ8QQvzeLh3blwgSonkFjgQdxzMw==", + "version": "4.9.1", + "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.9.1.tgz", + "integrity": "sha512-Y27x+MBLjXa+0JWDhykM3+JE+il3kHKAEqabfEWq3SDhZjLYb6/BHL/JKFnH3fe207JaXkyDo685Oc2Glt6ifA==", "dev": true, "engines": { "node": "^12.0.0 || ^14.0.0 || >=16.0.0" } }, "node_modules/@eslint/eslintrc": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.1.tgz", - "integrity": "sha512-9t7ZA7NGGK8ckelF0PQCfcxIUzs1Md5rrO6U/c+FIQNanea5UZC0wqKXH4vHBccmu4ZJgZ2idtPeW7+Q2npOEA==", + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.2.tgz", + "integrity": "sha512-+wvgpDsrB1YqAMdEUCcnTlpfVBH7Vqn6A/NT3D8WVXFIaKMlErPIZT3oCIAVCOtarRpMtelZLqJeU3t7WY6X6g==", "dev": true, "dependencies": { "ajv": "^6.12.4", @@ -1835,6 +1807,22 @@ "url": "https://opencollective.com/eslint" } }, + "node_modules/@eslint/eslintrc/node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "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" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, "node_modules/@eslint/eslintrc/node_modules/argparse": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", @@ -1853,19 +1841,25 @@ "js-yaml": "bin/js-yaml.js" } }, + "node_modules/@eslint/eslintrc/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 + }, "node_modules/@eslint/js": { - "version": "8.46.0", - "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.46.0.tgz", - "integrity": "sha512-a8TLtmPi8xzPkCbp/OGFUo5yhRkHM2Ko9kOWP4znJr0WAhWyThaw3PnwX4vOTWOAMsV2uRt32PPDcEz63esSaA==", + "version": "8.50.0", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.50.0.tgz", + "integrity": "sha512-NCC3zz2+nvYd+Ckfh87rA47zfu2QsQpvc6k1yzTk+b9KzRj0wkGa8LSoGOXN6Zv4lRf/EIoZ80biDh9HOI+RNQ==", "dev": true, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" } }, "node_modules/@humanwhocodes/config-array": { - "version": "0.11.10", - "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.10.tgz", - "integrity": "sha512-KVVjQmNUepDVGXNuoRRdmmEjruj0KfiGSbS8LVc12LMsWDQzRXJ0qdhN8L8uUigKpfEHRhlaQFY0ib1tnUbNeQ==", + "version": "0.11.11", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.11.tgz", + "integrity": "sha512-N2brEuAadi0CcdeMXUkhbZB84eskAc8MEX1By6qEchoVywSgXPIjou4rYsl0V3Hj0ZnuGycGCjdNgockbzeWNA==", "dev": true, "dependencies": { "@humanwhocodes/object-schema": "^1.2.1", @@ -2063,16 +2057,16 @@ } }, "node_modules/@jest/console": { - "version": "29.6.2", - "resolved": "https://registry.npmjs.org/@jest/console/-/console-29.6.2.tgz", - "integrity": "sha512-0N0yZof5hi44HAR2pPS+ikJ3nzKNoZdVu8FffRf3wy47I7Dm7etk/3KetMdRUqzVd16V4O2m2ISpNTbnIuqy1w==", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/console/-/console-29.7.0.tgz", + "integrity": "sha512-5Ni4CU7XHQi32IJ398EEP4RrB8eV09sXP2ROqD4bksHrnTree52PsxvX8tpL8LvTZ3pFzXyPbNQReSN41CAhOg==", "dev": true, "dependencies": { - "@jest/types": "^29.6.1", + "@jest/types": "^29.6.3", "@types/node": "*", "chalk": "^4.0.0", - "jest-message-util": "^29.6.2", - "jest-util": "^29.6.2", + "jest-message-util": "^29.7.0", + "jest-util": "^29.7.0", "slash": "^3.0.0" }, "engines": { @@ -2150,37 +2144,37 @@ } }, "node_modules/@jest/core": { - "version": "29.6.2", - "resolved": "https://registry.npmjs.org/@jest/core/-/core-29.6.2.tgz", - "integrity": "sha512-Oj+5B+sDMiMWLhPFF+4/DvHOf+U10rgvCLGPHP8Xlsy/7QxS51aU/eBngudHlJXnaWD5EohAgJ4js+T6pa+zOg==", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/core/-/core-29.7.0.tgz", + "integrity": "sha512-n7aeXWKMnGtDA48y8TLWJPJmLmmZ642Ceo78cYWEpiD7FzDgmNDV/GCVRorPABdXLJZ/9wzzgZAlHjXjxDHGsg==", "dev": true, "dependencies": { - "@jest/console": "^29.6.2", - "@jest/reporters": "^29.6.2", - "@jest/test-result": "^29.6.2", - "@jest/transform": "^29.6.2", - "@jest/types": "^29.6.1", + "@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.5.0", - "jest-config": "^29.6.2", - "jest-haste-map": "^29.6.2", - "jest-message-util": "^29.6.2", - "jest-regex-util": "^29.4.3", - "jest-resolve": "^29.6.2", - "jest-resolve-dependencies": "^29.6.2", - "jest-runner": "^29.6.2", - "jest-runtime": "^29.6.2", - "jest-snapshot": "^29.6.2", - "jest-util": "^29.6.2", - "jest-validate": "^29.6.2", - "jest-watcher": "^29.6.2", + "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.6.2", + "pretty-format": "^29.7.0", "slash": "^3.0.0", "strip-ansi": "^6.0.0" }, @@ -2267,88 +2261,88 @@ } }, "node_modules/@jest/environment": { - "version": "29.6.2", - "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-29.6.2.tgz", - "integrity": "sha512-AEcW43C7huGd/vogTddNNTDRpO6vQ2zaQNrttvWV18ArBx9Z56h7BIsXkNFJVOO4/kblWEQz30ckw0+L3izc+Q==", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-29.7.0.tgz", + "integrity": "sha512-aQIfHDq33ExsN4jP1NWGXhxgQ/wixs60gDiKO+XVMd8Mn0NWPWgc34ZQDTb2jKaUWQ7MuwoitXAsN2XVXNMpAw==", "dev": true, "dependencies": { - "@jest/fake-timers": "^29.6.2", - "@jest/types": "^29.6.1", + "@jest/fake-timers": "^29.7.0", + "@jest/types": "^29.6.3", "@types/node": "*", - "jest-mock": "^29.6.2" + "jest-mock": "^29.7.0" }, "engines": { "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, "node_modules/@jest/expect": { - "version": "29.6.2", - "resolved": "https://registry.npmjs.org/@jest/expect/-/expect-29.6.2.tgz", - "integrity": "sha512-m6DrEJxVKjkELTVAztTLyS/7C92Y2b0VYqmDROYKLLALHn8T/04yPs70NADUYPrV3ruI+H3J0iUIuhkjp7vkfg==", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/expect/-/expect-29.7.0.tgz", + "integrity": "sha512-8uMeAMycttpva3P1lBHB8VciS9V0XAr3GymPpipdyQXbBcuhkLQOSe8E/p92RyAdToS6ZD1tFkX+CkhoECE0dQ==", "dev": true, "dependencies": { - "expect": "^29.6.2", - "jest-snapshot": "^29.6.2" + "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.6.2", - "resolved": "https://registry.npmjs.org/@jest/expect-utils/-/expect-utils-29.6.2.tgz", - "integrity": "sha512-6zIhM8go3RV2IG4aIZaZbxwpOzz3ZiM23oxAlkquOIole+G6TrbeXnykxWYlqF7kz2HlBjdKtca20x9atkEQYg==", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/expect-utils/-/expect-utils-29.7.0.tgz", + "integrity": "sha512-GlsNBWiFQFCVi9QVSx7f5AgMeLxe9YCCs5PuP2O2LdjDAA8Jh9eX7lA1Jq/xdXw3Wb3hyvlFNfZIfcRetSzYcA==", "dev": true, "dependencies": { - "jest-get-type": "^29.4.3" + "jest-get-type": "^29.6.3" }, "engines": { "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, "node_modules/@jest/fake-timers": { - "version": "29.6.2", - "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-29.6.2.tgz", - "integrity": "sha512-euZDmIlWjm1Z0lJ1D0f7a0/y5Kh/koLFMUBE5SUYWrmy8oNhJpbTBDAP6CxKnadcMLDoDf4waRYCe35cH6G6PA==", + "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, "dependencies": { - "@jest/types": "^29.6.1", + "@jest/types": "^29.6.3", "@sinonjs/fake-timers": "^10.0.2", "@types/node": "*", - "jest-message-util": "^29.6.2", - "jest-mock": "^29.6.2", - "jest-util": "^29.6.2" + "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.6.2", - "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-29.6.2.tgz", - "integrity": "sha512-cjuJmNDjs6aMijCmSa1g2TNG4Lby/AeU7/02VtpW+SLcZXzOLK2GpN2nLqcFjmhy3B3AoPeQVx7BnyOf681bAw==", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-29.7.0.tgz", + "integrity": "sha512-mpiz3dutLbkW2MNFubUGUEVLkTGiqW6yLVTA+JbP6fI6J5iL9Y0Nlg8k95pcF8ctKwCS7WVxteBs29hhfAotzQ==", "dev": true, "dependencies": { - "@jest/environment": "^29.6.2", - "@jest/expect": "^29.6.2", - "@jest/types": "^29.6.1", - "jest-mock": "^29.6.2" + "@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.6.2", - "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-29.6.2.tgz", - "integrity": "sha512-sWtijrvIav8LgfJZlrGCdN0nP2EWbakglJY49J1Y5QihcQLfy7ovyxxjJBRXMNltgt4uPtEcFmIMbVshEDfFWw==", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-29.7.0.tgz", + "integrity": "sha512-DApq0KJbJOEzAFYjHADNNxAE3KbhxQB1y5Kplb5Waqw6zVbuWatSnMjE5gs8FUgEPmNsnZA3NCWl9NG0ia04Pg==", "dev": true, "dependencies": { "@bcoe/v8-coverage": "^0.2.3", - "@jest/console": "^29.6.2", - "@jest/test-result": "^29.6.2", - "@jest/transform": "^29.6.2", - "@jest/types": "^29.6.1", + "@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", @@ -2357,13 +2351,13 @@ "glob": "^7.1.3", "graceful-fs": "^4.2.9", "istanbul-lib-coverage": "^3.0.0", - "istanbul-lib-instrument": "^5.1.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.6.2", - "jest-util": "^29.6.2", - "jest-worker": "^29.6.2", + "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", @@ -2452,9 +2446,9 @@ } }, "node_modules/@jest/schemas": { - "version": "29.6.0", - "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-29.6.0.tgz", - "integrity": "sha512-rxLjXyJBTL4LQeJW3aKo0M/+GkCOXsO+8i9Iu7eDb6KwtP65ayoDsitrdPBtujxQ88k4wI2FNYfa6TOGwSn6cQ==", + "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, "dependencies": { "@sinclair/typebox": "^0.27.8" @@ -2464,9 +2458,9 @@ } }, "node_modules/@jest/source-map": { - "version": "29.6.0", - "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-29.6.0.tgz", - "integrity": "sha512-oA+I2SHHQGxDCZpbrsCQSoMLb3Bz547JnM+jUr9qEbuw0vQlWZfpPS7CO9J7XiwKicEz9OFn/IYoLkkiUD7bzA==", + "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, "dependencies": { "@jridgewell/trace-mapping": "^0.3.18", @@ -2478,13 +2472,13 @@ } }, "node_modules/@jest/test-result": { - "version": "29.6.2", - "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-29.6.2.tgz", - "integrity": "sha512-3VKFXzcV42EYhMCsJQURptSqnyjqCGbtLuX5Xxb6Pm6gUf1wIRIl+mandIRGJyWKgNKYF9cnstti6Ls5ekduqw==", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-29.7.0.tgz", + "integrity": "sha512-Fdx+tv6x1zlkJPcWXmMDAG2HBnaR9XPSd5aDWQVsfrZmLVT3lU1cwyxLgRmXR9yrq4NBoEm9BMsfgFzTQAbJYA==", "dev": true, "dependencies": { - "@jest/console": "^29.6.2", - "@jest/types": "^29.6.1", + "@jest/console": "^29.7.0", + "@jest/types": "^29.6.3", "@types/istanbul-lib-coverage": "^2.0.0", "collect-v8-coverage": "^1.0.0" }, @@ -2493,14 +2487,14 @@ } }, "node_modules/@jest/test-sequencer": { - "version": "29.6.2", - "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-29.6.2.tgz", - "integrity": "sha512-GVYi6PfPwVejO7slw6IDO0qKVum5jtrJ3KoLGbgBWyr2qr4GaxFV6su+ZAjdTX75Sr1DkMFRk09r2ZVa+wtCGw==", + "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, "dependencies": { - "@jest/test-result": "^29.6.2", + "@jest/test-result": "^29.7.0", "graceful-fs": "^4.2.9", - "jest-haste-map": "^29.6.2", + "jest-haste-map": "^29.7.0", "slash": "^3.0.0" }, "engines": { @@ -2508,22 +2502,22 @@ } }, "node_modules/@jest/transform": { - "version": "29.6.2", - "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-29.6.2.tgz", - "integrity": "sha512-ZqCqEISr58Ce3U+buNFJYUktLJZOggfyvR+bZMaiV1e8B1SIvJbwZMrYz3gx/KAPn9EXmOmN+uB08yLCjWkQQg==", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-29.7.0.tgz", + "integrity": "sha512-ok/BTPFzFKVMwO5eOHRrvnBVHdRy9IrsrW1GpMaQ9MCnilNLXQKmAX8s1YXDFaai9xJpac2ySzV0YeRRECr2Vw==", "dev": true, "dependencies": { "@babel/core": "^7.11.6", - "@jest/types": "^29.6.1", + "@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.6.2", - "jest-regex-util": "^29.4.3", - "jest-util": "^29.6.2", + "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", @@ -2604,12 +2598,12 @@ } }, "node_modules/@jest/types": { - "version": "29.6.1", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.6.1.tgz", - "integrity": "sha512-tPKQNMPuXgvdOn2/Lg9HNfUvjYVGolt04Hp03f5hAk878uwOLikN+JzeLY0HcVgKgFl9Hs3EIqpu3WX27XNhnw==", + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.6.3.tgz", + "integrity": "sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==", "dev": true, "dependencies": { - "@jest/schemas": "^29.6.0", + "@jest/schemas": "^29.6.3", "@types/istanbul-lib-coverage": "^2.0.0", "@types/istanbul-reports": "^3.0.0", "@types/node": "*", @@ -2749,9 +2743,9 @@ } }, "node_modules/@lerna/child-process": { - "version": "7.1.5", - "resolved": "https://registry.npmjs.org/@lerna/child-process/-/child-process-7.1.5.tgz", - "integrity": "sha512-YXmxzxXTP3u9HQpSXvK8qqoAm7VWQIFria3FVMQKkOSkWkph1TNnvt3Q1JvKT7/Jgd1HfTc3QrK09a2FND9+8A==", + "version": "7.3.0", + "resolved": "https://registry.npmjs.org/@lerna/child-process/-/child-process-7.3.0.tgz", + "integrity": "sha512-rA+fGUo2j/LEq6w1w8s6oVikLbJTWoIDVpYMc7bUCtwDOUuZKMQiRtjmpavY3fTm7ltu42f4AKflc2A70K4wvA==", "dev": true, "dependencies": { "chalk": "^4.1.0", @@ -2833,12 +2827,12 @@ } }, "node_modules/@lerna/create": { - "version": "7.1.5", - "resolved": "https://registry.npmjs.org/@lerna/create/-/create-7.1.5.tgz", - "integrity": "sha512-/CDI/cvXJbycgSDzWXzP7DBuJ10qL/uYEouFt3/mxi9+hSfM885fu6lbVPV7QOf8A0otXcTs7PN2dVyMrnWQeg==", + "version": "7.3.0", + "resolved": "https://registry.npmjs.org/@lerna/create/-/create-7.3.0.tgz", + "integrity": "sha512-fjgiKjg9VXwQ4ZKKsrXICEKRiC3yo6+FprR0mc55uz0s5e9xupoSGLobUTTBdE7ncNB3ibqml8dfaAn/+ESajQ==", "dev": true, "dependencies": { - "@lerna/child-process": "7.1.5", + "@lerna/child-process": "7.3.0", "@npmcli/run-script": "6.0.2", "@nx/devkit": ">=16.5.1 < 17", "@octokit/plugin-enterprise-rest": "6.0.1", @@ -2863,12 +2857,13 @@ "ini": "^1.3.8", "init-package-json": "5.0.0", "inquirer": "^8.2.4", + "is-ci": "3.0.1", "is-stream": "2.0.0", "js-yaml": "4.1.0", "libnpmpublish": "7.3.0", "load-json-file": "6.2.0", "lodash": "^4.17.21", - "make-dir": "3.1.0", + "make-dir": "4.0.0", "minimatch": "3.0.5", "multimatch": "5.0.0", "node-fetch": "2.6.7", @@ -2944,6 +2939,34 @@ "url": "https://github.com/chalk/chalk?sponsor=1" } }, + "node_modules/@lerna/create/node_modules/cliui": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", + "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", + "dev": true, + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^7.0.0" + } + }, + "node_modules/@lerna/create/node_modules/cliui/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, + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, "node_modules/@lerna/create/node_modules/color-convert": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", @@ -3155,30 +3178,6 @@ "graceful-fs": "^4.1.6" } }, - "node_modules/@lerna/create/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==", - "dev": true, - "dependencies": { - "semver": "^6.0.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@lerna/create/node_modules/make-dir/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/@lerna/create/node_modules/minimatch": { "version": "3.0.5", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.5.tgz", @@ -3269,10 +3268,14 @@ } }, "node_modules/@lerna/create/node_modules/uuid": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.0.tgz", - "integrity": "sha512-MXcSTerfPa4uqyzStbRoTgt5XIe3x5+42+q1sDuy3R5MDk66URdLMOZe5aPX/SQd+kuYAh0FdP/pO28IkQyTeg==", + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.1.tgz", + "integrity": "sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==", "dev": true, + "funding": [ + "https://github.com/sponsors/broofa", + "https://github.com/sponsors/ctavan" + ], "bin": { "uuid": "dist/bin/uuid" } @@ -3676,21 +3679,21 @@ } }, "node_modules/@nrwl/devkit": { - "version": "16.6.0", - "resolved": "https://registry.npmjs.org/@nrwl/devkit/-/devkit-16.6.0.tgz", - "integrity": "sha512-xZEN6wfA1uJwv+FVRQFOHsCcpvGvIYGx2zutbzungDodWkfzlJ3tzIGqYjIpPCBVT83erM6Gscnka2W46AuKfA==", + "version": "16.10.0", + "resolved": "https://registry.npmjs.org/@nrwl/devkit/-/devkit-16.10.0.tgz", + "integrity": "sha512-fRloARtsDQoQgQ7HKEy0RJiusg/HSygnmg4gX/0n/Z+SUS+4KoZzvHjXc6T5ZdEiSjvLypJ+HBM8dQzIcVACPQ==", "dev": true, "dependencies": { - "@nx/devkit": "16.6.0" + "@nx/devkit": "16.10.0" } }, "node_modules/@nrwl/tao": { - "version": "16.6.0", - "resolved": "https://registry.npmjs.org/@nrwl/tao/-/tao-16.6.0.tgz", - "integrity": "sha512-NQkDhmzlR1wMuYzzpl4XrKTYgyIzELdJ+dVrNKf4+p4z5WwKGucgRBj60xMQ3kdV25IX95/fmMDB8qVp/pNQ0Q==", + "version": "16.10.0", + "resolved": "https://registry.npmjs.org/@nrwl/tao/-/tao-16.10.0.tgz", + "integrity": "sha512-QNAanpINbr+Pod6e1xNgFbzK1x5wmZl+jMocgiEFXZ67KHvmbD6MAQQr0MMz+GPhIu7EE4QCTLTyCEMlAG+K5Q==", "dev": true, "dependencies": { - "nx": "16.6.0", + "nx": "16.10.0", "tslib": "^2.3.0" }, "bin": { @@ -3698,13 +3701,14 @@ } }, "node_modules/@nx/devkit": { - "version": "16.6.0", - "resolved": "https://registry.npmjs.org/@nx/devkit/-/devkit-16.6.0.tgz", - "integrity": "sha512-rhJ0y+MSPHDuoZPxsOYdj/n5ks+gK74TIMgTb8eZgPT/uR86a4oxf62wUQXgECedR5HzLE2HunbnoLhhJXmpJw==", + "version": "16.10.0", + "resolved": "https://registry.npmjs.org/@nx/devkit/-/devkit-16.10.0.tgz", + "integrity": "sha512-IvKQqRJFDDiaj33SPfGd3ckNHhHi6ceEoqCbAP4UuMXOPPVOX6H0KVk+9tknkPb48B7jWIw6/AgOeWkBxPRO5w==", "dev": true, "dependencies": { - "@nrwl/devkit": "16.6.0", + "@nrwl/devkit": "16.10.0", "ejs": "^3.1.7", + "enquirer": "~2.3.6", "ignore": "^5.0.4", "semver": "7.5.3", "tmp": "~0.2.1", @@ -3714,6 +3718,18 @@ "nx": ">= 15 <= 17" } }, + "node_modules/@nx/devkit/node_modules/enquirer": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.3.6.tgz", + "integrity": "sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==", + "dev": true, + "dependencies": { + "ansi-colors": "^4.1.1" + }, + "engines": { + "node": ">=8.6" + } + }, "node_modules/@nx/devkit/node_modules/lru-cache": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", @@ -3775,9 +3791,9 @@ "dev": true }, "node_modules/@nx/nx-darwin-arm64": { - "version": "16.6.0", - "resolved": "https://registry.npmjs.org/@nx/nx-darwin-arm64/-/nx-darwin-arm64-16.6.0.tgz", - "integrity": "sha512-8nJuqcWG/Ob39rebgPLpv2h/V46b9Rqqm/AGH+bYV9fNJpxgMXclyincbMIWvfYN2tW+Vb9DusiTxV6RPrLapA==", + "version": "16.10.0", + "resolved": "https://registry.npmjs.org/@nx/nx-darwin-arm64/-/nx-darwin-arm64-16.10.0.tgz", + "integrity": "sha512-YF+MIpeuwFkyvM5OwgY/rTNRpgVAI/YiR0yTYCZR+X3AAvP775IVlusNgQ3oedTBRUzyRnI4Tknj1WniENFsvQ==", "cpu": [ "arm64" ], @@ -3791,9 +3807,9 @@ } }, "node_modules/@nx/nx-darwin-x64": { - "version": "16.6.0", - "resolved": "https://registry.npmjs.org/@nx/nx-darwin-x64/-/nx-darwin-x64-16.6.0.tgz", - "integrity": "sha512-T4DV0/2PkPZjzjmsmQEyjPDNBEKc4Rhf7mbIZlsHXj27BPoeNjEcbjtXKuOZHZDIpGFYECGT/sAF6C2NVYgmxw==", + "version": "16.10.0", + "resolved": "https://registry.npmjs.org/@nx/nx-darwin-x64/-/nx-darwin-x64-16.10.0.tgz", + "integrity": "sha512-ypi6YxwXgb0kg2ixKXE3pwf5myVNUgWf1CsV5OzVccCM8NzheMO51KDXTDmEpXdzUsfT0AkO1sk5GZeCjhVONg==", "cpu": [ "x64" ], @@ -3807,9 +3823,9 @@ } }, "node_modules/@nx/nx-freebsd-x64": { - "version": "16.6.0", - "resolved": "https://registry.npmjs.org/@nx/nx-freebsd-x64/-/nx-freebsd-x64-16.6.0.tgz", - "integrity": "sha512-Ck/yejYgp65dH9pbExKN/X0m22+xS3rWF1DBr2LkP6j1zJaweRc3dT83BWgt5mCjmcmZVk3J8N01AxULAzUAqA==", + "version": "16.10.0", + "resolved": "https://registry.npmjs.org/@nx/nx-freebsd-x64/-/nx-freebsd-x64-16.10.0.tgz", + "integrity": "sha512-UeEYFDmdbbDkTQamqvtU8ibgu5jQLgFF1ruNb/U4Ywvwutw2d4ruOMl2e0u9hiNja9NFFAnDbvzrDcMo7jYqYw==", "cpu": [ "x64" ], @@ -3823,9 +3839,9 @@ } }, "node_modules/@nx/nx-linux-arm-gnueabihf": { - "version": "16.6.0", - "resolved": "https://registry.npmjs.org/@nx/nx-linux-arm-gnueabihf/-/nx-linux-arm-gnueabihf-16.6.0.tgz", - "integrity": "sha512-eyk/R1mBQ3X0PCSS+Cck3onvr3wmZVmM/+x0x9Ai02Vm6q9Eq6oZ1YtZGQsklNIyw1vk2WV9rJCStfu9mLecEw==", + "version": "16.10.0", + "resolved": "https://registry.npmjs.org/@nx/nx-linux-arm-gnueabihf/-/nx-linux-arm-gnueabihf-16.10.0.tgz", + "integrity": "sha512-WV3XUC2DB6/+bz1sx+d1Ai9q2Cdr+kTZRN50SOkfmZUQyEBaF6DRYpx/a4ahhxH3ktpNfyY8Maa9OEYxGCBkQA==", "cpu": [ "arm" ], @@ -3839,9 +3855,9 @@ } }, "node_modules/@nx/nx-linux-arm64-gnu": { - "version": "16.6.0", - "resolved": "https://registry.npmjs.org/@nx/nx-linux-arm64-gnu/-/nx-linux-arm64-gnu-16.6.0.tgz", - "integrity": "sha512-S0qFFdQFDmBIEZqBAJl4K47V3YuMvDvthbYE0enXrXApWgDApmhtxINXSOjSus7DNq9kMrgtSDGkBmoBot61iw==", + "version": "16.10.0", + "resolved": "https://registry.npmjs.org/@nx/nx-linux-arm64-gnu/-/nx-linux-arm64-gnu-16.10.0.tgz", + "integrity": "sha512-aWIkOUw995V3ItfpAi5FuxQ+1e9EWLS1cjWM1jmeuo+5WtaKToJn5itgQOkvSlPz+HSLgM3VfXMvOFALNk125g==", "cpu": [ "arm64" ], @@ -3855,9 +3871,9 @@ } }, "node_modules/@nx/nx-linux-arm64-musl": { - "version": "16.6.0", - "resolved": "https://registry.npmjs.org/@nx/nx-linux-arm64-musl/-/nx-linux-arm64-musl-16.6.0.tgz", - "integrity": "sha512-TXWY5VYtg2wX/LWxyrUkDVpqCyJHF7fWoVMUSlFe+XQnk9wp/yIbq2s0k3h8I4biYb6AgtcVqbR4ID86lSNuMA==", + "version": "16.10.0", + "resolved": "https://registry.npmjs.org/@nx/nx-linux-arm64-musl/-/nx-linux-arm64-musl-16.10.0.tgz", + "integrity": "sha512-uO6Gg+irqpVcCKMcEPIQcTFZ+tDI02AZkqkP7koQAjniLEappd8DnUBSQdcn53T086pHpdc264X/ZEpXFfrKWQ==", "cpu": [ "arm64" ], @@ -3871,9 +3887,9 @@ } }, "node_modules/@nx/nx-linux-x64-gnu": { - "version": "16.6.0", - "resolved": "https://registry.npmjs.org/@nx/nx-linux-x64-gnu/-/nx-linux-x64-gnu-16.6.0.tgz", - "integrity": "sha512-qQIpSVN8Ij4oOJ5v+U+YztWJ3YQkeCIevr4RdCE9rDilfq9RmBD94L4VDm7NRzYBuQL8uQxqWzGqb7ZW4mfHpw==", + "version": "16.10.0", + "resolved": "https://registry.npmjs.org/@nx/nx-linux-x64-gnu/-/nx-linux-x64-gnu-16.10.0.tgz", + "integrity": "sha512-134PW/u/arNFAQKpqMJniC7irbChMPz+W+qtyKPAUXE0XFKPa7c1GtlI/wK2dvP9qJDZ6bKf0KtA0U/m2HMUOA==", "cpu": [ "x64" ], @@ -3887,9 +3903,9 @@ } }, "node_modules/@nx/nx-linux-x64-musl": { - "version": "16.6.0", - "resolved": "https://registry.npmjs.org/@nx/nx-linux-x64-musl/-/nx-linux-x64-musl-16.6.0.tgz", - "integrity": "sha512-EYOHe11lfVfEfZqSAIa1c39mx2Obr4mqd36dBZx+0UKhjrcmWiOdsIVYMQSb3n0TqB33BprjI4p9ZcFSDuoNbA==", + "version": "16.10.0", + "resolved": "https://registry.npmjs.org/@nx/nx-linux-x64-musl/-/nx-linux-x64-musl-16.10.0.tgz", + "integrity": "sha512-q8sINYLdIJxK/iUx9vRk5jWAWb/2O0PAbOJFwv4qkxBv4rLoN7y+otgCZ5v0xfx/zztFgk/oNY4lg5xYjIso2Q==", "cpu": [ "x64" ], @@ -3903,9 +3919,9 @@ } }, "node_modules/@nx/nx-win32-arm64-msvc": { - "version": "16.6.0", - "resolved": "https://registry.npmjs.org/@nx/nx-win32-arm64-msvc/-/nx-win32-arm64-msvc-16.6.0.tgz", - "integrity": "sha512-f1BmuirOrsAGh5+h/utkAWNuqgohvBoekQgMxYcyJxSkFN+pxNG1U68P59Cidn0h9mkyonxGVCBvWwJa3svVFA==", + "version": "16.10.0", + "resolved": "https://registry.npmjs.org/@nx/nx-win32-arm64-msvc/-/nx-win32-arm64-msvc-16.10.0.tgz", + "integrity": "sha512-moJkL9kcqxUdJSRpG7dET3UeLIciwrfP08mzBQ12ewo8K8FzxU8ZUsTIVVdNrwt01CXOdXoweGfdQLjJ4qTURA==", "cpu": [ "arm64" ], @@ -3919,9 +3935,9 @@ } }, "node_modules/@nx/nx-win32-x64-msvc": { - "version": "16.6.0", - "resolved": "https://registry.npmjs.org/@nx/nx-win32-x64-msvc/-/nx-win32-x64-msvc-16.6.0.tgz", - "integrity": "sha512-UmTTjFLpv4poVZE3RdUHianU8/O9zZYBiAnTRq5spwSDwxJHnLTZBUxFFf3ztCxeHOUIfSyW9utpGfCMCptzvQ==", + "version": "16.10.0", + "resolved": "https://registry.npmjs.org/@nx/nx-win32-x64-msvc/-/nx-win32-x64-msvc-16.10.0.tgz", + "integrity": "sha512-5iV2NKZnzxJwZZ4DM5JVbRG/nkhAbzEskKaLBB82PmYGKzaDHuMHP1lcPoD/rtYMlowZgNA/RQndfKvPBPwmXA==", "cpu": [ "x64" ], @@ -3990,9 +4006,9 @@ } }, "node_modules/@octokit/openapi-types": { - "version": "18.0.0", - "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-18.0.0.tgz", - "integrity": "sha512-V8GImKs3TeQRxRtXFpG2wl19V7444NIOTDF24AWuIbmNaNYOQMWRbjcGDXV5B+0n887fgDcuMNOmlul+k+oJtw==", + "version": "18.1.1", + "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-18.1.1.tgz", + "integrity": "sha512-VRaeH8nCDtF5aXWnjPuEMIYf1itK/s3JYyJcWFJT8X9pSNnBtriDf7wlEWsGuhPLl4QIH4xM8fqTXDwJ3Mu6sw==", "dev": true }, "node_modules/@octokit/plugin-enterprise-rest": { @@ -4229,21 +4245,18 @@ } }, "node_modules/@polka/url": { - "version": "1.0.0-next.21", - "resolved": "https://registry.npmjs.org/@polka/url/-/url-1.0.0-next.21.tgz", - "integrity": "sha512-a5Sab1C4/icpTZVzZc5Ghpz88yQtGOyNqYXcZgOssB2uuAr+wF/MvN6bgtW32q7HHrvBki+BsZ0OuNv6EV3K9g==", + "version": "1.0.0-next.23", + "resolved": "https://registry.npmjs.org/@polka/url/-/url-1.0.0-next.23.tgz", + "integrity": "sha512-C16M+IYz0rgRhWZdCmK+h58JMv8vijAA61gmz2rspCSwKwzBebpdcsiUmwrtJRdphuY30i6BSLEOP8ppbNLyLg==", "dev": true }, "node_modules/@scure/base": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@scure/base/-/base-1.1.1.tgz", - "integrity": "sha512-ZxOhsSyxYwLJj3pLZCefNitxsj093tb2vq90mp2txoYeBqbcjDjqFhyM8eUjq/uFm6zJ+mUuqxlS2FkuSY1MTA==", - "funding": [ - { - "type": "individual", - "url": "https://paulmillr.com/funding/" - } - ] + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/@scure/base/-/base-1.1.3.tgz", + "integrity": "sha512-/+SgoRjLq7Xlf0CWuLHq2LUZeL/w65kfzAPG5NH9pcmBhs+nunQTn4gvdwgMTIXnt9b2C/1SeL2XiysZEyIC9Q==", + "funding": { + "url": "https://paulmillr.com/funding/" + } }, "node_modules/@scure/bip32": { "version": "1.1.3", @@ -4301,18 +4314,10 @@ "url": "https://paulmillr.com/funding/" } }, - "node_modules/@scure/btc-signer/node_modules/@scure/base": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/@scure/base/-/base-1.1.3.tgz", - "integrity": "sha512-/+SgoRjLq7Xlf0CWuLHq2LUZeL/w65kfzAPG5NH9pcmBhs+nunQTn4gvdwgMTIXnt9b2C/1SeL2XiysZEyIC9Q==", - "funding": { - "url": "https://paulmillr.com/funding/" - } - }, "node_modules/@sigstore/bundle": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@sigstore/bundle/-/bundle-1.0.0.tgz", - "integrity": "sha512-yLvrWDOh6uMOUlFCTJIZEnwOT9Xte7NPXUqVexEKGSF5XtBAuSg5du0kn3dRR0p47a4ah10Y0mNt8+uyeQXrBQ==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@sigstore/bundle/-/bundle-1.1.0.tgz", + "integrity": "sha512-PFutXEy0SmQxYI4texPw3dd2KewuNqv7OuK1ZFtY2fM754yhvG2KdgwIhRnoEE2uHdtdGNQ8s0lb94dW9sELog==", "dev": true, "dependencies": { "@sigstore/protobuf-specs": "^0.2.0" @@ -4322,10 +4327,24 @@ } }, "node_modules/@sigstore/protobuf-specs": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/@sigstore/protobuf-specs/-/protobuf-specs-0.2.0.tgz", - "integrity": "sha512-8ZhZKAVfXjIspDWwm3D3Kvj0ddbJ0HqDZ/pOs5cx88HpT8mVsotFrg7H1UMnXOuDHz6Zykwxn4mxG3QLuN+RUg==", + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/@sigstore/protobuf-specs/-/protobuf-specs-0.2.1.tgz", + "integrity": "sha512-XTWVxnWJu+c1oCshMLwnKvz8ZQJJDVOlciMfgpJBQbThVjKTCG8dwyhgLngBD2KN0ap9F/gOV8rFDEx8uh7R2A==", + "dev": true, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/@sigstore/sign": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@sigstore/sign/-/sign-1.0.0.tgz", + "integrity": "sha512-INxFVNQteLtcfGmcoldzV6Je0sbbfh9I16DM4yJPw3j5+TFP8X6uIiA18mvpEa9yyeycAKgPmOA3X9hVdVTPUA==", "dev": true, + "dependencies": { + "@sigstore/bundle": "^1.1.0", + "@sigstore/protobuf-specs": "^0.2.0", + "make-fetch-happen": "^11.0.1" + }, "engines": { "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } @@ -4467,9 +4486,9 @@ "link": true }, "node_modules/@stacks/stacks-blockchain-api-types": { - "version": "7.3.0", - "resolved": "https://registry.npmjs.org/@stacks/stacks-blockchain-api-types/-/stacks-blockchain-api-types-7.3.0.tgz", - "integrity": "sha512-kpv9UlOmgTdWjzBdv8WYpYLpR0A9shl7pAae25iP0RqtNKE0FZti/I3k7zkXxpxoNTVjb9ys9iEf0AFtfhSmPQ==" + "version": "7.3.2", + "resolved": "https://registry.npmjs.org/@stacks/stacks-blockchain-api-types/-/stacks-blockchain-api-types-7.3.2.tgz", + "integrity": "sha512-1r0+eqEWOOo7UYrFq9HGbc02DVME3NVCW/45sNKPN31PkOMMaK59DHragPJ2QbxPFiutVDUCS924+48+o3+0Tw==" }, "node_modules/@stacks/storage": { "resolved": "packages/storage", @@ -4563,9 +4582,9 @@ } }, "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.2", + "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.2.tgz", + "integrity": "sha512-pNpr1T1xLUc2l3xJKuPtsEky3ybxN3m4fJkknfIpTCTfIZCDW57oAg+EfCgIIp2rvCe0Wn++/FfodDS4YXxBwA==", "dev": true, "dependencies": { "@babel/parser": "^7.20.7", @@ -4576,18 +4595,18 @@ } }, "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.6.5", + "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.5.tgz", + "integrity": "sha512-h9yIuWbJKdOPLJTbmSpPzkF67e659PbQDba7ifWm5BJ8xTv+sDmS7rFmywkWOvXedGTivCdeGSIIX8WLcRTz8w==", "dev": true, "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.2", + "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.2.tgz", + "integrity": "sha512-/AVzPICMhMOMYoSx9MoKpGDKdBRsIXMNByh1PXSZoa+v6ZoLa8xxtsT/uLQ/NJm0XVAWl/BvId4MlDeXJaeIZQ==", "dev": true, "dependencies": { "@babel/parser": "^7.1.0", @@ -4595,26 +4614,26 @@ } }, "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.20.2", + "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.20.2.tgz", + "integrity": "sha512-ojlGK1Hsfce93J0+kn3H5R73elidKUaZonirN33GSmgTUMpzI/MIFfSpF3haANe3G1bEBS9/9/QEqwTzwqFsKw==", "dev": true, "dependencies": { "@babel/types": "^7.20.7" } }, "node_modules/@types/bn.js": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/@types/bn.js/-/bn.js-5.1.1.tgz", - "integrity": "sha512-qNrYbZqMx0uJAfKnKclPh+dTwK33KfLHYqtyODwd5HnXOjnkhc4qgn3BrK6RWyGZm5+sIFE7Q7Vz6QQtJB7w7g==", + "version": "4.11.6", + "resolved": "https://registry.npmjs.org/@types/bn.js/-/bn.js-4.11.6.tgz", + "integrity": "sha512-pqr857jrp2kPuO9uRjZ3PwnJTjoQy+fcdxvBTvHm6dkmEL9q+hDD/2j/0ELOBPtPnS8LjCX0gI9nbl8lVkadpg==", "dependencies": { "@types/node": "*" } }, "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.3", + "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.3.tgz", + "integrity": "sha512-oyl4jvAfTGX9Bt6Or4H9ni1Z447/tQuxnZsytsCaExKlmJiU8sFgnIBRzJUpKwB5eWn9HuBYlUlVA74q/yN0eQ==", "dev": true, "dependencies": { "@types/connect": "*", @@ -4646,41 +4665,41 @@ } }, "node_modules/@types/common-tags": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/@types/common-tags/-/common-tags-1.8.1.tgz", - "integrity": "sha512-20R/mDpKSPWdJs5TOpz3e7zqbeCNuMCPhV7Yndk9KU2Rbij2r5W4RzwDPkzC+2lzUqXYu9rFzTktCBnDjHuNQg==", + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/@types/common-tags/-/common-tags-1.8.2.tgz", + "integrity": "sha512-Z5UcOnlqxFm0tCCTEhkcVOfSihWOMyKypIWHtQNSYh6fMdPUIVpNdLBYutDpDXVHsMUrYzI2IczUHXIzpUovmQ==", "dev": true }, "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.36", + "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.36.tgz", + "integrity": "sha512-P63Zd/JUGq+PdrM1lv0Wv5SBYeA2+CORvbrXbngriYY0jzLUWfQMQQxOhjONEz/wlHOAxOdY7CY65rgQdTjq2w==", "dev": true, "dependencies": { "@types/node": "*" } }, "node_modules/@types/cors": { - "version": "2.8.13", - "resolved": "https://registry.npmjs.org/@types/cors/-/cors-2.8.13.tgz", - "integrity": "sha512-RG8AStHlUiV5ysZQKq97copd2UmVYw3/pRMLefISZ3S1hK104Cwm7iLQ3fTKx+lsUH2CE8FlLaYeEA2LSeqYUA==", + "version": "2.8.14", + "resolved": "https://registry.npmjs.org/@types/cors/-/cors-2.8.14.tgz", + "integrity": "sha512-RXHUvNWYICtbP6s18PnOCaqToK8y14DnLd75c6HfyKf228dxy7pHNOQkxPtvXKp/hINFMDjbYzsj63nnpPMSRQ==", "dev": true, "dependencies": { "@types/node": "*" } }, "node_modules/@types/elliptic": { - "version": "6.4.14", - "resolved": "https://registry.npmjs.org/@types/elliptic/-/elliptic-6.4.14.tgz", - "integrity": "sha512-z4OBcDAU0GVwDTuwJzQCiL6188QvZMkvoERgcVjq0/mPM8jCfdwZ3x5zQEVoL9WCAru3aG5wl3Z5Ww5wBWn7ZQ==", + "version": "6.4.15", + "resolved": "https://registry.npmjs.org/@types/elliptic/-/elliptic-6.4.15.tgz", + "integrity": "sha512-tW9Z/mrlymYEbx/WWcO/Kkly0VxqPNaf/p3KcZTYKI282ZX+50efZvY/p6FoMuTpFq+QMyABQNfs6OXvdmVUhQ==", "dependencies": { "@types/bn.js": "*" } }, "node_modules/@types/eslint": { - "version": "8.44.2", - "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.44.2.tgz", - "integrity": "sha512-sdPRb9K6iL5XZOmBubg8yiFp5yS/JdUDQsq5e6h95km91MCYMuvp7mh1fjPEYUhvHepKpZOjnEaMBR4PxjWDzg==", + "version": "8.44.3", + "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.44.3.tgz", + "integrity": "sha512-iM/WfkwAhwmPff3wZuPLYiHX18HI24jU8k1ZSH7P8FHwxTjZ2P6CoX2wnF43oprR+YXJM6UUxATkNvyv/JHd+g==", "dev": true, "dependencies": { "@types/estree": "*", @@ -4688,9 +4707,9 @@ } }, "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==", + "version": "3.7.5", + "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.5.tgz", + "integrity": "sha512-JNvhIEyxVW6EoMIFIvj93ZOywYFatlpu9deeH6eSx6PE3WHYvHaQtmHmQeNw7aA81bYGBPPQqdtBm6b1SsQMmA==", "dev": true, "dependencies": { "@types/eslint": "*", @@ -4698,15 +4717,15 @@ } }, "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==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.2.tgz", + "integrity": "sha512-VeiPZ9MMwXjO32/Xu7+OwflfmeoRwkE/qzndw42gGtgJwZopBnzy2gD//NN1+go1mADzkDcqf/KnFRSjTJ8xJA==", "dev": true }, "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.18", + "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.18.tgz", + "integrity": "sha512-Sxv8BSLLgsBYmcnGdGjjEjqET2U+AKAdCRODmMiq02FgjwuV75Ut85DRpvFjyw/Mk0vgUOliGRU0UUmuuZHByQ==", "dev": true, "dependencies": { "@types/body-parser": "*", @@ -4716,9 +4735,9 @@ } }, "node_modules/@types/express-serve-static-core": { - "version": "4.17.35", - "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.17.35.tgz", - "integrity": "sha512-wALWQwrgiB2AWTT91CB62b6Yt0sNHpznUXeZEcnPU3DRdlDIz74x8Qg1UUYKSVFi+va5vKOLYRBI1bRKiLLKIg==", + "version": "4.17.37", + "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.17.37.tgz", + "integrity": "sha512-ZohaCYTgGFcOP7u6aJOhY9uIZQgZ2vxC2yWoArY+FeDXlqeH66ZVBjgvg+RLVAS/DWNq4Ap9ZXu1+SUQiiWYMg==", "dev": true, "dependencies": { "@types/node": "*", @@ -4739,18 +4758,18 @@ } }, "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.7", + "resolved": "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.7.tgz", + "integrity": "sha512-MhzcwU8aUygZroVwL2jeYk6JisJrPl/oov/gsgGCue9mkgl9wjGbzReYQClxiUgFDnib9FuHqTndccKeZKxTRw==", "dev": true, "dependencies": { "@types/node": "*" } }, "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==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@types/http-errors/-/http-errors-2.0.2.tgz", + "integrity": "sha512-lPG6KlZs88gef6aD85z3HNkztpj7w2R7HmR3gygjfXCQmsLloWNARFkMuzKiiY8FGdh1XDpgBdrSf4aKDiA7Kg==", "dev": true }, "node_modules/@types/inquirer": { @@ -4764,9 +4783,9 @@ } }, "node_modules/@types/is-ci": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@types/is-ci/-/is-ci-3.0.0.tgz", - "integrity": "sha512-Q0Op0hdWbYd1iahB+IFNQcWXFq4O0Q5MwQP7uN0souuQ4rPg1vEYcnIOfr1gY+M+6rc8FGoRaBO1mOOvL29sEQ==", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@types/is-ci/-/is-ci-3.0.1.tgz", + "integrity": "sha512-mnb1ngaGQPm6LFZaNdh3xPOoQMkrQb/KBPhPPN2p2Wk8XgeUqWj6xPnvyQ8rvcK/VFritVmQG8tvQuy7g+9/nQ==", "dev": true, "dependencies": { "ci-info": "^3.1.0" @@ -4779,27 +4798,27 @@ "dev": true }, "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.1", + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.1.tgz", + "integrity": "sha512-gPQuzaPR5h/djlAv2apEG1HVOyj1IUs7GpfMZixU0/0KXT3pm64ylHuMUI1/Akh+sq/iikxg6Z2j+fcMDXaaTQ==", "dev": true, "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.2", + "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.2.tgz", + "integrity": "sha512-kv43F9eb3Lhj+lr/Hn6OcLCs/sSM8bt+fIaP11rCYngfV6NVjzWXJ17owQtDQTL9tQ8WSLUrGsSJ6rJz0F1w1A==", "dev": true, "dependencies": { "@types/istanbul-lib-report": "*" } }, "node_modules/@types/jest": { - "version": "29.5.3", - "resolved": "https://registry.npmjs.org/@types/jest/-/jest-29.5.3.tgz", - "integrity": "sha512-1Nq7YrO/vJE/FYnqYyw0FS8LdrjExSgIiHyKg7xPpn+yi8Q4huZryKnkJatN1ZRH89Kw2v33/8ZMB7DuZeSLlA==", + "version": "29.5.5", + "resolved": "https://registry.npmjs.org/@types/jest/-/jest-29.5.5.tgz", + "integrity": "sha512-ebylz2hnsWR9mYvmBFbXJXr+33UPc4+ZdxyDXh5w0FlPBTfCVN3wPL+kuOiQt3xvrK419v7XWeAs+AeOksafXg==", "dev": true, "dependencies": { "expect": "^29.0.0", @@ -4818,9 +4837,9 @@ } }, "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==", + "version": "7.0.13", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.13.tgz", + "integrity": "sha512-RbSSoHliUbnXj3ny0CNFOoxrIDV6SUGyStHsvDqosw6CkdPV8TtWGlfecuK4ToyMEAql6pzNxgCFKanovUzlgQ==", "dev": true }, "node_modules/@types/json5": { @@ -4830,9 +4849,9 @@ "dev": true }, "node_modules/@types/lodash": { - "version": "4.14.197", - "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.197.tgz", - "integrity": "sha512-BMVOiWs0uNxHVlHBgzTIqJYmj+PgCo4euloGF+5m4okL3rEYzM2EEv78mw8zWSMM57dM7kVIgJ2QDvwHSoCI5g==", + "version": "4.14.199", + "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.199.tgz", + "integrity": "sha512-Vrjz5N5Ia4SEzWWgIVwnHNEnb1UE1XMkvY5DGXrAeOGE9imk0hgTHh5GyDjLDJi9OTCn9oo9dXH1uToK1VRfrg==", "dev": true }, "node_modules/@types/lodash.clonedeep": { @@ -4855,9 +4874,9 @@ } }, "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==", + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/@types/mime/-/mime-1.3.3.tgz", + "integrity": "sha512-Ys+/St+2VF4+xuY6+kDIXGxbNRO0mesVg0bbxEfB97Od1Vjpjx9KD1qxs64Gcb3CWPirk9Xe+PT4YiiHQ9T+eg==", "dev": true }, "node_modules/@types/minimatch": { @@ -4867,30 +4886,30 @@ "dev": true }, "node_modules/@types/minimist": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/@types/minimist/-/minimist-1.2.2.tgz", - "integrity": "sha512-jhuKLIRrhvCPLqwPcx6INqmKeiA5EWrsCOPhrlFSrbrmU4ZMPjj5Ul/oLCMDO98XRUIwVm78xICz4EPCektzeQ==", + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/@types/minimist/-/minimist-1.2.3.tgz", + "integrity": "sha512-ZYFzrvyWUNhaPomn80dsMNgMeXxNWZBdkuG/hWlUvXvbdUH8ZERNBGXnU87McuGcWDsyzX2aChCv/SVN348k3A==", "dev": true }, "node_modules/@types/node": { - "version": "20.4.7", - "resolved": "https://registry.npmjs.org/@types/node/-/node-20.4.7.tgz", - "integrity": "sha512-bUBrPjEry2QUTsnuEjzjbS7voGWCc30W0qzgMf90GPeDGFRakvrz47ju+oqDAKCXLUCe39u57/ORMl/O/04/9g==" + "version": "20.5.1", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.5.1.tgz", + "integrity": "sha512-4tT2UrL5LBqDwoed9wZ6N3umC4Yhz3W3FloMmiiG4JwmUJWpie0c7lcnUNd4gtMKuDEO4wRVS8B6Xa0uMRsMKg==" }, "node_modules/@types/node-fetch": { - "version": "2.6.4", - "resolved": "https://registry.npmjs.org/@types/node-fetch/-/node-fetch-2.6.4.tgz", - "integrity": "sha512-1ZX9fcN4Rvkvgv4E6PAY5WXUFWFcRWxZa3EW83UjycOB9ljJCedb2CupIP4RZMEwF/M3eTcCihbBRgwtGbg5Rg==", + "version": "2.6.6", + "resolved": "https://registry.npmjs.org/@types/node-fetch/-/node-fetch-2.6.6.tgz", + "integrity": "sha512-95X8guJYhfqiuVVhRFxVQcf4hW/2bCuoPwDasMf/531STFoNoWTT7YDnWdXHEZKqAGUigmpG31r2FE70LwnzJw==", "dev": true, "dependencies": { "@types/node": "*", - "form-data": "^3.0.0" + "form-data": "^4.0.0" } }, "node_modules/@types/normalize-package-data": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.1.tgz", - "integrity": "sha512-Gj7cI7z+98M282Tqmp2K5EIsoouUEzbBJhQQzDE3jSIRk6r9gsz0oUokqIUR4u1R3dMHo0pDHM7sNOHyhulypw==", + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.2.tgz", + "integrity": "sha512-lqa4UEhhv/2sjjIQgjX8B+RBjj47eo0mzGasklVJ78UKGQY1r0VpB9XHDaZZO9qzEFDdy4MrXLuEaSmPrPSe/A==", "dev": true }, "node_modules/@types/parse5": { @@ -4900,36 +4919,36 @@ "dev": true }, "node_modules/@types/qs": { - "version": "6.9.7", - "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.7.tgz", - "integrity": "sha512-FGa1F62FT09qcrueBA6qYTrJPVDzah9a+493+o2PCXsesWHIn27G98TsSMs3WPNbZIEj4+VJf6saSFpvD+3Zsw==", + "version": "6.9.8", + "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.8.tgz", + "integrity": "sha512-u95svzDlTysU5xecFNTgfFG5RUWu1A9P0VzgpcIiGZA9iraHOdSzcxMxQ55DyeRaGCSxQi7LxXDI4rzq/MYfdg==", "dev": true }, "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==", + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.5.tgz", + "integrity": "sha512-xrO9OoVPqFuYyR/loIHjnbvvyRZREYKLjxV4+dY6v3FQR3stQ9ZxIGkaclF7YhI9hfjpuTbu14hZEy94qKLtOA==", "dev": true }, "node_modules/@types/ripemd160": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@types/ripemd160/-/ripemd160-2.0.0.tgz", - "integrity": "sha512-LD6AO/+8cAa1ghXax9NG9iPDLPUEGB2WWPjd//04KYfXxTwHvlDEfL0NRjrM5z9XWBi6WbKw75Are0rDyn3PSA==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@types/ripemd160/-/ripemd160-2.0.1.tgz", + "integrity": "sha512-l3pt9f8vK1tU2qBXY1aL7HofNnJKbpNa+2DznrD7j0lhaS4587e3iwgSMRDJFlidsrNjrrjIl8G+EeXFMjcGXg==", "dev": true, "dependencies": { "@types/node": "*" } }, "node_modules/@types/semver": { - "version": "7.5.0", - "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.5.0.tgz", - "integrity": "sha512-G8hZ6XJiHnuhQKR7ZmysCeJWE08o8T0AXtk5darsCaTVsYZhhgUrq53jizaR2FvsoeCwJhlmwTjkXBY5Pn/ZHw==", + "version": "7.5.3", + "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.5.3.tgz", + "integrity": "sha512-OxepLK9EuNEIPxWNME+C6WwbRAOOI2o2BaQEGzz5Lu2e4Z5eDnEo+/aVEDMIXywoJitJ7xWd641wrGLZdtwRyw==", "dev": true }, "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": "0.17.2", + "resolved": "https://registry.npmjs.org/@types/send/-/send-0.17.2.tgz", + "integrity": "sha512-aAG6yRf6r0wQ29bkS+x97BIs64ZLxeE/ARwyS6wrldMm3C1MdKwCcnnEwMC1slI8wuxJOpiUH9MioC0A0i+GJw==", "dev": true, "dependencies": { "@types/mime": "^1", @@ -4937,9 +4956,9 @@ } }, "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.3", + "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.15.3.tgz", + "integrity": "sha512-yVRvFsEMrv7s0lGhzrggJjNOSmZCdgCjw9xWrPr/kNNLp6FaDfMC1KaYl3TSJ0c58bECwNBMoQrZJ8hA8E1eFg==", "dev": true, "dependencies": { "@types/http-errors": "*", @@ -4948,9 +4967,9 @@ } }, "node_modules/@types/sha.js": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/@types/sha.js/-/sha.js-2.4.1.tgz", - "integrity": "sha512-QHWKOJ4dkWB0OCfCoOFUZkhvpqUllcPs2WIhYFk7ugAprv3ts0z4nSuHtc0jlWBYLdPwfNRpVpv9pIpFSbYBYQ==", + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/@types/sha.js/-/sha.js-2.4.2.tgz", + "integrity": "sha512-NGwYSCPCwuZc4Mdf3M0PA9nEjLm16z17zYZTrFVnjAtPSrYN6eMkzup2jelkoe9piZdJq/WVaoTJxE+SyrJKEQ==", "dev": true, "dependencies": { "@types/node": "*" @@ -4963,24 +4982,24 @@ "dev": true }, "node_modules/@types/through": { - "version": "0.0.30", - "resolved": "https://registry.npmjs.org/@types/through/-/through-0.0.30.tgz", - "integrity": "sha512-FvnCJljyxhPM3gkRgWmxmDZyAQSiBQQWLI0A0VFL0K7W1oRUrPJSqNO0NvTnLkBcotdlp3lKvaT0JrnyRDkzOg==", + "version": "0.0.31", + "resolved": "https://registry.npmjs.org/@types/through/-/through-0.0.31.tgz", + "integrity": "sha512-LpKpmb7FGevYgXnBXYs6HWnmiFyVG07Pt1cnbgM1IhEacITTiUaBXXvOR3Y50ksaJWGSfhbEvQFivQEFGCC55w==", "dev": true, "dependencies": { "@types/node": "*" } }, "node_modules/@types/tough-cookie": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/@types/tough-cookie/-/tough-cookie-4.0.2.tgz", - "integrity": "sha512-Q5vtl1W5ue16D+nIaW8JWebSSraJVlK+EthKn7e7UcD4KWsaSJ8BqGPXNaPghgtcn/fhvrN17Tv8ksUsQpiplw==", + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/@types/tough-cookie/-/tough-cookie-4.0.3.tgz", + "integrity": "sha512-THo502dA5PzG/sfQH+42Lw3fvmYkceefOspdCwpHRul8ik2Jv1K8I5OZz1AT3/rs46kwgMCe9bSBmDLYkkOMGg==", "dev": true }, "node_modules/@types/triple-beam": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/@types/triple-beam/-/triple-beam-1.3.2.tgz", - "integrity": "sha512-txGIh+0eDFzKGC25zORnswy+br1Ha7hj5cMVwKIU7+s0U2AxxJru/jZSMU6OC9MJWP6+pc/hc6ZjyZShpsyY2g==" + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/@types/triple-beam/-/triple-beam-1.3.3.tgz", + "integrity": "sha512-6tOUG+nVHn0cJbVp25JFayS5UE6+xlbcNF9Lo9mU7U0zk3zeUShZied4YEQZjy1JBF043FSkdXw8YkUJuVtB5g==" }, "node_modules/@types/triplesec": { "version": "3.0.1", @@ -4992,9 +5011,9 @@ } }, "node_modules/@types/wif": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/@types/wif/-/wif-2.0.2.tgz", - "integrity": "sha512-IiIuBeJzlh4LWJ7kVTrX0nwB60OG0vvGTaWC/SgSbVFw7uYUTF6gEuvDZ1goWkeirekJDD58Y8g7NljQh2fNkA==", + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@types/wif/-/wif-2.0.3.tgz", + "integrity": "sha512-WHJu8Z+8Gk/qa+Ckb6jgjO1QO9tKtib8LTsIP7TyqYqPFrOGR5hHQwPtT2fLWw/qycyQHDX5BsK8TKn3zVLSrA==", "dev": true, "dependencies": { "@types/node": "*" @@ -5009,36 +5028,35 @@ } }, "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.26", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.26.tgz", + "integrity": "sha512-Y3vDy2X6zw/ZCumcwLpdhM5L7jmyGpmBCTYMHDLqT2IKVMYRRLdv6ZakA+wxhra6Z/3bwhNbNl9bDGXaFU+6rw==", "dev": true, "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==", + "version": "21.0.1", + "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.1.tgz", + "integrity": "sha512-axdPBuLuEJt0c4yI5OZssC19K2Mq1uKdrfZBzuxLvaztgqUtFYZUNw7lETExPYJR9jdEoIg4mb7RQKRQzOkeGQ==", "dev": true }, "node_modules/@typescript-eslint/eslint-plugin": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-6.3.0.tgz", - "integrity": "sha512-IZYjYZ0ifGSLZbwMqIip/nOamFiWJ9AH+T/GYNZBWkVcyNQOFGtSMoWV7RvY4poYCMZ/4lHzNl796WOSNxmk8A==", + "version": "6.7.4", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-6.7.4.tgz", + "integrity": "sha512-DAbgDXwtX+pDkAHwiGhqP3zWUGpW49B7eqmgpPtg+BKJXwdct79ut9+ifqOFPJGClGKSHXn2PTBatCnldJRUoA==", "dev": true, "dependencies": { "@eslint-community/regexpp": "^4.5.1", - "@typescript-eslint/scope-manager": "6.3.0", - "@typescript-eslint/type-utils": "6.3.0", - "@typescript-eslint/utils": "6.3.0", - "@typescript-eslint/visitor-keys": "6.3.0", + "@typescript-eslint/scope-manager": "6.7.4", + "@typescript-eslint/type-utils": "6.7.4", + "@typescript-eslint/utils": "6.7.4", + "@typescript-eslint/visitor-keys": "6.7.4", "debug": "^4.3.4", "graphemer": "^1.4.0", "ignore": "^5.2.4", "natural-compare": "^1.4.0", - "natural-compare-lite": "^1.4.0", "semver": "^7.5.4", "ts-api-utils": "^1.0.1" }, @@ -5060,15 +5078,15 @@ } }, "node_modules/@typescript-eslint/parser": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-6.3.0.tgz", - "integrity": "sha512-ibP+y2Gr6p0qsUkhs7InMdXrwldjxZw66wpcQq9/PzAroM45wdwyu81T+7RibNCh8oc0AgrsyCwJByncY0Ongg==", + "version": "6.7.4", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-6.7.4.tgz", + "integrity": "sha512-I5zVZFY+cw4IMZUeNCU7Sh2PO5O57F7Lr0uyhgCJmhN/BuTlnc55KxPonR4+EM3GBdfiCyGZye6DgMjtubQkmA==", "dev": true, "dependencies": { - "@typescript-eslint/scope-manager": "6.3.0", - "@typescript-eslint/types": "6.3.0", - "@typescript-eslint/typescript-estree": "6.3.0", - "@typescript-eslint/visitor-keys": "6.3.0", + "@typescript-eslint/scope-manager": "6.7.4", + "@typescript-eslint/types": "6.7.4", + "@typescript-eslint/typescript-estree": "6.7.4", + "@typescript-eslint/visitor-keys": "6.7.4", "debug": "^4.3.4" }, "engines": { @@ -5088,13 +5106,13 @@ } }, "node_modules/@typescript-eslint/scope-manager": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-6.3.0.tgz", - "integrity": "sha512-WlNFgBEuGu74ahrXzgefiz/QlVb+qg8KDTpknKwR7hMH+lQygWyx0CQFoUmMn1zDkQjTBBIn75IxtWss77iBIQ==", + "version": "6.7.4", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-6.7.4.tgz", + "integrity": "sha512-SdGqSLUPTXAXi7c3Ob7peAGVnmMoGzZ361VswK2Mqf8UOYcODiYvs8rs5ILqEdfvX1lE7wEZbLyELCW+Yrql1A==", "dev": true, "dependencies": { - "@typescript-eslint/types": "6.3.0", - "@typescript-eslint/visitor-keys": "6.3.0" + "@typescript-eslint/types": "6.7.4", + "@typescript-eslint/visitor-keys": "6.7.4" }, "engines": { "node": "^16.0.0 || >=18.0.0" @@ -5105,13 +5123,13 @@ } }, "node_modules/@typescript-eslint/type-utils": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-6.3.0.tgz", - "integrity": "sha512-7Oj+1ox1T2Yc8PKpBvOKWhoI/4rWFd1j7FA/rPE0lbBPXTKjdbtC+7Ev0SeBjEKkIhKWVeZSP+mR7y1Db1CdfQ==", + "version": "6.7.4", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-6.7.4.tgz", + "integrity": "sha512-n+g3zi1QzpcAdHFP9KQF+rEFxMb2KxtnJGID3teA/nxKHOVi3ylKovaqEzGBbVY2pBttU6z85gp0D00ufLzViQ==", "dev": true, "dependencies": { - "@typescript-eslint/typescript-estree": "6.3.0", - "@typescript-eslint/utils": "6.3.0", + "@typescript-eslint/typescript-estree": "6.7.4", + "@typescript-eslint/utils": "6.7.4", "debug": "^4.3.4", "ts-api-utils": "^1.0.1" }, @@ -5132,9 +5150,9 @@ } }, "node_modules/@typescript-eslint/types": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-6.3.0.tgz", - "integrity": "sha512-K6TZOvfVyc7MO9j60MkRNWyFSf86IbOatTKGrpTQnzarDZPYPVy0oe3myTMq7VjhfsUAbNUW8I5s+2lZvtx1gg==", + "version": "6.7.4", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-6.7.4.tgz", + "integrity": "sha512-o9XWK2FLW6eSS/0r/tgjAGsYasLAnOWg7hvZ/dGYSSNjCh+49k5ocPN8OmG5aZcSJ8pclSOyVKP2x03Sj+RrCA==", "dev": true, "engines": { "node": "^16.0.0 || >=18.0.0" @@ -5145,13 +5163,13 @@ } }, "node_modules/@typescript-eslint/typescript-estree": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-6.3.0.tgz", - "integrity": "sha512-Xh4NVDaC4eYKY4O3QGPuQNp5NxBAlEvNQYOqJquR2MePNxO11E5K3t5x4M4Mx53IZvtpW+mBxIT0s274fLUocg==", + "version": "6.7.4", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-6.7.4.tgz", + "integrity": "sha512-ty8b5qHKatlNYd9vmpHooQz3Vki3gG+3PchmtsA4TgrZBKWHNjWfkQid7K7xQogBqqc7/BhGazxMD5vr6Ha+iQ==", "dev": true, "dependencies": { - "@typescript-eslint/types": "6.3.0", - "@typescript-eslint/visitor-keys": "6.3.0", + "@typescript-eslint/types": "6.7.4", + "@typescript-eslint/visitor-keys": "6.7.4", "debug": "^4.3.4", "globby": "^11.1.0", "is-glob": "^4.0.3", @@ -5172,17 +5190,17 @@ } }, "node_modules/@typescript-eslint/utils": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-6.3.0.tgz", - "integrity": "sha512-hLLg3BZE07XHnpzglNBG8P/IXq/ZVXraEbgY7FM0Cnc1ehM8RMdn9mat3LubJ3KBeYXXPxV1nugWbQPjGeJk6Q==", + "version": "6.7.4", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-6.7.4.tgz", + "integrity": "sha512-PRQAs+HUn85Qdk+khAxsVV+oULy3VkbH3hQ8hxLRJXWBEd7iI+GbQxH5SEUSH7kbEoTp6oT1bOwyga24ELALTA==", "dev": true, "dependencies": { "@eslint-community/eslint-utils": "^4.4.0", "@types/json-schema": "^7.0.12", "@types/semver": "^7.5.0", - "@typescript-eslint/scope-manager": "6.3.0", - "@typescript-eslint/types": "6.3.0", - "@typescript-eslint/typescript-estree": "6.3.0", + "@typescript-eslint/scope-manager": "6.7.4", + "@typescript-eslint/types": "6.7.4", + "@typescript-eslint/typescript-estree": "6.7.4", "semver": "^7.5.4" }, "engines": { @@ -5197,12 +5215,12 @@ } }, "node_modules/@typescript-eslint/visitor-keys": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-6.3.0.tgz", - "integrity": "sha512-kEhRRj7HnvaSjux1J9+7dBen15CdWmDnwrpyiHsFX6Qx2iW5LOBUgNefOFeh2PjWPlNwN8TOn6+4eBU3J/gupw==", + "version": "6.7.4", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-6.7.4.tgz", + "integrity": "sha512-pOW37DUhlTZbvph50x5zZCkFn3xzwkGtNoJHzIM3svpiSkJzwOYr/kVBaXmf+RAQiUDs1AHEZVNPg6UJCJpwRA==", "dev": true, "dependencies": { - "@typescript-eslint/types": "6.3.0", + "@typescript-eslint/types": "6.7.4", "eslint-visitor-keys": "^3.4.1" }, "engines": { @@ -5685,13 +5703,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.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", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", "uri-js": "^4.2.2" }, "funding": { @@ -5699,15 +5718,6 @@ "url": "https://github.com/sponsors/epoberezkin" } }, - "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" - } - }, "node_modules/ansi-colors": { "version": "4.1.3", "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.3.tgz", @@ -5860,15 +5870,15 @@ "dev": true }, "node_modules/array-includes": { - "version": "3.1.6", - "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.6.tgz", - "integrity": "sha512-sgTbLvL6cNnw24FnbaDyjmvddQ2ML8arZsgaJhoABMoplz/4QRhtrYS+alr1BUM1Bwp6dhx8vVCBSLG+StwOFw==", + "version": "3.1.7", + "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.7.tgz", + "integrity": "sha512-dlcsNBIiWhPkHdOEEKnehA+RNUWDc4UqFtnIXU4uuYDPtA4LDkr7qip2p0VvFAEXNDr0yWZ9PJyIRiGjRLQzwQ==", "dev": true, "dependencies": { "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4", - "get-intrinsic": "^1.1.3", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "get-intrinsic": "^1.2.1", "is-string": "^1.0.7" }, "engines": { @@ -5888,16 +5898,16 @@ } }, "node_modules/array.prototype.findlastindex": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.2.tgz", - "integrity": "sha512-tb5thFFlUcp7NdNF6/MpDk/1r/4awWG1FIz3YqDf+/zJSTezBb+/5WViH41obXULHVpDzoiCLpJ/ZO9YbJMsdw==", + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.3.tgz", + "integrity": "sha512-LzLoiOMAxvy+Gd3BAq3B7VeIgPdo+Q8hthvKtXybMvRV0jrXfJM/t8mw7nNlpEcVlVUnCnM2KSX4XU5HmpodOA==", "dev": true, "dependencies": { "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", "es-shim-unscopables": "^1.0.0", - "get-intrinsic": "^1.1.3" + "get-intrinsic": "^1.2.1" }, "engines": { "node": ">= 0.4" @@ -5907,14 +5917,14 @@ } }, "node_modules/array.prototype.flat": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.1.tgz", - "integrity": "sha512-roTU0KWIOmJ4DRLmwKd19Otg0/mT3qPNt0Qb3GWW8iObuZXxrjB/pzn0R3hqpRSWg4HCwqx+0vwOnWnvlOyeIA==", + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.2.tgz", + "integrity": "sha512-djYB+Zx2vLewY8RWlNCUdHjDXs2XOgm602S9E7P/UpHgfeHL00cRiIF+IN/G/aUJ7kGPb6yO/ErDI5V2s8iycA==", "dev": true, "dependencies": { "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", "es-shim-unscopables": "^1.0.0" }, "engines": { @@ -5925,14 +5935,14 @@ } }, "node_modules/array.prototype.flatmap": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.1.tgz", - "integrity": "sha512-8UGn9O1FDVvMNB0UlLv4voxRMze7+FpHyF5mSMRjWHUMlpoDViniy05870VlxhfgTnLbpuwTzvD76MTtWxB/mQ==", + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.2.tgz", + "integrity": "sha512-Ewyx0c9PmpcsByhSW4r+9zDU7sGjFc86qf/kKtuSCRdhfbk0SNLLkaT5qvcHnRGgc5NP/ly/y+qkXkqONX54CQ==", "dev": true, "dependencies": { "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", "es-shim-unscopables": "^1.0.0" }, "engines": { @@ -5943,14 +5953,15 @@ } }, "node_modules/arraybuffer.prototype.slice": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.1.tgz", - "integrity": "sha512-09x0ZWFEjj4WD8PDbykUwo3t9arLn8NIzmmYEJFpYekOAQjpkGSyrQhNoRTcwwcFRu+ycWF78QZ63oWTqSjBcw==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.2.tgz", + "integrity": "sha512-yMBKppFur/fbHu9/6USUe03bZ4knMYiwFBcyiaXB8Go0qNehwX6inYPzK9U0NeQvGxKthcmHcaR8P5MStSRBAw==", "dev": true, "dependencies": { "array-buffer-byte-length": "^1.0.0", "call-bind": "^1.0.2", "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", "get-intrinsic": "^1.2.1", "is-array-buffer": "^3.0.2", "is-shared-array-buffer": "^1.0.2" @@ -5990,11 +6001,6 @@ "safer-buffer": "^2.1.0" } }, - "node_modules/asn1.js/node_modules/bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" - }, "node_modules/asn1js": { "version": "3.0.5", "resolved": "https://registry.npmjs.org/asn1js/-/asn1js-3.0.5.tgz", @@ -6010,15 +6016,16 @@ } }, "node_modules/assert": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/assert/-/assert-2.0.0.tgz", - "integrity": "sha512-se5Cd+js9dXJnu6Ag2JFc00t+HmHOen+8Q+L7O9zI0PqQXr20uk2J0XQqMxZEeo5U50o8Nvmmx7dZrl+Ufr35A==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/assert/-/assert-2.1.0.tgz", + "integrity": "sha512-eLHpSK/Y4nhMJ07gDaAzoX/XAKS8PSaojml3M0DM4JpV1LAi5JOJ/p6H/XWrl8L+DzVEvVCW1z3vWAaB9oTsQw==", "dev": true, "dependencies": { - "es6-object-assign": "^1.1.0", - "is-nan": "^1.2.1", - "object-is": "^1.0.1", - "util": "^0.12.0" + "call-bind": "^1.0.2", + "is-nan": "^1.3.2", + "object-is": "^1.1.5", + "object.assign": "^4.1.4", + "util": "^0.12.5" } }, "node_modules/assert-plus": { @@ -6083,9 +6090,9 @@ "integrity": "sha512-NmWvPnx0F1SfrQbYwOi7OeaNGokp9XhzNioJ/CSBs8Qa4vxug81mhJEAVZwxXuBmYB5KDRfMq/F3RR0BIU7sWg==" }, "node_modules/axios": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/axios/-/axios-1.4.0.tgz", - "integrity": "sha512-S4XCWMEmzvo64T9GfvQDOXgYRDJ/wsSZc7Jvdgx5u1sd0JwsuPLqb3SYmusag+edF6ziyMensPVqLTSc1PiSEA==", + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.5.1.tgz", + "integrity": "sha512-Q28iYCWzNHjAm+yEAot5QaAMxhMghWLFVf7rRdwhUI+c2jix2DUXjAHXVi+s1ibs3mjPO/cCgbA++3BjD0vP/A==", "dev": true, "dependencies": { "follow-redirects": "^1.15.0", @@ -6093,30 +6100,16 @@ "proxy-from-env": "^1.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==", - "dev": true, - "dependencies": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.8", - "mime-types": "^2.1.12" - }, - "engines": { - "node": ">= 6" - } - }, "node_modules/babel-jest": { - "version": "29.6.2", - "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-29.6.2.tgz", - "integrity": "sha512-BYCzImLos6J3BH/+HvUCHG1dTf2MzmAB4jaVxHV+29RZLjR29XuYTmsf2sdDwkrb+FczkGo3kOhE7ga6sI0P4A==", + "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, "dependencies": { - "@jest/transform": "^29.6.2", + "@jest/transform": "^29.7.0", "@types/babel__core": "^7.1.14", "babel-plugin-istanbul": "^6.1.1", - "babel-preset-jest": "^29.5.0", + "babel-preset-jest": "^29.6.3", "chalk": "^4.0.0", "graceful-fs": "^4.2.9", "slash": "^3.0.0" @@ -6214,10 +6207,35 @@ "node": ">=8" } }, + "node_modules/babel-plugin-istanbul/node_modules/istanbul-lib-instrument": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-5.2.1.tgz", + "integrity": "sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg==", + "dev": true, + "dependencies": { + "@babel/core": "^7.12.3", + "@babel/parser": "^7.14.7", + "@istanbuljs/schema": "^0.1.2", + "istanbul-lib-coverage": "^3.2.0", + "semver": "^6.3.0" + }, + "engines": { + "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.5.0", - "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-29.5.0.tgz", - "integrity": "sha512-zSuuuAlTMT4mzLj2nPnUm6fsE6270vdOfnpbJ+RmruU75UhLFvL0N2NgI7xpeS7NaB6hGqmd5pVpGTDYvi4Q3w==", + "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, "dependencies": { "@babel/template": "^7.3.3", @@ -6253,12 +6271,12 @@ } }, "node_modules/babel-preset-jest": { - "version": "29.5.0", - "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-29.5.0.tgz", - "integrity": "sha512-JOMloxOqdiBSxMAzjRaH023/vvcaSaec49zvg+2LmNsktC7ei39LTJGw02J+9uUtTZUq6xbLyJ4dxe9sSmIuAg==", + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-29.6.3.tgz", + "integrity": "sha512-0B3bhxR6snWXJZtR/RliHTDPRgn1sNHOR0yVtq/IiQFyuOVjFS+wuio/R4gSNkyYmKmJB4wGZv2NZanmKmTnNA==", "dev": true, "dependencies": { - "babel-plugin-jest-hoist": "^29.5.0", + "babel-plugin-jest-hoist": "^29.6.3", "babel-preset-current-node-syntax": "^1.0.0" }, "engines": { @@ -6279,6 +6297,30 @@ "resolved": "https://registry.npmjs.org/base-x/-/base-x-4.0.0.tgz", "integrity": "sha512-FuwxlW4H5kh37X/oW59pwTzzTKRzfrrQwhmyspRM7swOEZcHtDZSCt45U6oKgtuFE+WYPblePMVIPR4RZrh/hw==" }, + "node_modules/base58check": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/base58check/-/base58check-2.0.0.tgz", + "integrity": "sha512-sTzsDAOC9+i2Ukr3p1Ie2DWpD117ua+vBJRDnpsSlScGwImeeiTg/IatwcFLsz9K9wEGoBLVd5ahNZzrZ/jZyg==", + "dev": true, + "dependencies": { + "bs58": "^3.0.0" + } + }, + "node_modules/base58check/node_modules/base-x": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/base-x/-/base-x-1.1.0.tgz", + "integrity": "sha512-c0WLeG3K5OlL4Skz2/LVdS+MjggByKhowxQpG+JpCLA48s/bGwIDyzA1naFjywtNvp/37fLK0p0FpjTNNLLUXQ==", + "dev": true + }, + "node_modules/base58check/node_modules/bs58": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/bs58/-/bs58-3.1.0.tgz", + "integrity": "sha512-9C2bRFTGy3meqO65O9jLvVTyawvhLVp4h2ECm5KlRPuV5KPDNJZcJIj3gl+aA0ENXcYrUSLCkPAeqbTcI2uWyQ==", + "dev": true, + "dependencies": { + "base-x": "^1.1.0" + } + }, "node_modules/base64-js": { "version": "1.5.1", "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", @@ -6364,9 +6406,9 @@ } }, "node_modules/bip174": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/bip174/-/bip174-2.1.0.tgz", - "integrity": "sha512-lkc0XyiX9E9KiVAS1ZiOqK1xfiwvf4FXDDdkDq5crcDzOq+xGytY+14qCsqz7kCiy8rpN1CRNfacRhf9G3JNSA==", + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/bip174/-/bip174-2.1.1.tgz", + "integrity": "sha512-mdFV5+/v0XyNYXjBS6CQPLo9ekCx4gtKZFnJm5PMto7Fs9hTTDpkkzOB7/FtluRI6JbUUAu+snTYfJRgHLZbZQ==", "engines": { "node": ">=8.0.0" } @@ -6402,9 +6444,9 @@ } }, "node_modules/bip39/node_modules/@noble/hashes": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.3.1.tgz", - "integrity": "sha512-EbqwksQwz9xDRGfDST86whPBgM65E0OH/pCgqW0GBVzO22bNE+NuIbeTb714+IfSjU3aRk47EUvXIb5bTsenKA==", + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.3.2.tgz", + "integrity": "sha512-MVC8EAQp7MvEcm30KWENFjgR+Mkmf+D189XJTkFIlwohU5hcBbn1ZkKq7KVTi2Hme3PMGF390DaL52beVrIihQ==", "engines": { "node": ">= 16" }, @@ -6490,19 +6532,21 @@ "npm": ">=6" } }, - "node_modules/blockstack/node_modules/@types/bn.js": { - "version": "4.11.6", - "resolved": "https://registry.npmjs.org/@types/bn.js/-/bn.js-4.11.6.tgz", - "integrity": "sha512-pqr857jrp2kPuO9uRjZ3PwnJTjoQy+fcdxvBTvHm6dkmEL9q+hDD/2j/0ELOBPtPnS8LjCX0gI9nbl8lVkadpg==", + "node_modules/blockstack/node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", "dependencies": { - "@types/node": "*" + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" } }, - "node_modules/blockstack/node_modules/bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" - }, "node_modules/blockstack/node_modules/cross-fetch": { "version": "2.2.6", "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-2.2.6.tgz", @@ -6525,6 +6569,11 @@ "node": ">= 0.12" } }, + "node_modules/blockstack/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==" + }, "node_modules/blockstack/node_modules/jsontokens": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/jsontokens/-/jsontokens-2.0.2.tgz", @@ -6538,29 +6587,15 @@ "key-encoder": "^2.0.2" } }, - "node_modules/blockstack/node_modules/triplesec": { - "version": "3.0.27", - "resolved": "https://registry.npmjs.org/triplesec/-/triplesec-3.0.27.tgz", - "integrity": "sha512-FDhkxa3JYnPOerOd+8k+SBmm7cb7KkyX+xXwNFV3XV6dsQgHuRvjtbnzWfPJ2kimeR8ErjZfPd/6r7RH6epHDw==", - "dependencies": { - "iced-error": ">=0.0.9", - "iced-lock": "^1.0.1", - "iced-runtime": "^1.0.2", - "more-entropy": ">=0.0.7", - "progress": "~1.1.2", - "uglify-js": "^3.1.9" - } - }, "node_modules/blockstack/node_modules/zone-file": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/zone-file/-/zone-file-1.0.0.tgz", "integrity": "sha512-dJynTf/5XCobE6diQBpNWQQRBzXE8d1QhHKemzrkffrZ36F9uKlbBVyIXXbG2CJoaTGZGh8zt2AHX/mG4txtqA==" }, "node_modules/bn.js": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.1.tgz", - "integrity": "sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==", - "dev": true + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" }, "node_modules/body-parser": { "version": "1.20.1", @@ -6704,6 +6739,12 @@ "randombytes": "^2.0.1" } }, + "node_modules/browserify-rsa/node_modules/bn.js": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.1.tgz", + "integrity": "sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==", + "dev": true + }, "node_modules/browserify-sign": { "version": "4.2.1", "resolved": "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.2.1.tgz", @@ -6721,10 +6762,16 @@ "safe-buffer": "^5.2.0" } }, + "node_modules/browserify-sign/node_modules/bn.js": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.1.tgz", + "integrity": "sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==", + "dev": true + }, "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.22.1", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.22.1.tgz", + "integrity": "sha512-FEVc202+2iuClEhZhrWy6ZiAcRLvNMyYcxZ8raemul1DYVOVdFsbqckWLdsixQZCpJlwe77Z3UTalE7jsjnKfQ==", "dev": true, "funding": [ { @@ -6741,10 +6788,10 @@ } ], "dependencies": { - "caniuse-lite": "^1.0.30001517", - "electron-to-chromium": "^1.4.477", + "caniuse-lite": "^1.0.30001541", + "electron-to-chromium": "^1.4.535", "node-releases": "^2.0.13", - "update-browserslist-db": "^1.0.11" + "update-browserslist-db": "^1.0.13" }, "bin": { "browserslist": "cli.js" @@ -6913,16 +6960,16 @@ } }, "node_modules/cacache": { - "version": "17.1.3", - "resolved": "https://registry.npmjs.org/cacache/-/cacache-17.1.3.tgz", - "integrity": "sha512-jAdjGxmPxZh0IipMdR7fK/4sDSrHMLUV0+GvVUsjwyGNKHsh79kW/otg+GkbXwl6Uzvy9wsvHOX4nUoWldeZMg==", + "version": "17.1.4", + "resolved": "https://registry.npmjs.org/cacache/-/cacache-17.1.4.tgz", + "integrity": "sha512-/aJwG2l3ZMJ1xNAnqbMpA40of9dj/pIH3QfiuQSqjfPJF747VR0J/bHn+/KdNnHKc6XQcWt/AfRSBft82W1d2A==", "dev": true, "dependencies": { "@npmcli/fs": "^3.1.0", "fs-minipass": "^3.0.0", "glob": "^10.2.2", "lru-cache": "^7.7.1", - "minipass": "^5.0.0", + "minipass": "^7.0.3", "minipass-collect": "^1.0.2", "minipass-flush": "^1.0.5", "minipass-pipeline": "^1.2.4", @@ -6945,19 +6992,19 @@ } }, "node_modules/cacache/node_modules/glob": { - "version": "10.3.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-10.3.3.tgz", - "integrity": "sha512-92vPiMb/iqpmEgsOoIDvTjc50wf9CCCvMzsi6W0JLPeUKE8TWP1a73PgqSrqy7iAZxaSD1YdzU7QZR5LF51MJw==", + "version": "10.3.10", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.3.10.tgz", + "integrity": "sha512-fa46+tv1Ak0UPK1TOy/pZrIybNNt4HCv7SDzwyfiOZkvZLEbjsZkJBPtDHVshZjbecAoAGSC20MjLDG/qr679g==", "dev": true, "dependencies": { "foreground-child": "^3.1.0", - "jackspeak": "^2.0.3", + "jackspeak": "^2.3.5", "minimatch": "^9.0.1", "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0", "path-scurry": "^1.10.1" }, "bin": { - "glob": "dist/cjs/src/bin.js" + "glob": "dist/esm/bin.mjs" }, "engines": { "node": ">=16 || 14 >=14.17" @@ -6990,13 +7037,22 @@ "url": "https://github.com/sponsors/isaacs" } }, + "node_modules/cacache/node_modules/minipass": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.0.4.tgz", + "integrity": "sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ==", + "dev": true, + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, "node_modules/cacache/node_modules/ssri": { - "version": "10.0.4", - "resolved": "https://registry.npmjs.org/ssri/-/ssri-10.0.4.tgz", - "integrity": "sha512-12+IR2CB2C28MMAw0Ncqwj5QbTcs0nGIhgJzYWzDkb21vWmfNI83KS4f3Ci6GI98WreIfG7o9UXp3C0qbpA8nQ==", + "version": "10.0.5", + "resolved": "https://registry.npmjs.org/ssri/-/ssri-10.0.5.tgz", + "integrity": "sha512-bSf16tAFkGeRlUNDjXu8FzaMQt6g2HZJrun7mtMbIPOddxt3GLMSz5VWUWcqTJUPfLEaDIepGxv+bYQW49596A==", "dev": true, "dependencies": { - "minipass": "^5.0.0" + "minipass": "^7.0.3" }, "engines": { "node": "^14.17.0 || ^16.13.0 || >=18.0.0" @@ -7050,9 +7106,9 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001519", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001519.tgz", - "integrity": "sha512-0QHgqR+Jv4bxHMp8kZ1Kn8CH55OikjKJ6JmKkZYP1F3D7w+lnFXF70nG5eNfsZS89jadi5Ywy5UCSKLAglIRkg==", + "version": "1.0.30001546", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001546.tgz", + "integrity": "sha512-zvtSJwuQFpewSyRrI3AsftF6rM0X80mZkChIt1spBGEvRglCrjTniXvinc8JKRoqTwXAgvqTImaN9igfSMtUBw==", "dev": true, "funding": [ { @@ -7176,9 +7232,9 @@ } }, "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": [ { @@ -7246,14 +7302,17 @@ } }, "node_modules/cliui": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", - "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", + "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, "dependencies": { "string-width": "^4.2.0", - "strip-ansi": "^6.0.0", + "strip-ansi": "^6.0.1", "wrap-ansi": "^7.0.0" + }, + "engines": { + "node": ">=12" } }, "node_modules/clone": { @@ -8278,14 +8337,14 @@ } }, "node_modules/cosmiconfig": { - "version": "8.2.0", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-8.2.0.tgz", - "integrity": "sha512-3rTMnFJA1tCOPwRxtgF4wd7Ab2qvDbL8jX+3smjIbS4HlZBagTlpERbdN7iAbWlrfxE3M8c27kTwTawQ7st+OQ==", + "version": "8.3.6", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-8.3.6.tgz", + "integrity": "sha512-kcZ6+W5QzcJ3P1Mt+83OUv/oHFqZHIx8DuxG6eZ5RGMERoLqp4BuGjhHLYGK+Kf5XVkQvqBSmAy/nGWN3qDgEA==", "dev": true, "dependencies": { - "import-fresh": "^3.2.1", + "import-fresh": "^3.3.0", "js-yaml": "^4.1.0", - "parse-json": "^5.0.0", + "parse-json": "^5.2.0", "path-type": "^4.0.0" }, "engines": { @@ -8293,6 +8352,14 @@ }, "funding": { "url": "https://github.com/sponsors/d-fischer" + }, + "peerDependencies": { + "typescript": ">=4.9.5" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } } }, "node_modules/cosmiconfig-typescript-loader": { @@ -8338,12 +8405,6 @@ "elliptic": "^6.5.3" } }, - "node_modules/create-ecdh/node_modules/bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", - "dev": true - }, "node_modules/create-hash": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz", @@ -8369,6 +8430,97 @@ "sha.js": "^2.4.8" } }, + "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, + "dependencies": { + "@jest/types": "^29.6.3", + "chalk": "^4.0.0", + "exit": "^0.1.2", + "graceful-fs": "^4.2.9", + "jest-config": "^29.7.0", + "jest-util": "^29.7.0", + "prompts": "^2.0.1" + }, + "bin": { + "create-jest": "bin/create-jest.js" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/create-jest/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/create-jest/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, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/create-jest/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/create-jest/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/create-jest/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/create-jest/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==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/create-require": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", @@ -8843,6 +8995,20 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/define-data-property": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.0.tgz", + "integrity": "sha512-UzGwzcjyv3OtAvolTj1GoyNYzfFR+iqbGjcnBEENZVCpM4/Ng1yhGNvS3lR/xDS74Tb2wGG9WzNSNIOS9UVb2g==", + "dev": true, + "dependencies": { + "get-intrinsic": "^1.2.1", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/define-lazy-prop": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz", @@ -8853,11 +9019,12 @@ } }, "node_modules/define-properties": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.0.tgz", - "integrity": "sha512-xvqAVKGfT1+UAvPwKTVw/njhdQ8ZhXK4lI0bCIuCMrp2up9nPnaDftrLtmpTazqd1o+UY4zgzU+avtMbDP+ldA==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz", + "integrity": "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==", "dev": true, "dependencies": { + "define-data-property": "^1.0.1", "has-property-descriptors": "^1.0.0", "object-keys": "^1.1.1" }, @@ -9244,9 +9411,9 @@ } }, "node_modules/diff-sequences": { - "version": "29.4.3", - "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-29.4.3.tgz", - "integrity": "sha512-ofrBgwpPhCD85kMKtE9RYFFq6OC1A89oW2vvgWZNCwxrUpRUILopY7lsYyMDSjc8g6U6aiO0Qubg6r4Wgt5ZnA==", + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-29.6.3.tgz", + "integrity": "sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q==", "dev": true, "engines": { "node": "^14.15.0 || ^16.10.0 || >=18.0.0" @@ -9263,12 +9430,6 @@ "randombytes": "^2.0.0" } }, - "node_modules/diffie-hellman/node_modules/bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", - "dev": true - }, "node_modules/dir-glob": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", @@ -9358,12 +9519,24 @@ } }, "node_modules/dotenv": { + "version": "16.3.1", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.3.1.tgz", + "integrity": "sha512-IPzF4w4/Rd94bA9imS68tZBaYyBWSCE47V1RGuMrB94iyTOIEwRmVL2x/4An+6mETpLrKJ5hQkB8W4kFAadeIQ==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/motdotla/dotenv?sponsor=1" + } + }, + "node_modules/dotenv-expand": { "version": "10.0.0", - "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-10.0.0.tgz", - "integrity": "sha512-rlBi9d8jpv9Sf1klPjNfFAuWDjKLwTIJJ/VxtoTwIR6hnZxcEOQCZg2oIL3MWBYw5GpUDKOEnND7LXTbIpQ03Q==", + "resolved": "https://registry.npmjs.org/dotenv-expand/-/dotenv-expand-10.0.0.tgz", + "integrity": "sha512-GopVGCpVS1UKH75VKHGuQFqS1Gusej0z4FyQkPdwjil2gNIv+LNsqBlboOzpJFZKVT95GkCyWJbBSdFEFUWI2A==", "dev": true, "engines": { - "node": ">=10" + "node": ">=12" } }, "node_modules/duplexer": { @@ -9416,9 +9589,9 @@ } }, "node_modules/electron-to-chromium": { - "version": "1.4.490", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.490.tgz", - "integrity": "sha512-6s7NVJz+sATdYnIwhdshx/N/9O6rvMxmhVoDSDFdj6iA45gHR8EQje70+RYsF4GeB+k0IeNSBnP7yG9ZXJFr7A==", + "version": "1.4.543", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.543.tgz", + "integrity": "sha512-t2ZP4AcGE0iKCCQCBx/K2426crYdxD3YU6l0uK2EO3FZH0pbC4pFz/sZm2ruZsND6hQBTcDWWlo/MLpiOdif5g==", "dev": true }, "node_modules/elliptic": { @@ -9435,11 +9608,6 @@ "minimalistic-crypto-utils": "^1.0.1" } }, - "node_modules/elliptic/node_modules/bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" - }, "node_modules/emittery": { "version": "0.13.1", "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.13.1.tgz", @@ -9617,18 +9785,18 @@ } }, "node_modules/es-abstract": { - "version": "1.22.1", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.22.1.tgz", - "integrity": "sha512-ioRRcXMO6OFyRpyzV3kE1IIBd4WG5/kltnzdxSCqoP8CMGs/Li+M1uF5o7lOkZVFjDs+NLesthnF66Pg/0q0Lw==", + "version": "1.22.2", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.22.2.tgz", + "integrity": "sha512-YoxfFcDmhjOgWPWsV13+2RNjq1F6UQnfs+8TftwNqtzlmFzEXvlUwdrNrYeaizfjQzRMxkZ6ElWMOJIFKdVqwA==", "dev": true, "dependencies": { "array-buffer-byte-length": "^1.0.0", - "arraybuffer.prototype.slice": "^1.0.1", + "arraybuffer.prototype.slice": "^1.0.2", "available-typed-arrays": "^1.0.5", "call-bind": "^1.0.2", "es-set-tostringtag": "^2.0.1", "es-to-primitive": "^1.2.1", - "function.prototype.name": "^1.1.5", + "function.prototype.name": "^1.1.6", "get-intrinsic": "^1.2.1", "get-symbol-description": "^1.0.0", "globalthis": "^1.0.3", @@ -9644,23 +9812,23 @@ "is-regex": "^1.1.4", "is-shared-array-buffer": "^1.0.2", "is-string": "^1.0.7", - "is-typed-array": "^1.1.10", + "is-typed-array": "^1.1.12", "is-weakref": "^1.0.2", "object-inspect": "^1.12.3", "object-keys": "^1.1.1", "object.assign": "^4.1.4", - "regexp.prototype.flags": "^1.5.0", - "safe-array-concat": "^1.0.0", + "regexp.prototype.flags": "^1.5.1", + "safe-array-concat": "^1.0.1", "safe-regex-test": "^1.0.0", - "string.prototype.trim": "^1.2.7", - "string.prototype.trimend": "^1.0.6", - "string.prototype.trimstart": "^1.0.6", + "string.prototype.trim": "^1.2.8", + "string.prototype.trimend": "^1.0.7", + "string.prototype.trimstart": "^1.0.7", "typed-array-buffer": "^1.0.0", "typed-array-byte-length": "^1.0.0", "typed-array-byte-offset": "^1.0.0", "typed-array-length": "^1.0.4", "unbox-primitive": "^1.0.2", - "which-typed-array": "^1.1.10" + "which-typed-array": "^1.1.11" }, "engines": { "node": ">= 0.4" @@ -9670,9 +9838,9 @@ } }, "node_modules/es-module-lexer": { - "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==", + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.3.1.tgz", + "integrity": "sha512-JUFAyicQV9mXc3YRxPnDlrfBKpqt6hUYzz9/boprUJHs4e4KVr3XwOF70doO6gwXUor6EWZJAyWAfKki84t20Q==", "dev": true }, "node_modules/es-set-tostringtag": { @@ -9715,16 +9883,10 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/es6-object-assign": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/es6-object-assign/-/es6-object-assign-1.1.0.tgz", - "integrity": "sha512-MEl9uirslVwqQU369iHNWZXsI8yaZYGg/D65aOgZkeyFJwHYSxilf7rQzXKI7DdDuBPrBXbfk3sl9hJhmd5AUw==", - "dev": true - }, "node_modules/esbuild": { - "version": "0.19.0", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.19.0.tgz", - "integrity": "sha512-i7i8TP4vuG55bKeLyqqk5sTPu1ZjPH3wkcLvAj/0X/222iWFo3AJUYRKjbOoY6BWFMH3teizxHEdV9Su5ESl0w==", + "version": "0.19.4", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.19.4.tgz", + "integrity": "sha512-x7jL0tbRRpv4QUyuDMjONtWFciygUxWaUM1kMX2zWxI0X2YWOt7MSA0g4UdeSiHM8fcYVzpQhKYOycZwxTdZkA==", "dev": true, "hasInstallScript": true, "bin": { @@ -9734,38 +9896,38 @@ "node": ">=12" }, "optionalDependencies": { - "@esbuild/android-arm": "0.19.0", - "@esbuild/android-arm64": "0.19.0", - "@esbuild/android-x64": "0.19.0", - "@esbuild/darwin-arm64": "0.19.0", - "@esbuild/darwin-x64": "0.19.0", - "@esbuild/freebsd-arm64": "0.19.0", - "@esbuild/freebsd-x64": "0.19.0", - "@esbuild/linux-arm": "0.19.0", - "@esbuild/linux-arm64": "0.19.0", - "@esbuild/linux-ia32": "0.19.0", - "@esbuild/linux-loong64": "0.19.0", - "@esbuild/linux-mips64el": "0.19.0", - "@esbuild/linux-ppc64": "0.19.0", - "@esbuild/linux-riscv64": "0.19.0", - "@esbuild/linux-s390x": "0.19.0", - "@esbuild/linux-x64": "0.19.0", - "@esbuild/netbsd-x64": "0.19.0", - "@esbuild/openbsd-x64": "0.19.0", - "@esbuild/sunos-x64": "0.19.0", - "@esbuild/win32-arm64": "0.19.0", - "@esbuild/win32-ia32": "0.19.0", - "@esbuild/win32-x64": "0.19.0" + "@esbuild/android-arm": "0.19.4", + "@esbuild/android-arm64": "0.19.4", + "@esbuild/android-x64": "0.19.4", + "@esbuild/darwin-arm64": "0.19.4", + "@esbuild/darwin-x64": "0.19.4", + "@esbuild/freebsd-arm64": "0.19.4", + "@esbuild/freebsd-x64": "0.19.4", + "@esbuild/linux-arm": "0.19.4", + "@esbuild/linux-arm64": "0.19.4", + "@esbuild/linux-ia32": "0.19.4", + "@esbuild/linux-loong64": "0.19.4", + "@esbuild/linux-mips64el": "0.19.4", + "@esbuild/linux-ppc64": "0.19.4", + "@esbuild/linux-riscv64": "0.19.4", + "@esbuild/linux-s390x": "0.19.4", + "@esbuild/linux-x64": "0.19.4", + "@esbuild/netbsd-x64": "0.19.4", + "@esbuild/openbsd-x64": "0.19.4", + "@esbuild/sunos-x64": "0.19.4", + "@esbuild/win32-arm64": "0.19.4", + "@esbuild/win32-ia32": "0.19.4", + "@esbuild/win32-x64": "0.19.4" } }, "node_modules/esbuild-loader": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/esbuild-loader/-/esbuild-loader-4.0.0.tgz", - "integrity": "sha512-J7TJWyHV2YHmflZaXLZ0Vf4wYmixDyGTw26bt4Ok+XOqSyYA4VWAVt2zJGqIfCA7TwZRDKN8hvus4akN2yAbmA==", + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/esbuild-loader/-/esbuild-loader-4.0.2.tgz", + "integrity": "sha512-kj88m0yrtTEJDeUEF+3TZsq7t9VPzQQj7UmXAzUbIaipoYSrd0UxKAcg4l9CBgP8uVoploiw+nKr8DIv6Y9gXw==", "dev": true, "dependencies": { "esbuild": "^0.19.0", - "get-tsconfig": "^4.6.2", + "get-tsconfig": "^4.7.0", "loader-utils": "^2.0.4", "webpack-sources": "^1.4.3" }, @@ -9820,16 +9982,16 @@ } }, "node_modules/eslint": { - "version": "8.46.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.46.0.tgz", - "integrity": "sha512-cIO74PvbW0qU8e0mIvk5IV3ToWdCq5FYG6gWPHHkx6gNdjlbAYvtfHmlCMXxjcoVaIdwy/IAt3+mDkZkfvb2Dg==", + "version": "8.50.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.50.0.tgz", + "integrity": "sha512-FOnOGSuFuFLv/Sa+FDVRZl4GGVAAFFi8LecRsI5a1tMO5HIE8nCm4ivAlzt4dT3ol/PaaGC0rJEEXQmHJBGoOg==", "dev": true, "dependencies": { "@eslint-community/eslint-utils": "^4.2.0", "@eslint-community/regexpp": "^4.6.1", - "@eslint/eslintrc": "^2.1.1", - "@eslint/js": "^8.46.0", - "@humanwhocodes/config-array": "^0.11.10", + "@eslint/eslintrc": "^2.1.2", + "@eslint/js": "8.50.0", + "@humanwhocodes/config-array": "^0.11.11", "@humanwhocodes/module-importer": "^1.0.1", "@nodelib/fs.walk": "^1.2.8", "ajv": "^6.12.4", @@ -9839,7 +10001,7 @@ "doctrine": "^3.0.0", "escape-string-regexp": "^4.0.0", "eslint-scope": "^7.2.2", - "eslint-visitor-keys": "^3.4.2", + "eslint-visitor-keys": "^3.4.3", "espree": "^9.6.1", "esquery": "^1.4.2", "esutils": "^2.0.2", @@ -9906,9 +10068,9 @@ } }, "node_modules/eslint-import-resolver-typescript": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/eslint-import-resolver-typescript/-/eslint-import-resolver-typescript-3.6.0.tgz", - "integrity": "sha512-QTHR9ddNnn35RTxlaEnx2gCxqFlF2SEN0SE2d17SqwyM7YOSI2GHWRYp5BiRkObTUNYPupC/3Fq2a0PpT+EKpg==", + "version": "3.6.1", + "resolved": "https://registry.npmjs.org/eslint-import-resolver-typescript/-/eslint-import-resolver-typescript-3.6.1.tgz", + "integrity": "sha512-xgdptdoi5W3niYeuQxKmzVDTATvLYqhpwmykwsh7f6HIOStGWEIL9iqZgQDF9u9OEzrRwR8no5q2VT+bjAujTg==", "dev": true, "dependencies": { "debug": "^4.3.4", @@ -9976,9 +10138,9 @@ } }, "node_modules/eslint-plugin-import": { - "version": "2.28.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.28.0.tgz", - "integrity": "sha512-B8s/n+ZluN7sxj9eUf7/pRFERX0r5bnFA2dCaLHy2ZeaQEAz0k+ZZkFWRFHJAqxfxQDx6KLv9LeIki7cFdwW+Q==", + "version": "2.28.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.28.1.tgz", + "integrity": "sha512-9I9hFlITvOV55alzoKBI+K9q74kv0iKMeY6av5+umsNwayt59fz692daGyjR+oStBQgx6nwR9rXldDev3Clw+A==", "dev": true, "dependencies": { "array-includes": "^3.1.6", @@ -9990,13 +10152,12 @@ "eslint-import-resolver-node": "^0.3.7", "eslint-module-utils": "^2.8.0", "has": "^1.0.3", - "is-core-module": "^2.12.1", + "is-core-module": "^2.13.0", "is-glob": "^4.0.3", "minimatch": "^3.1.2", "object.fromentries": "^2.0.6", "object.groupby": "^1.0.0", "object.values": "^1.1.6", - "resolve": "^1.22.3", "semver": "^6.3.1", "tsconfig-paths": "^3.14.2" }, @@ -10166,9 +10327,9 @@ } }, "node_modules/eslint-visitor-keys": { - "version": "3.4.2", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.2.tgz", - "integrity": "sha512-8drBzUEyZ2llkpCA67iYrgEssKDUu68V8ChqqOfFupIaG/LCVPUT+CoGJpT77zJprs4T/W7p07LP7zAIMuweVw==", + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", + "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", "dev": true, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" @@ -10177,6 +10338,22 @@ "url": "https://opencollective.com/eslint" } }, + "node_modules/eslint/node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "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" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, "node_modules/eslint/node_modules/ansi-styles": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", @@ -10265,6 +10442,12 @@ "js-yaml": "bin/js-yaml.js" } }, + "node_modules/eslint/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 + }, "node_modules/eslint/node_modules/supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", @@ -10414,17 +10597,16 @@ } }, "node_modules/expect": { - "version": "29.6.2", - "resolved": "https://registry.npmjs.org/expect/-/expect-29.6.2.tgz", - "integrity": "sha512-iAErsLxJ8C+S02QbLAwgSGSezLQK+XXRDt8IuFXFpwCNw2ECmzZSmjKcCaFVp5VRMk+WAvz6h6jokzEzBFZEuA==", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/expect/-/expect-29.7.0.tgz", + "integrity": "sha512-2Zks0hf1VLFYI1kbh0I5jP3KHHyCHpkfyHBzsSXRFgl/Bg9mWYfMW8oD+PdMPlEwy5HNsR9JutYy6pMeOh61nw==", "dev": true, "dependencies": { - "@jest/expect-utils": "^29.6.2", - "@types/node": "*", - "jest-get-type": "^29.4.3", - "jest-matcher-utils": "^29.6.2", - "jest-message-util": "^29.6.2", - "jest-util": "^29.6.2" + "@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" }, "engines": { "node": "^14.15.0 || ^16.10.0 || >=18.0.0" @@ -10812,16 +10994,17 @@ } }, "node_modules/flat-cache": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", - "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.1.0.tgz", + "integrity": "sha512-OHx4Qwrrt0E4jEIcI5/Xb+f+QmJYNj2rrK8wiIdQOIrB9WrrJL8cjZvXdXuBTkkEwEqLycb5BeZDV1o2i9bTew==", "dev": true, "dependencies": { - "flatted": "^3.1.0", + "flatted": "^3.2.7", + "keyv": "^4.5.3", "rimraf": "^3.0.2" }, "engines": { - "node": "^10.12.0 || >=12.0.0" + "node": ">=12.0.0" } }, "node_modules/flat-cache/node_modules/rimraf": { @@ -10840,9 +11023,9 @@ } }, "node_modules/flatted": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.7.tgz", - "integrity": "sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==", + "version": "3.2.9", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.9.tgz", + "integrity": "sha512-36yxDn5H7OFZQla0/jFJmbIKTdZAQHngCedGxiMmpNfEZM0sdEeT+WczLQrjK6D7o2aiyLYDnkw0R3JK0Qv1RQ==", "dev": true }, "node_modules/flatten": { @@ -10858,9 +11041,9 @@ "integrity": "sha512-GRnmB5gPyJpAhTQdSZTSp9uaPSvl09KoYcMQtsB9rQoOmzs9dH6ffeccH+Z+cv6P68Hu5bC6JjRh4Ah/mHSNRw==" }, "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.15.3", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.3.tgz", + "integrity": "sha512-1VzOtuEM8pC9SFU1E+8KfTjZyMztRsgEfwQl44z8A25uy13jSzTj6dyK2Df52iV0vgHCfBwLhDWevLn95w5v6Q==", "dev": true, "funding": [ { @@ -10923,9 +11106,9 @@ } }, "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.0", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", + "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", "dev": true, "dependencies": { "asynckit": "^0.4.0", @@ -10979,17 +11162,26 @@ } }, "node_modules/fs-minipass": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-3.0.2.tgz", - "integrity": "sha512-2GAfyfoaCDRrM6jaOS3UsBts8yJ55VioXdWcOL7dK9zdAuKT71+WBA4ifnNYqVjYv+4SsPxjK0JT4yIIn4cA/g==", + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-3.0.3.tgz", + "integrity": "sha512-XUBA9XClHbnJWSfBzjkm6RvPsyg3sryZt06BEQoXcF7EK/xpGaQYJgQKDJSUH5SGZ76Y7pFx1QBnXz09rU5Fbw==", "dev": true, "dependencies": { - "minipass": "^5.0.0" + "minipass": "^7.0.3" }, "engines": { "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, + "node_modules/fs-minipass/node_modules/minipass": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.0.4.tgz", + "integrity": "sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ==", + "dev": true, + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, "node_modules/fs.realpath": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", @@ -10997,9 +11189,9 @@ "dev": true }, "node_modules/fsevents": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", - "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", "dev": true, "hasInstallScript": true, "optional": true, @@ -11016,15 +11208,15 @@ "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" }, "node_modules/function.prototype.name": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.5.tgz", - "integrity": "sha512-uN7m/BzVKQnCUF/iW8jYea67v++2u7m5UgENbHRtdDVclOUP+FMPlCNdmk0h/ysGyo2tavMJEDqJAkJdRa1vMA==", + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.6.tgz", + "integrity": "sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg==", "dev": true, "dependencies": { "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.19.0", - "functions-have-names": "^1.2.2" + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "functions-have-names": "^1.2.3" }, "engines": { "node": ">= 0.4" @@ -11148,6 +11340,17 @@ "node": ">=6.9.0" } }, + "node_modules/get-pkg-repo/node_modules/cliui": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", + "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", + "dev": true, + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^7.0.0" + } + }, "node_modules/get-pkg-repo/node_modules/isarray": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", @@ -11253,9 +11456,9 @@ } }, "node_modules/get-tsconfig": { - "version": "4.7.0", - "resolved": "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.7.0.tgz", - "integrity": "sha512-pmjiZ7xtB8URYm74PlGJozDNyhvsVLUcpBa8DZBG3bWHwaHa9bPiRpiSfovw+fjhwONSCWKRyk+JQHEGZmMrzw==", + "version": "4.7.2", + "resolved": "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.7.2.tgz", + "integrity": "sha512-wuMsz4leaj5hbGgg4IvDU0bqJagpftG5l5cXIAvo8uZrqn0NJqwtfupTN00VnkQJPcIRrxYrm1Ue24btpCha2A==", "dev": true, "dependencies": { "resolve-pkg-maps": "^1.0.0" @@ -11710,9 +11913,9 @@ } }, "node_modules/globals": { - "version": "13.20.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.20.0.tgz", - "integrity": "sha512-Qg5QtVkCy/kv3FUSlu4ukeZDVf9ee0iXLAUYX13gbR17bnejFTzr4iS9bY7kwCf1NztRNm1t91fjOiyx4CSwPQ==", + "version": "13.23.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.23.0.tgz", + "integrity": "sha512-XAmF0RjlrjY23MA51q3HltdlGxUpXPvg0GioKiD9X6HD28iMjo2dKC8Vqwm7lne4GNr78+RHTfliktR6ZH09wA==", "dev": true, "dependencies": { "type-fest": "^0.20.2" @@ -11861,6 +12064,26 @@ "node": ">=6" } }, + "node_modules/har-validator/node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "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" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/har-validator/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==" + }, "node_modules/hard-rejection": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/hard-rejection/-/hard-rejection-2.1.0.tgz", @@ -11871,12 +12094,9 @@ } }, "node_modules/has": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", - "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", - "dependencies": { - "function-bind": "^1.1.1" - }, + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.4.tgz", + "integrity": "sha512-qdSAmqLF6209RFj4VVItywPMbm3vWylknmB3nvNiUIs72xAimcM8nVYxYr7ncvZq5qzk9MKIZR8ijqD/1QuYjQ==", "engines": { "node": ">= 0.4.0" } @@ -12519,6 +12739,17 @@ "url": "https://github.com/chalk/chalk?sponsor=1" } }, + "node_modules/inspectpack/node_modules/cliui": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", + "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", + "dev": true, + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^7.0.0" + } + }, "node_modules/inspectpack/node_modules/color-convert": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", @@ -13193,28 +13424,19 @@ } }, "node_modules/istanbul-lib-instrument": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-5.2.1.tgz", - "integrity": "sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg==", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-6.0.1.tgz", + "integrity": "sha512-EAMEJBsYuyyztxMxW3g7ugGPkrZsV57v0Hmv3mm1uQsmB+QnZuepg731CRaIgeUVSdmsTngOkSnauNF8p7FIhA==", "dev": true, "dependencies": { "@babel/core": "^7.12.3", "@babel/parser": "^7.14.7", "@istanbuljs/schema": "^0.1.2", "istanbul-lib-coverage": "^3.2.0", - "semver": "^6.3.0" + "semver": "^7.5.4" }, "engines": { - "node": ">=8" - } - }, - "node_modules/istanbul-lib-instrument/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": ">=10" } }, "node_modules/istanbul-lib-report": { @@ -13280,9 +13502,9 @@ } }, "node_modules/jackspeak": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-2.2.3.tgz", - "integrity": "sha512-pF0kfjmg8DJLxDrizHoCZGUFz4P4czQ3HyfW4BU0ffebYkzAVlBywp5zaxW/TM+r0sGbmrQdi8EQQVTJFxnGsQ==", + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-2.3.6.tgz", + "integrity": "sha512-N3yCS/NegsOBokc8GAdM8UcmfsKiSS8cipheD/nivzr700H+nsMOxJjQnvwOcRYVuFkdH0wGUvW2WbXGmrZGbQ==", "dev": true, "dependencies": { "@isaacs/cliui": "^8.0.2" @@ -13386,15 +13608,15 @@ } }, "node_modules/jest": { - "version": "29.6.2", - "resolved": "https://registry.npmjs.org/jest/-/jest-29.6.2.tgz", - "integrity": "sha512-8eQg2mqFbaP7CwfsTpCxQ+sHzw1WuNWL5UUvjnWP4hx2riGz9fPSzYOaU5q8/GqWn1TfgZIVTqYJygbGbWAANg==", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest/-/jest-29.7.0.tgz", + "integrity": "sha512-NIy3oAFp9shda19hy4HK0HRTWKtPJmGdnvywu01nOqNC2vZg+Z+fvJDxpMQA88eb2I9EcafcdjYgsDthnYTvGw==", "dev": true, "dependencies": { - "@jest/core": "^29.6.2", - "@jest/types": "^29.6.1", + "@jest/core": "^29.7.0", + "@jest/types": "^29.6.3", "import-local": "^3.0.2", - "jest-cli": "^29.6.2" + "jest-cli": "^29.7.0" }, "bin": { "jest": "bin/jest.js" @@ -13412,12 +13634,13 @@ } }, "node_modules/jest-changed-files": { - "version": "29.5.0", - "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-29.5.0.tgz", - "integrity": "sha512-IFG34IUMUaNBIxjQXF/iu7g6EcdMrGRRxaUSw92I/2g2YC6vCdTltl4nHvt7Ci5nSJwXIkCu8Ka1DKF+X7Z1Ag==", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-29.7.0.tgz", + "integrity": "sha512-fEArFiwf1BpQ+4bXSprcDc3/x4HSzL4al2tozwVpDFpsxALjLYdyiIK4e5Vz66GQJIbXJ82+35PtysofptNX2w==", "dev": true, "dependencies": { "execa": "^5.0.0", + "jest-util": "^29.7.0", "p-limit": "^3.1.0" }, "engines": { @@ -13440,28 +13663,28 @@ } }, "node_modules/jest-circus": { - "version": "29.6.2", - "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-29.6.2.tgz", - "integrity": "sha512-G9mN+KOYIUe2sB9kpJkO9Bk18J4dTDArNFPwoZ7WKHKel55eKIS/u2bLthxgojwlf9NLCVQfgzM/WsOVvoC6Fw==", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-29.7.0.tgz", + "integrity": "sha512-3E1nCMgipcTkCocFwM90XXQab9bS+GMsjdpmPrlelaxwD93Ad8iVEjX/vvHPdLPnFf+L40u+5+iutRdA1N9myw==", "dev": true, "dependencies": { - "@jest/environment": "^29.6.2", - "@jest/expect": "^29.6.2", - "@jest/test-result": "^29.6.2", - "@jest/types": "^29.6.1", + "@jest/environment": "^29.7.0", + "@jest/expect": "^29.7.0", + "@jest/test-result": "^29.7.0", + "@jest/types": "^29.6.3", "@types/node": "*", "chalk": "^4.0.0", "co": "^4.6.0", "dedent": "^1.0.0", "is-generator-fn": "^2.0.0", - "jest-each": "^29.6.2", - "jest-matcher-utils": "^29.6.2", - "jest-message-util": "^29.6.2", - "jest-runtime": "^29.6.2", - "jest-snapshot": "^29.6.2", - "jest-util": "^29.6.2", + "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.6.2", + "pretty-format": "^29.7.0", "pure-rand": "^6.0.0", "slash": "^3.0.0", "stack-utils": "^2.0.3" @@ -13556,22 +13779,21 @@ } }, "node_modules/jest-cli": { - "version": "29.6.2", - "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-29.6.2.tgz", - "integrity": "sha512-TT6O247v6dCEX2UGHGyflMpxhnrL0DNqP2fRTKYm3nJJpCTfXX3GCMQPGFjXDoj0i5/Blp3jriKXFgdfmbYB6Q==", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-29.7.0.tgz", + "integrity": "sha512-OVVobw2IubN/GSYsxETi+gOe7Ka59EFMR/twOU3Jb2GnKKeMGJB5SGUUrEz3SFVmJASUdZUzy83sLNNQ2gZslg==", "dev": true, "dependencies": { - "@jest/core": "^29.6.2", - "@jest/test-result": "^29.6.2", - "@jest/types": "^29.6.1", + "@jest/core": "^29.7.0", + "@jest/test-result": "^29.7.0", + "@jest/types": "^29.6.3", "chalk": "^4.0.0", + "create-jest": "^29.7.0", "exit": "^0.1.2", - "graceful-fs": "^4.2.9", "import-local": "^3.0.2", - "jest-config": "^29.6.2", - "jest-util": "^29.6.2", - "jest-validate": "^29.6.2", - "prompts": "^2.0.1", + "jest-config": "^29.7.0", + "jest-util": "^29.7.0", + "jest-validate": "^29.7.0", "yargs": "^17.3.1" }, "bin": { @@ -13660,31 +13882,31 @@ } }, "node_modules/jest-config": { - "version": "29.6.2", - "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-29.6.2.tgz", - "integrity": "sha512-VxwFOC8gkiJbuodG9CPtMRjBUNZEHxwfQXmIudSTzFWxaci3Qub1ddTRbFNQlD/zUeaifLndh/eDccFX4wCMQw==", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-29.7.0.tgz", + "integrity": "sha512-uXbpfeQ7R6TZBqI3/TxCU4q4ttk3u0PJeC+E0zbfSoSjq6bJ7buBPxzQPL0ifrkY4DNu4JUdk0ImlBUYi840eQ==", "dev": true, "dependencies": { "@babel/core": "^7.11.6", - "@jest/test-sequencer": "^29.6.2", - "@jest/types": "^29.6.1", - "babel-jest": "^29.6.2", + "@jest/test-sequencer": "^29.7.0", + "@jest/types": "^29.6.3", + "babel-jest": "^29.7.0", "chalk": "^4.0.0", "ci-info": "^3.2.0", "deepmerge": "^4.2.2", "glob": "^7.1.3", "graceful-fs": "^4.2.9", - "jest-circus": "^29.6.2", - "jest-environment-node": "^29.6.2", - "jest-get-type": "^29.4.3", - "jest-regex-util": "^29.4.3", - "jest-resolve": "^29.6.2", - "jest-runner": "^29.6.2", - "jest-util": "^29.6.2", - "jest-validate": "^29.6.2", + "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.4", "parse-json": "^5.2.0", - "pretty-format": "^29.6.2", + "pretty-format": "^29.7.0", "slash": "^3.0.0", "strip-json-comments": "^3.1.1" }, @@ -13775,15 +13997,15 @@ } }, "node_modules/jest-diff": { - "version": "29.6.2", - "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-29.6.2.tgz", - "integrity": "sha512-t+ST7CB9GX5F2xKwhwCf0TAR17uNDiaPTZnVymP9lw0lssa9vG+AFyDZoeIHStU3WowFFwT+ky+er0WVl2yGhA==", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-29.7.0.tgz", + "integrity": "sha512-LMIgiIrhigmPrs03JHpxUh2yISK3vLFPkAodPeo0+BuF7wA2FoQbkEg1u8gBYBThncu7e1oEDUfIXVuTqLRUjw==", "dev": true, "dependencies": { "chalk": "^4.0.0", - "diff-sequences": "^29.4.3", - "jest-get-type": "^29.4.3", - "pretty-format": "^29.6.2" + "diff-sequences": "^29.6.3", + "jest-get-type": "^29.6.3", + "pretty-format": "^29.7.0" }, "engines": { "node": "^14.15.0 || ^16.10.0 || >=18.0.0" @@ -13860,9 +14082,9 @@ } }, "node_modules/jest-docblock": { - "version": "29.4.3", - "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-29.4.3.tgz", - "integrity": "sha512-fzdTftThczeSD9nZ3fzA/4KkHtnmllawWrXO69vtI+L9WjEIuXWs4AmyME7lN5hU7dB0sHhuPfcKofRsUb/2Fg==", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-29.7.0.tgz", + "integrity": "sha512-q617Auw3A612guyaFgsbFeYpNP5t2aoUNLwBUbc/0kD1R4t9ixDbyFTHd1nok4epoVFpr7PmeWHrhvuV3XaJ4g==", "dev": true, "dependencies": { "detect-newline": "^3.0.0" @@ -13872,16 +14094,16 @@ } }, "node_modules/jest-each": { - "version": "29.6.2", - "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-29.6.2.tgz", - "integrity": "sha512-MsrsqA0Ia99cIpABBc3izS1ZYoYfhIy0NNWqPSE0YXbQjwchyt6B1HD2khzyPe1WiJA7hbxXy77ZoUQxn8UlSw==", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-29.7.0.tgz", + "integrity": "sha512-gns+Er14+ZrEoC5fhOfYCY1LOHHr0TI+rQUHZS8Ttw2l7gl+80eHc/gFf2Ktkw0+SIACDTeWvpFcv3B04VembQ==", "dev": true, "dependencies": { - "@jest/types": "^29.6.1", + "@jest/types": "^29.6.3", "chalk": "^4.0.0", - "jest-get-type": "^29.4.3", - "jest-util": "^29.6.2", - "pretty-format": "^29.6.2" + "jest-get-type": "^29.6.3", + "jest-util": "^29.7.0", + "pretty-format": "^29.7.0" }, "engines": { "node": "^14.15.0 || ^16.10.0 || >=18.0.0" @@ -13958,17 +14180,17 @@ } }, "node_modules/jest-environment-node": { - "version": "29.6.2", - "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-29.6.2.tgz", - "integrity": "sha512-YGdFeZ3T9a+/612c5mTQIllvWkddPbYcN2v95ZH24oWMbGA4GGS2XdIF92QMhUhvrjjuQWYgUGW2zawOyH63MQ==", + "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, "dependencies": { - "@jest/environment": "^29.6.2", - "@jest/fake-timers": "^29.6.2", - "@jest/types": "^29.6.1", + "@jest/environment": "^29.7.0", + "@jest/fake-timers": "^29.7.0", + "@jest/types": "^29.6.3", "@types/node": "*", - "jest-mock": "^29.6.2", - "jest-util": "^29.6.2" + "jest-mock": "^29.7.0", + "jest-util": "^29.7.0" }, "engines": { "node": "^14.15.0 || ^16.10.0 || >=18.0.0" @@ -13985,29 +14207,29 @@ } }, "node_modules/jest-get-type": { - "version": "29.4.3", - "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-29.4.3.tgz", - "integrity": "sha512-J5Xez4nRRMjk8emnTpWrlkyb9pfRQQanDrvWHhsR1+VUfbwxi30eVcZFlcdGInRibU4G5LwHXpI7IRHU0CY+gg==", + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-29.6.3.tgz", + "integrity": "sha512-zrteXnqYxfQh7l5FHyL38jL39di8H8rHoecLH3JNxH3BwOrBsNeabdap5e0I23lD4HHI8W5VFBZqG4Eaq5LNcw==", "dev": true, "engines": { "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, "node_modules/jest-haste-map": { - "version": "29.6.2", - "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-29.6.2.tgz", - "integrity": "sha512-+51XleTDAAysvU8rT6AnS1ZJ+WHVNqhj1k6nTvN2PYP+HjU3kqlaKQ1Lnw3NYW3bm2r8vq82X0Z1nDDHZMzHVA==", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-29.7.0.tgz", + "integrity": "sha512-fP8u2pyfqx0K1rGn1R9pyE0/KTn+G7PxktWidOBTqFPLYX0b9ksaMFkhK5vrS3DVun09pckLdlx90QthlW7AmA==", "dev": true, "dependencies": { - "@jest/types": "^29.6.1", + "@jest/types": "^29.6.3", "@types/graceful-fs": "^4.1.3", "@types/node": "*", "anymatch": "^3.0.3", "fb-watchman": "^2.0.0", "graceful-fs": "^4.2.9", - "jest-regex-util": "^29.4.3", - "jest-util": "^29.6.2", - "jest-worker": "^29.6.2", + "jest-regex-util": "^29.6.3", + "jest-util": "^29.7.0", + "jest-worker": "^29.7.0", "micromatch": "^4.0.4", "walker": "^1.0.8" }, @@ -14019,28 +14241,28 @@ } }, "node_modules/jest-leak-detector": { - "version": "29.6.2", - "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-29.6.2.tgz", - "integrity": "sha512-aNqYhfp5uYEO3tdWMb2bfWv6f0b4I0LOxVRpnRLAeque2uqOVVMLh6khnTcE2qJ5wAKop0HcreM1btoysD6bPQ==", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-29.7.0.tgz", + "integrity": "sha512-kYA8IJcSYtST2BY9I+SMC32nDpBT3J2NvWJx8+JCuCdl/CR1I4EKUJROiP8XtCcxqgTTBGJNdbB1A8XRKbTetw==", "dev": true, "dependencies": { - "jest-get-type": "^29.4.3", - "pretty-format": "^29.6.2" + "jest-get-type": "^29.6.3", + "pretty-format": "^29.7.0" }, "engines": { "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, "node_modules/jest-matcher-utils": { - "version": "29.6.2", - "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-29.6.2.tgz", - "integrity": "sha512-4LiAk3hSSobtomeIAzFTe+N8kL6z0JtF3n6I4fg29iIW7tt99R7ZcIFW34QkX+DuVrf+CUe6wuVOpm7ZKFJzZQ==", + "version": "29.7.0", + "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, "dependencies": { "chalk": "^4.0.0", - "jest-diff": "^29.6.2", - "jest-get-type": "^29.4.3", - "pretty-format": "^29.6.2" + "jest-diff": "^29.7.0", + "jest-get-type": "^29.6.3", + "pretty-format": "^29.7.0" }, "engines": { "node": "^14.15.0 || ^16.10.0 || >=18.0.0" @@ -14117,18 +14339,18 @@ } }, "node_modules/jest-message-util": { - "version": "29.6.2", - "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-29.6.2.tgz", - "integrity": "sha512-vnIGYEjoPSuRqV8W9t+Wow95SDp6KPX2Uf7EoeG9G99J2OVh7OSwpS4B6J0NfpEIpfkBNHlBZpA2rblEuEFhZQ==", + "version": "29.7.0", + "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, "dependencies": { "@babel/code-frame": "^7.12.13", - "@jest/types": "^29.6.1", + "@jest/types": "^29.6.3", "@types/stack-utils": "^2.0.0", "chalk": "^4.0.0", "graceful-fs": "^4.2.9", "micromatch": "^4.0.4", - "pretty-format": "^29.6.2", + "pretty-format": "^29.7.0", "slash": "^3.0.0", "stack-utils": "^2.0.3" }, @@ -14207,14 +14429,14 @@ } }, "node_modules/jest-mock": { - "version": "29.6.2", - "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-29.6.2.tgz", - "integrity": "sha512-hoSv3lb3byzdKfwqCuT6uTscan471GUECqgNYykg6ob0yiAw3zYc7OrPnI9Qv8Wwoa4lC7AZ9hyS4AiIx5U2zg==", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-29.7.0.tgz", + "integrity": "sha512-ITOMZn+UkYS4ZFh83xYAOzWStloNzJFO2s8DWrE4lhtGD+AorgnbkiKERe4wQVBydIGPx059g6riW5Btp6Llnw==", "dev": true, "dependencies": { - "@jest/types": "^29.6.1", + "@jest/types": "^29.6.3", "@types/node": "*", - "jest-util": "^29.6.2" + "jest-util": "^29.7.0" }, "engines": { "node": "^14.15.0 || ^16.10.0 || >=18.0.0" @@ -14252,26 +14474,26 @@ } }, "node_modules/jest-regex-util": { - "version": "29.4.3", - "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-29.4.3.tgz", - "integrity": "sha512-O4FglZaMmWXbGHSQInfXewIsd1LMn9p3ZXB/6r4FOkyhX2/iP/soMG98jGvk/A3HAN78+5VWcBGO0BJAPRh4kg==", + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-29.6.3.tgz", + "integrity": "sha512-KJJBsRCyyLNWCNBOvZyRDnAIfUiRJ8v+hOBQYGn8gDyF3UegwiP4gwRR3/SDa42g1YbVycTidUF3rKjyLFDWbg==", "dev": true, "engines": { "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, "node_modules/jest-resolve": { - "version": "29.6.2", - "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-29.6.2.tgz", - "integrity": "sha512-G/iQUvZWI5e3SMFssc4ug4dH0aZiZpsDq9o1PtXTV1210Ztyb2+w+ZgQkB3iOiC5SmAEzJBOHWz6Hvrd+QnNPw==", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-29.7.0.tgz", + "integrity": "sha512-IOVhZSrg+UvVAshDSDtHyFCCBUl/Q3AAJv8iZ6ZjnZ74xzvwuzLXid9IIIPgTnY62SJjfuupMKZsZQRsCvxEgA==", "dev": true, "dependencies": { "chalk": "^4.0.0", "graceful-fs": "^4.2.9", - "jest-haste-map": "^29.6.2", + "jest-haste-map": "^29.7.0", "jest-pnp-resolver": "^1.2.2", - "jest-util": "^29.6.2", - "jest-validate": "^29.6.2", + "jest-util": "^29.7.0", + "jest-validate": "^29.7.0", "resolve": "^1.20.0", "resolve.exports": "^2.0.0", "slash": "^3.0.0" @@ -14281,13 +14503,13 @@ } }, "node_modules/jest-resolve-dependencies": { - "version": "29.6.2", - "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-29.6.2.tgz", - "integrity": "sha512-LGqjDWxg2fuQQm7ypDxduLu/m4+4Lb4gczc13v51VMZbVP5tSBILqVx8qfWcsdP8f0G7aIqByIALDB0R93yL+w==", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-29.7.0.tgz", + "integrity": "sha512-un0zD/6qxJ+S0et7WxeI3H5XSe9lTBBR7bOHCHXkKR6luG5mwDDlIzVQ0V5cZCuoTgEdcdwzTghYkTWfubi+nA==", "dev": true, "dependencies": { - "jest-regex-util": "^29.4.3", - "jest-snapshot": "^29.6.2" + "jest-regex-util": "^29.6.3", + "jest-snapshot": "^29.7.0" }, "engines": { "node": "^14.15.0 || ^16.10.0 || >=18.0.0" @@ -14364,30 +14586,30 @@ } }, "node_modules/jest-runner": { - "version": "29.6.2", - "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-29.6.2.tgz", - "integrity": "sha512-wXOT/a0EspYgfMiYHxwGLPCZfC0c38MivAlb2lMEAlwHINKemrttu1uSbcGbfDV31sFaPWnWJPmb2qXM8pqZ4w==", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-29.7.0.tgz", + "integrity": "sha512-fsc4N6cPCAahybGBfTRcq5wFR6fpLznMg47sY5aDpsoejOcVYFb07AHuSnR0liMcPTgBsA3ZJL6kFOjPdoNipQ==", "dev": true, "dependencies": { - "@jest/console": "^29.6.2", - "@jest/environment": "^29.6.2", - "@jest/test-result": "^29.6.2", - "@jest/transform": "^29.6.2", - "@jest/types": "^29.6.1", + "@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": "*", "chalk": "^4.0.0", "emittery": "^0.13.1", "graceful-fs": "^4.2.9", - "jest-docblock": "^29.4.3", - "jest-environment-node": "^29.6.2", - "jest-haste-map": "^29.6.2", - "jest-leak-detector": "^29.6.2", - "jest-message-util": "^29.6.2", - "jest-resolve": "^29.6.2", - "jest-runtime": "^29.6.2", - "jest-util": "^29.6.2", - "jest-watcher": "^29.6.2", - "jest-worker": "^29.6.2", + "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" }, @@ -14481,31 +14703,31 @@ } }, "node_modules/jest-runtime": { - "version": "29.6.2", - "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-29.6.2.tgz", - "integrity": "sha512-2X9dqK768KufGJyIeLmIzToDmsN0m7Iek8QNxRSI/2+iPFYHF0jTwlO3ftn7gdKd98G/VQw9XJCk77rbTGZnJg==", - "dev": true, - "dependencies": { - "@jest/environment": "^29.6.2", - "@jest/fake-timers": "^29.6.2", - "@jest/globals": "^29.6.2", - "@jest/source-map": "^29.6.0", - "@jest/test-result": "^29.6.2", - "@jest/transform": "^29.6.2", - "@jest/types": "^29.6.1", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-29.7.0.tgz", + "integrity": "sha512-gUnLjgwdGqW7B4LvOIkbKs9WGbn+QLqRQQ9juC6HndeDiezIwhDP+mhMwHWCEcfQ5RUXa6OPnFF8BJh5xegwwQ==", + "dev": true, + "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": "*", "chalk": "^4.0.0", "cjs-module-lexer": "^1.0.0", "collect-v8-coverage": "^1.0.0", "glob": "^7.1.3", "graceful-fs": "^4.2.9", - "jest-haste-map": "^29.6.2", - "jest-message-util": "^29.6.2", - "jest-mock": "^29.6.2", - "jest-regex-util": "^29.4.3", - "jest-resolve": "^29.6.2", - "jest-snapshot": "^29.6.2", - "jest-util": "^29.6.2", + "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" }, @@ -14584,9 +14806,9 @@ } }, "node_modules/jest-snapshot": { - "version": "29.6.2", - "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-29.6.2.tgz", - "integrity": "sha512-1OdjqvqmRdGNvWXr/YZHuyhh5DeaLp1p/F8Tht/MrMw4Kr1Uu/j4lRG+iKl1DAqUJDWxtQBMk41Lnf/JETYBRA==", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-29.7.0.tgz", + "integrity": "sha512-Rm0BMWtxBcioHr1/OX5YCP8Uov4riHvKPknOGs804Zg9JGZgmIBkbtlxJC/7Z4msKYVbIJtfU+tKb8xlYNfdkw==", "dev": true, "dependencies": { "@babel/core": "^7.11.6", @@ -14594,20 +14816,20 @@ "@babel/plugin-syntax-jsx": "^7.7.2", "@babel/plugin-syntax-typescript": "^7.7.2", "@babel/types": "^7.3.3", - "@jest/expect-utils": "^29.6.2", - "@jest/transform": "^29.6.2", - "@jest/types": "^29.6.1", + "@jest/expect-utils": "^29.7.0", + "@jest/transform": "^29.7.0", + "@jest/types": "^29.6.3", "babel-preset-current-node-syntax": "^1.0.0", "chalk": "^4.0.0", - "expect": "^29.6.2", + "expect": "^29.7.0", "graceful-fs": "^4.2.9", - "jest-diff": "^29.6.2", - "jest-get-type": "^29.4.3", - "jest-matcher-utils": "^29.6.2", - "jest-message-util": "^29.6.2", - "jest-util": "^29.6.2", + "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.6.2", + "pretty-format": "^29.7.0", "semver": "^7.5.3" }, "engines": { @@ -14685,12 +14907,12 @@ } }, "node_modules/jest-util": { - "version": "29.6.2", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.6.2.tgz", - "integrity": "sha512-3eX1qb6L88lJNCFlEADKOkjpXJQyZRiavX1INZ4tRnrBVr2COd3RgcTLyUiEXMNBlDU/cgYq6taUS0fExrWW4w==", + "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, "dependencies": { - "@jest/types": "^29.6.1", + "@jest/types": "^29.6.3", "@types/node": "*", "chalk": "^4.0.0", "ci-info": "^3.2.0", @@ -14772,17 +14994,17 @@ } }, "node_modules/jest-validate": { - "version": "29.6.2", - "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-29.6.2.tgz", - "integrity": "sha512-vGz0yMN5fUFRRbpJDPwxMpgSXW1LDKROHfBopAvDcmD6s+B/s8WJrwi+4bfH4SdInBA5C3P3BI19dBtKzx1Arg==", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-29.7.0.tgz", + "integrity": "sha512-ZB7wHqaRGVw/9hST/OuFUReG7M8vKeq0/J2egIGLdvjHCmYqGARhzXmtgi+gVeZ5uXFF219aOc3Ls2yLg27tkw==", "dev": true, "dependencies": { - "@jest/types": "^29.6.1", + "@jest/types": "^29.6.3", "camelcase": "^6.2.0", "chalk": "^4.0.0", - "jest-get-type": "^29.4.3", + "jest-get-type": "^29.6.3", "leven": "^3.1.0", - "pretty-format": "^29.6.2" + "pretty-format": "^29.7.0" }, "engines": { "node": "^14.15.0 || ^16.10.0 || >=18.0.0" @@ -14871,18 +15093,18 @@ } }, "node_modules/jest-watcher": { - "version": "29.6.2", - "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-29.6.2.tgz", - "integrity": "sha512-GZitlqkMkhkefjfN/p3SJjrDaxPflqxEAv3/ik10OirZqJGYH5rPiIsgVcfof0Tdqg3shQGdEIxDBx+B4tuLzA==", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-29.7.0.tgz", + "integrity": "sha512-49Fg7WXkU3Vl2h6LbLtMQ/HyB6rXSIX7SqvBLQmssRBGN9I0PNvPmAmCWSOY6SOvrjhI/F7/bGAv9RtnsPA03g==", "dev": true, "dependencies": { - "@jest/test-result": "^29.6.2", - "@jest/types": "^29.6.1", + "@jest/test-result": "^29.7.0", + "@jest/types": "^29.6.3", "@types/node": "*", "ansi-escapes": "^4.2.1", "chalk": "^4.0.0", "emittery": "^0.13.1", - "jest-util": "^29.6.2", + "jest-util": "^29.7.0", "string-length": "^4.0.1" }, "engines": { @@ -14960,13 +15182,13 @@ } }, "node_modules/jest-worker": { - "version": "29.6.2", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-29.6.2.tgz", - "integrity": "sha512-l3ccBOabTdkng8I/ORCkADz4eSMKejTYv1vB/Z83UiubqhC1oQ5Li6dWCyqOIvSifGjUBxuvxvlm6KGK2DtuAQ==", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-29.7.0.tgz", + "integrity": "sha512-eIz2msL/EzL9UFTFFx7jBTkeZfku0yUAyZZZmJ93H2TYEiroIx2PQjEXcwYtYl8zXCxb+PAmA2hLIt/6ZEkPHw==", "dev": true, "dependencies": { "@types/node": "*", - "jest-util": "^29.6.2", + "jest-util": "^29.7.0", "merge-stream": "^2.0.0", "supports-color": "^8.0.0" }, @@ -15077,6 +15299,20 @@ "node": ">= 6" } }, + "node_modules/jsdom/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==", + "dev": true, + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 6" + } + }, "node_modules/jsdom/node_modules/http-proxy-agent": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz", @@ -15138,6 +15374,12 @@ "node": ">=4" } }, + "node_modules/json-buffer": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", + "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", + "dev": true + }, "node_modules/json-parse-better-errors": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", @@ -15156,9 +15398,10 @@ "integrity": "sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==" }, "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 }, "node_modules/json-stable-stringify-without-jsonify": { "version": "1.0.1", @@ -15263,11 +15506,15 @@ "elliptic": "^6.4.1" } }, - "node_modules/key-encoder/node_modules/bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" - }, + "node_modules/keyv": { + "version": "4.5.3", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.3.tgz", + "integrity": "sha512-QCiSav9WaX1PgETJ+SpNnx2PRRapJ/oRSXM4VO5OGYGSjrxbKPVFVhB3l2OCbLCk329N8qyAtsJjSjvVBWzEug==", + "dev": true, + "dependencies": { + "json-buffer": "3.0.1" + } + }, "node_modules/kind-of": { "version": "6.0.3", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", @@ -15292,13 +15539,13 @@ "integrity": "sha512-Xq9nH7KlWZmXAtodXDDRE7vs6DU1gTU8zYDHDiWLSip45Egwq3plLHzPn27NgvzL2r1LMPC1vdqh98sQxtqj4A==" }, "node_modules/lerna": { - "version": "7.1.5", - "resolved": "https://registry.npmjs.org/lerna/-/lerna-7.1.5.tgz", - "integrity": "sha512-5bvfmoIH4Czk5mdoLaRPYkM3M63Ei6+TOuXs3MgXmvqD8vs+vQpHuBVmiYFp5Mwsck3FkidJ+eTxfucltA2Lmw==", + "version": "7.3.0", + "resolved": "https://registry.npmjs.org/lerna/-/lerna-7.3.0.tgz", + "integrity": "sha512-Dt8TH+J+c9+3MhTYcm5OxnNzXb87WG7GPNj3kidjYJjJY7KxIMDNU37qBTYRWA1h3wAeNKBplXVQYUPkGcYgkQ==", "dev": true, "dependencies": { - "@lerna/child-process": "7.1.5", - "@lerna/create": "7.1.5", + "@lerna/child-process": "7.3.0", + "@lerna/create": "7.3.0", "@npmcli/run-script": "6.0.2", "@nx/devkit": ">=16.5.1 < 17", "@octokit/plugin-enterprise-rest": "6.0.1", @@ -15335,7 +15582,7 @@ "libnpmpublish": "7.3.0", "load-json-file": "6.2.0", "lodash": "^4.17.21", - "make-dir": "3.1.0", + "make-dir": "4.0.0", "minimatch": "3.0.5", "multimatch": "5.0.0", "node-fetch": "2.6.7", @@ -15417,6 +15664,34 @@ "url": "https://github.com/chalk/chalk?sponsor=1" } }, + "node_modules/lerna/node_modules/cliui": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", + "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", + "dev": true, + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^7.0.0" + } + }, + "node_modules/lerna/node_modules/cliui/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, + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, "node_modules/lerna/node_modules/color-convert": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", @@ -15628,30 +15903,6 @@ "graceful-fs": "^4.1.6" } }, - "node_modules/lerna/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==", - "dev": true, - "dependencies": { - "semver": "^6.0.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/lerna/node_modules/make-dir/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/lerna/node_modules/minimatch": { "version": "3.0.5", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.5.tgz", @@ -15742,10 +15993,14 @@ } }, "node_modules/lerna/node_modules/uuid": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.0.tgz", - "integrity": "sha512-MXcSTerfPa4uqyzStbRoTgt5XIe3x5+42+q1sDuy3R5MDk66URdLMOZe5aPX/SQd+kuYAh0FdP/pO28IkQyTeg==", + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.1.tgz", + "integrity": "sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==", "dev": true, + "funding": [ + "https://github.com/sponsors/broofa", + "https://github.com/sponsors/ctavan" + ], "bin": { "uuid": "dist/bin/uuid" } @@ -15918,6 +16173,15 @@ "node": ">=12" } }, + "node_modules/libnpmpublish/node_modules/minipass": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.0.4.tgz", + "integrity": "sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ==", + "dev": true, + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, "node_modules/libnpmpublish/node_modules/normalize-package-data": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-5.0.0.tgz", @@ -15949,12 +16213,12 @@ } }, "node_modules/libnpmpublish/node_modules/ssri": { - "version": "10.0.4", - "resolved": "https://registry.npmjs.org/ssri/-/ssri-10.0.4.tgz", - "integrity": "sha512-12+IR2CB2C28MMAw0Ncqwj5QbTcs0nGIhgJzYWzDkb21vWmfNI83KS4f3Ci6GI98WreIfG7o9UXp3C0qbpA8nQ==", + "version": "10.0.5", + "resolved": "https://registry.npmjs.org/ssri/-/ssri-10.0.5.tgz", + "integrity": "sha512-bSf16tAFkGeRlUNDjXu8FzaMQt6g2HZJrun7mtMbIPOddxt3GLMSz5VWUWcqTJUPfLEaDIepGxv+bYQW49596A==", "dev": true, "dependencies": { - "minipass": "^5.0.0" + "minipass": "^7.0.3" }, "engines": { "node": "^14.17.0 || ^16.13.0 || >=18.0.0" @@ -16102,11 +16366,23 @@ "resolved": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz", "integrity": "sha512-H5ZhCF25riFd9uB5UCkVKo61m3S/xZk1x4wA6yp/L3RFP6Z/eHH1ymQcGLo7J3GMPfm0V/7m1tryHuGVxpqEBQ==" }, + "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 + }, "node_modules/lodash.defaults": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/lodash.defaults/-/lodash.defaults-4.2.0.tgz", "integrity": "sha512-qjxPLHd3r5DnsdGacqOMU6pb/avJzdh9tFX2ymgoZE27BmjXrNy/y4LoaiTeAb+O3gL8AfpJGtqfX/ae2leYYQ==" }, + "node_modules/lodash.escape": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/lodash.escape/-/lodash.escape-4.0.1.tgz", + "integrity": "sha512-nXEOnb/jK9g0DYMr1/Xvq6l5xMD7GDG55+GSYIYmS0G4tBk/hURD4JR9WCavs04t33WmJx9kCyp9vJ+mr4BOUw==", + "dev": true + }, "node_modules/lodash.filter": { "version": "4.6.0", "resolved": "https://registry.npmjs.org/lodash.filter/-/lodash.filter-4.6.0.tgz", @@ -16122,6 +16398,12 @@ "resolved": "https://registry.npmjs.org/lodash.foreach/-/lodash.foreach-4.5.0.tgz", "integrity": "sha512-aEXTF4d+m05rVOAUG3z4vZZ4xVexLKZGF0lIxuHZ1Hplpk/3B6Z1+/ICICYRLm7c41Z2xiejbkCkJoTlypoXhQ==" }, + "node_modules/lodash.invokemap": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/lodash.invokemap/-/lodash.invokemap-4.6.0.tgz", + "integrity": "sha512-CfkycNtMqgUlfjfdh2BhKO/ZXrP8ePOX5lEU/g0R3ItJcnuxWDwokMGKx1hWcfOikmyOVx6X9IwWnDGlgKl61w==", + "dev": true + }, "node_modules/lodash.isfunction": { "version": "3.0.9", "resolved": "https://registry.npmjs.org/lodash.isfunction/-/lodash.isfunction-3.0.9.tgz", @@ -16173,6 +16455,12 @@ "resolved": "https://registry.npmjs.org/lodash.pick/-/lodash.pick-4.4.0.tgz", "integrity": "sha512-hXt6Ul/5yWjfklSGvLQl8vM//l3FtyHZeuelpzK6mm99pNvN9yTDruNZPEJZD1oWrqo+izBmB7oUfWgcCX7s4Q==" }, + "node_modules/lodash.pullall": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/lodash.pullall/-/lodash.pullall-4.2.0.tgz", + "integrity": "sha512-VhqxBKH0ZxPpLhiu68YD1KnHmbhQJQctcipvmFnqIBDYzcIHzf3Zpu0tpeOKtR4x76p9yohc506eGdOjTmyIBg==", + "dev": true + }, "node_modules/lodash.reduce": { "version": "4.6.0", "resolved": "https://registry.npmjs.org/lodash.reduce/-/lodash.reduce-4.6.0.tgz", @@ -16206,6 +16494,12 @@ "integrity": "sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ==", "dev": true }, + "node_modules/lodash.uniqby": { + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/lodash.uniqby/-/lodash.uniqby-4.7.0.tgz", + "integrity": "sha512-e/zcLx6CSbmaEgFHCA7BnoQKyCtKMxnuWrJygbwPs/AIn+IMKl66L8/s+wBUn5LRw2pZx3bUHibiV1b6aTWIww==", + "dev": true + }, "node_modules/lodash.upperfirst": { "version": "4.3.1", "resolved": "https://registry.npmjs.org/lodash.upperfirst/-/lodash.upperfirst-4.3.1.tgz", @@ -16522,17 +16816,26 @@ } }, "node_modules/make-fetch-happen/node_modules/ssri": { - "version": "10.0.4", - "resolved": "https://registry.npmjs.org/ssri/-/ssri-10.0.4.tgz", - "integrity": "sha512-12+IR2CB2C28MMAw0Ncqwj5QbTcs0nGIhgJzYWzDkb21vWmfNI83KS4f3Ci6GI98WreIfG7o9UXp3C0qbpA8nQ==", + "version": "10.0.5", + "resolved": "https://registry.npmjs.org/ssri/-/ssri-10.0.5.tgz", + "integrity": "sha512-bSf16tAFkGeRlUNDjXu8FzaMQt6g2HZJrun7mtMbIPOddxt3GLMSz5VWUWcqTJUPfLEaDIepGxv+bYQW49596A==", "dev": true, "dependencies": { - "minipass": "^5.0.0" + "minipass": "^7.0.3" }, "engines": { "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, + "node_modules/make-fetch-happen/node_modules/ssri/node_modules/minipass": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.0.4.tgz", + "integrity": "sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ==", + "dev": true, + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, "node_modules/makeerror": { "version": "1.0.12", "resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.12.tgz", @@ -16821,12 +17124,6 @@ "miller-rabin": "bin/miller-rabin" } }, - "node_modules/miller-rabin/node_modules/bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", - "dev": true - }, "node_modules/mime": { "version": "1.6.0", "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", @@ -16959,12 +17256,12 @@ "dev": true }, "node_modules/minipass-fetch": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-3.0.3.tgz", - "integrity": "sha512-n5ITsTkDqYkYJZjcRWzZt9qnZKCT7nKCosJhHoj7S7zD+BP4jVbWs+odsniw5TA3E0sLomhTKOKjF86wf11PuQ==", + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-3.0.4.tgz", + "integrity": "sha512-jHAqnA728uUpIaFm7NWsCnqKT6UqZz7GcI/bDpPATuwYyKwJwW0remxSCxUlKiEty+eopHGa3oc8WxgQ1FFJqg==", "dev": true, "dependencies": { - "minipass": "^5.0.0", + "minipass": "^7.0.3", "minipass-sized": "^1.0.3", "minizlib": "^2.1.2" }, @@ -16975,6 +17272,15 @@ "encoding": "^0.1.13" } }, + "node_modules/minipass-fetch/node_modules/minipass": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.0.4.tgz", + "integrity": "sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ==", + "dev": true, + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, "node_modules/minipass-flush": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/minipass-flush/-/minipass-flush-1.0.5.tgz", @@ -17284,9 +17590,9 @@ "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==" }, "node_modules/nan": { - "version": "2.17.0", - "resolved": "https://registry.npmjs.org/nan/-/nan-2.17.0.tgz", - "integrity": "sha512-2ZTgtl0nJsO0KQCjEpxcIr5D+Yv90plTitZt9JBfQvVJDS5seMl3FOvsh3+9CoYWXf/1l5OaZzzF6nDm4cagaQ==" + "version": "2.18.0", + "resolved": "https://registry.npmjs.org/nan/-/nan-2.18.0.tgz", + "integrity": "sha512-W7tfG7vMOGtD30sHoZSSc/JVYiyDPEyQVso/Zz+/uQd0B0L46gtC+pHha5FFMRpil6fm/AoEcRWyOVi4+E/f8w==" }, "node_modules/nanoid": { "version": "3.3.6", @@ -17312,12 +17618,6 @@ "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", "dev": true }, - "node_modules/natural-compare-lite": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/natural-compare-lite/-/natural-compare-lite-1.4.0.tgz", - "integrity": "sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g==", - "dev": true - }, "node_modules/negotiator": { "version": "0.6.3", "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", @@ -17339,9 +17639,9 @@ "dev": true }, "node_modules/node-fetch": { - "version": "2.6.12", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.12.tgz", - "integrity": "sha512-C/fGU2E8ToujUivIO0H+tpQ6HWo4eEmchoPIoXtxCrVghxdKq+QOHqEZW7tuP3KlV3bC8FRMO5nMCC7Zm1VP6g==", + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz", + "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==", "dependencies": { "whatwg-url": "^5.0.0" }, @@ -17383,9 +17683,9 @@ } }, "node_modules/node-gyp-build": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.6.0.tgz", - "integrity": "sha512-NTZVKn9IylLwUzaKjkas1e4u2DLNcV4rdYagA4PWdPwW87Bi7z+BznyKSRwS/761tV/lzCGXplWsiaMjLqP2zQ==", + "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==", "dev": true, "bin": { "node-gyp-build": "bin.js", @@ -17487,9 +17787,9 @@ } }, "node_modules/npm-install-checks": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/npm-install-checks/-/npm-install-checks-6.1.1.tgz", - "integrity": "sha512-dH3GmQL4vsPtld59cOn8uY0iOqRmqKvV+DLGwNXV/Q7MDgD2QfOADWd/mFXcIE5LVhYYGjA3baz6W9JneqnuCw==", + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/npm-install-checks/-/npm-install-checks-6.2.0.tgz", + "integrity": "sha512-744wat5wAAHsxa4590mWO0tJ8PKxR8ORZsH9wGpQc3nWTzozMAgBN/XyqYw7mg3yqLM8dLwEnwSfKMmXAjF69g==", "dev": true, "dependencies": { "semver": "^7.1.1" @@ -17780,13 +18080,13 @@ "dev": true }, "node_modules/nx": { - "version": "16.6.0", - "resolved": "https://registry.npmjs.org/nx/-/nx-16.6.0.tgz", - "integrity": "sha512-4UaS9nRakpZs45VOossA7hzSQY2dsr035EoPRGOc81yoMFW6Sqn1Rgq4hiLbHZOY8MnWNsLMkgolNMz1jC8YUQ==", + "version": "16.10.0", + "resolved": "https://registry.npmjs.org/nx/-/nx-16.10.0.tgz", + "integrity": "sha512-gZl4iCC0Hx0Qe1VWmO4Bkeul2nttuXdPpfnlcDKSACGu3ZIo+uySqwOF8yBAxSTIf8xe2JRhgzJN1aFkuezEBg==", "dev": true, "hasInstallScript": true, "dependencies": { - "@nrwl/tao": "16.6.0", + "@nrwl/tao": "16.10.0", "@parcel/watcher": "2.0.4", "@yarnpkg/lockfile": "^1.1.0", "@yarnpkg/parsers": "3.0.0-rc.46", @@ -17795,15 +18095,16 @@ "chalk": "^4.1.0", "cli-cursor": "3.1.0", "cli-spinners": "2.6.1", - "cliui": "^7.0.2", - "dotenv": "~10.0.0", + "cliui": "^8.0.1", + "dotenv": "~16.3.1", + "dotenv-expand": "~10.0.0", "enquirer": "~2.3.6", - "fast-glob": "3.2.7", "figures": "3.2.0", "flat": "^5.0.2", "fs-extra": "^11.1.0", "glob": "7.1.4", "ignore": "^5.0.4", + "jest-diff": "^29.4.1", "js-yaml": "4.1.0", "jsonc-parser": "3.2.0", "lines-and-columns": "~2.0.3", @@ -17826,20 +18127,20 @@ "nx": "bin/nx.js" }, "optionalDependencies": { - "@nx/nx-darwin-arm64": "16.6.0", - "@nx/nx-darwin-x64": "16.6.0", - "@nx/nx-freebsd-x64": "16.6.0", - "@nx/nx-linux-arm-gnueabihf": "16.6.0", - "@nx/nx-linux-arm64-gnu": "16.6.0", - "@nx/nx-linux-arm64-musl": "16.6.0", - "@nx/nx-linux-x64-gnu": "16.6.0", - "@nx/nx-linux-x64-musl": "16.6.0", - "@nx/nx-win32-arm64-msvc": "16.6.0", - "@nx/nx-win32-x64-msvc": "16.6.0" + "@nx/nx-darwin-arm64": "16.10.0", + "@nx/nx-darwin-x64": "16.10.0", + "@nx/nx-freebsd-x64": "16.10.0", + "@nx/nx-linux-arm-gnueabihf": "16.10.0", + "@nx/nx-linux-arm64-gnu": "16.10.0", + "@nx/nx-linux-arm64-musl": "16.10.0", + "@nx/nx-linux-x64-gnu": "16.10.0", + "@nx/nx-linux-x64-musl": "16.10.0", + "@nx/nx-win32-arm64-msvc": "16.10.0", + "@nx/nx-win32-x64-msvc": "16.10.0" }, "peerDependencies": { - "@swc-node/register": "^1.4.2", - "@swc/core": "^1.2.173" + "@swc-node/register": "^1.6.7", + "@swc/core": "^1.3.85" }, "peerDependenciesMeta": { "@swc-node/register": { @@ -17917,22 +18218,6 @@ "node": ">=8.6" } }, - "node_modules/nx/node_modules/fast-glob": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.7.tgz", - "integrity": "sha512-rYGMRwip6lUMvYD3BTScMwT1HtAs2d71SMv66Vrxs0IekGZEjhM0pcMfjQPnknBt2zeCwQMEupiN02ZP4DiT1Q==", - "dev": true, - "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" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/nx/node_modules/fs-extra": { "version": "11.1.1", "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.1.1.tgz", @@ -17964,18 +18249,6 @@ "node": "*" } }, - "node_modules/nx/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/nx/node_modules/has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", @@ -18202,14 +18475,14 @@ } }, "node_modules/object.fromentries": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.6.tgz", - "integrity": "sha512-VciD13dswC4j1Xt5394WR4MzmAQmlgN72phd/riNp9vtD7tp4QQWJ0R4wvclXcafgcYK8veHRed2W6XeGBvcfg==", + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.7.tgz", + "integrity": "sha512-UPbPHML6sL8PI/mOqPwsH4G6iyXcCGzLin8KvEPenOZN5lpCNBZZQ+V62vdjB1mQHrmqGQt5/OJzemUA+KJmEA==", "dev": true, "dependencies": { "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4" + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1" }, "engines": { "node": ">= 0.4" @@ -18219,26 +18492,26 @@ } }, "node_modules/object.groupby": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/object.groupby/-/object.groupby-1.0.0.tgz", - "integrity": "sha512-70MWG6NfRH9GnbZOikuhPPYzpUpof9iW2J9E4dW7FXTqPNb6rllE6u39SKwwiNh8lCwX3DDb5OgcKGiEBrTTyw==", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/object.groupby/-/object.groupby-1.0.1.tgz", + "integrity": "sha512-HqaQtqLnp/8Bn4GL16cj+CUYbnpe1bh0TtEaWvybszDG4tgxCJuRpV8VGuvNaI1fAnI4lUJzDG55MXcOH4JZcQ==", "dev": true, "dependencies": { "call-bind": "^1.0.2", "define-properties": "^1.2.0", - "es-abstract": "^1.21.2", + "es-abstract": "^1.22.1", "get-intrinsic": "^1.2.1" } }, "node_modules/object.values": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.6.tgz", - "integrity": "sha512-FVVTkD1vENCsAcwNs9k6jea2uHC/X0+JcjG8YA60FN5CMaJmG95wT9jek/xX9nornqGRrBkKtzuAu2wuHpKqvw==", + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.7.tgz", + "integrity": "sha512-aU6xnDFYT3x17e/f0IiiwlGPTy2jzMySGfUB4fq6z7CV8l85CWHDk5ErhyhpfDHhrOMwGFhSQkhMGHaIotA6Ng==", "dev": true, "dependencies": { "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4" + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1" }, "engines": { "node": ">= 0.4" @@ -18728,17 +19001,26 @@ } }, "node_modules/pacote/node_modules/ssri": { - "version": "10.0.4", - "resolved": "https://registry.npmjs.org/ssri/-/ssri-10.0.4.tgz", - "integrity": "sha512-12+IR2CB2C28MMAw0Ncqwj5QbTcs0nGIhgJzYWzDkb21vWmfNI83KS4f3Ci6GI98WreIfG7o9UXp3C0qbpA8nQ==", + "version": "10.0.5", + "resolved": "https://registry.npmjs.org/ssri/-/ssri-10.0.5.tgz", + "integrity": "sha512-bSf16tAFkGeRlUNDjXu8FzaMQt6g2HZJrun7mtMbIPOddxt3GLMSz5VWUWcqTJUPfLEaDIepGxv+bYQW49596A==", "dev": true, "dependencies": { - "minipass": "^5.0.0" + "minipass": "^7.0.3" }, "engines": { "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, + "node_modules/pacote/node_modules/ssri/node_modules/minipass": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.0.4.tgz", + "integrity": "sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ==", + "dev": true, + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, "node_modules/parent-module": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", @@ -18885,9 +19167,9 @@ } }, "node_modules/path-scurry/node_modules/lru-cache": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.0.0.tgz", - "integrity": "sha512-svTf/fzsKHffP42sujkO/Rjs37BCIsQVRCeNYIm9WN8rgT7ffoUnRtZCqU+6BqcSBdv8gwJeTz8knJpgACeQMw==", + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.0.1.tgz", + "integrity": "sha512-IJ4uwUTi2qCccrioU6g9g/5rvvVl13bsdczUUcqbciD9iLr095yj8DQKdObriEvuNSx325N1rV1O0sJFszx75g==", "dev": true, "engines": { "node": "14 || >=16.14" @@ -19052,9 +19334,9 @@ } }, "node_modules/postcss": { - "version": "8.4.27", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.27.tgz", - "integrity": "sha512-gY/ACJtJPSmUFPDCHtX78+01fHa64FaU4zaaWfuh1MhGJISufJAH4cun6k/8fwsHYeK4UQmENQK+tRLCFJE8JQ==", + "version": "8.4.31", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.31.tgz", + "integrity": "sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ==", "dev": true, "funding": [ { @@ -19374,9 +19656,9 @@ } }, "node_modules/preferred-pm": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/preferred-pm/-/preferred-pm-3.0.3.tgz", - "integrity": "sha512-+wZgbxNES/KlJs9q40F/1sfOd/j7f1O9JaHcW5Dsn3aUUOZg3L2bjpVUcKV2jvtElYfoTuQiNeMfQJ4kwUAhCQ==", + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/preferred-pm/-/preferred-pm-3.1.2.tgz", + "integrity": "sha512-nk7dKrcW8hfCZ4H6klWcdRknBOXWzNQByJ0oJyX97BOupsYD+FzLS4hflgEu/uPUEHZCuRfMxzCBsuWd7OzT8Q==", "dev": true, "dependencies": { "find-up": "^5.0.0", @@ -19398,9 +19680,9 @@ } }, "node_modules/prettier": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.0.1.tgz", - "integrity": "sha512-fcOWSnnpCrovBsmFZIGIy9UqK2FaI7Hqax+DIO0A9UxeVoY4iweyaFjS5TavZN97Hfehph0nhsZnjlVKzEQSrQ==", + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.0.3.tgz", + "integrity": "sha512-L/4pUDMxcNa8R/EthV08Zt42WBO4h1rarVtK0K+QJG0X187OLo7l699jWw0GKuwzkPQ//jMFA/8Xm6Fh3J/DAg==", "dev": true, "bin": { "prettier": "bin/prettier.cjs" @@ -19425,12 +19707,12 @@ } }, "node_modules/pretty-format": { - "version": "29.6.2", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.6.2.tgz", - "integrity": "sha512-1q0oC8eRveTg5nnBEWMXAU2qpv65Gnuf2eCQzSjxpWFkPaPARwqZZDGuNE0zPAZfTCHzIk3A8dIjwlQKKLphyg==", + "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, "dependencies": { - "@jest/schemas": "^29.6.0", + "@jest/schemas": "^29.6.3", "ansi-styles": "^5.0.0", "react-is": "^18.0.0" }, @@ -19596,12 +19878,6 @@ "safe-buffer": "^5.1.2" } }, - "node_modules/public-encrypt/node_modules/bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", - "dev": true - }, "node_modules/punycode": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.0.tgz", @@ -19611,9 +19887,9 @@ } }, "node_modules/pure-rand": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/pure-rand/-/pure-rand-6.0.2.tgz", - "integrity": "sha512-6Yg0ekpKICSjPswYOuC5sku/TSWaRYlA0qsXqJgM/d/4pLPHPuTxK7Nbf7jFKzAeedUhR8C7K9Uv63FBsSo8xQ==", + "version": "6.0.4", + "resolved": "https://registry.npmjs.org/pure-rand/-/pure-rand-6.0.4.tgz", + "integrity": "sha512-LA0Y9kxMYv47GIPJy6MI84fqTd2HmYZI83W/kM/SkKfDlajnZYfmXFTxkbY+xSBPkLJxltMa9hIkmdc29eguMA==", "dev": true, "funding": [ { @@ -19635,9 +19911,9 @@ } }, "node_modules/pvtsutils": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/pvtsutils/-/pvtsutils-1.3.3.tgz", - "integrity": "sha512-6sAOMlXyrJ+8tRN5IAaYfuYZRp1C2uJ0SyDynEFxL+VY8kCRib9Lpj/+KPaNFpaQWr/iRik5nrzz6iaNlxgEGA==", + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/pvtsutils/-/pvtsutils-1.3.5.tgz", + "integrity": "sha512-ARvb14YB9Nm2Xi6nBq1ZX6dAM0FsJnuk+31aUp4TrcZEdKUlSqOqsxJHUPJDNE3qiIp+iUPEIeR6Je/tgV7zsA==", "dev": true, "dependencies": { "tslib": "^2.6.1" @@ -19870,19 +20146,19 @@ } }, "node_modules/read-package-json/node_modules/glob": { - "version": "10.3.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-10.3.3.tgz", - "integrity": "sha512-92vPiMb/iqpmEgsOoIDvTjc50wf9CCCvMzsi6W0JLPeUKE8TWP1a73PgqSrqy7iAZxaSD1YdzU7QZR5LF51MJw==", + "version": "10.3.10", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.3.10.tgz", + "integrity": "sha512-fa46+tv1Ak0UPK1TOy/pZrIybNNt4HCv7SDzwyfiOZkvZLEbjsZkJBPtDHVshZjbecAoAGSC20MjLDG/qr679g==", "dev": true, "dependencies": { "foreground-child": "^3.1.0", - "jackspeak": "^2.0.3", + "jackspeak": "^2.3.5", "minimatch": "^9.0.1", "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0", "path-scurry": "^1.10.1" }, "bin": { - "glob": "dist/cjs/src/bin.js" + "glob": "dist/esm/bin.mjs" }, "engines": { "node": ">=16 || 14 >=14.17" @@ -20226,14 +20502,14 @@ "dev": true }, "node_modules/regexp.prototype.flags": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.0.tgz", - "integrity": "sha512-0SutC3pNudRKgquxGoRGIz946MZVHqbNfPjBdxeOhBrdgDKlRoXmYLQN9xRbrR09ZXWeGAdPuif7egofn6v5LA==", + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.1.tgz", + "integrity": "sha512-sy6TXMN+hnP/wMy+ISxg3krXx7BAtWVO4UouuCN/ziM9UEne0euamVNafDfvC83bRNr95y0V5iijeDQFUNpvrg==", "dev": true, "dependencies": { "call-bind": "^1.0.2", "define-properties": "^1.2.0", - "functions-have-names": "^1.2.3" + "set-function-name": "^2.0.0" }, "engines": { "node": ">= 0.4" @@ -20362,9 +20638,9 @@ "integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==" }, "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.6", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.6.tgz", + "integrity": "sha512-njhxM7mV12JfufShqGy3Rz8j11RPdLy4xi15UurGJeoHLfJpVXKdh3ueuOqbYUcDZnffr6X739JBo5LzyahEsw==", "dev": true, "dependencies": { "is-core-module": "^2.13.0", @@ -20470,15 +20746,15 @@ } }, "node_modules/rimraf": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-5.0.1.tgz", - "integrity": "sha512-OfFZdwtd3lZ+XZzYP/6gTACubwFcHdLRqS9UX3UwpU2dnGQYkPFISRwvM3w9IiB2w7bW5qGo/uAwE4SmXXSKvg==", + "version": "5.0.5", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-5.0.5.tgz", + "integrity": "sha512-CqDakW+hMe/Bz202FPEymy68P+G50RfMQK+Qo5YUqc9SPipvbGjCGKd0RSKEelbsfQuw3g5NZDSrlZZAJurH1A==", "dev": true, "dependencies": { - "glob": "^10.2.5" + "glob": "^10.3.7" }, "bin": { - "rimraf": "dist/cjs/src/bin.js" + "rimraf": "dist/esm/bin.mjs" }, "engines": { "node": ">=14" @@ -20497,19 +20773,19 @@ } }, "node_modules/rimraf/node_modules/glob": { - "version": "10.3.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-10.3.3.tgz", - "integrity": "sha512-92vPiMb/iqpmEgsOoIDvTjc50wf9CCCvMzsi6W0JLPeUKE8TWP1a73PgqSrqy7iAZxaSD1YdzU7QZR5LF51MJw==", + "version": "10.3.10", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.3.10.tgz", + "integrity": "sha512-fa46+tv1Ak0UPK1TOy/pZrIybNNt4HCv7SDzwyfiOZkvZLEbjsZkJBPtDHVshZjbecAoAGSC20MjLDG/qr679g==", "dev": true, "dependencies": { "foreground-child": "^3.1.0", - "jackspeak": "^2.0.3", + "jackspeak": "^2.3.5", "minimatch": "^9.0.1", "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0", "path-scurry": "^1.10.1" }, "bin": { - "glob": "dist/cjs/src/bin.js" + "glob": "dist/esm/bin.mjs" }, "engines": { "node": ">=16 || 14 >=14.17" @@ -20629,13 +20905,13 @@ "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" }, "node_modules/safe-array-concat": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.0.0.tgz", - "integrity": "sha512-9dVEFruWIsnie89yym+xWTAYASdpw3CJV7Li/6zBewGf9z2i1j31rP6jnY0pHEO4QZh6N0K11bFjWmdR8UGdPQ==", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.0.1.tgz", + "integrity": "sha512-6XbUAseYE2KtOuGueyeobCySj9L4+66Tn6KQMOPQJrAJEowYKW/YR/MGJZl7FdydUdaFu4LYyDZjxf4/Nmo23Q==", "dev": true, "dependencies": { "call-bind": "^1.0.2", - "get-intrinsic": "^1.2.0", + "get-intrinsic": "^1.2.1", "has-symbols": "^1.0.3", "isarray": "^2.0.5" }, @@ -20725,6 +21001,117 @@ "node": ">=10" } }, + "node_modules/sbtc-bridge-lib": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/sbtc-bridge-lib/-/sbtc-bridge-lib-1.1.2.tgz", + "integrity": "sha512-BMUt5xvle1JRZxia0DWL2yyFBsl5ke7f9GHWsMzNpIHIQhjW6qqTf5s3ZWTutp2PF86F8Dh9QTpmLMbeA94Y/g==", + "dev": true, + "dependencies": { + "@noble/secp256k1": "^2.0.0", + "@scure/base": "^1.1.1", + "@scure/btc-signer": "^1.1.0", + "@stacks/encryption": "^6.5.4", + "@stacks/stacks-blockchain-api-types": "^7.1.10", + "base58check": "^2.0.0", + "c32check": "^2.0.0", + "micro-packed": "^0.3.2", + "micro-stacks": "^1.2.1" + } + }, + "node_modules/sbtc-bridge-lib/node_modules/@noble/hashes": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.1.2.tgz", + "integrity": "sha512-KYRCASVTv6aeUi1tsF8/vpyR7zpfs3FUzy2Jqm+MU+LmUKhQ0y2FpfwqkCcxSg2ua4GALJd8k2R76WxwZGbQpA==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + ] + }, + "node_modules/sbtc-bridge-lib/node_modules/@noble/secp256k1": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@noble/secp256k1/-/secp256k1-2.0.0.tgz", + "integrity": "sha512-rUGBd95e2a45rlmFTqQJYEFA4/gdIARFfuTuTqLglz0PZ6AKyzyXsEZZq7UZn8hZsvaBgpCzKKBJizT2cJERXw==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + ] + }, + "node_modules/sbtc-bridge-lib/node_modules/@scure/bip32": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@scure/bip32/-/bip32-1.1.0.tgz", + "integrity": "sha512-ftTW3kKX54YXLCxH6BB7oEEoJfoE2pIgw7MINKAs5PsS6nqKPuKk1haTF/EuHmYqG330t5GSrdmtRuHaY1a62Q==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + ], + "optional": true, + "peer": true, + "dependencies": { + "@noble/hashes": "~1.1.1", + "@noble/secp256k1": "~1.6.0", + "@scure/base": "~1.1.0" + } + }, + "node_modules/sbtc-bridge-lib/node_modules/@scure/bip32/node_modules/@noble/secp256k1": { + "version": "1.6.3", + "resolved": "https://registry.npmjs.org/@noble/secp256k1/-/secp256k1-1.6.3.tgz", + "integrity": "sha512-T04e4iTurVy7I8Sw4+c5OSN9/RkPlo1uKxAomtxQNLq8j1uPAqnsqG1bqvY3Jv7c13gyr6dui0zmh/I3+f/JaQ==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + ], + "optional": true, + "peer": true + }, + "node_modules/sbtc-bridge-lib/node_modules/micro-stacks": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/micro-stacks/-/micro-stacks-1.2.1.tgz", + "integrity": "sha512-CmFAH34GfgW9vMwnINflxH1COUWUg2kSYnPVfToZXPEJwHMGo8b3syte7s5zJ2rR/RSjpquQduiDNRAgF2Hh0w==", + "dev": true, + "dependencies": { + "@noble/hashes": "1.1.2", + "@noble/secp256k1": "1.6.3" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@scure/bip32": "1.1.0", + "@scure/bip39": "1.1.0" + }, + "peerDependenciesMeta": { + "@scure/bip32": { + "optional": true + }, + "@scure/bip39": { + "optional": true + } + } + }, + "node_modules/sbtc-bridge-lib/node_modules/micro-stacks/node_modules/@noble/secp256k1": { + "version": "1.6.3", + "resolved": "https://registry.npmjs.org/@noble/secp256k1/-/secp256k1-1.6.3.tgz", + "integrity": "sha512-T04e4iTurVy7I8Sw4+c5OSN9/RkPlo1uKxAomtxQNLq8j1uPAqnsqG1bqvY3Jv7c13gyr6dui0zmh/I3+f/JaQ==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + ] + }, "node_modules/schema-inspector": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/schema-inspector/-/schema-inspector-2.0.2.tgz", @@ -20755,10 +21142,41 @@ "node": ">= 10.13.0" }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/schema-utils/node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "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" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/schema-utils/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" } }, + "node_modules/schema-utils/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 + }, "node_modules/semver": { "version": "7.5.4", "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", @@ -20868,6 +21286,20 @@ "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==", "dev": true }, + "node_modules/set-function-name": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/set-function-name/-/set-function-name-2.0.1.tgz", + "integrity": "sha512-tMNCiqYVkXIZgc2Hnoy2IvC/f8ezc5koaRFkCjrpWzGpCd3qbZXPzVy9MAZzK1ch/X0jvSkojys3oqJN0qCmdA==", + "dev": true, + "dependencies": { + "define-data-property": "^1.0.1", + "functions-have-names": "^1.2.3", + "has-property-descriptors": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/setprototypeof": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", @@ -20919,9 +21351,9 @@ } }, "node_modules/shiki": { - "version": "0.14.3", - "resolved": "https://registry.npmjs.org/shiki/-/shiki-0.14.3.tgz", - "integrity": "sha512-U3S/a+b0KS+UkTyMjoNojvTgrBHjgp7L6ovhFVZsXmBGnVdQ4K4U9oK0z63w538S91ATngv1vXigHCSWOwnr+g==", + "version": "0.14.4", + "resolved": "https://registry.npmjs.org/shiki/-/shiki-0.14.4.tgz", + "integrity": "sha512-IXCRip2IQzKwxArNNq1S+On4KPML3Yyn8Zzs/xRgcgOWIr8ntIK3IKzjFPfjy/7kt9ZMjc+FItfqHRBg8b6tNQ==", "dev": true, "dependencies": { "ansi-sequence-parser": "^1.1.0", @@ -20955,13 +21387,14 @@ "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==" }, "node_modules/sigstore": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/sigstore/-/sigstore-1.8.0.tgz", - "integrity": "sha512-ogU8qtQ3VFBawRJ8wjsBEX/vIFeHuGs1fm4jZtjWQwjo8pfAt7T/rh+udlAN4+QUe0IzA8qRSc/YZ7dHP6kh+w==", + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/sigstore/-/sigstore-1.9.0.tgz", + "integrity": "sha512-0Zjz0oe37d08VeOtBIuB6cRriqXse2e8w+7yIy2XSXjshRKxbc2KkhXjL229jXSxEm7UbcjS76wcJDGQddVI9A==", "dev": true, "dependencies": { - "@sigstore/bundle": "^1.0.0", + "@sigstore/bundle": "^1.1.0", "@sigstore/protobuf-specs": "^0.2.0", + "@sigstore/sign": "^1.0.0", "@sigstore/tuf": "^1.0.3", "make-fetch-happen": "^11.0.1" }, @@ -20986,14 +21419,14 @@ "integrity": "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==" }, "node_modules/sirv": { - "version": "1.0.19", - "resolved": "https://registry.npmjs.org/sirv/-/sirv-1.0.19.tgz", - "integrity": "sha512-JuLThK3TnZG1TAKDwNIqNq6QA2afLOCcm+iE8D1Kj3GA40pSPsxQjjJl0J8X3tsR7T+CP1GavpzLwYkgVLWrZQ==", + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/sirv/-/sirv-2.0.3.tgz", + "integrity": "sha512-O9jm9BsID1P+0HOi81VpXPoDxYP374pkOLzACAoyUQ/3OUVndNpsz6wMnY2z+yOxzbllCKZrM+9QrWsv4THnyA==", "dev": true, "dependencies": { "@polka/url": "^1.0.0-next.20", "mrmime": "^1.0.0", - "totalist": "^1.0.0" + "totalist": "^3.0.0" }, "engines": { "node": ">= 10" @@ -21377,9 +21810,9 @@ } }, "node_modules/spdx-license-ids": { - "version": "3.0.13", - "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.13.tgz", - "integrity": "sha512-XkD+zwiqXHikFZm4AX/7JSCXA98U5Db4AFd5XUg/+9UNtnH75+Z9KxtpYiJZx36mUDVOwH83pl7yvCer6ewM3w==", + "version": "3.0.16", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.16.tgz", + "integrity": "sha512-eWN+LnM3GR6gPu35WxNgbGl8rmY1AEmoMDvL/QD6zYmPWgywxWqJWNdLGT+ke8dKNWrcYgYjPpG5gbTfghP8rw==", "dev": true }, "node_modules/split": { @@ -21618,14 +22051,14 @@ } }, "node_modules/string.prototype.trim": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.7.tgz", - "integrity": "sha512-p6TmeT1T3411M8Cgg9wBTMRtY2q9+PNy9EV1i2lIXUN/btt763oIfxwN3RR8VU6wHX8j/1CFy0L+YuThm6bgOg==", + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.8.tgz", + "integrity": "sha512-lfjY4HcixfQXOfaqCvcBuOIapyaroTXhbkfJN3gcB1OtyupngWK4sEET9Knd0cXd28kTUqu/kHoV4HKSJdnjiQ==", "dev": true, "dependencies": { "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4" + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1" }, "engines": { "node": ">= 0.4" @@ -21635,28 +22068,28 @@ } }, "node_modules/string.prototype.trimend": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.6.tgz", - "integrity": "sha512-JySq+4mrPf9EsDBEDYMOb/lM7XQLulwg5R/m1r0PXEFqrV0qHvl58sdTilSXtKOflCsK2E8jxf+GKC0T07RWwQ==", + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.7.tgz", + "integrity": "sha512-Ni79DqeB72ZFq1uH/L6zJ+DKZTkOtPIHovb3YZHQViE+HDouuU4mBrLOLDn5Dde3RF8qw5qVETEjhu9locMLvA==", "dev": true, "dependencies": { "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4" + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/string.prototype.trimstart": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.6.tgz", - "integrity": "sha512-omqjMDaY92pbn5HOX7f9IccLA+U1tA9GvtU4JrodiXFfYB7jPzzHpRzpglLAjtUV6bB557zwClJezTqnAiYnQA==", + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.7.tgz", + "integrity": "sha512-NGhtDFu3jCEm7B4Fy0DpLewdJQOZcQ0rGbwQ/+stjnrp2i+rlKeCvos9hOIeCmqwratM47OBxY7uFZzjxHXmrg==", "dev": true, "dependencies": { "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4" + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -21941,9 +22374,9 @@ } }, "node_modules/terser": { - "version": "5.19.2", - "resolved": "https://registry.npmjs.org/terser/-/terser-5.19.2.tgz", - "integrity": "sha512-qC5+dmecKJA4cpYxRa5aVkKehYsQKc+AHeKl0Oe62aYjBL8ZA33tTljktDHJSaxxMnbI5ZYw+o/S2DxxLu8OfA==", + "version": "5.21.0", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.21.0.tgz", + "integrity": "sha512-WtnFKrxu9kaoXuiZFSGrcAvvBqAdmKx0SFNmVNYdJamMu9yyN3I/QF0FbH4QcqJQ+y1CJnzxGIKH0cSj+FGYRw==", "dev": true, "dependencies": { "@jridgewell/source-map": "^0.3.3", @@ -22110,11 +22543,6 @@ "node": ">=6.0.0" } }, - "node_modules/tiny-secp256k1/node_modules/bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" - }, "node_modules/tinybench": { "version": "2.5.1", "resolved": "https://registry.npmjs.org/tinybench/-/tinybench-2.5.1.tgz", @@ -22131,9 +22559,9 @@ } }, "node_modules/tinyspy": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/tinyspy/-/tinyspy-2.1.1.tgz", - "integrity": "sha512-XPJL2uSzcOyBMky6OFrusqWlzfFrXtE0hPuMgW8A2HmaqrPo4ZQHRN/V0QXN3FSjKxpsbRrFc5LI7KOwBsT1/w==", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/tinyspy/-/tinyspy-2.2.0.tgz", + "integrity": "sha512-d2eda04AN/cPOR89F7Xv5bK/jrQEhmcLFe6HFldoeO9AJtps+fqEnh486vnT/8y4bw38pSyxDcTCAq+Ks2aJTg==", "dev": true, "engines": { "node": ">=14.0.0" @@ -22198,9 +22626,9 @@ } }, "node_modules/totalist": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/totalist/-/totalist-1.1.0.tgz", - "integrity": "sha512-gduQwd1rOdDMGxFG1gEvhV88Oirdo2p+KjoYFU7k2g+i7n6AFFbDQ5kMPUsW0pNbfQsB/cwXvT1i4Bue0s9g5g==", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/totalist/-/totalist-3.0.1.tgz", + "integrity": "sha512-sf4i37nQ2LBx4m3wB74y+ubopq6W/dIzXg0FDGjsYnZHVa1Da8FH853wlL2gtUhg+xJXjfk3kUZS3BRoQeoQBQ==", "dev": true, "engines": { "node": ">=6" @@ -22251,9 +22679,9 @@ } }, "node_modules/triplesec": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/triplesec/-/triplesec-4.0.3.tgz", - "integrity": "sha512-fug70e1nJoCMxsXQJlETisAALohm84vl++IiTTHEqM7Lgqwz62jrlwqOC/gJEAJjO/ByN127sEcioB56HW3wIw==", + "version": "3.0.27", + "resolved": "https://registry.npmjs.org/triplesec/-/triplesec-3.0.27.tgz", + "integrity": "sha512-FDhkxa3JYnPOerOd+8k+SBmm7cb7KkyX+xXwNFV3XV6dsQgHuRvjtbnzWfPJ2kimeR8ErjZfPd/6r7RH6epHDw==", "dependencies": { "iced-error": ">=0.0.9", "iced-lock": "^1.0.1", @@ -22264,9 +22692,9 @@ } }, "node_modules/ts-api-utils": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-1.0.1.tgz", - "integrity": "sha512-lC/RGlPmwdrIBFTX59wwNzqh7aR2otPNPR/5brHZm/XKFYKsfqxihXUe9pU3JI+3vGkl+vyCoNNnPhJn3aLK1A==", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-1.0.3.tgz", + "integrity": "sha512-wNMeqtMz5NtwpT/UZGY5alT+VoKdSsOOP/kqHFcUW1P/VRhH2wJ48+DN2WwUliNbQ976ETwDL0Ifd2VVvgonvg==", "dev": true, "engines": { "node": ">=16.13.0" @@ -22405,9 +22833,9 @@ } }, "node_modules/tslib": { - "version": "2.6.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.1.tgz", - "integrity": "sha512-t0hLfiEKfMUoqhG+U1oid7Pva4bbDPHYfJNiB7BiIjRkj1pyC++4N3huJfqY6aRH6VTB0rvtzQwjM4K6qpfOig==", + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", + "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==", "dev": true }, "node_modules/tsutils": { @@ -22432,9 +22860,9 @@ "dev": true }, "node_modules/tty-table": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/tty-table/-/tty-table-4.2.1.tgz", - "integrity": "sha512-xz0uKo+KakCQ+Dxj1D/tKn2FSyreSYWzdkL/BYhgN6oMW808g8QRMuh1atAV9fjTPbWBjfbkKQpI/5rEcnAc7g==", + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/tty-table/-/tty-table-4.2.2.tgz", + "integrity": "sha512-2gvCArMZLxgvpZ2NvQKdnYWIFLe7I/z5JClMuhrDXunmKgSZcQKcZRjN9XjAFiToMz2pUo1dEIXyrm0AwgV5Tw==", "dev": true, "dependencies": { "chalk": "^4.1.2", @@ -22854,9 +23282,9 @@ } }, "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.0.13", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.13.tgz", + "integrity": "sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg==", "dev": true, "funding": [ { @@ -22948,25 +23376,19 @@ "dev": true }, "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.1.3", + "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-9.1.3.tgz", + "integrity": "sha512-9lDD+EVI2fjFsMWXc6dy5JJzBsVTcQ2fVkfBvncZ6xJWG9wtBhOldG+mHkSL0+V1K/xgZz0JDO5UT5hFwHUghg==", "dev": true, "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": "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/validate-npm-package-license": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", @@ -23019,9 +23441,9 @@ } }, "node_modules/vite": { - "version": "4.4.9", - "resolved": "https://registry.npmjs.org/vite/-/vite-4.4.9.tgz", - "integrity": "sha512-2mbUn2LlUmNASWwSCNSJ/EG2HuSRTnVNaydp6vMCm5VIqJsjMfbIWtbH2kDuwUVW5mMUKKZvGPX/rqeqVvv1XA==", + "version": "4.4.11", + "resolved": "https://registry.npmjs.org/vite/-/vite-4.4.11.tgz", + "integrity": "sha512-ksNZJlkcU9b0lBwAGZGGaZHCMqHsc8OpgtoYhsQ4/I2v5cnpmmmqe5pM4nv/4Hn6G/2GhTdj0DhZh2e+Er1q5A==", "dev": true, "dependencies": { "esbuild": "^0.18.10", @@ -23702,20 +24124,27 @@ } }, "node_modules/webpack-bundle-analyzer": { - "version": "4.9.0", - "resolved": "https://registry.npmjs.org/webpack-bundle-analyzer/-/webpack-bundle-analyzer-4.9.0.tgz", - "integrity": "sha512-+bXGmO1LyiNx0i9enBu3H8mv42sj/BJWhZNFwjz92tVnBa9J3JMGo2an2IXlEleoDOPn/Hofl5hr/xCpObUDtw==", + "version": "4.9.1", + "resolved": "https://registry.npmjs.org/webpack-bundle-analyzer/-/webpack-bundle-analyzer-4.9.1.tgz", + "integrity": "sha512-jnd6EoYrf9yMxCyYDPj8eutJvtjQNp8PHmni/e/ulydHBWhT5J3menXt3HEkScsu9YqMAcG4CfFjs3rj5pVU1w==", "dev": true, "dependencies": { "@discoveryjs/json-ext": "0.5.7", "acorn": "^8.0.4", "acorn-walk": "^8.0.0", - "chalk": "^4.1.0", "commander": "^7.2.0", + "escape-string-regexp": "^4.0.0", "gzip-size": "^6.0.0", - "lodash": "^4.17.20", + "is-plain-object": "^5.0.0", + "lodash.debounce": "^4.0.8", + "lodash.escape": "^4.0.1", + "lodash.flatten": "^4.4.0", + "lodash.invokemap": "^4.6.0", + "lodash.pullall": "^4.2.0", + "lodash.uniqby": "^4.7.0", "opener": "^1.5.2", - "sirv": "^1.0.7", + "picocolors": "^1.0.0", + "sirv": "^2.0.3", "ws": "^7.3.1" }, "bin": { @@ -23725,74 +24154,16 @@ "node": ">= 10.13.0" } }, - "node_modules/webpack-bundle-analyzer/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/webpack-bundle-analyzer/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/webpack-bundle-analyzer/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==", "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, "engines": { "node": ">=10" }, "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/webpack-bundle-analyzer/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/webpack-bundle-analyzer/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/webpack-bundle-analyzer/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/webpack-bundle-analyzer/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==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/webpack-cli": { @@ -24398,6 +24769,17 @@ "url": "https://github.com/chalk/chalk?sponsor=1" } }, + "node_modules/yalc/node_modules/cliui": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", + "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", + "dev": true, + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^7.0.0" + } + }, "node_modules/yalc/node_modules/color-convert": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", @@ -24522,20 +24904,6 @@ "node": ">=10" } }, - "node_modules/yargs/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, - "dependencies": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.1", - "wrap-ansi": "^7.0.0" - }, - "engines": { - "node": ">=12" - } - }, "node_modules/yargs/node_modules/yargs-parser": { "version": "21.1.1", "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", @@ -24686,9 +25054,28 @@ }, "packages/cli/node_modules/@types/node": { "version": "18.17.4", - "resolved": "https://registry.npmjs.org/@types/node/-/node-18.17.4.tgz", - "integrity": "sha512-ATL4WLgr7/W40+Sp1WnNTSKbgVn6Pvhc/2RHAdt8fl6NsQyp4oPCi2eKcGOvA494bwf1K/W6nGgZ9TwDqvpjdw==", - "dev": true + "dev": true, + "license": "MIT" + }, + "packages/cli/node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "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" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "packages/cli/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==" }, "packages/cli/node_modules/rimraf": { "version": "3.0.2", @@ -24718,10 +25105,23 @@ "rimraf": "^3.0.2" } }, + "packages/common/node_modules/@types/bn.js": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/@types/bn.js/-/bn.js-5.1.2.tgz", + "integrity": "sha512-dkpZu0szUtn9UXTmw+e0AJFd4D2XAxDnsCLdc05SfqpqzPEBft8eQr8uaFitfo/dUUOZERaLec2hHMG87A4Dxg==", + "dependencies": { + "@types/node": "*" + } + }, "packages/common/node_modules/@types/node": { "version": "18.17.4", - "resolved": "https://registry.npmjs.org/@types/node/-/node-18.17.4.tgz", - "integrity": "sha512-ATL4WLgr7/W40+Sp1WnNTSKbgVn6Pvhc/2RHAdt8fl6NsQyp4oPCi2eKcGOvA494bwf1K/W6nGgZ9TwDqvpjdw==" + "license": "MIT" + }, + "packages/common/node_modules/bn.js": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.1.tgz", + "integrity": "sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==", + "dev": true }, "packages/common/node_modules/rimraf": { "version": "3.0.2", @@ -24772,8 +25172,7 @@ }, "packages/encryption/node_modules/@types/node": { "version": "18.17.4", - "resolved": "https://registry.npmjs.org/@types/node/-/node-18.17.4.tgz", - "integrity": "sha512-ATL4WLgr7/W40+Sp1WnNTSKbgVn6Pvhc/2RHAdt8fl6NsQyp4oPCi2eKcGOvA494bwf1K/W6nGgZ9TwDqvpjdw==" + "license": "MIT" }, "packages/encryption/node_modules/rimraf": { "version": "3.0.2", @@ -24789,6 +25188,20 @@ "url": "https://github.com/sponsors/isaacs" } }, + "packages/encryption/node_modules/triplesec": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/triplesec/-/triplesec-4.0.3.tgz", + "integrity": "sha512-fug70e1nJoCMxsXQJlETisAALohm84vl++IiTTHEqM7Lgqwz62jrlwqOC/gJEAJjO/ByN127sEcioB56HW3wIw==", + "dev": true, + "dependencies": { + "iced-error": ">=0.0.9", + "iced-lock": "^1.0.1", + "iced-runtime": "^1.0.2", + "more-entropy": ">=0.0.7", + "progress": "~1.1.2", + "uglify-js": "^3.1.9" + } + }, "packages/network": { "name": "@stacks/network", "version": "6.8.1", @@ -24854,7 +25267,7 @@ "license": "MIT", "dependencies": { "@btc-helpers/rpc": "^2.0.0", - "@noble/secp256k1": "^2.0.0", + "@noble/secp256k1": "1.7.1", "@scure/base": "^1.1.3", "@scure/btc-signer": "^1.1.0", "@stacks/common": "^6.7.0", @@ -24869,14 +25282,14 @@ "@scure/bip39": "^1.2.1", "jest-fetch-mock": "^3.0.3", "rimraf": "^3.0.2", + "sbtc-bridge-lib": "^1.1.2", "vitest": "^0.34.6" } }, "packages/sbtc/node_modules/@noble/hashes": { "version": "1.3.2", - "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.3.2.tgz", - "integrity": "sha512-MVC8EAQp7MvEcm30KWENFjgR+Mkmf+D189XJTkFIlwohU5hcBbn1ZkKq7KVTi2Hme3PMGF390DaL52beVrIihQ==", "dev": true, + "license": "MIT", "engines": { "node": ">= 16" }, @@ -24886,28 +25299,18 @@ }, "packages/sbtc/node_modules/@noble/secp256k1": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@noble/secp256k1/-/secp256k1-2.0.0.tgz", - "integrity": "sha512-rUGBd95e2a45rlmFTqQJYEFA4/gdIARFfuTuTqLglz0PZ6AKyzyXsEZZq7UZn8hZsvaBgpCzKKBJizT2cJERXw==", "funding": [ { "type": "individual", "url": "https://paulmillr.com/funding/" } - ] - }, - "packages/sbtc/node_modules/@scure/base": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/@scure/base/-/base-1.1.3.tgz", - "integrity": "sha512-/+SgoRjLq7Xlf0CWuLHq2LUZeL/w65kfzAPG5NH9pcmBhs+nunQTn4gvdwgMTIXnt9b2C/1SeL2XiysZEyIC9Q==", - "funding": { - "url": "https://paulmillr.com/funding/" - } + ], + "license": "MIT" }, "packages/sbtc/node_modules/@scure/bip32": { "version": "1.3.2", - "resolved": "https://registry.npmjs.org/@scure/bip32/-/bip32-1.3.2.tgz", - "integrity": "sha512-N1ZhksgwD3OBlwTv3R6KFEcPojl/W4ElJOeCZdi+vuI5QmTFwLq3OFf2zd2ROpKvxFdgZ6hUpb0dx9bVNEwYCA==", "dev": true, + "license": "MIT", "dependencies": { "@noble/curves": "~1.2.0", "@noble/hashes": "~1.3.2", @@ -24919,9 +25322,8 @@ }, "packages/sbtc/node_modules/@scure/bip39": { "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@scure/bip39/-/bip39-1.2.1.tgz", - "integrity": "sha512-Z3/Fsz1yr904dduJD0NpiyRHhRYHdcnyh73FZWiV+/qhWi83wNJ3NWolYqCEN+ZWsUz2TWwajJggcRE9r1zUYg==", "dev": true, + "license": "MIT", "dependencies": { "@noble/hashes": "~1.3.0", "@scure/base": "~1.1.0" @@ -24932,23 +25334,28 @@ }, "packages/sbtc/node_modules/@stacks/common": { "version": "6.8.1", - "resolved": "https://registry.npmjs.org/@stacks/common/-/common-6.8.1.tgz", - "integrity": "sha512-ewL9GLZNQYa5a/3K4xSHlHIgHkD4rwWW/QEaPId8zQIaL+1O9qCaF4LX9orNQeOmEk8kvG0x2xGV54fXKCZeWQ==", + "license": "MIT", "dependencies": { "@types/bn.js": "^5.1.0", "@types/node": "^18.0.4" } }, + "packages/sbtc/node_modules/@types/bn.js": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/@types/bn.js/-/bn.js-5.1.2.tgz", + "integrity": "sha512-dkpZu0szUtn9UXTmw+e0AJFd4D2XAxDnsCLdc05SfqpqzPEBft8eQr8uaFitfo/dUUOZERaLec2hHMG87A4Dxg==", + "dependencies": { + "@types/node": "*" + } + }, "packages/sbtc/node_modules/@types/node": { "version": "18.18.1", - "resolved": "https://registry.npmjs.org/@types/node/-/node-18.18.1.tgz", - "integrity": "sha512-3G42sxmm0fF2+Vtb9TJQpnjmP+uKlWvFa8KoEGquh4gqRmoUG/N0ufuhikw6HEsdG2G2oIKhog1GCTfz9v5NdQ==" + "license": "MIT" }, "packages/sbtc/node_modules/rimraf": { "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", "dev": true, + "license": "ISC", "dependencies": { "glob": "^7.1.3" }, @@ -24980,6 +25387,17 @@ "stream-browserify": "^3.0.0" } }, + "packages/stacking/node_modules/@scure/base": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@scure/base/-/base-1.1.1.tgz", + "integrity": "sha512-ZxOhsSyxYwLJj3pLZCefNitxsj093tb2vq90mp2txoYeBqbcjDjqFhyM8eUjq/uFm6zJ+mUuqxlS2FkuSY1MTA==", + "funding": [ + { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + ] + }, "packages/stacking/node_modules/@stacks/blockchain-api-client": { "version": "7.3.0", "dev": true, @@ -24996,8 +25414,7 @@ }, "packages/stacking/node_modules/@stacks/stacks-blockchain-api-types": { "version": "0.61.0", - "resolved": "https://registry.npmjs.org/@stacks/stacks-blockchain-api-types/-/stacks-blockchain-api-types-0.61.0.tgz", - "integrity": "sha512-yPOfTUboo5eA9BZL/hqMcM71GstrFs9YWzOrJFPeP4cOO1wgYvAcckgBRbgiE3NqeX0A7SLZLDAXLZbATuRq9w==" + "license": "ISC" }, "packages/stacking/node_modules/cross-fetch": { "version": "3.1.5", @@ -25146,11 +25563,19 @@ "buffer": "^6.0.3" } }, + "packages/storage/node_modules/@types/bn.js": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/@types/bn.js/-/bn.js-5.1.2.tgz", + "integrity": "sha512-dkpZu0szUtn9UXTmw+e0AJFd4D2XAxDnsCLdc05SfqpqzPEBft8eQr8uaFitfo/dUUOZERaLec2hHMG87A4Dxg==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, "packages/storage/node_modules/@types/node": { "version": "18.17.4", - "resolved": "https://registry.npmjs.org/@types/node/-/node-18.17.4.tgz", - "integrity": "sha512-ATL4WLgr7/W40+Sp1WnNTSKbgVn6Pvhc/2RHAdt8fl6NsQyp4oPCi2eKcGOvA494bwf1K/W6nGgZ9TwDqvpjdw==", - "dev": true + "dev": true, + "license": "MIT" }, "packages/storage/node_modules/buffer": { "version": "6.0.3", @@ -25257,9 +25682,8 @@ }, "packages/wallet-sdk/node_modules/@types/node": { "version": "18.17.4", - "resolved": "https://registry.npmjs.org/@types/node/-/node-18.17.4.tgz", - "integrity": "sha512-ATL4WLgr7/W40+Sp1WnNTSKbgVn6Pvhc/2RHAdt8fl6NsQyp4oPCi2eKcGOvA494bwf1K/W6nGgZ9TwDqvpjdw==", - "dev": true + "dev": true, + "license": "MIT" }, "packages/wallet-sdk/node_modules/buffer": { "version": "6.0.3", @@ -25282,6 +25706,19 @@ "base64-js": "^1.3.1", "ieee754": "^1.2.1" } + }, + "packages/wallet-sdk/node_modules/triplesec": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/triplesec/-/triplesec-4.0.3.tgz", + "integrity": "sha512-fug70e1nJoCMxsXQJlETisAALohm84vl++IiTTHEqM7Lgqwz62jrlwqOC/gJEAJjO/ByN127sEcioB56HW3wIw==", + "dependencies": { + "iced-error": ">=0.0.9", + "iced-lock": "^1.0.1", + "iced-runtime": "^1.0.2", + "more-entropy": ">=0.0.7", + "progress": "~1.1.2", + "uglify-js": "^3.1.9" + } } } } diff --git a/packages/sbtc/package.json b/packages/sbtc/package.json index b548f3961..d01c9d486 100644 --- a/packages/sbtc/package.json +++ b/packages/sbtc/package.json @@ -36,6 +36,7 @@ "@scure/bip39": "^1.2.1", "jest-fetch-mock": "^3.0.3", "rimraf": "^3.0.2", + "sbtc-bridge-lib": "^1.1.2", "vitest": "^0.34.6" }, "sideEffects": false, diff --git a/packages/sbtc/src/transactions/api.ts b/packages/sbtc/src/transactions/api.ts index 454d10fdf..7d1c7e005 100644 --- a/packages/sbtc/src/transactions/api.ts +++ b/packages/sbtc/src/transactions/api.ts @@ -4,6 +4,7 @@ import * as btc from '@scure/btc-signer'; import { BufferCV, Cl, SomeCV } from '@stacks/transactions'; import { REGTEST } from './constants'; import { wrapLazyProxy } from './utils'; +import { bytesToHex } from '@stacks/common'; /** todo */ // https://blockstream.info/api/address/1KFHE7w8BhaENAswwryaoccDb6qcT6DbYY/utxo @@ -155,12 +156,15 @@ export class DevEnvHelper { } } - const utxos = unspent.map((u: any) => ({ - txid: u.txid, - vout: u.vout, - value: Math.round(u.amount * 1e8), // Bitcoin to satoshis - confirmed: u.confirmations > 0, - })); + const utxos = unspent.map( + (u: any) => + ({ + txid: u.txid, + vout: u.vout, + value: Math.round(u.amount * 1e8), // Bitcoin to satoshis + status: { confirmed: u.confirmations > 0 }, + }) as UtxoWithTx + ); for (const u of utxos) { u.tx = await this.fetchTxHex(u.txid); // sequential, to soften the load on the work queue @@ -170,7 +174,7 @@ export class DevEnvHelper { } async fetchTxHex(txid: string): Promise { - return this.btcRpc.gettransaction({ txid }).then((tx: any) => tx.hex); + return await this.btcRpc.gettransaction({ txid }).then((tx: any) => tx.hex); } /** @@ -188,11 +192,11 @@ export class DevEnvHelper { async estimateFeeRate(target: 'low' | 'medium' | 'high' | number): Promise { switch (target) { case 'high': - return 1; + return 3; case 'medium': return 2; case 'low': - return 3; + return 1; default: return target; } diff --git a/packages/sbtc/src/transactions/constants.ts b/packages/sbtc/src/transactions/constants.ts index 7c2a2f77e..bb8a9db72 100644 --- a/packages/sbtc/src/transactions/constants.ts +++ b/packages/sbtc/src/transactions/constants.ts @@ -5,8 +5,9 @@ import * as btc from '@scure/btc-signer'; export const SBTC_PEG_ADDRESS = 'bcrt1pjzju437r8ldynactcxcgvmaqhfafgsxemej8lm9czvkwka4ffhaqxpc5d2'; export enum MagicBytes { - Mainnet = '5832', - Testnet = '5432', + Mainnet = 'X2', + Testnet = 'T2', + Regtest = 'id', } export enum OpCode { @@ -26,6 +27,7 @@ export type BitcoinNetwork = { bip84: { coin: number; }; + magicBytes: string; }; export const MAINNET: BitcoinNetwork = { @@ -37,6 +39,7 @@ export const MAINNET: BitcoinNetwork = { bip84: { coin: 0, }, + magicBytes: MagicBytes.Mainnet, }; export const TESTNET: BitcoinNetwork = { @@ -48,9 +51,14 @@ export const TESTNET: BitcoinNetwork = { bip84: { coin: 1, }, + magicBytes: MagicBytes.Testnet, }; -export const REGTEST: BitcoinNetwork = { ...TESTNET, bech32: 'bcrt' }; +export const REGTEST: BitcoinNetwork = { + ...TESTNET, + bech32: 'bcrt', + magicBytes: MagicBytes.Regtest, +}; // Estimates based on https://bitcoinops.org/en/tools/calc-size/ export const OVERHEAD_TX = 4 + 1 + 1 + 4; // new btc.Transaction().vsize diff --git a/packages/sbtc/src/transactions/deposit.ts b/packages/sbtc/src/transactions/deposit.ts index 886c6f2ae..85e1268c4 100644 --- a/packages/sbtc/src/transactions/deposit.ts +++ b/packages/sbtc/src/transactions/deposit.ts @@ -1,5 +1,5 @@ import * as btc from '@scure/btc-signer'; -import { hexToBytes } from '@stacks/common'; +import { asciiToBytes, hexToBytes } from '@stacks/common'; import * as P from 'micro-packed'; import { UtxoWithTx } from './api'; import { @@ -28,10 +28,10 @@ export function buildSBtcDepositBtcPayload({ network: BitcoinNetwork; address: string; }): Uint8Array { - const magicBytes = - net.bech32 === 'tb' ? hexToBytes(MagicBytes.Testnet) : hexToBytes(MagicBytes.Mainnet); + const magicBytes = asciiToBytes(net.magicBytes); const opCodeBytes = hexToBytes(OpCode.PegIn); - return concat(magicBytes, opCodeBytes, stacksAddressBytes(address)); + const principalTypeBytes = address.includes('.') ? hexToBytes('06') : hexToBytes('05'); + return concat(magicBytes, opCodeBytes, principalTypeBytes, stacksAddressBytes(address)); } /** */ diff --git a/packages/sbtc/src/transactions/utils.ts b/packages/sbtc/src/transactions/utils.ts index aa50e2e1e..bdd0c1ac3 100644 --- a/packages/sbtc/src/transactions/utils.ts +++ b/packages/sbtc/src/transactions/utils.ts @@ -25,7 +25,7 @@ export function lengthPrefixedString( maxByteLength: number = 40, prefixByteLength: number = 1 ): Uint8Array { - if (!something) return Uint8Array.from([0]); // empty or nullish (optional) + if (!something) return new Uint8Array(0); // empty or nullish (optional) const bytes = map(something); if (maxByteLength >= 0 && bytes.byteLength > maxByteLength) diff --git a/packages/sbtc/tests/api.test.ts b/packages/sbtc/tests/api.test.ts index f9968d4ae..734bd846e 100644 --- a/packages/sbtc/tests/api.test.ts +++ b/packages/sbtc/tests/api.test.ts @@ -7,21 +7,23 @@ const dev = new DevEnvHelper(); test('minting bitcoin increases balance', async () => { const wallet = await getBitcoinAccount(WALLET_01); - const balance = await dev.getBalance(wallet.address); + const balance = await dev.getBalance(wallet.wpkh.address); + console.log('balance', balance); await dev.btcRpc.generatetoaddress({ nblocks: 101, // more than 100 blocks, because coinbase txs mature after 100 blocks - address: wallet.address, + address: wallet.wpkh.address, }); - const balanceAfter = await dev.getBalance(wallet.address); + const balanceAfter = await dev.getBalance(wallet.wpkh.address); expect(balanceAfter).toBeGreaterThan(balance); + console.log('balanceAfter', balanceAfter); }); test('fetch utxos', async () => { const wallet = await getBitcoinAccount(WALLET_01); - const unspent = await dev.fetchUtxos(wallet.address); + const unspent = await dev.fetchUtxos(wallet.wpkh.address); expect(unspent.length).toBeGreaterThan(0); expect(unspent[0]).toMatchObject( @@ -32,8 +34,15 @@ test('fetch utxos', async () => { test('get balance', async () => { const wallet = await getBitcoinAccount(WALLET_01); - const balance = await dev.getBalance(wallet.address); + const balance = await dev.getBalance(wallet.wpkh.address); console.log('balance', balance); expect(balance).toBeGreaterThan(0); }); + +test('fee estimate', async () => { + const feeRate = await dev.estimateFeeRate('high'); + console.log('feeRate', feeRate); + + expect(feeRate).toBeGreaterThan(0); +}); diff --git a/packages/sbtc/tests/deposit.test.ts b/packages/sbtc/tests/deposit.test.ts index 3b4ce80ac..be313eefa 100644 --- a/packages/sbtc/tests/deposit.test.ts +++ b/packages/sbtc/tests/deposit.test.ts @@ -1,6 +1,10 @@ +import * as btc from '@scure/btc-signer'; +import { hexToBytes } from '@stacks/common'; +import { UTXO, buildDepositTransaction } from 'sbtc-bridge-lib'; import { expect, test } from 'vitest'; +import { bytesToHex } from '../../common/src'; import { DevEnvHelper, sbtcDepositHelper } from '../src'; -import { WALLET_01, getBitcoinAccount, getStacksAccount } from './testHelpers'; +import { WALLET_00, WALLET_01, getBitcoinAccount, getStacksAccount } from './testHelpers'; const dev = new DevEnvHelper(); @@ -9,10 +13,10 @@ test('deposit', async () => { const stacksAccount = await getStacksAccount(WALLET_01); console.log('stacksAccount.address', stacksAccount.address); - const balance = await dev.getBalance(bitcoinAccount.address); + const balance = await dev.getBalance(bitcoinAccount.wpkh.address); expect(balance).toBeGreaterThan(0); - const utxos = await dev.fetchUtxos(bitcoinAccount.address); + const utxos = await dev.fetchUtxos(bitcoinAccount.wpkh.address); expect(utxos.length).toBeGreaterThan(0); const pegAddress = await dev.getSbtcPegAddress('ST1PQHQKV0RJXZFY1DGX8MNSNYVE3VGZJSRTPGZGM.asset'); @@ -27,7 +31,7 @@ test('deposit', async () => { feeRate: await dev.estimateFeeRate('low'), utxos, - bitcoinChangeAddress: bitcoinAccount.address, + bitcoinChangeAddress: bitcoinAccount.wpkh.address, }); tx.sign(bitcoinAccount.privateKey); @@ -38,6 +42,75 @@ test('deposit', async () => { // Tx broadcasting const txid = await dev.broadcastTx(tx); expect(txid).toBeDefined(); + console.log('txid', txid); +}); + +test('deposit, tx compare, broadcast', async () => { + const bitcoinAccount = await getBitcoinAccount(WALLET_01); + const stacksAccount = await getStacksAccount(WALLET_00, 1); + + const utxos = await dev.fetchUtxos(bitcoinAccount.wpkh.address); + + const pegAccount = await getBitcoinAccount(WALLET_00); + const pegPublicKey = bytesToHex(pegAccount.tr.publicKey); + const pegAddress = pegAccount.tr.address; + // TODO: SHOULD THIS WORK INSTEAD? public key / address should be fetchable with little knowledge + // const pegAddress = await dev.getSbtcPegAddress('ST1PQHQKV0RJXZFY1DGX8MNSNYVE3VGZJSRTPGZGM.asset'); + // const pegPublicKey = bytesToHex( + // ( + // (await dev.stacksCallReadOnly({ + // contractAddress: 'ST1PQHQKV0RJXZFY1DGX8MNSNYVE3VGZJSRTPGZGM.asset', + // functionName: 'get-bitcoin-wallet-public-key', + // })) as any + // ).value.buffer + // ); + + // Tx building + const txStacksjs = await sbtcDepositHelper({ + pegAddress, // sBTC contract emitted public key => tr btc address + + stacksAddress: stacksAccount.address, + amountSats: 1_000, + + feeRate: await dev.estimateFeeRate('low'), + utxos, + + bitcoinChangeAddress: bitcoinAccount.wpkh.address, + }); + + const txLib = buildDepositTransaction( + 'development', + pegPublicKey, + { + amountSats: 1000, + bitcoinAddress: bitcoinAccount.wpkh.address, + paymentPublicKey: bytesToHex(bitcoinAccount.publicKey), + principal: stacksAccount.address, + reclaimPublicKey: 'NOT-USED-FOR-OP-DROP', + sbtcWalletPublicKey: pegPublicKey, + }, + { high_fee_per_kb: 3 * 1024, medium_fee_per_kb: 2 * 1024, low_fee_per_kb: 1 * 1024 }, + utxos as UTXO[] + ); + + // expect(txStacksjs.getOutput(0)).toEqual(txLib.getOutput(0)); + // expect(txStacksjs.getOutput(1)).toEqual(txLib.getOutput(1)); + + const hexCli = + '010000000001010221549531adce86b1fbcc178c0535d85d90b7f521d284df018b43f5529650730000000000feffffff0300000000000000001b6a1969643c051ab3a14500ad8ac4e6d823ab20fd2c6d1369aa5bb7e8030000000000002251205e682db7c014ab76f2b4fdcbbdb76f9b8111468174cdb159df6e88fe9d078ce6eb2a50090000000016001488bfaab3ad5f2f164e1cbb50cd07658ccea264e002473044022042ff63f361a5c3be42525a4dbfd8410a4d932449e6f849aebd97b3076f7b3d14022061c80cf8ecbcc2a633370e026a11ae0ad3e0be2f2838e073a15fae5a08fe48f0012103969ff3e2bf7f2f73dc903cd11442032c8c7811d57d96ce327ee89c9edea63fa899040000'; + const txCli = btc.Transaction.fromRaw(hexToBytes(hexCli), { + allowUnknownInputs: true, + allowUnknownOutputs: true, + }); + + expect(txStacksjs.getOutput(0)).toEqual(txCli.getOutput(0)); + expect(txStacksjs.getOutput(1)).toEqual(txCli.getOutput(1)); + + txStacksjs.sign(bitcoinAccount.privateKey); + txStacksjs.finalize(); + + const txid = await dev.broadcastTx(txStacksjs); + console.log('txid', txid); }); // api.broadcastTx(tx); diff --git a/packages/sbtc/tests/testHelpers.ts b/packages/sbtc/tests/testHelpers.ts index 87dc7ccef..a16a7737c 100644 --- a/packages/sbtc/tests/testHelpers.ts +++ b/packages/sbtc/tests/testHelpers.ts @@ -1,17 +1,19 @@ +import { ProjectivePoint, utils } from '@noble/secp256k1'; import { HDKey } from '@scure/bip32'; import * as bip39 from '@scure/bip39'; import * as btc from '@scure/btc-signer'; -import { REGTEST } from '../src'; +import { TransactionVersion } from '@stacks/transactions'; import { DerivationType, deriveAccount, - generateNewAccount, generateWallet, getRootNode, getStxAddress, } from '@stacks/wallet-sdk'; -import { TransactionVersion } from '@stacks/transactions'; +import { REGTEST } from '../src'; +export const WALLET_00 = + 'twice kind fence tip hidden tilt action fragile skin nothing glory cousin green tomorrow spring wrist shed math olympic multiply hip blue scout claw'; export const WALLET_01 = 'sell invite acquire kitten bamboo drastic jelly vivid peace spawn twice guilt pave pen trash pretty park cube fragile unaware remain midnight betray rebuild'; export const WALLET_02 = @@ -22,11 +24,22 @@ export async function getBitcoinAccount(mnemonic: string, idx: number = 0) { const hdkey = HDKey.fromMasterSeed(seed, REGTEST.bip32); const path = `m/84'/${REGTEST.bip84.coin}'/${idx}'/0/0`; - const privateKey = hdkey.derive(path).privateKey!; - const address = btc.getAddress('wpkh', privateKey, REGTEST)!; + const publicKey = hdkey.derive(path).publicKey!; - return { privateKey, address }; + const trPath = `m/86'/${REGTEST.bip84.coin}'/${idx}'/0/0`; + const trPrivateKey = hdkey.derive(trPath).privateKey!; + const trPublicKey = hdkey.derive(trPath).publicKey!; // not sure if this should be used, but this is what the CLI returns + + return { + privateKey, + publicKey, + wpkh: { address: btc.getAddress('wpkh', privateKey, REGTEST)! }, + tr: { + address: btc.getAddress('tr', trPrivateKey, REGTEST)!, + publicKey: trPublicKey, + }, + }; } export async function getStacksAccount(mnemonic: string, idx: number = 0) { @@ -48,6 +61,10 @@ export async function getStacksAccount(mnemonic: string, idx: number = 0) { }; } +export function schnorrPublicKey(privateKey: Uint8Array) { + return ProjectivePoint.fromPrivateKey(privateKey).toRawBytes(true).slice(1); +} + export function sleep(ms: number) { return new Promise(resolve => setTimeout(resolve, ms)); } From 98c7750d845c8bab432635126a84368be71537ee Mon Sep 17 00:00:00 2001 From: janniks Date: Tue, 10 Oct 2023 03:46:56 +0200 Subject: [PATCH 16/49] feat: add successful withdraw --- packages/encryption/src/messageSignature.ts | 10 ++- packages/sbtc/src/transactions/api.ts | 48 +++++++++--- packages/sbtc/src/transactions/constants.ts | 2 + packages/sbtc/src/transactions/deposit.ts | 16 +--- packages/sbtc/src/transactions/withdraw.ts | 72 +++++++++++++---- packages/sbtc/tests/api.test.ts | 45 +++++++++-- packages/sbtc/tests/deposit.test.ts | 78 ++++++------------- .../tests/helpers/fetch-record-polyfill.ts | 30 +++++++ .../{testHelpers.ts => helpers/wallet.ts} | 16 ++-- packages/sbtc/tests/withdraw.test.ts | 75 ++++++++++++++++++ 10 files changed, 284 insertions(+), 108 deletions(-) create mode 100644 packages/sbtc/tests/helpers/fetch-record-polyfill.ts rename packages/sbtc/tests/{testHelpers.ts => helpers/wallet.ts} (82%) create mode 100644 packages/sbtc/tests/withdraw.test.ts diff --git a/packages/encryption/src/messageSignature.ts b/packages/encryption/src/messageSignature.ts index 5f328a7af..bba75490b 100644 --- a/packages/encryption/src/messageSignature.ts +++ b/packages/encryption/src/messageSignature.ts @@ -6,8 +6,12 @@ import { decode, encode, encodingLength } from './varuint'; // 'Stacks Signed Message:\n'.length.toString(16) === 17 const chainPrefix = '\x17Stacks Signed Message:\n'; -export function hashMessage(message: string, prefix: string = chainPrefix): Uint8Array { - return sha256(encodeMessage(message, prefix)); +export function hashMessage( + message: string | Uint8Array, + prefix: string = chainPrefix +): Uint8Array { + const messageBytes = typeof message == 'string' ? utf8ToBytes(message) : message; + return sha256(encodeMessage(messageBytes, prefix)); } export function encodeMessage( @@ -15,7 +19,7 @@ export function encodeMessage( prefix: string = chainPrefix ): Uint8Array { const messageBytes = typeof message == 'string' ? utf8ToBytes(message) : message; - const encodedLength = encode(messageBytes.length); + const encodedLength = encode(messageBytes.byteLength); return concatBytes(utf8ToBytes(prefix), encodedLength, messageBytes); } diff --git a/packages/sbtc/src/transactions/api.ts b/packages/sbtc/src/transactions/api.ts index 7d1c7e005..a62df6ecc 100644 --- a/packages/sbtc/src/transactions/api.ts +++ b/packages/sbtc/src/transactions/api.ts @@ -1,10 +1,13 @@ import RpcClient from '@btc-helpers/rpc'; import { RpcCallSpec } from '@btc-helpers/rpc/dist/callspec'; import * as btc from '@scure/btc-signer'; -import { BufferCV, Cl, SomeCV } from '@stacks/transactions'; +import { BufferCV, Cl, SomeCV, UIntCV, serializeCV } from '@stacks/transactions'; import { REGTEST } from './constants'; import { wrapLazyProxy } from './utils'; import { bytesToHex } from '@stacks/common'; +import { c } from 'vitest/dist/reporters-5f784f42'; +import { ClarityType } from '@stacks/transactions'; +import { ClarityValue } from '@stacks/transactions'; /** todo */ // https://blockstream.info/api/address/1KFHE7w8BhaENAswwryaoccDb6qcT6DbYY/utxo @@ -109,8 +112,8 @@ export class TestnetHelper { /** todo */ export interface DevEnvConfig { bitcoinCoreRpcUrl: string; - bitcoinElectrumApiUrl: string; // electrs - bitcoinExplorerUrl: string; // explorer can access electrum + bitcoinElectrumApiUrl: string; // electrs? todo: do we need this? + mempoolExplorerUrl: string; stacksApiUrl: string; sbtcBridgeApiUrl: string; } @@ -125,7 +128,7 @@ export class DevEnvHelper { { bitcoinCoreRpcUrl: 'http://devnet:devnet@127.0.0.1:18443', bitcoinElectrumApiUrl: 'http://127.0.0.1:60401', - bitcoinExplorerUrl: 'http://127.0.0.1:3002', + mempoolExplorerUrl: 'http://127.0.0.1:8083', stacksApiUrl: 'http://127.0.0.1:3999', sbtcBridgeApiUrl: 'http://127.0.0.1:3010', }, @@ -174,27 +177,28 @@ export class DevEnvHelper { } async fetchTxHex(txid: string): Promise { - return await this.btcRpc.gettransaction({ txid }).then((tx: any) => tx.hex); + // todo: error handling? + return fetch(`${this.config.mempoolExplorerUrl}/api/tx/${txid}/hex`).then(res => res.text()); } /** */ async getBalance(address: string): Promise { const addressInfo = await fetch( - `${this.config.bitcoinExplorerUrl}/api/address/${address}` + `${this.config.mempoolExplorerUrl}/api/address/${address}` ).then(r => r.json()); - return addressInfo.txHistory.balanceSat; + return addressInfo.chain_stats.funded_txo_sum - addressInfo.chain_stats.spent_txo_sum; } // Fake impl for devenv // eslint-disable-next-line @typescript-eslint/require-await - async estimateFeeRate(target: 'low' | 'medium' | 'high' | number): Promise { + async estimateFeeRate(target: 'low' | 'medium' | 'high' | number = 'medium'): Promise { switch (target) { case 'high': - return 3; + return 1.4; case 'medium': - return 2; + return 1.2; case 'low': return 1; default: @@ -216,10 +220,12 @@ export class DevEnvHelper { contractAddress: string; functionName: string; sender?: string; - args?: string[]; + args?: ClarityValue[]; }) { contractAddress = contractAddress.replace('.', '/'); + const argsSerialized = args.map(serializeCV).map(bytesToHex); + return await fetch( `${this.config.stacksApiUrl}/v2/contracts/call-read/${contractAddress}/${encodeURIComponent( functionName @@ -230,7 +236,7 @@ export class DevEnvHelper { Accept: 'application/json', 'Content-Type': 'application/json', }, - body: JSON.stringify({ sender, arguments: args }), + body: JSON.stringify({ sender, arguments: argsSerialized }), } ) .then(res => { @@ -255,6 +261,24 @@ export class DevEnvHelper { pubkey: publicKey.length === 33 ? publicKey.subarray(1) : publicKey, }); } + + async getSbtcBalance({ + holderAddress, + sbtcContract, + }: { + holderAddress: string; + sbtcContract: string; + }) { + const [address, name] = holderAddress.split('.'); + + const balance = (await this.stacksCallReadOnly({ + contractAddress: sbtcContract, + functionName: 'get-balance', + args: [name ? Cl.contractPrincipal(address, name) : Cl.standardPrincipal(address)], + })) as SomeCV; + + return balance?.value?.value ?? 0; + } } export function sleep(ms: number) { diff --git a/packages/sbtc/src/transactions/constants.ts b/packages/sbtc/src/transactions/constants.ts index bb8a9db72..6dc506df3 100644 --- a/packages/sbtc/src/transactions/constants.ts +++ b/packages/sbtc/src/transactions/constants.ts @@ -4,6 +4,8 @@ import * as btc from '@scure/btc-signer'; // or replace with testnet final address export const SBTC_PEG_ADDRESS = 'bcrt1pjzju437r8ldynactcxcgvmaqhfafgsxemej8lm9czvkwka4ffhaqxpc5d2'; +export const SBTC_FT_ADDRESS = 'ST1PQHQKV0RJXZFY1DGX8MNSNYVE3VGZJSRTPGZGM.asset'; + export enum MagicBytes { Mainnet = 'X2', Testnet = 'T2', diff --git a/packages/sbtc/src/transactions/deposit.ts b/packages/sbtc/src/transactions/deposit.ts index 85e1268c4..bf5440696 100644 --- a/packages/sbtc/src/transactions/deposit.ts +++ b/packages/sbtc/src/transactions/deposit.ts @@ -2,14 +2,7 @@ import * as btc from '@scure/btc-signer'; import { asciiToBytes, hexToBytes } from '@stacks/common'; import * as P from 'micro-packed'; import { UtxoWithTx } from './api'; -import { - BitcoinNetwork, - MagicBytes, - OpCode, - REGTEST, - SBTC_PEG_ADDRESS, - VSIZE_INPUT_P2WPKH, -} from './constants'; +import { BitcoinNetwork, OpCode, REGTEST, SBTC_PEG_ADDRESS, VSIZE_INPUT_P2WPKH } from './constants'; import { DEFAULT_UTXO_TO_SPENDABLE, SpendableByScriptTypes, @@ -22,13 +15,13 @@ import { const concat = P.concatBytes; export function buildSBtcDepositBtcPayload({ - network: net, + network, address, }: { network: BitcoinNetwork; address: string; }): Uint8Array { - const magicBytes = asciiToBytes(net.magicBytes); + const magicBytes = asciiToBytes(network.magicBytes); const opCodeBytes = hexToBytes(OpCode.PegIn); const principalTypeBytes = address.includes('.') ? hexToBytes('06') : hexToBytes('05'); return concat(magicBytes, opCodeBytes, principalTypeBytes, stacksAddressBytes(address)); @@ -54,7 +47,6 @@ export function buildSbtcDepositTxOpReturn({ const data = buildSBtcDepositBtcPayload({ network, address: stacksAddress }); const tx = new btc.Transaction({ - // todo: disbale unknown allowUnknownInputs: true, allowUnknownOutputs: true, }); @@ -101,7 +93,7 @@ export async function sbtcDepositHelper({ for (const input of pay.inputs) tx.addInput(input); const changeAfterAdditionalOutput = - BigInt(Math.ceil(VSIZE_INPUT_P2WPKH * feeRate)) - pay.changeSats; + pay.changeSats - BigInt(Math.ceil(VSIZE_INPUT_P2WPKH * feeRate)); if (changeAfterAdditionalOutput > dustMinimum(VSIZE_INPUT_P2WPKH, feeRate)) { tx.addOutputAddress(bitcoinChangeAddress, changeAfterAdditionalOutput, network); } diff --git a/packages/sbtc/src/transactions/withdraw.ts b/packages/sbtc/src/transactions/withdraw.ts index 08e2e24b0..9eca949b4 100644 --- a/packages/sbtc/src/transactions/withdraw.ts +++ b/packages/sbtc/src/transactions/withdraw.ts @@ -1,10 +1,16 @@ import * as btc from '@scure/btc-signer'; -import { hexToBytes } from '@stacks/common'; +import { asciiToBytes, hexToBytes } from '@stacks/common'; import * as P from 'micro-packed'; import { UtxoWithTx } from './api'; -import { BitcoinNetwork, MagicBytes, OpCode, REGTEST, VSIZE_INPUT_P2WPKH } from './constants'; +import { BitcoinNetwork, OpCode, REGTEST, SBTC_PEG_ADDRESS, VSIZE_INPUT_P2WPKH } from './constants'; -import { SpendableByScriptTypes, dustMinimum, paymentInfo } from './utils'; +import { + DEFAULT_UTXO_TO_SPENDABLE, + SpendableByScriptTypes, + dustMinimum, + paymentInfo, + shUtxoToSpendable, +} from './utils'; const concat = P.concatBytes; @@ -14,22 +20,41 @@ export async function sbtcWithdrawHelper({ network = REGTEST, amountSats, signature, + fulfillmentFeeSats, bitcoinAddress, bitcoinChangeAddress, + pegAddress = SBTC_PEG_ADDRESS, feeRate, utxos, - utxoToSpendable, + utxoToSpendable = DEFAULT_UTXO_TO_SPENDABLE, + paymentPublicKey, }: { network?: BitcoinNetwork; amountSats: number; signature: string; + fulfillmentFeeSats: number; + /** + * Recipient address. + * ~(Will also be used as change address if `bitcoinChangeAddress` is not specified)~ todo + */ bitcoinAddress: string; - bitcoinChangeAddress?: string; + bitcoinChangeAddress: string; + pegAddress?: string; feeRate: number; utxos: UtxoWithTx[]; - utxoToSpendable: Partial; + /** + * Tries to convert p2wpk and p2sh utxos to spendable inputs by default. + * To extend, add your own function that takes a {@link UtxoToSpendableOpts} + * and returns a {@link Spendable}. + */ + utxoToSpendable?: Partial; + paymentPublicKey?: string; }) { - bitcoinChangeAddress ??= bitcoinAddress; + // bitcoinChangeAddress ??= bitcoinAddress; // todo: maybe not expected + + if (paymentPublicKey) { + utxoToSpendable.sh = shUtxoToSpendable.bind(null, network, paymentPublicKey); + } const tx = buildSbtcWithdrawTxOpReturn({ network, @@ -37,13 +62,14 @@ export async function sbtcWithdrawHelper({ signature, bitcoinAddress, }); + tx.addOutputAddress(pegAddress, BigInt(fulfillmentFeeSats), network); // we separate this part, since wallets could handle it themselves const pay = await paymentInfo({ tx, feeRate, utxos, utxoToSpendable }); for (const input of pay.inputs) tx.addInput(input); const changeAfterAdditionalOutput = - BigInt(Math.ceil(VSIZE_INPUT_P2WPKH * feeRate)) - pay.changeSats; + pay.changeSats - BigInt(Math.ceil(VSIZE_INPUT_P2WPKH * feeRate)); if (changeAfterAdditionalOutput > dustMinimum(VSIZE_INPUT_P2WPKH, feeRate)) { tx.addOutputAddress(bitcoinChangeAddress, changeAfterAdditionalOutput, network); } @@ -67,7 +93,6 @@ export function buildSbtcWithdrawTxOpReturn({ const data = buildSBtcWithdrawBtcPayload({ network, amountSats, signature }); const tx = new btc.Transaction({ - // todo: disbale unknown allowUnknownInputs: true, allowUnknownOutputs: true, }); @@ -78,18 +103,37 @@ export function buildSbtcWithdrawTxOpReturn({ } export function buildSBtcWithdrawBtcPayload({ - network: net, + network = REGTEST, amountSats, signature, }: { - network: BitcoinNetwork; + network?: BitcoinNetwork; amountSats: number; signature: string; }): Uint8Array { - const magicBytes = - net.bech32 === 'tb' ? hexToBytes(MagicBytes.Testnet) : hexToBytes(MagicBytes.Mainnet); + const magicBytes = asciiToBytes(network.magicBytes); const opCodeBytes = hexToBytes(OpCode.PegOut); const amountBytes = P.U64BE.encode(BigInt(amountSats)); - const signatureBytes = hexToBytes(signature); + const signatureBytes = hexToBytes(signature.slice(signature.length - 2) + signature.slice(0, -2)); return concat(magicBytes, opCodeBytes, amountBytes, signatureBytes); } + +export function sbtcWithdrawMessage({ + network = REGTEST, + amountSats, + bitcoinAddress, +}: { + network?: BitcoinNetwork; + amountSats: number; + bitcoinAddress: string; +}): Uint8Array { + const amountBytes = P.U64BE.encode(BigInt(amountSats)); + const scriptPub = btc.OutScript.encode(btc.Address(network).decode(bitcoinAddress)); + const data = concat(amountBytes, scriptPub); + return data; + + // length prefix is added by `encodeMessage` + // const lengthPrefixBytes = hexToBytes(data.byteLength.toString(8)); + // // const lengthPrefixBytes = hexToBytes(intToHex(data.byteLength, 1)); // todo: why?! (compare lib) + // return concat(lengthPrefixBytes, data); // todo: refactor to length-prefix abstraction (combine with other existing helpers) +} diff --git a/packages/sbtc/tests/api.test.ts b/packages/sbtc/tests/api.test.ts index 734bd846e..fcc929a2c 100644 --- a/packages/sbtc/tests/api.test.ts +++ b/packages/sbtc/tests/api.test.ts @@ -1,11 +1,13 @@ +import { bytesToHex } from '@stacks/common'; +import { BufferCV, SomeCV } from '@stacks/transactions'; import { expect, test } from 'vitest'; -import { DevEnvHelper } from '../src'; -import { WALLET_01, getBitcoinAccount } from './testHelpers'; +import { DevEnvHelper, SBTC_FT_ADDRESS } from '../src'; +import { WALLET_00, WALLET_02, getBitcoinAccount, getStacksAccount } from './helpers/wallet'; const dev = new DevEnvHelper(); test('minting bitcoin increases balance', async () => { - const wallet = await getBitcoinAccount(WALLET_01); + const wallet = await getBitcoinAccount(WALLET_00, 1); const balance = await dev.getBalance(wallet.wpkh.address); console.log('balance', balance); @@ -21,7 +23,7 @@ test('minting bitcoin increases balance', async () => { }); test('fetch utxos', async () => { - const wallet = await getBitcoinAccount(WALLET_01); + const wallet = await getBitcoinAccount(WALLET_00); const unspent = await dev.fetchUtxos(wallet.wpkh.address); @@ -31,8 +33,8 @@ test('fetch utxos', async () => { ); }); -test('get balance', async () => { - const wallet = await getBitcoinAccount(WALLET_01); +test('get btc balance', async () => { + const wallet = await getBitcoinAccount(WALLET_02, 2); const balance = await dev.getBalance(wallet.wpkh.address); console.log('balance', balance); @@ -40,9 +42,40 @@ test('get balance', async () => { expect(balance).toBeGreaterThan(0); }); +test('get sbtc balance', async () => { + const wallet = await getStacksAccount(WALLET_00, 1); + + const balance = await dev.getSbtcBalance({ + holderAddress: wallet.address, + sbtcContract: SBTC_FT_ADDRESS, + }); + console.log('balance', balance); + + expect(balance).toBeGreaterThan(0); +}); + test('fee estimate', async () => { const feeRate = await dev.estimateFeeRate('high'); console.log('feeRate', feeRate); expect(feeRate).toBeGreaterThan(0); }); + +test('peg address compare', async () => { + const pegAccount = await getBitcoinAccount(WALLET_00); + const pegPublicKeyA = bytesToHex(pegAccount.tr.publicKey); + const pegAddressA = pegAccount.tr.address; + + const pegPublicKeyB = bytesToHex( + ( + (await dev.stacksCallReadOnly({ + contractAddress: `${SBTC_FT_ADDRESS}.asset`, + functionName: 'get-bitcoin-wallet-public-key', + })) as SomeCV + ).value.buffer + ); + const pegAddressB = await dev.getSbtcPegAddress(`${SBTC_FT_ADDRESS}.asset`); + + expect(pegPublicKeyA).toEqual(pegPublicKeyB); + expect(pegAddressA).toEqual(pegAddressB); +}); diff --git a/packages/sbtc/tests/deposit.test.ts b/packages/sbtc/tests/deposit.test.ts index be313eefa..0a5c77ed4 100644 --- a/packages/sbtc/tests/deposit.test.ts +++ b/packages/sbtc/tests/deposit.test.ts @@ -4,49 +4,12 @@ import { UTXO, buildDepositTransaction } from 'sbtc-bridge-lib'; import { expect, test } from 'vitest'; import { bytesToHex } from '../../common/src'; import { DevEnvHelper, sbtcDepositHelper } from '../src'; -import { WALLET_00, WALLET_01, getBitcoinAccount, getStacksAccount } from './testHelpers'; +import { WALLET_00, WALLET_01, getBitcoinAccount, getStacksAccount } from './helpers/wallet'; const dev = new DevEnvHelper(); -test('deposit', async () => { - const bitcoinAccount = await getBitcoinAccount(WALLET_01); - const stacksAccount = await getStacksAccount(WALLET_01); - console.log('stacksAccount.address', stacksAccount.address); - - const balance = await dev.getBalance(bitcoinAccount.wpkh.address); - expect(balance).toBeGreaterThan(0); - - const utxos = await dev.fetchUtxos(bitcoinAccount.wpkh.address); - expect(utxos.length).toBeGreaterThan(0); - - const pegAddress = await dev.getSbtcPegAddress('ST1PQHQKV0RJXZFY1DGX8MNSNYVE3VGZJSRTPGZGM.asset'); - - // Tx building (most simple interface) OR more simple: remove duplicate args and assume defaults - const tx = await sbtcDepositHelper({ - pegAddress, // sBTC contract emitted public key => tr btc address - - stacksAddress: stacksAccount.address, - amountSats: 1_000, - - feeRate: await dev.estimateFeeRate('low'), - utxos, - - bitcoinChangeAddress: bitcoinAccount.wpkh.address, - }); - - tx.sign(bitcoinAccount.privateKey); - tx.finalize(); - - expect(tx).toBeDefined(); // yay, it didn't throw - - // Tx broadcasting - const txid = await dev.broadcastTx(tx); - expect(txid).toBeDefined(); - console.log('txid', txid); -}); - -test('deposit, tx compare, broadcast', async () => { - const bitcoinAccount = await getBitcoinAccount(WALLET_01); +test('deposit, tx compare', async () => { + const bitcoinAccount = await getBitcoinAccount(WALLET_00); const stacksAccount = await getStacksAccount(WALLET_00, 1); const utxos = await dev.fetchUtxos(bitcoinAccount.wpkh.address); @@ -93,6 +56,7 @@ test('deposit, tx compare, broadcast', async () => { utxos as UTXO[] ); + // todo: fails right now (0 suffix) // expect(txStacksjs.getOutput(0)).toEqual(txLib.getOutput(0)); // expect(txStacksjs.getOutput(1)).toEqual(txLib.getOutput(1)); @@ -105,6 +69,27 @@ test('deposit, tx compare, broadcast', async () => { expect(txStacksjs.getOutput(0)).toEqual(txCli.getOutput(0)); expect(txStacksjs.getOutput(1)).toEqual(txCli.getOutput(1)); +}); + +test('deposit, broadcast', async () => { + const bitcoinAccount = await getBitcoinAccount(WALLET_00); + const stacksAccount = await getStacksAccount(WALLET_00, 1); + + const pegAccount = await getBitcoinAccount(WALLET_00); + const pegAddress = pegAccount.tr.address; + + // Tx building + const txStacksjs = await sbtcDepositHelper({ + pegAddress, // sBTC contract emitted public key => tr btc address + + stacksAddress: stacksAccount.address, + amountSats: 1_000, + + feeRate: await dev.estimateFeeRate('low'), + utxos: await dev.fetchUtxos(bitcoinAccount.wpkh.address), + + bitcoinChangeAddress: bitcoinAccount.wpkh.address, + }); txStacksjs.sign(bitcoinAccount.privateKey); txStacksjs.finalize(); @@ -112,16 +97,3 @@ test('deposit, tx compare, broadcast', async () => { const txid = await dev.broadcastTx(txStacksjs); console.log('txid', txid); }); - -// api.broadcastTx(tx); - -// == Advanced ================================================================= - -// const PEG_PUB_KEY = ( -// await api.stacksCallReadOnly({ -// contractAddress: "ST1R1061ZT6KPJXQ7PAXPFB6ZAZ6ZWW28G8HXK9G5.romeo-bridge", -// functionName: "get-bitcoin-wallet-public-key", -// sender: TARGET_STACKS_ADDRESS, // not actually used in call -// }) -// ).value.buffer; -// const PEG_ADDRESS = btc.p2tr(PEG_PUB_KEY, undefined, btc.TEST_NETWORK).address; diff --git a/packages/sbtc/tests/helpers/fetch-record-polyfill.ts b/packages/sbtc/tests/helpers/fetch-record-polyfill.ts new file mode 100644 index 000000000..db5255866 --- /dev/null +++ b/packages/sbtc/tests/helpers/fetch-record-polyfill.ts @@ -0,0 +1,30 @@ +// import * as fs from 'fs'; + +// // Overriding fetch +// global.fetch = async (...args) => { +// try { +// // Perform the actual fetch +// const response = await fetch(...args); + +// // Extract the information you need from the response +// const responseData = await response.clone().text(); + +// if (typeof args[0] === 'string') { +// const url = new URL(args[0]); +// const path = `${args[0].hostname}${args[0].pathname}`; +// const log = `"${path}": ${responseData}`; +// } else { +// const log = `"${args[0]}": ${responseData}`; +// } +// const path = args[0]; + +// const log = `"${args[0]}": ""`; +// fs.appendFileSync('./network.log', JSON.stringify(log)); + +// // Return the response as if nothing happened +// return response; +// } catch (error) { +// console.error('Fetch error: ', error); +// throw error; +// } +// }; diff --git a/packages/sbtc/tests/testHelpers.ts b/packages/sbtc/tests/helpers/wallet.ts similarity index 82% rename from packages/sbtc/tests/testHelpers.ts rename to packages/sbtc/tests/helpers/wallet.ts index a16a7737c..abc3a18b1 100644 --- a/packages/sbtc/tests/testHelpers.ts +++ b/packages/sbtc/tests/helpers/wallet.ts @@ -1,4 +1,4 @@ -import { ProjectivePoint, utils } from '@noble/secp256k1'; +import { ProjectivePoint } from '@noble/secp256k1'; import { HDKey } from '@scure/bip32'; import * as bip39 from '@scure/bip39'; import * as btc from '@scure/btc-signer'; @@ -10,7 +10,7 @@ import { getRootNode, getStxAddress, } from '@stacks/wallet-sdk'; -import { REGTEST } from '../src'; +import { REGTEST } from '../../src'; export const WALLET_00 = 'twice kind fence tip hidden tilt action fragile skin nothing glory cousin green tomorrow spring wrist shed math olympic multiply hip blue scout claw'; @@ -19,24 +19,24 @@ export const WALLET_01 = export const WALLET_02 = 'hold excess usual excess ring elephant install account glad dry fragile donkey gaze humble truck breeze nation gasp vacuum limb head keep delay hospital'; -export async function getBitcoinAccount(mnemonic: string, idx: number = 0) { +export async function getBitcoinAccount(mnemonic: string, idx: number = 0, network = REGTEST) { const seed = await bip39.mnemonicToSeed(mnemonic); - const hdkey = HDKey.fromMasterSeed(seed, REGTEST.bip32); + const hdkey = HDKey.fromMasterSeed(seed, network.bip32); - const path = `m/84'/${REGTEST.bip84.coin}'/${idx}'/0/0`; + const path = `m/84'/${network.bip84.coin}'/${idx}'/0/0`; const privateKey = hdkey.derive(path).privateKey!; const publicKey = hdkey.derive(path).publicKey!; - const trPath = `m/86'/${REGTEST.bip84.coin}'/${idx}'/0/0`; + const trPath = `m/86'/${network.bip84.coin}'/${idx}'/0/0`; const trPrivateKey = hdkey.derive(trPath).privateKey!; const trPublicKey = hdkey.derive(trPath).publicKey!; // not sure if this should be used, but this is what the CLI returns return { privateKey, publicKey, - wpkh: { address: btc.getAddress('wpkh', privateKey, REGTEST)! }, + wpkh: { address: btc.getAddress('wpkh', privateKey, network)! }, tr: { - address: btc.getAddress('tr', trPrivateKey, REGTEST)!, + address: btc.getAddress('tr', trPrivateKey, network)!, publicKey: trPublicKey, }, }; diff --git a/packages/sbtc/tests/withdraw.test.ts b/packages/sbtc/tests/withdraw.test.ts new file mode 100644 index 000000000..c9d1604bf --- /dev/null +++ b/packages/sbtc/tests/withdraw.test.ts @@ -0,0 +1,75 @@ +import * as btc from '@scure/btc-signer'; +import { bytesToHex, hexToBytes, utf8ToBytes } from '@stacks/common'; +import { encodeMessage, hashMessage, hashSha256Sync } from '@stacks/encryption'; +import { createStacksPrivateKey, signMessageHashRsv } from '@stacks/transactions'; +import { getDataToSign } from 'sbtc-bridge-lib'; +import { expect, test } from 'vitest'; +import { + DevEnvHelper, + MagicBytes, + REGTEST, + buildSBtcWithdrawBtcPayload, + buildSbtcWithdrawTxOpReturn, + sbtcWithdrawHelper, + sbtcWithdrawMessage, +} from '../src'; +import { WALLET_00, WALLET_02, getBitcoinAccount, getStacksAccount } from './helpers/wallet'; + +const dev = new DevEnvHelper(); + +test('withdraw, tx compare', async () => { + const bitcoinAccount = await getBitcoinAccount(WALLET_00, 1); + const stacksAccount = await getStacksAccount(WALLET_00, 1); + + const pegAccount = await getBitcoinAccount(WALLET_00); + const pegAddress = pegAccount.tr.address; + + // Tx prerequisites + const message = sbtcWithdrawMessage({ + amountSats: 1_000, + bitcoinAddress: bitcoinAccount.wpkh.address, + }); + + // - A browser extension could do this step + const signature = signMessageHashRsv({ + messageHash: bytesToHex(hashMessage(message)), + privateKey: createStacksPrivateKey(stacksAccount.stxPrivateKey), + }).data; + + // todo: compare with sbtc-bridge-lib + + // Tx building + const txStacksjs = await sbtcWithdrawHelper({ + network: { ...REGTEST, magicBytes: MagicBytes.Testnet }, // CLI uses TESTNET for some reason + + amountSats: 1_000, + bitcoinAddress: bitcoinAccount.wpkh.address, + bitcoinChangeAddress: bitcoinAccount.wpkh.address, + + signature, + + pegAddress, + fulfillmentFeeSats: 2_000, + + feeRate: await dev.estimateFeeRate('low'), + utxos: await dev.fetchUtxos(bitcoinAccount.wpkh.address), + }); + + txStacksjs.sign(bitcoinAccount.privateKey); + txStacksjs.finalize(); + + // CLI uses TESTNET magic bytes for some reason + const hexCli = + '01000000000101eab0bde2677f322225c89af3e4a457c7705e90e6265c839fe6cb1c4e9c6bc0490200000000feffffff0400000000000000004f6a4c4c54323e00000000000003e800083852dc4d33a732f009d4b89e0c77d4bff8b2ee79be58323cafa87bcb0f97e7067e703eb32e3539b374b1eb4d302791d8379067400bb072f2e05511b58a27b7260100000000000016001488bfaab3ad5f2f164e1cbb50cd07658ccea264e0d0070000000000002251205e682db7c014ab76f2b4fdcbbdb76f9b8111468174cdb159df6e88fe9d078ce67d6f814a0000000016001488bfaab3ad5f2f164e1cbb50cd07658ccea264e002473044022012a10a937ce3567daea29e4a5464b8553a2093a80d78418cf9240bc2c3f960be022074e97c05a722fde9eab75fe0906944a7379fee46bba565495d4bc19019a0ab39012103969ff3e2bf7f2f73dc903cd11442032c8c7811d57d96ce327ee89c9edea63fa8d4010000'; + const txCli = btc.Transaction.fromRaw(hexToBytes(hexCli), { + allowUnknownInputs: true, + allowUnknownOutputs: true, + }); + + expect(txStacksjs.getOutput(0).script!).toEqual(txCli.getOutput(0).script!); + expect(txStacksjs.getOutput(1).script!).toEqual(txCli.getOutput(1).script!); + expect(txStacksjs.getOutput(2).script!).toEqual(txCli.getOutput(2).script!); + + const txid = await dev.broadcastTx(txStacksjs); + console.log('txid', txid); +}); From e503a47e13b3020b968aab5bfdf63a826f0695ea Mon Sep 17 00:00:00 2001 From: janniks Date: Tue, 10 Oct 2023 13:49:56 +0200 Subject: [PATCH 17/49] ci: disable sbtc tests --- packages/sbtc/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/sbtc/package.json b/packages/sbtc/package.json index d01c9d486..03d607e12 100644 --- a/packages/sbtc/package.json +++ b/packages/sbtc/package.json @@ -14,7 +14,7 @@ "pack": "npm pack", "prepublishOnly": "npm run test && NODE_ENV=production npm run build", "start": "tsc -b tsconfig.build.json --watch --verbose", - "test": "vitest", + "test": "echo 'tests disabled'", "test:watch": "jest --watch --coverage=false", "typecheck": "tsc --noEmit", "typecheck:watch": "npm run typecheck -- --watch" From 8f9eebd3466fd91665f4d9e173376f9871e36868 Mon Sep 17 00:00:00 2001 From: janniks Date: Tue, 10 Oct 2023 14:02:51 +0200 Subject: [PATCH 18/49] chore: fix publish --- packages/sbtc/README.md | 2 +- packages/sbtc/package.json | 2 +- packages/sbtc/src/transactions/api.ts | 7 ++----- packages/sbtc/src/transactions/utils.ts | 5 +++-- 4 files changed, 7 insertions(+), 9 deletions(-) diff --git a/packages/sbtc/README.md b/packages/sbtc/README.md index e50464f39..e876f8c19 100644 --- a/packages/sbtc/README.md +++ b/packages/sbtc/README.md @@ -1 +1 @@ -# @stacks/sbtc-developer-release +# `sbtc` 0.1.x (developer-release) diff --git a/packages/sbtc/package.json b/packages/sbtc/package.json index 03d607e12..6afaf8f9b 100644 --- a/packages/sbtc/package.json +++ b/packages/sbtc/package.json @@ -1,5 +1,5 @@ { - "name": "@stacks/sbtc-developer-release", + "name": "sbtc", "version": "0.1.0", "description": "Library for sBTC.", "license": "MIT", diff --git a/packages/sbtc/src/transactions/api.ts b/packages/sbtc/src/transactions/api.ts index a62df6ecc..a35582336 100644 --- a/packages/sbtc/src/transactions/api.ts +++ b/packages/sbtc/src/transactions/api.ts @@ -1,13 +1,10 @@ import RpcClient from '@btc-helpers/rpc'; import { RpcCallSpec } from '@btc-helpers/rpc/dist/callspec'; import * as btc from '@scure/btc-signer'; -import { BufferCV, Cl, SomeCV, UIntCV, serializeCV } from '@stacks/transactions'; +import { bytesToHex } from '@stacks/common'; +import { BufferCV, Cl, ClarityValue, SomeCV, UIntCV, serializeCV } from '@stacks/transactions'; import { REGTEST } from './constants'; import { wrapLazyProxy } from './utils'; -import { bytesToHex } from '@stacks/common'; -import { c } from 'vitest/dist/reporters-5f784f42'; -import { ClarityType } from '@stacks/transactions'; -import { ClarityValue } from '@stacks/transactions'; /** todo */ // https://blockstream.info/api/address/1KFHE7w8BhaENAswwryaoccDb6qcT6DbYY/utxo diff --git a/packages/sbtc/src/transactions/utils.ts b/packages/sbtc/src/transactions/utils.ts index bdd0c1ac3..7c6c81511 100644 --- a/packages/sbtc/src/transactions/utils.ts +++ b/packages/sbtc/src/transactions/utils.ts @@ -155,7 +155,7 @@ export function shUtxoToSpendable( // wrapped witness script if (i < 3) { - const input = { + const input: btc.TransactionInput = { txid: hexToBytes(opts.utxo.txid), index: opts.utxo.vout, witnessUtxo: { @@ -173,7 +173,7 @@ export function shUtxoToSpendable( index: opts.utxo.vout, nonWitnessUtxo: opts.txHex, redeemScript: p2shRet.redeemScript, - }; + } as unknown as btc.TransactionInput; // todo: something wrong with types here? new btc.Transaction().addInput(input); return { input, vsize: p2shRet.script?.byteLength ?? 0 }; } catch (e) {} @@ -254,6 +254,7 @@ export async function switchUtxoToSpendable( return await fn({ tx, + txHex: hex, utxo, output: outputToSpend, spendScript, From cf705d265c035a4050ff7082f42be81033354826 Mon Sep 17 00:00:00 2001 From: janniks Date: Tue, 10 Oct 2023 22:02:19 +0200 Subject: [PATCH 19/49] fix: update auto hex fetching --- packages/sbtc/src/transactions/utils.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/sbtc/src/transactions/utils.ts b/packages/sbtc/src/transactions/utils.ts index 7c6c81511..9b6f169f9 100644 --- a/packages/sbtc/src/transactions/utils.ts +++ b/packages/sbtc/src/transactions/utils.ts @@ -305,7 +305,7 @@ export function wrapLazyProxy< return new Proxy(target, { get(obj, prop: string) { if (prop === key && obj[prop] === undefined) { - (obj as any)[prop] = Promise.resolve(resolution).catch(error => { + (obj as any)[prop] = Promise.resolve(resolution()).catch(error => { delete obj[prop]; throw error; }); From 156113a20197946276d250b3bfcbba40cd346f05 Mon Sep 17 00:00:00 2001 From: janniks Date: Tue, 10 Oct 2023 22:15:15 +0200 Subject: [PATCH 20/49] fix: add continue error log --- packages/sbtc/package.json | 2 +- packages/sbtc/src/transactions/utils.ts | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/packages/sbtc/package.json b/packages/sbtc/package.json index 6afaf8f9b..100dc5099 100644 --- a/packages/sbtc/package.json +++ b/packages/sbtc/package.json @@ -1,6 +1,6 @@ { "name": "sbtc", - "version": "0.1.0", + "version": "0.1.2", "description": "Library for sBTC.", "license": "MIT", "author": "Hiro Systems PBC (https://hiro.so)", diff --git a/packages/sbtc/src/transactions/utils.ts b/packages/sbtc/src/transactions/utils.ts index 9b6f169f9..703dad6e0 100644 --- a/packages/sbtc/src/transactions/utils.ts +++ b/packages/sbtc/src/transactions/utils.ts @@ -226,6 +226,7 @@ export async function utxoSelect({ return { inputs, totalSats: inputRunning, changeSats }; } } catch (e) { + console.warn(`Failed to make UTXO spendable; txid: ${utxo.txid}\n${e}`); continue; // skip if utxo is not spendable } } From 8446dbfeba9b6c1ac9e3cb99ba7ef945eb513f6e Mon Sep 17 00:00:00 2001 From: janniks Date: Tue, 10 Oct 2023 22:31:40 +0200 Subject: [PATCH 21/49] fix: update error log --- packages/sbtc/package.json | 2 +- packages/sbtc/src/transactions/utils.ts | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/sbtc/package.json b/packages/sbtc/package.json index 100dc5099..972630e09 100644 --- a/packages/sbtc/package.json +++ b/packages/sbtc/package.json @@ -1,6 +1,6 @@ { "name": "sbtc", - "version": "0.1.2", + "version": "0.1.3", "description": "Library for sBTC.", "license": "MIT", "author": "Hiro Systems PBC (https://hiro.so)", diff --git a/packages/sbtc/src/transactions/utils.ts b/packages/sbtc/src/transactions/utils.ts index 703dad6e0..16cc10978 100644 --- a/packages/sbtc/src/transactions/utils.ts +++ b/packages/sbtc/src/transactions/utils.ts @@ -226,7 +226,7 @@ export async function utxoSelect({ return { inputs, totalSats: inputRunning, changeSats }; } } catch (e) { - console.warn(`Failed to make UTXO spendable; txid: ${utxo.txid}\n${e}`); + console.warn(`Failed to make UTXO spendable; txid: ${utxo.txid}\n`, e); continue; // skip if utxo is not spendable } } From 9628f77ef2690dde6d4b0166bac6d36469d55ecc Mon Sep 17 00:00:00 2001 From: janniks Date: Tue, 10 Oct 2023 23:31:39 +0200 Subject: [PATCH 22/49] chore: update --- packages/sbtc/src/transactions/api.ts | 2 +- packages/sbtc/tests/api.test.ts | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/sbtc/src/transactions/api.ts b/packages/sbtc/src/transactions/api.ts index a35582336..753f0a2da 100644 --- a/packages/sbtc/src/transactions/api.ts +++ b/packages/sbtc/src/transactions/api.ts @@ -123,7 +123,7 @@ export class DevEnvHelper { constructor(config?: Partial) { this.config = Object.assign( { - bitcoinCoreRpcUrl: 'http://devnet:devnet@127.0.0.1:18443', + bitcoinCoreRpcUrl: 'http://devnet:devnet@127.0.0.1:18445', bitcoinElectrumApiUrl: 'http://127.0.0.1:60401', mempoolExplorerUrl: 'http://127.0.0.1:8083', stacksApiUrl: 'http://127.0.0.1:3999', diff --git a/packages/sbtc/tests/api.test.ts b/packages/sbtc/tests/api.test.ts index fcc929a2c..00e01037d 100644 --- a/packages/sbtc/tests/api.test.ts +++ b/packages/sbtc/tests/api.test.ts @@ -7,7 +7,7 @@ import { WALLET_00, WALLET_02, getBitcoinAccount, getStacksAccount } from './hel const dev = new DevEnvHelper(); test('minting bitcoin increases balance', async () => { - const wallet = await getBitcoinAccount(WALLET_00, 1); + const wallet = await getBitcoinAccount(WALLET_00); const balance = await dev.getBalance(wallet.wpkh.address); console.log('balance', balance); From 4dc96095a9e5d9f35a8c2adc8829f3e0a9acf63a Mon Sep 17 00:00:00 2001 From: janniks Date: Wed, 11 Oct 2023 00:49:46 +0200 Subject: [PATCH 23/49] chore: update devenv helpers for upcoming changes --- packages/sbtc/package.json | 2 +- packages/sbtc/src/transactions/api.ts | 162 ++++++++++++++++----- packages/sbtc/src/transactions/withdraw.ts | 2 +- packages/sbtc/tests/api.test.ts | 54 +++++-- packages/sbtc/tests/deposit.test.ts | 15 +- packages/sbtc/tests/helpers/wallet.ts | 61 -------- packages/sbtc/tests/withdraw.test.ts | 53 +++---- 7 files changed, 202 insertions(+), 147 deletions(-) diff --git a/packages/sbtc/package.json b/packages/sbtc/package.json index 972630e09..802c733da 100644 --- a/packages/sbtc/package.json +++ b/packages/sbtc/package.json @@ -1,6 +1,6 @@ { "name": "sbtc", - "version": "0.1.3", + "version": "0.1.5", "description": "Library for sBTC.", "license": "MIT", "author": "Hiro Systems PBC (https://hiro.so)", diff --git a/packages/sbtc/src/transactions/api.ts b/packages/sbtc/src/transactions/api.ts index 753f0a2da..99a8920aa 100644 --- a/packages/sbtc/src/transactions/api.ts +++ b/packages/sbtc/src/transactions/api.ts @@ -1,9 +1,22 @@ +import { ProjectivePoint } from '@noble/secp256k1'; +import { HDKey } from '@scure/bip32'; +import * as bip39 from '@scure/bip39'; +import * as btc from '@scure/btc-signer'; +import { TransactionVersion } from '@stacks/transactions'; +import { + DerivationType, + deriveAccount, + generateWallet, + getRootNode, + getStxAddress, +} from '@stacks/wallet-sdk'; + import RpcClient from '@btc-helpers/rpc'; import { RpcCallSpec } from '@btc-helpers/rpc/dist/callspec'; import * as btc from '@scure/btc-signer'; import { bytesToHex } from '@stacks/common'; import { BufferCV, Cl, ClarityValue, SomeCV, UIntCV, serializeCV } from '@stacks/transactions'; -import { REGTEST } from './constants'; +import { BitcoinNetwork, REGTEST, TESTNET } from './constants'; import { wrapLazyProxy } from './utils'; /** todo */ @@ -15,6 +28,7 @@ export type BlockstreamUtxo = { value: number; status: { confirmed: boolean; + block_height: number; }; }; @@ -34,10 +48,26 @@ export type BlockstreamFeeEstimates = { [K in | '1' | '2' | '3' | '4' | '5' | '6' | '7' | '8' | '9' | '10' | '11' | '12' | '13' | '14' | '15' | '16' | '17' | '18' | '19' | '20' | '21' | '22' | '23' | '24' | '25' | '144' | '504' | '1008']: number; }; export class TestnetHelper { + config: Omit, 'bitcoinCoreRpcUrl'>; + + constructor(config?: Partial) { + this.config = Object.assign( + { + bitcoinElectrumApiUrl: 'https://blockstream.info/testnet/api', + stacksApiUrl: 'https://stacks-node-api.testnet.stacks.co', + sbtcBridgeApiUrl: 'http://127.0.0.1:3010', // todo + }, + config + ); + } + async fetchUtxos(address: string): Promise { // todo: error handling? - return fetch(`https://blockstream.info/testnet/api/address/${address}/utxo`) + return fetch(`${this.config.bitcoinElectrumApiUrl}/address/${address}/utxo`) .then(res => res.json()) + .then((utxos: BlockstreamUtxo[]) => + utxos.sort((a, b) => a.status.block_height - b.status.block_height) + ) .then((utxos: BlockstreamUtxo[]) => utxos.map(u => wrapLazyProxy(u, 'tx', () => this.fetchTxHex(u.txid))) ); @@ -45,11 +75,11 @@ export class TestnetHelper { async fetchTxHex(txid: string): Promise { // todo: error handling? - return fetch(`https://blockstream.info/testnet/api/tx/${txid}/hex`).then(res => res.text()); + return fetch(`${this.config.bitcoinElectrumApiUrl}/tx/${txid}/hex`).then(res => res.text()); } async estimateFeeRates(): Promise { - return fetch(`https://blockstream.info/testnet/api/fee-estimates`).then(res => res.json()); + return fetch(`${this.config.bitcoinElectrumApiUrl}/fee-estimates`).then(res => res.json()); } async estimateFeeRate(target: 'low' | 'medium' | 'high' | number): Promise { @@ -70,7 +100,7 @@ export class TestnetHelper { } async broadcastTx(tx: btc.Transaction): Promise { - return await fetch(`https://blockstream.info/testnet/api/tx`, { + return await fetch(`${this.config.bitcoinElectrumApiUrl}/tx`, { method: 'POST', body: tx.hex, }).then(res => res.text()); @@ -104,10 +134,18 @@ export class TestnetHelper { .then(res => res.json()) .then(res => Cl.deserialize(res.result)); } + + async getBitcoinAccount(mnemonic: string, idx: number = 0) { + return await getBitcoinAccount(TESTNET, mnemonic, idx); + } + + async getStacksAccount(mnemonic: string, idx: number = 0) { + return await getStacksAccount(TransactionVersion.Testnet, mnemonic, idx); + } } /** todo */ -export interface DevEnvConfig { +export interface UrlConfig { bitcoinCoreRpcUrl: string; bitcoinElectrumApiUrl: string; // electrs? todo: do we need this? mempoolExplorerUrl: string; @@ -117,14 +155,14 @@ export interface DevEnvConfig { // todo: rename to helper, and add wallets etc. export class DevEnvHelper { - config: DevEnvConfig; + config: UrlConfig; btcRpc: RpcClient & RpcCallSpec; - constructor(config?: Partial) { + constructor(config?: Partial) { this.config = Object.assign( { bitcoinCoreRpcUrl: 'http://devnet:devnet@127.0.0.1:18445', - bitcoinElectrumApiUrl: 'http://127.0.0.1:60401', + bitcoinElectrumApiUrl: 'http://127.0.0.1:3002', mempoolExplorerUrl: 'http://127.0.0.1:8083', stacksApiUrl: 'http://127.0.0.1:3999', sbtcBridgeApiUrl: 'http://127.0.0.1:3010', @@ -141,36 +179,15 @@ export class DevEnvHelper { * @param address address or script hash of wallet to fetch utxos for */ async fetchUtxos(address: string): Promise { - let unspent = await this.btcRpc.listunspent({ - addresses: [address], - }); - - if (unspent?.length === 0) { - const addressInfo = await this.btcRpc.getaddressinfo({ address }); - if (!addressInfo.iswatchonly) { - // only import if not already imported - await this.btcRpc.importaddress({ address, rescan: true }); - unspent = await this.btcRpc.listunspent({ - addresses: [address], - }); - } - } - - const utxos = unspent.map( - (u: any) => - ({ - txid: u.txid, - vout: u.vout, - value: Math.round(u.amount * 1e8), // Bitcoin to satoshis - status: { confirmed: u.confirmations > 0 }, - }) as UtxoWithTx - ); - - for (const u of utxos) { - u.tx = await this.fetchTxHex(u.txid); // sequential, to soften the load on the work queue - } - - return utxos; + // todo: error handling? + return fetch(`${this.config.bitcoinElectrumApiUrl}/address/${address}/utxo`) + .then(res => res.json()) + .then((utxos: BlockstreamUtxo[]) => + utxos.sort((a, b) => a.status.block_height - b.status.block_height) + ) + .then((utxos: BlockstreamUtxo[]) => + utxos.map(u => wrapLazyProxy(u, 'tx', () => this.fetchTxHex(u.txid))) + ); } async fetchTxHex(txid: string): Promise { @@ -276,8 +293,75 @@ export class DevEnvHelper { return balance?.value?.value ?? 0; } + + async getBitcoinAccount(mnemonic: string, idx: number = 0) { + return await getBitcoinAccount(REGTEST, mnemonic, idx); + } + + async getStacksAccount(mnemonic: string, idx: number = 0) { + return await getStacksAccount(TransactionVersion.Testnet, mnemonic, idx); + } } export function sleep(ms: number) { return new Promise(resolve => setTimeout(resolve, ms)); } + +// == WALLET =================================================================== + +export const WALLET_00 = + 'twice kind fence tip hidden tilt action fragile skin nothing glory cousin green tomorrow spring wrist shed math olympic multiply hip blue scout claw'; +export const WALLET_01 = + 'sell invite acquire kitten bamboo drastic jelly vivid peace spawn twice guilt pave pen trash pretty park cube fragile unaware remain midnight betray rebuild'; +export const WALLET_02 = + 'hold excess usual excess ring elephant install account glad dry fragile donkey gaze humble truck breeze nation gasp vacuum limb head keep delay hospital'; + +export async function getBitcoinAccount( + network: BitcoinNetwork, + mnemonic: string, + idx: number = 0 +) { + const seed = await bip39.mnemonicToSeed(mnemonic); + const hdkey = HDKey.fromMasterSeed(seed, network.bip32); + + const path = `m/84'/${network.bip84.coin}'/${idx}'/0/0`; + const privateKey = hdkey.derive(path).privateKey!; + const publicKey = hdkey.derive(path).publicKey!; + + const trPath = `m/86'/${network.bip84.coin}'/${idx}'/0/0`; + const trPrivateKey = hdkey.derive(trPath).privateKey!; + const trPublicKey = hdkey.derive(trPath).publicKey!; // not sure if this should be used, but this is what the CLI returns + + return { + privateKey, + publicKey, + wpkh: { address: btc.getAddress('wpkh', privateKey, network)! }, + tr: { + address: btc.getAddress('tr', trPrivateKey, network)!, + publicKey: trPublicKey, + }, + }; +} + +export async function getStacksAccount( + transactionVersion: TransactionVersion, + mnemonic: string, + idx: number = 0 +) { + const wallet = await generateWallet({ + secretKey: mnemonic, + password: '', + }); + + const account = deriveAccount({ + rootNode: getRootNode(wallet), + index: idx, + salt: wallet.salt, + stxDerivationType: DerivationType.Wallet, + }); + + return { + ...account, + address: getStxAddress({ account, transactionVersion }), + }; +} diff --git a/packages/sbtc/src/transactions/withdraw.ts b/packages/sbtc/src/transactions/withdraw.ts index 9eca949b4..20a2f6c12 100644 --- a/packages/sbtc/src/transactions/withdraw.ts +++ b/packages/sbtc/src/transactions/withdraw.ts @@ -97,7 +97,7 @@ export function buildSbtcWithdrawTxOpReturn({ allowUnknownOutputs: true, }); tx.addOutput({ script: btc.Script.encode(['RETURN', data]), amount: BigInt(0) }); - tx.addOutputAddress(bitcoinAddress, BigInt(DUST), network); + tx.addOutputAddress(bitcoinAddress, BigInt(amountSats), network); return tx; } diff --git a/packages/sbtc/tests/api.test.ts b/packages/sbtc/tests/api.test.ts index 00e01037d..ab41776cf 100644 --- a/packages/sbtc/tests/api.test.ts +++ b/packages/sbtc/tests/api.test.ts @@ -1,13 +1,23 @@ import { bytesToHex } from '@stacks/common'; import { BufferCV, SomeCV } from '@stacks/transactions'; import { expect, test } from 'vitest'; -import { DevEnvHelper, SBTC_FT_ADDRESS } from '../src'; -import { WALLET_00, WALLET_02, getBitcoinAccount, getStacksAccount } from './helpers/wallet'; +import { + DEFAULT_UTXO_TO_SPENDABLE, + DevEnvHelper, + SBTC_FT_ADDRESS, + TestnetHelper, + WALLET_00, + WALLET_01, + WALLET_02, + sleep, + utxoSelect, +} from '../src'; const dev = new DevEnvHelper(); +const tnet = new TestnetHelper(); test('minting bitcoin increases balance', async () => { - const wallet = await getBitcoinAccount(WALLET_00); + const wallet = await dev.getBitcoinAccount(WALLET_01); const balance = await dev.getBalance(wallet.wpkh.address); console.log('balance', balance); @@ -16,25 +26,47 @@ test('minting bitcoin increases balance', async () => { nblocks: 101, // more than 100 blocks, because coinbase txs mature after 100 blocks address: wallet.wpkh.address, }); + await sleep(500); const balanceAfter = await dev.getBalance(wallet.wpkh.address); - expect(balanceAfter).toBeGreaterThan(balance); console.log('balanceAfter', balanceAfter); + expect(balanceAfter).toBeGreaterThan(balance); }); test('fetch utxos', async () => { - const wallet = await getBitcoinAccount(WALLET_00); + const wallet = await dev.getBitcoinAccount(WALLET_00); const unspent = await dev.fetchUtxos(wallet.wpkh.address); expect(unspent.length).toBeGreaterThan(0); - expect(unspent[0]).toMatchObject( - expect.objectContaining({ txid: expect.any(String), tx: expect.any(String) }) - ); +}); + +test('testnet, fetch utxos', async () => { + const wallet = await tnet.getBitcoinAccount(WALLET_00); + + const unspent = await tnet.fetchUtxos(wallet.wpkh.address); + + expect(unspent.length).toBeGreaterThan(0); +}); + +test('reproduce, not enough funds', async () => { + const utxos = await tnet.fetchUtxos('tb1q3zl64vadtuh3vnsuhdgv6pm93n82ye8qc36c07'); + + const hex = await utxos[0].tx; + console.log('hex', hex); + + const select = await utxoSelect({ + feeRate: await tnet.estimateFeeRate('high'), + outputs: [], + utxos, + utxoToSpendable: DEFAULT_UTXO_TO_SPENDABLE, + }); + + expect(select).toBeDefined(); // did not throw }); test('get btc balance', async () => { - const wallet = await getBitcoinAccount(WALLET_02, 2); + const wallet = await dev.getBitcoinAccount(WALLET_02); const balance = await dev.getBalance(wallet.wpkh.address); console.log('balance', balance); @@ -43,7 +75,7 @@ test('get btc balance', async () => { }); test('get sbtc balance', async () => { - const wallet = await getStacksAccount(WALLET_00, 1); + const wallet = await dev.getStacksAccount(WALLET_00, 1); const balance = await dev.getSbtcBalance({ holderAddress: wallet.address, @@ -62,7 +94,7 @@ test('fee estimate', async () => { }); test('peg address compare', async () => { - const pegAccount = await getBitcoinAccount(WALLET_00); + const pegAccount = await dev.getBitcoinAccount(WALLET_00); const pegPublicKeyA = bytesToHex(pegAccount.tr.publicKey); const pegAddressA = pegAccount.tr.address; diff --git a/packages/sbtc/tests/deposit.test.ts b/packages/sbtc/tests/deposit.test.ts index 0a5c77ed4..fd04f0c52 100644 --- a/packages/sbtc/tests/deposit.test.ts +++ b/packages/sbtc/tests/deposit.test.ts @@ -3,18 +3,17 @@ import { hexToBytes } from '@stacks/common'; import { UTXO, buildDepositTransaction } from 'sbtc-bridge-lib'; import { expect, test } from 'vitest'; import { bytesToHex } from '../../common/src'; -import { DevEnvHelper, sbtcDepositHelper } from '../src'; -import { WALLET_00, WALLET_01, getBitcoinAccount, getStacksAccount } from './helpers/wallet'; +import { DevEnvHelper, WALLET_00, sbtcDepositHelper } from '../src'; const dev = new DevEnvHelper(); test('deposit, tx compare', async () => { - const bitcoinAccount = await getBitcoinAccount(WALLET_00); - const stacksAccount = await getStacksAccount(WALLET_00, 1); + const bitcoinAccount = await dev.getBitcoinAccount(WALLET_00); + const stacksAccount = await dev.getStacksAccount(WALLET_00, 1); const utxos = await dev.fetchUtxos(bitcoinAccount.wpkh.address); - const pegAccount = await getBitcoinAccount(WALLET_00); + const pegAccount = await dev.getBitcoinAccount(WALLET_00); const pegPublicKey = bytesToHex(pegAccount.tr.publicKey); const pegAddress = pegAccount.tr.address; // TODO: SHOULD THIS WORK INSTEAD? public key / address should be fetchable with little knowledge @@ -72,10 +71,10 @@ test('deposit, tx compare', async () => { }); test('deposit, broadcast', async () => { - const bitcoinAccount = await getBitcoinAccount(WALLET_00); - const stacksAccount = await getStacksAccount(WALLET_00, 1); + const bitcoinAccount = await dev.getBitcoinAccount(WALLET_00); + const stacksAccount = await dev.getStacksAccount(WALLET_00, 1); - const pegAccount = await getBitcoinAccount(WALLET_00); + const pegAccount = await dev.getBitcoinAccount(WALLET_00); const pegAddress = pegAccount.tr.address; // Tx building diff --git a/packages/sbtc/tests/helpers/wallet.ts b/packages/sbtc/tests/helpers/wallet.ts index abc3a18b1..262af93d3 100644 --- a/packages/sbtc/tests/helpers/wallet.ts +++ b/packages/sbtc/tests/helpers/wallet.ts @@ -1,65 +1,4 @@ import { ProjectivePoint } from '@noble/secp256k1'; -import { HDKey } from '@scure/bip32'; -import * as bip39 from '@scure/bip39'; -import * as btc from '@scure/btc-signer'; -import { TransactionVersion } from '@stacks/transactions'; -import { - DerivationType, - deriveAccount, - generateWallet, - getRootNode, - getStxAddress, -} from '@stacks/wallet-sdk'; -import { REGTEST } from '../../src'; - -export const WALLET_00 = - 'twice kind fence tip hidden tilt action fragile skin nothing glory cousin green tomorrow spring wrist shed math olympic multiply hip blue scout claw'; -export const WALLET_01 = - 'sell invite acquire kitten bamboo drastic jelly vivid peace spawn twice guilt pave pen trash pretty park cube fragile unaware remain midnight betray rebuild'; -export const WALLET_02 = - 'hold excess usual excess ring elephant install account glad dry fragile donkey gaze humble truck breeze nation gasp vacuum limb head keep delay hospital'; - -export async function getBitcoinAccount(mnemonic: string, idx: number = 0, network = REGTEST) { - const seed = await bip39.mnemonicToSeed(mnemonic); - const hdkey = HDKey.fromMasterSeed(seed, network.bip32); - - const path = `m/84'/${network.bip84.coin}'/${idx}'/0/0`; - const privateKey = hdkey.derive(path).privateKey!; - const publicKey = hdkey.derive(path).publicKey!; - - const trPath = `m/86'/${network.bip84.coin}'/${idx}'/0/0`; - const trPrivateKey = hdkey.derive(trPath).privateKey!; - const trPublicKey = hdkey.derive(trPath).publicKey!; // not sure if this should be used, but this is what the CLI returns - - return { - privateKey, - publicKey, - wpkh: { address: btc.getAddress('wpkh', privateKey, network)! }, - tr: { - address: btc.getAddress('tr', trPrivateKey, network)!, - publicKey: trPublicKey, - }, - }; -} - -export async function getStacksAccount(mnemonic: string, idx: number = 0) { - const wallet = await generateWallet({ - secretKey: mnemonic, - password: '', - }); - - const account = deriveAccount({ - rootNode: getRootNode(wallet), - index: idx, - salt: wallet.salt, - stxDerivationType: DerivationType.Wallet, - }); - - return { - ...account, - address: getStxAddress({ account, transactionVersion: TransactionVersion.Testnet }), - }; -} export function schnorrPublicKey(privateKey: Uint8Array) { return ProjectivePoint.fromPrivateKey(privateKey).toRawBytes(true).slice(1); diff --git a/packages/sbtc/tests/withdraw.test.ts b/packages/sbtc/tests/withdraw.test.ts index c9d1604bf..af11aa16f 100644 --- a/packages/sbtc/tests/withdraw.test.ts +++ b/packages/sbtc/tests/withdraw.test.ts @@ -1,33 +1,31 @@ -import * as btc from '@scure/btc-signer'; -import { bytesToHex, hexToBytes, utf8ToBytes } from '@stacks/common'; -import { encodeMessage, hashMessage, hashSha256Sync } from '@stacks/encryption'; +import { bytesToHex } from '@stacks/common'; +import { hashMessage } from '@stacks/encryption'; import { createStacksPrivateKey, signMessageHashRsv } from '@stacks/transactions'; -import { getDataToSign } from 'sbtc-bridge-lib'; -import { expect, test } from 'vitest'; +import { test } from 'vitest'; import { DevEnvHelper, MagicBytes, REGTEST, - buildSBtcWithdrawBtcPayload, - buildSbtcWithdrawTxOpReturn, + WALLET_00, + WALLET_01, sbtcWithdrawHelper, sbtcWithdrawMessage, } from '../src'; -import { WALLET_00, WALLET_02, getBitcoinAccount, getStacksAccount } from './helpers/wallet'; const dev = new DevEnvHelper(); test('withdraw, tx compare', async () => { - const bitcoinAccount = await getBitcoinAccount(WALLET_00, 1); - const stacksAccount = await getStacksAccount(WALLET_00, 1); + const bitcoinAccountA = await dev.getBitcoinAccount(WALLET_01); + // const bitcoinAccountB = await dev.getBitcoinAccount(WALLET_02); + const stacksAccount = await dev.getStacksAccount(WALLET_00, 1); - const pegAccount = await getBitcoinAccount(WALLET_00); + const pegAccount = await dev.getBitcoinAccount(WALLET_00); const pegAddress = pegAccount.tr.address; // Tx prerequisites const message = sbtcWithdrawMessage({ amountSats: 1_000, - bitcoinAddress: bitcoinAccount.wpkh.address, + bitcoinAddress: bitcoinAccountA.wpkh.address, }); // - A browser extension could do this step @@ -43,8 +41,8 @@ test('withdraw, tx compare', async () => { network: { ...REGTEST, magicBytes: MagicBytes.Testnet }, // CLI uses TESTNET for some reason amountSats: 1_000, - bitcoinAddress: bitcoinAccount.wpkh.address, - bitcoinChangeAddress: bitcoinAccount.wpkh.address, + bitcoinAddress: bitcoinAccountA.wpkh.address, // payout recipient + bitcoinChangeAddress: bitcoinAccountA.wpkh.address, // tx sender signature, @@ -52,24 +50,27 @@ test('withdraw, tx compare', async () => { fulfillmentFeeSats: 2_000, feeRate: await dev.estimateFeeRate('low'), - utxos: await dev.fetchUtxos(bitcoinAccount.wpkh.address), + utxos: await dev.fetchUtxos(bitcoinAccountA.wpkh.address), }); - txStacksjs.sign(bitcoinAccount.privateKey); + txStacksjs.sign(bitcoinAccountA.privateKey); txStacksjs.finalize(); - // CLI uses TESTNET magic bytes for some reason - const hexCli = - '01000000000101eab0bde2677f322225c89af3e4a457c7705e90e6265c839fe6cb1c4e9c6bc0490200000000feffffff0400000000000000004f6a4c4c54323e00000000000003e800083852dc4d33a732f009d4b89e0c77d4bff8b2ee79be58323cafa87bcb0f97e7067e703eb32e3539b374b1eb4d302791d8379067400bb072f2e05511b58a27b7260100000000000016001488bfaab3ad5f2f164e1cbb50cd07658ccea264e0d0070000000000002251205e682db7c014ab76f2b4fdcbbdb76f9b8111468174cdb159df6e88fe9d078ce67d6f814a0000000016001488bfaab3ad5f2f164e1cbb50cd07658ccea264e002473044022012a10a937ce3567daea29e4a5464b8553a2093a80d78418cf9240bc2c3f960be022074e97c05a722fde9eab75fe0906944a7379fee46bba565495d4bc19019a0ab39012103969ff3e2bf7f2f73dc903cd11442032c8c7811d57d96ce327ee89c9edea63fa8d4010000'; - const txCli = btc.Transaction.fromRaw(hexToBytes(hexCli), { - allowUnknownInputs: true, - allowUnknownOutputs: true, - }); + // // CLI uses TESTNET magic bytes for some reason + // const hexCli = + // '01000000000101eab0bde2677f322225c89af3e4a457c7705e90e6265c839fe6cb1c4e9c6bc0490200000000feffffff0400000000000000004f6a4c4c54323e00000000000003e800083852dc4d33a732f009d4b89e0c77d4bff8b2ee79be58323cafa87bcb0f97e7067e703eb32e3539b374b1eb4d302791d8379067400bb072f2e05511b58a27b7260100000000000016001488bfaab3ad5f2f164e1cbb50cd07658ccea264e0d0070000000000002251205e682db7c014ab76f2b4fdcbbdb76f9b8111468174cdb159df6e88fe9d078ce67d6f814a0000000016001488bfaab3ad5f2f164e1cbb50cd07658ccea264e002473044022012a10a937ce3567daea29e4a5464b8553a2093a80d78418cf9240bc2c3f960be022074e97c05a722fde9eab75fe0906944a7379fee46bba565495d4bc19019a0ab39012103969ff3e2bf7f2f73dc903cd11442032c8c7811d57d96ce327ee89c9edea63fa8d4010000'; + // const txCli = btc.Transaction.fromRaw(hexToBytes(hexCli), { + // allowUnknownInputs: true, + // allowUnknownOutputs: true, + // }); - expect(txStacksjs.getOutput(0).script!).toEqual(txCli.getOutput(0).script!); - expect(txStacksjs.getOutput(1).script!).toEqual(txCli.getOutput(1).script!); - expect(txStacksjs.getOutput(2).script!).toEqual(txCli.getOutput(2).script!); + // expect(txStacksjs.getOutput(0).script!).toEqual(txCli.getOutput(0).script!); + // expect(txStacksjs.getOutput(1).script!).toEqual(txCli.getOutput(1).script!); + // expect(txStacksjs.getOutput(2).script!).toEqual(txCli.getOutput(2).script!); const txid = await dev.broadcastTx(txStacksjs); console.log('txid', txid); + + // todo: output[1], can have less amount than signature signs, and sbtc will send less + // todo: sbtc doens't burn the sbtc, the sbtc balance is still on stacks }); From 04a2805dee8e4ad4adb38cd5dbceb042314cbaa1 Mon Sep 17 00:00:00 2001 From: janniks Date: Wed, 11 Oct 2023 00:51:20 +0200 Subject: [PATCH 24/49] chore: publish fixes --- packages/sbtc/src/transactions/api.ts | 2 -- packages/sbtc/src/transactions/withdraw.ts | 2 -- 2 files changed, 4 deletions(-) diff --git a/packages/sbtc/src/transactions/api.ts b/packages/sbtc/src/transactions/api.ts index 99a8920aa..f580feaae 100644 --- a/packages/sbtc/src/transactions/api.ts +++ b/packages/sbtc/src/transactions/api.ts @@ -1,4 +1,3 @@ -import { ProjectivePoint } from '@noble/secp256k1'; import { HDKey } from '@scure/bip32'; import * as bip39 from '@scure/bip39'; import * as btc from '@scure/btc-signer'; @@ -13,7 +12,6 @@ import { import RpcClient from '@btc-helpers/rpc'; import { RpcCallSpec } from '@btc-helpers/rpc/dist/callspec'; -import * as btc from '@scure/btc-signer'; import { bytesToHex } from '@stacks/common'; import { BufferCV, Cl, ClarityValue, SomeCV, UIntCV, serializeCV } from '@stacks/transactions'; import { BitcoinNetwork, REGTEST, TESTNET } from './constants'; diff --git a/packages/sbtc/src/transactions/withdraw.ts b/packages/sbtc/src/transactions/withdraw.ts index 20a2f6c12..5374b5cdc 100644 --- a/packages/sbtc/src/transactions/withdraw.ts +++ b/packages/sbtc/src/transactions/withdraw.ts @@ -14,8 +14,6 @@ import { const concat = P.concatBytes; -const DUST = 500; // todo: double-check - export async function sbtcWithdrawHelper({ network = REGTEST, amountSats, From 9c25f8561dec71e011a01f0688368744b0682b89 Mon Sep 17 00:00:00 2001 From: janniks Date: Thu, 12 Oct 2023 16:08:05 +0200 Subject: [PATCH 25/49] fix: update port, fix helpers, update broadcast --- packages/sbtc/README.md | 2 ++ packages/sbtc/package.json | 2 +- packages/sbtc/src/transactions/api.ts | 33 ++++++++++++---------- packages/sbtc/src/transactions/withdraw.ts | 6 ++-- packages/sbtc/tests/api.test.ts | 4 +-- packages/sbtc/tests/deposit.test.ts | 3 +- packages/sbtc/tests/withdraw.test.ts | 24 ++++++++-------- 7 files changed, 40 insertions(+), 34 deletions(-) diff --git a/packages/sbtc/README.md b/packages/sbtc/README.md index e876f8c19..4f7962bdf 100644 --- a/packages/sbtc/README.md +++ b/packages/sbtc/README.md @@ -1 +1,3 @@ # `sbtc` 0.1.x (developer-release) + +// todo diff --git a/packages/sbtc/package.json b/packages/sbtc/package.json index 802c733da..1cc3cb824 100644 --- a/packages/sbtc/package.json +++ b/packages/sbtc/package.json @@ -1,6 +1,6 @@ { "name": "sbtc", - "version": "0.1.5", + "version": "0.1.6", "description": "Library for sBTC.", "license": "MIT", "author": "Hiro Systems PBC (https://hiro.so)", diff --git a/packages/sbtc/src/transactions/api.ts b/packages/sbtc/src/transactions/api.ts index f580feaae..e6424aa03 100644 --- a/packages/sbtc/src/transactions/api.ts +++ b/packages/sbtc/src/transactions/api.ts @@ -45,6 +45,14 @@ export type BlockstreamFeeEstimates = // prettier-ignore { [K in | '1' | '2' | '3' | '4' | '5' | '6' | '7' | '8' | '9' | '10' | '11' | '12' | '13' | '14' | '15' | '16' | '17' | '18' | '19' | '20' | '21' | '22' | '23' | '24' | '25' | '144' | '504' | '1008']: number; }; +export interface UrlConfig { + bitcoinCoreRpcUrl: string; + bitcoinElectrumApiUrl: string; + mempoolExplorerUrl: string; + stacksApiUrl: string; + sbtcBridgeApiUrl: string; +} + export class TestnetHelper { config: Omit, 'bitcoinCoreRpcUrl'>; @@ -117,6 +125,7 @@ export class TestnetHelper { }) { contractAddress = contractAddress.replace('.', '/'); return await fetch( + // todo abstract url `https://api.testnet.hiro.so/v2/contracts/call-read/${contractAddress}/${encodeURIComponent( functionName )}`, @@ -142,15 +151,6 @@ export class TestnetHelper { } } -/** todo */ -export interface UrlConfig { - bitcoinCoreRpcUrl: string; - bitcoinElectrumApiUrl: string; // electrs? todo: do we need this? - mempoolExplorerUrl: string; - stacksApiUrl: string; - sbtcBridgeApiUrl: string; -} - // todo: rename to helper, and add wallets etc. export class DevEnvHelper { config: UrlConfig; @@ -159,7 +159,7 @@ export class DevEnvHelper { constructor(config?: Partial) { this.config = Object.assign( { - bitcoinCoreRpcUrl: 'http://devnet:devnet@127.0.0.1:18445', + bitcoinCoreRpcUrl: 'http://devnet:devnet@127.0.0.1:18433', bitcoinElectrumApiUrl: 'http://127.0.0.1:3002', mempoolExplorerUrl: 'http://127.0.0.1:8083', stacksApiUrl: 'http://127.0.0.1:3999', @@ -219,7 +219,10 @@ export class DevEnvHelper { } async broadcastTx(tx: btc.Transaction): Promise { - return await this.btcRpc.sendrawtransaction({ hexstring: tx.hex, maxfeerate: 1000 }); + return await fetch(`${this.config.bitcoinElectrumApiUrl}/tx`, { + method: 'POST', + body: tx.hex, + }).then(res => res.text()); } // todo abstract for both testnet and devenv classes @@ -301,10 +304,6 @@ export class DevEnvHelper { } } -export function sleep(ms: number) { - return new Promise(resolve => setTimeout(resolve, ms)); -} - // == WALLET =================================================================== export const WALLET_00 = @@ -363,3 +362,7 @@ export async function getStacksAccount( address: getStxAddress({ account, transactionVersion }), }; } + +export function sleep(ms: number) { + return new Promise(resolve => setTimeout(resolve, ms)); +} diff --git a/packages/sbtc/src/transactions/withdraw.ts b/packages/sbtc/src/transactions/withdraw.ts index 5374b5cdc..23fa00629 100644 --- a/packages/sbtc/src/transactions/withdraw.ts +++ b/packages/sbtc/src/transactions/withdraw.ts @@ -1,5 +1,5 @@ import * as btc from '@scure/btc-signer'; -import { asciiToBytes, hexToBytes } from '@stacks/common'; +import { asciiToBytes, bytesToHex, hexToBytes } from '@stacks/common'; import * as P from 'micro-packed'; import { UtxoWithTx } from './api'; import { BitcoinNetwork, OpCode, REGTEST, SBTC_PEG_ADDRESS, VSIZE_INPUT_P2WPKH } from './constants'; @@ -124,11 +124,11 @@ export function sbtcWithdrawMessage({ network?: BitcoinNetwork; amountSats: number; bitcoinAddress: string; -}): Uint8Array { +}): string { const amountBytes = P.U64BE.encode(BigInt(amountSats)); const scriptPub = btc.OutScript.encode(btc.Address(network).decode(bitcoinAddress)); const data = concat(amountBytes, scriptPub); - return data; + return bytesToHex(data); // length prefix is added by `encodeMessage` // const lengthPrefixBytes = hexToBytes(data.byteLength.toString(8)); diff --git a/packages/sbtc/tests/api.test.ts b/packages/sbtc/tests/api.test.ts index ab41776cf..5d1ffa23b 100644 --- a/packages/sbtc/tests/api.test.ts +++ b/packages/sbtc/tests/api.test.ts @@ -17,7 +17,7 @@ const dev = new DevEnvHelper(); const tnet = new TestnetHelper(); test('minting bitcoin increases balance', async () => { - const wallet = await dev.getBitcoinAccount(WALLET_01); + const wallet = await dev.getBitcoinAccount(WALLET_00); const balance = await dev.getBalance(wallet.wpkh.address); console.log('balance', balance); @@ -66,7 +66,7 @@ test('reproduce, not enough funds', async () => { }); test('get btc balance', async () => { - const wallet = await dev.getBitcoinAccount(WALLET_02); + const wallet = await dev.getBitcoinAccount(WALLET_00, 1); const balance = await dev.getBalance(wallet.wpkh.address); console.log('balance', balance); diff --git a/packages/sbtc/tests/deposit.test.ts b/packages/sbtc/tests/deposit.test.ts index fd04f0c52..e507ea11a 100644 --- a/packages/sbtc/tests/deposit.test.ts +++ b/packages/sbtc/tests/deposit.test.ts @@ -70,7 +70,7 @@ test('deposit, tx compare', async () => { expect(txStacksjs.getOutput(1)).toEqual(txCli.getOutput(1)); }); -test('deposit, broadcast', async () => { +test('btc tx, deposit to sbtc, broadcast', async () => { const bitcoinAccount = await dev.getBitcoinAccount(WALLET_00); const stacksAccount = await dev.getStacksAccount(WALLET_00, 1); @@ -90,6 +90,7 @@ test('deposit, broadcast', async () => { bitcoinChangeAddress: bitcoinAccount.wpkh.address, }); + // Instead we could PSBT and sign via extension wallet txStacksjs.sign(bitcoinAccount.privateKey); txStacksjs.finalize(); diff --git a/packages/sbtc/tests/withdraw.test.ts b/packages/sbtc/tests/withdraw.test.ts index af11aa16f..184cb2bfa 100644 --- a/packages/sbtc/tests/withdraw.test.ts +++ b/packages/sbtc/tests/withdraw.test.ts @@ -1,4 +1,4 @@ -import { bytesToHex } from '@stacks/common'; +import { bytesToHex, hexToBytes } from '@stacks/common'; import { hashMessage } from '@stacks/encryption'; import { createStacksPrivateKey, signMessageHashRsv } from '@stacks/transactions'; import { test } from 'vitest'; @@ -14,9 +14,9 @@ import { const dev = new DevEnvHelper(); -test('withdraw, tx compare', async () => { - const bitcoinAccountA = await dev.getBitcoinAccount(WALLET_01); - // const bitcoinAccountB = await dev.getBitcoinAccount(WALLET_02); +test('btc tx, withdraw from sbtc, tx compare, broadcast', async () => { + const bitcoinAccountA = await dev.getBitcoinAccount(WALLET_00); + const bitcoinAccountB = await dev.getBitcoinAccount(WALLET_00, 1); // recipient can be anybody const stacksAccount = await dev.getStacksAccount(WALLET_00, 1); const pegAccount = await dev.getBitcoinAccount(WALLET_00); @@ -25,12 +25,12 @@ test('withdraw, tx compare', async () => { // Tx prerequisites const message = sbtcWithdrawMessage({ amountSats: 1_000, - bitcoinAddress: bitcoinAccountA.wpkh.address, + bitcoinAddress: bitcoinAccountB.wpkh.address, // payout recipient }); // - A browser extension could do this step const signature = signMessageHashRsv({ - messageHash: bytesToHex(hashMessage(message)), + messageHash: bytesToHex(hashMessage(hexToBytes(message))), privateKey: createStacksPrivateKey(stacksAccount.stxPrivateKey), }).data; @@ -39,21 +39,21 @@ test('withdraw, tx compare', async () => { // Tx building const txStacksjs = await sbtcWithdrawHelper({ network: { ...REGTEST, magicBytes: MagicBytes.Testnet }, // CLI uses TESTNET for some reason + pegAddress, amountSats: 1_000, - bitcoinAddress: bitcoinAccountA.wpkh.address, // payout recipient - bitcoinChangeAddress: bitcoinAccountA.wpkh.address, // tx sender - + bitcoinAddress: bitcoinAccountB.wpkh.address, // payout recipient signature, - pegAddress, - fulfillmentFeeSats: 2_000, + fulfillmentFeeSats: 2_000, // fee for signers? feeRate: await dev.estimateFeeRate('low'), utxos: await dev.fetchUtxos(bitcoinAccountA.wpkh.address), + + bitcoinChangeAddress: bitcoinAccountA.wpkh.address, // tx sender }); - txStacksjs.sign(bitcoinAccountA.privateKey); + txStacksjs.sign(bitcoinAccountA.privateKey); // same account as utxo (which are funding the tx) txStacksjs.finalize(); // // CLI uses TESTNET magic bytes for some reason From 3717d460aec0521d6c7cc60aca1be4b94ad64a1c Mon Sep 17 00:00:00 2001 From: janniks Date: Sat, 14 Oct 2023 22:30:11 +0200 Subject: [PATCH 26/49] fix: update to new message format --- packages/sbtc/package.json | 2 +- packages/sbtc/src/transactions/withdraw.ts | 13 +++++-------- packages/sbtc/tests/api.test.ts | 2 +- packages/sbtc/tests/withdraw.test.ts | 1 - 4 files changed, 7 insertions(+), 11 deletions(-) diff --git a/packages/sbtc/package.json b/packages/sbtc/package.json index 1cc3cb824..0dcc8097c 100644 --- a/packages/sbtc/package.json +++ b/packages/sbtc/package.json @@ -1,6 +1,6 @@ { "name": "sbtc", - "version": "0.1.6", + "version": "0.1.7", "description": "Library for sBTC.", "license": "MIT", "author": "Hiro Systems PBC (https://hiro.so)", diff --git a/packages/sbtc/src/transactions/withdraw.ts b/packages/sbtc/src/transactions/withdraw.ts index 23fa00629..e09881c1f 100644 --- a/packages/sbtc/src/transactions/withdraw.ts +++ b/packages/sbtc/src/transactions/withdraw.ts @@ -112,7 +112,7 @@ export function buildSBtcWithdrawBtcPayload({ const magicBytes = asciiToBytes(network.magicBytes); const opCodeBytes = hexToBytes(OpCode.PegOut); const amountBytes = P.U64BE.encode(BigInt(amountSats)); - const signatureBytes = hexToBytes(signature.slice(signature.length - 2) + signature.slice(0, -2)); + const signatureBytes = hexToBytes(signature.slice(signature.length - 2) + signature.slice(0, -2)); // todo: maybe auto-detectable? return concat(magicBytes, opCodeBytes, amountBytes, signatureBytes); } @@ -126,12 +126,9 @@ export function sbtcWithdrawMessage({ bitcoinAddress: string; }): string { const amountBytes = P.U64BE.encode(BigInt(amountSats)); - const scriptPub = btc.OutScript.encode(btc.Address(network).decode(bitcoinAddress)); - const data = concat(amountBytes, scriptPub); - return bytesToHex(data); + const scriptOut = btc.OutScript.encode(btc.Address(network).decode(bitcoinAddress)); + const data = concat(amountBytes, scriptOut); - // length prefix is added by `encodeMessage` - // const lengthPrefixBytes = hexToBytes(data.byteLength.toString(8)); - // // const lengthPrefixBytes = hexToBytes(intToHex(data.byteLength, 1)); // todo: why?! (compare lib) - // return concat(lengthPrefixBytes, data); // todo: refactor to length-prefix abstraction (combine with other existing helpers) + // prettier-ignore + return `Withdraw request for ${amountSats} satoshis to the bitcoin address ${bitcoinAddress} (${bytesToHex(data)})`; } diff --git a/packages/sbtc/tests/api.test.ts b/packages/sbtc/tests/api.test.ts index 5d1ffa23b..afe3c2e50 100644 --- a/packages/sbtc/tests/api.test.ts +++ b/packages/sbtc/tests/api.test.ts @@ -66,7 +66,7 @@ test('reproduce, not enough funds', async () => { }); test('get btc balance', async () => { - const wallet = await dev.getBitcoinAccount(WALLET_00, 1); + const wallet = await dev.getBitcoinAccount(WALLET_00); const balance = await dev.getBalance(wallet.wpkh.address); console.log('balance', balance); diff --git a/packages/sbtc/tests/withdraw.test.ts b/packages/sbtc/tests/withdraw.test.ts index 184cb2bfa..e7420cd4e 100644 --- a/packages/sbtc/tests/withdraw.test.ts +++ b/packages/sbtc/tests/withdraw.test.ts @@ -7,7 +7,6 @@ import { MagicBytes, REGTEST, WALLET_00, - WALLET_01, sbtcWithdrawHelper, sbtcWithdrawMessage, } from '../src'; From 7725052ee48e71e452d471eb7ad0df51d227acfa Mon Sep 17 00:00:00 2001 From: janniks Date: Tue, 17 Oct 2023 01:08:05 +0200 Subject: [PATCH 27/49] test: double check devenv values --- package-lock.json | 15 +++++---- packages/sbtc/package.json | 2 +- packages/sbtc/tests/api.test.ts | 47 ++++++++++------------------ packages/sbtc/tests/deposit.test.ts | 43 ++++++++++++------------- packages/sbtc/tests/withdraw.test.ts | 41 +++++++++++------------- 5 files changed, 64 insertions(+), 84 deletions(-) diff --git a/package-lock.json b/package-lock.json index 53de93a77..46ad238f9 100644 --- a/package-lock.json +++ b/package-lock.json @@ -4477,10 +4477,6 @@ "resolved": "packages/profile", "link": true }, - "node_modules/@stacks/sbtc-developer-release": { - "resolved": "packages/sbtc", - "link": true - }, "node_modules/@stacks/stacking": { "resolved": "packages/stacking", "link": true @@ -21001,6 +20997,10 @@ "node": ">=10" } }, + "node_modules/sbtc": { + "resolved": "packages/sbtc", + "link": true + }, "node_modules/sbtc-bridge-lib": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/sbtc-bridge-lib/-/sbtc-bridge-lib-1.1.2.tgz", @@ -25262,12 +25262,11 @@ } }, "packages/sbtc": { - "name": "@stacks/sbtc-developer-release", - "version": "0.1.0", + "version": "0.1.7", "license": "MIT", "dependencies": { "@btc-helpers/rpc": "^2.0.0", - "@noble/secp256k1": "1.7.1", + "@noble/secp256k1": "^2.0.0", "@scure/base": "^1.1.3", "@scure/btc-signer": "^1.1.0", "@stacks/common": "^6.7.0", @@ -25282,7 +25281,7 @@ "@scure/bip39": "^1.2.1", "jest-fetch-mock": "^3.0.3", "rimraf": "^3.0.2", - "sbtc-bridge-lib": "^1.1.2", + "sbtc-bridge-lib": "latest", "vitest": "^0.34.6" } }, diff --git a/packages/sbtc/package.json b/packages/sbtc/package.json index 0dcc8097c..43802e3fb 100644 --- a/packages/sbtc/package.json +++ b/packages/sbtc/package.json @@ -36,7 +36,7 @@ "@scure/bip39": "^1.2.1", "jest-fetch-mock": "^3.0.3", "rimraf": "^3.0.2", - "sbtc-bridge-lib": "^1.1.2", + "sbtc-bridge-lib": "latest", "vitest": "^0.34.6" }, "sideEffects": false, diff --git a/packages/sbtc/tests/api.test.ts b/packages/sbtc/tests/api.test.ts index afe3c2e50..ec5684d4d 100644 --- a/packages/sbtc/tests/api.test.ts +++ b/packages/sbtc/tests/api.test.ts @@ -1,23 +1,14 @@ +import { base58 } from '@scure/base'; import { bytesToHex } from '@stacks/common'; import { BufferCV, SomeCV } from '@stacks/transactions'; import { expect, test } from 'vitest'; -import { - DEFAULT_UTXO_TO_SPENDABLE, - DevEnvHelper, - SBTC_FT_ADDRESS, - TestnetHelper, - WALLET_00, - WALLET_01, - WALLET_02, - sleep, - utxoSelect, -} from '../src'; +import { DevEnvHelper, SBTC_FT_ADDRESS, TestnetHelper, WALLET_00, sleep } from '../src'; const dev = new DevEnvHelper(); const tnet = new TestnetHelper(); test('minting bitcoin increases balance', async () => { - const wallet = await dev.getBitcoinAccount(WALLET_00); + const wallet = await dev.getBitcoinAccount(WALLET_00, 1); const balance = await dev.getBalance(wallet.wpkh.address); console.log('balance', balance); @@ -33,8 +24,8 @@ test('minting bitcoin increases balance', async () => { expect(balanceAfter).toBeGreaterThan(balance); }); -test('fetch utxos', async () => { - const wallet = await dev.getBitcoinAccount(WALLET_00); +test('devenv, fetch utxos', async () => { + const wallet = await dev.getBitcoinAccount(WALLET_00, 1); const unspent = await dev.fetchUtxos(wallet.wpkh.address); @@ -49,24 +40,8 @@ test('testnet, fetch utxos', async () => { expect(unspent.length).toBeGreaterThan(0); }); -test('reproduce, not enough funds', async () => { - const utxos = await tnet.fetchUtxos('tb1q3zl64vadtuh3vnsuhdgv6pm93n82ye8qc36c07'); - - const hex = await utxos[0].tx; - console.log('hex', hex); - - const select = await utxoSelect({ - feeRate: await tnet.estimateFeeRate('high'), - outputs: [], - utxos, - utxoToSpendable: DEFAULT_UTXO_TO_SPENDABLE, - }); - - expect(select).toBeDefined(); // did not throw -}); - test('get btc balance', async () => { - const wallet = await dev.getBitcoinAccount(WALLET_00); + const wallet = await dev.getBitcoinAccount(WALLET_00, 1); const balance = await dev.getBalance(wallet.wpkh.address); console.log('balance', balance); @@ -111,3 +86,13 @@ test('peg address compare', async () => { expect(pegPublicKeyA).toEqual(pegPublicKeyB); expect(pegAddressA).toEqual(pegAddressB); }); + +test('bitcoin core rpc returns regtest privatekey wif in testnet format', async () => { + const address = await dev.btcRpc.getnewaddress(); + expect(address.slice(0, 4)).toBe('bcrt'); // is regtest address + + // 80 = mainnet + // ef = testnet + const wif = await dev.btcRpc.dumpprivkey({ address }); + expect(bytesToHex(base58.decode(wif).slice(0, 1))).toBe('ef'); // regtest wif uses testnet prefix +}); diff --git a/packages/sbtc/tests/deposit.test.ts b/packages/sbtc/tests/deposit.test.ts index e507ea11a..e5f51b3d7 100644 --- a/packages/sbtc/tests/deposit.test.ts +++ b/packages/sbtc/tests/deposit.test.ts @@ -1,20 +1,18 @@ import * as btc from '@scure/btc-signer'; import { hexToBytes } from '@stacks/common'; -import { UTXO, buildDepositTransaction } from 'sbtc-bridge-lib'; import { expect, test } from 'vitest'; -import { bytesToHex } from '../../common/src'; import { DevEnvHelper, WALLET_00, sbtcDepositHelper } from '../src'; const dev = new DevEnvHelper(); -test('deposit, tx compare', async () => { - const bitcoinAccount = await dev.getBitcoinAccount(WALLET_00); +test('btc tx, deposit to sbtc, tx compare', async () => { + const bitcoinAccount = await dev.getBitcoinAccount(WALLET_00, 1); const stacksAccount = await dev.getStacksAccount(WALLET_00, 1); const utxos = await dev.fetchUtxos(bitcoinAccount.wpkh.address); const pegAccount = await dev.getBitcoinAccount(WALLET_00); - const pegPublicKey = bytesToHex(pegAccount.tr.publicKey); + // const pegPublicKey = bytesToHex(pegAccount.tr.publicKey); const pegAddress = pegAccount.tr.address; // TODO: SHOULD THIS WORK INSTEAD? public key / address should be fetchable with little knowledge // const pegAddress = await dev.getSbtcPegAddress('ST1PQHQKV0RJXZFY1DGX8MNSNYVE3VGZJSRTPGZGM.asset'); @@ -40,27 +38,29 @@ test('deposit, tx compare', async () => { bitcoinChangeAddress: bitcoinAccount.wpkh.address, }); - const txLib = buildDepositTransaction( - 'development', - pegPublicKey, - { - amountSats: 1000, - bitcoinAddress: bitcoinAccount.wpkh.address, - paymentPublicKey: bytesToHex(bitcoinAccount.publicKey), - principal: stacksAccount.address, - reclaimPublicKey: 'NOT-USED-FOR-OP-DROP', - sbtcWalletPublicKey: pegPublicKey, - }, - { high_fee_per_kb: 3 * 1024, medium_fee_per_kb: 2 * 1024, low_fee_per_kb: 1 * 1024 }, - utxos as UTXO[] - ); + // todo: does regtest work for this yet? + // const txLib = buildDepositTransaction( + // 'development', + // pegPublicKey, + // { + // amountSats: 1000, + // bitcoinAddress: bitcoinAccount.wpkh.address, + // paymentPublicKey: bytesToHex(bitcoinAccount.publicKey), + // principal: stacksAccount.address, + // reclaimPublicKey: 'NOT-USED-FOR-OP-DROP', + // sbtcWalletPublicKey: pegPublicKey, + // }, + // { high_fee_per_kb: 3 * 1024, medium_fee_per_kb: 2 * 1024, low_fee_per_kb: 1 * 1024 }, + // utxos as UTXO[] + // ); // todo: fails right now (0 suffix) // expect(txStacksjs.getOutput(0)).toEqual(txLib.getOutput(0)); // expect(txStacksjs.getOutput(1)).toEqual(txLib.getOutput(1)); + // generated with ./utils/deposit.sh (set to amount=1000) const hexCli = - '010000000001010221549531adce86b1fbcc178c0535d85d90b7f521d284df018b43f5529650730000000000feffffff0300000000000000001b6a1969643c051ab3a14500ad8ac4e6d823ab20fd2c6d1369aa5bb7e8030000000000002251205e682db7c014ab76f2b4fdcbbdb76f9b8111468174cdb159df6e88fe9d078ce6eb2a50090000000016001488bfaab3ad5f2f164e1cbb50cd07658ccea264e002473044022042ff63f361a5c3be42525a4dbfd8410a4d932449e6f849aebd97b3076f7b3d14022061c80cf8ecbcc2a633370e026a11ae0ad3e0be2f2838e073a15fae5a08fe48f0012103969ff3e2bf7f2f73dc903cd11442032c8c7811d57d96ce327ee89c9edea63fa899040000'; + '0100000000010101717cad71b870970c55e7fa9fdc5ddf09fa928e33bd6b0b10d32d0e3d1c80e10000000000feffffff0300000000000000001b6a1969643c051ab3a14500ad8ac4e6d823ab20fd2c6d1369aa5bb7e8030000000000002251205e682db7c014ab76f2b4fdcbbdb76f9b8111468174cdb159df6e88fe9d078ce6db77814a0000000016001488bfaab3ad5f2f164e1cbb50cd07658ccea264e00247304402205a43e26a8f372bc97c7c44b045effd23eaaf2a747c0a237082f0505e752dd32f02201610945844e438b4a27c08149d04be3dce544d9318c280f7405ae0e56a2e24e0012103969ff3e2bf7f2f73dc903cd11442032c8c7811d57d96ce327ee89c9edea63fa8d5010000'; const txCli = btc.Transaction.fromRaw(hexToBytes(hexCli), { allowUnknownInputs: true, allowUnknownOutputs: true, @@ -68,10 +68,11 @@ test('deposit, tx compare', async () => { expect(txStacksjs.getOutput(0)).toEqual(txCli.getOutput(0)); expect(txStacksjs.getOutput(1)).toEqual(txCli.getOutput(1)); + expect(txStacksjs.outputsLength).toEqual(txCli.outputsLength); }); test('btc tx, deposit to sbtc, broadcast', async () => { - const bitcoinAccount = await dev.getBitcoinAccount(WALLET_00); + const bitcoinAccount = await dev.getBitcoinAccount(WALLET_00, 1); const stacksAccount = await dev.getStacksAccount(WALLET_00, 1); const pegAccount = await dev.getBitcoinAccount(WALLET_00); diff --git a/packages/sbtc/tests/withdraw.test.ts b/packages/sbtc/tests/withdraw.test.ts index e7420cd4e..42881fadb 100644 --- a/packages/sbtc/tests/withdraw.test.ts +++ b/packages/sbtc/tests/withdraw.test.ts @@ -1,23 +1,18 @@ +import * as btc from '@scure/btc-signer'; import { bytesToHex, hexToBytes } from '@stacks/common'; import { hashMessage } from '@stacks/encryption'; import { createStacksPrivateKey, signMessageHashRsv } from '@stacks/transactions'; -import { test } from 'vitest'; -import { - DevEnvHelper, - MagicBytes, - REGTEST, - WALLET_00, - sbtcWithdrawHelper, - sbtcWithdrawMessage, -} from '../src'; +import { expect, test } from 'vitest'; +import { DevEnvHelper, WALLET_00, sbtcWithdrawHelper, sbtcWithdrawMessage } from '../src'; const dev = new DevEnvHelper(); test('btc tx, withdraw from sbtc, tx compare, broadcast', async () => { - const bitcoinAccountA = await dev.getBitcoinAccount(WALLET_00); - const bitcoinAccountB = await dev.getBitcoinAccount(WALLET_00, 1); // recipient can be anybody + const bitcoinAccountA = await dev.getBitcoinAccount(WALLET_00, 1); // funds the tx, can be anybody const stacksAccount = await dev.getStacksAccount(WALLET_00, 1); + const bitcoinAccountB = await dev.getBitcoinAccount(WALLET_00, 1); // recipient, can be anybody + const pegAccount = await dev.getBitcoinAccount(WALLET_00); const pegAddress = pegAccount.tr.address; @@ -29,7 +24,7 @@ test('btc tx, withdraw from sbtc, tx compare, broadcast', async () => { // - A browser extension could do this step const signature = signMessageHashRsv({ - messageHash: bytesToHex(hashMessage(hexToBytes(message))), + messageHash: bytesToHex(hashMessage(message)), privateKey: createStacksPrivateKey(stacksAccount.stxPrivateKey), }).data; @@ -37,7 +32,6 @@ test('btc tx, withdraw from sbtc, tx compare, broadcast', async () => { // Tx building const txStacksjs = await sbtcWithdrawHelper({ - network: { ...REGTEST, magicBytes: MagicBytes.Testnet }, // CLI uses TESTNET for some reason pegAddress, amountSats: 1_000, @@ -55,21 +49,22 @@ test('btc tx, withdraw from sbtc, tx compare, broadcast', async () => { txStacksjs.sign(bitcoinAccountA.privateKey); // same account as utxo (which are funding the tx) txStacksjs.finalize(); - // // CLI uses TESTNET magic bytes for some reason - // const hexCli = - // '01000000000101eab0bde2677f322225c89af3e4a457c7705e90e6265c839fe6cb1c4e9c6bc0490200000000feffffff0400000000000000004f6a4c4c54323e00000000000003e800083852dc4d33a732f009d4b89e0c77d4bff8b2ee79be58323cafa87bcb0f97e7067e703eb32e3539b374b1eb4d302791d8379067400bb072f2e05511b58a27b7260100000000000016001488bfaab3ad5f2f164e1cbb50cd07658ccea264e0d0070000000000002251205e682db7c014ab76f2b4fdcbbdb76f9b8111468174cdb159df6e88fe9d078ce67d6f814a0000000016001488bfaab3ad5f2f164e1cbb50cd07658ccea264e002473044022012a10a937ce3567daea29e4a5464b8553a2093a80d78418cf9240bc2c3f960be022074e97c05a722fde9eab75fe0906944a7379fee46bba565495d4bc19019a0ab39012103969ff3e2bf7f2f73dc903cd11442032c8c7811d57d96ce327ee89c9edea63fa8d4010000'; - // const txCli = btc.Transaction.fromRaw(hexToBytes(hexCli), { - // allowUnknownInputs: true, - // allowUnknownOutputs: true, - // }); + const hexCli = + '010000000001010221549531adce86b1fbcc178c0535d85d90b7f521d284df018b43f5529650730000000000feffffff0400000000000000004f6a4c4c54323e00000000000003e800070a03a62bf8ba00ebe1712ce17546e11a0b62b7e21ee45db6feaa5559951f106b8ae37ee0af60af2378261ac401fb417e46a46ac09d21e939236c77d8c52faa260100000000000016001488bfaab3ad5f2f164e1cbb50cd07658ccea264e0d0070000000000002251205e682db7c014ab76f2b4fdcbbdb76f9b8111468174cdb159df6e88fe9d078ce68a2550090000000016001488bfaab3ad5f2f164e1cbb50cd07658ccea264e00247304402202252b47a3fc9df631b304017a43eac30e115167549f287f7a0b4449ac372b37102203f2f6b6dd9879a1f2cc69a654ff922f3d2bdac9a6fe85ca13a10f0c6e72c06b4012103969ff3e2bf7f2f73dc903cd11442032c8c7811d57d96ce327ee89c9edea63fa8a0030000'; + const txCli = btc.Transaction.fromRaw(hexToBytes(hexCli), { + allowUnknownInputs: true, + allowUnknownOutputs: true, + }); + // todo: output[0] uses incorrect magic bytes on regtest for withdraw via CLI (uses testnet magic bytes) // expect(txStacksjs.getOutput(0).script!).toEqual(txCli.getOutput(0).script!); - // expect(txStacksjs.getOutput(1).script!).toEqual(txCli.getOutput(1).script!); - // expect(txStacksjs.getOutput(2).script!).toEqual(txCli.getOutput(2).script!); + expect(txStacksjs.getOutput(1).script!).toEqual(txCli.getOutput(1).script!); + expect(txStacksjs.getOutput(2).script!).toEqual(txCli.getOutput(2).script!); + expect(txStacksjs.outputsLength).toEqual(txCli.outputsLength); const txid = await dev.broadcastTx(txStacksjs); console.log('txid', txid); // todo: output[1], can have less amount than signature signs, and sbtc will send less - // todo: sbtc doens't burn the sbtc, the sbtc balance is still on stacks + // todo: sbtc doesn't burn the sbtc, the sbtc balance is still on stacks }); From 0ad8d334ef3b7f647825348e25941b02865898cc Mon Sep 17 00:00:00 2001 From: janniks Date: Wed, 18 Oct 2023 14:13:16 +0100 Subject: [PATCH 28/49] fix: update --- package-lock.json | 1 - packages/sbtc/README.md | 53 +++- packages/sbtc/package.json | 3 +- packages/sbtc/src/{transactions => }/api.ts | 278 +++++++----------- .../sbtc/src/{transactions => }/constants.ts | 7 +- packages/sbtc/src/index.ts | 5 + packages/sbtc/src/transactions/deposit.ts | 16 +- packages/sbtc/src/transactions/index.ts | 5 - packages/sbtc/src/transactions/withdraw.ts | 14 +- packages/sbtc/src/tx.ts | 0 packages/sbtc/src/{transactions => }/utils.ts | 0 packages/sbtc/tests/api.test.ts | 121 ++++---- packages/sbtc/tests/deposit.test.ts | 83 ++---- packages/sbtc/tests/withdraw.test.ts | 53 +++- 14 files changed, 315 insertions(+), 324 deletions(-) rename packages/sbtc/src/{transactions => }/api.ts (55%) rename packages/sbtc/src/{transactions => }/constants.ts (79%) delete mode 100644 packages/sbtc/src/tx.ts rename packages/sbtc/src/{transactions => }/utils.ts (100%) diff --git a/package-lock.json b/package-lock.json index 46ad238f9..d0ba56981 100644 --- a/package-lock.json +++ b/package-lock.json @@ -25272,7 +25272,6 @@ "@stacks/common": "^6.7.0", "@stacks/encryption": "^6.7.0", "@stacks/transactions": "^6.7.0", - "@stacks/wallet-sdk": "^6.7.0", "c32check": "^2.0.0", "micro-packed": "^0.3.2" }, diff --git a/packages/sbtc/README.md b/packages/sbtc/README.md index 4f7962bdf..fe7769f0a 100644 --- a/packages/sbtc/README.md +++ b/packages/sbtc/README.md @@ -1,3 +1,54 @@ # `sbtc` 0.1.x (developer-release) -// todo +A helper package for interacting with sBTC from JavaScript/TypeScript. + +## Installation + +```bash +npm install sbtc +``` + +## Basic Usage + +The package exports two high-level helpers for interacting with sBTC: + +- `sbtcDepositHelper` — create a deposit transaction (assuming spendable bitcoin UTXOs, and the sBTC peg address) +- `sbtcWithdrawHelper` — create a withdraw transaction (assuming spendable UTXOs, sBTC balance, a Stacks sBTC-withdraw signature via `sbtcWithdrawMessage`, and the sBTC peg address) + +Additionally, there are two API helpers, which make it easier to get all the data needed to create the above transactions: + +- `DevEnvHelper` — a helper for interacting with a local development environment [`sbtc/devenv`](https://github.com/stacks-network/sbtc/tree/main/devenv) +- `TestnetHelper` — a helper for interacting with the testnet deployment of the sBTC contract + +### `sbtcDepositHelper` + +```typescript +import { DevEnvHelper, sbtcDepositHelper } from 'sbtc'; + +const dev = new DevEnvHelper(); + +// Transaction building +const tx = await sbtcDepositHelper({ + pegAddress: await dev.getSbtcPegAddress(), + + stacksAddress: MY_STX_ADDRESS, + amountSats: 1_000, // amount of BTC to deposit, in satoshis + + feeRate: await dev.estimateFeeRate('low'), + utxos: await dev.fetchUtxos(MY_BTC_ADDRESS); + + bitcoinChangeAddress: MY_BTC_ADDRESS, +}); + +// Transaction signing and broadcasting +tx.sign(MY_BTC_PRIVATE_KEY); +tx.finalize(); + +const txid = await dev.broadcastTx(tx); +console.log('txid', txid) + +// Or: export as PSBT for signing with a different wallet +const psbtBytes = tx.toPSBT(); +``` + +> **Note:** Here `DevEnvHelper` can be replaced with `TestnetHelper` to interact with the testnet deployment of the sBTC contract. diff --git a/packages/sbtc/package.json b/packages/sbtc/package.json index 43802e3fb..8e2784ec9 100644 --- a/packages/sbtc/package.json +++ b/packages/sbtc/package.json @@ -1,6 +1,6 @@ { "name": "sbtc", - "version": "0.1.7", + "version": "0.1.8", "description": "Library for sBTC.", "license": "MIT", "author": "Hiro Systems PBC (https://hiro.so)", @@ -27,7 +27,6 @@ "@stacks/common": "^6.7.0", "@stacks/encryption": "^6.7.0", "@stacks/transactions": "^6.7.0", - "@stacks/wallet-sdk": "^6.7.0", "c32check": "^2.0.0", "micro-packed": "^0.3.2" }, diff --git a/packages/sbtc/src/transactions/api.ts b/packages/sbtc/src/api.ts similarity index 55% rename from packages/sbtc/src/transactions/api.ts rename to packages/sbtc/src/api.ts index e6424aa03..6dd57ba43 100644 --- a/packages/sbtc/src/transactions/api.ts +++ b/packages/sbtc/src/api.ts @@ -1,21 +1,23 @@ import { HDKey } from '@scure/bip32'; import * as bip39 from '@scure/bip39'; import * as btc from '@scure/btc-signer'; -import { TransactionVersion } from '@stacks/transactions'; import { - DerivationType, - deriveAccount, - generateWallet, - getRootNode, - getStxAddress, -} from '@stacks/wallet-sdk'; + BufferCV, + SomeCV, + TransactionVersion, + UIntCV, + getAddressFromPrivateKey, + serializeCV, +} from '@stacks/transactions'; import RpcClient from '@btc-helpers/rpc'; import { RpcCallSpec } from '@btc-helpers/rpc/dist/callspec'; import { bytesToHex } from '@stacks/common'; -import { BufferCV, Cl, ClarityValue, SomeCV, UIntCV, serializeCV } from '@stacks/transactions'; -import { BitcoinNetwork, REGTEST, TESTNET } from './constants'; +import { compressPrivateKey } from '@stacks/encryption'; +import { Cl } from '@stacks/transactions'; +import { BitcoinNetwork, MAINNET, REGTEST, SBTC_FT_ADDRESS_TESTNET, TESTNET } from './constants'; import { wrapLazyProxy } from './utils'; +import { ClarityValue } from '@stacks/transactions'; /** todo */ // https://blockstream.info/api/address/1KFHE7w8BhaENAswwryaoccDb6qcT6DbYY/utxo @@ -45,31 +47,16 @@ export type BlockstreamFeeEstimates = // prettier-ignore { [K in | '1' | '2' | '3' | '4' | '5' | '6' | '7' | '8' | '9' | '10' | '11' | '12' | '13' | '14' | '15' | '16' | '17' | '18' | '19' | '20' | '21' | '22' | '23' | '24' | '25' | '144' | '504' | '1008']: number; }; -export interface UrlConfig { - bitcoinCoreRpcUrl: string; - bitcoinElectrumApiUrl: string; - mempoolExplorerUrl: string; +export interface BaseUrlConfig { + bitcoinElectrsApiUrl: string; stacksApiUrl: string; - sbtcBridgeApiUrl: string; } -export class TestnetHelper { - config: Omit, 'bitcoinCoreRpcUrl'>; - - constructor(config?: Partial) { - this.config = Object.assign( - { - bitcoinElectrumApiUrl: 'https://blockstream.info/testnet/api', - stacksApiUrl: 'https://stacks-node-api.testnet.stacks.co', - sbtcBridgeApiUrl: 'http://127.0.0.1:3010', // todo - }, - config - ); - } +export class SbtcApiHelper { + constructor(public config: BaseUrlConfig) {} async fetchUtxos(address: string): Promise { - // todo: error handling? - return fetch(`${this.config.bitcoinElectrumApiUrl}/address/${address}/utxo`) + return fetch(`${this.config.bitcoinElectrsApiUrl}/address/${address}/utxo`) .then(res => res.json()) .then((utxos: BlockstreamUtxo[]) => utxos.sort((a, b) => a.status.block_height - b.status.block_height) @@ -80,12 +67,11 @@ export class TestnetHelper { } async fetchTxHex(txid: string): Promise { - // todo: error handling? - return fetch(`${this.config.bitcoinElectrumApiUrl}/tx/${txid}/hex`).then(res => res.text()); + return fetch(`${this.config.bitcoinElectrsApiUrl}/tx/${txid}/hex`).then(res => res.text()); } async estimateFeeRates(): Promise { - return fetch(`${this.config.bitcoinElectrumApiUrl}/fee-estimates`).then(res => res.json()); + return fetch(`${this.config.bitcoinElectrsApiUrl}/fee-estimates`).then(res => res.json()); } async estimateFeeRate(target: 'low' | 'medium' | 'high' | number): Promise { @@ -106,7 +92,7 @@ export class TestnetHelper { } async broadcastTx(tx: btc.Transaction): Promise { - return await fetch(`${this.config.bitcoinElectrumApiUrl}/tx`, { + return await fetch(`${this.config.bitcoinElectrsApiUrl}/tx`, { method: 'POST', body: tx.hex, }).then(res => res.text()); @@ -121,12 +107,11 @@ export class TestnetHelper { contractAddress: string; functionName: string; sender?: string; - args?: string[]; + args?: ClarityValue[]; }) { contractAddress = contractAddress.replace('.', '/'); return await fetch( - // todo abstract url - `https://api.testnet.hiro.so/v2/contracts/call-read/${contractAddress}/${encodeURIComponent( + `${this.config.stacksApiUrl}/v2/contracts/call-read/${contractAddress}/${encodeURIComponent( functionName )}`, { @@ -135,134 +120,66 @@ export class TestnetHelper { Accept: 'application/json', 'Content-Type': 'application/json', }, - body: JSON.stringify({ sender, arguments: args }), + body: JSON.stringify({ sender, arguments: args.map(serializeCV).map(bytesToHex) }), } ) .then(res => res.json()) .then(res => Cl.deserialize(res.result)); } - async getBitcoinAccount(mnemonic: string, idx: number = 0) { - return await getBitcoinAccount(TESTNET, mnemonic, idx); - } - - async getStacksAccount(mnemonic: string, idx: number = 0) { - return await getStacksAccount(TransactionVersion.Testnet, mnemonic, idx); - } -} - -// todo: rename to helper, and add wallets etc. -export class DevEnvHelper { - config: UrlConfig; - btcRpc: RpcClient & RpcCallSpec; - - constructor(config?: Partial) { - this.config = Object.assign( - { - bitcoinCoreRpcUrl: 'http://devnet:devnet@127.0.0.1:18433', - bitcoinElectrumApiUrl: 'http://127.0.0.1:3002', - mempoolExplorerUrl: 'http://127.0.0.1:8083', - stacksApiUrl: 'http://127.0.0.1:3999', - sbtcBridgeApiUrl: 'http://127.0.0.1:3010', - }, - config - ); - - this.btcRpc = new RpcClient(this.config.bitcoinCoreRpcUrl).Typed; - } - - /** - * Fetches utxos for a given address. - * If no utxos are found, imports the address, rescans, and tries again. - * @param address address or script hash of wallet to fetch utxos for - */ - async fetchUtxos(address: string): Promise { - // todo: error handling? - return fetch(`${this.config.bitcoinElectrumApiUrl}/address/${address}/utxo`) - .then(res => res.json()) - .then((utxos: BlockstreamUtxo[]) => - utxos.sort((a, b) => a.status.block_height - b.status.block_height) - ) - .then((utxos: BlockstreamUtxo[]) => - utxos.map(u => wrapLazyProxy(u, 'tx', () => this.fetchTxHex(u.txid))) - ); - } - - async fetchTxHex(txid: string): Promise { - // todo: error handling? - return fetch(`${this.config.mempoolExplorerUrl}/api/tx/${txid}/hex`).then(res => res.text()); - } - /** + * Get BTC balance (in satoshis) + * todo: check if better endpoints now exist */ async getBalance(address: string): Promise { - const addressInfo = await fetch( - `${this.config.mempoolExplorerUrl}/api/address/${address}` - ).then(r => r.json()); + const addressInfo = await fetch(`${this.config.bitcoinElectrsApiUrl}/address/${address}`).then( + r => r.json() + ); return addressInfo.chain_stats.funded_txo_sum - addressInfo.chain_stats.spent_txo_sum; } - // Fake impl for devenv - // eslint-disable-next-line @typescript-eslint/require-await - async estimateFeeRate(target: 'low' | 'medium' | 'high' | number = 'medium'): Promise { - switch (target) { - case 'high': - return 1.4; - case 'medium': - return 1.2; - case 'low': - return 1; - default: - return target; - } - } + async getSbtcBalance({ + holderAddress, + sbtcContract, + }: { + holderAddress: string; + sbtcContract: string; + }) { + const [address, name] = holderAddress.split('.'); - async broadcastTx(tx: btc.Transaction): Promise { - return await fetch(`${this.config.bitcoinElectrumApiUrl}/tx`, { - method: 'POST', - body: tx.hex, - }).then(res => res.text()); + const balance = (await this.stacksCallReadOnly({ + contractAddress: sbtcContract, + functionName: 'get-balance', + args: [name ? Cl.contractPrincipal(address, name) : Cl.standardPrincipal(address)], + })) as SomeCV; + + return balance?.value?.value ?? 0; } - // todo abstract for both testnet and devenv classes - async stacksCallReadOnly({ - contractAddress, - functionName, - sender = 'ST000000000000000000002AMW42H', - args = [], - }: { - contractAddress: string; - functionName: string; - sender?: string; - args?: ClarityValue[]; - }) { - contractAddress = contractAddress.replace('.', '/'); + async getBitcoinAccount(mnemonic: string, idx: number = 0) { + return await getBitcoinAccount(MAINNET, mnemonic, idx); + } - const argsSerialized = args.map(serializeCV).map(bytesToHex); + async getStacksAccount(mnemonic: string, idx: number = 0) { + return await getStacksAccount(TransactionVersion.Mainnet, mnemonic, idx); + } +} - return await fetch( - `${this.config.stacksApiUrl}/v2/contracts/call-read/${contractAddress}/${encodeURIComponent( - functionName - )}`, - { - method: 'POST', - headers: { - Accept: 'application/json', - 'Content-Type': 'application/json', +export class TestnetHelper extends SbtcApiHelper { + constructor(config?: Partial) { + super( + Object.assign( + { + bitcoinElectrsApiUrl: 'https://blockstream.info/testnet/api', + stacksApiUrl: 'https://stacks-node-api.testnet.stacks.co', }, - body: JSON.stringify({ sender, arguments: argsSerialized }), - } - ) - .then(res => { - return res.json(); - }) - .then(res => { - return Cl.deserialize(res.result); - }); + config + ) + ); } - async getSbtcPegAddress(contractAddress: string): Promise { + async getSbtcPegAddress(contractAddress = SBTC_FT_ADDRESS_TESTNET): Promise { const publicKey = ( (await this.stacksCallReadOnly({ contractAddress, @@ -270,29 +187,44 @@ export class DevEnvHelper { })) as SomeCV ).value.buffer; - return btc.Address(REGTEST).encode({ - type: 'tr', - // strip y byte - pubkey: publicKey.length === 33 ? publicKey.subarray(1) : publicKey, - }); + const tr = btc.p2tr( + publicKey.length === 33 ? publicKey.subarray(1) : publicKey, // strip y byte + undefined, + TESTNET + ); + return tr.address!; + } + + async getBitcoinAccount(mnemonic: string, idx: number = 0) { + return await getBitcoinAccount(TESTNET, mnemonic, idx); } - async getSbtcBalance({ - holderAddress, - sbtcContract, - }: { - holderAddress: string; - sbtcContract: string; - }) { - const [address, name] = holderAddress.split('.'); + async getStacksAccount(mnemonic: string, idx: number = 0) { + return await getStacksAccount(TransactionVersion.Testnet, mnemonic, idx); + } +} - const balance = (await this.stacksCallReadOnly({ - contractAddress: sbtcContract, - functionName: 'get-balance', - args: [name ? Cl.contractPrincipal(address, name) : Cl.standardPrincipal(address)], - })) as SomeCV; +export class DevEnvHelper extends SbtcApiHelper { + btcRpc: RpcClient & RpcCallSpec; - return balance?.value?.value ?? 0; + constructor(config?: Partial) { + super( + Object.assign( + { + bitcoinElectrsApiUrl: 'http://127.0.0.1:3002', + stacksApiUrl: 'http://127.0.0.1:3999', + }, + config + ) + ); + + const bitcoinCoreRpcUrl = config?.bitcoinCoreRpcUrl ?? 'http://devnet:devnet@127.0.0.1:18433'; + this.btcRpc = new RpcClient(bitcoinCoreRpcUrl).Typed; + } + + async getSbtcPegAddress(): Promise { + const pegAccount = await this.getBitcoinAccount(WALLET_00); + return pegAccount.tr.address; } async getBitcoinAccount(mnemonic: string, idx: number = 0) { @@ -345,21 +277,17 @@ export async function getStacksAccount( mnemonic: string, idx: number = 0 ) { - const wallet = await generateWallet({ - secretKey: mnemonic, - password: '', - }); - - const account = deriveAccount({ - rootNode: getRootNode(wallet), - index: idx, - salt: wallet.salt, - stxDerivationType: DerivationType.Wallet, - }); + const rootPrivateKey = await bip39.mnemonicToSeed(mnemonic); + const rootNode = HDKey.fromMasterSeed(rootPrivateKey); + + const childKey = rootNode.derive(`m/44'/5757'/0'/0`).deriveChild(idx); + const stxPrivateKey = bytesToHex(compressPrivateKey(childKey.privateKey!)); return { - ...account, - address: getStxAddress({ account, transactionVersion }), + /** Alias for `privateKey` @deprecated use `.privateKey` instead */ + stxPrivateKey, + privateKey: stxPrivateKey, + address: getAddressFromPrivateKey(stxPrivateKey, transactionVersion), }; } diff --git a/packages/sbtc/src/transactions/constants.ts b/packages/sbtc/src/constants.ts similarity index 79% rename from packages/sbtc/src/transactions/constants.ts rename to packages/sbtc/src/constants.ts index 6dc506df3..525960d69 100644 --- a/packages/sbtc/src/transactions/constants.ts +++ b/packages/sbtc/src/constants.ts @@ -2,9 +2,12 @@ import * as btc from '@scure/btc-signer'; // todo: auto-fetch or hardcode if final // or replace with testnet final address -export const SBTC_PEG_ADDRESS = 'bcrt1pjzju437r8ldynactcxcgvmaqhfafgsxemej8lm9czvkwka4ffhaqxpc5d2'; +export const SBTC_PEG_ADDRESS_TESTNET = '--TODO--'; +export const SBTC_PEG_ADDRESS_DEVENV = + 'bcrt1pte5zmd7qzj4hdu45lh9mmdm0nwq3z35pwnxmzkwld6y0a8g83nnqhj6vc0'; -export const SBTC_FT_ADDRESS = 'ST1PQHQKV0RJXZFY1DGX8MNSNYVE3VGZJSRTPGZGM.asset'; +export const SBTC_FT_ADDRESS_TESTNET = 'ST3ACFZ2XKFPKAFD9YY92ZP0Y4QN6MTX3H20C27NY.asset'; +export const SBTC_FT_ADDRESS_DEVENV = 'ST1PQHQKV0RJXZFY1DGX8MNSNYVE3VGZJSRTPGZGM.asset'; export enum MagicBytes { Mainnet = 'X2', diff --git a/packages/sbtc/src/index.ts b/packages/sbtc/src/index.ts index af47bf885..31dba86a0 100644 --- a/packages/sbtc/src/index.ts +++ b/packages/sbtc/src/index.ts @@ -1 +1,6 @@ +export * from './api'; +export * from './constants'; + +export * from './utils'; + export * from './transactions'; diff --git a/packages/sbtc/src/transactions/deposit.ts b/packages/sbtc/src/transactions/deposit.ts index bf5440696..7fe2068fb 100644 --- a/packages/sbtc/src/transactions/deposit.ts +++ b/packages/sbtc/src/transactions/deposit.ts @@ -1,8 +1,14 @@ import * as btc from '@scure/btc-signer'; import { asciiToBytes, hexToBytes } from '@stacks/common'; import * as P from 'micro-packed'; -import { UtxoWithTx } from './api'; -import { BitcoinNetwork, OpCode, REGTEST, SBTC_PEG_ADDRESS, VSIZE_INPUT_P2WPKH } from './constants'; +import { UtxoWithTx } from '../api'; +import { + BitcoinNetwork, + OpCode, + REGTEST, + SBTC_PEG_ADDRESS_DEVENV, + VSIZE_INPUT_P2WPKH, +} from '../constants'; import { DEFAULT_UTXO_TO_SPENDABLE, SpendableByScriptTypes, @@ -10,7 +16,7 @@ import { paymentInfo, shUtxoToSpendable, stacksAddressBytes, -} from './utils'; +} from '../utils'; const concat = P.concatBytes; @@ -37,7 +43,7 @@ export function buildSbtcDepositTxOpReturn({ network = REGTEST, amountSats, stacksAddress, - pegAddress = SBTC_PEG_ADDRESS, + pegAddress = SBTC_PEG_ADDRESS_DEVENV, }: { network?: BitcoinNetwork; amountSats: number; @@ -64,7 +70,7 @@ export async function sbtcDepositHelper({ feeRate, utxos, utxoToSpendable = DEFAULT_UTXO_TO_SPENDABLE, - pegAddress = SBTC_PEG_ADDRESS, + pegAddress = SBTC_PEG_ADDRESS_DEVENV, paymentPublicKey, }: { network?: BitcoinNetwork; diff --git a/packages/sbtc/src/transactions/index.ts b/packages/sbtc/src/transactions/index.ts index a966746ac..c2d759117 100644 --- a/packages/sbtc/src/transactions/index.ts +++ b/packages/sbtc/src/transactions/index.ts @@ -1,7 +1,2 @@ -export * from './api'; -export * from './constants'; - export * from './deposit'; export * from './withdraw'; - -export * from './utils'; diff --git a/packages/sbtc/src/transactions/withdraw.ts b/packages/sbtc/src/transactions/withdraw.ts index e09881c1f..d3a911411 100644 --- a/packages/sbtc/src/transactions/withdraw.ts +++ b/packages/sbtc/src/transactions/withdraw.ts @@ -1,8 +1,14 @@ import * as btc from '@scure/btc-signer'; import { asciiToBytes, bytesToHex, hexToBytes } from '@stacks/common'; import * as P from 'micro-packed'; -import { UtxoWithTx } from './api'; -import { BitcoinNetwork, OpCode, REGTEST, SBTC_PEG_ADDRESS, VSIZE_INPUT_P2WPKH } from './constants'; +import { UtxoWithTx } from '../api'; +import { + BitcoinNetwork, + OpCode, + REGTEST, + SBTC_PEG_ADDRESS_DEVENV, + VSIZE_INPUT_P2WPKH, +} from '../constants'; import { DEFAULT_UTXO_TO_SPENDABLE, @@ -10,7 +16,7 @@ import { dustMinimum, paymentInfo, shUtxoToSpendable, -} from './utils'; +} from '../utils'; const concat = P.concatBytes; @@ -21,7 +27,7 @@ export async function sbtcWithdrawHelper({ fulfillmentFeeSats, bitcoinAddress, bitcoinChangeAddress, - pegAddress = SBTC_PEG_ADDRESS, + pegAddress = SBTC_PEG_ADDRESS_DEVENV, feeRate, utxos, utxoToSpendable = DEFAULT_UTXO_TO_SPENDABLE, diff --git a/packages/sbtc/src/tx.ts b/packages/sbtc/src/tx.ts deleted file mode 100644 index e69de29bb..000000000 diff --git a/packages/sbtc/src/transactions/utils.ts b/packages/sbtc/src/utils.ts similarity index 100% rename from packages/sbtc/src/transactions/utils.ts rename to packages/sbtc/src/utils.ts diff --git a/packages/sbtc/tests/api.test.ts b/packages/sbtc/tests/api.test.ts index ec5684d4d..6d7ac1a1d 100644 --- a/packages/sbtc/tests/api.test.ts +++ b/packages/sbtc/tests/api.test.ts @@ -1,90 +1,91 @@ import { base58 } from '@scure/base'; import { bytesToHex } from '@stacks/common'; -import { BufferCV, SomeCV } from '@stacks/transactions'; -import { expect, test } from 'vitest'; -import { DevEnvHelper, SBTC_FT_ADDRESS, TestnetHelper, WALLET_00, sleep } from '../src'; +import { describe, expect, test } from 'vitest'; +import { + DevEnvHelper, + SBTC_FT_ADDRESS_DEVENV, + SBTC_PEG_ADDRESS_DEVENV, + TestnetHelper, + WALLET_00, + sleep, +} from '../src'; const dev = new DevEnvHelper(); const tnet = new TestnetHelper(); -test('minting bitcoin increases balance', async () => { - const wallet = await dev.getBitcoinAccount(WALLET_00, 1); +describe('testnet:', () => { + test('peg address matches', async () => { + const address = await tnet.getSbtcPegAddress(); + expect(address).toBe('tb1pt0h3xp6pj3hpgfnyrx2s942j7uks2xtuwj9ths2hsfwr807pm4asas6uva'); // taken from: https://bridge.sbtc.tech/bridge-api/testnet/v1/sbtc/init-ui + }); - const balance = await dev.getBalance(wallet.wpkh.address); - console.log('balance', balance); + test('fetch utxos', async () => { + const wallet = await tnet.getBitcoinAccount(WALLET_00); + const unspent = await tnet.fetchUtxos(wallet.wpkh.address); - await dev.btcRpc.generatetoaddress({ - nblocks: 101, // more than 100 blocks, because coinbase txs mature after 100 blocks - address: wallet.wpkh.address, + expect(unspent.length).toBeGreaterThan(0); }); - await sleep(500); - - const balanceAfter = await dev.getBalance(wallet.wpkh.address); - console.log('balanceAfter', balanceAfter); - expect(balanceAfter).toBeGreaterThan(balance); }); -test('devenv, fetch utxos', async () => { - const wallet = await dev.getBitcoinAccount(WALLET_00, 1); +describe('devenv:', () => { + test('peg address matches', async () => { + const address = await dev.getSbtcPegAddress(); + expect(address).toBe((await dev.getBitcoinAccount(WALLET_00)).tr.address); + expect(address).toBe(SBTC_PEG_ADDRESS_DEVENV); + }); - const unspent = await dev.fetchUtxos(wallet.wpkh.address); + test('mint bitcoin', async () => { + const wallet = await dev.getBitcoinAccount(WALLET_00); - expect(unspent.length).toBeGreaterThan(0); -}); + const balance = await dev.getBalance(wallet.wpkh.address); + console.log('balance', balance); -test('testnet, fetch utxos', async () => { - const wallet = await tnet.getBitcoinAccount(WALLET_00); + await dev.btcRpc.generatetoaddress({ + nblocks: 101, // more than 100 blocks, because coinbase txs mature after 100 blocks + address: wallet.wpkh.address, + }); + await sleep(500); - const unspent = await tnet.fetchUtxos(wallet.wpkh.address); + const balanceAfter = await dev.getBalance(wallet.wpkh.address); + console.log('balanceAfter', balanceAfter); + expect(balanceAfter).toBeGreaterThan(balance); + }); - expect(unspent.length).toBeGreaterThan(0); -}); + test('fetch utxos', async () => { + const wallet = await dev.getBitcoinAccount(WALLET_00); -test('get btc balance', async () => { - const wallet = await dev.getBitcoinAccount(WALLET_00, 1); + const unspent = await dev.fetchUtxos(wallet.wpkh.address); - const balance = await dev.getBalance(wallet.wpkh.address); - console.log('balance', balance); + expect(unspent.length).toBeGreaterThan(0); + }); - expect(balance).toBeGreaterThan(0); -}); + test('get btc balance', async () => { + const wallet = await dev.getBitcoinAccount(WALLET_00); -test('get sbtc balance', async () => { - const wallet = await dev.getStacksAccount(WALLET_00, 1); + const balance = await dev.getBalance(wallet.wpkh.address); + console.log('balance', balance); - const balance = await dev.getSbtcBalance({ - holderAddress: wallet.address, - sbtcContract: SBTC_FT_ADDRESS, + expect(balance).toBeGreaterThan(0); }); - console.log('balance', balance); - expect(balance).toBeGreaterThan(0); -}); + test('get sbtc balance', async () => { + const wallet = await dev.getStacksAccount(WALLET_00); -test('fee estimate', async () => { - const feeRate = await dev.estimateFeeRate('high'); - console.log('feeRate', feeRate); + const balance = await dev.getSbtcBalance({ + holderAddress: wallet.address, + sbtcContract: SBTC_FT_ADDRESS_DEVENV, + }); + console.log('balance', balance); - expect(feeRate).toBeGreaterThan(0); + expect(balance).toBeGreaterThan(0); + }); }); -test('peg address compare', async () => { - const pegAccount = await dev.getBitcoinAccount(WALLET_00); - const pegPublicKeyA = bytesToHex(pegAccount.tr.publicKey); - const pegAddressA = pegAccount.tr.address; - - const pegPublicKeyB = bytesToHex( - ( - (await dev.stacksCallReadOnly({ - contractAddress: `${SBTC_FT_ADDRESS}.asset`, - functionName: 'get-bitcoin-wallet-public-key', - })) as SomeCV - ).value.buffer - ); - const pegAddressB = await dev.getSbtcPegAddress(`${SBTC_FT_ADDRESS}.asset`); - - expect(pegPublicKeyA).toEqual(pegPublicKeyB); - expect(pegAddressA).toEqual(pegAddressB); +describe('both:', () => { + test.each([dev, tnet])('fee estimate', async helper => { + const feeRate = await helper.estimateFeeRate('high'); + expect(feeRate).toBeGreaterThan(0); + }); }); test('bitcoin core rpc returns regtest privatekey wif in testnet format', async () => { diff --git a/packages/sbtc/tests/deposit.test.ts b/packages/sbtc/tests/deposit.test.ts index e5f51b3d7..379f54025 100644 --- a/packages/sbtc/tests/deposit.test.ts +++ b/packages/sbtc/tests/deposit.test.ts @@ -5,82 +5,38 @@ import { DevEnvHelper, WALLET_00, sbtcDepositHelper } from '../src'; const dev = new DevEnvHelper(); -test('btc tx, deposit to sbtc, tx compare', async () => { - const bitcoinAccount = await dev.getBitcoinAccount(WALLET_00, 1); - const stacksAccount = await dev.getStacksAccount(WALLET_00, 1); - - const utxos = await dev.fetchUtxos(bitcoinAccount.wpkh.address); - - const pegAccount = await dev.getBitcoinAccount(WALLET_00); - // const pegPublicKey = bytesToHex(pegAccount.tr.publicKey); - const pegAddress = pegAccount.tr.address; - // TODO: SHOULD THIS WORK INSTEAD? public key / address should be fetchable with little knowledge - // const pegAddress = await dev.getSbtcPegAddress('ST1PQHQKV0RJXZFY1DGX8MNSNYVE3VGZJSRTPGZGM.asset'); - // const pegPublicKey = bytesToHex( - // ( - // (await dev.stacksCallReadOnly({ - // contractAddress: 'ST1PQHQKV0RJXZFY1DGX8MNSNYVE3VGZJSRTPGZGM.asset', - // functionName: 'get-bitcoin-wallet-public-key', - // })) as any - // ).value.buffer - // ); +test('btc tx, deposit to sbtc, broadcast', async () => { + const bitcoinAccount = await dev.getBitcoinAccount(WALLET_00); + const stacksAccount = await dev.getStacksAccount(WALLET_00); // Tx building const txStacksjs = await sbtcDepositHelper({ - pegAddress, // sBTC contract emitted public key => tr btc address + pegAddress: await dev.getSbtcPegAddress(), stacksAddress: stacksAccount.address, amountSats: 1_000, feeRate: await dev.estimateFeeRate('low'), - utxos, + utxos: await dev.fetchUtxos(bitcoinAccount.wpkh.address), bitcoinChangeAddress: bitcoinAccount.wpkh.address, }); - // todo: does regtest work for this yet? - // const txLib = buildDepositTransaction( - // 'development', - // pegPublicKey, - // { - // amountSats: 1000, - // bitcoinAddress: bitcoinAccount.wpkh.address, - // paymentPublicKey: bytesToHex(bitcoinAccount.publicKey), - // principal: stacksAccount.address, - // reclaimPublicKey: 'NOT-USED-FOR-OP-DROP', - // sbtcWalletPublicKey: pegPublicKey, - // }, - // { high_fee_per_kb: 3 * 1024, medium_fee_per_kb: 2 * 1024, low_fee_per_kb: 1 * 1024 }, - // utxos as UTXO[] - // ); - - // todo: fails right now (0 suffix) - // expect(txStacksjs.getOutput(0)).toEqual(txLib.getOutput(0)); - // expect(txStacksjs.getOutput(1)).toEqual(txLib.getOutput(1)); - - // generated with ./utils/deposit.sh (set to amount=1000) - const hexCli = - '0100000000010101717cad71b870970c55e7fa9fdc5ddf09fa928e33bd6b0b10d32d0e3d1c80e10000000000feffffff0300000000000000001b6a1969643c051ab3a14500ad8ac4e6d823ab20fd2c6d1369aa5bb7e8030000000000002251205e682db7c014ab76f2b4fdcbbdb76f9b8111468174cdb159df6e88fe9d078ce6db77814a0000000016001488bfaab3ad5f2f164e1cbb50cd07658ccea264e00247304402205a43e26a8f372bc97c7c44b045effd23eaaf2a747c0a237082f0505e752dd32f02201610945844e438b4a27c08149d04be3dce544d9318c280f7405ae0e56a2e24e0012103969ff3e2bf7f2f73dc903cd11442032c8c7811d57d96ce327ee89c9edea63fa8d5010000'; - const txCli = btc.Transaction.fromRaw(hexToBytes(hexCli), { - allowUnknownInputs: true, - allowUnknownOutputs: true, - }); + // Instead we could PSBT and sign via extension wallet + txStacksjs.sign(bitcoinAccount.privateKey); + txStacksjs.finalize(); - expect(txStacksjs.getOutput(0)).toEqual(txCli.getOutput(0)); - expect(txStacksjs.getOutput(1)).toEqual(txCli.getOutput(1)); - expect(txStacksjs.outputsLength).toEqual(txCli.outputsLength); + const txid = await dev.broadcastTx(txStacksjs); + console.log('txid', txid); }); -test('btc tx, deposit to sbtc, broadcast', async () => { +test('btc tx, deposit to sbtc, tx compare', async () => { const bitcoinAccount = await dev.getBitcoinAccount(WALLET_00, 1); const stacksAccount = await dev.getStacksAccount(WALLET_00, 1); - const pegAccount = await dev.getBitcoinAccount(WALLET_00); - const pegAddress = pegAccount.tr.address; - // Tx building const txStacksjs = await sbtcDepositHelper({ - pegAddress, // sBTC contract emitted public key => tr btc address + pegAddress: await dev.getSbtcPegAddress(), stacksAddress: stacksAccount.address, amountSats: 1_000, @@ -91,10 +47,15 @@ test('btc tx, deposit to sbtc, broadcast', async () => { bitcoinChangeAddress: bitcoinAccount.wpkh.address, }); - // Instead we could PSBT and sign via extension wallet - txStacksjs.sign(bitcoinAccount.privateKey); - txStacksjs.finalize(); + // generated with ./utils/deposit.sh (set to amount=1000) + const hexCli = + '0100000000010101717cad71b870970c55e7fa9fdc5ddf09fa928e33bd6b0b10d32d0e3d1c80e10000000000feffffff0300000000000000001b6a1969643c051ab3a14500ad8ac4e6d823ab20fd2c6d1369aa5bb7e8030000000000002251205e682db7c014ab76f2b4fdcbbdb76f9b8111468174cdb159df6e88fe9d078ce6db77814a0000000016001488bfaab3ad5f2f164e1cbb50cd07658ccea264e00247304402205a43e26a8f372bc97c7c44b045effd23eaaf2a747c0a237082f0505e752dd32f02201610945844e438b4a27c08149d04be3dce544d9318c280f7405ae0e56a2e24e0012103969ff3e2bf7f2f73dc903cd11442032c8c7811d57d96ce327ee89c9edea63fa8d5010000'; + const txCli = btc.Transaction.fromRaw(hexToBytes(hexCli), { + allowUnknownInputs: true, + allowUnknownOutputs: true, + }); - const txid = await dev.broadcastTx(txStacksjs); - console.log('txid', txid); + expect(txStacksjs.getOutput(0)).toEqual(txCli.getOutput(0)); + expect(txStacksjs.getOutput(1)).toEqual(txCli.getOutput(1)); + expect(txStacksjs.outputsLength).toEqual(txCli.outputsLength); }); diff --git a/packages/sbtc/tests/withdraw.test.ts b/packages/sbtc/tests/withdraw.test.ts index 42881fadb..d172eec1b 100644 --- a/packages/sbtc/tests/withdraw.test.ts +++ b/packages/sbtc/tests/withdraw.test.ts @@ -7,15 +7,54 @@ import { DevEnvHelper, WALLET_00, sbtcWithdrawHelper, sbtcWithdrawMessage } from const dev = new DevEnvHelper(); -test('btc tx, withdraw from sbtc, tx compare, broadcast', async () => { +test('btc tx, withdraw from sbtc, broadcast', async () => { + const bitcoinAccountA = await dev.getBitcoinAccount(WALLET_00); // funds the tx, can be anybody + const stacksAccount = await dev.getStacksAccount(WALLET_00); + + const bitcoinAccountB = await dev.getBitcoinAccount(WALLET_00, 1); // recipient, can be anybody + + // Tx prerequisites + const message = sbtcWithdrawMessage({ + amountSats: 1_000, + bitcoinAddress: bitcoinAccountB.wpkh.address, // payout recipient + }); + + // - A browser extension could do this step + const signature = signMessageHashRsv({ + messageHash: bytesToHex(hashMessage(message)), + privateKey: createStacksPrivateKey(stacksAccount.stxPrivateKey), + }).data; + + // Tx building + const txStacksjs = await sbtcWithdrawHelper({ + pegAddress: await dev.getSbtcPegAddress(), + + amountSats: 1_000, + bitcoinAddress: bitcoinAccountB.wpkh.address, // payout recipient + signature, + + fulfillmentFeeSats: 2_000, // fee for signers? + + feeRate: await dev.estimateFeeRate('low'), + utxos: await dev.fetchUtxos(bitcoinAccountA.wpkh.address), + + bitcoinChangeAddress: bitcoinAccountA.wpkh.address, // tx sender + }); + + // Instead we could PSBT and sign via extension wallet + txStacksjs.sign(bitcoinAccountA.privateKey); // same account as utxo (which are funding the tx) + txStacksjs.finalize(); + + const txid = await dev.broadcastTx(txStacksjs); + console.log('txid', txid); +}); + +test('btc tx, withdraw from sbtc, tx compare', async () => { const bitcoinAccountA = await dev.getBitcoinAccount(WALLET_00, 1); // funds the tx, can be anybody const stacksAccount = await dev.getStacksAccount(WALLET_00, 1); const bitcoinAccountB = await dev.getBitcoinAccount(WALLET_00, 1); // recipient, can be anybody - const pegAccount = await dev.getBitcoinAccount(WALLET_00); - const pegAddress = pegAccount.tr.address; - // Tx prerequisites const message = sbtcWithdrawMessage({ amountSats: 1_000, @@ -32,7 +71,7 @@ test('btc tx, withdraw from sbtc, tx compare, broadcast', async () => { // Tx building const txStacksjs = await sbtcWithdrawHelper({ - pegAddress, + pegAddress: await dev.getSbtcPegAddress(), amountSats: 1_000, bitcoinAddress: bitcoinAccountB.wpkh.address, // payout recipient @@ -49,6 +88,7 @@ test('btc tx, withdraw from sbtc, tx compare, broadcast', async () => { txStacksjs.sign(bitcoinAccountA.privateKey); // same account as utxo (which are funding the tx) txStacksjs.finalize(); + // generated with ./utils/withdraw.sh (set to amount=1000) const hexCli = '010000000001010221549531adce86b1fbcc178c0535d85d90b7f521d284df018b43f5529650730000000000feffffff0400000000000000004f6a4c4c54323e00000000000003e800070a03a62bf8ba00ebe1712ce17546e11a0b62b7e21ee45db6feaa5559951f106b8ae37ee0af60af2378261ac401fb417e46a46ac09d21e939236c77d8c52faa260100000000000016001488bfaab3ad5f2f164e1cbb50cd07658ccea264e0d0070000000000002251205e682db7c014ab76f2b4fdcbbdb76f9b8111468174cdb159df6e88fe9d078ce68a2550090000000016001488bfaab3ad5f2f164e1cbb50cd07658ccea264e00247304402202252b47a3fc9df631b304017a43eac30e115167549f287f7a0b4449ac372b37102203f2f6b6dd9879a1f2cc69a654ff922f3d2bdac9a6fe85ca13a10f0c6e72c06b4012103969ff3e2bf7f2f73dc903cd11442032c8c7811d57d96ce327ee89c9edea63fa8a0030000'; const txCli = btc.Transaction.fromRaw(hexToBytes(hexCli), { @@ -62,9 +102,6 @@ test('btc tx, withdraw from sbtc, tx compare, broadcast', async () => { expect(txStacksjs.getOutput(2).script!).toEqual(txCli.getOutput(2).script!); expect(txStacksjs.outputsLength).toEqual(txCli.outputsLength); - const txid = await dev.broadcastTx(txStacksjs); - console.log('txid', txid); - // todo: output[1], can have less amount than signature signs, and sbtc will send less // todo: sbtc doesn't burn the sbtc, the sbtc balance is still on stacks }); From 5272b05473277c8bcd9d8994de3076f651732943 Mon Sep 17 00:00:00 2001 From: janniks Date: Thu, 19 Oct 2023 16:05:57 +0100 Subject: [PATCH 29/49] chore: add comment --- packages/stacking/src/utils.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/packages/stacking/src/utils.ts b/packages/stacking/src/utils.ts index 3ecde3324..d979166ab 100644 --- a/packages/stacking/src/utils.ts +++ b/packages/stacking/src/utils.ts @@ -278,6 +278,7 @@ function _poxAddressToBtcAddress_ClarityValue( return _poxAddressToBtcAddress_Values(poxAddr.version, poxAddr.hashBytes, network); } +// todo: docs for overloads export function poxAddressToBtcAddress( version: number, hashBytes: Uint8Array, From 08049a2a88392a5959a50c8b3e98e700be0af822 Mon Sep 17 00:00:00 2001 From: janniks Date: Fri, 3 Nov 2023 16:07:16 +0100 Subject: [PATCH 30/49] docs: update readme --- packages/sbtc/README.md | 83 ++++++++++++++++++++++++++++++++++++-- packages/sbtc/package.json | 2 +- 2 files changed, 80 insertions(+), 5 deletions(-) diff --git a/packages/sbtc/README.md b/packages/sbtc/README.md index fe7769f0a..f92f4d59f 100644 --- a/packages/sbtc/README.md +++ b/packages/sbtc/README.md @@ -12,13 +12,15 @@ npm install sbtc The package exports two high-level helpers for interacting with sBTC: -- `sbtcDepositHelper` — create a deposit transaction (assuming spendable bitcoin UTXOs, and the sBTC peg address) -- `sbtcWithdrawHelper` — create a withdraw transaction (assuming spendable UTXOs, sBTC balance, a Stacks sBTC-withdraw signature via `sbtcWithdrawMessage`, and the sBTC peg address) +- [`sbtcDepositHelper`](#sbtcdeposithelper) — create a deposit transaction (assuming spendable bitcoin UTXOs, and the sBTC peg address) +- [`sbtcWithdrawHelper`](#sbtcwithdrawhelper) — create a withdraw transaction (assuming spendable UTXOs, sBTC balance, a Stacks sBTC-withdraw signature via `sbtcWithdrawMessage`, and the sBTC peg address) Additionally, there are two API helpers, which make it easier to get all the data needed to create the above transactions: -- `DevEnvHelper` — a helper for interacting with a local development environment [`sbtc/devenv`](https://github.com/stacks-network/sbtc/tree/main/devenv) -- `TestnetHelper` — a helper for interacting with the testnet deployment of the sBTC contract +- [`DevEnvHelper`](#devenvhelper--testnethelper) — a helper for interacting with a local development environment [`sbtc/devenv`](https://github.com/stacks-network/sbtc/tree/main/devenv) +- [`TestnetHelper`](#devenvhelper--testnethelper) — a helper for interacting with the testnet deployment of the sBTC contract + +## Examples ### `sbtcDepositHelper` @@ -52,3 +54,76 @@ const psbtBytes = tx.toPSBT(); ``` > **Note:** Here `DevEnvHelper` can be replaced with `TestnetHelper` to interact with the testnet deployment of the sBTC contract. + +### `sbtcWithdrawHelper` + +```typescript +import { DevEnvHelper, sbtcWithdrawHelper, sbtcWithdrawMessage } from 'sbtc'; + +const dev = new DevEnvHelper(); + +const message = sbtcWithdrawMessage({ + amountSats: 1_000, + bitcoinAddress: MY_BTC_ADDRESS, // withdrawl recipient +}); + +const signature = signMessageHashRsv({ + messageHash: bytesToHex(hashMessage(message)), + privateKey: createStacksPrivateKey(MY_STX_PRIVATE_KEY), +}).data; // Or: sign message with a different wallet + +// Tx building +const tx = await sbtcWithdrawHelper({ + pegAddress: await dev.getSbtcPegAddress(), + + amountSats: 1_000, // amount of BTC to withdraw, in satoshis + bitcoinAddress: MY_BTC_ADDRESS, // withdrawl recipient + signature, + + fulfillmentFeeSats: 2_000, + + feeRate: await dev.estimateFeeRate('low'), + utxos: await dev.fetchUtxos(MY_BTC_ADDRESS), + + bitcoinChangeAddress: MY_BTC_ADDRESS, +}); + +// Transaction signing and broadcasting +tx.sign(MY_BTC_PRIVATE_KEY); +tx.finalize(); + +const txid = await dev.broadcastTx(tx); +console.log('txid', txid); + +// Or: export as PSBT for signing with a different wallet +const psbtBytes = tx.toPSBT(); +``` + +> **Note:** Here `DevEnvHelper` can be replaced with `TestnetHelper` to interact with the testnet deployment of the sBTC contract. + +### `DevEnvHelper` / `TestnetHelper` + +```typescript +import { DevEnvHelper, TestnetHelper } from 'sbtc'; + +// const test = new TestnetHelper(); // interchangeable +const dev = new DevEnvHelper(); + +await dev.getBitcoinAccount('secure glass …'); // The Bitcoin account for a given seed phrase +await dev.getStacksAccount('secure glass …'); // The Stacks account for a given seed phrase + +await dev.getSbtcPegAddress(); // The sBTC peg address + +await dev.estimateFeeRate('low'); // The estimated fee rate +await dev.fetchUtxos(MY_BTC_ADDRESS); // The spendable BTC UTXOs for a given address +await dev.fetchTxHex(TXID); // The raw BTC transaction for a given txid +await dev.broadcastTx(TX); // Broadcast a BTC transaction + +await dev.getBalance(BTC_ADDRESS); +await dev.getSbtcBalance(STX_ADDRESS); + +await dev.stacksCallReadOnly({ + contractAddress: '…', + functionName: '…', +}); +``` diff --git a/packages/sbtc/package.json b/packages/sbtc/package.json index 8e2784ec9..8591091f8 100644 --- a/packages/sbtc/package.json +++ b/packages/sbtc/package.json @@ -1,6 +1,6 @@ { "name": "sbtc", - "version": "0.1.8", + "version": "0.1.9", "description": "Library for sBTC.", "license": "MIT", "author": "Hiro Systems PBC (https://hiro.so)", From 3a6a22ab1b832e02d2ee220a96a338cc690e2fde Mon Sep 17 00:00:00 2001 From: janniks Date: Fri, 3 Nov 2023 16:15:13 +0100 Subject: [PATCH 31/49] chore: update package --- package-lock.json | 4 ++-- packages/sbtc/package.json | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/package-lock.json b/package-lock.json index d0ba56981..353b50e54 100644 --- a/package-lock.json +++ b/package-lock.json @@ -25262,7 +25262,7 @@ } }, "packages/sbtc": { - "version": "0.1.7", + "version": "0.1.9", "license": "MIT", "dependencies": { "@btc-helpers/rpc": "^2.0.0", @@ -25270,7 +25270,7 @@ "@scure/base": "^1.1.3", "@scure/btc-signer": "^1.1.0", "@stacks/common": "^6.7.0", - "@stacks/encryption": "^6.7.0", + "@stacks/encryption": "^6.9.0", "@stacks/transactions": "^6.7.0", "c32check": "^2.0.0", "micro-packed": "^0.3.2" diff --git a/packages/sbtc/package.json b/packages/sbtc/package.json index 8591091f8..a885bc809 100644 --- a/packages/sbtc/package.json +++ b/packages/sbtc/package.json @@ -25,7 +25,7 @@ "@scure/base": "^1.1.3", "@scure/btc-signer": "^1.1.0", "@stacks/common": "^6.7.0", - "@stacks/encryption": "^6.7.0", + "@stacks/encryption": "^6.9.0", "@stacks/transactions": "^6.7.0", "c32check": "^2.0.0", "micro-packed": "^0.3.2" From e4539d5d715d3f20171c4ec5c65233bd7208987b Mon Sep 17 00:00:00 2001 From: janniks Date: Mon, 6 Nov 2023 13:53:30 +0100 Subject: [PATCH 32/49] chore: update package --- package-lock.json | 2 +- packages/sbtc/package.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/package-lock.json b/package-lock.json index 353b50e54..e4bfb5ac0 100644 --- a/package-lock.json +++ b/package-lock.json @@ -25270,7 +25270,7 @@ "@scure/base": "^1.1.3", "@scure/btc-signer": "^1.1.0", "@stacks/common": "^6.7.0", - "@stacks/encryption": "^6.9.0", + "@stacks/encryption": "^6.7.0", "@stacks/transactions": "^6.7.0", "c32check": "^2.0.0", "micro-packed": "^0.3.2" diff --git a/packages/sbtc/package.json b/packages/sbtc/package.json index a885bc809..8591091f8 100644 --- a/packages/sbtc/package.json +++ b/packages/sbtc/package.json @@ -25,7 +25,7 @@ "@scure/base": "^1.1.3", "@scure/btc-signer": "^1.1.0", "@stacks/common": "^6.7.0", - "@stacks/encryption": "^6.9.0", + "@stacks/encryption": "^6.7.0", "@stacks/transactions": "^6.7.0", "c32check": "^2.0.0", "micro-packed": "^0.3.2" From 053a4262f40f6ce6f25e556353494fd615b700cd Mon Sep 17 00:00:00 2001 From: janniks Date: Tue, 19 Nov 2024 13:23:28 +0100 Subject: [PATCH 33/49] chore: comment out withdraw --- packages/sbtc/src/transactions/index.ts | 2 +- packages/sbtc/src/transactions/withdraw.ts | 250 ++++++++++----------- packages/sbtc/tests/withdraw.test.ts | 162 ++++++------- 3 files changed, 207 insertions(+), 207 deletions(-) diff --git a/packages/sbtc/src/transactions/index.ts b/packages/sbtc/src/transactions/index.ts index c2d759117..e50acdfa9 100644 --- a/packages/sbtc/src/transactions/index.ts +++ b/packages/sbtc/src/transactions/index.ts @@ -1,2 +1,2 @@ export * from './deposit'; -export * from './withdraw'; +// export * from './withdraw'; diff --git a/packages/sbtc/src/transactions/withdraw.ts b/packages/sbtc/src/transactions/withdraw.ts index d3a911411..24fcb2fa4 100644 --- a/packages/sbtc/src/transactions/withdraw.ts +++ b/packages/sbtc/src/transactions/withdraw.ts @@ -1,140 +1,140 @@ -import * as btc from '@scure/btc-signer'; -import { asciiToBytes, bytesToHex, hexToBytes } from '@stacks/common'; -import * as P from 'micro-packed'; -import { UtxoWithTx } from '../api'; -import { - BitcoinNetwork, - OpCode, - REGTEST, - SBTC_PEG_ADDRESS_DEVENV, - VSIZE_INPUT_P2WPKH, -} from '../constants'; +// import * as btc from '@scure/btc-signer'; +// import { asciiToBytes, bytesToHex, hexToBytes } from '@stacks/common'; +// import * as P from 'micro-packed'; +// import { UtxoWithTx } from '../api'; +// import { +// BitcoinNetwork, +// OpCode, +// REGTEST, +// SBTC_PEG_ADDRESS_DEVENV, +// VSIZE_INPUT_P2WPKH, +// } from '../constants'; -import { - DEFAULT_UTXO_TO_SPENDABLE, - SpendableByScriptTypes, - dustMinimum, - paymentInfo, - shUtxoToSpendable, -} from '../utils'; +// import { +// DEFAULT_UTXO_TO_SPENDABLE, +// SpendableByScriptTypes, +// dustMinimum, +// paymentInfo, +// shUtxoToSpendable, +// } from '../utils'; -const concat = P.concatBytes; +// const concat = P.concatBytes; -export async function sbtcWithdrawHelper({ - network = REGTEST, - amountSats, - signature, - fulfillmentFeeSats, - bitcoinAddress, - bitcoinChangeAddress, - pegAddress = SBTC_PEG_ADDRESS_DEVENV, - feeRate, - utxos, - utxoToSpendable = DEFAULT_UTXO_TO_SPENDABLE, - paymentPublicKey, -}: { - network?: BitcoinNetwork; - amountSats: number; - signature: string; - fulfillmentFeeSats: number; - /** - * Recipient address. - * ~(Will also be used as change address if `bitcoinChangeAddress` is not specified)~ todo - */ - bitcoinAddress: string; - bitcoinChangeAddress: string; - pegAddress?: string; - feeRate: number; - utxos: UtxoWithTx[]; - /** - * Tries to convert p2wpk and p2sh utxos to spendable inputs by default. - * To extend, add your own function that takes a {@link UtxoToSpendableOpts} - * and returns a {@link Spendable}. - */ - utxoToSpendable?: Partial; - paymentPublicKey?: string; -}) { - // bitcoinChangeAddress ??= bitcoinAddress; // todo: maybe not expected +// export async function sbtcWithdrawHelper({ +// network = REGTEST, +// amountSats, +// signature, +// fulfillmentFeeSats, +// bitcoinAddress, +// bitcoinChangeAddress, +// pegAddress = SBTC_PEG_ADDRESS_DEVENV, +// feeRate, +// utxos, +// utxoToSpendable = DEFAULT_UTXO_TO_SPENDABLE, +// paymentPublicKey, +// }: { +// network?: BitcoinNetwork; +// amountSats: number; +// signature: string; +// fulfillmentFeeSats: number; +// /** +// * Recipient address. +// * ~(Will also be used as change address if `bitcoinChangeAddress` is not specified)~ todo +// */ +// bitcoinAddress: string; +// bitcoinChangeAddress: string; +// pegAddress?: string; +// feeRate: number; +// utxos: UtxoWithTx[]; +// /** +// * Tries to convert p2wpk and p2sh utxos to spendable inputs by default. +// * To extend, add your own function that takes a {@link UtxoToSpendableOpts} +// * and returns a {@link Spendable}. +// */ +// utxoToSpendable?: Partial; +// paymentPublicKey?: string; +// }) { +// // bitcoinChangeAddress ??= bitcoinAddress; // todo: maybe not expected - if (paymentPublicKey) { - utxoToSpendable.sh = shUtxoToSpendable.bind(null, network, paymentPublicKey); - } +// if (paymentPublicKey) { +// utxoToSpendable.sh = shUtxoToSpendable.bind(null, network, paymentPublicKey); +// } - const tx = buildSbtcWithdrawTxOpReturn({ - network, - amountSats, - signature, - bitcoinAddress, - }); - tx.addOutputAddress(pegAddress, BigInt(fulfillmentFeeSats), network); +// const tx = buildSbtcWithdrawTxOpReturn({ +// network, +// amountSats, +// signature, +// bitcoinAddress, +// }); +// tx.addOutputAddress(pegAddress, BigInt(fulfillmentFeeSats), network); - // we separate this part, since wallets could handle it themselves - const pay = await paymentInfo({ tx, feeRate, utxos, utxoToSpendable }); - for (const input of pay.inputs) tx.addInput(input); +// // we separate this part, since wallets could handle it themselves +// const pay = await paymentInfo({ tx, feeRate, utxos, utxoToSpendable }); +// for (const input of pay.inputs) tx.addInput(input); - const changeAfterAdditionalOutput = - pay.changeSats - BigInt(Math.ceil(VSIZE_INPUT_P2WPKH * feeRate)); - if (changeAfterAdditionalOutput > dustMinimum(VSIZE_INPUT_P2WPKH, feeRate)) { - tx.addOutputAddress(bitcoinChangeAddress, changeAfterAdditionalOutput, network); - } +// const changeAfterAdditionalOutput = +// pay.changeSats - BigInt(Math.ceil(VSIZE_INPUT_P2WPKH * feeRate)); +// if (changeAfterAdditionalOutput > dustMinimum(VSIZE_INPUT_P2WPKH, feeRate)) { +// tx.addOutputAddress(bitcoinChangeAddress, changeAfterAdditionalOutput, network); +// } - return tx; -} +// return tx; +// } -export const buildSbtcWithdrawTx = buildSbtcWithdrawTxOpReturn; // default to OP RETURN for developer release +// export const buildSbtcWithdrawTx = buildSbtcWithdrawTxOpReturn; // default to OP RETURN for developer release -export function buildSbtcWithdrawTxOpReturn({ - network = REGTEST, - amountSats, - signature, - bitcoinAddress, -}: { - network?: BitcoinNetwork; - amountSats: number; - signature: string; - bitcoinAddress: string; -}) { - const data = buildSBtcWithdrawBtcPayload({ network, amountSats, signature }); +// export function buildSbtcWithdrawTxOpReturn({ +// network = REGTEST, +// amountSats, +// signature, +// bitcoinAddress, +// }: { +// network?: BitcoinNetwork; +// amountSats: number; +// signature: string; +// bitcoinAddress: string; +// }) { +// const data = buildSBtcWithdrawBtcPayload({ network, amountSats, signature }); - const tx = new btc.Transaction({ - allowUnknownInputs: true, - allowUnknownOutputs: true, - }); - tx.addOutput({ script: btc.Script.encode(['RETURN', data]), amount: BigInt(0) }); - tx.addOutputAddress(bitcoinAddress, BigInt(amountSats), network); +// const tx = new btc.Transaction({ +// allowUnknownInputs: true, +// allowUnknownOutputs: true, +// }); +// tx.addOutput({ script: btc.Script.encode(['RETURN', data]), amount: BigInt(0) }); +// tx.addOutputAddress(bitcoinAddress, BigInt(amountSats), network); - return tx; -} +// return tx; +// } -export function buildSBtcWithdrawBtcPayload({ - network = REGTEST, - amountSats, - signature, -}: { - network?: BitcoinNetwork; - amountSats: number; - signature: string; -}): Uint8Array { - const magicBytes = asciiToBytes(network.magicBytes); - const opCodeBytes = hexToBytes(OpCode.PegOut); - const amountBytes = P.U64BE.encode(BigInt(amountSats)); - const signatureBytes = hexToBytes(signature.slice(signature.length - 2) + signature.slice(0, -2)); // todo: maybe auto-detectable? - return concat(magicBytes, opCodeBytes, amountBytes, signatureBytes); -} +// export function buildSBtcWithdrawBtcPayload({ +// network = REGTEST, +// amountSats, +// signature, +// }: { +// network?: BitcoinNetwork; +// amountSats: number; +// signature: string; +// }): Uint8Array { +// const magicBytes = asciiToBytes(network.magicBytes); +// const opCodeBytes = hexToBytes(OpCode.PegOut); +// const amountBytes = P.U64BE.encode(BigInt(amountSats)); +// const signatureBytes = hexToBytes(signature.slice(signature.length - 2) + signature.slice(0, -2)); // todo: maybe auto-detectable? +// return concat(magicBytes, opCodeBytes, amountBytes, signatureBytes); +// } -export function sbtcWithdrawMessage({ - network = REGTEST, - amountSats, - bitcoinAddress, -}: { - network?: BitcoinNetwork; - amountSats: number; - bitcoinAddress: string; -}): string { - const amountBytes = P.U64BE.encode(BigInt(amountSats)); - const scriptOut = btc.OutScript.encode(btc.Address(network).decode(bitcoinAddress)); - const data = concat(amountBytes, scriptOut); +// export function sbtcWithdrawMessage({ +// network = REGTEST, +// amountSats, +// bitcoinAddress, +// }: { +// network?: BitcoinNetwork; +// amountSats: number; +// bitcoinAddress: string; +// }): string { +// const amountBytes = P.U64BE.encode(BigInt(amountSats)); +// const scriptOut = btc.OutScript.encode(btc.Address(network).decode(bitcoinAddress)); +// const data = concat(amountBytes, scriptOut); - // prettier-ignore - return `Withdraw request for ${amountSats} satoshis to the bitcoin address ${bitcoinAddress} (${bytesToHex(data)})`; -} +// // prettier-ignore +// return `Withdraw request for ${amountSats} satoshis to the bitcoin address ${bitcoinAddress} (${bytesToHex(data)})`; +// } diff --git a/packages/sbtc/tests/withdraw.test.ts b/packages/sbtc/tests/withdraw.test.ts index d172eec1b..b5cb7caef 100644 --- a/packages/sbtc/tests/withdraw.test.ts +++ b/packages/sbtc/tests/withdraw.test.ts @@ -1,107 +1,107 @@ -import * as btc from '@scure/btc-signer'; -import { bytesToHex, hexToBytes } from '@stacks/common'; -import { hashMessage } from '@stacks/encryption'; -import { createStacksPrivateKey, signMessageHashRsv } from '@stacks/transactions'; -import { expect, test } from 'vitest'; -import { DevEnvHelper, WALLET_00, sbtcWithdrawHelper, sbtcWithdrawMessage } from '../src'; +// import * as btc from '@scure/btc-signer'; +// import { bytesToHex, hexToBytes } from '@stacks/common'; +// import { hashMessage } from '@stacks/encryption'; +// import { createStacksPrivateKey, signMessageHashRsv } from '@stacks/transactions'; +// import { expect, test } from 'vitest'; +// import { DevEnvHelper, WALLET_00, sbtcWithdrawHelper, sbtcWithdrawMessage } from '../src'; -const dev = new DevEnvHelper(); +// const dev = new DevEnvHelper(); -test('btc tx, withdraw from sbtc, broadcast', async () => { - const bitcoinAccountA = await dev.getBitcoinAccount(WALLET_00); // funds the tx, can be anybody - const stacksAccount = await dev.getStacksAccount(WALLET_00); +// test('btc tx, withdraw from sbtc, broadcast', async () => { +// const bitcoinAccountA = await dev.getBitcoinAccount(WALLET_00); // funds the tx, can be anybody +// const stacksAccount = await dev.getStacksAccount(WALLET_00); - const bitcoinAccountB = await dev.getBitcoinAccount(WALLET_00, 1); // recipient, can be anybody +// const bitcoinAccountB = await dev.getBitcoinAccount(WALLET_00, 1); // recipient, can be anybody - // Tx prerequisites - const message = sbtcWithdrawMessage({ - amountSats: 1_000, - bitcoinAddress: bitcoinAccountB.wpkh.address, // payout recipient - }); +// // Tx prerequisites +// const message = sbtcWithdrawMessage({ +// amountSats: 1_000, +// bitcoinAddress: bitcoinAccountB.wpkh.address, // payout recipient +// }); - // - A browser extension could do this step - const signature = signMessageHashRsv({ - messageHash: bytesToHex(hashMessage(message)), - privateKey: createStacksPrivateKey(stacksAccount.stxPrivateKey), - }).data; +// // - A browser extension could do this step +// const signature = signMessageHashRsv({ +// messageHash: bytesToHex(hashMessage(message)), +// privateKey: createStacksPrivateKey(stacksAccount.stxPrivateKey), +// }).data; - // Tx building - const txStacksjs = await sbtcWithdrawHelper({ - pegAddress: await dev.getSbtcPegAddress(), +// // Tx building +// const txStacksjs = await sbtcWithdrawHelper({ +// pegAddress: await dev.getSbtcPegAddress(), - amountSats: 1_000, - bitcoinAddress: bitcoinAccountB.wpkh.address, // payout recipient - signature, +// amountSats: 1_000, +// bitcoinAddress: bitcoinAccountB.wpkh.address, // payout recipient +// signature, - fulfillmentFeeSats: 2_000, // fee for signers? +// fulfillmentFeeSats: 2_000, // fee for signers? - feeRate: await dev.estimateFeeRate('low'), - utxos: await dev.fetchUtxos(bitcoinAccountA.wpkh.address), +// feeRate: await dev.estimateFeeRate('low'), +// utxos: await dev.fetchUtxos(bitcoinAccountA.wpkh.address), - bitcoinChangeAddress: bitcoinAccountA.wpkh.address, // tx sender - }); +// bitcoinChangeAddress: bitcoinAccountA.wpkh.address, // tx sender +// }); - // Instead we could PSBT and sign via extension wallet - txStacksjs.sign(bitcoinAccountA.privateKey); // same account as utxo (which are funding the tx) - txStacksjs.finalize(); +// // Instead we could PSBT and sign via extension wallet +// txStacksjs.sign(bitcoinAccountA.privateKey); // same account as utxo (which are funding the tx) +// txStacksjs.finalize(); - const txid = await dev.broadcastTx(txStacksjs); - console.log('txid', txid); -}); +// const txid = await dev.broadcastTx(txStacksjs); +// console.log('txid', txid); +// }); -test('btc tx, withdraw from sbtc, tx compare', async () => { - const bitcoinAccountA = await dev.getBitcoinAccount(WALLET_00, 1); // funds the tx, can be anybody - const stacksAccount = await dev.getStacksAccount(WALLET_00, 1); +// test('btc tx, withdraw from sbtc, tx compare', async () => { +// const bitcoinAccountA = await dev.getBitcoinAccount(WALLET_00, 1); // funds the tx, can be anybody +// const stacksAccount = await dev.getStacksAccount(WALLET_00, 1); - const bitcoinAccountB = await dev.getBitcoinAccount(WALLET_00, 1); // recipient, can be anybody +// const bitcoinAccountB = await dev.getBitcoinAccount(WALLET_00, 1); // recipient, can be anybody - // Tx prerequisites - const message = sbtcWithdrawMessage({ - amountSats: 1_000, - bitcoinAddress: bitcoinAccountB.wpkh.address, // payout recipient - }); +// // Tx prerequisites +// const message = sbtcWithdrawMessage({ +// amountSats: 1_000, +// bitcoinAddress: bitcoinAccountB.wpkh.address, // payout recipient +// }); - // - A browser extension could do this step - const signature = signMessageHashRsv({ - messageHash: bytesToHex(hashMessage(message)), - privateKey: createStacksPrivateKey(stacksAccount.stxPrivateKey), - }).data; +// // - A browser extension could do this step +// const signature = signMessageHashRsv({ +// messageHash: bytesToHex(hashMessage(message)), +// privateKey: createStacksPrivateKey(stacksAccount.stxPrivateKey), +// }).data; - // todo: compare with sbtc-bridge-lib +// // todo: compare with sbtc-bridge-lib - // Tx building - const txStacksjs = await sbtcWithdrawHelper({ - pegAddress: await dev.getSbtcPegAddress(), +// // Tx building +// const txStacksjs = await sbtcWithdrawHelper({ +// pegAddress: await dev.getSbtcPegAddress(), - amountSats: 1_000, - bitcoinAddress: bitcoinAccountB.wpkh.address, // payout recipient - signature, +// amountSats: 1_000, +// bitcoinAddress: bitcoinAccountB.wpkh.address, // payout recipient +// signature, - fulfillmentFeeSats: 2_000, // fee for signers? +// fulfillmentFeeSats: 2_000, // fee for signers? - feeRate: await dev.estimateFeeRate('low'), - utxos: await dev.fetchUtxos(bitcoinAccountA.wpkh.address), +// feeRate: await dev.estimateFeeRate('low'), +// utxos: await dev.fetchUtxos(bitcoinAccountA.wpkh.address), - bitcoinChangeAddress: bitcoinAccountA.wpkh.address, // tx sender - }); +// bitcoinChangeAddress: bitcoinAccountA.wpkh.address, // tx sender +// }); - txStacksjs.sign(bitcoinAccountA.privateKey); // same account as utxo (which are funding the tx) - txStacksjs.finalize(); +// txStacksjs.sign(bitcoinAccountA.privateKey); // same account as utxo (which are funding the tx) +// txStacksjs.finalize(); - // generated with ./utils/withdraw.sh (set to amount=1000) - const hexCli = - '010000000001010221549531adce86b1fbcc178c0535d85d90b7f521d284df018b43f5529650730000000000feffffff0400000000000000004f6a4c4c54323e00000000000003e800070a03a62bf8ba00ebe1712ce17546e11a0b62b7e21ee45db6feaa5559951f106b8ae37ee0af60af2378261ac401fb417e46a46ac09d21e939236c77d8c52faa260100000000000016001488bfaab3ad5f2f164e1cbb50cd07658ccea264e0d0070000000000002251205e682db7c014ab76f2b4fdcbbdb76f9b8111468174cdb159df6e88fe9d078ce68a2550090000000016001488bfaab3ad5f2f164e1cbb50cd07658ccea264e00247304402202252b47a3fc9df631b304017a43eac30e115167549f287f7a0b4449ac372b37102203f2f6b6dd9879a1f2cc69a654ff922f3d2bdac9a6fe85ca13a10f0c6e72c06b4012103969ff3e2bf7f2f73dc903cd11442032c8c7811d57d96ce327ee89c9edea63fa8a0030000'; - const txCli = btc.Transaction.fromRaw(hexToBytes(hexCli), { - allowUnknownInputs: true, - allowUnknownOutputs: true, - }); +// // generated with ./utils/withdraw.sh (set to amount=1000) +// const hexCli = +// '010000000001010221549531adce86b1fbcc178c0535d85d90b7f521d284df018b43f5529650730000000000feffffff0400000000000000004f6a4c4c54323e00000000000003e800070a03a62bf8ba00ebe1712ce17546e11a0b62b7e21ee45db6feaa5559951f106b8ae37ee0af60af2378261ac401fb417e46a46ac09d21e939236c77d8c52faa260100000000000016001488bfaab3ad5f2f164e1cbb50cd07658ccea264e0d0070000000000002251205e682db7c014ab76f2b4fdcbbdb76f9b8111468174cdb159df6e88fe9d078ce68a2550090000000016001488bfaab3ad5f2f164e1cbb50cd07658ccea264e00247304402202252b47a3fc9df631b304017a43eac30e115167549f287f7a0b4449ac372b37102203f2f6b6dd9879a1f2cc69a654ff922f3d2bdac9a6fe85ca13a10f0c6e72c06b4012103969ff3e2bf7f2f73dc903cd11442032c8c7811d57d96ce327ee89c9edea63fa8a0030000'; +// const txCli = btc.Transaction.fromRaw(hexToBytes(hexCli), { +// allowUnknownInputs: true, +// allowUnknownOutputs: true, +// }); - // todo: output[0] uses incorrect magic bytes on regtest for withdraw via CLI (uses testnet magic bytes) - // expect(txStacksjs.getOutput(0).script!).toEqual(txCli.getOutput(0).script!); - expect(txStacksjs.getOutput(1).script!).toEqual(txCli.getOutput(1).script!); - expect(txStacksjs.getOutput(2).script!).toEqual(txCli.getOutput(2).script!); - expect(txStacksjs.outputsLength).toEqual(txCli.outputsLength); +// // todo: output[0] uses incorrect magic bytes on regtest for withdraw via CLI (uses testnet magic bytes) +// // expect(txStacksjs.getOutput(0).script!).toEqual(txCli.getOutput(0).script!); +// expect(txStacksjs.getOutput(1).script!).toEqual(txCli.getOutput(1).script!); +// expect(txStacksjs.getOutput(2).script!).toEqual(txCli.getOutput(2).script!); +// expect(txStacksjs.outputsLength).toEqual(txCli.outputsLength); - // todo: output[1], can have less amount than signature signs, and sbtc will send less - // todo: sbtc doesn't burn the sbtc, the sbtc balance is still on stacks -}); +// // todo: output[1], can have less amount than signature signs, and sbtc will send less +// // todo: sbtc doesn't burn the sbtc, the sbtc balance is still on stacks +// }); From 6886e6e8ccc52a116dcbabc79ba6860619d5b2c0 Mon Sep 17 00:00:00 2001 From: janniks Date: Thu, 28 Nov 2024 07:14:46 -0500 Subject: [PATCH 34/49] fix: wip latest sbtc spec --- package-lock.json | 24838 ++++++++++--------- packages/internal/package.json | 5 +- packages/internal/src/apiMockingHelpers.ts | 16 + packages/sbtc/package.json | 29 +- packages/sbtc/src/api.ts | 402 +- packages/sbtc/src/constants.ts | 2 +- packages/sbtc/src/transactions/deposit.ts | 196 +- packages/sbtc/src/utils.ts | 67 +- packages/sbtc/tests/api.test.ts | 74 +- packages/sbtc/tests/deposit.test.ts | 195 +- packages/sbtc/tests/helpers/wallet.ts | 54 + packages/sbtc/tests/withdraw.test.ts | 3 + 12 files changed, 13173 insertions(+), 12708 deletions(-) diff --git a/package-lock.json b/package-lock.json index 81eef5b93..9432fb308 100644 --- a/package-lock.json +++ b/package-lock.json @@ -47,40 +47,39 @@ "webpack-cli": "^5.1.4" } }, - "node_modules/@aashutoshrathi/word-wrap": { - "version": "1.2.6", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/@ampproject/remapping": { - "version": "2.2.1", + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.3.0.tgz", + "integrity": "sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==", "dev": true, "license": "Apache-2.0", "dependencies": { - "@jridgewell/gen-mapping": "^0.3.0", - "@jridgewell/trace-mapping": "^0.3.9" + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.24" }, "engines": { "node": ">=6.0.0" } }, "node_modules/@babel/code-frame": { - "version": "7.22.10", + "version": "7.26.2", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.26.2.tgz", + "integrity": "sha512-RJlIHRueQgwWitWgF8OdFYGZX328Ax5BCemNGlqHfplnRT9ESi8JkFlvaVYbS+UubVY6dpv87Fs2u5M29iNFVQ==", "dev": true, "license": "MIT", "dependencies": { - "@babel/highlight": "^7.22.10", - "chalk": "^2.4.2" + "@babel/helper-validator-identifier": "^7.25.9", + "js-tokens": "^4.0.0", + "picocolors": "^1.0.0" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/compat-data": { - "version": "7.22.9", + "version": "7.26.2", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.26.2.tgz", + "integrity": "sha512-Z0WgzSEa+aUcdiJuCIqgujCshpMWgUpgOxXotrYPSA53hA3qopNaqcJpyr0hVb1FeWdnqFA35/fUtXgBK8srQg==", "dev": true, "license": "MIT", "engines": { @@ -88,24 +87,26 @@ } }, "node_modules/@babel/core": { - "version": "7.22.10", + "version": "7.26.0", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.26.0.tgz", + "integrity": "sha512-i1SLeK+DzNnQ3LL/CswPCa/E5u4lh1k6IAEphON8F+cXt0t9euTshDru0q7/IqMa1PMPz5RnHuHscF8/ZJsStg==", "dev": true, "license": "MIT", "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.10", - "@babel/parser": "^7.22.10", - "@babel/template": "^7.22.5", - "@babel/traverse": "^7.22.10", - "@babel/types": "^7.22.10", - "convert-source-map": "^1.7.0", + "@babel/code-frame": "^7.26.0", + "@babel/generator": "^7.26.0", + "@babel/helper-compilation-targets": "^7.25.9", + "@babel/helper-module-transforms": "^7.26.0", + "@babel/helpers": "^7.26.0", + "@babel/parser": "^7.26.0", + "@babel/template": "^7.25.9", + "@babel/traverse": "^7.25.9", + "@babel/types": "^7.26.0", + "convert-source-map": "^2.0.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.2", - "json5": "^2.2.2", + "json5": "^2.2.3", "semver": "^6.3.1" }, "engines": { @@ -116,13 +117,10 @@ "url": "https://opencollective.com/babel" } }, - "node_modules/@babel/core/node_modules/convert-source-map": { - "version": "1.9.0", - "dev": true, - "license": "MIT" - }, "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, "license": "ISC", "bin": { @@ -130,27 +128,32 @@ } }, "node_modules/@babel/generator": { - "version": "7.22.10", + "version": "7.26.2", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.26.2.tgz", + "integrity": "sha512-zevQbhbau95nkoxSq3f/DC/SC+EEOUZd3DYqfSkMhY2/wfSeaHV1Ew4vk8e+x8lja31IbyuUa2uQ3JONqKbysw==", "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.26.2", + "@babel/types": "^7.26.0", + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.25", + "jsesc": "^3.0.2" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-compilation-targets": { - "version": "7.22.10", + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.25.9.tgz", + "integrity": "sha512-j9Db8Suy6yV/VHa4qzrj9yZfZxhLWQdVnRlXxmKLYlhWUVB1sB2G5sxuWYXk/whHD9iW76PmNzxZ4UCnTQTVEQ==", "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.25.9", + "@babel/helper-validator-option": "^7.25.9", + "browserslist": "^4.24.0", "lru-cache": "^5.1.1", "semver": "^6.3.1" }, @@ -160,64 +163,38 @@ }, "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, "license": "ISC", "bin": { "semver": "bin/semver.js" } }, - "node_modules/@babel/helper-environment-visitor": { - "version": "7.22.5", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-function-name": { - "version": "7.22.5", - "dev": true, - "license": "MIT", - "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", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/types": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, "node_modules/@babel/helper-module-imports": { - "version": "7.22.5", + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.25.9.tgz", + "integrity": "sha512-tnUA4RsrmflIM6W6RFTLFSXITtl0wKjgpnLgXyowocVPrbYrLUXSBXDgTs8BlbmIzIdlBySRQjINYs2BAkiLtw==", "dev": true, "license": "MIT", "dependencies": { - "@babel/types": "^7.22.5" + "@babel/traverse": "^7.25.9", + "@babel/types": "^7.25.9" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-module-transforms": { - "version": "7.22.9", + "version": "7.26.0", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.26.0.tgz", + "integrity": "sha512-xO+xu6B5K2czEnQye6BHA7DolFFmS3LB7stHZFaOLb1pAwO1HWLS8fXA+eh0A2yIvltPVmx3eNNDBJA2SLHXFw==", "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.25.9", + "@babel/helper-validator-identifier": "^7.25.9", + "@babel/traverse": "^7.25.9" }, "engines": { "node": ">=6.9.0" @@ -227,37 +204,19 @@ } }, "node_modules/@babel/helper-plugin-utils": { - "version": "7.22.5", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-simple-access": { - "version": "7.22.5", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/types": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-split-export-declaration": { - "version": "7.22.6", + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.25.9.tgz", + "integrity": "sha512-kSMlyUVdWe25rEsRGviIgOWnoT/nfABVWlqt9N19/dIPWViAOW2s9wznP5tURbs/IDuNk4gPy3YdYRgH3uxhBw==", "dev": true, "license": "MIT", - "dependencies": { - "@babel/types": "^7.22.5" - }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-string-parser": { - "version": "7.22.5", + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.25.9.tgz", + "integrity": "sha512-4A/SCr/2KLd5jrtOMFzaKjVtAei3+2r/NChoBNoZ3EyP/+GlhoaEGoWOZUmFmoITP7zOJyHIMm+DYRd8o3PvHA==", "dev": true, "license": "MIT", "engines": { @@ -265,7 +224,9 @@ } }, "node_modules/@babel/helper-validator-identifier": { - "version": "7.22.5", + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.25.9.tgz", + "integrity": "sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ==", "dev": true, "license": "MIT", "engines": { @@ -273,7 +234,9 @@ } }, "node_modules/@babel/helper-validator-option": { - "version": "7.22.5", + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.25.9.tgz", + "integrity": "sha512-e/zv1co8pp55dNdEcCynfj9X7nyUKUXoUEwfXqaZt0omVOmDe9oOTdKStH4GmAw6zxMFs50ZayuMfHDKlO7Tfw==", "dev": true, "license": "MIT", "engines": { @@ -281,35 +244,28 @@ } }, "node_modules/@babel/helpers": { - "version": "7.22.10", + "version": "7.26.0", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.26.0.tgz", + "integrity": "sha512-tbhNuIxNcVb21pInl3ZSjksLCvgdZy9KwJ8brv993QtIVKJBBkYXz4q4ZbAv31GdnC+R90np23L5FbEBlthAEw==", "dev": true, "license": "MIT", "dependencies": { - "@babel/template": "^7.22.5", - "@babel/traverse": "^7.22.10", - "@babel/types": "^7.22.10" + "@babel/template": "^7.25.9", + "@babel/types": "^7.26.0" }, "engines": { "node": ">=6.9.0" } }, - "node_modules/@babel/highlight": { - "version": "7.22.10", + "node_modules/@babel/parser": { + "version": "7.26.2", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.26.2.tgz", + "integrity": "sha512-DWMCZH9WA4Maitz2q21SRKHo9QXZxkDsbNZoVD62gusNtNBBqDg9i7uOhASfTfIGNzW+O+r7+jAlM8dwphcJKQ==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-validator-identifier": "^7.22.5", - "chalk": "^2.4.2", - "js-tokens": "^4.0.0" + "@babel/types": "^7.26.0" }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/parser": { - "version": "7.22.10", - "dev": true, - "license": "MIT", "bin": { "parser": "bin/babel-parser.js" }, @@ -319,6 +275,8 @@ }, "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, "license": "MIT", "dependencies": { @@ -330,6 +288,8 @@ }, "node_modules/@babel/plugin-syntax-bigint": { "version": "7.8.3", + "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": { @@ -341,6 +301,8 @@ }, "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, "license": "MIT", "dependencies": { @@ -350,8 +312,42 @@ "@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.26.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.26.0.tgz", + "integrity": "sha512-e2dttdsJ1ZTpi3B9UYGLw41hifAubg19AtCu/2I/F1QNVclOBr1dYpTdmdyZ84Xiz43BS/tCUkMAZNLv12Pi+A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9" + }, + "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": { @@ -363,6 +359,8 @@ }, "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, "license": "MIT", "dependencies": { @@ -373,11 +371,13 @@ } }, "node_modules/@babel/plugin-syntax-jsx": { - "version": "7.22.5", + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.25.9.tgz", + "integrity": "sha512-ld6oezHQMZsZfp6pWtbjaNDF2tiiCYYDqQszHt5VV437lewP9aSi2Of99CK0D0XB21k7FLgnLcmQKyKzynfeAA==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-plugin-utils": "^7.25.9" }, "engines": { "node": ">=6.9.0" @@ -388,6 +388,8 @@ }, "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, "license": "MIT", "dependencies": { @@ -399,6 +401,8 @@ }, "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, "license": "MIT", "dependencies": { @@ -410,6 +414,8 @@ }, "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, "license": "MIT", "dependencies": { @@ -421,6 +427,8 @@ }, "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, "license": "MIT", "dependencies": { @@ -432,6 +440,8 @@ }, "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, "license": "MIT", "dependencies": { @@ -443,6 +453,8 @@ }, "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, "license": "MIT", "dependencies": { @@ -452,8 +464,26 @@ "@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": { @@ -467,11 +497,13 @@ } }, "node_modules/@babel/plugin-syntax-typescript": { - "version": "7.22.5", + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.25.9.tgz", + "integrity": "sha512-hjMgRy5hb8uJJjUcdWunWVcoi9bGpJp8p5Ol1229PoN6aytsLwNMgmdftO23wnCLMfVmTwZDWMPNq/D1SY60JQ==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-plugin-utils": "^7.25.9" }, "engines": { "node": ">=6.9.0" @@ -481,7 +513,9 @@ } }, "node_modules/@babel/runtime": { - "version": "7.22.10", + "version": "7.26.0", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.26.0.tgz", + "integrity": "sha512-FDSOghenHTiToteC/QRlv2q3DhPZ/oOXTBoirfWNx1Cx3TMVcGWQtMMmQcSvb/JjpNeGzx8Pq/b4fKEJuWm1sw==", "dev": true, "license": "MIT", "dependencies": { @@ -492,32 +526,33 @@ } }, "node_modules/@babel/template": { - "version": "7.22.5", + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.25.9.tgz", + "integrity": "sha512-9DGttpmPvIxBb/2uwpVo3dqJ+O6RooAFOS+lB+xDqoE2PVCE8nfoHMdZLpfCQRLwvohzXISPZcgxt80xLfsuwg==", "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.25.9", + "@babel/parser": "^7.25.9", + "@babel/types": "^7.25.9" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/traverse": { - "version": "7.22.10", + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.25.9.tgz", + "integrity": "sha512-ZCuvfwOwlz/bawvAuvcj8rrithP2/N55Tzz342AkTvq4qaWbGfmCk/tKhNaV2cthijKrPAA8SRJV5WWe7IBMJw==", "dev": true, "license": "MIT", "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.10", - "@babel/types": "^7.22.10", - "debug": "^4.1.0", + "@babel/code-frame": "^7.25.9", + "@babel/generator": "^7.25.9", + "@babel/parser": "^7.25.9", + "@babel/template": "^7.25.9", + "@babel/types": "^7.25.9", + "debug": "^4.3.1", "globals": "^11.1.0" }, "engines": { @@ -526,6 +561,8 @@ }, "node_modules/@babel/traverse/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, "license": "MIT", "engines": { @@ -533,13 +570,14 @@ } }, "node_modules/@babel/types": { - "version": "7.22.10", + "version": "7.26.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.26.0.tgz", + "integrity": "sha512-Z/yiTPj+lDVnF7lWeKCIJzaIkI0vYO87dMpZ4bg4TDrFe4XXLFWL1TbXU27gBP3QccxV9mZICCrnjnYlJjXHOA==", "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.25.9", + "@babel/helper-validator-identifier": "^7.25.9" }, "engines": { "node": ">=6.9.0" @@ -547,6 +585,8 @@ }, "node_modules/@bcoe/v8-coverage": { "version": "0.2.3", + "resolved": "https://registry.npmjs.org/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz", + "integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==", "dev": true, "license": "MIT" }, @@ -561,15 +601,17 @@ } }, "node_modules/@changesets/apply-release-plan": { - "version": "6.1.4", + "version": "7.0.5", + "resolved": "https://registry.npmjs.org/@changesets/apply-release-plan/-/apply-release-plan-7.0.5.tgz", + "integrity": "sha512-1cWCk+ZshEkSVEZrm2fSj1Gz8sYvxgUL4Q78+1ZZqeqfuevPTPk033/yUZ3df8BKMohkqqHfzj0HOOrG0KtXTw==", "dev": true, "license": "MIT", "dependencies": { - "@babel/runtime": "^7.20.1", - "@changesets/config": "^2.3.1", - "@changesets/get-version-range-type": "^0.3.2", - "@changesets/git": "^2.0.0", - "@changesets/types": "^5.2.1", + "@changesets/config": "^3.0.3", + "@changesets/get-version-range-type": "^0.4.0", + "@changesets/git": "^3.0.1", + "@changesets/should-skip-package": "^0.1.1", + "@changesets/types": "^6.0.0", "@manypkg/get-packages": "^1.1.3", "detect-indent": "^6.0.0", "fs-extra": "^7.0.1", @@ -582,6 +624,8 @@ }, "node_modules/@changesets/apply-release-plan/node_modules/prettier": { "version": "2.8.8", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.8.8.tgz", + "integrity": "sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==", "dev": true, "license": "MIT", "bin": { @@ -595,85 +639,90 @@ } }, "node_modules/@changesets/assemble-release-plan": { - "version": "5.2.4", + "version": "6.0.4", + "resolved": "https://registry.npmjs.org/@changesets/assemble-release-plan/-/assemble-release-plan-6.0.4.tgz", + "integrity": "sha512-nqICnvmrwWj4w2x0fOhVj2QEGdlUuwVAwESrUo5HLzWMI1rE5SWfsr9ln+rDqWB6RQ2ZyaMZHUcU7/IRaUJS+Q==", "dev": true, "license": "MIT", "dependencies": { - "@babel/runtime": "^7.20.1", - "@changesets/errors": "^0.1.4", - "@changesets/get-dependents-graph": "^1.3.6", - "@changesets/types": "^5.2.1", + "@changesets/errors": "^0.2.0", + "@changesets/get-dependents-graph": "^2.1.2", + "@changesets/should-skip-package": "^0.1.1", + "@changesets/types": "^6.0.0", "@manypkg/get-packages": "^1.1.3", "semver": "^7.5.3" } }, "node_modules/@changesets/changelog-git": { - "version": "0.1.14", + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/@changesets/changelog-git/-/changelog-git-0.2.0.tgz", + "integrity": "sha512-bHOx97iFI4OClIT35Lok3sJAwM31VbUM++gnMBV16fdbtBhgYu4dxsphBF/0AZZsyAHMrnM0yFcj5gZM1py6uQ==", "dev": true, "license": "MIT", "dependencies": { - "@changesets/types": "^5.2.1" + "@changesets/types": "^6.0.0" } }, "node_modules/@changesets/cli": { - "version": "2.26.2", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/runtime": "^7.20.1", - "@changesets/apply-release-plan": "^6.1.4", - "@changesets/assemble-release-plan": "^5.2.4", - "@changesets/changelog-git": "^0.1.14", - "@changesets/config": "^2.3.1", - "@changesets/errors": "^0.1.4", - "@changesets/get-dependents-graph": "^1.3.6", - "@changesets/get-release-plan": "^3.0.17", - "@changesets/git": "^2.0.0", - "@changesets/logger": "^0.0.5", - "@changesets/pre": "^1.0.14", - "@changesets/read": "^0.5.9", - "@changesets/types": "^5.2.1", - "@changesets/write": "^0.2.3", + "version": "2.27.9", + "resolved": "https://registry.npmjs.org/@changesets/cli/-/cli-2.27.9.tgz", + "integrity": "sha512-q42a/ZbDnxPpCb5Wkm6tMVIxgeI9C/bexntzTeCFBrQEdpisQqk8kCHllYZMDjYtEc1ZzumbMJAG8H0Z4rdvjg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@changesets/apply-release-plan": "^7.0.5", + "@changesets/assemble-release-plan": "^6.0.4", + "@changesets/changelog-git": "^0.2.0", + "@changesets/config": "^3.0.3", + "@changesets/errors": "^0.2.0", + "@changesets/get-dependents-graph": "^2.1.2", + "@changesets/get-release-plan": "^4.0.4", + "@changesets/git": "^3.0.1", + "@changesets/logger": "^0.1.1", + "@changesets/pre": "^2.0.1", + "@changesets/read": "^0.6.1", + "@changesets/should-skip-package": "^0.1.1", + "@changesets/types": "^6.0.0", + "@changesets/write": "^0.3.2", "@manypkg/get-packages": "^1.1.3", - "@types/is-ci": "^3.0.0", - "@types/semver": "^7.5.0", "ansi-colors": "^4.1.3", - "chalk": "^2.1.0", + "ci-info": "^3.7.0", "enquirer": "^2.3.0", "external-editor": "^3.1.0", "fs-extra": "^7.0.1", - "human-id": "^1.0.2", - "is-ci": "^3.0.1", - "meow": "^6.0.0", - "outdent": "^0.5.0", + "mri": "^1.2.0", "p-limit": "^2.2.0", - "preferred-pm": "^3.0.0", + "package-manager-detector": "^0.2.0", + "picocolors": "^1.1.0", "resolve-from": "^5.0.0", "semver": "^7.5.3", "spawndamnit": "^2.0.0", - "term-size": "^2.1.0", - "tty-table": "^4.1.5" + "term-size": "^2.1.0" }, "bin": { "changeset": "bin.js" } }, "node_modules/@changesets/config": { - "version": "2.3.1", + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@changesets/config/-/config-3.0.3.tgz", + "integrity": "sha512-vqgQZMyIcuIpw9nqFIpTSNyc/wgm/Lu1zKN5vECy74u95Qx/Wa9g27HdgO4NkVAaq+BGA8wUc/qvbvVNs93n6A==", "dev": true, "license": "MIT", "dependencies": { - "@changesets/errors": "^0.1.4", - "@changesets/get-dependents-graph": "^1.3.6", - "@changesets/logger": "^0.0.5", - "@changesets/types": "^5.2.1", + "@changesets/errors": "^0.2.0", + "@changesets/get-dependents-graph": "^2.1.2", + "@changesets/logger": "^0.1.1", + "@changesets/types": "^6.0.0", "@manypkg/get-packages": "^1.1.3", "fs-extra": "^7.0.1", "micromatch": "^4.0.2" } }, "node_modules/@changesets/errors": { - "version": "0.1.4", + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/@changesets/errors/-/errors-0.2.0.tgz", + "integrity": "sha512-6BLOQUscTpZeGljvyQXlWOItQyU71kCdGz7Pi8H8zdw6BI0g3m43iL4xKUVPWtG+qrrL9DTjpdn8eYuCQSRpow==", "dev": true, "license": "MIT", "dependencies": { @@ -681,44 +730,48 @@ } }, "node_modules/@changesets/get-dependents-graph": { - "version": "1.3.6", + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/@changesets/get-dependents-graph/-/get-dependents-graph-2.1.2.tgz", + "integrity": "sha512-sgcHRkiBY9i4zWYBwlVyAjEM9sAzs4wYVwJUdnbDLnVG3QwAaia1Mk5P8M7kraTOZN+vBET7n8KyB0YXCbFRLQ==", "dev": true, "license": "MIT", "dependencies": { - "@changesets/types": "^5.2.1", + "@changesets/types": "^6.0.0", "@manypkg/get-packages": "^1.1.3", - "chalk": "^2.1.0", - "fs-extra": "^7.0.1", + "picocolors": "^1.1.0", "semver": "^7.5.3" } }, "node_modules/@changesets/get-release-plan": { - "version": "3.0.17", + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/@changesets/get-release-plan/-/get-release-plan-4.0.4.tgz", + "integrity": "sha512-SicG/S67JmPTrdcc9Vpu0wSQt7IiuN0dc8iR5VScnnTVPfIaLvKmEGRvIaF0kcn8u5ZqLbormZNTO77bCEvyWw==", "dev": true, "license": "MIT", "dependencies": { - "@babel/runtime": "^7.20.1", - "@changesets/assemble-release-plan": "^5.2.4", - "@changesets/config": "^2.3.1", - "@changesets/pre": "^1.0.14", - "@changesets/read": "^0.5.9", - "@changesets/types": "^5.2.1", + "@changesets/assemble-release-plan": "^6.0.4", + "@changesets/config": "^3.0.3", + "@changesets/pre": "^2.0.1", + "@changesets/read": "^0.6.1", + "@changesets/types": "^6.0.0", "@manypkg/get-packages": "^1.1.3" } }, "node_modules/@changesets/get-version-range-type": { - "version": "0.3.2", + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/@changesets/get-version-range-type/-/get-version-range-type-0.4.0.tgz", + "integrity": "sha512-hwawtob9DryoGTpixy1D3ZXbGgJu1Rhr+ySH2PvTLHvkZuQ7sRT4oQwMh0hbqZH1weAooedEjRsbrWcGLCeyVQ==", "dev": true, "license": "MIT" }, "node_modules/@changesets/git": { - "version": "2.0.0", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@changesets/git/-/git-3.0.1.tgz", + "integrity": "sha512-pdgHcYBLCPcLd82aRcuO0kxCDbw/yISlOtkmwmE8Odo1L6hSiZrBOsRl84eYG7DRCab/iHnOkWqExqc4wxk2LQ==", "dev": true, "license": "MIT", "dependencies": { - "@babel/runtime": "^7.20.1", - "@changesets/errors": "^0.1.4", - "@changesets/types": "^5.2.1", + "@changesets/errors": "^0.2.0", "@manypkg/get-packages": "^1.1.3", "is-subdir": "^1.1.1", "micromatch": "^4.0.2", @@ -726,61 +779,81 @@ } }, "node_modules/@changesets/logger": { - "version": "0.0.5", + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/@changesets/logger/-/logger-0.1.1.tgz", + "integrity": "sha512-OQtR36ZlnuTxKqoW4Sv6x5YIhOmClRd5pWsjZsddYxpWs517R0HkyiefQPIytCVh4ZcC5x9XaG8KTdd5iRQUfg==", "dev": true, "license": "MIT", "dependencies": { - "chalk": "^2.1.0" + "picocolors": "^1.1.0" } }, "node_modules/@changesets/parse": { - "version": "0.3.16", + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/@changesets/parse/-/parse-0.4.0.tgz", + "integrity": "sha512-TS/9KG2CdGXS27S+QxbZXgr8uPsP4yNJYb4BC2/NeFUj80Rni3TeD2qwWmabymxmrLo7JEsytXH1FbpKTbvivw==", "dev": true, "license": "MIT", "dependencies": { - "@changesets/types": "^5.2.1", + "@changesets/types": "^6.0.0", "js-yaml": "^3.13.1" } }, "node_modules/@changesets/pre": { - "version": "1.0.14", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@changesets/pre/-/pre-2.0.1.tgz", + "integrity": "sha512-vvBJ/If4jKM4tPz9JdY2kGOgWmCowUYOi5Ycv8dyLnEE8FgpYYUo1mgJZxcdtGGP3aG8rAQulGLyyXGSLkIMTQ==", "dev": true, "license": "MIT", "dependencies": { - "@babel/runtime": "^7.20.1", - "@changesets/errors": "^0.1.4", - "@changesets/types": "^5.2.1", + "@changesets/errors": "^0.2.0", + "@changesets/types": "^6.0.0", "@manypkg/get-packages": "^1.1.3", "fs-extra": "^7.0.1" } }, "node_modules/@changesets/read": { - "version": "0.5.9", + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/@changesets/read/-/read-0.6.1.tgz", + "integrity": "sha512-jYMbyXQk3nwP25nRzQQGa1nKLY0KfoOV7VLgwucI0bUO8t8ZLCr6LZmgjXsiKuRDc+5A6doKPr9w2d+FEJ55zQ==", "dev": true, "license": "MIT", "dependencies": { - "@babel/runtime": "^7.20.1", - "@changesets/git": "^2.0.0", - "@changesets/logger": "^0.0.5", - "@changesets/parse": "^0.3.16", - "@changesets/types": "^5.2.1", - "chalk": "^2.1.0", + "@changesets/git": "^3.0.1", + "@changesets/logger": "^0.1.1", + "@changesets/parse": "^0.4.0", + "@changesets/types": "^6.0.0", "fs-extra": "^7.0.1", - "p-filter": "^2.1.0" + "p-filter": "^2.1.0", + "picocolors": "^1.1.0" + } + }, + "node_modules/@changesets/should-skip-package": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/@changesets/should-skip-package/-/should-skip-package-0.1.1.tgz", + "integrity": "sha512-H9LjLbF6mMHLtJIc/eHR9Na+MifJ3VxtgP/Y+XLn4BF7tDTEN1HNYtH6QMcjP1uxp9sjaFYmW8xqloaCi/ckTg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@changesets/types": "^6.0.0", + "@manypkg/get-packages": "^1.1.3" } }, "node_modules/@changesets/types": { - "version": "5.2.1", + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/@changesets/types/-/types-6.0.0.tgz", + "integrity": "sha512-b1UkfNulgKoWfqyHtzKS5fOZYSJO+77adgL7DLRDr+/7jhChN+QcHnbjiQVOz/U+Ts3PGNySq7diAItzDgugfQ==", "dev": true, "license": "MIT" }, "node_modules/@changesets/write": { - "version": "0.2.3", + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/@changesets/write/-/write-0.3.2.tgz", + "integrity": "sha512-kDxDrPNpUgsjDbWBvUo27PzKX4gqeKOlhibaOXDJA6kuBisGqNHv/HwGJrAu8U/dSf8ZEFIeHIPtvSlZI1kULw==", "dev": true, "license": "MIT", "dependencies": { - "@babel/runtime": "^7.20.1", - "@changesets/types": "^5.2.1", + "@changesets/types": "^6.0.0", "fs-extra": "^7.0.1", "human-id": "^1.0.2", "prettier": "^2.7.1" @@ -788,6 +861,8 @@ }, "node_modules/@changesets/write/node_modules/prettier": { "version": "2.8.8", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.8.8.tgz", + "integrity": "sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==", "dev": true, "license": "MIT", "bin": { @@ -801,22 +876,26 @@ } }, "node_modules/@colors/colors": { - "version": "1.5.0", + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/@colors/colors/-/colors-1.6.0.tgz", + "integrity": "sha512-Ir+AOibqzrIsL6ajt3Rz3LskB7OiMVHqltZmspbW/TJuTVuyOMirVqAkjfY6JISiLHgyNqicAC8AyHHGzNd/dA==", "license": "MIT", "engines": { "node": ">=0.1.90" } }, "node_modules/@commitlint/cli": { - "version": "17.7.1", + "version": "17.8.1", + "resolved": "https://registry.npmjs.org/@commitlint/cli/-/cli-17.8.1.tgz", + "integrity": "sha512-ay+WbzQesE0Rv4EQKfNbSMiJJ12KdKTDzIt0tcK4k11FdsWmtwP0Kp1NWMOUswfIWo6Eb7p7Ln721Nx9FLNBjg==", "dev": true, "license": "MIT", "dependencies": { - "@commitlint/format": "^17.4.4", - "@commitlint/lint": "^17.7.0", - "@commitlint/load": "^17.7.1", - "@commitlint/read": "^17.5.1", - "@commitlint/types": "^17.4.4", + "@commitlint/format": "^17.8.1", + "@commitlint/lint": "^17.8.1", + "@commitlint/load": "^17.8.1", + "@commitlint/read": "^17.8.1", + "@commitlint/types": "^17.8.1", "execa": "^5.0.0", "lodash.isfunction": "^3.0.9", "resolve-from": "5.0.0", @@ -831,7 +910,9 @@ } }, "node_modules/@commitlint/config-conventional": { - "version": "17.7.0", + "version": "17.8.1", + "resolved": "https://registry.npmjs.org/@commitlint/config-conventional/-/config-conventional-17.8.1.tgz", + "integrity": "sha512-NxCOHx1kgneig3VLauWJcDWS40DVjg7nKOpBEEK9E5fjJpQqLCilcnKkIIjdBH98kEO1q3NpE5NSrZ2kl/QGJg==", "dev": true, "license": "MIT", "dependencies": { @@ -842,43 +923,27 @@ } }, "node_modules/@commitlint/config-validator": { - "version": "17.6.7", + "version": "17.8.1", + "resolved": "https://registry.npmjs.org/@commitlint/config-validator/-/config-validator-17.8.1.tgz", + "integrity": "sha512-UUgUC+sNiiMwkyiuIFR7JG2cfd9t/7MV8VB4TZ+q02ZFkHoduUS4tJGsCBWvBOGD9Btev6IecPMvlWUfJorkEA==", "dev": true, "license": "MIT", "dependencies": { - "@commitlint/types": "^17.4.4", + "@commitlint/types": "^17.8.1", "ajv": "^8.11.0" }, "engines": { "node": ">=v14" } }, - "node_modules/@commitlint/config-validator/node_modules/ajv": { - "version": "8.12.0", - "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" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/@commitlint/config-validator/node_modules/json-schema-traverse": { - "version": "1.0.0", - "dev": true, - "license": "MIT" - }, "node_modules/@commitlint/ensure": { - "version": "17.6.7", + "version": "17.8.1", + "resolved": "https://registry.npmjs.org/@commitlint/ensure/-/ensure-17.8.1.tgz", + "integrity": "sha512-xjafwKxid8s1K23NFpL8JNo6JnY/ysetKo8kegVM7c8vs+kWLP8VrQq+NbhgVlmCojhEDbzQKp4eRXSjVOGsow==", "dev": true, "license": "MIT", "dependencies": { - "@commitlint/types": "^17.4.4", + "@commitlint/types": "^17.8.1", "lodash.camelcase": "^4.3.0", "lodash.kebabcase": "^4.1.1", "lodash.snakecase": "^4.1.1", @@ -890,7 +955,9 @@ } }, "node_modules/@commitlint/execute-rule": { - "version": "17.4.0", + "version": "17.8.1", + "resolved": "https://registry.npmjs.org/@commitlint/execute-rule/-/execute-rule-17.8.1.tgz", + "integrity": "sha512-JHVupQeSdNI6xzA9SqMF+p/JjrHTcrJdI02PwesQIDCIGUrv04hicJgCcws5nzaoZbROapPs0s6zeVHoxpMwFQ==", "dev": true, "license": "MIT", "engines": { @@ -898,117 +965,97 @@ } }, "node_modules/@commitlint/format": { - "version": "17.4.4", + "version": "17.8.1", + "resolved": "https://registry.npmjs.org/@commitlint/format/-/format-17.8.1.tgz", + "integrity": "sha512-f3oMTyZ84M9ht7fb93wbCKmWxO5/kKSbwuYvS867duVomoOsgrgljkGGIztmT/srZnaiGbaK8+Wf8Ik2tSr5eg==", "dev": true, "license": "MIT", "dependencies": { - "@commitlint/types": "^17.4.4", + "@commitlint/types": "^17.8.1", "chalk": "^4.1.0" }, "engines": { "node": ">=v14" } }, - "node_modules/@commitlint/format/node_modules/ansi-styles": { - "version": "4.3.0", + "node_modules/@commitlint/is-ignored": { + "version": "17.8.1", + "resolved": "https://registry.npmjs.org/@commitlint/is-ignored/-/is-ignored-17.8.1.tgz", + "integrity": "sha512-UshMi4Ltb4ZlNn4F7WtSEugFDZmctzFpmbqvpyxD3la510J+PLcnyhf9chs7EryaRFJMdAKwsEKfNK0jL/QM4g==", "dev": true, "license": "MIT", "dependencies": { - "color-convert": "^2.0.1" + "@commitlint/types": "^17.8.1", + "semver": "7.5.4" }, "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "node": ">=v14" } }, - "node_modules/@commitlint/format/node_modules/chalk": { - "version": "4.1.2", + "node_modules/@commitlint/is-ignored/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": "MIT", + "license": "ISC", "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" + "yallist": "^4.0.0" }, "engines": { "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/@commitlint/format/node_modules/color-convert": { - "version": "2.0.1", + "node_modules/@commitlint/is-ignored/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": "MIT", + "license": "ISC", "dependencies": { - "color-name": "~1.1.4" + "lru-cache": "^6.0.0" }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/@commitlint/format/node_modules/color-name": { - "version": "1.1.4", - "dev": true, - "license": "MIT" - }, - "node_modules/@commitlint/format/node_modules/has-flag": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/@commitlint/format/node_modules/supports-color": { - "version": "7.2.0", - "dev": true, - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" + "bin": { + "semver": "bin/semver.js" }, "engines": { - "node": ">=8" + "node": ">=10" } }, - "node_modules/@commitlint/is-ignored": { - "version": "17.7.0", + "node_modules/@commitlint/is-ignored/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": "MIT", - "dependencies": { - "@commitlint/types": "^17.4.4", - "semver": "7.5.4" - }, - "engines": { - "node": ">=v14" - } + "license": "ISC" }, "node_modules/@commitlint/lint": { - "version": "17.7.0", + "version": "17.8.1", + "resolved": "https://registry.npmjs.org/@commitlint/lint/-/lint-17.8.1.tgz", + "integrity": "sha512-aQUlwIR1/VMv2D4GXSk7PfL5hIaFSfy6hSHV94O8Y27T5q+DlDEgd/cZ4KmVI+MWKzFfCTiTuWqjfRSfdRllCA==", "dev": true, "license": "MIT", "dependencies": { - "@commitlint/is-ignored": "^17.7.0", - "@commitlint/parse": "^17.7.0", - "@commitlint/rules": "^17.7.0", - "@commitlint/types": "^17.4.4" + "@commitlint/is-ignored": "^17.8.1", + "@commitlint/parse": "^17.8.1", + "@commitlint/rules": "^17.8.1", + "@commitlint/types": "^17.8.1" }, "engines": { "node": ">=v14" } }, "node_modules/@commitlint/load": { - "version": "17.7.1", + "version": "17.8.1", + "resolved": "https://registry.npmjs.org/@commitlint/load/-/load-17.8.1.tgz", + "integrity": "sha512-iF4CL7KDFstP1kpVUkT8K2Wl17h2yx9VaR1ztTc8vzByWWcbO/WaKwxsnCOqow9tVAlzPfo1ywk9m2oJ9ucMqA==", "dev": true, "license": "MIT", "dependencies": { - "@commitlint/config-validator": "^17.6.7", - "@commitlint/execute-rule": "^17.4.0", - "@commitlint/resolve-extends": "^17.6.7", - "@commitlint/types": "^17.4.4", - "@types/node": "20.4.7", + "@commitlint/config-validator": "^17.8.1", + "@commitlint/execute-rule": "^17.8.1", + "@commitlint/resolve-extends": "^17.8.1", + "@commitlint/types": "^17.8.1", + "@types/node": "20.5.1", "chalk": "^4.1.0", "cosmiconfig": "^8.0.0", "cosmiconfig-typescript-loader": "^4.0.0", @@ -1017,114 +1064,72 @@ "lodash.uniq": "^4.5.0", "resolve-from": "^5.0.0", "ts-node": "^10.8.1", - "typescript": "^4.6.4 || ^5.0.0" + "typescript": "^4.6.4 || ^5.2.2" }, "engines": { "node": ">=v14" } }, - "node_modules/@commitlint/load/node_modules/ansi-styles": { - "version": "4.3.0", + "node_modules/@commitlint/load/node_modules/typescript": { + "version": "5.6.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.6.3.tgz", + "integrity": "sha512-hjcS1mhfuyi4WW8IWtjP7brDrG2cuDZukyrYrSauoXGNgx0S7zceP07adYkJycEr56BOUTNPzbInooiN3fn1qw==", "dev": true, - "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" + "license": "Apache-2.0", + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" }, "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "node": ">=14.17" } }, - "node_modules/@commitlint/load/node_modules/chalk": { - "version": "4.1.2", + "node_modules/@commitlint/message": { + "version": "17.8.1", + "resolved": "https://registry.npmjs.org/@commitlint/message/-/message-17.8.1.tgz", + "integrity": "sha512-6bYL1GUQsD6bLhTH3QQty8pVFoETfFQlMn2Nzmz3AOLqRVfNNtXBaSY0dhZ0dM6A2MEq4+2d7L/2LP8TjqGRkA==", "dev": true, "license": "MIT", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" + "node": ">=v14" } }, - "node_modules/@commitlint/load/node_modules/color-convert": { - "version": "2.0.1", + "node_modules/@commitlint/parse": { + "version": "17.8.1", + "resolved": "https://registry.npmjs.org/@commitlint/parse/-/parse-17.8.1.tgz", + "integrity": "sha512-/wLUickTo0rNpQgWwLPavTm7WbwkZoBy3X8PpkUmlSmQJyWQTj0m6bDjiykMaDt41qcUbfeFfaCvXfiR4EGnfw==", "dev": true, "license": "MIT", "dependencies": { - "color-name": "~1.1.4" + "@commitlint/types": "^17.8.1", + "conventional-changelog-angular": "^6.0.0", + "conventional-commits-parser": "^4.0.0" }, "engines": { - "node": ">=7.0.0" + "node": ">=v14" } }, - "node_modules/@commitlint/load/node_modules/color-name": { - "version": "1.1.4", - "dev": true, - "license": "MIT" - }, - "node_modules/@commitlint/load/node_modules/has-flag": { - "version": "4.0.0", + "node_modules/@commitlint/read": { + "version": "17.8.1", + "resolved": "https://registry.npmjs.org/@commitlint/read/-/read-17.8.1.tgz", + "integrity": "sha512-Fd55Oaz9irzBESPCdMd8vWWgxsW3OWR99wOntBDHgf9h7Y6OOHjWEdS9Xzen1GFndqgyoaFplQS5y7KZe0kO2w==", "dev": true, "license": "MIT", + "dependencies": { + "@commitlint/top-level": "^17.8.1", + "@commitlint/types": "^17.8.1", + "fs-extra": "^11.0.0", + "git-raw-commits": "^2.0.11", + "minimist": "^1.2.6" + }, "engines": { - "node": ">=8" - } - }, - "node_modules/@commitlint/load/node_modules/supports-color": { - "version": "7.2.0", - "dev": true, - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@commitlint/message": { - "version": "17.4.2", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=v14" - } - }, - "node_modules/@commitlint/parse": { - "version": "17.7.0", - "dev": true, - "license": "MIT", - "dependencies": { - "@commitlint/types": "^17.4.4", - "conventional-changelog-angular": "^6.0.0", - "conventional-commits-parser": "^4.0.0" - }, - "engines": { - "node": ">=v14" - } - }, - "node_modules/@commitlint/read": { - "version": "17.5.1", - "dev": true, - "license": "MIT", - "dependencies": { - "@commitlint/top-level": "^17.4.0", - "@commitlint/types": "^17.4.4", - "fs-extra": "^11.0.0", - "git-raw-commits": "^2.0.11", - "minimist": "^1.2.6" - }, - "engines": { - "node": ">=v14" + "node": ">=v14" } }, "node_modules/@commitlint/read/node_modules/fs-extra": { - "version": "11.1.1", + "version": "11.2.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.2.0.tgz", + "integrity": "sha512-PmDi3uwK5nFuXh7XDTlVnS17xJS7vW36is2+w3xcv8SVxiB4NyATf4ctkVY5bkSjX0Y4nbvZCq1/EjtEyr9ktw==", "dev": true, "license": "MIT", "dependencies": { @@ -1138,6 +1143,8 @@ }, "node_modules/@commitlint/read/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, "license": "MIT", "dependencies": { @@ -1148,7 +1155,9 @@ } }, "node_modules/@commitlint/read/node_modules/universalify": { - "version": "2.0.0", + "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": { @@ -1156,12 +1165,14 @@ } }, "node_modules/@commitlint/resolve-extends": { - "version": "17.6.7", + "version": "17.8.1", + "resolved": "https://registry.npmjs.org/@commitlint/resolve-extends/-/resolve-extends-17.8.1.tgz", + "integrity": "sha512-W/ryRoQ0TSVXqJrx5SGkaYuAaE/BUontL1j1HsKckvM6e5ZaG0M9126zcwL6peKSuIetJi7E87PRQF8O86EW0Q==", "dev": true, "license": "MIT", "dependencies": { - "@commitlint/config-validator": "^17.6.7", - "@commitlint/types": "^17.4.4", + "@commitlint/config-validator": "^17.8.1", + "@commitlint/types": "^17.8.1", "import-fresh": "^3.0.0", "lodash.mergewith": "^4.6.2", "resolve-from": "^5.0.0", @@ -1172,14 +1183,16 @@ } }, "node_modules/@commitlint/rules": { - "version": "17.7.0", + "version": "17.8.1", + "resolved": "https://registry.npmjs.org/@commitlint/rules/-/rules-17.8.1.tgz", + "integrity": "sha512-2b7OdVbN7MTAt9U0vKOYKCDsOvESVXxQmrvuVUZ0rGFMCrCPJWWP1GJ7f0lAypbDAhaGb8zqtdOr47192LBrIA==", "dev": true, "license": "MIT", "dependencies": { - "@commitlint/ensure": "^17.6.7", - "@commitlint/message": "^17.4.2", - "@commitlint/to-lines": "^17.4.0", - "@commitlint/types": "^17.4.4", + "@commitlint/ensure": "^17.8.1", + "@commitlint/message": "^17.8.1", + "@commitlint/to-lines": "^17.8.1", + "@commitlint/types": "^17.8.1", "execa": "^5.0.0" }, "engines": { @@ -1187,7 +1200,9 @@ } }, "node_modules/@commitlint/to-lines": { - "version": "17.4.0", + "version": "17.8.1", + "resolved": "https://registry.npmjs.org/@commitlint/to-lines/-/to-lines-17.8.1.tgz", + "integrity": "sha512-LE0jb8CuR/mj6xJyrIk8VLz03OEzXFgLdivBytoooKO5xLt5yalc8Ma5guTWobw998sbR3ogDd+2jed03CFmJA==", "dev": true, "license": "MIT", "engines": { @@ -1195,7 +1210,9 @@ } }, "node_modules/@commitlint/top-level": { - "version": "17.4.0", + "version": "17.8.1", + "resolved": "https://registry.npmjs.org/@commitlint/top-level/-/top-level-17.8.1.tgz", + "integrity": "sha512-l6+Z6rrNf5p333SHfEte6r+WkOxGlWK4bLuZKbtf/2TXRN+qhrvn1XE63VhD8Oe9oIHQ7F7W1nG2k/TJFhx2yA==", "dev": true, "license": "MIT", "dependencies": { @@ -1206,7 +1223,9 @@ } }, "node_modules/@commitlint/types": { - "version": "17.4.4", + "version": "17.8.1", + "resolved": "https://registry.npmjs.org/@commitlint/types/-/types-17.8.1.tgz", + "integrity": "sha512-PXDQXkAmiMEG162Bqdh9ChML/GJZo6vU+7F03ALKDK8zYc6SuAr47LjG7hGYRqUOz+WK0dU7bQ0xzuqFMdxzeQ==", "dev": true, "license": "MIT", "dependencies": { @@ -1216,72 +1235,10 @@ "node": ">=v14" } }, - "node_modules/@commitlint/types/node_modules/ansi-styles": { - "version": "4.3.0", - "dev": true, - "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/@commitlint/types/node_modules/chalk": { - "version": "4.1.2", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/@commitlint/types/node_modules/color-convert": { - "version": "2.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/@commitlint/types/node_modules/color-name": { - "version": "1.1.4", - "dev": true, - "license": "MIT" - }, - "node_modules/@commitlint/types/node_modules/has-flag": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/@commitlint/types/node_modules/supports-color": { - "version": "7.2.0", - "dev": true, - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, "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": { @@ -1293,6 +1250,8 @@ }, "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==", "dev": true, "license": "MIT", "dependencies": { @@ -1302,6 +1261,8 @@ }, "node_modules/@dabh/diagnostics": { "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@dabh/diagnostics/-/diagnostics-2.0.3.tgz", + "integrity": "sha512-hrlQOIi7hAfzsMqlGSFyVucrx38O+j6wiGOf//H2ecvIEqYN4ADBSS2iLMh5UFyDunCNniUIPk/q3riFv45xRA==", "license": "MIT", "dependencies": { "colorspace": "1.1.x", @@ -1311,6 +1272,8 @@ }, "node_modules/@dependents/detective-less": { "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@dependents/detective-less/-/detective-less-3.0.2.tgz", + "integrity": "sha512-1YUvQ+e0eeTWAHoN8Uz2x2U37jZs6IGutiIE5LXId7cxfUGhtZjzxE06FdUiuiRrW+UE0vNCdSNPH2lY4dQCOQ==", "dev": true, "license": "MIT", "dependencies": { @@ -1323,16 +1286,49 @@ }, "node_modules/@discoveryjs/json-ext": { "version": "0.5.7", + "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/@emnapi/core": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/@emnapi/core/-/core-1.3.1.tgz", + "integrity": "sha512-pVGjBIt1Y6gg3EJN8jTcfpP/+uuRksIo055oE/OBkDNcjZqVbfkWCksG1Jp4yZnj3iKWyWX8fdG/j6UDYPbFog==", + "dev": true, + "license": "MIT", + "dependencies": { + "@emnapi/wasi-threads": "1.0.1", + "tslib": "^2.4.0" + } + }, + "node_modules/@emnapi/runtime": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.3.1.tgz", + "integrity": "sha512-kEBmG8KyqtxJZv+ygbEim+KCGtIq1fC22Ms3S4ziXmYKm8uyoLX0MHONVKwp+9opg390VaKRNt4a7A9NwmpNhw==", + "dev": true, + "license": "MIT", + "dependencies": { + "tslib": "^2.4.0" + } + }, + "node_modules/@emnapi/wasi-threads": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@emnapi/wasi-threads/-/wasi-threads-1.0.1.tgz", + "integrity": "sha512-iIBu7mwkq4UQGeMEM8bLwNK962nXdhodeScX4slfQnRhEMMzvYivHhutCIk8uojvmASXXPC2WNEjwxFWk72Oqw==", + "dev": true, + "license": "MIT", + "dependencies": { + "tslib": "^2.4.0" + } + }, "node_modules/@esbuild/aix-ppc64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.21.5.tgz", - "integrity": "sha512-1SDgH6ZSPTlggy1yI6+Dbkiz8xzpHJEVAlF/AM1tHPLsf5STom9rwtjE4hKAF20FfXXNTFqEYXyJNWh1GiZedQ==", + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.19.12.tgz", + "integrity": "sha512-bmoCYyWdEL3wDQIVbcyzRyeKLgk2WtWLTWz1ZIAZF/EGbNOwSA6ew3PftJ1PqMiOOGu0OyFMzG53L0zqIpPeNA==", "cpu": [ "ppc64" ], @@ -1347,9 +1343,9 @@ } }, "node_modules/@esbuild/android-arm": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.21.5.tgz", - "integrity": "sha512-vCPvzSjpPHEi1siZdlvAlsPxXl7WbOVUBBAowWug4rJHb68Ox8KualB+1ocNvT5fjv6wpkX6o/iEpbDrf68zcg==", + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.19.12.tgz", + "integrity": "sha512-qg/Lj1mu3CdQlDEEiWrlC4eaPZ1KztwGJ9B6J+/6G+/4ewxJg7gqj8eVYWvao1bXrqGiW2rsBZFSX3q2lcW05w==", "cpu": [ "arm" ], @@ -1364,9 +1360,9 @@ } }, "node_modules/@esbuild/android-arm64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.21.5.tgz", - "integrity": "sha512-c0uX9VAUBQ7dTDCjq+wdyGLowMdtR/GoC2U5IYk/7D1H1JYC0qseD7+11iMP2mRLN9RcCMRcjC4YMclCzGwS/A==", + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.19.12.tgz", + "integrity": "sha512-P0UVNGIienjZv3f5zq0DP3Nt2IE/3plFzuaS96vihvD0Hd6H/q4WXUGpCxD/E8YrSXfNyRPbpTq+T8ZQioSuPA==", "cpu": [ "arm64" ], @@ -1381,9 +1377,9 @@ } }, "node_modules/@esbuild/android-x64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.21.5.tgz", - "integrity": "sha512-D7aPRUUNHRBwHxzxRvp856rjUHRFW1SdQATKXH2hqA0kAZb1hKmi02OpYRacl0TxIGz/ZmXWlbZgjwWYaCakTA==", + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.19.12.tgz", + "integrity": "sha512-3k7ZoUW6Q6YqhdhIaq/WZ7HwBpnFBlW905Fa4s4qWJyiNOgT1dOqDiVAQFwBH7gBRZr17gLrlFCRzF6jFh7Kew==", "cpu": [ "x64" ], @@ -1398,7 +1394,9 @@ } }, "node_modules/@esbuild/darwin-arm64": { - "version": "0.19.0", + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.19.12.tgz", + "integrity": "sha512-B6IeSgZgtEzGC42jsI+YYu9Z3HKRxp8ZT3cqhvliEHovq8HSX2YX8lNocDn79gCKJXOSaEot9MVYky7AKjCs8g==", "cpu": [ "arm64" ], @@ -1413,9 +1411,9 @@ } }, "node_modules/@esbuild/darwin-x64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.21.5.tgz", - "integrity": "sha512-se/JjF8NlmKVG4kNIuyWMV/22ZaerB+qaSi5MdrXtd6R08kvs2qCN4C09miupktDitvh8jRFflwGFBQcxZRjbw==", + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.19.12.tgz", + "integrity": "sha512-hKoVkKzFiToTgn+41qGhsUJXFlIjxI/jSYeZf3ugemDYZldIXIxhvwN6erJGlX4t5h417iFuheZ7l+YVn05N3A==", "cpu": [ "x64" ], @@ -1430,9 +1428,9 @@ } }, "node_modules/@esbuild/freebsd-arm64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.21.5.tgz", - "integrity": "sha512-5JcRxxRDUJLX8JXp/wcBCy3pENnCgBR9bN6JsY4OmhfUtIHe3ZW0mawA7+RDAcMLrMIZaf03NlQiX9DGyB8h4g==", + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.19.12.tgz", + "integrity": "sha512-4aRvFIXmwAcDBw9AueDQ2YnGmz5L6obe5kmPT8Vd+/+x/JMVKCgdcRwH6APrbpNXsPz+K653Qg8HB/oXvXVukA==", "cpu": [ "arm64" ], @@ -1447,9 +1445,9 @@ } }, "node_modules/@esbuild/freebsd-x64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.21.5.tgz", - "integrity": "sha512-J95kNBj1zkbMXtHVH29bBriQygMXqoVQOQYA+ISs0/2l3T9/kj42ow2mpqerRBxDJnmkUDCaQT/dfNXWX/ZZCQ==", + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.19.12.tgz", + "integrity": "sha512-EYoXZ4d8xtBoVN7CEwWY2IN4ho76xjYXqSXMNccFSx2lgqOG/1TBPW0yPx1bJZk94qu3tX0fycJeeQsKovA8gg==", "cpu": [ "x64" ], @@ -1464,9 +1462,9 @@ } }, "node_modules/@esbuild/linux-arm": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.21.5.tgz", - "integrity": "sha512-bPb5AHZtbeNGjCKVZ9UGqGwo8EUu4cLq68E95A53KlxAPRmUyYv2D6F0uUI65XisGOL1hBP5mTronbgo+0bFcA==", + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.19.12.tgz", + "integrity": "sha512-J5jPms//KhSNv+LO1S1TX1UWp1ucM6N6XuL6ITdKWElCu8wXP72l9MM0zDTzzeikVyqFE6U8YAV9/tFyj0ti+w==", "cpu": [ "arm" ], @@ -1481,9 +1479,9 @@ } }, "node_modules/@esbuild/linux-arm64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.21.5.tgz", - "integrity": "sha512-ibKvmyYzKsBeX8d8I7MH/TMfWDXBF3db4qM6sy+7re0YXya+K1cem3on9XgdT2EQGMu4hQyZhan7TeQ8XkGp4Q==", + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.19.12.tgz", + "integrity": "sha512-EoTjyYyLuVPfdPLsGVVVC8a0p1BFFvtpQDB/YLEhaXyf/5bczaGeN15QkR+O4S5LeJ92Tqotve7i1jn35qwvdA==", "cpu": [ "arm64" ], @@ -1498,9 +1496,9 @@ } }, "node_modules/@esbuild/linux-ia32": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.21.5.tgz", - "integrity": "sha512-YvjXDqLRqPDl2dvRODYmmhz4rPeVKYvppfGYKSNGdyZkA01046pLWyRKKI3ax8fbJoK5QbxblURkwK/MWY18Tg==", + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.19.12.tgz", + "integrity": "sha512-Thsa42rrP1+UIGaWz47uydHSBOgTUnwBwNq59khgIwktK6x60Hivfbux9iNR0eHCHzOLjLMLfUMLCypBkZXMHA==", "cpu": [ "ia32" ], @@ -1515,9 +1513,9 @@ } }, "node_modules/@esbuild/linux-loong64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.21.5.tgz", - "integrity": "sha512-uHf1BmMG8qEvzdrzAqg2SIG/02+4/DHB6a9Kbya0XDvwDEKCoC8ZRWI5JJvNdUjtciBGFQ5PuBlpEOXQj+JQSg==", + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.19.12.tgz", + "integrity": "sha512-LiXdXA0s3IqRRjm6rV6XaWATScKAXjI4R4LoDlvO7+yQqFdlr1Bax62sRwkVvRIrwXxvtYEHHI4dm50jAXkuAA==", "cpu": [ "loong64" ], @@ -1532,9 +1530,9 @@ } }, "node_modules/@esbuild/linux-mips64el": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.21.5.tgz", - "integrity": "sha512-IajOmO+KJK23bj52dFSNCMsz1QP1DqM6cwLUv3W1QwyxkyIWecfafnI555fvSGqEKwjMXVLokcV5ygHW5b3Jbg==", + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.19.12.tgz", + "integrity": "sha512-fEnAuj5VGTanfJ07ff0gOA6IPsvrVHLVb6Lyd1g2/ed67oU1eFzL0r9WL7ZzscD+/N6i3dWumGE1Un4f7Amf+w==", "cpu": [ "mips64el" ], @@ -1549,9 +1547,9 @@ } }, "node_modules/@esbuild/linux-ppc64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.21.5.tgz", - "integrity": "sha512-1hHV/Z4OEfMwpLO8rp7CvlhBDnjsC3CttJXIhBi+5Aj5r+MBvy4egg7wCbe//hSsT+RvDAG7s81tAvpL2XAE4w==", + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.19.12.tgz", + "integrity": "sha512-nYJA2/QPimDQOh1rKWedNOe3Gfc8PabU7HT3iXWtNUbRzXS9+vgB0Fjaqr//XNbd82mCxHzik2qotuI89cfixg==", "cpu": [ "ppc64" ], @@ -1566,9 +1564,9 @@ } }, "node_modules/@esbuild/linux-riscv64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.21.5.tgz", - "integrity": "sha512-2HdXDMd9GMgTGrPWnJzP2ALSokE/0O5HhTUvWIbD3YdjME8JwvSCnNGBnTThKGEB91OZhzrJ4qIIxk/SBmyDDA==", + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.19.12.tgz", + "integrity": "sha512-2MueBrlPQCw5dVJJpQdUYgeqIzDQgw3QtiAHUC4RBz9FXPrskyyU3VI1hw7C0BSKB9OduwSJ79FTCqtGMWqJHg==", "cpu": [ "riscv64" ], @@ -1583,9 +1581,9 @@ } }, "node_modules/@esbuild/linux-s390x": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.21.5.tgz", - "integrity": "sha512-zus5sxzqBJD3eXxwvjN1yQkRepANgxE9lgOW2qLnmr8ikMTphkjgXu1HR01K4FJg8h1kEEDAqDcZQtbrRnB41A==", + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.19.12.tgz", + "integrity": "sha512-+Pil1Nv3Umes4m3AZKqA2anfhJiVmNCYkPchwFJNEJN5QxmTs1uzyy4TvmDrCRNT2ApwSari7ZIgrPeUx4UZDg==", "cpu": [ "s390x" ], @@ -1600,9 +1598,9 @@ } }, "node_modules/@esbuild/linux-x64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.21.5.tgz", - "integrity": "sha512-1rYdTpyv03iycF1+BhzrzQJCdOuAOtaqHTWJZCWvijKD2N5Xu0TtVC8/+1faWqcP9iBCWOmjmhoH94dH82BxPQ==", + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.19.12.tgz", + "integrity": "sha512-B71g1QpxfwBvNrfyJdVDexenDIt1CiDN1TIXLbhOw0KhJzE78KIFGX6OJ9MrtC0oOqMWf+0xop4qEU8JrJTwCg==", "cpu": [ "x64" ], @@ -1617,9 +1615,9 @@ } }, "node_modules/@esbuild/netbsd-x64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.21.5.tgz", - "integrity": "sha512-Woi2MXzXjMULccIwMnLciyZH4nCIMpWQAs049KEeMvOcNADVxo0UBIQPfSmxB3CWKedngg7sWZdLvLczpe0tLg==", + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.19.12.tgz", + "integrity": "sha512-3ltjQ7n1owJgFbuC61Oj++XhtzmymoCihNFgT84UAmJnxJfm4sYCiSLTXZtE00VWYpPMYc+ZQmB6xbSdVh0JWA==", "cpu": [ "x64" ], @@ -1634,9 +1632,9 @@ } }, "node_modules/@esbuild/openbsd-x64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.21.5.tgz", - "integrity": "sha512-HLNNw99xsvx12lFBUwoT8EVCsSvRNDVxNpjZ7bPn947b8gJPzeHWyNVhFsaerc0n3TsbOINvRP2byTZ5LKezow==", + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.19.12.tgz", + "integrity": "sha512-RbrfTB9SWsr0kWmb9srfF+L933uMDdu9BIzdA7os2t0TXhCRjrQyCeOt6wVxr79CKD4c+p+YhCj31HBkYcXebw==", "cpu": [ "x64" ], @@ -1651,9 +1649,9 @@ } }, "node_modules/@esbuild/sunos-x64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.21.5.tgz", - "integrity": "sha512-6+gjmFpfy0BHU5Tpptkuh8+uw3mnrvgs+dSPQXQOv3ekbordwnzTVEb4qnIvQcYXq6gzkyTnoZ9dZG+D4garKg==", + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.19.12.tgz", + "integrity": "sha512-HKjJwRrW8uWtCQnQOz9qcU3mUZhTUQvi56Q8DPTLLB+DawoiQdjsYq+j+D3s9I8VFtDr+F9CjgXKKC4ss89IeA==", "cpu": [ "x64" ], @@ -1668,9 +1666,9 @@ } }, "node_modules/@esbuild/win32-arm64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.21.5.tgz", - "integrity": "sha512-Z0gOTd75VvXqyq7nsl93zwahcTROgqvuAcYDUr+vOv8uHhNSKROyU961kgtCD1e95IqPKSQKH7tBTslnS3tA8A==", + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.19.12.tgz", + "integrity": "sha512-URgtR1dJnmGvX864pn1B2YUYNzjmXkuJOIqG2HdU62MVS4EHpU2946OZoTMnRUHklGtJdJZ33QfzdjGACXhn1A==", "cpu": [ "arm64" ], @@ -1685,9 +1683,9 @@ } }, "node_modules/@esbuild/win32-ia32": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.21.5.tgz", - "integrity": "sha512-SWXFF1CL2RVNMaVs+BBClwtfZSvDgtL//G/smwAc5oVK/UPu2Gu9tIaRgFmYFFKrmg3SyAjSrElf0TiJ1v8fYA==", + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.19.12.tgz", + "integrity": "sha512-+ZOE6pUkMOJfmxmBZElNOx72NKpIa/HFOMGzu8fqzQJ5kgf6aTGrcJaFsNiVMH4JKpMipyK+7k0n2UXN7a8YKQ==", "cpu": [ "ia32" ], @@ -1702,9 +1700,9 @@ } }, "node_modules/@esbuild/win32-x64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.21.5.tgz", - "integrity": "sha512-tQd/1efJuzPC6rCFwEvLtci/xNFcTZknmXs98FYDfGE4wP9ClFV98nyKrzJKVPMhdDnjzLhdUyMX4PsQAPjwIw==", + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.19.12.tgz", + "integrity": "sha512-T1QyPSDCyMXaO3pzBkF96E8xMkiRYbUEZADd29SyPGabqxMViNoii+NcK7eWJAEoU6RZyEm5lVSIjTmcdoB9HA==", "cpu": [ "x64" ], @@ -1719,21 +1717,28 @@ } }, "node_modules/@eslint-community/eslint-utils": { - "version": "4.4.0", + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.1.tgz", + "integrity": "sha512-s3O3waFUrMV8P/XaF/+ZTp1X9XBZW1a4B97ZnjQF2KYWaFD2A8KyFBsrsfSjEmjn3RGWAIuvlneuZm3CUK3jbA==", "dev": true, "license": "MIT", "dependencies": { - "eslint-visitor-keys": "^3.3.0" + "eslint-visitor-keys": "^3.4.3" }, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" }, + "funding": { + "url": "https://opencollective.com/eslint" + }, "peerDependencies": { "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" } }, "node_modules/@eslint-community/regexpp": { - "version": "4.6.2", + "version": "4.12.1", + "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.12.1.tgz", + "integrity": "sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==", "dev": true, "license": "MIT", "engines": { @@ -1741,7 +1746,9 @@ } }, "node_modules/@eslint/eslintrc": { - "version": "2.1.1", + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.4.tgz", + "integrity": "sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==", "dev": true, "license": "MIT", "dependencies": { @@ -1762,13 +1769,45 @@ "url": "https://opencollective.com/eslint" } }, + "node_modules/@eslint/eslintrc/node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "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" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, "node_modules/@eslint/eslintrc/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/@eslint/eslintrc/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, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, "node_modules/@eslint/eslintrc/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==", "dev": true, "license": "MIT", "dependencies": { @@ -1778,8 +1817,30 @@ "js-yaml": "bin/js-yaml.js" } }, + "node_modules/@eslint/eslintrc/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, + "license": "MIT" + }, + "node_modules/@eslint/eslintrc/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, + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, "node_modules/@eslint/js": { - "version": "8.46.0", + "version": "8.57.1", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.57.1.tgz", + "integrity": "sha512-d9zaMRSTIKDLhctzH12MtXvJKSSUhaHcjV+2Z+GK+EEY7XKpP5yR4x+N3TAcHTcu963nIr+TMcCb4DBCYX1z6Q==", "dev": true, "license": "MIT", "engines": { @@ -1787,20 +1848,49 @@ } }, "node_modules/@humanwhocodes/config-array": { - "version": "0.11.10", + "version": "0.13.0", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.13.0.tgz", + "integrity": "sha512-DZLEEqFWQFiyK6h5YIeynKx7JlvCYWL0cImfSRXZ9l4Sg2efkFGTuFf6vzXjK1cq6IYkU+Eg/JizXw+TD2vRNw==", + "deprecated": "Use @eslint/config-array instead", "dev": true, "license": "Apache-2.0", "dependencies": { - "@humanwhocodes/object-schema": "^1.2.1", - "debug": "^4.1.1", + "@humanwhocodes/object-schema": "^2.0.3", + "debug": "^4.3.1", "minimatch": "^3.0.5" }, "engines": { "node": ">=10.10.0" } }, + "node_modules/@humanwhocodes/config-array/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, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/@humanwhocodes/config-array/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, + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, "node_modules/@humanwhocodes/module-importer": { "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", + "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", "dev": true, "license": "Apache-2.0", "engines": { @@ -1812,12 +1902,17 @@ } }, "node_modules/@humanwhocodes/object-schema": { - "version": "1.2.1", + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.3.tgz", + "integrity": "sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==", + "deprecated": "Use @eslint/object-schema instead", "dev": true, "license": "BSD-3-Clause" }, "node_modules/@hutson/parse-repository-url": { "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@hutson/parse-repository-url/-/parse-repository-url-3.0.2.tgz", + "integrity": "sha512-H9XAx3hc0BQHY6l+IFSWHDySypcXsvsuLhgYLUGywmJ5pswRVQJUHpOsobnLYp2ZUaUlKiKDrgWWhosOwAEM8Q==", "dev": true, "license": "Apache-2.0", "engines": { @@ -1826,6 +1921,8 @@ }, "node_modules/@isaacs/cliui": { "version": "8.0.2", + "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", + "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", "dev": true, "license": "ISC", "dependencies": { @@ -1841,7 +1938,9 @@ } }, "node_modules/@isaacs/cliui/node_modules/ansi-regex": { - "version": "6.0.1", + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz", + "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==", "dev": true, "license": "MIT", "engines": { @@ -1853,6 +1952,8 @@ }, "node_modules/@isaacs/cliui/node_modules/ansi-styles": { "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", + "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", "dev": true, "license": "MIT", "engines": { @@ -1864,11 +1965,15 @@ }, "node_modules/@isaacs/cliui/node_modules/emoji-regex": { "version": "9.2.2", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", "dev": true, "license": "MIT" }, "node_modules/@isaacs/cliui/node_modules/string-width": { "version": "5.1.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", + "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", "dev": true, "license": "MIT", "dependencies": { @@ -1885,6 +1990,8 @@ }, "node_modules/@isaacs/cliui/node_modules/strip-ansi": { "version": "7.1.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", + "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", "dev": true, "license": "MIT", "dependencies": { @@ -1899,6 +2006,8 @@ }, "node_modules/@isaacs/cliui/node_modules/wrap-ansi": { "version": "8.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", + "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", "dev": true, "license": "MIT", "dependencies": { @@ -1915,11 +2024,15 @@ }, "node_modules/@isaacs/string-locale-compare": { "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@isaacs/string-locale-compare/-/string-locale-compare-1.1.0.tgz", + "integrity": "sha512-SQ7Kzhh9+D+ZW9MA0zkYv3VXhIDNx+LzM6EJ+/65I3QY+enU6Itte7E5XX7EWrqLW2FN4n06GWzBnPoC3th2aQ==", "dev": true, "license": "ISC" }, "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": { @@ -1935,6 +2048,8 @@ }, "node_modules/@istanbuljs/load-nyc-config/node_modules/find-up": { "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", "dev": true, "license": "MIT", "dependencies": { @@ -1947,6 +2062,8 @@ }, "node_modules/@istanbuljs/load-nyc-config/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": { @@ -1958,6 +2075,8 @@ }, "node_modules/@istanbuljs/load-nyc-config/node_modules/p-locate": { "version": "4.1.0", + "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": { @@ -1969,6 +2088,8 @@ }, "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==", "dev": true, "license": "MIT", "engines": { @@ -1976,116 +2097,56 @@ } }, "node_modules/@jest/console": { - "version": "29.6.2", + "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.1", + "@jest/types": "^29.6.3", "@types/node": "*", "chalk": "^4.0.0", - "jest-message-util": "^29.6.2", - "jest-util": "^29.6.2", + "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/console/node_modules/ansi-styles": { - "version": "4.3.0", - "dev": true, - "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/@jest/console/node_modules/chalk": { - "version": "4.1.2", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/@jest/console/node_modules/color-convert": { - "version": "2.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/@jest/console/node_modules/color-name": { - "version": "1.1.4", - "dev": true, - "license": "MIT" - }, - "node_modules/@jest/console/node_modules/has-flag": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/@jest/console/node_modules/supports-color": { - "version": "7.2.0", - "dev": true, - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/@jest/core": { - "version": "29.6.2", + "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.6.2", - "@jest/reporters": "^29.6.2", - "@jest/test-result": "^29.6.2", - "@jest/transform": "^29.6.2", - "@jest/types": "^29.6.1", + "@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.5.0", - "jest-config": "^29.6.2", - "jest-haste-map": "^29.6.2", - "jest-message-util": "^29.6.2", - "jest-regex-util": "^29.4.3", - "jest-resolve": "^29.6.2", - "jest-resolve-dependencies": "^29.6.2", - "jest-runner": "^29.6.2", - "jest-runtime": "^29.6.2", - "jest-snapshot": "^29.6.2", - "jest-util": "^29.6.2", - "jest-validate": "^29.6.2", - "jest-watcher": "^29.6.2", + "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.6.2", + "pretty-format": "^29.7.0", "slash": "^3.0.0", "strip-ansi": "^6.0.0" }, @@ -2101,147 +2162,95 @@ } } }, - "node_modules/@jest/core/node_modules/ansi-styles": { - "version": "4.3.0", - "dev": true, - "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/@jest/core/node_modules/chalk": { - "version": "4.1.2", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/@jest/core/node_modules/color-convert": { - "version": "2.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/@jest/core/node_modules/color-name": { - "version": "1.1.4", - "dev": true, - "license": "MIT" - }, - "node_modules/@jest/core/node_modules/has-flag": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/@jest/core/node_modules/supports-color": { - "version": "7.2.0", - "dev": true, - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/@jest/environment": { - "version": "29.6.2", + "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.6.2", - "@jest/types": "^29.6.1", + "@jest/fake-timers": "^29.7.0", + "@jest/types": "^29.6.3", "@types/node": "*", - "jest-mock": "^29.6.2" + "jest-mock": "^29.7.0" }, "engines": { "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, "node_modules/@jest/expect": { - "version": "29.6.2", + "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.6.2", - "jest-snapshot": "^29.6.2" + "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.6.2", + "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.4.3" + "jest-get-type": "^29.6.3" }, "engines": { "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, "node_modules/@jest/fake-timers": { - "version": "29.6.2", + "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.1", + "@jest/types": "^29.6.3", "@sinonjs/fake-timers": "^10.0.2", "@types/node": "*", - "jest-message-util": "^29.6.2", - "jest-mock": "^29.6.2", - "jest-util": "^29.6.2" + "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.6.2", + "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.6.2", - "@jest/expect": "^29.6.2", - "@jest/types": "^29.6.1", - "jest-mock": "^29.6.2" + "@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.6.2", + "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.6.2", - "@jest/test-result": "^29.6.2", - "@jest/transform": "^29.6.2", - "@jest/types": "^29.6.1", + "@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", @@ -2250,13 +2259,13 @@ "glob": "^7.1.3", "graceful-fs": "^4.2.9", "istanbul-lib-coverage": "^3.0.0", - "istanbul-lib-instrument": "^5.1.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.6.2", - "jest-util": "^29.6.2", - "jest-worker": "^29.6.2", + "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", @@ -2274,72 +2283,10 @@ } } }, - "node_modules/@jest/reporters/node_modules/ansi-styles": { - "version": "4.3.0", - "dev": true, - "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/@jest/reporters/node_modules/chalk": { - "version": "4.1.2", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/@jest/reporters/node_modules/color-convert": { - "version": "2.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/@jest/reporters/node_modules/color-name": { - "version": "1.1.4", - "dev": true, - "license": "MIT" - }, - "node_modules/@jest/reporters/node_modules/has-flag": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/@jest/reporters/node_modules/supports-color": { - "version": "7.2.0", - "dev": true, - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/@jest/schemas": { - "version": "29.6.0", + "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": { @@ -2350,7 +2297,9 @@ } }, "node_modules/@jest/source-map": { - "version": "29.6.0", + "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": { @@ -2363,12 +2312,14 @@ } }, "node_modules/@jest/test-result": { - "version": "29.6.2", + "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.6.2", - "@jest/types": "^29.6.1", + "@jest/console": "^29.7.0", + "@jest/types": "^29.6.3", "@types/istanbul-lib-coverage": "^2.0.0", "collect-v8-coverage": "^1.0.0" }, @@ -2377,13 +2328,15 @@ } }, "node_modules/@jest/test-sequencer": { - "version": "29.6.2", + "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.6.2", + "@jest/test-result": "^29.7.0", "graceful-fs": "^4.2.9", - "jest-haste-map": "^29.6.2", + "jest-haste-map": "^29.7.0", "slash": "^3.0.0" }, "engines": { @@ -2391,21 +2344,23 @@ } }, "node_modules/@jest/transform": { - "version": "29.6.2", + "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.1", + "@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.6.2", - "jest-regex-util": "^29.4.3", - "jest-util": "^29.6.2", + "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", @@ -2415,213 +2370,99 @@ "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/@jest/transform/node_modules/ansi-styles": { - "version": "4.3.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": { - "color-convert": "^2.0.1" + "@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": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/@jest/transform/node_modules/chalk": { - "version": "4.1.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==", "dev": true, "license": "MIT", "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" + "@jridgewell/set-array": "^1.2.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.24" }, "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" + "node": ">=6.0.0" } }, - "node_modules/@jest/transform/node_modules/color-convert": { - "version": "2.0.1", + "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", - "dependencies": { - "color-name": "~1.1.4" - }, "engines": { - "node": ">=7.0.0" + "node": ">=6.0.0" } }, - "node_modules/@jest/transform/node_modules/color-name": { - "version": "1.1.4", - "dev": true, - "license": "MIT" - }, - "node_modules/@jest/transform/node_modules/has-flag": { - "version": "4.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": ">=8" + "node": ">=6.0.0" } }, - "node_modules/@jest/transform/node_modules/supports-color": { - "version": "7.2.0", + "node_modules/@jridgewell/source-map": { + "version": "0.3.6", + "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.6.tgz", + "integrity": "sha512-1ZJTZebgqllO79ue2bm3rIGud/bOe0pP5BjSRCRxxYkEZS8STV7zN84UBbiYu7jy+eCKSnVIUgoWWE/tt+shMQ==", "dev": true, "license": "MIT", "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.25" } }, - "node_modules/@jest/types": { - "version": "29.6.1", + "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, - "license": "MIT", - "dependencies": { - "@jest/schemas": "^29.6.0", - "@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" - } + "license": "MIT" }, - "node_modules/@jest/types/node_modules/ansi-styles": { - "version": "4.3.0", + "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==", "dev": true, "license": "MIT", "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" } }, - "node_modules/@jest/types/node_modules/chalk": { - "version": "4.1.2", + "node_modules/@lerna/create": { + "version": "8.1.9", + "resolved": "https://registry.npmjs.org/@lerna/create/-/create-8.1.9.tgz", + "integrity": "sha512-DPnl5lPX4v49eVxEbJnAizrpMdMTBz1qykZrAbBul9rfgk531v8oAt+Pm6O/rpAleRombNM7FJb5rYGzBJatOQ==", "dev": true, "license": "MIT", "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/@jest/types/node_modules/color-convert": { - "version": "2.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/@jest/types/node_modules/color-name": { - "version": "1.1.4", - "dev": true, - "license": "MIT" - }, - "node_modules/@jest/types/node_modules/has-flag": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/@jest/types/node_modules/supports-color": { - "version": "7.2.0", - "dev": true, - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@jridgewell/gen-mapping": { - "version": "0.3.3", - "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" - } - }, - "node_modules/@jridgewell/resolve-uri": { - "version": "3.1.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/set-array": { - "version": "1.1.2", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/source-map": { - "version": "0.3.5", - "dev": true, - "license": "MIT", - "dependencies": { - "@jridgewell/gen-mapping": "^0.3.0", - "@jridgewell/trace-mapping": "^0.3.9" - } - }, - "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, - "license": "MIT" - }, - "node_modules/@jridgewell/trace-mapping": { - "version": "0.3.19", - "dev": true, - "license": "MIT", - "dependencies": { - "@jridgewell/resolve-uri": "^3.1.0", - "@jridgewell/sourcemap-codec": "^1.4.14" - } - }, - "node_modules/@lerna/create": { - "version": "8.1.6", - "dev": true, - "license": "MIT", - "dependencies": { - "@npmcli/arborist": "7.5.3", + "@npmcli/arborist": "7.5.4", "@npmcli/package-json": "5.2.0", "@npmcli/run-script": "8.1.0", - "@nx/devkit": ">=17.1.2 < 20", + "@nx/devkit": ">=17.1.2 < 21", "@octokit/plugin-enterprise-rest": "6.0.1", "@octokit/rest": "19.0.11", "aproba": "2.0.0", @@ -2634,7 +2475,7 @@ "console-control-strings": "^1.1.0", "conventional-changelog-core": "5.0.1", "conventional-recommended-bump": "7.0.1", - "cosmiconfig": "^8.2.0", + "cosmiconfig": "9.0.0", "dedent": "1.5.3", "execa": "5.0.0", "fs-extra": "^11.2.0", @@ -2660,7 +2501,7 @@ "npm-package-arg": "11.0.2", "npm-packlist": "8.0.2", "npm-registry-fetch": "^17.1.0", - "nx": ">=17.1.2 < 20", + "nx": ">=17.1.2 < 21", "p-map": "4.0.0", "p-map-series": "2.1.0", "p-queue": "6.6.2", @@ -2676,6 +2517,7 @@ "slash": "^3.0.0", "ssri": "^10.0.6", "string-width": "^4.2.3", + "strip-ansi": "^6.0.1", "strong-log-transformer": "2.1.0", "tar": "6.2.1", "temp-dir": "1.0.0", @@ -2693,27 +2535,28 @@ "node": ">=18.0.0" } }, - "node_modules/@lerna/create/node_modules/ansi-styles": { - "version": "4.3.0", - "dev": true, - "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, "node_modules/@lerna/create/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/@lerna/create/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, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, "node_modules/@lerna/create/node_modules/chalk": { "version": "4.1.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", + "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", "dev": true, "license": "MIT", "dependencies": { @@ -2727,24 +2570,37 @@ "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/@lerna/create/node_modules/color-convert": { - "version": "2.0.1", + "node_modules/@lerna/create/node_modules/cosmiconfig": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-9.0.0.tgz", + "integrity": "sha512-itvL5h8RETACmOTFc4UfIyB2RfEHi71Ax6E/PivVxq9NseKbOWpeyHEOIbmAw1rs8Ak0VursQNww7lf7YtUwzg==", "dev": true, "license": "MIT", "dependencies": { - "color-name": "~1.1.4" + "env-paths": "^2.2.1", + "import-fresh": "^3.3.0", + "js-yaml": "^4.1.0", + "parse-json": "^5.2.0" }, "engines": { - "node": ">=7.0.0" + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/d-fischer" + }, + "peerDependencies": { + "typescript": ">=4.9.5" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } } }, - "node_modules/@lerna/create/node_modules/color-name": { - "version": "1.1.4", - "dev": true, - "license": "MIT" - }, "node_modules/@lerna/create/node_modules/execa": { "version": "5.0.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-5.0.0.tgz", + "integrity": "sha512-ov6w/2LCiuyO4RLYGdpFGjkcs0wMTgGE8PrkTHikeUy5iJekXyPIKUjifk5CsE0pt7sMCrMZ3YNqoCj6idQOnQ==", "dev": true, "license": "MIT", "dependencies": { @@ -2767,6 +2623,8 @@ }, "node_modules/@lerna/create/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, "license": "MIT", "dependencies": { @@ -2780,6 +2638,8 @@ }, "node_modules/@lerna/create/node_modules/get-stream": { "version": "6.0.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.0.tgz", + "integrity": "sha512-A1B3Bh1UmL0bidM/YX2NsCOTnGJePL9rO/M+Mw3m9f2gUpfokS0hi5Eah0WSUEWZdZhIZtMjkIYS7mDfOqNHbg==", "dev": true, "license": "MIT", "engines": { @@ -2791,6 +2651,8 @@ }, "node_modules/@lerna/create/node_modules/glob": { "version": "9.3.5", + "resolved": "https://registry.npmjs.org/glob/-/glob-9.3.5.tgz", + "integrity": "sha512-e1LleDykUz2Iu+MTYdkSsuWX8lvAjAcs0Xef0lNIu0S2wOAzuTxCJtcd9S3cijlwYF18EsU3rzb8jPVobxDh9Q==", "dev": true, "license": "ISC", "dependencies": { @@ -2808,6 +2670,8 @@ }, "node_modules/@lerna/create/node_modules/glob/node_modules/brace-expansion": { "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", "dev": true, "license": "MIT", "dependencies": { @@ -2816,6 +2680,8 @@ }, "node_modules/@lerna/create/node_modules/glob/node_modules/minimatch": { "version": "8.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-8.0.4.tgz", + "integrity": "sha512-W0Wvr9HyFXZRGIDgCicunpQ299OKXs9RgZfaukz4qAW/pJhcpUfupc9c+OObPOFueNy8VSrZgEmDtk6Kh4WzDA==", "dev": true, "license": "ISC", "dependencies": { @@ -2828,56 +2694,10 @@ "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/@lerna/create/node_modules/has-flag": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/@lerna/create/node_modules/inquirer": { - "version": "8.2.6", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-escapes": "^4.2.1", - "chalk": "^4.1.1", - "cli-cursor": "^3.1.0", - "cli-width": "^3.0.0", - "external-editor": "^3.0.3", - "figures": "^3.0.0", - "lodash": "^4.17.21", - "mute-stream": "0.0.8", - "ora": "^5.4.1", - "run-async": "^2.4.0", - "rxjs": "^7.5.5", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0", - "through": "^2.3.6", - "wrap-ansi": "^6.0.1" - }, - "engines": { - "node": ">=12.0.0" - } - }, - "node_modules/@lerna/create/node_modules/inquirer/node_modules/chalk": { - "version": "4.1.2", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, "node_modules/@lerna/create/node_modules/is-stream": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.0.tgz", + "integrity": "sha512-XCoy+WlUr7d1+Z8GgSuXmpuUFC9fOhRXglJMx+dwLKTkL44Cjd4W1Z5P+BQZpr+cR93aGP4S/s7Ftw6Nd/kiEw==", "dev": true, "license": "MIT", "engines": { @@ -2886,6 +2706,8 @@ }, "node_modules/@lerna/create/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==", "dev": true, "license": "MIT", "dependencies": { @@ -2897,6 +2719,8 @@ }, "node_modules/@lerna/create/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, "license": "MIT", "dependencies": { @@ -2908,6 +2732,8 @@ }, "node_modules/@lerna/create/node_modules/minimatch": { "version": "3.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.5.tgz", + "integrity": "sha512-tUpxzX0VAzJHjLu0xUfFv1gwVp9ba3IOuRAVH2EGuRW8a5emA2FlACLqiT/lDVtS1W+TGNwqz3sWaNyLgDJWuw==", "dev": true, "license": "ISC", "dependencies": { @@ -2919,6 +2745,8 @@ }, "node_modules/@lerna/create/node_modules/minipass": { "version": "4.2.8", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-4.2.8.tgz", + "integrity": "sha512-fNzuVyifolSLFL4NzpF+wEF4qrgqaaKX0haXPQEdQ7NKAN+WecoKMHV09YcuL/DHxrUsYQOK3MiuDf7Ip2OXfQ==", "dev": true, "license": "ISC", "engines": { @@ -2927,6 +2755,8 @@ }, "node_modules/@lerna/create/node_modules/node-fetch": { "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": { @@ -2946,6 +2776,8 @@ }, "node_modules/@lerna/create/node_modules/rimraf": { "version": "4.4.1", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-4.4.1.tgz", + "integrity": "sha512-Gk8NlF062+T9CqNGn6h4tls3k6T1+/nXdOcSZVikNVtlRdYpA7wRJJMoXmuvOnLW844rPjdQ7JgXCYM6PPC/og==", "dev": true, "license": "ISC", "dependencies": { @@ -2961,60 +2793,20 @@ "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/@lerna/create/node_modules/rxjs": { - "version": "7.8.1", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "tslib": "^2.1.0" - } - }, - "node_modules/@lerna/create/node_modules/supports-color": { - "version": "7.2.0", - "dev": true, - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/@lerna/create/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, "license": "MIT", "engines": { "node": ">= 10.0.0" } }, - "node_modules/@lerna/create/node_modules/uuid": { - "version": "10.0.0", - "dev": true, - "funding": [ - "https://github.com/sponsors/broofa", - "https://github.com/sponsors/ctavan" - ], - "license": "MIT", - "bin": { - "uuid": "dist/bin/uuid" - } - }, - "node_modules/@lerna/create/node_modules/wrap-ansi": { - "version": "6.2.0", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/@lerna/create/node_modules/write-file-atomic": { "version": "5.0.1", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-5.0.1.tgz", + "integrity": "sha512-+QU2zd6OTD8XWIJCbffaiQeH9U73qIqafo1x6V1snCWYGJf6cVE0cDR4D8xRzcEnfI21IFrUPzPGtcPf8AC+Rw==", "dev": true, "license": "ISC", "dependencies": { @@ -3027,6 +2819,8 @@ }, "node_modules/@lerna/create/node_modules/write-file-atomic/node_modules/signal-exit": { "version": "4.1.0", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", "dev": true, "license": "ISC", "engines": { @@ -3036,16 +2830,10 @@ "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/@lerna/create/node_modules/yargs-parser": { - "version": "21.1.1", - "dev": true, - "license": "ISC", - "engines": { - "node": ">=12" - } - }, "node_modules/@manypkg/find-root": { "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@manypkg/find-root/-/find-root-1.1.0.tgz", + "integrity": "sha512-mki5uBvhHzO8kYYix/WRy2WX8S3B5wdVSc9D6KcU5lQNglP2yt58/VfLuAK49glRXChosY8ap2oJ1qgma3GUVA==", "dev": true, "license": "MIT", "dependencies": { @@ -3057,11 +2845,15 @@ }, "node_modules/@manypkg/find-root/node_modules/@types/node": { "version": "12.20.55", + "resolved": "https://registry.npmjs.org/@types/node/-/node-12.20.55.tgz", + "integrity": "sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ==", "dev": true, "license": "MIT" }, "node_modules/@manypkg/find-root/node_modules/find-up": { "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", "dev": true, "license": "MIT", "dependencies": { @@ -3074,6 +2866,8 @@ }, "node_modules/@manypkg/find-root/node_modules/fs-extra": { "version": "8.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", + "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", "dev": true, "license": "MIT", "dependencies": { @@ -3087,6 +2881,8 @@ }, "node_modules/@manypkg/find-root/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": { @@ -3098,6 +2894,8 @@ }, "node_modules/@manypkg/find-root/node_modules/p-locate": { "version": "4.1.0", + "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": { @@ -3109,6 +2907,8 @@ }, "node_modules/@manypkg/get-packages": { "version": "1.1.3", + "resolved": "https://registry.npmjs.org/@manypkg/get-packages/-/get-packages-1.1.3.tgz", + "integrity": "sha512-fo+QhuU3qE/2TQMQmbVMqaQ6EWbMhi4ABWP+O4AM1NqPBuy0OrApV5LO6BrrgnhtAHS2NH6RrVk9OL181tTi8A==", "dev": true, "license": "MIT", "dependencies": { @@ -3122,11 +2922,15 @@ }, "node_modules/@manypkg/get-packages/node_modules/@changesets/types": { "version": "4.1.0", + "resolved": "https://registry.npmjs.org/@changesets/types/-/types-4.1.0.tgz", + "integrity": "sha512-LDQvVDv5Kb50ny2s25Fhm3d9QSZimsoUGBsUioj6MC3qbMUCuC8GPIvk/M6IvXx3lYhAs0lwWUQLb+VIEUCECw==", "dev": true, "license": "MIT" }, "node_modules/@manypkg/get-packages/node_modules/fs-extra": { "version": "8.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", + "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", "dev": true, "license": "MIT", "dependencies": { @@ -3138,6 +2942,18 @@ "node": ">=6 <7 || >=8" } }, + "node_modules/@napi-rs/wasm-runtime": { + "version": "0.2.4", + "resolved": "https://registry.npmjs.org/@napi-rs/wasm-runtime/-/wasm-runtime-0.2.4.tgz", + "integrity": "sha512-9zESzOO5aDByvhIAsOy9TbpZ0Ur2AJbUI7UT73kcUTS2mxAMHOBaa1st/jAymNoCtvrit99kkzT1FZuXVcgfIQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@emnapi/core": "^1.1.0", + "@emnapi/runtime": "^1.1.0", + "@tybys/wasm-util": "^0.9.0" + } + }, "node_modules/@noble/curves": { "version": "1.6.0", "resolved": "https://registry.npmjs.org/@noble/curves/-/curves-1.6.0.tgz", @@ -3167,6 +2983,8 @@ }, "node_modules/@noble/hashes": { "version": "1.1.5", + "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.1.5.tgz", + "integrity": "sha512-LTMZiiLc+V4v1Yi16TD6aX2gmtKszNye0pQgbaLqkvhIqP7nVsSaJsWloGQjJfJ8offaoP5GtX3yY5swbcJxxQ==", "funding": [ { "type": "individual", @@ -3177,6 +2995,8 @@ }, "node_modules/@noble/secp256k1": { "version": "1.7.1", + "resolved": "https://registry.npmjs.org/@noble/secp256k1/-/secp256k1-1.7.1.tgz", + "integrity": "sha512-hOUk6AyBFmqVrv7k5WAw/LpszxVbj9gGN4JRkIX52fdFAj1UA61KXmZDvqVEm+pOyec3+fIeZB02LYa/pWOArw==", "funding": [ { "type": "individual", @@ -3187,6 +3007,8 @@ }, "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": { @@ -3199,6 +3021,8 @@ }, "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, "license": "MIT", "engines": { @@ -3207,6 +3031,8 @@ }, "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": { @@ -3217,8 +3043,20 @@ "node": ">= 8" } }, + "node_modules/@nolyfill/is-core-module": { + "version": "1.0.39", + "resolved": "https://registry.npmjs.org/@nolyfill/is-core-module/-/is-core-module-1.0.39.tgz", + "integrity": "sha512-nn5ozdjYQpUCZlWGuxcJY/KpxkWQs4DcbMCmKojjyrYDEAGy4Ce19NN4v5MduafTwJlbKc99UA8YhSVqq9yPZA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12.4.0" + } + }, "node_modules/@npmcli/agent": { "version": "2.2.2", + "resolved": "https://registry.npmjs.org/@npmcli/agent/-/agent-2.2.2.tgz", + "integrity": "sha512-OrcNPXdpSl9UX7qPVRWbmWMCSXrcDa2M9DvrbOTj7ao1S4PlqVFYv9/yLKMkrJKZ/V5A/kDBC690or307i26Og==", "dev": true, "license": "ISC", "dependencies": { @@ -3232,41 +3070,19 @@ "node": "^16.14.0 || >=18.0.0" } }, - "node_modules/@npmcli/agent/node_modules/agent-base": { - "version": "7.1.1", + "node_modules/@npmcli/agent/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, - "license": "MIT", - "dependencies": { - "debug": "^4.3.4" - }, - "engines": { - "node": ">= 14" - } + "license": "ISC" }, - "node_modules/@npmcli/agent/node_modules/https-proxy-agent": { - "version": "7.0.5", + "node_modules/@npmcli/arborist": { + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/@npmcli/arborist/-/arborist-7.5.4.tgz", + "integrity": "sha512-nWtIc6QwwoUORCRNzKx4ypHqCk3drI+5aeYdMTQQiRCcn4lOOgfQh7WyZobGYTxXPSq1VwV53lkpN/BRlRk08g==", "dev": true, - "license": "MIT", - "dependencies": { - "agent-base": "^7.0.2", - "debug": "4" - }, - "engines": { - "node": ">= 14" - } - }, - "node_modules/@npmcli/agent/node_modules/lru-cache": { - "version": "10.4.0", - "dev": true, - "license": "ISC", - "engines": { - "node": ">=18" - } - }, - "node_modules/@npmcli/arborist": { - "version": "7.5.3", - "dev": true, - "license": "ISC", + "license": "ISC", "dependencies": { "@isaacs/string-locale-compare": "^1.1.0", "@npmcli/fs": "^3.1.1", @@ -3311,43 +3127,17 @@ "node": "^16.14.0 || >=18.0.0" } }, - "node_modules/@npmcli/arborist/node_modules/brace-expansion": { - "version": "2.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0" - } - }, - "node_modules/@npmcli/arborist/node_modules/hosted-git-info": { - "version": "7.0.2", - "dev": true, - "license": "ISC", - "dependencies": { - "lru-cache": "^10.0.1" - }, - "engines": { - "node": "^16.14.0 || >=18.0.0" - } - }, - "node_modules/@npmcli/arborist/node_modules/json-parse-even-better-errors": { - "version": "3.0.2", - "dev": true, - "license": "MIT", - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, "node_modules/@npmcli/arborist/node_modules/lru-cache": { - "version": "10.4.0", + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", "dev": true, - "license": "ISC", - "engines": { - "node": ">=18" - } + "license": "ISC" }, "node_modules/@npmcli/arborist/node_modules/minimatch": { "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", "dev": true, "license": "ISC", "dependencies": { @@ -3362,6 +3152,8 @@ }, "node_modules/@npmcli/fs": { "version": "3.1.1", + "resolved": "https://registry.npmjs.org/@npmcli/fs/-/fs-3.1.1.tgz", + "integrity": "sha512-q9CRWjpHCMIh5sVyefoD1cA7PkvILqCZsnSOEUUivORLjxCO/Irmue2DprETiNgEqktDBZaM1Bi+jrarx1XdCg==", "dev": true, "license": "ISC", "dependencies": { @@ -3372,11 +3164,14 @@ } }, "node_modules/@npmcli/git": { - "version": "5.0.7", + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/@npmcli/git/-/git-5.0.8.tgz", + "integrity": "sha512-liASfw5cqhjNW9UFd+ruwwdEf/lbOAQjLL2XY2dFW/bkJheXDYZgOyul/4gVvEV4BWkTXjYGmDqMw9uegdbJNQ==", "dev": true, "license": "ISC", "dependencies": { "@npmcli/promise-spawn": "^7.0.0", + "ini": "^4.1.3", "lru-cache": "^10.0.1", "npm-pick-manifest": "^9.0.0", "proc-log": "^4.0.0", @@ -3389,8 +3184,20 @@ "node": "^16.14.0 || >=18.0.0" } }, + "node_modules/@npmcli/git/node_modules/ini": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/ini/-/ini-4.1.3.tgz", + "integrity": "sha512-X7rqawQBvfdjS10YU1y1YVreA3SsLrW9dX2CewP2EbBJM4ypVNLDkO5y04gejPwKIY9lR+7r9gn3rFPt/kmWFg==", + "dev": true, + "license": "ISC", + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, "node_modules/@npmcli/git/node_modules/isexe": { "version": "3.1.1", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-3.1.1.tgz", + "integrity": "sha512-LpB/54B+/2J5hqQ7imZHfdU31OlgQqx7ZicVlkm9kzg9/w8GKLEcFfJl/t7DCEDueOyBAD6zCCwTO6Fzs0NoEQ==", "dev": true, "license": "ISC", "engines": { @@ -3398,15 +3205,16 @@ } }, "node_modules/@npmcli/git/node_modules/lru-cache": { - "version": "10.4.0", + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", "dev": true, - "license": "ISC", - "engines": { - "node": ">=18" - } + "license": "ISC" }, "node_modules/@npmcli/git/node_modules/which": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/which/-/which-4.0.0.tgz", + "integrity": "sha512-GlaYyEb07DPxYCKhKzplCWBJtvxZcZMrL+4UkrTSJHHPyZU4mYYTv3qaOe77H7EODLSSopAUFAc6W8U4yqvscg==", "dev": true, "license": "ISC", "dependencies": { @@ -3421,6 +3229,8 @@ }, "node_modules/@npmcli/installed-package-contents": { "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@npmcli/installed-package-contents/-/installed-package-contents-2.1.0.tgz", + "integrity": "sha512-c8UuGLeZpm69BryRykLuKRyKFZYJsZSCT4aVY5ds4omyZqJ172ApzgfKJ5eV/r3HgLdUYgFVe54KSFVjKoe27w==", "dev": true, "license": "ISC", "dependencies": { @@ -3434,27 +3244,10 @@ "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, - "node_modules/@npmcli/installed-package-contents/node_modules/npm-bundled": { - "version": "3.0.1", - "dev": true, - "license": "ISC", - "dependencies": { - "npm-normalize-package-bin": "^3.0.0" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/@npmcli/installed-package-contents/node_modules/npm-normalize-package-bin": { - "version": "3.0.1", - "dev": true, - "license": "ISC", - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, "node_modules/@npmcli/map-workspaces": { "version": "3.0.6", + "resolved": "https://registry.npmjs.org/@npmcli/map-workspaces/-/map-workspaces-3.0.6.tgz", + "integrity": "sha512-tkYs0OYnzQm6iIRdfy+LcLBjcKuQCeE5YLb8KnrIlutJfheNaPvPpgoFEyEFgbjzl5PLZ3IA/BWAwRU0eHuQDA==", "dev": true, "license": "ISC", "dependencies": { @@ -3467,16 +3260,10 @@ "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, - "node_modules/@npmcli/map-workspaces/node_modules/brace-expansion": { - "version": "2.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0" - } - }, "node_modules/@npmcli/map-workspaces/node_modules/glob": { - "version": "10.4.3", + "version": "10.4.5", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz", + "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==", "dev": true, "license": "ISC", "dependencies": { @@ -3490,32 +3277,14 @@ "bin": { "glob": "dist/esm/bin.mjs" }, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/@npmcli/map-workspaces/node_modules/jackspeak": { - "version": "3.4.1", - "dev": true, - "license": "BlueOak-1.0.0", - "dependencies": { - "@isaacs/cliui": "^8.0.2" - }, - "engines": { - "node": ">=18" - }, "funding": { "url": "https://github.com/sponsors/isaacs" - }, - "optionalDependencies": { - "@pkgjs/parseargs": "^0.11.0" } }, "node_modules/@npmcli/map-workspaces/node_modules/minimatch": { "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", "dev": true, "license": "ISC", "dependencies": { @@ -3528,16 +3297,10 @@ "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/@npmcli/map-workspaces/node_modules/minipass": { - "version": "7.1.2", - "dev": true, - "license": "ISC", - "engines": { - "node": ">=16 || 14 >=14.17" - } - }, "node_modules/@npmcli/metavuln-calculator": { "version": "7.1.1", + "resolved": "https://registry.npmjs.org/@npmcli/metavuln-calculator/-/metavuln-calculator-7.1.1.tgz", + "integrity": "sha512-Nkxf96V0lAx3HCpVda7Vw4P23RILgdi/5K1fmj2tZkWIYLpXAN8k2UVVOsW16TsS5F8Ws2I7Cm+PU1/rsVF47g==", "dev": true, "license": "ISC", "dependencies": { @@ -3551,16 +3314,10 @@ "node": "^16.14.0 || >=18.0.0" } }, - "node_modules/@npmcli/metavuln-calculator/node_modules/json-parse-even-better-errors": { - "version": "3.0.2", - "dev": true, - "license": "MIT", - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, "node_modules/@npmcli/name-from-folder": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@npmcli/name-from-folder/-/name-from-folder-2.0.0.tgz", + "integrity": "sha512-pwK+BfEBZJbKdNYpHHRTNBwBoqrN/iIMO0AiGvYsp3Hoaq0WbgGSWQR6SCldZovoDpY3yje5lkFUe6gsDgJ2vg==", "dev": true, "license": "ISC", "engines": { @@ -3569,6 +3326,8 @@ }, "node_modules/@npmcli/node-gyp": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@npmcli/node-gyp/-/node-gyp-3.0.0.tgz", + "integrity": "sha512-gp8pRXC2oOxu0DUE1/M3bYtb1b3/DbJ5aM113+XJBgfXdussRAsX0YOrOhdd8WvnAR6auDBvJomGAkLKA5ydxA==", "dev": true, "license": "ISC", "engines": { @@ -3577,6 +3336,8 @@ }, "node_modules/@npmcli/package-json": { "version": "5.2.0", + "resolved": "https://registry.npmjs.org/@npmcli/package-json/-/package-json-5.2.0.tgz", + "integrity": "sha512-qe/kiqqkW0AGtvBjL8TJKZk/eBBSpnJkUWvHdQ9jM2lKHXRYYJuyNpJPlJw3c8QjC2ow6NZYiLExhUaeJelbxQ==", "dev": true, "license": "ISC", "dependencies": { @@ -3592,16 +3353,10 @@ "node": "^16.14.0 || >=18.0.0" } }, - "node_modules/@npmcli/package-json/node_modules/brace-expansion": { - "version": "2.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0" - } - }, "node_modules/@npmcli/package-json/node_modules/glob": { - "version": "10.4.3", + "version": "10.4.5", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz", + "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==", "dev": true, "license": "ISC", "dependencies": { @@ -3615,59 +3370,14 @@ "bin": { "glob": "dist/esm/bin.mjs" }, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/@npmcli/package-json/node_modules/hosted-git-info": { - "version": "7.0.2", - "dev": true, - "license": "ISC", - "dependencies": { - "lru-cache": "^10.0.1" - }, - "engines": { - "node": "^16.14.0 || >=18.0.0" - } - }, - "node_modules/@npmcli/package-json/node_modules/jackspeak": { - "version": "3.4.1", - "dev": true, - "license": "BlueOak-1.0.0", - "dependencies": { - "@isaacs/cliui": "^8.0.2" - }, - "engines": { - "node": ">=18" - }, "funding": { "url": "https://github.com/sponsors/isaacs" - }, - "optionalDependencies": { - "@pkgjs/parseargs": "^0.11.0" - } - }, - "node_modules/@npmcli/package-json/node_modules/json-parse-even-better-errors": { - "version": "3.0.2", - "dev": true, - "license": "MIT", - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/@npmcli/package-json/node_modules/lru-cache": { - "version": "10.4.0", - "dev": true, - "license": "ISC", - "engines": { - "node": ">=18" } }, "node_modules/@npmcli/package-json/node_modules/minimatch": { "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", "dev": true, "license": "ISC", "dependencies": { @@ -3680,29 +3390,10 @@ "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/@npmcli/package-json/node_modules/minipass": { - "version": "7.1.2", - "dev": true, - "license": "ISC", - "engines": { - "node": ">=16 || 14 >=14.17" - } - }, - "node_modules/@npmcli/package-json/node_modules/normalize-package-data": { - "version": "6.0.2", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "hosted-git-info": "^7.0.0", - "semver": "^7.3.5", - "validate-npm-package-license": "^3.0.4" - }, - "engines": { - "node": "^16.14.0 || >=18.0.0" - } - }, "node_modules/@npmcli/promise-spawn": { "version": "7.0.2", + "resolved": "https://registry.npmjs.org/@npmcli/promise-spawn/-/promise-spawn-7.0.2.tgz", + "integrity": "sha512-xhfYPXoV5Dy4UkY0D+v2KkwvnDfiA/8Mt3sWCGI/hM03NsYIH8ZaG6QzS9x7pje5vHZBZJ2v6VRFVTWACnqcmQ==", "dev": true, "license": "ISC", "dependencies": { @@ -3714,6 +3405,8 @@ }, "node_modules/@npmcli/promise-spawn/node_modules/isexe": { "version": "3.1.1", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-3.1.1.tgz", + "integrity": "sha512-LpB/54B+/2J5hqQ7imZHfdU31OlgQqx7ZicVlkm9kzg9/w8GKLEcFfJl/t7DCEDueOyBAD6zCCwTO6Fzs0NoEQ==", "dev": true, "license": "ISC", "engines": { @@ -3722,6 +3415,8 @@ }, "node_modules/@npmcli/promise-spawn/node_modules/which": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/which/-/which-4.0.0.tgz", + "integrity": "sha512-GlaYyEb07DPxYCKhKzplCWBJtvxZcZMrL+4UkrTSJHHPyZU4mYYTv3qaOe77H7EODLSSopAUFAc6W8U4yqvscg==", "dev": true, "license": "ISC", "dependencies": { @@ -3736,6 +3431,8 @@ }, "node_modules/@npmcli/query": { "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@npmcli/query/-/query-3.1.0.tgz", + "integrity": "sha512-C/iR0tk7KSKGldibYIB9x8GtO/0Bd0I2mhOaDb8ucQL/bQVTmGoeREaFj64Z5+iCBRf3dQfed0CjJL7I8iTkiQ==", "dev": true, "license": "ISC", "dependencies": { @@ -3747,6 +3444,8 @@ }, "node_modules/@npmcli/redact": { "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@npmcli/redact/-/redact-2.0.1.tgz", + "integrity": "sha512-YgsR5jCQZhVmTJvjduTOIHph0L73pK8xwMVaDY0PatySqVM9AZj93jpoXYSJqfHFxFkN9dmqTw6OiqExsS3LPw==", "dev": true, "license": "ISC", "engines": { @@ -3755,6 +3454,8 @@ }, "node_modules/@npmcli/run-script": { "version": "8.1.0", + "resolved": "https://registry.npmjs.org/@npmcli/run-script/-/run-script-8.1.0.tgz", + "integrity": "sha512-y7efHHwghQfk28G2z3tlZ67pLG0XdfYbcVG26r7YIXALRsrVQcTq4/tdenSmdOrEsNahIYA/eh8aEVROWGFUDg==", "dev": true, "license": "ISC", "dependencies": { @@ -3771,6 +3472,8 @@ }, "node_modules/@npmcli/run-script/node_modules/isexe": { "version": "3.1.1", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-3.1.1.tgz", + "integrity": "sha512-LpB/54B+/2J5hqQ7imZHfdU31OlgQqx7ZicVlkm9kzg9/w8GKLEcFfJl/t7DCEDueOyBAD6zCCwTO6Fzs0NoEQ==", "dev": true, "license": "ISC", "engines": { @@ -3779,6 +3482,8 @@ }, "node_modules/@npmcli/run-script/node_modules/which": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/which/-/which-4.0.0.tgz", + "integrity": "sha512-GlaYyEb07DPxYCKhKzplCWBJtvxZcZMrL+4UkrTSJHHPyZU4mYYTv3qaOe77H7EODLSSopAUFAc6W8U4yqvscg==", "dev": true, "license": "ISC", "dependencies": { @@ -3791,32 +3496,13 @@ "node": "^16.13.0 || >=18.0.0" } }, - "node_modules/@nrwl/devkit": { - "version": "19.4.1", - "dev": true, - "license": "MIT", - "dependencies": { - "@nx/devkit": "19.4.1" - } - }, - "node_modules/@nrwl/tao": { - "version": "19.4.1", - "dev": true, - "license": "MIT", - "dependencies": { - "nx": "19.4.1", - "tslib": "^2.3.0" - }, - "bin": { - "tao": "index.js" - } - }, "node_modules/@nx/devkit": { - "version": "19.4.1", + "version": "20.1.2", + "resolved": "https://registry.npmjs.org/@nx/devkit/-/devkit-20.1.2.tgz", + "integrity": "sha512-MTEWiEST7DhzZ2QmrixLnHfYVDZk7QN9omLL8m+5Etcn/3ZKa1aAo9Amd2MkUM+0MPoTKnxoGdw0fQUpAy21Mg==", "dev": true, "license": "MIT", "dependencies": { - "@nrwl/devkit": "19.4.1", "ejs": "^3.1.7", "enquirer": "~2.3.6", "ignore": "^5.0.4", @@ -3827,19 +3513,13 @@ "yargs-parser": "21.1.1" }, "peerDependencies": { - "nx": ">= 17 <= 20" - } - }, - "node_modules/@nx/devkit/node_modules/brace-expansion": { - "version": "2.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0" + "nx": ">= 19 <= 21" } }, "node_modules/@nx/devkit/node_modules/enquirer": { "version": "2.3.6", + "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.3.6.tgz", + "integrity": "sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==", "dev": true, "license": "MIT", "dependencies": { @@ -3849,38 +3529,20 @@ "node": ">=8.6" } }, - "node_modules/@nx/devkit/node_modules/minimatch": { - "version": "9.0.3", - "dev": true, - "license": "ISC", - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, "node_modules/@nx/devkit/node_modules/tmp": { "version": "0.2.3", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.3.tgz", + "integrity": "sha512-nZD7m9iCPC5g0pYmcaxogYKggSfLsdxl8of3Q/oIbqCqLLIO9IAF0GWjX1z9NZRHPiXv8Wex4yDCaZsgEw0Y8w==", "dev": true, "license": "MIT", "engines": { "node": ">=14.14" } }, - "node_modules/@nx/devkit/node_modules/yargs-parser": { - "version": "21.1.1", - "dev": true, - "license": "ISC", - "engines": { - "node": ">=12" - } - }, "node_modules/@nx/nx-darwin-arm64": { - "version": "19.4.1", + "version": "20.1.2", + "resolved": "https://registry.npmjs.org/@nx/nx-darwin-arm64/-/nx-darwin-arm64-20.1.2.tgz", + "integrity": "sha512-PJ91TQhd28kitDBubKUOXMYvrtSDrG+rr8MsIe9cHo1CvU9smcGVBwuHBxniq0DXsyOX/5GL6ngq7hjN2nQ3XQ==", "cpu": [ "arm64" ], @@ -3894,46 +3556,207 @@ "node": ">= 10" } }, - "node_modules/@octokit/auth-token": { - "version": "3.0.4", + "node_modules/@nx/nx-darwin-x64": { + "version": "20.1.2", + "resolved": "https://registry.npmjs.org/@nx/nx-darwin-x64/-/nx-darwin-x64-20.1.2.tgz", + "integrity": "sha512-1fopau7nxIhTF26vDTIzMxl15AtW4FvUSdy+r1mNRKrKyjjpqnlu00SQBW7JzGV0agDD1B/61yYei5Q2aMOt7Q==", + "cpu": [ + "x64" + ], "dev": true, "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], "engines": { - "node": ">= 14" + "node": ">= 10" } }, - "node_modules/@octokit/core": { - "version": "4.2.4", + "node_modules/@nx/nx-freebsd-x64": { + "version": "20.1.2", + "resolved": "https://registry.npmjs.org/@nx/nx-freebsd-x64/-/nx-freebsd-x64-20.1.2.tgz", + "integrity": "sha512-55YgIp3v4zz7xMzJO93dtglbOTER2XdS6jrCt8GbKaWGFl5drRrBoNGONtiGNU7C3hLx1VsorbynCkJT18PjKQ==", + "cpu": [ + "x64" + ], "dev": true, "license": "MIT", - "dependencies": { - "@octokit/auth-token": "^3.0.0", - "@octokit/graphql": "^5.0.0", - "@octokit/request": "^6.0.0", - "@octokit/request-error": "^3.0.0", - "@octokit/types": "^9.0.0", - "before-after-hook": "^2.2.0", - "universal-user-agent": "^6.0.0" - }, + "optional": true, + "os": [ + "freebsd" + ], "engines": { - "node": ">= 14" + "node": ">= 10" } }, - "node_modules/@octokit/endpoint": { - "version": "7.0.6", + "node_modules/@nx/nx-linux-arm-gnueabihf": { + "version": "20.1.2", + "resolved": "https://registry.npmjs.org/@nx/nx-linux-arm-gnueabihf/-/nx-linux-arm-gnueabihf-20.1.2.tgz", + "integrity": "sha512-sMhNA8uAV43UYVEXEa8TZ8Fjpom4CGq1umTptEGOF4TTtdNn2AUBreg+0bVODM8MMSzRWGI1VbkZzHESnAPwqw==", + "cpu": [ + "arm" + ], "dev": true, "license": "MIT", - "dependencies": { - "@octokit/types": "^9.0.0", - "is-plain-object": "^5.0.0", - "universal-user-agent": "^6.0.0" - }, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@nx/nx-linux-arm64-gnu": { + "version": "20.1.2", + "resolved": "https://registry.npmjs.org/@nx/nx-linux-arm64-gnu/-/nx-linux-arm64-gnu-20.1.2.tgz", + "integrity": "sha512-bsevarNHglaYLmIvPNQOdHrBnBgaW3EOUM0flwaXdWuZbL1bWx8GoVwHp9yJpZOAOfIF/Nhq5iTpaZB2nYFrAA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@nx/nx-linux-arm64-musl": { + "version": "20.1.2", + "resolved": "https://registry.npmjs.org/@nx/nx-linux-arm64-musl/-/nx-linux-arm64-musl-20.1.2.tgz", + "integrity": "sha512-GFZTptkhZPL/iZ3tYDmspIcPEaXyy/L/o59gyp33GoFAAyDhiXIF7J1Lz81Xn8VKrX6TvEY8/9qSh86pb7qzDQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@nx/nx-linux-x64-gnu": { + "version": "20.1.2", + "resolved": "https://registry.npmjs.org/@nx/nx-linux-x64-gnu/-/nx-linux-x64-gnu-20.1.2.tgz", + "integrity": "sha512-yqEW/iglKT4d9lgfnwSNhmDzPxCkRhtdmZqOYpGDM0eZFwYwJF+WRGjW8xIqMj8PA1yrGItzXZOmyFjJqHAF2w==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@nx/nx-linux-x64-musl": { + "version": "20.1.2", + "resolved": "https://registry.npmjs.org/@nx/nx-linux-x64-musl/-/nx-linux-x64-musl-20.1.2.tgz", + "integrity": "sha512-SP6PpWT4cQVrC4WJQdpfADrYJQzkbhgmcGleWbpr7II1HJgOsAcvoDwQGpPQX+3Wo+VBiNecvUAOzacMQkXPGw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@nx/nx-win32-arm64-msvc": { + "version": "20.1.2", + "resolved": "https://registry.npmjs.org/@nx/nx-win32-arm64-msvc/-/nx-win32-arm64-msvc-20.1.2.tgz", + "integrity": "sha512-JZQx9gr39LY3D7uleiXlpxUsavuOrOQNBocwKHkAMnykaT/e1VCxTnm/hk+2b4foWwfURTqoRiFEba70iiCdYg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@nx/nx-win32-x64-msvc": { + "version": "20.1.2", + "resolved": "https://registry.npmjs.org/@nx/nx-win32-x64-msvc/-/nx-win32-x64-msvc-20.1.2.tgz", + "integrity": "sha512-6GmT8iswDiCvJaCtW9DpWeAQmLS/kfAuRLYBisfzlONuLPaDdjhgVIxZBqqUSFfclwcVz+NhIOGvdr0aGFZCtQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@octokit/auth-token": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@octokit/auth-token/-/auth-token-3.0.4.tgz", + "integrity": "sha512-TWFX7cZF2LXoCvdmJWY7XVPi74aSY0+FfBZNSXEXFkMpjcqsQwDSYVv5FhRFaI0V1ECnwbz4j59T/G+rXNWaIQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 14" + } + }, + "node_modules/@octokit/core": { + "version": "4.2.4", + "resolved": "https://registry.npmjs.org/@octokit/core/-/core-4.2.4.tgz", + "integrity": "sha512-rYKilwgzQ7/imScn3M9/pFfUf4I1AZEH3KhyJmtPdE2zfaXAn2mFfUy4FbKewzc2We5y/LlKLj36fWJLKC2SIQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@octokit/auth-token": "^3.0.0", + "@octokit/graphql": "^5.0.0", + "@octokit/request": "^6.0.0", + "@octokit/request-error": "^3.0.0", + "@octokit/types": "^9.0.0", + "before-after-hook": "^2.2.0", + "universal-user-agent": "^6.0.0" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/@octokit/endpoint": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/@octokit/endpoint/-/endpoint-7.0.6.tgz", + "integrity": "sha512-5L4fseVRUsDFGR00tMWD/Trdeeihn999rTMGRMC1G/Ldi1uWlWJzI98H4Iak5DB/RVvQuyMYKqSK/R6mbSOQyg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@octokit/types": "^9.0.0", + "is-plain-object": "^5.0.0", + "universal-user-agent": "^6.0.0" + }, "engines": { "node": ">= 14" } }, "node_modules/@octokit/graphql": { "version": "5.0.6", + "resolved": "https://registry.npmjs.org/@octokit/graphql/-/graphql-5.0.6.tgz", + "integrity": "sha512-Fxyxdy/JH0MnIB5h+UQ3yCoh1FG4kWXfFKkpWqjZHw/p+Kc8Y44Hu/kCgNBT6nU1shNumEchmW/sUO1JuQnPcw==", "dev": true, "license": "MIT", "dependencies": { @@ -3947,16 +3770,22 @@ }, "node_modules/@octokit/openapi-types": { "version": "18.1.1", + "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-18.1.1.tgz", + "integrity": "sha512-VRaeH8nCDtF5aXWnjPuEMIYf1itK/s3JYyJcWFJT8X9pSNnBtriDf7wlEWsGuhPLl4QIH4xM8fqTXDwJ3Mu6sw==", "dev": true, "license": "MIT" }, "node_modules/@octokit/plugin-enterprise-rest": { "version": "6.0.1", + "resolved": "https://registry.npmjs.org/@octokit/plugin-enterprise-rest/-/plugin-enterprise-rest-6.0.1.tgz", + "integrity": "sha512-93uGjlhUD+iNg1iWhUENAtJata6w5nE+V4urXOAlIXdco6xNZtUSfYY8dzp3Udy74aqO/B5UZL80x/YMa5PKRw==", "dev": true, "license": "MIT" }, "node_modules/@octokit/plugin-paginate-rest": { "version": "6.1.2", + "resolved": "https://registry.npmjs.org/@octokit/plugin-paginate-rest/-/plugin-paginate-rest-6.1.2.tgz", + "integrity": "sha512-qhrmtQeHU/IivxucOV1bbI/xZyC/iOBhclokv7Sut5vnejAIAEXVcGQeRpQlU39E0WwK9lNvJHphHri/DB6lbQ==", "dev": true, "license": "MIT", "dependencies": { @@ -3972,6 +3801,8 @@ }, "node_modules/@octokit/plugin-request-log": { "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@octokit/plugin-request-log/-/plugin-request-log-1.0.4.tgz", + "integrity": "sha512-mLUsMkgP7K/cnFEw07kWqXGF5LKrOkD+lhCrKvPHXWDywAwuDUeDwWBpc69XK3pNX0uKiVt8g5z96PJ6z9xCFA==", "dev": true, "license": "MIT", "peerDependencies": { @@ -3980,6 +3811,8 @@ }, "node_modules/@octokit/plugin-rest-endpoint-methods": { "version": "7.2.3", + "resolved": "https://registry.npmjs.org/@octokit/plugin-rest-endpoint-methods/-/plugin-rest-endpoint-methods-7.2.3.tgz", + "integrity": "sha512-I5Gml6kTAkzVlN7KCtjOM+Ruwe/rQppp0QU372K1GP7kNOYEKe8Xn5BW4sE62JAHdwpq95OQK/qGNyKQMUzVgA==", "dev": true, "license": "MIT", "dependencies": { @@ -3994,6 +3827,8 @@ }, "node_modules/@octokit/plugin-rest-endpoint-methods/node_modules/@octokit/types": { "version": "10.0.0", + "resolved": "https://registry.npmjs.org/@octokit/types/-/types-10.0.0.tgz", + "integrity": "sha512-Vm8IddVmhCgU1fxC1eyinpwqzXPEYu0NrYzD3YZjlGjyftdLBTeqNblRC0jmJmgxbJIsQlyogVeGnrNaaMVzIg==", "dev": true, "license": "MIT", "dependencies": { @@ -4002,6 +3837,8 @@ }, "node_modules/@octokit/request": { "version": "6.2.8", + "resolved": "https://registry.npmjs.org/@octokit/request/-/request-6.2.8.tgz", + "integrity": "sha512-ow4+pkVQ+6XVVsekSYBzJC0VTVvh/FCTUUgTsboGq+DTeWdyIFV8WSCdo0RIxk6wSkBTHqIK1mYuY7nOBXOchw==", "dev": true, "license": "MIT", "dependencies": { @@ -4018,6 +3855,8 @@ }, "node_modules/@octokit/request-error": { "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@octokit/request-error/-/request-error-3.0.3.tgz", + "integrity": "sha512-crqw3V5Iy2uOU5Np+8M/YexTlT8zxCfI+qu+LxUB7SZpje4Qmx3mub5DfEKSO8Ylyk0aogi6TYdf6kxzh2BguQ==", "dev": true, "license": "MIT", "dependencies": { @@ -4031,6 +3870,8 @@ }, "node_modules/@octokit/rest": { "version": "19.0.11", + "resolved": "https://registry.npmjs.org/@octokit/rest/-/rest-19.0.11.tgz", + "integrity": "sha512-m2a9VhaP5/tUw8FwfnW2ICXlXpLPIqxtg3XcAiGMLj/Xhw3RSBfZ8le/466ktO1Gcjr8oXudGnHhxV1TXJgFxw==", "dev": true, "license": "MIT", "dependencies": { @@ -4045,11 +3886,15 @@ }, "node_modules/@octokit/tsconfig": { "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@octokit/tsconfig/-/tsconfig-1.0.2.tgz", + "integrity": "sha512-I0vDR0rdtP8p2lGMzvsJzbhdOWy405HcGovrspJ8RRibHnyRgggUSNO5AIox5LmqiwmatHKYsvj6VGFHkqS7lA==", "dev": true, "license": "MIT" }, "node_modules/@octokit/types": { "version": "9.3.2", + "resolved": "https://registry.npmjs.org/@octokit/types/-/types-9.3.2.tgz", + "integrity": "sha512-D4iHGTdAnEEVsB8fl95m1hiz7D5YiRdQ9b/OEb3BYRVwbLsGHcRVPz+u+BgRLNk0Q0/4iZCBqDN96j2XNxfXrA==", "dev": true, "license": "MIT", "dependencies": { @@ -4057,17 +3902,21 @@ } }, "node_modules/@peculiar/asn1-schema": { - "version": "2.3.6", + "version": "2.3.13", + "resolved": "https://registry.npmjs.org/@peculiar/asn1-schema/-/asn1-schema-2.3.13.tgz", + "integrity": "sha512-3Xq3a01WkHRZL8X04Zsfg//mGaA21xlL4tlVn4v2xGT0JStiztATRkMwa5b+f/HXmY2smsiLXYK46Gwgzvfg3g==", "dev": true, "license": "MIT", "dependencies": { "asn1js": "^3.0.5", - "pvtsutils": "^1.3.2", - "tslib": "^2.4.0" + "pvtsutils": "^1.3.5", + "tslib": "^2.6.2" } }, "node_modules/@peculiar/json-schema": { "version": "1.1.12", + "resolved": "https://registry.npmjs.org/@peculiar/json-schema/-/json-schema-1.1.12.tgz", + "integrity": "sha512-coUfuoMeIB7B8/NMekxaDzLhaYmp0HZNPEjYRm9goRou8UZIC3z21s0sL9AWoCw4EG876QyO3kYrc61WNF9B/w==", "dev": true, "license": "MIT", "dependencies": { @@ -4078,15 +3927,17 @@ } }, "node_modules/@peculiar/webcrypto": { - "version": "1.4.3", + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@peculiar/webcrypto/-/webcrypto-1.5.0.tgz", + "integrity": "sha512-BRs5XUAwiyCDQMsVA9IDvDa7UBR9gAvPHgugOeGng3YN6vJ9JYonyDc0lNczErgtCWtucjR5N7VtaonboD/ezg==", "dev": true, "license": "MIT", "dependencies": { - "@peculiar/asn1-schema": "^2.3.6", + "@peculiar/asn1-schema": "^2.3.8", "@peculiar/json-schema": "^1.1.12", - "pvtsutils": "^1.3.2", - "tslib": "^2.5.0", - "webcrypto-core": "^1.7.7" + "pvtsutils": "^1.3.5", + "tslib": "^2.6.2", + "webcrypto-core": "^1.8.0" }, "engines": { "node": ">=10.12.0" @@ -4094,6 +3945,8 @@ }, "node_modules/@pkgjs/parseargs": { "version": "0.11.0", + "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", + "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", "dev": true, "license": "MIT", "optional": true, @@ -4101,18 +3954,12 @@ "node": ">=14" } }, - "node_modules/@pkgr/utils": { - "version": "2.4.2", + "node_modules/@pkgr/core": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/@pkgr/core/-/core-0.1.1.tgz", + "integrity": "sha512-cq8o4cWH0ibXh9VGi5P20Tu9XF/0fFXl9EUinr9QfTM7a7p0oTA4iJRCQWppXR1Pg8dSM0UCItCkPwsk9qWWYA==", "dev": true, "license": "MIT", - "dependencies": { - "cross-spawn": "^7.0.3", - "fast-glob": "^3.3.0", - "is-glob": "^4.0.3", - "open": "^9.1.0", - "picocolors": "^1.0.0", - "tslib": "^2.6.0" - }, "engines": { "node": "^12.20.0 || ^14.18.0 || >=16.0.0" }, @@ -4120,36 +3967,10 @@ "url": "https://opencollective.com/unts" } }, - "node_modules/@pkgr/utils/node_modules/define-lazy-prop": { - "version": "3.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@pkgr/utils/node_modules/open": { - "version": "9.1.0", - "dev": true, - "license": "MIT", - "dependencies": { - "default-browser": "^4.0.0", - "define-lazy-prop": "^3.0.0", - "is-inside-container": "^1.0.0", - "is-wsl": "^2.2.0" - }, - "engines": { - "node": ">=14.16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/@polka/url": { - "version": "1.0.0-next.21", + "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==", "dev": true, "license": "MIT" }, @@ -4405,18 +4226,26 @@ "win32" ] }, - "node_modules/@scure/base": { - "version": "1.1.1", - "funding": [ - { - "type": "individual", - "url": "https://paulmillr.com/funding/" - } - ], + "node_modules/@rtsao/scc": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@rtsao/scc/-/scc-1.1.0.tgz", + "integrity": "sha512-zt6OdqaDoOnJ1ZYsCYGt9YmWzDXl4vQdKTyJev62gFhRGKdx7mcT54V9KIjg+d2wi9EXsPvAPKe7i7WjfVWB8g==", + "dev": true, "license": "MIT" }, + "node_modules/@scure/base": { + "version": "1.1.9", + "resolved": "https://registry.npmjs.org/@scure/base/-/base-1.1.9.tgz", + "integrity": "sha512-8YKhl8GHiNI/pU2VMaofa2Tor7PJRAjwQLBBuilkJ9L5+13yVbC7JO/wS7piioAvPSwR3JKM1IJ/u4xQzbcXKg==", + "license": "MIT", + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, "node_modules/@scure/bip32": { "version": "1.1.3", + "resolved": "https://registry.npmjs.org/@scure/bip32/-/bip32-1.1.3.tgz", + "integrity": "sha512-dSH3+LCWONlSNQuF34xZrG6Xas7tp2jSSqHb/pMfXWM0vKE4JZOtK3uJfoWouUVW5IGlls75HkXmYLldZ8ySgQ==", "funding": [ { "type": "individual", @@ -4432,6 +4261,8 @@ }, "node_modules/@scure/bip39": { "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@scure/bip39/-/bip39-1.1.0.tgz", + "integrity": "sha512-pwrPOS16VeTKg98dYXQyIjJEcWfz7/1YJIwxUEPFfQPtc86Ym/1sVgQ2RLoD43AazMk2l/unK4ITySSpW2+82w==", "funding": [ { "type": "individual", @@ -4471,29 +4302,10 @@ "url": "https://paulmillr.com/funding/" } }, - "node_modules/@scure/btc-signer/node_modules/@scure/base": { - "version": "1.1.9", - "resolved": "https://registry.npmjs.org/@scure/base/-/base-1.1.9.tgz", - "integrity": "sha512-8YKhl8GHiNI/pU2VMaofa2Tor7PJRAjwQLBBuilkJ9L5+13yVbC7JO/wS7piioAvPSwR3JKM1IJ/u4xQzbcXKg==", - "license": "MIT", - "funding": { - "url": "https://paulmillr.com/funding/" - } - }, - "node_modules/@scure/btc-signer/node_modules/micro-packed": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/micro-packed/-/micro-packed-0.6.3.tgz", - "integrity": "sha512-VmVkyc7lIzAq/XCPFuLc/CwQ7Ehs5XDK3IwqsZHiBIDttAI9Gs7go6Lv4lNRuAIKrGKcRTtthFKUNyHS0S4wJQ==", - "license": "MIT", - "dependencies": { - "@scure/base": "~1.1.5" - }, - "funding": { - "url": "https://paulmillr.com/funding/" - } - }, "node_modules/@sigstore/bundle": { "version": "2.3.2", + "resolved": "https://registry.npmjs.org/@sigstore/bundle/-/bundle-2.3.2.tgz", + "integrity": "sha512-wueKWDk70QixNLB363yHc2D2ItTgYiMTdPwK8D9dKQMR3ZQ0c35IxP5xnwQ8cNLoCgCRcHf14kE+CLIvNX1zmA==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -4505,6 +4317,8 @@ }, "node_modules/@sigstore/core": { "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@sigstore/core/-/core-1.1.0.tgz", + "integrity": "sha512-JzBqdVIyqm2FRQCulY6nbQzMpJJpSiJ8XXWMhtOX9eKgaXXpfNOF53lzQEjIydlStnd/eFtuC1dW4VYdD93oRg==", "dev": true, "license": "Apache-2.0", "engines": { @@ -4513,6 +4327,8 @@ }, "node_modules/@sigstore/protobuf-specs": { "version": "0.3.2", + "resolved": "https://registry.npmjs.org/@sigstore/protobuf-specs/-/protobuf-specs-0.3.2.tgz", + "integrity": "sha512-c6B0ehIWxMI8wiS/bj6rHMPqeFvngFV7cDU/MY+B16P9Z3Mp9k8L93eYZ7BYzSickzuqAQqAq0V956b3Ju6mLw==", "dev": true, "license": "Apache-2.0", "engines": { @@ -4521,6 +4337,8 @@ }, "node_modules/@sigstore/sign": { "version": "2.3.2", + "resolved": "https://registry.npmjs.org/@sigstore/sign/-/sign-2.3.2.tgz", + "integrity": "sha512-5Vz5dPVuunIIvC5vBb0APwo7qKA4G9yM48kPWJT+OEERs40md5GoUR1yedwpekWZ4m0Hhw44m6zU+ObsON+iDA==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -4537,6 +4355,8 @@ }, "node_modules/@sigstore/tuf": { "version": "2.3.4", + "resolved": "https://registry.npmjs.org/@sigstore/tuf/-/tuf-2.3.4.tgz", + "integrity": "sha512-44vtsveTPUpqhm9NCrbU8CWLe3Vck2HO1PNLw7RIajbB7xhtn5RBPm1VNSCMwqGYHhDsBJG8gDF0q4lgydsJvw==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -4549,6 +4369,8 @@ }, "node_modules/@sigstore/verify": { "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@sigstore/verify/-/verify-1.2.1.tgz", + "integrity": "sha512-8iKx79/F73DKbGfRf7+t4dqrc0bRr0thdPrxAtCKWRm/F0tG71i6O1rvlnScncJLLBZHn3h8M3c1BSUAb9yu8g==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -4562,11 +4384,15 @@ }, "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, "license": "MIT" }, "node_modules/@sinonjs/commons": { - "version": "3.0.0", + "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": { @@ -4575,6 +4401,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": { @@ -4582,7 +4410,9 @@ } }, "node_modules/@socket.io/component-emitter": { - "version": "3.1.0", + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@socket.io/component-emitter/-/component-emitter-3.1.2.tgz", + "integrity": "sha512-9BCxFwvbGg/RsZK9tjXd8s4UcwR0MWeFQ1XEKIQVVvAGJyINdrqKMcTRyLoK8Rse1GjzLV9cwjWV1olXRWEXVA==", "license": "MIT" }, "node_modules/@stacks/api": { @@ -4595,6 +4425,8 @@ }, "node_modules/@stacks/blockchain-api-client": { "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@stacks/blockchain-api-client/-/blockchain-api-client-4.0.1.tgz", + "integrity": "sha512-RK8Nffx9ny+XV1dZBnC1tpJyAIKuPrw14NTTkQpMwLsY/nqXh1bQ0OKztMsqT2jMRFvb8I1me9I6pcSbu7LE2A==", "license": "GPL-3.0", "dependencies": { "@stacks/stacks-blockchain-api-types": "*", @@ -4624,6 +4456,8 @@ }, "node_modules/@stacks/eslint-config": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@stacks/eslint-config/-/eslint-config-2.0.0.tgz", + "integrity": "sha512-GrRiJE7nadre+wCGAkaxCmHGD8tEYOtVW/cjjMdh/H37yl3vGj/lX723MfiXj/YcQDJ1qs/8V9Rx9b4VsFp10Q==", "dev": true, "license": "MIT", "dependencies": { @@ -4654,6 +4488,8 @@ }, "node_modules/@stacks/prettier-config": { "version": "0.0.10", + "resolved": "https://registry.npmjs.org/@stacks/prettier-config/-/prettier-config-0.0.10.tgz", + "integrity": "sha512-MrYWGEgO/mYR8TOZIKknQEHbFQZ5VyAD/s8eF2Yxr6Lgalt2alVEh+6ODehVP2uepkyXPmJzLbaQYs8/L4E78Q==", "dev": true, "license": "MIT", "dependencies": { @@ -4662,6 +4498,8 @@ }, "node_modules/@stacks/prettier-config/node_modules/prettier": { "version": "2.5.1", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.5.1.tgz", + "integrity": "sha512-vBZcPRUR5MZJwoyi3ZoyQlc1rXeEck8KgeC9AwwOn+exuxLxq5toTRDTSaVrXHxelDMHy9zlicw8u66yxoSUFg==", "dev": true, "license": "MIT", "bin": { @@ -4680,7 +4518,9 @@ "link": true }, "node_modules/@stacks/stacks-blockchain-api-types": { - "version": "7.3.0", + "version": "7.14.1", + "resolved": "https://registry.npmjs.org/@stacks/stacks-blockchain-api-types/-/stacks-blockchain-api-types-7.14.1.tgz", + "integrity": "sha512-65hvhXxC+EUqHJAQsqlBCqXB+zwfxZICSKYJugdg6BCp9I9qniyfz5XyQeC4RMVo0tgEoRdS/b5ZCFo5kLWmxA==", "license": "ISC" }, "node_modules/@stacks/storage": { @@ -4695,28 +4535,48 @@ "resolved": "packages/wallet-sdk", "link": true }, + "node_modules/@tootallnate/once": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-1.1.2.tgz", + "integrity": "sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 6" + } + }, "node_modules/@tsconfig/node10": { - "version": "1.0.9", + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.11.tgz", + "integrity": "sha512-DcRjDCujK/kCk/cUe8Xz8ZSpm8mS3mNNpta+jGCA6USEDfktlNvm1+IuZ9eTcDbNk41BHwpHHeW+N1lKCz4zOw==", "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, "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, "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, "license": "MIT" }, "node_modules/@tufjs/canonical-json": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@tufjs/canonical-json/-/canonical-json-2.0.0.tgz", + "integrity": "sha512-yVtV8zsdo8qFHe+/3kw81dSLyF7D576A5cCFCi4X7B39tWT7SekaEFUnvnWJHz+9qO7qJTah1JbrDjWKqFtdWA==", "dev": true, "license": "MIT", "engines": { @@ -4725,6 +4585,8 @@ }, "node_modules/@tufjs/models": { "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@tufjs/models/-/models-2.0.1.tgz", + "integrity": "sha512-92F7/SFyufn4DXsha9+QfKnN03JGqtMFMXgSHbZOo8JG59WkTni7UzAouNQDf7AuP9OAMxVOPQcqG3sB7w+kkg==", "dev": true, "license": "MIT", "dependencies": { @@ -4735,16 +4597,10 @@ "node": "^16.14.0 || >=18.0.0" } }, - "node_modules/@tufjs/models/node_modules/brace-expansion": { - "version": "2.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0" - } - }, "node_modules/@tufjs/models/node_modules/minimatch": { "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", "dev": true, "license": "ISC", "dependencies": { @@ -4757,8 +4613,20 @@ "url": "https://github.com/sponsors/isaacs" } }, + "node_modules/@tybys/wasm-util": { + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/@tybys/wasm-util/-/wasm-util-0.9.0.tgz", + "integrity": "sha512-6+7nlbMVX/PVDCwaIQ8nTOPveOcFLSt8GcXdx8hD0bt39uWxYT88uXzqTd4fTvqta7oeUJqudepapKNt2DYJFw==", + "dev": true, + "license": "MIT", + "dependencies": { + "tslib": "^2.4.0" + } + }, "node_modules/@types/babel__core": { - "version": "7.20.1", + "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": { @@ -4770,7 +4638,9 @@ } }, "node_modules/@types/babel__generator": { - "version": "7.6.4", + "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==", "dev": true, "license": "MIT", "dependencies": { @@ -4778,7 +4648,9 @@ } }, "node_modules/@types/babel__template": { - "version": "7.4.1", + "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": { @@ -4787,7 +4659,9 @@ } }, "node_modules/@types/babel__traverse": { - "version": "7.20.1", + "version": "7.20.6", + "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": { @@ -4795,14 +4669,18 @@ } }, "node_modules/@types/bn.js": { - "version": "5.1.1", + "version": "4.11.6", + "resolved": "https://registry.npmjs.org/@types/bn.js/-/bn.js-4.11.6.tgz", + "integrity": "sha512-pqr857jrp2kPuO9uRjZ3PwnJTjoQy+fcdxvBTvHm6dkmEL9q+hDD/2j/0ELOBPtPnS8LjCX0gI9nbl8lVkadpg==", "license": "MIT", "dependencies": { "@types/node": "*" } }, "node_modules/@types/body-parser": { - "version": "1.19.2", + "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": { @@ -4811,37 +4689,26 @@ } }, "node_modules/@types/bs58check": { - "version": "2.1.0", + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/@types/bs58check/-/bs58check-2.1.2.tgz", + "integrity": "sha512-xpXaQlOIY1KoXlA/ytHGHpEIU87PJt+g9SH7nC6HdCgaBwT2IEZIwBMHbjuX6BpnfbiUMlmwqurdLDwXpcdmSA==", "dev": true, "license": "MIT", "dependencies": { "@types/node": "*" } }, - "node_modules/@types/chai": { - "version": "4.3.20", - "resolved": "https://registry.npmjs.org/@types/chai/-/chai-4.3.20.tgz", - "integrity": "sha512-/pC9HAB5I/xMlc5FP77qjCnI16ChlJfW0tGa0IUcFn38VJrTV6DeZ60NU5KZBtaOZqjdpwTWohz5HU1RrhiYxQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/chai-subset": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/@types/chai-subset/-/chai-subset-1.3.5.tgz", - "integrity": "sha512-c2mPnw+xHtXDoHmdtcCXGwyLMiauiAyxWMzhGpqHC4nqI/Y5G2XhTampslK2rb59kpcuHon03UH8W6iYUzw88A==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/chai": "*" - } - }, "node_modules/@types/common-tags": { - "version": "1.8.1", + "version": "1.8.4", + "resolved": "https://registry.npmjs.org/@types/common-tags/-/common-tags-1.8.4.tgz", + "integrity": "sha512-S+1hLDJPjWNDhcGxsxEbepzaxWqURP/o+3cP4aa2w7yBXgdcmKGQtZzP8JbyfOd0m+33nh+8+kvxYE2UJtBDkg==", "dev": true, "license": "MIT" }, "node_modules/@types/connect": { - "version": "3.4.35", + "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": { @@ -4849,7 +4716,9 @@ } }, "node_modules/@types/cors": { - "version": "2.8.13", + "version": "2.8.17", + "resolved": "https://registry.npmjs.org/@types/cors/-/cors-2.8.17.tgz", + "integrity": "sha512-8CGDvrBj1zgo2qE+oS3pOCyYNqCPryMWY2bGfwA0dcfopWGgxs+78df0Rs3rc9THP4JkOhLsAa+15VdpAqkcUA==", "dev": true, "license": "MIT", "dependencies": { @@ -4857,14 +4726,18 @@ } }, "node_modules/@types/elliptic": { - "version": "6.4.14", + "version": "6.4.18", + "resolved": "https://registry.npmjs.org/@types/elliptic/-/elliptic-6.4.18.tgz", + "integrity": "sha512-UseG6H5vjRiNpQvrhy4VF/JXdA3V/Fp5amvveaL+fs28BZ6xIKJBPnUPRlEaZpysD9MbpfaLi8lbl7PGUAkpWw==", "license": "MIT", "dependencies": { "@types/bn.js": "*" } }, "node_modules/@types/eslint": { - "version": "8.44.2", + "version": "9.6.1", + "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-9.6.1.tgz", + "integrity": "sha512-FXx2pKgId/WyYo2jXw63kk7/+TY7u7AziEJxJAnSFzHlqTAS3Ync6SvgYAN/k4/PQpnnVuzoMuVnByKK2qp0ag==", "dev": true, "license": "MIT", "dependencies": { @@ -4873,7 +4746,9 @@ } }, "node_modules/@types/eslint-scope": { - "version": "3.7.4", + "version": "3.7.7", + "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.7.tgz", + "integrity": "sha512-MzMFlSLBqNF2gcHWO0G1vP/YQyfvrxZ0bF+u7mzUdZ1/xK4A4sru+nraZz5i3iEIk1l1uyicaDVTB4QbbEkAYg==", "dev": true, "license": "MIT", "dependencies": { @@ -4889,7 +4764,9 @@ "license": "MIT" }, "node_modules/@types/express": { - "version": "4.17.17", + "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": { @@ -4900,7 +4777,9 @@ } }, "node_modules/@types/express-serve-static-core": { - "version": "4.17.35", + "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": { @@ -4912,6 +4791,8 @@ }, "node_modules/@types/express-winston": { "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@types/express-winston/-/express-winston-3.0.4.tgz", + "integrity": "sha512-fCvI4nTs/oYhq7jACnPurepOPMKz//bNuCwMIRCcESix9jEuky93H5KwkyKeEPGNZfQzR3zCUbeGWs6/jvV7Fg==", "dev": true, "license": "MIT", "dependencies": { @@ -4921,7 +4802,9 @@ } }, "node_modules/@types/graceful-fs": { - "version": "4.1.6", + "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": { @@ -4929,12 +4812,16 @@ } }, "node_modules/@types/http-errors": { - "version": "2.0.1", + "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/inquirer": { "version": "6.5.0", + "resolved": "https://registry.npmjs.org/@types/inquirer/-/inquirer-6.5.0.tgz", + "integrity": "sha512-rjaYQ9b9y/VFGOpqBEXRavc3jh0a+e6evAbI31tMda8VlPaSy0AZJfXsvmIe3wklc7W6C3zCSfleuMXR7NOyXw==", "dev": true, "license": "MIT", "dependencies": { @@ -4942,21 +4829,17 @@ "rxjs": "^6.4.0" } }, - "node_modules/@types/is-ci": { - "version": "3.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "ci-info": "^3.1.0" - } - }, "node_modules/@types/istanbul-lib-coverage": { - "version": "2.0.4", + "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", + "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": { @@ -4964,7 +4847,9 @@ } }, "node_modules/@types/istanbul-reports": { - "version": "3.0.1", + "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": { @@ -4972,7 +4857,9 @@ } }, "node_modules/@types/jest": { - "version": "29.5.3", + "version": "29.5.14", + "resolved": "https://registry.npmjs.org/@types/jest/-/jest-29.5.14.tgz", + "integrity": "sha512-ZN+4sdnLUbo8EVvVc2ao0GFW6oVrQRPn4K2lglySj7APvSrgzxHiNNK99us4WDMi57xxA2yggblIAMNhXOotLQ==", "dev": true, "license": "MIT", "dependencies": { @@ -4982,6 +4869,8 @@ }, "node_modules/@types/jsdom": { "version": "16.2.15", + "resolved": "https://registry.npmjs.org/@types/jsdom/-/jsdom-16.2.15.tgz", + "integrity": "sha512-nwF87yjBKuX/roqGYerZZM0Nv1pZDMAT5YhOHYeM/72Fic+VEqJh4nyoqoapzJnW3pUlfxPY5FhgsJtM+dRnQQ==", "dev": true, "license": "MIT", "dependencies": { @@ -4991,22 +4880,30 @@ } }, "node_modules/@types/json-schema": { - "version": "7.0.12", + "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/json5": { "version": "0.0.29", + "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz", + "integrity": "sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==", "dev": true, "license": "MIT" }, "node_modules/@types/lodash": { - "version": "4.14.197", + "version": "4.17.13", + "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.17.13.tgz", + "integrity": "sha512-lfx+dftrEZcdBPczf9d0Qv0x+j/rfNCMuC6OcfXmO8gkfeNAY88PgKUbvG56whcN23gc27yenwF6oJZXGFpYxg==", "dev": true, "license": "MIT" }, "node_modules/@types/lodash.clonedeep": { - "version": "4.5.7", + "version": "4.5.9", + "resolved": "https://registry.npmjs.org/@types/lodash.clonedeep/-/lodash.clonedeep-4.5.9.tgz", + "integrity": "sha512-19429mWC+FyaAhOLzsS8kZUsI+/GmBAQ0HFiCPsKGU+7pBXOQWhyrY6xNNDwUSX8SMZMJvuFVMF9O5dQOlQK9Q==", "dev": true, "license": "MIT", "dependencies": { @@ -5015,6 +4912,9 @@ }, "node_modules/@types/logform": { "version": "1.10.1", + "resolved": "https://registry.npmjs.org/@types/logform/-/logform-1.10.1.tgz", + "integrity": "sha512-7PFeU3gNsaG80dNWIl9FafSCnc4oYRXlyJ4yM38i0hMuqJaIMGSARS16QKTKfN4nZmNkA2Yy1z3h1WkJxgGbmA==", + "deprecated": "This is a stub types definition. logform provides its own type definitions, so you do not need this installed.", "dev": true, "license": "MIT", "dependencies": { @@ -5022,55 +4922,75 @@ } }, "node_modules/@types/mime": { - "version": "1.3.2", + "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/minimatch": { "version": "3.0.5", + "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.5.tgz", + "integrity": "sha512-Klz949h02Gz2uZCMGwDUSDS1YBlTdDDgbWHi+81l29tQALUtvz4rAYi5uoVhE5Lagoq6DeqAUlbrHvW/mXDgdQ==", "dev": true, "license": "MIT" }, "node_modules/@types/minimist": { - "version": "1.2.2", + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/@types/minimist/-/minimist-1.2.5.tgz", + "integrity": "sha512-hov8bUuiLiyFPGyFPE1lwWhmzYbirOXQNNo40+y3zow8aFVTeyn3VWL0VFFfdNddA8S4Vf0Tc062rzyNr7Paag==", "dev": true, "license": "MIT" }, "node_modules/@types/node": { - "version": "20.4.7", + "version": "20.5.1", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.5.1.tgz", + "integrity": "sha512-4tT2UrL5LBqDwoed9wZ6N3umC4Yhz3W3FloMmiiG4JwmUJWpie0c7lcnUNd4gtMKuDEO4wRVS8B6Xa0uMRsMKg==", "license": "MIT" }, "node_modules/@types/node-fetch": { - "version": "2.6.4", + "version": "2.6.12", + "resolved": "https://registry.npmjs.org/@types/node-fetch/-/node-fetch-2.6.12.tgz", + "integrity": "sha512-8nneRWKCg3rMtF69nLQJnOYUcbafYeFSjqkw3jCRLsqkWFlHaoQrr5mXmofFGOx3DKn7UfmBMyov8ySvLRVldA==", "dev": true, "license": "MIT", "dependencies": { "@types/node": "*", - "form-data": "^3.0.0" + "form-data": "^4.0.0" } }, "node_modules/@types/normalize-package-data": { - "version": "2.4.1", + "version": "2.4.4", + "resolved": "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.4.tgz", + "integrity": "sha512-37i+OaWTh9qeK4LSHPsyRC7NahnGotNuZvjLSgcPzblpHB3rrCJxAOgI5gCdKm7coonsaX1Of0ILiTcnZjbfxA==", "dev": true, "license": "MIT" }, "node_modules/@types/parse5": { "version": "6.0.3", + "resolved": "https://registry.npmjs.org/@types/parse5/-/parse5-6.0.3.tgz", + "integrity": "sha512-SuT16Q1K51EAVPz1K29DJ/sXjhSQ0zjvsypYJ6tlwVsRV9jwW5Adq2ch8Dq8kDBCkYnELS7N7VNCSB5nC56t/g==", "dev": true, "license": "MIT" }, "node_modules/@types/qs": { - "version": "6.9.7", + "version": "6.9.17", + "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.17.tgz", + "integrity": "sha512-rX4/bPcfmvxHDv0XjfJELTTr+iB+tn032nPILqHm5wbthUUUuVtNGGqzhya9XUxjTP8Fpr0qYgSZZKxGY++svQ==", "dev": true, "license": "MIT" }, "node_modules/@types/range-parser": { - "version": "1.2.4", + "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/ripemd160": { - "version": "2.0.0", + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@types/ripemd160/-/ripemd160-2.0.3.tgz", + "integrity": "sha512-/GrtUuorXQGl4/qCgo0YhzHaDbWc6i2kIBt5q7gA0np+/5GmLMK6aYb0pUYFfJ4Y2oraKkrDW4falfLip3Hzdw==", "dev": true, "license": "MIT", "dependencies": { @@ -5078,12 +4998,16 @@ } }, "node_modules/@types/semver": { - "version": "7.5.0", + "version": "7.5.8", + "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.5.8.tgz", + "integrity": "sha512-I8EUhyrgfLrcTkzV3TSsGyl1tSuPrEDzr0yd5m90UgNxQkyDXULk3b6MlQqTCpZpNtWe1K0hzclnZkTcLBe2UQ==", "dev": true, "license": "MIT" }, "node_modules/@types/send": { - "version": "0.17.1", + "version": "0.17.4", + "resolved": "https://registry.npmjs.org/@types/send/-/send-0.17.4.tgz", + "integrity": "sha512-x2EM6TJOybec7c52BX0ZspPodMsQUd5L6PRwOunVyVUhXiBSKf3AezDL8Dgvgt5o0UfKNfuA0eMLr2wLT4AiBA==", "dev": true, "license": "MIT", "dependencies": { @@ -5092,17 +5016,21 @@ } }, "node_modules/@types/serve-static": { - "version": "1.15.2", + "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/mime": "*", - "@types/node": "*" + "@types/node": "*", + "@types/send": "*" } }, "node_modules/@types/sha.js": { - "version": "2.4.1", + "version": "2.4.4", + "resolved": "https://registry.npmjs.org/@types/sha.js/-/sha.js-2.4.4.tgz", + "integrity": "sha512-Qukd+D6S2Hm0wLVt2Vh+/eWBIoUt+wF8jWjBsG4F8EFQRwKtYvtXCPcNl2OEUQ1R+eTr3xuSaBYUyM3WD1x/Qw==", "dev": true, "license": "MIT", "dependencies": { @@ -5110,12 +5038,16 @@ } }, "node_modules/@types/stack-utils": { - "version": "2.0.1", + "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/through": { - "version": "0.0.30", + "version": "0.0.33", + "resolved": "https://registry.npmjs.org/@types/through/-/through-0.0.33.tgz", + "integrity": "sha512-HsJ+z3QuETzP3cswwtzt2vEIiHBk/dCcHGhbmG5X3ecnwFD/lPrMpliGXxSCg03L9AhrdwA4Oz/qfspkDW+xGQ==", "dev": true, "license": "MIT", "dependencies": { @@ -5123,16 +5055,22 @@ } }, "node_modules/@types/tough-cookie": { - "version": "4.0.2", + "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" }, "node_modules/@types/triple-beam": { - "version": "1.3.2", + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/@types/triple-beam/-/triple-beam-1.3.5.tgz", + "integrity": "sha512-6WaYesThRMCl19iryMYP7/x2OVgCtbIVflDGFpWnb9irXI3UjYE4AzmYuiUKY1AJstGijoY+MgUszMgRxIYTYw==", "license": "MIT" }, "node_modules/@types/wif": { - "version": "2.0.2", + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@types/wif/-/wif-2.0.5.tgz", + "integrity": "sha512-addYBlYjDxLfJxDUoyTzICnu0u4snCdGJpICIIFk65zGcdjah3twTJq1Fdy+OdeZSRiof2raFtMqSqF9KeqthQ==", "dev": true, "license": "MIT", "dependencies": { @@ -5141,13 +5079,17 @@ }, "node_modules/@types/ws": { "version": "7.4.7", + "resolved": "https://registry.npmjs.org/@types/ws/-/ws-7.4.7.tgz", + "integrity": "sha512-JQbbmxZTZehdc2iszGKs5oC3NFnjeay7mtAWrdt7qNtAVK0g19muApzAy4bm9byz79xa2ZnO/BOBC2R8RC5Lww==", "license": "MIT", "dependencies": { "@types/node": "*" } }, "node_modules/@types/yargs": { - "version": "17.0.24", + "version": "17.0.33", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.33.tgz", + "integrity": "sha512-WpxBCKWPLr4xSsHgz511rFJAM+wS28w2zEO1QDNY5zM/S8ok70NNfztH0xwhqKyaK0OHCbN98LDAZuy1ctxDkA==", "dev": true, "license": "MIT", "dependencies": { @@ -5155,25 +5097,28 @@ } }, "node_modules/@types/yargs-parser": { - "version": "21.0.0", + "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/@typescript-eslint/eslint-plugin": { - "version": "6.3.0", + "version": "6.21.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-6.21.0.tgz", + "integrity": "sha512-oy9+hTPCUFpngkEZUSzbf9MxI65wbKFoQYsgPdILTfbUldp5ovUuphZVe4i30emU9M/kP+T64Di0mxl7dSw3MA==", "dev": true, "license": "MIT", "dependencies": { "@eslint-community/regexpp": "^4.5.1", - "@typescript-eslint/scope-manager": "6.3.0", - "@typescript-eslint/type-utils": "6.3.0", - "@typescript-eslint/utils": "6.3.0", - "@typescript-eslint/visitor-keys": "6.3.0", + "@typescript-eslint/scope-manager": "6.21.0", + "@typescript-eslint/type-utils": "6.21.0", + "@typescript-eslint/utils": "6.21.0", + "@typescript-eslint/visitor-keys": "6.21.0", "debug": "^4.3.4", "graphemer": "^1.4.0", "ignore": "^5.2.4", "natural-compare": "^1.4.0", - "natural-compare-lite": "^1.4.0", "semver": "^7.5.4", "ts-api-utils": "^1.0.1" }, @@ -5195,14 +5140,16 @@ } }, "node_modules/@typescript-eslint/parser": { - "version": "6.3.0", + "version": "6.21.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-6.21.0.tgz", + "integrity": "sha512-tbsV1jPne5CkFQCgPBcDOt30ItF7aJoZL997JSF7MhGQqOeT3svWRYxiqlfA5RUdlHN6Fi+EI9bxqbdyAUZjYQ==", "dev": true, "license": "BSD-2-Clause", "dependencies": { - "@typescript-eslint/scope-manager": "6.3.0", - "@typescript-eslint/types": "6.3.0", - "@typescript-eslint/typescript-estree": "6.3.0", - "@typescript-eslint/visitor-keys": "6.3.0", + "@typescript-eslint/scope-manager": "6.21.0", + "@typescript-eslint/types": "6.21.0", + "@typescript-eslint/typescript-estree": "6.21.0", + "@typescript-eslint/visitor-keys": "6.21.0", "debug": "^4.3.4" }, "engines": { @@ -5222,12 +5169,14 @@ } }, "node_modules/@typescript-eslint/scope-manager": { - "version": "6.3.0", + "version": "6.21.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-6.21.0.tgz", + "integrity": "sha512-OwLUIWZJry80O99zvqXVEioyniJMa+d2GrqpUTqi5/v5D5rOrppJVBPa0yKCblcigC0/aYAzxxqQ1B+DS2RYsg==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/types": "6.3.0", - "@typescript-eslint/visitor-keys": "6.3.0" + "@typescript-eslint/types": "6.21.0", + "@typescript-eslint/visitor-keys": "6.21.0" }, "engines": { "node": "^16.0.0 || >=18.0.0" @@ -5238,12 +5187,14 @@ } }, "node_modules/@typescript-eslint/type-utils": { - "version": "6.3.0", + "version": "6.21.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-6.21.0.tgz", + "integrity": "sha512-rZQI7wHfao8qMX3Rd3xqeYSMCL3SoiSQLBATSiVKARdFGCYSRvmViieZjqc58jKgs8Y8i9YvVVhRbHSTA4VBag==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/typescript-estree": "6.3.0", - "@typescript-eslint/utils": "6.3.0", + "@typescript-eslint/typescript-estree": "6.21.0", + "@typescript-eslint/utils": "6.21.0", "debug": "^4.3.4", "ts-api-utils": "^1.0.1" }, @@ -5264,7 +5215,9 @@ } }, "node_modules/@typescript-eslint/types": { - "version": "6.3.0", + "version": "6.21.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-6.21.0.tgz", + "integrity": "sha512-1kFmZ1rOm5epu9NZEZm1kckCDGj5UJEf7P1kliH4LKu/RkwpsfqqGmY2OOcUs18lSlQBKLDYBOGxRVtrMN5lpg==", "dev": true, "license": "MIT", "engines": { @@ -5276,15 +5229,18 @@ } }, "node_modules/@typescript-eslint/typescript-estree": { - "version": "6.3.0", + "version": "6.21.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-6.21.0.tgz", + "integrity": "sha512-6npJTkZcO+y2/kr+z0hc4HwNfrrP4kNYh57ek7yCNlrBjWQ1Y0OS7jiZTkgumrvkX5HkEKXFZkkdFNkaW2wmUQ==", "dev": true, "license": "BSD-2-Clause", "dependencies": { - "@typescript-eslint/types": "6.3.0", - "@typescript-eslint/visitor-keys": "6.3.0", + "@typescript-eslint/types": "6.21.0", + "@typescript-eslint/visitor-keys": "6.21.0", "debug": "^4.3.4", "globby": "^11.1.0", "is-glob": "^4.0.3", + "minimatch": "9.0.3", "semver": "^7.5.4", "ts-api-utils": "^1.0.1" }, @@ -5302,16 +5258,18 @@ } }, "node_modules/@typescript-eslint/utils": { - "version": "6.3.0", + "version": "6.21.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-6.21.0.tgz", + "integrity": "sha512-NfWVaC8HP9T8cbKQxHcsJBY5YE1O33+jpMwN45qzWWaPDZgLIbo12toGMWnmhvCpd3sIxkpDw3Wv1B3dYrbDQQ==", "dev": true, "license": "MIT", "dependencies": { "@eslint-community/eslint-utils": "^4.4.0", "@types/json-schema": "^7.0.12", "@types/semver": "^7.5.0", - "@typescript-eslint/scope-manager": "6.3.0", - "@typescript-eslint/types": "6.3.0", - "@typescript-eslint/typescript-estree": "6.3.0", + "@typescript-eslint/scope-manager": "6.21.0", + "@typescript-eslint/types": "6.21.0", + "@typescript-eslint/typescript-estree": "6.21.0", "semver": "^7.5.4" }, "engines": { @@ -5326,11 +5284,13 @@ } }, "node_modules/@typescript-eslint/visitor-keys": { - "version": "6.3.0", + "version": "6.21.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-6.21.0.tgz", + "integrity": "sha512-JJtkDduxLi9bivAB+cYOVMtbkqdPOhZ+ZI5LC47MIRrDV4Yn2o+ZnW10Nkmr28xRpSpdJ6Sm42Hjf2+REYXm0A==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/types": "6.3.0", + "@typescript-eslint/types": "6.21.0", "eslint-visitor-keys": "^3.4.1" }, "engines": { @@ -5341,160 +5301,194 @@ "url": "https://opencollective.com/typescript-eslint" } }, + "node_modules/@ungap/structured-clone": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.2.0.tgz", + "integrity": "sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==", + "dev": true, + "license": "ISC" + }, "node_modules/@vitest/expect": { - "version": "0.34.6", - "resolved": "https://registry.npmjs.org/@vitest/expect/-/expect-0.34.6.tgz", - "integrity": "sha512-QUzKpUQRc1qC7qdGo7rMK3AkETI7w18gTCUrsNnyjjJKYiuUB9+TQK3QnR1unhCnWRC0AbKv2omLGQDF/mIjOw==", + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@vitest/expect/-/expect-2.1.5.tgz", + "integrity": "sha512-nZSBTW1XIdpZvEJyoP/Sy8fUg0b8od7ZpGDkTUcfJ7wz/VoZAFzFfLyxVxGFhUjJzhYqSbIpfMtl/+k/dpWa3Q==", "dev": true, "license": "MIT", "dependencies": { - "@vitest/spy": "0.34.6", - "@vitest/utils": "0.34.6", - "chai": "^4.3.10" + "@vitest/spy": "2.1.5", + "@vitest/utils": "2.1.5", + "chai": "^5.1.2", + "tinyrainbow": "^1.2.0" }, "funding": { "url": "https://opencollective.com/vitest" } }, - "node_modules/@vitest/runner": { - "version": "0.34.6", - "resolved": "https://registry.npmjs.org/@vitest/runner/-/runner-0.34.6.tgz", - "integrity": "sha512-1CUQgtJSLF47NnhN+F9X2ycxUP0kLHQ/JWvNHbeBfwW8CzEGgeskzNnHDyv1ieKTltuR6sdIHV+nmR6kPxQqzQ==", + "node_modules/@vitest/mocker": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@vitest/mocker/-/mocker-2.1.5.tgz", + "integrity": "sha512-XYW6l3UuBmitWqSUXTNXcVBUCRytDogBsWuNXQijc00dtnU/9OqpXWp4OJroVrad/gLIomAq9aW8yWDBtMthhQ==", "dev": true, "license": "MIT", "dependencies": { - "@vitest/utils": "0.34.6", - "p-limit": "^4.0.0", - "pathe": "^1.1.1" + "@vitest/spy": "2.1.5", + "estree-walker": "^3.0.3", + "magic-string": "^0.30.12" }, "funding": { "url": "https://opencollective.com/vitest" + }, + "peerDependencies": { + "msw": "^2.4.9", + "vite": "^5.0.0" + }, + "peerDependenciesMeta": { + "msw": { + "optional": true + }, + "vite": { + "optional": true + } } }, - "node_modules/@vitest/runner/node_modules/p-limit": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-4.0.0.tgz", - "integrity": "sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ==", + "node_modules/@vitest/pretty-format": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@vitest/pretty-format/-/pretty-format-2.1.5.tgz", + "integrity": "sha512-4ZOwtk2bqG5Y6xRGHcveZVr+6txkH7M2e+nPFd6guSoN638v/1XQ0K06eOpi0ptVU/2tW/pIU4IoPotY/GZ9fw==", "dev": true, "license": "MIT", "dependencies": { - "yocto-queue": "^1.0.0" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + "tinyrainbow": "^1.2.0" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://opencollective.com/vitest" } }, - "node_modules/@vitest/runner/node_modules/yocto-queue": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-1.1.1.tgz", - "integrity": "sha512-b4JR1PFR10y1mKjhHY9LaGo6tmrgjit7hxVIeAmyMw3jegXR4dhYqLaQF5zMXZxY7tLpMyJeLjr1C4rLmkVe8g==", + "node_modules/@vitest/runner": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@vitest/runner/-/runner-2.1.5.tgz", + "integrity": "sha512-pKHKy3uaUdh7X6p1pxOkgkVAFW7r2I818vHDthYLvUyjRfkKOU6P45PztOch4DZarWQne+VOaIMwA/erSSpB9g==", "dev": true, "license": "MIT", - "engines": { - "node": ">=12.20" + "dependencies": { + "@vitest/utils": "2.1.5", + "pathe": "^1.1.2" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://opencollective.com/vitest" } }, "node_modules/@vitest/snapshot": { - "version": "0.34.6", - "resolved": "https://registry.npmjs.org/@vitest/snapshot/-/snapshot-0.34.6.tgz", - "integrity": "sha512-B3OZqYn6k4VaN011D+ve+AA4whM4QkcwcrwaKwAbyyvS/NB1hCWjFIBQxAQQSQir9/RtyAAGuq+4RJmbn2dH4w==", + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@vitest/snapshot/-/snapshot-2.1.5.tgz", + "integrity": "sha512-zmYw47mhfdfnYbuhkQvkkzYroXUumrwWDGlMjpdUr4jBd3HZiV2w7CQHj+z7AAS4VOtWxI4Zt4bWt4/sKcoIjg==", "dev": true, "license": "MIT", "dependencies": { - "magic-string": "^0.30.1", - "pathe": "^1.1.1", - "pretty-format": "^29.5.0" + "@vitest/pretty-format": "2.1.5", + "magic-string": "^0.30.12", + "pathe": "^1.1.2" }, "funding": { "url": "https://opencollective.com/vitest" } }, "node_modules/@vitest/spy": { - "version": "0.34.6", - "resolved": "https://registry.npmjs.org/@vitest/spy/-/spy-0.34.6.tgz", - "integrity": "sha512-xaCvneSaeBw/cz8ySmF7ZwGvL0lBjfvqc1LpQ/vcdHEvpLn3Ff1vAvjw+CoGn0802l++5L/pxb7whwcWAw+DUQ==", + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@vitest/spy/-/spy-2.1.5.tgz", + "integrity": "sha512-aWZF3P0r3w6DiYTVskOYuhBc7EMc3jvn1TkBg8ttylFFRqNN2XGD7V5a4aQdk6QiUzZQ4klNBSpCLJgWNdIiNw==", "dev": true, "license": "MIT", "dependencies": { - "tinyspy": "^2.1.1" + "tinyspy": "^3.0.2" }, "funding": { "url": "https://opencollective.com/vitest" } }, "node_modules/@vitest/utils": { - "version": "0.34.6", - "resolved": "https://registry.npmjs.org/@vitest/utils/-/utils-0.34.6.tgz", - "integrity": "sha512-IG5aDD8S6zlvloDsnzHw0Ut5xczlF+kv2BOTo+iXfPr54Yhi5qbVOgGB1hZaVq4iJ4C/MZ2J0y15IlsV/ZcI0A==", + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@vitest/utils/-/utils-2.1.5.tgz", + "integrity": "sha512-yfj6Yrp0Vesw2cwJbP+cl04OC+IHFsuQsrsJBL9pyGeQXE56v1UAOQco+SR55Vf1nQzfV0QJg1Qum7AaWUwwYg==", "dev": true, "license": "MIT", "dependencies": { - "diff-sequences": "^29.4.3", - "loupe": "^2.3.6", - "pretty-format": "^29.5.0" + "@vitest/pretty-format": "2.1.5", + "loupe": "^3.1.2", + "tinyrainbow": "^1.2.0" }, "funding": { "url": "https://opencollective.com/vitest" } }, "node_modules/@webassemblyjs/ast": { - "version": "1.11.6", + "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", + "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", + "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", + "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", + "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", + "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", + "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", + "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": { @@ -5502,7 +5496,9 @@ } }, "node_modules/@webassemblyjs/leb128": { - "version": "1.11.6", + "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": { @@ -5510,72 +5506,86 @@ } }, "node_modules/@webassemblyjs/utf8": { - "version": "1.11.6", + "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", + "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", + "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", + "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", + "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", + "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" } }, "node_modules/@webpack-cli/configtest": { "version": "2.1.1", + "resolved": "https://registry.npmjs.org/@webpack-cli/configtest/-/configtest-2.1.1.tgz", + "integrity": "sha512-wy0mglZpDSiSS0XHrVR+BAdId2+yxPSoJW8fsna3ZpYSlufjvxnP4YbKTCBZnNIcGN4r6ZPXV55X4mYExOfLmw==", "dev": true, "license": "MIT", "engines": { @@ -5588,6 +5598,8 @@ }, "node_modules/@webpack-cli/info": { "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@webpack-cli/info/-/info-2.0.2.tgz", + "integrity": "sha512-zLHQdI/Qs1UyT5UBdWNqsARasIA+AaF8t+4u2aS2nEpBQh2mWIVb8qAklq0eUENnC5mOItrIB4LiS9xMtph18A==", "dev": true, "license": "MIT", "engines": { @@ -5600,6 +5612,8 @@ }, "node_modules/@webpack-cli/serve": { "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@webpack-cli/serve/-/serve-2.0.5.tgz", + "integrity": "sha512-lqaoKnRYBdo1UgDX8uF24AfGMifWK19TxPmM5FHc2vAGxrJ/qtyUyFBWoY1tISZdelsQ5fBcOusifo5o5wSJxQ==", "dev": true, "license": "MIT", "engines": { @@ -5617,21 +5631,29 @@ }, "node_modules/@xtuc/ieee754": { "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", + "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==", "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, "license": "Apache-2.0" }, "node_modules/@yarnpkg/lockfile": { "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@yarnpkg/lockfile/-/lockfile-1.1.0.tgz", + "integrity": "sha512-GpSwvyXOcOOlV70vbnzjj4fW5xW/FdUF6nQEt1ENy7m4ZCczi1+/buVUPAqmGfqznsORNFzUMjctTIp8a9tuCQ==", "dev": true, "license": "BSD-2-Clause" }, "node_modules/@yarnpkg/parsers": { - "version": "3.0.0-rc.46", + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@yarnpkg/parsers/-/parsers-3.0.2.tgz", + "integrity": "sha512-/HcYgtUSiJiot/XWGLOlGxPYUG65+/31V8oqk17vZLW1xlCoR4PampyePljOxY2n8/3jz9+tIFzICsyGujJZoA==", "dev": true, "license": "BSD-2-Clause", "dependencies": { @@ -5639,11 +5661,13 @@ "tslib": "^2.4.0" }, "engines": { - "node": ">=14.15.0" + "node": ">=18.12.0" } }, "node_modules/@zkochan/js-yaml": { "version": "0.0.7", + "resolved": "https://registry.npmjs.org/@zkochan/js-yaml/-/js-yaml-0.0.7.tgz", + "integrity": "sha512-nrUSn7hzt7J6JWgWGz78ZYI8wj+gdIJdk0Ynjpp8l+trkn58Uqsf6RYrYkEK+3X18EX+TNdtJI0WxAtc+L84SQ==", "dev": true, "license": "MIT", "dependencies": { @@ -5655,16 +5679,23 @@ }, "node_modules/@zkochan/js-yaml/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/abab": { "version": "2.0.6", + "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.6.tgz", + "integrity": "sha512-j2afSsaIENvHZN2B8GOpF566vZ5WVk5opAiMTvWgaQT8DkbOqsTfvNAvHoRGU2zzP8cPoqys+xHTRDWW8L+/BA==", + "deprecated": "Use your platform's native atob() and btoa() methods instead", "dev": true, "license": "BSD-3-Clause" }, "node_modules/abbrev": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-2.0.0.tgz", + "integrity": "sha512-6/mh1E2u2YgEsCHdY0Yx5oW+61gZU+1vXaoiHHrpKeuRNNgFvS+/jrwHiQhB5apAf5oB7UB7E19ol2R2LKH8hQ==", "dev": true, "license": "ISC", "engines": { @@ -5673,6 +5704,8 @@ }, "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", @@ -5697,6 +5730,8 @@ }, "node_modules/acorn-globals": { "version": "6.0.0", + "resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-6.0.0.tgz", + "integrity": "sha512-ZQl7LOWaF5ePqqcX4hLuv/bLXYQNfNWw2c0/yX/TsPRKamzHcTGQnlCjHT3TsmkOUVEPS3crCxiPfdzE/Trlhg==", "dev": true, "license": "MIT", "dependencies": { @@ -5706,6 +5741,8 @@ }, "node_modules/acorn-globals/node_modules/acorn": { "version": "7.4.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", + "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", "dev": true, "license": "MIT", "bin": { @@ -5717,22 +5754,18 @@ }, "node_modules/acorn-globals/node_modules/acorn-walk": { "version": "7.2.0", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-7.2.0.tgz", + "integrity": "sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==", "dev": true, "license": "MIT", "engines": { "node": ">=0.4.0" } }, - "node_modules/acorn-import-assertions": { - "version": "1.9.0", - "dev": true, - "license": "MIT", - "peerDependencies": { - "acorn": "^8" - } - }, "node_modules/acorn-jsx": { "version": "5.3.2", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", + "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", "dev": true, "license": "MIT", "peerDependencies": { @@ -5740,31 +5773,42 @@ } }, "node_modules/acorn-walk": { - "version": "8.2.0", + "version": "8.3.4", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.4.tgz", + "integrity": "sha512-ueEepnujpqee2o5aIYnvHU6C0A42MNdsIDeqy5BydrkuC5R1ZuUFnm27EeFJGoEHJQgn3uleRvmTXaJgfXbt4g==", "dev": true, "license": "MIT", + "dependencies": { + "acorn": "^8.11.0" + }, "engines": { "node": ">=0.4.0" } }, "node_modules/add-stream": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/add-stream/-/add-stream-1.0.0.tgz", + "integrity": "sha512-qQLMr+8o0WC4FZGQTcJiKBVC59JylcPSrTtk6usvmIDFUOCKegapy1VHQwRbFMOFyb/inzUVqHs+eMYKDM1YeQ==", "dev": true, "license": "MIT" }, "node_modules/agent-base": { - "version": "6.0.2", + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.1.tgz", + "integrity": "sha512-H0TSyFNDMomMNJQBn8wFV5YC/2eJ+VXECwOadZJT554xP6cODZHPX3H9QMQECxvrgiSOP1pHjy1sMWQVYJOUOA==", "dev": true, "license": "MIT", "dependencies": { - "debug": "4" + "debug": "^4.3.4" }, "engines": { - "node": ">= 6.0.0" + "node": ">= 14" } }, "node_modules/aggregate-error": { "version": "3.1.0", + "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", + "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", "dev": true, "license": "MIT", "dependencies": { @@ -5776,29 +5820,26 @@ } }, "node_modules/ajv": { - "version": "6.12.6", + "version": "8.17.1", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz", + "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==", + "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", "url": "https://github.com/sponsors/epoberezkin" } }, - "node_modules/ajv-keywords": { - "version": "3.5.2", - "dev": true, - "license": "MIT", - "peerDependencies": { - "ajv": "^6.9.1" - } - }, "node_modules/ansi-colors": { "version": "4.1.3", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.3.tgz", + "integrity": "sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==", "dev": true, "license": "MIT", "engines": { @@ -5807,6 +5848,8 @@ }, "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==", "license": "MIT", "dependencies": { "type-fest": "^0.21.3" @@ -5820,6 +5863,8 @@ }, "node_modules/ansi-escapes/node_modules/type-fest": { "version": "0.21.3", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", + "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", "license": "(MIT OR CC0-1.0)", "engines": { "node": ">=10" @@ -5830,6 +5875,8 @@ }, "node_modules/ansi-regex": { "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", "license": "MIT", "engines": { "node": ">=8" @@ -5837,26 +5884,37 @@ }, "node_modules/ansi-sequence-parser": { "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ansi-sequence-parser/-/ansi-sequence-parser-1.1.1.tgz", + "integrity": "sha512-vJXt3yiaUL4UU546s3rPXlsry/RnM730G1+HkpKE012AN0sx1eOrxSu95oKDIonskeLTijMgqWZ3uDEe3NFvyg==", "dev": true, "license": "MIT" }, "node_modules/ansi-styles": { - "version": "3.2.1", + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "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/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": { @@ -5869,21 +5927,29 @@ }, "node_modules/app-module-path": { "version": "2.2.0", + "resolved": "https://registry.npmjs.org/app-module-path/-/app-module-path-2.2.0.tgz", + "integrity": "sha512-gkco+qxENJV+8vFcDiiFhuoSvRXb2a/QPqpSoWhVz829VNJfOTnELbBmPmNKFxf3xdNnw4DWCkzkDaavcX/1YQ==", "dev": true, "license": "BSD-2-Clause" }, "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, "license": "ISC" }, "node_modules/arg": { "version": "4.1.3", + "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", + "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==", "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": { @@ -5891,12 +5957,17 @@ } }, "node_modules/array-buffer-byte-length": { - "version": "1.0.0", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.1.tgz", + "integrity": "sha512-ahC5W1xgou+KTXix4sAO8Ki12Q+jf4i0+tmk3sC+zgcynshkHxzpXdImBehiUYKKKDwvfFiJl1tZt6ewscS1Mg==", "dev": true, "license": "MIT", "dependencies": { - "call-bind": "^1.0.2", - "is-array-buffer": "^3.0.1" + "call-bind": "^1.0.5", + "is-array-buffer": "^3.0.4" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -5904,6 +5975,8 @@ }, "node_modules/array-differ": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/array-differ/-/array-differ-3.0.0.tgz", + "integrity": "sha512-THtfYS6KtME/yIAhKjZ2ul7XI96lQGHRputJQHO80LAWQnuGP4iCIN8vdMRboGbIEYBwU33q8Tch1os2+X0kMg==", "dev": true, "license": "MIT", "engines": { @@ -5912,22 +5985,29 @@ }, "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/array-ify": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/array-ify/-/array-ify-1.0.0.tgz", + "integrity": "sha512-c5AMf34bKdvPhQ7tBGhqkgKNUzMr4WUs+WDtC2ZUGOUncbxKMTvqxYctiseW3+L4bA8ec+GcZ6/A/FW4m8ukng==", "dev": true, "license": "MIT" }, "node_modules/array-includes": { - "version": "3.1.6", + "version": "3.1.8", + "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.8.tgz", + "integrity": "sha512-itaWrbYbqpGXkGhZPGUulwnhVf5Hpy1xiCFsGqyIGglbBxmG5vSjxQen3/WGOjPpNEv1RtBLKxbmVXm8HpJStQ==", "dev": true, "license": "MIT", "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4", - "get-intrinsic": "^1.1.3", + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2", + "es-object-atoms": "^1.0.0", + "get-intrinsic": "^1.2.4", "is-string": "^1.0.7" }, "engines": { @@ -5939,6 +6019,8 @@ }, "node_modules/array-union": { "version": "2.1.0", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", + "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", "dev": true, "license": "MIT", "engines": { @@ -5946,15 +6028,18 @@ } }, "node_modules/array.prototype.findlastindex": { - "version": "1.2.2", + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.5.tgz", + "integrity": "sha512-zfETvRFA8o7EiNn++N5f/kaCw221hrpGsDmcpndVupkPzEc1Wuf3VgC0qby1BbHs7f5DVYjgtEU2LLh5bqeGfQ==", "dev": true, "license": "MIT", "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4", - "es-shim-unscopables": "^1.0.0", - "get-intrinsic": "^1.1.3" + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0", + "es-shim-unscopables": "^1.0.2" }, "engines": { "node": ">= 0.4" @@ -5964,13 +6049,15 @@ } }, "node_modules/array.prototype.flat": { - "version": "1.3.1", + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.2.tgz", + "integrity": "sha512-djYB+Zx2vLewY8RWlNCUdHjDXs2XOgm602S9E7P/UpHgfeHL00cRiIF+IN/G/aUJ7kGPb6yO/ErDI5V2s8iycA==", "dev": true, "license": "MIT", "dependencies": { "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", "es-shim-unscopables": "^1.0.0" }, "engines": { @@ -5981,13 +6068,15 @@ } }, "node_modules/array.prototype.flatmap": { - "version": "1.3.1", + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.2.tgz", + "integrity": "sha512-Ewyx0c9PmpcsByhSW4r+9zDU7sGjFc86qf/kKtuSCRdhfbk0SNLLkaT5qvcHnRGgc5NP/ly/y+qkXkqONX54CQ==", "dev": true, "license": "MIT", "dependencies": { "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", "es-shim-unscopables": "^1.0.0" }, "engines": { @@ -5998,15 +6087,19 @@ } }, "node_modules/arraybuffer.prototype.slice": { - "version": "1.0.1", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.3.tgz", + "integrity": "sha512-bMxMKAjg13EBSVscxTaYA4mRc5t1UAXa2kXiGTNfZ079HIWXEkKmkgFrh/nJqamaLSrXO5H4WFFkPEaLJWbs3A==", "dev": true, "license": "MIT", "dependencies": { - "array-buffer-byte-length": "^1.0.0", - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "get-intrinsic": "^1.2.1", - "is-array-buffer": "^3.0.2", + "array-buffer-byte-length": "^1.0.1", + "call-bind": "^1.0.5", + "define-properties": "^1.2.1", + "es-abstract": "^1.22.3", + "es-errors": "^1.2.1", + "get-intrinsic": "^1.2.3", + "is-array-buffer": "^3.0.4", "is-shared-array-buffer": "^1.0.2" }, "engines": { @@ -6018,6 +6111,8 @@ }, "node_modules/arrify": { "version": "1.0.1", + "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", + "integrity": "sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA==", "dev": true, "license": "MIT", "engines": { @@ -6026,27 +6121,29 @@ }, "node_modules/asn1": { "version": "0.2.6", + "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.6.tgz", + "integrity": "sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ==", "license": "MIT", "dependencies": { "safer-buffer": "~2.1.0" } }, "node_modules/asn1.js": { - "version": "5.4.1", + "version": "4.10.1", + "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-4.10.1.tgz", + "integrity": "sha512-p32cOF5q0Zqs9uBiONKYLm6BClCoBCM5O9JfeUSlnQLBTxYdTK+pW+nXflm8UkKd2UYlEbYz5qEi0JuZR9ckSw==", + "dev": true, "license": "MIT", "dependencies": { "bn.js": "^4.0.0", "inherits": "^2.0.1", - "minimalistic-assert": "^1.0.0", - "safer-buffer": "^2.1.0" + "minimalistic-assert": "^1.0.0" } }, - "node_modules/asn1.js/node_modules/bn.js": { - "version": "4.12.0", - "license": "MIT" - }, "node_modules/asn1js": { "version": "3.0.5", + "resolved": "https://registry.npmjs.org/asn1js/-/asn1js-3.0.5.tgz", + "integrity": "sha512-FVnvrKJwpt9LP2lAMl8qZswRNm3T4q9CON+bxldk2iwk3FFpuwhx2FfinyitizWHsVYyaY+y5JzDR0rCMV5yTQ==", "dev": true, "license": "BSD-3-Clause", "dependencies": { @@ -6059,35 +6156,42 @@ } }, "node_modules/assert": { - "version": "2.0.0", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/assert/-/assert-2.1.0.tgz", + "integrity": "sha512-eLHpSK/Y4nhMJ07gDaAzoX/XAKS8PSaojml3M0DM4JpV1LAi5JOJ/p6H/XWrl8L+DzVEvVCW1z3vWAaB9oTsQw==", "dev": true, "license": "MIT", "dependencies": { - "es6-object-assign": "^1.1.0", - "is-nan": "^1.2.1", - "object-is": "^1.0.1", - "util": "^0.12.0" + "call-bind": "^1.0.2", + "is-nan": "^1.3.2", + "object-is": "^1.1.5", + "object.assign": "^4.1.4", + "util": "^0.12.5" } }, "node_modules/assert-plus": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw==", "license": "MIT", "engines": { "node": ">=0.8" } }, "node_modules/assertion-error": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-1.1.0.tgz", - "integrity": "sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-2.0.1.tgz", + "integrity": "sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA==", "dev": true, "license": "MIT", "engines": { - "node": "*" + "node": ">=12" } }, "node_modules/ast-module-types": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/ast-module-types/-/ast-module-types-4.0.0.tgz", + "integrity": "sha512-Kd0o8r6CDazJGCRzs8Ivpn0xj19oNKrULhoJFzhGjRsLpekF2zyZs9Ukz+JvZhWD6smszfepakTFhAaYpsI12g==", "dev": true, "license": "MIT", "engines": { @@ -6095,17 +6199,26 @@ } }, "node_modules/async": { - "version": "3.2.4", + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/async/-/async-3.2.6.tgz", + "integrity": "sha512-htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0Ti6C2AA==", "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==", "license": "MIT" }, "node_modules/available-typed-arrays": { - "version": "1.0.5", + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz", + "integrity": "sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==", "dev": true, "license": "MIT", + "dependencies": { + "possible-typed-array-names": "^1.0.0" + }, "engines": { "node": ">= 0.4" }, @@ -6115,17 +6228,23 @@ }, "node_modules/aws-sign2": { "version": "0.7.0", + "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", + "integrity": "sha512-08kcGqnYf/YmjoRhfxyu+CLxBjUtHLXLXX/vUfx9l2LYzG3c1m61nrpyFUZI6zeS+Li/wWMMidD9KgrqtGq3mA==", "license": "Apache-2.0", "engines": { "node": "*" } }, "node_modules/aws4": { - "version": "1.12.0", + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.13.2.tgz", + "integrity": "sha512-lHe62zvbTB5eEABUVi/AwVh0ZKY9rMMDhmm+eeyuuUQbQ3+J+fONVQOZyj+DdrvD4BY33uYniyRJ4UJIaSKAfw==", "license": "MIT" }, "node_modules/axios": { - "version": "1.7.2", + "version": "1.7.7", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.7.7.tgz", + "integrity": "sha512-S4kL7XrjgBmvdGut0sN3yJxqYzrDOnivkBiN0OFs6hLiUam3UPvswUo0kqGyhqUZGEOytHyumEdXsAkgCOUf3Q==", "dev": true, "license": "MIT", "dependencies": { @@ -6134,28 +6253,17 @@ "proxy-from-env": "^1.1.0" } }, - "node_modules/axios/node_modules/form-data": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.8", - "mime-types": "^2.1.12" - }, - "engines": { - "node": ">= 6" - } - }, "node_modules/babel-jest": { - "version": "29.6.2", + "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.6.2", + "@jest/transform": "^29.7.0", "@types/babel__core": "^7.1.14", "babel-plugin-istanbul": "^6.1.1", - "babel-preset-jest": "^29.5.0", + "babel-preset-jest": "^29.6.3", "chalk": "^4.0.0", "graceful-fs": "^4.2.9", "slash": "^3.0.0" @@ -6167,87 +6275,54 @@ "@babel/core": "^7.8.0" } }, - "node_modules/babel-jest/node_modules/ansi-styles": { - "version": "4.3.0", - "dev": true, - "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/babel-jest/node_modules/chalk": { - "version": "4.1.2", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/babel-jest/node_modules/color-convert": { - "version": "2.0.1", + "node_modules/babel-plugin-istanbul": { + "version": "6.1.1", + "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": "MIT", + "license": "BSD-3-Clause", "dependencies": { - "color-name": "~1.1.4" + "@babel/helper-plugin-utils": "^7.0.0", + "@istanbuljs/load-nyc-config": "^1.0.0", + "@istanbuljs/schema": "^0.1.2", + "istanbul-lib-instrument": "^5.0.4", + "test-exclude": "^6.0.0" }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/babel-jest/node_modules/color-name": { - "version": "1.1.4", - "dev": true, - "license": "MIT" - }, - "node_modules/babel-jest/node_modules/has-flag": { - "version": "4.0.0", - "dev": true, - "license": "MIT", "engines": { "node": ">=8" } }, - "node_modules/babel-jest/node_modules/supports-color": { - "version": "7.2.0", + "node_modules/babel-plugin-istanbul/node_modules/istanbul-lib-instrument": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-5.2.1.tgz", + "integrity": "sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg==", "dev": true, - "license": "MIT", + "license": "BSD-3-Clause", "dependencies": { - "has-flag": "^4.0.0" + "@babel/core": "^7.12.3", + "@babel/parser": "^7.14.7", + "@istanbuljs/schema": "^0.1.2", + "istanbul-lib-coverage": "^3.2.0", + "semver": "^6.3.0" }, "engines": { "node": ">=8" } }, - "node_modules/babel-plugin-istanbul": { - "version": "6.1.1", + "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, - "license": "BSD-3-Clause", - "dependencies": { - "@babel/helper-plugin-utils": "^7.0.0", - "@istanbuljs/load-nyc-config": "^1.0.0", - "@istanbuljs/schema": "^0.1.2", - "istanbul-lib-instrument": "^5.0.4", - "test-exclude": "^6.0.0" - }, - "engines": { - "node": ">=8" + "license": "ISC", + "bin": { + "semver": "bin/semver.js" } }, "node_modules/babel-plugin-jest-hoist": { - "version": "29.5.0", + "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": { @@ -6261,33 +6336,40 @@ } }, "node_modules/babel-preset-current-node-syntax": { - "version": "1.0.1", + "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==", "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" } }, "node_modules/babel-preset-jest": { - "version": "29.5.0", + "version": "29.6.3", + "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.5.0", + "babel-plugin-jest-hoist": "^29.6.3", "babel-preset-current-node-syntax": "^1.0.0" }, "engines": { @@ -6299,42 +6381,24 @@ }, "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, "license": "MIT" }, "node_modules/base-x": { - "version": "4.0.0", - "license": "MIT" - }, - "node_modules/base58check": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/base58check/-/base58check-2.0.0.tgz", - "integrity": "sha512-sTzsDAOC9+i2Ukr3p1Ie2DWpD117ua+vBJRDnpsSlScGwImeeiTg/IatwcFLsz9K9wEGoBLVd5ahNZzrZ/jZyg==", - "dev": true, + "version": "3.0.10", + "resolved": "https://registry.npmjs.org/base-x/-/base-x-3.0.10.tgz", + "integrity": "sha512-7d0s06rR9rYaIWHkpfLIFICM/tkSVdoPC9qYAQRpxn9DdKNWNsKC0uk++akckyLq16Tx2WIinnZ6WRriAt6njQ==", "license": "MIT", "dependencies": { - "bs58": "^3.0.0" - } - }, - "node_modules/base58check/node_modules/base-x": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/base-x/-/base-x-1.1.0.tgz", - "integrity": "sha512-c0WLeG3K5OlL4Skz2/LVdS+MjggByKhowxQpG+JpCLA48s/bGwIDyzA1naFjywtNvp/37fLK0p0FpjTNNLLUXQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/base58check/node_modules/bs58": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/bs58/-/bs58-3.1.0.tgz", - "integrity": "sha512-9C2bRFTGy3meqO65O9jLvVTyawvhLVp4h2ECm5KlRPuV5KPDNJZcJIj3gl+aA0ENXcYrUSLCkPAeqbTcI2uWyQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "base-x": "^1.1.0" + "safe-buffer": "^5.0.1" } }, "node_modules/base64-js": { "version": "1.5.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", "funding": [ { "type": "github", @@ -6353,6 +6417,8 @@ }, "node_modules/base64url": { "version": "3.0.1", + "resolved": "https://registry.npmjs.org/base64url/-/base64url-3.0.1.tgz", + "integrity": "sha512-ir1UPr3dkwexU7FdV8qBBbNDRUhMmIekYMFZfi+C/sLNnRESKPl23nB9b2pltqfOQNnGzsDdId90AEtG5tCx4A==", "license": "MIT", "engines": { "node": ">=6.0.0" @@ -6360,6 +6426,8 @@ }, "node_modules/bcrypt-pbkdf": { "version": "1.0.2", + "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", + "integrity": "sha512-qeFIXtP4MSoi6NLqO12WfqARWWuCKi2Rn/9hJLEmtB5yTNr9DqFWkJRCf2qShWzPeAMRnOgCrq0sg/KLv5ES9w==", "license": "BSD-3-Clause", "dependencies": { "tweetnacl": "^0.14.3" @@ -6367,15 +6435,21 @@ }, "node_modules/bech32": { "version": "1.1.4", + "resolved": "https://registry.npmjs.org/bech32/-/bech32-1.1.4.tgz", + "integrity": "sha512-s0IrSOzLlbvX7yp4WBfPITzpAU8sqQcpsmwXDiKwrG4r491vwCO/XpejasRNl0piBMe/DvP4Tz0mIS/X1DPJBQ==", "license": "MIT" }, "node_modules/before-after-hook": { "version": "2.2.3", + "resolved": "https://registry.npmjs.org/before-after-hook/-/before-after-hook-2.2.3.tgz", + "integrity": "sha512-NzUnlZexiaH/46WDhANlyR2bXRopNg4F/zuSA3OpZnllCUgRaOF2znDioDWrmbNVsuZk6l9pMquQB38cfBZwkQ==", "dev": true, "license": "Apache-2.0" }, "node_modules/better-path-resolve": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/better-path-resolve/-/better-path-resolve-1.0.0.tgz", + "integrity": "sha512-pbnl5XzGBdrFU/wT4jqmJVPn2B6UHPBOhzMQkY/SPUPB6QtUXtmBHBIwCbXJol93mOpGMnQyP/+BB19q04xj7g==", "dev": true, "license": "MIT", "dependencies": { @@ -6385,16 +6459,10 @@ "node": ">=4" } }, - "node_modules/big-integer": { - "version": "1.6.51", - "dev": true, - "license": "Unlicense", - "engines": { - "node": ">=0.6" - } - }, "node_modules/big.js": { "version": "5.2.2", + "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz", + "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==", "dev": true, "license": "MIT", "engines": { @@ -6403,6 +6471,8 @@ }, "node_modules/bin-links": { "version": "4.0.4", + "resolved": "https://registry.npmjs.org/bin-links/-/bin-links-4.0.4.tgz", + "integrity": "sha512-cMtq4W5ZsEwcutJrVId+a/tjt8GSbS+h0oNkdl6+6rBuEv8Ot33Bevj5KPm40t309zuhVic8NjpuL42QCiJWWA==", "dev": true, "license": "ISC", "dependencies": { @@ -6415,16 +6485,10 @@ "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, - "node_modules/bin-links/node_modules/npm-normalize-package-bin": { - "version": "3.0.1", - "dev": true, - "license": "ISC", - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, "node_modules/bin-links/node_modules/signal-exit": { "version": "4.1.0", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", "dev": true, "license": "ISC", "engines": { @@ -6436,6 +6500,8 @@ }, "node_modules/bin-links/node_modules/write-file-atomic": { "version": "5.0.1", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-5.0.1.tgz", + "integrity": "sha512-+QU2zd6OTD8XWIJCbffaiQeH9U73qIqafo1x6V1snCWYGJf6cVE0cDR4D8xRzcEnfI21IFrUPzPGtcPf8AC+Rw==", "dev": true, "license": "ISC", "dependencies": { @@ -6448,13 +6514,17 @@ }, "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==", "license": "MIT", "dependencies": { "file-uri-to-path": "1.0.0" } }, "node_modules/bip174": { - "version": "2.1.0", + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/bip174/-/bip174-2.1.1.tgz", + "integrity": "sha512-mdFV5+/v0XyNYXjBS6CQPLo9ekCx4gtKZFnJm5PMto7Fs9hTTDpkkzOB7/FtluRI6JbUUAu+snTYfJRgHLZbZQ==", "license": "MIT", "engines": { "node": ">=8.0.0" @@ -6462,6 +6532,8 @@ }, "node_modules/bip32": { "version": "2.0.6", + "resolved": "https://registry.npmjs.org/bip32/-/bip32-2.0.6.tgz", + "integrity": "sha512-HpV5OMLLGTjSVblmrtYRfFFKuQB+GArM0+XP8HGWfJ5vxYBqo+DesvJwOdC2WJ3bCkZShGf0QIfoIpeomVzVdA==", "license": "MIT", "dependencies": { "@types/node": "10.12.18", @@ -6478,20 +6550,26 @@ }, "node_modules/bip32/node_modules/@types/node": { "version": "10.12.18", + "resolved": "https://registry.npmjs.org/@types/node/-/node-10.12.18.tgz", + "integrity": "sha512-fh+pAqt4xRzPfqA6eh3Z2y6fyZavRIumvjhaCL753+TVkGKGhpPeyrJG2JftD0T9q4GF00KjefsQ+PQNDdWQaQ==", "license": "MIT" }, "node_modules/bip39": { "version": "3.1.0", + "resolved": "https://registry.npmjs.org/bip39/-/bip39-3.1.0.tgz", + "integrity": "sha512-c9kiwdk45Do5GL0vJMe7tS95VjCii65mYAH7DfWl3uW8AVzXKQVUm64i3hzVybBDMp9r7j9iNxR85+ul8MdN/A==", "license": "ISC", "dependencies": { "@noble/hashes": "^1.2.0" } }, "node_modules/bip39/node_modules/@noble/hashes": { - "version": "1.3.1", + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.5.0.tgz", + "integrity": "sha512-1j6kQFb7QRru7eKN3ZDvRcP13rugwdxZqCjbiAVZfIJwgj2A65UmT4TgARXGlXgnRkORLTDTrO19ZErt7+QXgA==", "license": "MIT", "engines": { - "node": ">= 16" + "node": "^14.21.3 || >=16" }, "funding": { "url": "https://paulmillr.com/funding/" @@ -6499,6 +6577,8 @@ }, "node_modules/bip66": { "version": "1.1.5", + "resolved": "https://registry.npmjs.org/bip66/-/bip66-1.1.5.tgz", + "integrity": "sha512-nemMHz95EmS38a26XbbdxIYj5csHd3RMP3H5bwQknX0WYHF01qhpufP42mLOwVICuH2JmhIhXiWs89MfUGL7Xw==", "license": "MIT", "dependencies": { "safe-buffer": "^5.0.1" @@ -6506,10 +6586,14 @@ }, "node_modules/bitcoin-ops": { "version": "1.4.1", + "resolved": "https://registry.npmjs.org/bitcoin-ops/-/bitcoin-ops-1.4.1.tgz", + "integrity": "sha512-pef6gxZFztEhaE9RY9HmWVmiIHqCb2OyS4HPKkpc6CIiiOa3Qmuoylxc5P2EkU3w+5eTSifI9SEZC88idAIGow==", "license": "MIT" }, "node_modules/bitcoinjs-lib": { "version": "5.2.0", + "resolved": "https://registry.npmjs.org/bitcoinjs-lib/-/bitcoinjs-lib-5.2.0.tgz", + "integrity": "sha512-5DcLxGUDejgNBYcieMIUfjORtUeNWl828VWLHJGVKZCb4zIS1oOySTUr0LGmcqJBQgTBz3bGbRQla4FgrdQEIQ==", "license": "MIT", "dependencies": { "bech32": "^1.1.2", @@ -6534,6 +6618,8 @@ }, "node_modules/bl": { "version": "4.1.0", + "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", + "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", "dev": true, "license": "MIT", "dependencies": { @@ -6544,6 +6630,8 @@ }, "node_modules/blockstack": { "version": "19.3.0", + "resolved": "https://registry.npmjs.org/blockstack/-/blockstack-19.3.0.tgz", + "integrity": "sha512-P/HRS5n+buTeIssxs1v479EpDZOFGpfiivRrv9UjbHj/FdSJLxC1onVD8Hiyfm0mB8y7Ah9qT2lGqKX9P6r7+g==", "license": "MIT", "dependencies": { "@types/bn.js": "^4.11.5", @@ -6570,19 +6658,38 @@ "npm": ">=6" } }, - "node_modules/blockstack/node_modules/@types/bn.js": { - "version": "4.11.6", + "node_modules/blockstack/node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", "license": "MIT", "dependencies": { - "@types/node": "*" + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" } }, - "node_modules/blockstack/node_modules/bn.js": { - "version": "4.12.0", - "license": "MIT" + "node_modules/blockstack/node_modules/asn1.js": { + "version": "5.4.1", + "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-5.4.1.tgz", + "integrity": "sha512-+I//4cYPccV8LdmBLiX8CYvf9Sp3vQsrqu2QNXRcrbiWvcx/UdlFiqUJJzxRQxgsZmvhXhn4cSKeSmoFjVdupA==", + "license": "MIT", + "dependencies": { + "bn.js": "^4.0.0", + "inherits": "^2.0.1", + "minimalistic-assert": "^1.0.0", + "safer-buffer": "^2.1.0" + } }, "node_modules/blockstack/node_modules/cross-fetch": { "version": "2.2.6", + "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-2.2.6.tgz", + "integrity": "sha512-9JZz+vXCmfKUZ68zAptS7k4Nu8e2qcibe7WVZYps7sAgk5R8GYTc+T1WR0v1rlP9HxgARmOX1UTIJZFytajpNA==", "license": "MIT", "dependencies": { "node-fetch": "^2.6.7", @@ -6590,19 +6697,30 @@ } }, "node_modules/blockstack/node_modules/form-data": { - "version": "2.5.1", + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.5.2.tgz", + "integrity": "sha512-GgwY0PS7DbXqajuGf4OYlsrIu3zgxD6Vvql43IBhm6MahqA5SK/7mwhtNj2AdH2z35YR34ujJ7BN+3fFC3jP5Q==", "license": "MIT", "dependencies": { "asynckit": "^0.4.0", "combined-stream": "^1.0.6", - "mime-types": "^2.1.12" + "mime-types": "^2.1.12", + "safe-buffer": "^5.2.1" }, "engines": { "node": ">= 0.12" } }, + "node_modules/blockstack/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==", + "license": "MIT" + }, "node_modules/blockstack/node_modules/jsontokens": { "version": "2.0.2", + "resolved": "https://registry.npmjs.org/jsontokens/-/jsontokens-2.0.2.tgz", + "integrity": "sha512-E5W1CIbS7KcVvOJ2CguITvb77GbsjOzzmkFxnuCJqtSLvebgxRXcR1OhFXDK+2Hz+ng7MYJhMylilKnLwlwdYQ==", "license": "MIT", "dependencies": { "@types/elliptic": "^6.4.9", @@ -6613,40 +6731,44 @@ "key-encoder": "^2.0.2" } }, - "node_modules/blockstack/node_modules/triplesec": { - "version": "3.0.27", - "dependencies": { - "iced-error": ">=0.0.9", - "iced-lock": "^1.0.1", - "iced-runtime": "^1.0.2", - "more-entropy": ">=0.0.7", - "progress": "~1.1.2", - "uglify-js": "^3.1.9" + "node_modules/blockstack/node_modules/uuid": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", + "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==", + "deprecated": "Please upgrade to version 7 or higher. Older versions may use Math.random() in certain circumstances, which is known to be problematic. See https://v8.dev/blog/math-random for details.", + "license": "MIT", + "bin": { + "uuid": "bin/uuid" } }, "node_modules/blockstack/node_modules/zone-file": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/zone-file/-/zone-file-1.0.0.tgz", + "integrity": "sha512-dJynTf/5XCobE6diQBpNWQQRBzXE8d1QhHKemzrkffrZ36F9uKlbBVyIXXbG2CJoaTGZGh8zt2AHX/mG4txtqA==", "license": "ISC" }, "node_modules/bn.js": { - "version": "5.2.1", - "dev": true, + "version": "4.12.1", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.1.tgz", + "integrity": "sha512-k8TVBiPkPJT9uHLdOKfFpqcfprwBFOAAXXozRubr7R7PfIuKvQlzcI4M0pALeqXN09vdaMbUdUj+pass+uULAg==", "license": "MIT" }, "node_modules/body-parser": { - "version": "1.20.1", + "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.4", + "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", + "qs": "6.13.0", + "raw-body": "2.5.2", "type-is": "~1.6.18", "unpipe": "1.0.0" }, @@ -6657,6 +6779,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==", "license": "MIT", "dependencies": { "ms": "2.0.0" @@ -6664,62 +6788,56 @@ }, "node_modules/body-parser/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/boolbase": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", + "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==", "license": "ISC" }, - "node_modules/bplist-parser": { - "version": "0.2.0", - "dev": true, - "license": "MIT", - "dependencies": { - "big-integer": "^1.6.44" - }, - "engines": { - "node": ">= 5.10.0" - } - }, "node_modules/brace-expansion": { - "version": "1.1.11", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", "dev": true, "license": "MIT", "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" + "balanced-match": "^1.0.0" } }, "node_modules/braces": { - "version": "3.0.2", + "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/breakword": { - "version": "1.0.6", - "dev": true, - "license": "MIT", - "dependencies": { - "wcwidth": "^1.0.1" - } - }, "node_modules/brorand": { "version": "1.1.0", + "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz", + "integrity": "sha512-cKV8tMCEpQs4hK/ik71d6LrPOnpkpGBR0wzxqr68g2m/LB2GxVYQroAjMJZRVM1Y4BCjCKc3vAamxSzOY2RP+w==", "license": "MIT" }, "node_modules/browser-process-hrtime": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/browser-process-hrtime/-/browser-process-hrtime-1.0.0.tgz", + "integrity": "sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow==", "dev": true, "license": "BSD-2-Clause" }, "node_modules/browserify-aes": { "version": "1.2.0", + "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz", + "integrity": "sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==", "dev": true, "license": "MIT", "dependencies": { @@ -6733,6 +6851,8 @@ }, "node_modules/browserify-cipher": { "version": "1.0.1", + "resolved": "https://registry.npmjs.org/browserify-cipher/-/browserify-cipher-1.0.1.tgz", + "integrity": "sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w==", "dev": true, "license": "MIT", "dependencies": { @@ -6743,6 +6863,8 @@ }, "node_modules/browserify-des": { "version": "1.0.2", + "resolved": "https://registry.npmjs.org/browserify-des/-/browserify-des-1.0.2.tgz", + "integrity": "sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A==", "dev": true, "license": "MIT", "dependencies": { @@ -6753,32 +6875,107 @@ } }, "node_modules/browserify-rsa": { - "version": "4.1.0", + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/browserify-rsa/-/browserify-rsa-4.1.1.tgz", + "integrity": "sha512-YBjSAiTqM04ZVei6sXighu679a3SqWORA3qZTEqZImnlkDIFtKc6pNutpjyZ8RJTjQtuYfeetkxM11GwoYXMIQ==", "dev": true, "license": "MIT", "dependencies": { - "bn.js": "^5.0.0", - "randombytes": "^2.0.1" + "bn.js": "^5.2.1", + "randombytes": "^2.1.0", + "safe-buffer": "^5.2.1" + }, + "engines": { + "node": ">= 0.10" } }, + "node_modules/browserify-rsa/node_modules/bn.js": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.1.tgz", + "integrity": "sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==", + "dev": true, + "license": "MIT" + }, "node_modules/browserify-sign": { - "version": "4.2.1", + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.2.3.tgz", + "integrity": "sha512-JWCZW6SKhfhjJxO8Tyiiy+XYB7cqd2S5/+WeYHsKdNKFlCBhKbblba1A/HN/90YwtxKc8tCErjffZl++UNmGiw==", "dev": true, "license": "ISC", "dependencies": { - "bn.js": "^5.1.1", - "browserify-rsa": "^4.0.1", + "bn.js": "^5.2.1", + "browserify-rsa": "^4.1.0", "create-hash": "^1.2.0", "create-hmac": "^1.1.7", - "elliptic": "^6.5.3", + "elliptic": "^6.5.5", + "hash-base": "~3.0", "inherits": "^2.0.4", - "parse-asn1": "^5.1.5", - "readable-stream": "^3.6.0", - "safe-buffer": "^5.2.0" + "parse-asn1": "^5.1.7", + "readable-stream": "^2.3.8", + "safe-buffer": "^5.2.1" + }, + "engines": { + "node": ">= 0.12" + } + }, + "node_modules/browserify-sign/node_modules/bn.js": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.1.tgz", + "integrity": "sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/browserify-sign/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, + "license": "MIT" + }, + "node_modules/browserify-sign/node_modules/readable-stream": { + "version": "2.3.8", + "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", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/browserify-sign/node_modules/readable-stream/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, + "license": "MIT" + }, + "node_modules/browserify-sign/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/browserify-sign/node_modules/string_decoder/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, + "license": "MIT" + }, "node_modules/browserslist": { - "version": "4.21.10", + "version": "4.24.2", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.24.2.tgz", + "integrity": "sha512-ZIc+Q62revdMcqC6aChtW4jz3My3klmCO1fEmINZY/8J3EpBg5/A/D0AKmBveUh6pgoeycoMkVMko84tuYS+Gg==", "dev": true, "funding": [ { @@ -6796,10 +6993,10 @@ ], "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" + "caniuse-lite": "^1.0.30001669", + "electron-to-chromium": "^1.5.41", + "node-releases": "^2.0.18", + "update-browserslist-db": "^1.1.1" }, "bin": { "browserslist": "cli.js" @@ -6810,6 +7007,8 @@ }, "node_modules/bs-logger": { "version": "0.2.6", + "resolved": "https://registry.npmjs.org/bs-logger/-/bs-logger-0.2.6.tgz", + "integrity": "sha512-pd8DCoxmbgc7hyPKOvxtqNcjYoOsABPQdcCUjGp3d42VR2CX1ORhk2A87oqqu5R1kk+76nsxZupkmyd+MVtCog==", "dev": true, "license": "MIT", "dependencies": { @@ -6820,14 +7019,18 @@ } }, "node_modules/bs58": { - "version": "5.0.0", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/bs58/-/bs58-4.0.1.tgz", + "integrity": "sha512-Ok3Wdf5vOIlBrgCvTq96gBkJw+JUEzdBgyaza5HLtPm7yTHkjRy8+JzNyHF7BHa0bNWOQIp3m5YF0nnFcOIKLw==", "license": "MIT", "dependencies": { - "base-x": "^4.0.0" + "base-x": "^3.0.2" } }, "node_modules/bs58check": { "version": "2.1.2", + "resolved": "https://registry.npmjs.org/bs58check/-/bs58check-2.1.2.tgz", + "integrity": "sha512-0TS1jicxdU09dwJMNZtVAfzPi6Q6QeN0pM1Fkzrjn+XYHvzMKPU3pHVpva+769iNVSfIYWf7LJ6WR+BuuMf8cA==", "license": "MIT", "dependencies": { "bs58": "^4.0.0", @@ -6835,22 +7038,10 @@ "safe-buffer": "^5.1.2" } }, - "node_modules/bs58check/node_modules/base-x": { - "version": "3.0.9", - "license": "MIT", - "dependencies": { - "safe-buffer": "^5.0.1" - } - }, - "node_modules/bs58check/node_modules/bs58": { - "version": "4.0.1", - "license": "MIT", - "dependencies": { - "base-x": "^3.0.2" - } - }, "node_modules/bser": { "version": "2.1.1", + "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": { @@ -6859,6 +7050,8 @@ }, "node_modules/buffer": { "version": "5.7.1", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", + "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", "dev": true, "funding": [ { @@ -6882,35 +7075,29 @@ }, "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/buffer-xor": { "version": "1.0.3", + "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz", + "integrity": "sha512-571s0T7nZWK6vB67HI5dyUF7wXiNcfaPPPTl6zYCNApANjIvYJTg7hlud/+cJpdAhS7dVzqMLmfhfHR3rAcOjQ==", "dev": true, "license": "MIT" }, "node_modules/builtin-status-codes": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz", + "integrity": "sha512-HpGFw18DgFWlncDfjTa2rcQ4W88O1mC8e8yZ2AvQY5KDaktSTwo+KRf6nHK6FRI5FyRyb/5T6+TSxfP7QyGsmQ==", "dev": true, "license": "MIT" }, - "node_modules/bundle-name": { - "version": "3.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "run-applescript": "^5.0.0" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/byte-size": { "version": "8.1.1", + "resolved": "https://registry.npmjs.org/byte-size/-/byte-size-8.1.1.tgz", + "integrity": "sha512-tUkzZWK0M/qdoLEqikxBWe4kumyuwjl3HO6zHTr4yEI23EojPtLYXdG1+AQY7MN0cGyNDvEaJ8wiYQm6P2bPxg==", "dev": true, "license": "MIT", "engines": { @@ -6919,6 +7106,8 @@ }, "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" @@ -6926,6 +7115,8 @@ }, "node_modules/c32check": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/c32check/-/c32check-2.0.0.tgz", + "integrity": "sha512-rpwfAcS/CMqo0oCqDf3r9eeLgScRE3l/xHDCXhM3UyrfvIn7PrLq63uHh7yYbv8NzaZn5MVsVhIRpQ+5GZ5HyA==", "license": "MIT", "dependencies": { "@noble/hashes": "^1.1.2", @@ -6935,6 +7126,12 @@ "node": ">=8" } }, + "node_modules/c32check/node_modules/base-x": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/base-x/-/base-x-4.0.0.tgz", + "integrity": "sha512-FuwxlW4H5kh37X/oW59pwTzzTKRzfrrQwhmyspRM7swOEZcHtDZSCt45U6oKgtuFE+WYPblePMVIPR4RZrh/hw==", + "license": "MIT" + }, "node_modules/cac": { "version": "6.7.14", "resolved": "https://registry.npmjs.org/cac/-/cac-6.7.14.tgz", @@ -6946,7 +7143,9 @@ } }, "node_modules/cacache": { - "version": "18.0.3", + "version": "18.0.4", + "resolved": "https://registry.npmjs.org/cacache/-/cacache-18.0.4.tgz", + "integrity": "sha512-B+L5iIa9mgcjLbliir2th36yEwPftrzteHYujzsx3dFP/31GCHcIeS8f5MGd80odLOjaOvSpU3EEAmRQptkxLQ==", "dev": true, "license": "ISC", "dependencies": { @@ -6967,16 +7166,10 @@ "node": "^16.14.0 || >=18.0.0" } }, - "node_modules/cacache/node_modules/brace-expansion": { - "version": "2.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0" - } - }, "node_modules/cacache/node_modules/glob": { - "version": "10.4.3", + "version": "10.4.5", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz", + "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==", "dev": true, "license": "ISC", "dependencies": { @@ -6990,40 +7183,21 @@ "bin": { "glob": "dist/esm/bin.mjs" }, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/cacache/node_modules/jackspeak": { - "version": "3.4.1", - "dev": true, - "license": "BlueOak-1.0.0", - "dependencies": { - "@isaacs/cliui": "^8.0.2" - }, - "engines": { - "node": ">=18" - }, "funding": { "url": "https://github.com/sponsors/isaacs" - }, - "optionalDependencies": { - "@pkgjs/parseargs": "^0.11.0" } }, "node_modules/cacache/node_modules/lru-cache": { - "version": "10.4.0", + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", "dev": true, - "license": "ISC", - "engines": { - "node": ">=18" - } + "license": "ISC" }, "node_modules/cacache/node_modules/minimatch": { "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", "dev": true, "license": "ISC", "dependencies": { @@ -7036,20 +7210,20 @@ "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/cacache/node_modules/minipass": { - "version": "7.1.2", - "dev": true, - "license": "ISC", - "engines": { - "node": ">=16 || 14 >=14.17" - } - }, "node_modules/call-bind": { - "version": "1.0.2", + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.7.tgz", + "integrity": "sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==", "license": "MIT", "dependencies": { - "function-bind": "^1.1.1", - "get-intrinsic": "^1.0.2" + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.4", + "set-function-length": "^1.2.1" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -7057,6 +7231,8 @@ }, "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": { @@ -7065,6 +7241,8 @@ }, "node_modules/camelcase": { "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", "dev": true, "license": "MIT", "engines": { @@ -7073,6 +7251,8 @@ }, "node_modules/camelcase-keys": { "version": "6.2.2", + "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-6.2.2.tgz", + "integrity": "sha512-YrwaA0vEKazPBkn0ipTiMpSajYDSe+KjQfrjhcBMxJt/znbvlHd8Pw/Vamaz5EB4Wfhs3SUR3Z9mwRu/P3s3Yg==", "dev": true, "license": "MIT", "dependencies": { @@ -7088,7 +7268,9 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001519", + "version": "1.0.30001680", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001680.tgz", + "integrity": "sha512-rPQy70G6AGUMnbwS1z6Xg+RkHYPAi18ihs47GH0jcxIG7wArmPgY3XbS2sRdBbxJljp3thdT8BIqv9ccCypiPA==", "dev": true, "funding": [ { @@ -7108,51 +7290,47 @@ }, "node_modules/caseless": { "version": "0.12.0", + "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", + "integrity": "sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw==", "license": "Apache-2.0" }, "node_modules/chai": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/chai/-/chai-4.5.0.tgz", - "integrity": "sha512-RITGBfijLkBddZvnn8jdqoTypxvqbOLYQkGGxXzeFjVHvudaPw0HNFD9x928/eUwYWd2dPCugVqspGALTZZQKw==", + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/chai/-/chai-5.1.2.tgz", + "integrity": "sha512-aGtmf24DW6MLHHG5gCx4zaI3uBq3KRtxeVs0DjFH6Z0rDNbsvTxFASFvdj79pxjxZ8/5u3PIiN3IwEIQkiiuPw==", "dev": true, "license": "MIT", "dependencies": { - "assertion-error": "^1.1.0", - "check-error": "^1.0.3", - "deep-eql": "^4.1.3", - "get-func-name": "^2.0.2", - "loupe": "^2.3.6", - "pathval": "^1.1.1", - "type-detect": "^4.1.0" + "assertion-error": "^2.0.1", + "check-error": "^2.1.1", + "deep-eql": "^5.0.1", + "loupe": "^3.1.0", + "pathval": "^2.0.0" }, "engines": { - "node": ">=4" - } - }, - "node_modules/chai/node_modules/type-detect": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.1.0.tgz", - "integrity": "sha512-Acylog8/luQ8L7il+geoSxhEkazvkslg7PSNKOX59mbB9cOveP5aq9h74Y7YU8yDpJwetzQQrfIwtf4Wp4LKcw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=4" + "node": ">=12" } }, "node_modules/chalk": { - "version": "2.4.2", + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "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/char-regex": { "version": "1.0.2", + "resolved": "https://registry.npmjs.org/char-regex/-/char-regex-1.0.2.tgz", + "integrity": "sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==", "dev": true, "license": "MIT", "engines": { @@ -7161,23 +7339,24 @@ }, "node_modules/chardet": { "version": "0.7.0", + "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz", + "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==", "license": "MIT" }, "node_modules/check-error": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/check-error/-/check-error-1.0.3.tgz", - "integrity": "sha512-iKEoDYaRmd1mxM90a2OEfWhjsjPpYPuQ+lMYsoxB126+t8fw7ySEO48nmDg5COTjxDI65/Y2OWpeEHk3ZOe8zg==", + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/check-error/-/check-error-2.1.1.tgz", + "integrity": "sha512-OAlb+T7V4Op9OwdkjmguYRqncdlx5JiofwOAUkmTF+jNdHwzTaTs4sRAGpzLF3oOz5xAyDGrPgeIDFQmDOTiJw==", "dev": true, "license": "MIT", - "dependencies": { - "get-func-name": "^2.0.2" - }, "engines": { - "node": "*" + "node": ">= 16" } }, "node_modules/cheerio": { "version": "0.22.0", + "resolved": "https://registry.npmjs.org/cheerio/-/cheerio-0.22.0.tgz", + "integrity": "sha512-8/MzidM6G/TgRelkzDG13y3Y9LxBjCb+8yOEZ9+wwq5gVF2w2pV0wmHvjfT0RvuxGyR7UEuK36r+yYMbT4uKgA==", "license": "MIT", "dependencies": { "css-select": "~1.2.0", @@ -7203,6 +7382,8 @@ }, "node_modules/chownr": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", + "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==", "dev": true, "license": "ISC", "engines": { @@ -7210,7 +7391,9 @@ } }, "node_modules/chrome-trace-event": { - "version": "1.0.3", + "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": { @@ -7218,7 +7401,9 @@ } }, "node_modules/ci-info": { - "version": "3.8.0", + "version": "3.9.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.9.0.tgz", + "integrity": "sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==", "dev": true, "funding": [ { @@ -7232,20 +7417,29 @@ } }, "node_modules/cipher-base": { - "version": "1.0.4", + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.5.tgz", + "integrity": "sha512-xq7ICKB4TMHUx7Tz1L9O2SGKOhYMOTR32oir45Bq28/AQTpHogKgHcoYFSdRbMtddl+ozNXfXY9jWcgYKmde0w==", "license": "MIT", "dependencies": { - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" + "inherits": "^2.0.4", + "safe-buffer": "^5.2.1" + }, + "engines": { + "node": ">= 0.10" } }, "node_modules/cjs-module-lexer": { - "version": "1.2.3", + "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, "license": "MIT" }, "node_modules/clean-stack": { "version": "2.2.0", + "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", + "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", "dev": true, "license": "MIT", "engines": { @@ -7254,6 +7448,8 @@ }, "node_modules/cli-cursor": { "version": "3.1.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", + "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", "license": "MIT", "dependencies": { "restore-cursor": "^3.1.0" @@ -7264,6 +7460,8 @@ }, "node_modules/cli-spinners": { "version": "2.6.1", + "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.6.1.tgz", + "integrity": "sha512-x/5fWmGMnbKQAaNwN+UZlV79qBLM9JFnJuJ03gIi5whrob0xV0ofNVHy9DhwGdsMJQc2OKv0oGmLzvaqvAVv+g==", "dev": true, "license": "MIT", "engines": { @@ -7275,23 +7473,50 @@ }, "node_modules/cli-width": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-3.0.0.tgz", + "integrity": "sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw==", "license": "ISC", "engines": { "node": ">= 10" } }, "node_modules/cliui": { - "version": "7.0.4", + "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.0", + "strip-ansi": "^6.0.1", "wrap-ansi": "^7.0.0" - } + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/cliui/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", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } }, "node_modules/clone": { "version": "1.0.4", + "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", + "integrity": "sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==", "dev": true, "license": "MIT", "engines": { @@ -7300,6 +7525,8 @@ }, "node_modules/clone-deep": { "version": "4.0.1", + "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz", + "integrity": "sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==", "dev": true, "license": "MIT", "dependencies": { @@ -7313,6 +7540,8 @@ }, "node_modules/clone-deep/node_modules/is-plain-object": { "version": "2.0.4", + "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": { @@ -7324,6 +7553,8 @@ }, "node_modules/cmd-shim": { "version": "6.0.3", + "resolved": "https://registry.npmjs.org/cmd-shim/-/cmd-shim-6.0.3.tgz", + "integrity": "sha512-FMabTRlc5t5zjdenF6mS0MBeFZm0XqHqeOkcskKFb/LYCcRQ5fVgLOHVc4Lq9CqABd9zhjwPjMBCJvMCziSVtA==", "dev": true, "license": "ISC", "engines": { @@ -7332,6 +7563,8 @@ }, "node_modules/co": { "version": "4.6.0", + "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", + "integrity": "sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==", "dev": true, "license": "MIT", "engines": { @@ -7341,11 +7574,15 @@ }, "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, "license": "MIT" }, "node_modules/color": { "version": "3.2.1", + "resolved": "https://registry.npmjs.org/color/-/color-3.2.1.tgz", + "integrity": "sha512-aBl7dZI9ENN6fUGC7mWpMTPNHmWUSNan9tuWN6ahh5ZLNk9baLJOnSMlrQkHcrfFgz2/RigjUVAjdx36VcemKA==", "license": "MIT", "dependencies": { "color-convert": "^1.9.3", @@ -7353,18 +7590,27 @@ } }, "node_modules/color-convert": { - "version": "1.9.3", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "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", + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "license": "MIT" }, "node_modules/color-string": { "version": "1.9.1", + "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.9.1.tgz", + "integrity": "sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg==", "license": "MIT", "dependencies": { "color-name": "^1.0.0", @@ -7373,19 +7619,40 @@ }, "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, "license": "ISC", "bin": { "color-support": "bin.js" } }, + "node_modules/color/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==", + "license": "MIT", + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/color/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==", + "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, "license": "MIT" }, "node_modules/colorspace": { "version": "1.1.4", + "resolved": "https://registry.npmjs.org/colorspace/-/colorspace-1.1.4.tgz", + "integrity": "sha512-BgvKJiuVu1igBUF2kEjRCZXol6wiiGbY5ipL/oVPwm0BL9sIpMIzM8IK7vwuxIIzOXMV3Ey5w+vxhm0rR/TN8w==", "license": "MIT", "dependencies": { "color": "^3.1.3", @@ -7394,6 +7661,8 @@ }, "node_modules/columnify": { "version": "1.6.0", + "resolved": "https://registry.npmjs.org/columnify/-/columnify-1.6.0.tgz", + "integrity": "sha512-lomjuFZKfM6MSAnV9aCZC9sc0qGbmZdfygNv+nCpqVkSKdCxCklLtd16O0EILGkImHw9ZpHkAnHaB+8Zxq5W6Q==", "dev": true, "license": "MIT", "dependencies": { @@ -7406,6 +7675,8 @@ }, "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==", "license": "MIT", "dependencies": { "delayed-stream": "~1.0.0" @@ -7416,6 +7687,8 @@ }, "node_modules/commander": { "version": "7.2.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", + "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", "dev": true, "license": "MIT", "engines": { @@ -7424,11 +7697,15 @@ }, "node_modules/common-ancestor-path": { "version": "1.0.1", + "resolved": "https://registry.npmjs.org/common-ancestor-path/-/common-ancestor-path-1.0.1.tgz", + "integrity": "sha512-L3sHRo1pXXEqX8VU28kfgUY+YGsk09hPqZiZmLacNib6XNTCM8ubYeT7ryXQw8asB1sKgcU5lkB7ONug08aB8w==", "dev": true, "license": "ISC" }, "node_modules/common-tags": { "version": "1.8.2", + "resolved": "https://registry.npmjs.org/common-tags/-/common-tags-1.8.2.tgz", + "integrity": "sha512-gk/Z852D2Wtb//0I+kRFNKKE9dIIVirjoqPoA1wJU+XePVXZfGeBpk45+A1rKO4Q43prqWBNY/MiIeRLbPWUaA==", "dev": true, "license": "MIT", "engines": { @@ -7437,11 +7714,15 @@ }, "node_modules/commondir": { "version": "1.0.1", + "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", + "integrity": "sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==", "dev": true, "license": "MIT" }, "node_modules/compare-func": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/compare-func/-/compare-func-2.0.0.tgz", + "integrity": "sha512-zHig5N+tPWARooBnb0Zx1MFcdfpyJrfTJ3Y5L+IFvUm8rM74hHz66z0gw0x4tijh5CorKkKUCnW82R2vmpeCRA==", "dev": true, "license": "MIT", "dependencies": { @@ -7451,11 +7732,15 @@ }, "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, "license": "MIT" }, "node_modules/concat-stream": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-2.0.0.tgz", + "integrity": "sha512-MWufYdFw53ccGjCA+Ol7XJYpAlW6/prSMzuPOTRnJGcGzuhLn4Scrz7qf6o8bROZ514ltazcIFJZevcfbo0x7A==", "dev": true, "engines": [ "node >= 6.0" @@ -7468,20 +7753,17 @@ "typedarray": "^0.0.6" } }, - "node_modules/confbox": { - "version": "0.1.8", - "resolved": "https://registry.npmjs.org/confbox/-/confbox-0.1.8.tgz", - "integrity": "sha512-RMtmw0iFkeR4YV+fUOSucriAQNb9g8zFR52MWCtl+cCZOFRNL6zeB395vPzFhEjjn4fMxXudmELnl/KF/WrK6w==", - "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, "license": "ISC" }, "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" @@ -7492,6 +7774,8 @@ }, "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" @@ -7499,6 +7783,8 @@ }, "node_modules/conventional-changelog-angular": { "version": "6.0.0", + "resolved": "https://registry.npmjs.org/conventional-changelog-angular/-/conventional-changelog-angular-6.0.0.tgz", + "integrity": "sha512-6qLgrBF4gueoC7AFVHu51nHL9pF9FRjXrH+ceVf7WmAfH3gs+gEYOkvxhjMPjZu57I4AGUGoNTY8V7Hrgf1uqg==", "dev": true, "license": "ISC", "dependencies": { @@ -7510,6 +7796,8 @@ }, "node_modules/conventional-changelog-conventionalcommits": { "version": "6.1.0", + "resolved": "https://registry.npmjs.org/conventional-changelog-conventionalcommits/-/conventional-changelog-conventionalcommits-6.1.0.tgz", + "integrity": "sha512-3cS3GEtR78zTfMzk0AizXKKIdN4OvSh7ibNz6/DPbhWWQu7LqE/8+/GqSodV+sywUR2gpJAdP/1JFf4XtN7Zpw==", "dev": true, "license": "ISC", "dependencies": { @@ -7521,6 +7809,8 @@ }, "node_modules/conventional-changelog-core": { "version": "5.0.1", + "resolved": "https://registry.npmjs.org/conventional-changelog-core/-/conventional-changelog-core-5.0.1.tgz", + "integrity": "sha512-Rvi5pH+LvgsqGwZPZ3Cq/tz4ty7mjijhr3qR4m9IBXNbxGGYgTVVO+duXzz9aArmHxFtwZ+LRkrNIMDQzgoY4A==", "dev": true, "license": "MIT", "dependencies": { @@ -7540,20 +7830,10 @@ "node": ">=14" } }, - "node_modules/conventional-changelog-core/node_modules/find-up": { - "version": "4.1.0", - "dev": true, - "license": "MIT", - "dependencies": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/conventional-changelog-core/node_modules/git-raw-commits": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/git-raw-commits/-/git-raw-commits-3.0.0.tgz", + "integrity": "sha512-b5OHmZ3vAgGrDn/X0kS+9qCfNKWe4K/jFnhwzVWWg0/k5eLa3060tZShrRg8Dja5kPc+YjS0Gc6y7cRr44Lpjw==", "dev": true, "license": "MIT", "dependencies": { @@ -7569,134 +7849,58 @@ } }, "node_modules/conventional-changelog-core/node_modules/hosted-git-info": { - "version": "2.8.9", - "dev": true, - "license": "ISC" - }, - "node_modules/conventional-changelog-core/node_modules/locate-path": { - "version": "5.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "p-locate": "^4.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/conventional-changelog-core/node_modules/meow": { - "version": "8.1.2", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.1.0.tgz", + "integrity": "sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==", "dev": true, - "license": "MIT", + "license": "ISC", "dependencies": { - "@types/minimist": "^1.2.0", - "camelcase-keys": "^6.2.2", - "decamelize-keys": "^1.1.0", - "hard-rejection": "^2.1.0", - "minimist-options": "4.1.0", - "normalize-package-data": "^3.0.0", - "read-pkg-up": "^7.0.1", - "redent": "^3.0.0", - "trim-newlines": "^3.0.0", - "type-fest": "^0.18.0", - "yargs-parser": "^20.2.3" + "lru-cache": "^6.0.0" }, "engines": { "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/conventional-changelog-core/node_modules/meow/node_modules/read-pkg": { - "version": "5.2.0", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/normalize-package-data": "^2.4.0", - "normalize-package-data": "^2.5.0", - "parse-json": "^5.0.0", - "type-fest": "^0.6.0" - }, - "engines": { - "node": ">=8" } }, - "node_modules/conventional-changelog-core/node_modules/meow/node_modules/read-pkg-up": { - "version": "7.0.1", + "node_modules/conventional-changelog-core/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": "MIT", + "license": "ISC", "dependencies": { - "find-up": "^4.1.0", - "read-pkg": "^5.2.0", - "type-fest": "^0.8.1" - }, - "engines": { - "node": ">=8" + "yallist": "^4.0.0" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/conventional-changelog-core/node_modules/meow/node_modules/read-pkg-up/node_modules/type-fest": { - "version": "0.8.1", - "dev": true, - "license": "(MIT OR CC0-1.0)", "engines": { - "node": ">=8" + "node": ">=10" } }, - "node_modules/conventional-changelog-core/node_modules/meow/node_modules/read-pkg/node_modules/normalize-package-data": { - "version": "2.5.0", + "node_modules/conventional-changelog-core/node_modules/normalize-package-data": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-3.0.3.tgz", + "integrity": "sha512-p2W1sgqij3zMMyRC067Dg16bfzVH+w7hyegmpIvZ4JNjqtGOVAIvLmjBx3yP7YTe9vKJgkoNOPjwQGogDoMXFA==", "dev": true, "license": "BSD-2-Clause", "dependencies": { - "hosted-git-info": "^2.1.4", - "resolve": "^1.10.0", - "semver": "2 || 3 || 4 || 5", + "hosted-git-info": "^4.0.1", + "is-core-module": "^2.5.0", + "semver": "^7.3.4", "validate-npm-package-license": "^3.0.1" - } - }, - "node_modules/conventional-changelog-core/node_modules/meow/node_modules/read-pkg/node_modules/type-fest": { - "version": "0.6.0", - "dev": true, - "license": "(MIT OR CC0-1.0)", - "engines": { - "node": ">=8" - } - }, - "node_modules/conventional-changelog-core/node_modules/p-locate": { - "version": "4.1.0", - "dev": true, - "license": "MIT", - "dependencies": { - "p-limit": "^2.2.0" }, "engines": { - "node": ">=8" - } - }, - "node_modules/conventional-changelog-core/node_modules/semver": { - "version": "5.7.2", - "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver" + "node": ">=10" } }, - "node_modules/conventional-changelog-core/node_modules/type-fest": { - "version": "0.18.1", + "node_modules/conventional-changelog-core/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": "(MIT OR CC0-1.0)", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } + "license": "ISC" }, "node_modules/conventional-changelog-preset-loader": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/conventional-changelog-preset-loader/-/conventional-changelog-preset-loader-3.0.0.tgz", + "integrity": "sha512-qy9XbdSLmVnwnvzEisjxdDiLA4OmV3o8db+Zdg4WiFw14fP3B6XNz98X0swPPpkTd/pc1K7+adKgEDM1JCUMiA==", "dev": true, "license": "MIT", "engines": { @@ -7705,6 +7909,8 @@ }, "node_modules/conventional-changelog-writer": { "version": "6.0.1", + "resolved": "https://registry.npmjs.org/conventional-changelog-writer/-/conventional-changelog-writer-6.0.1.tgz", + "integrity": "sha512-359t9aHorPw+U+nHzUXHS5ZnPBOizRxfQsWT5ZDHBfvfxQOAik+yfuhKXG66CN5LEWPpMNnIMHUTCKeYNprvHQ==", "dev": true, "license": "MIT", "dependencies": { @@ -7723,2699 +7929,3338 @@ "node": ">=14" } }, - "node_modules/conventional-changelog-writer/node_modules/find-up": { - "version": "4.1.0", + "node_modules/conventional-commits-filter": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/conventional-commits-filter/-/conventional-commits-filter-3.0.0.tgz", + "integrity": "sha512-1ymej8b5LouPx9Ox0Dw/qAO2dVdfpRFq28e5Y0jJEU8ZrLdy0vOSkkIInwmxErFGhg6SALro60ZrwYFVTUDo4Q==", "dev": true, "license": "MIT", "dependencies": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" + "lodash.ismatch": "^4.4.0", + "modify-values": "^1.0.1" }, "engines": { - "node": ">=8" + "node": ">=14" } }, - "node_modules/conventional-changelog-writer/node_modules/hosted-git-info": { - "version": "2.8.9", - "dev": true, - "license": "ISC" - }, - "node_modules/conventional-changelog-writer/node_modules/locate-path": { - "version": "5.0.0", + "node_modules/conventional-commits-parser": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/conventional-commits-parser/-/conventional-commits-parser-4.0.0.tgz", + "integrity": "sha512-WRv5j1FsVM5FISJkoYMR6tPk07fkKT0UodruX4je86V4owk451yjXAKzKAPOs9l7y59E2viHUS9eQ+dfUA9NSg==", "dev": true, "license": "MIT", "dependencies": { - "p-locate": "^4.1.0" + "is-text-path": "^1.0.1", + "JSONStream": "^1.3.5", + "meow": "^8.1.2", + "split2": "^3.2.2" + }, + "bin": { + "conventional-commits-parser": "cli.js" }, "engines": { - "node": ">=8" + "node": ">=14" } }, - "node_modules/conventional-changelog-writer/node_modules/meow": { - "version": "8.1.2", + "node_modules/conventional-recommended-bump": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/conventional-recommended-bump/-/conventional-recommended-bump-7.0.1.tgz", + "integrity": "sha512-Ft79FF4SlOFvX4PkwFDRnaNiIVX7YbmqGU0RwccUaiGvgp3S0a8ipR2/Qxk31vclDNM+GSdJOVs2KrsUCjblVA==", "dev": true, "license": "MIT", "dependencies": { - "@types/minimist": "^1.2.0", - "camelcase-keys": "^6.2.2", - "decamelize-keys": "^1.1.0", - "hard-rejection": "^2.1.0", - "minimist-options": "4.1.0", - "normalize-package-data": "^3.0.0", - "read-pkg-up": "^7.0.1", - "redent": "^3.0.0", - "trim-newlines": "^3.0.0", - "type-fest": "^0.18.0", - "yargs-parser": "^20.2.3" + "concat-stream": "^2.0.0", + "conventional-changelog-preset-loader": "^3.0.0", + "conventional-commits-filter": "^3.0.0", + "conventional-commits-parser": "^4.0.0", + "git-raw-commits": "^3.0.0", + "git-semver-tags": "^5.0.0", + "meow": "^8.1.2" }, - "engines": { - "node": ">=10" + "bin": { + "conventional-recommended-bump": "cli.js" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "engines": { + "node": ">=14" } }, - "node_modules/conventional-changelog-writer/node_modules/p-locate": { - "version": "4.1.0", + "node_modules/conventional-recommended-bump/node_modules/git-raw-commits": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/git-raw-commits/-/git-raw-commits-3.0.0.tgz", + "integrity": "sha512-b5OHmZ3vAgGrDn/X0kS+9qCfNKWe4K/jFnhwzVWWg0/k5eLa3060tZShrRg8Dja5kPc+YjS0Gc6y7cRr44Lpjw==", "dev": true, "license": "MIT", "dependencies": { - "p-limit": "^2.2.0" + "dargs": "^7.0.0", + "meow": "^8.1.2", + "split2": "^3.2.2" + }, + "bin": { + "git-raw-commits": "cli.js" }, "engines": { - "node": ">=8" + "node": ">=14" } }, - "node_modules/conventional-changelog-writer/node_modules/read-pkg": { - "version": "5.2.0", + "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/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/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==", + "license": "MIT" + }, + "node_modules/cors": { + "version": "2.8.5", + "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz", + "integrity": "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==", "license": "MIT", "dependencies": { - "@types/normalize-package-data": "^2.4.0", - "normalize-package-data": "^2.5.0", - "parse-json": "^5.0.0", - "type-fest": "^0.6.0" + "object-assign": "^4", + "vary": "^1" }, "engines": { - "node": ">=8" + "node": ">= 0.10" } }, - "node_modules/conventional-changelog-writer/node_modules/read-pkg-up": { - "version": "7.0.1", + "node_modules/cosmiconfig": { + "version": "8.3.6", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-8.3.6.tgz", + "integrity": "sha512-kcZ6+W5QzcJ3P1Mt+83OUv/oHFqZHIx8DuxG6eZ5RGMERoLqp4BuGjhHLYGK+Kf5XVkQvqBSmAy/nGWN3qDgEA==", "dev": true, "license": "MIT", "dependencies": { - "find-up": "^4.1.0", - "read-pkg": "^5.2.0", - "type-fest": "^0.8.1" + "import-fresh": "^3.3.0", + "js-yaml": "^4.1.0", + "parse-json": "^5.2.0", + "path-type": "^4.0.0" }, "engines": { - "node": ">=8" + "node": ">=14" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/sponsors/d-fischer" + }, + "peerDependencies": { + "typescript": ">=4.9.5" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } } }, - "node_modules/conventional-changelog-writer/node_modules/read-pkg-up/node_modules/type-fest": { - "version": "0.8.1", + "node_modules/cosmiconfig-typescript-loader": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/cosmiconfig-typescript-loader/-/cosmiconfig-typescript-loader-4.4.0.tgz", + "integrity": "sha512-BabizFdC3wBHhbI4kJh0VkQP9GkBfoHPydD0COMce1nJ1kJAB3F2TmJ/I7diULBKtmEWSwEbuN/KDtgnmUUVmw==", "dev": true, - "license": "(MIT OR CC0-1.0)", + "license": "MIT", "engines": { - "node": ">=8" + "node": ">=v14.21.3" + }, + "peerDependencies": { + "@types/node": "*", + "cosmiconfig": ">=7", + "ts-node": ">=10", + "typescript": ">=4" } }, - "node_modules/conventional-changelog-writer/node_modules/read-pkg/node_modules/normalize-package-data": { - "version": "2.5.0", + "node_modules/cosmiconfig/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": "BSD-2-Clause", - "dependencies": { - "hosted-git-info": "^2.1.4", - "resolve": "^1.10.0", - "semver": "2 || 3 || 4 || 5", - "validate-npm-package-license": "^3.0.1" - } + "license": "Python-2.0" }, - "node_modules/conventional-changelog-writer/node_modules/read-pkg/node_modules/semver": { - "version": "5.7.2", + "node_modules/cosmiconfig/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==", "dev": true, - "license": "ISC", + "license": "MIT", + "dependencies": { + "argparse": "^2.0.1" + }, "bin": { - "semver": "bin/semver" + "js-yaml": "bin/js-yaml.js" } }, - "node_modules/conventional-changelog-writer/node_modules/read-pkg/node_modules/type-fest": { - "version": "0.6.0", + "node_modules/create-ecdh": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.4.tgz", + "integrity": "sha512-mf+TCx8wWc9VpuxfP2ht0iSISLZnt0JgWlrOKZiNqyUZWnjIaCIVNQArMHnCZKfEYRg6IM7A+NeJoN8gf/Ws0A==", "dev": true, - "license": "(MIT OR CC0-1.0)", - "engines": { - "node": ">=8" + "license": "MIT", + "dependencies": { + "bn.js": "^4.1.0", + "elliptic": "^6.5.3" } }, - "node_modules/conventional-changelog-writer/node_modules/type-fest": { - "version": "0.18.1", - "dev": true, - "license": "(MIT OR CC0-1.0)", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node_modules/create-hash": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz", + "integrity": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==", + "license": "MIT", + "dependencies": { + "cipher-base": "^1.0.1", + "inherits": "^2.0.1", + "md5.js": "^1.3.4", + "ripemd160": "^2.0.1", + "sha.js": "^2.4.0" } }, - "node_modules/conventional-commits-filter": { - "version": "3.0.0", - "dev": true, + "node_modules/create-hmac": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz", + "integrity": "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==", "license": "MIT", "dependencies": { - "lodash.ismatch": "^4.4.0", - "modify-values": "^1.0.1" - }, - "engines": { - "node": ">=14" + "cipher-base": "^1.0.3", + "create-hash": "^1.1.0", + "inherits": "^2.0.1", + "ripemd160": "^2.0.0", + "safe-buffer": "^5.0.1", + "sha.js": "^2.4.8" } }, - "node_modules/conventional-commits-parser": { - "version": "4.0.0", + "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": { - "is-text-path": "^1.0.1", - "JSONStream": "^1.3.5", - "meow": "^8.1.2", - "split2": "^3.2.2" + "@jest/types": "^29.6.3", + "chalk": "^4.0.0", + "exit": "^0.1.2", + "graceful-fs": "^4.2.9", + "jest-config": "^29.7.0", + "jest-util": "^29.7.0", + "prompts": "^2.0.1" }, "bin": { - "conventional-commits-parser": "cli.js" + "create-jest": "bin/create-jest.js" }, "engines": { - "node": ">=14" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/conventional-commits-parser/node_modules/find-up": { - "version": "4.1.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, + "license": "MIT" + }, + "node_modules/cross-fetch": { + "version": "3.1.8", + "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-3.1.8.tgz", + "integrity": "sha512-cvA+JwZoU0Xq+h6WkMvAUqPEYy92Obet6UdKLfW60qn99ftItKjB5T+BkyWOFWe2pUyfQ+IJHmpOTznqk1M6Kg==", "license": "MIT", "dependencies": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=8" + "node-fetch": "^2.6.12" } }, - "node_modules/conventional-commits-parser/node_modules/hosted-git-info": { - "version": "2.8.9", - "dev": true, - "license": "ISC" - }, - "node_modules/conventional-commits-parser/node_modules/locate-path": { - "version": "5.0.0", + "node_modules/cross-spawn": { + "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": { - "p-locate": "^4.1.0" + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" }, "engines": { - "node": ">=8" + "node": ">= 8" } }, - "node_modules/conventional-commits-parser/node_modules/meow": { - "version": "8.1.2", + "node_modules/crypto-browserify": { + "version": "3.12.1", + "resolved": "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-3.12.1.tgz", + "integrity": "sha512-r4ESw/IlusD17lgQi1O20Fa3qNnsckR126TdUuBgAu7GBYSIPvdNyONd3Zrxh0xCwA4+6w/TDArBPsMvhur+KQ==", "dev": true, "license": "MIT", "dependencies": { - "@types/minimist": "^1.2.0", - "camelcase-keys": "^6.2.2", - "decamelize-keys": "^1.1.0", - "hard-rejection": "^2.1.0", - "minimist-options": "4.1.0", - "normalize-package-data": "^3.0.0", - "read-pkg-up": "^7.0.1", - "redent": "^3.0.0", - "trim-newlines": "^3.0.0", - "type-fest": "^0.18.0", - "yargs-parser": "^20.2.3" + "browserify-cipher": "^1.0.1", + "browserify-sign": "^4.2.3", + "create-ecdh": "^4.0.4", + "create-hash": "^1.2.0", + "create-hmac": "^1.1.7", + "diffie-hellman": "^5.0.3", + "hash-base": "~3.0.4", + "inherits": "^2.0.4", + "pbkdf2": "^3.1.2", + "public-encrypt": "^4.0.3", + "randombytes": "^2.1.0", + "randomfill": "^1.0.4" }, "engines": { - "node": ">=10" + "node": ">= 0.10" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/conventional-commits-parser/node_modules/p-locate": { - "version": "4.1.0", - "dev": true, - "license": "MIT", + "node_modules/css-select": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-1.2.0.tgz", + "integrity": "sha512-dUQOBoqdR7QwV90WysXPLXG5LO7nhYBgiWVfxF80DKPF8zx1t/pUd2FYy73emg3zrjtM6dzmYgbHKfV2rxiHQA==", + "license": "BSD-like", "dependencies": { - "p-limit": "^2.2.0" - }, + "boolbase": "~1.0.0", + "css-what": "2.1", + "domutils": "1.5.1", + "nth-check": "~1.0.1" + } + }, + "node_modules/css-what": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/css-what/-/css-what-2.1.3.tgz", + "integrity": "sha512-a+EPoD+uZiNfh+5fxw2nO9QwFa6nJe2Or35fGY6Ipw1R3R4AGz1d1TEZrCegvw2YTmZ0jXirGYlzxxpYSHwpEg==", + "license": "BSD-2-Clause", "engines": { - "node": ">=8" + "node": "*" } }, - "node_modules/conventional-commits-parser/node_modules/read-pkg": { - "version": "5.2.0", + "node_modules/cssesc": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", + "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", "dev": true, "license": "MIT", - "dependencies": { - "@types/normalize-package-data": "^2.4.0", - "normalize-package-data": "^2.5.0", - "parse-json": "^5.0.0", - "type-fest": "^0.6.0" + "bin": { + "cssesc": "bin/cssesc" }, "engines": { - "node": ">=8" + "node": ">=4" } }, - "node_modules/conventional-commits-parser/node_modules/read-pkg-up": { - "version": "7.0.1", + "node_modules/cssom": { + "version": "0.4.4", + "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.4.4.tgz", + "integrity": "sha512-p3pvU7r1MyyqbTk+WbNJIgJjG2VmTIaB10rI93LzVPrmDJKkzKYMtxxyAvQXR/NS6otuzveI7+7BBq3SjBS2mw==", + "dev": true, + "license": "MIT" + }, + "node_modules/cssstyle": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-2.3.0.tgz", + "integrity": "sha512-AZL67abkUzIuvcHqk7c09cezpGNcxUxU4Ioi/05xHk4DQeTkWmGYftIE6ctU6AEt+Gn4n1lDStOtj7FKycP71A==", "dev": true, "license": "MIT", "dependencies": { - "find-up": "^4.1.0", - "read-pkg": "^5.2.0", - "type-fest": "^0.8.1" + "cssom": "~0.3.6" }, "engines": { "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/conventional-commits-parser/node_modules/read-pkg-up/node_modules/type-fest": { - "version": "0.8.1", + "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, - "license": "(MIT OR CC0-1.0)", + "license": "MIT" + }, + "node_modules/dargs": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/dargs/-/dargs-7.0.0.tgz", + "integrity": "sha512-2iy1EkLdlBzQGvbweYRFxmFath8+K7+AKB0TlhHWkNuH+TmovaMH/Wp7V7R4u7f4SnX3OgLsU9t1NI9ioDnUpg==", + "dev": true, + "license": "MIT", "engines": { "node": ">=8" } }, - "node_modules/conventional-commits-parser/node_modules/read-pkg/node_modules/normalize-package-data": { - "version": "2.5.0", - "dev": true, - "license": "BSD-2-Clause", + "node_modules/dashdash": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", + "integrity": "sha512-jRFi8UDGo6j+odZiEpjazZaWqEal3w/basFjQHQEwVtZJGDpxbH1MeYluwCS8Xq5wmLJooDlMgvVarmWfGM44g==", + "license": "MIT", "dependencies": { - "hosted-git-info": "^2.1.4", - "resolve": "^1.10.0", - "semver": "2 || 3 || 4 || 5", - "validate-npm-package-license": "^3.0.1" + "assert-plus": "^1.0.0" + }, + "engines": { + "node": ">=0.10" } }, - "node_modules/conventional-commits-parser/node_modules/read-pkg/node_modules/type-fest": { - "version": "0.6.0", + "node_modules/data-urls": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-2.0.0.tgz", + "integrity": "sha512-X5eWTSXO/BJmpdIKCRuKUgSCgAN0OwliVK3yPKbwIWU1Tdw5BRajxlzMidvh+gwko9AfQ9zIj52pzF91Q3YAvQ==", "dev": true, - "license": "(MIT OR CC0-1.0)", + "license": "MIT", + "dependencies": { + "abab": "^2.0.3", + "whatwg-mimetype": "^2.3.0", + "whatwg-url": "^8.0.0" + }, "engines": { - "node": ">=8" + "node": ">=10" } }, - "node_modules/conventional-commits-parser/node_modules/semver": { - "version": "5.7.2", + "node_modules/data-urls/node_modules/tr46": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-2.1.0.tgz", + "integrity": "sha512-15Ih7phfcdP5YxqiB+iDtLoaTz4Nd35+IiAv0kQ5FNKHzXgdWqPoTIqEDDJmXceQt4JZk6lVPT8lnDlPpGDppw==", "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver" + "license": "MIT", + "dependencies": { + "punycode": "^2.1.1" + }, + "engines": { + "node": ">=8" } }, - "node_modules/conventional-commits-parser/node_modules/type-fest": { - "version": "0.18.1", + "node_modules/data-urls/node_modules/webidl-conversions": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-6.1.0.tgz", + "integrity": "sha512-qBIvFLGiBpLjfwmYAaHPXsn+ho5xZnGvyGvsarywGNc8VyQJUMHJ8OBKGGrPER0okBeMDaan4mNBlgBROxuI8w==", "dev": true, - "license": "(MIT OR CC0-1.0)", + "license": "BSD-2-Clause", "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=10.4" } }, - "node_modules/conventional-recommended-bump": { - "version": "7.0.1", + "node_modules/data-urls/node_modules/whatwg-url": { + "version": "8.7.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-8.7.0.tgz", + "integrity": "sha512-gAojqb/m9Q8a5IV96E3fHJM70AzCkgt4uXYX2O7EmuyOnLrViCQlsEBmF9UQIu3/aeAIp2U17rtbpZWNntQqdg==", "dev": true, "license": "MIT", "dependencies": { - "concat-stream": "^2.0.0", - "conventional-changelog-preset-loader": "^3.0.0", - "conventional-commits-filter": "^3.0.0", - "conventional-commits-parser": "^4.0.0", - "git-raw-commits": "^3.0.0", - "git-semver-tags": "^5.0.0", - "meow": "^8.1.2" - }, - "bin": { - "conventional-recommended-bump": "cli.js" + "lodash": "^4.7.0", + "tr46": "^2.1.0", + "webidl-conversions": "^6.1.0" }, "engines": { - "node": ">=14" + "node": ">=10" } }, - "node_modules/conventional-recommended-bump/node_modules/find-up": { - "version": "4.1.0", + "node_modules/data-view-buffer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/data-view-buffer/-/data-view-buffer-1.0.1.tgz", + "integrity": "sha512-0lht7OugA5x3iJLOWFhWK/5ehONdprk0ISXqVFn/NFrDu+cuc8iADFrGQz5BnRK7LLU3JmkbXSxaqX+/mXYtUA==", "dev": true, "license": "MIT", "dependencies": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" + "call-bind": "^1.0.6", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.1" }, "engines": { - "node": ">=8" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/conventional-recommended-bump/node_modules/git-raw-commits": { - "version": "3.0.0", + "node_modules/data-view-byte-length": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/data-view-byte-length/-/data-view-byte-length-1.0.1.tgz", + "integrity": "sha512-4J7wRJD3ABAzr8wP+OcIcqq2dlUKp4DVflx++hs5h5ZKydWMI6/D/fAot+yh6g2tHh8fLFTvNOaVN357NvSrOQ==", "dev": true, "license": "MIT", "dependencies": { - "dargs": "^7.0.0", - "meow": "^8.1.2", - "split2": "^3.2.2" - }, - "bin": { - "git-raw-commits": "cli.js" + "call-bind": "^1.0.7", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.1" }, "engines": { - "node": ">=14" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/conventional-recommended-bump/node_modules/hosted-git-info": { - "version": "2.8.9", - "dev": true, - "license": "ISC" - }, - "node_modules/conventional-recommended-bump/node_modules/locate-path": { - "version": "5.0.0", + "node_modules/data-view-byte-offset": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/data-view-byte-offset/-/data-view-byte-offset-1.0.0.tgz", + "integrity": "sha512-t/Ygsytq+R995EJ5PZlD4Cu56sWa8InXySaViRzw9apusqsOO2bQP+SbYzAhR0pFKoB+43lYy8rWban9JSuXnA==", "dev": true, "license": "MIT", "dependencies": { - "p-locate": "^4.1.0" + "call-bind": "^1.0.6", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.1" }, "engines": { - "node": ">=8" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/conventional-recommended-bump/node_modules/meow": { - "version": "8.1.2", + "node_modules/dateformat": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/dateformat/-/dateformat-3.0.3.tgz", + "integrity": "sha512-jyCETtSl3VMZMWeRo7iY1FL19ges1t55hMo5yaam4Jrsm5EPL89UQkoQRyiI+Yf4k8r2ZpdngkV8hr1lIdjb3Q==", "dev": true, "license": "MIT", - "dependencies": { - "@types/minimist": "^1.2.0", - "camelcase-keys": "^6.2.2", - "decamelize-keys": "^1.1.0", - "hard-rejection": "^2.1.0", - "minimist-options": "4.1.0", - "normalize-package-data": "^3.0.0", - "read-pkg-up": "^7.0.1", - "redent": "^3.0.0", - "trim-newlines": "^3.0.0", - "type-fest": "^0.18.0", - "yargs-parser": "^20.2.3" - }, "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": "*" } }, - "node_modules/conventional-recommended-bump/node_modules/p-locate": { - "version": "4.1.0", + "node_modules/debounce": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/debounce/-/debounce-1.2.1.tgz", + "integrity": "sha512-XRRe6Glud4rd/ZGQfiV1ruXSfbvfJedlV9Y6zOlP+2K04vBYiJEte6stfFkCP03aMnY5tsipamumUjL14fofug==", "dev": true, + "license": "MIT" + }, + "node_modules/debug": { + "version": "4.3.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.7.tgz", + "integrity": "sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==", "license": "MIT", "dependencies": { - "p-limit": "^2.2.0" + "ms": "^2.1.3" }, "engines": { - "node": ">=8" + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } } }, - "node_modules/conventional-recommended-bump/node_modules/read-pkg": { - "version": "5.2.0", + "node_modules/decamelize": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", + "integrity": "sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==", "dev": true, "license": "MIT", - "dependencies": { - "@types/normalize-package-data": "^2.4.0", - "normalize-package-data": "^2.5.0", - "parse-json": "^5.0.0", - "type-fest": "^0.6.0" - }, "engines": { - "node": ">=8" + "node": ">=0.10.0" } }, - "node_modules/conventional-recommended-bump/node_modules/read-pkg-up": { - "version": "7.0.1", + "node_modules/decamelize-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/decamelize-keys/-/decamelize-keys-1.1.1.tgz", + "integrity": "sha512-WiPxgEirIV0/eIOMcnFBA3/IJZAZqKnwAwWyvvdi4lsr1WCN22nhdf/3db3DoZcUjTV2SqfzIwNyp6y2xs3nmg==", "dev": true, "license": "MIT", "dependencies": { - "find-up": "^4.1.0", - "read-pkg": "^5.2.0", - "type-fest": "^0.8.1" + "decamelize": "^1.1.0", + "map-obj": "^1.0.0" }, "engines": { - "node": ">=8" + "node": ">=0.10.0" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/conventional-recommended-bump/node_modules/read-pkg-up/node_modules/type-fest": { - "version": "0.8.1", + "node_modules/decamelize-keys/node_modules/map-obj": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz", + "integrity": "sha512-7N/q3lyZ+LVCp7PzuxrJr4KMbBE2hW7BT7YNia330OFxIf4d3r5zVpicP2650l7CPN6RM9zOJRl3NGpqSiw3Eg==", "dev": true, - "license": "(MIT OR CC0-1.0)", + "license": "MIT", "engines": { - "node": ">=8" + "node": ">=0.10.0" } }, - "node_modules/conventional-recommended-bump/node_modules/read-pkg/node_modules/normalize-package-data": { - "version": "2.5.0", + "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==", "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "hosted-git-info": "^2.1.4", - "resolve": "^1.10.0", - "semver": "2 || 3 || 4 || 5", - "validate-npm-package-license": "^3.0.1" - } + "license": "MIT" }, - "node_modules/conventional-recommended-bump/node_modules/read-pkg/node_modules/type-fest": { - "version": "0.6.0", - "dev": true, - "license": "(MIT OR CC0-1.0)", + "node_modules/decode-uri-component": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.2.tgz", + "integrity": "sha512-FqUYQ+8o158GyGTrMFJms9qh3CqTKvAqgqsTnkLI8sKu0028orqBhxNMFkFen0zGyg6epACD32pjVk58ngIErQ==", + "license": "MIT", "engines": { - "node": ">=8" + "node": ">=0.10" } }, - "node_modules/conventional-recommended-bump/node_modules/semver": { - "version": "5.7.2", + "node_modules/dedent": { + "version": "1.5.3", + "resolved": "https://registry.npmjs.org/dedent/-/dedent-1.5.3.tgz", + "integrity": "sha512-NHQtfOOW68WD8lgypbLA5oT+Bt0xXJhiYvoR6SmmNXZfpzOGXwdKWmcwG8N7PwVVWV3eF/68nmD9BaJSsTBhyQ==", "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver" + "license": "MIT", + "peerDependencies": { + "babel-plugin-macros": "^3.1.0" + }, + "peerDependenciesMeta": { + "babel-plugin-macros": { + "optional": true + } } }, - "node_modules/conventional-recommended-bump/node_modules/type-fest": { - "version": "0.18.1", + "node_modules/deep-eql": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-5.0.2.tgz", + "integrity": "sha512-h5k/5U50IJJFpzfL6nO9jaaumfjO/f2NjK/oYB2Djzm4p9L+3T9qWpZqZ2hAbLPuuYq9wrU08WQyBTL5GbPk5Q==", "dev": true, - "license": "(MIT OR CC0-1.0)", + "license": "MIT", "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=6" } }, - "node_modules/convert-source-map": { - "version": "2.0.0", + "node_modules/deep-extend": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", + "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", "dev": true, - "license": "MIT" - }, - "node_modules/cookie": { - "version": "0.5.0", "license": "MIT", "engines": { - "node": ">= 0.6" + "node": ">=4.0.0" } }, - "node_modules/cookie-signature": { - "version": "1.0.6", + "node_modules/deep-is": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", + "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", + "dev": true, "license": "MIT" }, - "node_modules/core-util-is": { - "version": "1.0.2", - "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" + } }, - "node_modules/cors": { - "version": "2.8.5", + "node_modules/defaults": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.4.tgz", + "integrity": "sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==", + "dev": true, "license": "MIT", "dependencies": { - "object-assign": "^4", - "vary": "^1" + "clone": "^1.0.2" }, - "engines": { - "node": ">= 0.10" + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/cosmiconfig": { - "version": "8.2.0", - "dev": true, + "node_modules/define-data-property": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", + "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", "license": "MIT", "dependencies": { - "import-fresh": "^3.2.1", - "js-yaml": "^4.1.0", - "parse-json": "^5.0.0", - "path-type": "^4.0.0" + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "gopd": "^1.0.1" }, "engines": { - "node": ">=14" + "node": ">= 0.4" }, "funding": { - "url": "https://github.com/sponsors/d-fischer" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/cosmiconfig-typescript-loader": { - "version": "4.4.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": ">=v14.21.3" - }, - "peerDependencies": { - "@types/node": "*", - "cosmiconfig": ">=7", - "ts-node": ">=10", - "typescript": ">=4" + "node": ">=8" } }, - "node_modules/cosmiconfig/node_modules/argparse": { - "version": "2.0.1", - "dev": true, - "license": "Python-2.0" - }, - "node_modules/cosmiconfig/node_modules/js-yaml": { - "version": "4.1.0", + "node_modules/define-properties": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz", + "integrity": "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==", "dev": true, "license": "MIT", "dependencies": { - "argparse": "^2.0.1" + "define-data-property": "^1.0.1", + "has-property-descriptors": "^1.0.0", + "object-keys": "^1.1.1" }, - "bin": { - "js-yaml": "bin/js-yaml.js" + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/create-ecdh": { - "version": "4.0.4", - "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==", "license": "MIT", - "dependencies": { - "bn.js": "^4.1.0", - "elliptic": "^6.5.3" + "engines": { + "node": ">=0.4.0" } }, - "node_modules/create-ecdh/node_modules/bn.js": { - "version": "4.12.0", - "dev": true, - "license": "MIT" - }, - "node_modules/create-hash": { - "version": "1.2.0", + "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", - "dependencies": { - "cipher-base": "^1.0.1", - "inherits": "^2.0.1", - "md5.js": "^1.3.4", - "ripemd160": "^2.0.1", - "sha.js": "^2.4.0" + "engines": { + "node": ">= 0.8" } }, - "node_modules/create-hmac": { - "version": "1.1.7", + "node_modules/dependency-tree": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/dependency-tree/-/dependency-tree-9.0.0.tgz", + "integrity": "sha512-osYHZJ1fBSon3lNLw70amAXsQ+RGzXsPvk9HbBgTLbp/bQBmpH5mOmsUvqXU+YEWVU0ZLewsmzOET/8jWswjDQ==", + "dev": true, "license": "MIT", "dependencies": { - "cipher-base": "^1.0.3", - "create-hash": "^1.1.0", - "inherits": "^2.0.1", - "ripemd160": "^2.0.0", - "safe-buffer": "^5.0.1", - "sha.js": "^2.4.8" + "commander": "^2.20.3", + "debug": "^4.3.1", + "filing-cabinet": "^3.0.1", + "precinct": "^9.0.0", + "typescript": "^4.0.0" + }, + "bin": { + "dependency-tree": "bin/cli.js" + }, + "engines": { + "node": "^10.13 || ^12 || >=14" } }, - "node_modules/create-require": { - "version": "1.1.1", + "node_modules/dependency-tree/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, "license": "MIT" }, - "node_modules/cross-fetch": { - "version": "3.1.8", + "node_modules/dependency-tree/node_modules/detective-stylus": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/detective-stylus/-/detective-stylus-3.0.0.tgz", + "integrity": "sha512-1xYTzbrduExqMYmte7Qk99IRA3Aa6oV7PYzd+3yDcQXkmENvyGF/arripri6lxRDdNYEb4fZFuHtNRAXbz3iAA==", + "dev": true, "license": "MIT", - "dependencies": { - "node-fetch": "^2.6.12" + "engines": { + "node": ">=12" } }, - "node_modules/cross-spawn": { - "version": "7.0.3", + "node_modules/dependency-tree/node_modules/module-definition": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/module-definition/-/module-definition-4.1.0.tgz", + "integrity": "sha512-rHXi/DpMcD2qcKbPCTklDbX9lBKJrUSl971TW5l6nMpqKCIlzJqmQ8cfEF5M923h2OOLHPDVlh5pJxNyV+AJlw==", "dev": true, "license": "MIT", "dependencies": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" + "ast-module-types": "^4.0.0", + "node-source-walk": "^5.0.1" + }, + "bin": { + "module-definition": "bin/cli.js" }, "engines": { - "node": ">= 8" + "node": ">=12" } }, - "node_modules/crypto-browserify": { - "version": "3.12.0", + "node_modules/dependency-tree/node_modules/precinct": { + "version": "9.2.1", + "resolved": "https://registry.npmjs.org/precinct/-/precinct-9.2.1.tgz", + "integrity": "sha512-uzKHaTyiVejWW7VJtHInb9KBUq9yl9ojxXGujhjhDmPon2wgZPBKQIKR+6csGqSlUeGXAA4MEFnU6DesxZib+A==", "dev": true, "license": "MIT", "dependencies": { - "browserify-cipher": "^1.0.0", - "browserify-sign": "^4.0.0", - "create-ecdh": "^4.0.0", - "create-hash": "^1.1.0", - "create-hmac": "^1.1.0", - "diffie-hellman": "^5.0.0", - "inherits": "^2.0.1", - "pbkdf2": "^3.0.3", - "public-encrypt": "^4.0.0", - "randombytes": "^2.0.0", - "randomfill": "^1.0.3" + "@dependents/detective-less": "^3.0.1", + "commander": "^9.5.0", + "detective-amd": "^4.1.0", + "detective-cjs": "^4.1.0", + "detective-es6": "^3.0.1", + "detective-postcss": "^6.1.1", + "detective-sass": "^4.1.1", + "detective-scss": "^3.0.1", + "detective-stylus": "^3.0.0", + "detective-typescript": "^9.1.1", + "module-definition": "^4.1.0", + "node-source-walk": "^5.0.1" + }, + "bin": { + "precinct": "bin/cli.js" }, "engines": { - "node": "*" - } - }, - "node_modules/css-select": { - "version": "1.2.0", - "license": "BSD-like", - "dependencies": { - "boolbase": "~1.0.0", - "css-what": "2.1", - "domutils": "1.5.1", - "nth-check": "~1.0.1" + "node": "^12.20.0 || ^14.14.0 || >=16.0.0" } }, - "node_modules/css-what": { - "version": "2.1.3", - "license": "BSD-2-Clause", + "node_modules/dependency-tree/node_modules/precinct/node_modules/commander": { + "version": "9.5.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-9.5.0.tgz", + "integrity": "sha512-KRs7WVDKg86PWiuAqhDrAQnTXZKraVcCc6vFdL14qrZ/DcWwuRo7VoiYXalXO7S5GKpqYiVEwCbgFDfxNHKJBQ==", + "dev": true, + "license": "MIT", "engines": { - "node": "*" + "node": "^12.20.0 || >=14" } }, - "node_modules/cssesc": { - "version": "3.0.0", + "node_modules/dependency-tree/node_modules/typescript": { + "version": "4.9.5", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.9.5.tgz", + "integrity": "sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==", "dev": true, - "license": "MIT", + "license": "Apache-2.0", "bin": { - "cssesc": "bin/cssesc" + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" }, "engines": { - "node": ">=4" + "node": ">=4.2.0" } }, - "node_modules/cssom": { - "version": "0.4.4", + "node_modules/deprecation": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/deprecation/-/deprecation-2.3.1.tgz", + "integrity": "sha512-xmHIy4F3scKVwMsQ4WnVaS8bHOx0DmVwRywosKhaILI0ywMDWPtBSku2HNxRvF7jtwDRsoEwYQSfbxj8b7RlJQ==", "dev": true, - "license": "MIT" + "license": "ISC" }, - "node_modules/cssstyle": { - "version": "2.3.0", + "node_modules/des.js": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/des.js/-/des.js-1.1.0.tgz", + "integrity": "sha512-r17GxjhUCjSRy8aiJpr8/UadFIzMzJGexI3Nmz4ADi9LYSFx4gTBp80+NaX/YsXWWLhpZ7v/v/ubEc/bCNfKwg==", "dev": true, "license": "MIT", "dependencies": { - "cssom": "~0.3.6" - }, - "engines": { - "node": ">=8" + "inherits": "^2.0.1", + "minimalistic-assert": "^1.0.0" } }, - "node_modules/cssstyle/node_modules/cssom": { - "version": "0.3.8", - "dev": true, - "license": "MIT" - }, - "node_modules/csv": { - "version": "5.5.3", - "dev": true, + "node_modules/destroy": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", + "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", "license": "MIT", - "dependencies": { - "csv-generate": "^3.4.3", - "csv-parse": "^4.16.3", - "csv-stringify": "^5.6.5", - "stream-transform": "^2.1.3" - }, "engines": { - "node": ">= 0.1.90" + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" } }, - "node_modules/csv-generate": { - "version": "3.4.3", - "dev": true, - "license": "MIT" - }, - "node_modules/csv-parse": { - "version": "4.16.3", - "dev": true, - "license": "MIT" - }, - "node_modules/csv-stringify": { - "version": "5.6.5", + "node_modules/detect-indent": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-6.1.0.tgz", + "integrity": "sha512-reYkTUJAZb9gUuZ2RvVCNhVHdg62RHnJ7WJl8ftMi4diZ6NWlciOzQN88pUhSELEwflJht4oQDv0F0BMlwaYtA==", "dev": true, - "license": "MIT" + "license": "MIT", + "engines": { + "node": ">=8" + } }, - "node_modules/dargs": { - "version": "7.0.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" } }, - "node_modules/dashdash": { - "version": "1.14.1", + "node_modules/detective-amd": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/detective-amd/-/detective-amd-4.2.0.tgz", + "integrity": "sha512-RbuEJHz78A8nW7CklkqTzd8lDCN42En53dgEIsya0DilpkwslamSZDasLg8dJyxbw46OxhSQeY+C2btdSkCvQQ==", + "dev": true, "license": "MIT", "dependencies": { - "assert-plus": "^1.0.0" + "ast-module-types": "^4.0.0", + "escodegen": "^2.0.0", + "get-amd-module-type": "^4.1.0", + "node-source-walk": "^5.0.1" + }, + "bin": { + "detective-amd": "bin/cli.js" }, "engines": { - "node": ">=0.10" + "node": ">=12" } }, - "node_modules/data-urls": { - "version": "2.0.0", + "node_modules/detective-cjs": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/detective-cjs/-/detective-cjs-4.1.0.tgz", + "integrity": "sha512-QxzMwt5MfPLwS7mG30zvnmOvHLx5vyVvjsAV6gQOyuMoBR5G1DhS1eJZ4P10AlH+HSnk93mTcrg3l39+24XCtg==", "dev": true, "license": "MIT", "dependencies": { - "abab": "^2.0.3", - "whatwg-mimetype": "^2.3.0", - "whatwg-url": "^8.0.0" + "ast-module-types": "^4.0.0", + "node-source-walk": "^5.0.1" }, "engines": { - "node": ">=10" + "node": ">=12" } }, - "node_modules/data-urls/node_modules/tr46": { - "version": "2.1.0", + "node_modules/detective-es6": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/detective-es6/-/detective-es6-3.0.1.tgz", + "integrity": "sha512-evPeYIEdK1jK3Oji5p0hX4sPV/1vK+o4ihcWZkMQE6voypSW/cIBiynOLxQk5KOOQbdP8oOAsYqouMTYO5l1sw==", "dev": true, "license": "MIT", "dependencies": { - "punycode": "^2.1.1" + "node-source-walk": "^5.0.0" }, "engines": { - "node": ">=8" + "node": ">=12" } }, - "node_modules/data-urls/node_modules/webidl-conversions": { - "version": "6.1.0", + "node_modules/detective-less": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/detective-less/-/detective-less-1.0.2.tgz", + "integrity": "sha512-Rps1xDkEEBSq3kLdsdnHZL1x2S4NGDcbrjmd4q+PykK5aJwDdP5MBgrJw1Xo+kyUHuv3JEzPqxr+Dj9ryeDRTA==", "dev": true, - "license": "BSD-2-Clause", + "license": "MIT", + "dependencies": { + "debug": "^4.0.0", + "gonzales-pe": "^4.2.3", + "node-source-walk": "^4.0.0" + }, "engines": { - "node": ">=10.4" + "node": ">= 6.0" } }, - "node_modules/data-urls/node_modules/whatwg-url": { - "version": "8.7.0", + "node_modules/detective-less/node_modules/node-source-walk": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/node-source-walk/-/node-source-walk-4.3.0.tgz", + "integrity": "sha512-8Q1hXew6ETzqKRAs3jjLioSxNfT1cx74ooiF8RlAONwVMcfq+UdzLC2eB5qcPldUxaE5w3ytLkrmV1TGddhZTA==", "dev": true, "license": "MIT", "dependencies": { - "lodash": "^4.7.0", - "tr46": "^2.1.0", - "webidl-conversions": "^6.1.0" + "@babel/parser": "^7.0.0" }, "engines": { - "node": ">=10" + "node": ">=6.0" } }, - "node_modules/dateformat": { - "version": "3.0.3", + "node_modules/detective-postcss": { + "version": "6.1.3", + "resolved": "https://registry.npmjs.org/detective-postcss/-/detective-postcss-6.1.3.tgz", + "integrity": "sha512-7BRVvE5pPEvk2ukUWNQ+H2XOq43xENWbH0LcdCE14mwgTBEAMoAx+Fc1rdp76SmyZ4Sp48HlV7VedUnP6GA1Tw==", "dev": true, "license": "MIT", + "dependencies": { + "is-url": "^1.2.4", + "postcss": "^8.4.23", + "postcss-values-parser": "^6.0.2" + }, "engines": { - "node": "*" + "node": "^12.0.0 || ^14.0.0 || >=16.0.0" } }, - "node_modules/debug": { - "version": "4.3.4", + "node_modules/detective-sass": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/detective-sass/-/detective-sass-4.1.3.tgz", + "integrity": "sha512-xGRbwGaGte57gvEqM8B9GDiURY3El/H49vA6g9wFkxq9zalmTlTAuqWu+BsH0iwonGPruLt55tZZDEZqPc6lag==", + "dev": true, "license": "MIT", "dependencies": { - "ms": "2.1.2" + "gonzales-pe": "^4.3.0", + "node-source-walk": "^5.0.1" }, "engines": { - "node": ">=6.0" + "node": ">=12" + } + }, + "node_modules/detective-scss": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/detective-scss/-/detective-scss-3.1.1.tgz", + "integrity": "sha512-FWkfru1jZBhUeuBsOeGKXKAVDrzYFSQFK2o2tuG/nCCFQ0U/EcXC157MNAcR5mmj+mCeneZzlkBOFJTesDjrww==", + "dev": true, + "license": "MIT", + "dependencies": { + "gonzales-pe": "^4.3.0", + "node-source-walk": "^5.0.1" }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } + "engines": { + "node": ">=12" } }, - "node_modules/decamelize": { - "version": "1.2.0", + "node_modules/detective-stylus": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/detective-stylus/-/detective-stylus-2.0.1.tgz", + "integrity": "sha512-/Tvs1pWLg8eYwwV6kZQY5IslGaYqc/GACxjcaGudiNtN5nKCH6o2WnJK3j0gA3huCnoQcbv8X7oz/c1lnvE3zQ==", "dev": true, "license": "MIT", "engines": { - "node": ">=0.10.0" + "node": ">=6.0" } }, - "node_modules/decamelize-keys": { - "version": "1.1.1", + "node_modules/detective-typescript": { + "version": "9.1.1", + "resolved": "https://registry.npmjs.org/detective-typescript/-/detective-typescript-9.1.1.tgz", + "integrity": "sha512-Uc1yVutTF0RRm1YJ3g//i1Cn2vx1kwHj15cnzQP6ff5koNzQ0idc1zAC73ryaWEulA0ElRXFTq6wOqe8vUQ3MA==", "dev": true, "license": "MIT", "dependencies": { - "decamelize": "^1.1.0", - "map-obj": "^1.0.0" + "@typescript-eslint/typescript-estree": "^5.55.0", + "ast-module-types": "^4.0.0", + "node-source-walk": "^5.0.1", + "typescript": "^4.9.5" }, "engines": { - "node": ">=0.10.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": "^12.20.0 || ^14.14.0 || >=16.0.0" } }, - "node_modules/decamelize-keys/node_modules/map-obj": { - "version": "1.0.1", + "node_modules/detective-typescript/node_modules/@typescript-eslint/types": { + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.62.0.tgz", + "integrity": "sha512-87NVngcbVXUahrRTqIK27gD2t5Cu1yuCXxbLcFtCzZGlfyVWWh8mLHkoxzjsB6DDNnvdL+fW8MiwPEJyGJQDgQ==", "dev": true, "license": "MIT", "engines": { - "node": ">=0.10.0" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" } }, - "node_modules/decimal.js": { - "version": "10.4.3", + "node_modules/detective-typescript/node_modules/@typescript-eslint/typescript-estree": { + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.62.0.tgz", + "integrity": "sha512-CmcQ6uY7b9y694lKdRB8FEel7JbU/40iSAPomu++SjLMntB+2Leay2LO6i8VnJk58MtE9/nQSFIH6jpyRWyYzA==", "dev": true, - "license": "MIT" - }, - "node_modules/decode-uri-component": { - "version": "0.2.2", - "license": "MIT", + "license": "BSD-2-Clause", + "dependencies": { + "@typescript-eslint/types": "5.62.0", + "@typescript-eslint/visitor-keys": "5.62.0", + "debug": "^4.3.4", + "globby": "^11.1.0", + "is-glob": "^4.0.3", + "semver": "^7.3.7", + "tsutils": "^3.21.0" + }, "engines": { - "node": ">=0.10" - } - }, - "node_modules/dedent": { - "version": "1.5.3", - "dev": true, - "license": "MIT", - "peerDependencies": { - "babel-plugin-macros": "^3.1.0" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" }, "peerDependenciesMeta": { - "babel-plugin-macros": { + "typescript": { "optional": true } } }, - "node_modules/deep-eql": { - "version": "4.1.4", - "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-4.1.4.tgz", - "integrity": "sha512-SUwdGfqdKOwxCPeVYjwSyRpJ7Z+fhpwIAtmCUdZIWZ/YP5R9WAsyuSgpLVDi9bjWoN2LXHNss/dk3urXtdQxGg==", + "node_modules/detective-typescript/node_modules/@typescript-eslint/visitor-keys": { + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.62.0.tgz", + "integrity": "sha512-07ny+LHRzQXepkGg6w0mFY41fVUNBrL2Roj/++7V1txKugfjm/Ci/qSND03r2RhlJhJYMcTn9AhhSSqQp0Ysyw==", "dev": true, "license": "MIT", "dependencies": { - "type-detect": "^4.0.0" + "@typescript-eslint/types": "5.62.0", + "eslint-visitor-keys": "^3.3.0" }, "engines": { - "node": ">=6" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" } }, - "node_modules/deep-extend": { - "version": "0.6.0", + "node_modules/detective-typescript/node_modules/typescript": { + "version": "4.9.5", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.9.5.tgz", + "integrity": "sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==", "dev": true, - "license": "MIT", + "license": "Apache-2.0", + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, "engines": { - "node": ">=4.0.0" + "node": ">=4.2.0" } }, - "node_modules/deep-is": { - "version": "0.1.4", + "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, - "license": "MIT" + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.3.1" + } }, - "node_modules/deepmerge": { - "version": "4.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": ">=0.10.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/default-browser": { - "version": "4.0.0", + "node_modules/diffie-hellman": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.3.tgz", + "integrity": "sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==", "dev": true, "license": "MIT", "dependencies": { - "bundle-name": "^3.0.0", - "default-browser-id": "^3.0.0", - "execa": "^7.1.1", - "titleize": "^3.0.0" - }, - "engines": { - "node": ">=14.16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "bn.js": "^4.1.0", + "miller-rabin": "^4.0.0", + "randombytes": "^2.0.0" } }, - "node_modules/default-browser-id": { - "version": "3.0.0", + "node_modules/dir-glob": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", + "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", "dev": true, "license": "MIT", "dependencies": { - "bplist-parser": "^0.2.0", - "untildify": "^4.0.0" + "path-type": "^4.0.0" }, "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=8" } }, - "node_modules/default-browser/node_modules/execa": { - "version": "7.2.0", + "node_modules/doctrine": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", + "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", "dev": true, - "license": "MIT", + "license": "Apache-2.0", "dependencies": { - "cross-spawn": "^7.0.3", - "get-stream": "^6.0.1", - "human-signals": "^4.3.0", - "is-stream": "^3.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^5.1.0", - "onetime": "^6.0.0", - "signal-exit": "^3.0.7", - "strip-final-newline": "^3.0.0" + "esutils": "^2.0.2" }, "engines": { - "node": "^14.18.0 || ^16.14.0 || >=18.0.0" - }, - "funding": { - "url": "https://github.com/sindresorhus/execa?sponsor=1" + "node": ">=6.0.0" } }, - "node_modules/default-browser/node_modules/human-signals": { - "version": "4.3.1", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": ">=14.18.0" + "node_modules/dom-serializer": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.1.1.tgz", + "integrity": "sha512-l0IU0pPzLWSHBcieZbpOKgkIn3ts3vAh7ZuFyXNwJxJXk/c4Gwj9xaTJwIDVQCXawWD0qb3IzMGH5rglQaO0XA==", + "license": "MIT", + "dependencies": { + "domelementtype": "^1.3.0", + "entities": "^1.1.1" } }, - "node_modules/default-browser/node_modules/is-stream": { - "version": "3.0.0", + "node_modules/domelementtype": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.1.tgz", + "integrity": "sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w==", + "license": "BSD-2-Clause" + }, + "node_modules/domexception": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/domexception/-/domexception-2.0.1.tgz", + "integrity": "sha512-yxJ2mFy/sibVQlu5qHjOkf9J3K6zgmCxgJ94u2EdvDOV09H+32LtRswEcUsmUWN72pVLOEnTSRaIVVzVQgS0dg==", + "deprecated": "Use your platform's native DOMException instead", "dev": true, "license": "MIT", - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + "dependencies": { + "webidl-conversions": "^5.0.0" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "engines": { + "node": ">=8" } }, - "node_modules/default-browser/node_modules/mimic-fn": { - "version": "4.0.0", + "node_modules/domexception/node_modules/webidl-conversions": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-5.0.0.tgz", + "integrity": "sha512-VlZwKPCkYKxQgeSbH5EyngOmRp7Ww7I9rQLERETtf5ofd9pGeswWiOtogpEO850jziPRarreGxn5QIiTqpb2wA==", "dev": true, - "license": "MIT", + "license": "BSD-2-Clause", "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=8" } }, - "node_modules/default-browser/node_modules/npm-run-path": { - "version": "5.1.0", - "dev": true, - "license": "MIT", + "node_modules/domhandler": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-2.4.2.tgz", + "integrity": "sha512-JiK04h0Ht5u/80fdLMCEmV4zkNh2BcoMFBmZ/91WtYZ8qVXSKjiw7fXMgFPnHcSZgOo3XdinHvmnDUeMf5R4wA==", + "license": "BSD-2-Clause", "dependencies": { - "path-key": "^4.0.0" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "domelementtype": "1" } }, - "node_modules/default-browser/node_modules/onetime": { - "version": "6.0.0", + "node_modules/domutils": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.5.1.tgz", + "integrity": "sha512-gSu5Oi/I+3wDENBsOWBiRK1eoGxcywYSqg3rR960/+EfY0CF4EX1VPkgHOZ3WiS/Jg2DtliF6BhWcHlfpYUcGw==", + "dependencies": { + "dom-serializer": "0", + "domelementtype": "1" + } + }, + "node_modules/dot-prop": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-5.3.0.tgz", + "integrity": "sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==", "dev": true, "license": "MIT", "dependencies": { - "mimic-fn": "^4.0.0" + "is-obj": "^2.0.0" }, "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=8" } }, - "node_modules/default-browser/node_modules/path-key": { - "version": "4.0.0", + "node_modules/dotenv": { + "version": "16.4.5", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.4.5.tgz", + "integrity": "sha512-ZmdL2rui+eB2YwhsWzjInR8LldtZHGDoQ1ugH85ppHKwpUHL7j7rN0Ti9NCnGiQbhaZ11FpR+7ao1dNsmduNUg==", "dev": true, - "license": "MIT", + "license": "BSD-2-Clause", "engines": { "node": ">=12" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://dotenvx.com" } }, - "node_modules/default-browser/node_modules/strip-final-newline": { - "version": "3.0.0", + "node_modules/dotenv-expand": { + "version": "11.0.7", + "resolved": "https://registry.npmjs.org/dotenv-expand/-/dotenv-expand-11.0.7.tgz", + "integrity": "sha512-zIHwmZPRshsCdpMDyVsqGmgyP0yT8GAgXUnkdAoJisxvf33k7yO6OuoKmcTGuXPWSsm8Oh88nZicRLA9Y0rUeA==", "dev": true, - "license": "MIT", + "license": "BSD-2-Clause", + "dependencies": { + "dotenv": "^16.4.5" + }, "engines": { "node": ">=12" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://dotenvx.com" } }, - "node_modules/defaults": { - "version": "1.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, + "license": "MIT" + }, + "node_modules/eastasianwidth": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", + "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", "dev": true, + "license": "MIT" + }, + "node_modules/ecc-jsbn": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", + "integrity": "sha512-eh9O+hwRHNbG4BLTjEl3nw044CkGm5X6LoaCf7LPp7UU8Qrt47JYNi6nPX8xjW97TKGKm1ouctg0QSpZe9qrnw==", "license": "MIT", "dependencies": { - "clone": "^1.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "jsbn": "~0.1.0", + "safer-buffer": "^2.1.0" } }, - "node_modules/define-lazy-prop": { - "version": "2.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" + "node_modules/ecc-jsbn/node_modules/jsbn": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", + "integrity": "sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg==", + "license": "MIT" + }, + "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/define-properties": { - "version": "1.2.0", + "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/ejs": { + "version": "3.1.10", + "resolved": "https://registry.npmjs.org/ejs/-/ejs-3.1.10.tgz", + "integrity": "sha512-UeJmFfOrAQS8OJWPZ4qtgHyWExa088/MtK5UEyoJGFH67cDEXkZSviOiKRCZ4Xij0zxI3JECgYs3oKx+AizQBA==", "dev": true, - "license": "MIT", + "license": "Apache-2.0", "dependencies": { - "has-property-descriptors": "^1.0.0", - "object-keys": "^1.1.1" + "jake": "^10.8.5" }, - "engines": { - "node": ">= 0.4" + "bin": { + "ejs": "bin/cli.js" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "engines": { + "node": ">=0.10.0" } }, - "node_modules/delayed-stream": { - "version": "1.0.0", + "node_modules/electron-to-chromium": { + "version": "1.5.63", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.63.tgz", + "integrity": "sha512-ddeXKuY9BHo/mw145axlyWjlJ1UBt4WK3AlvkT7W2AbqfRQoacVoRUCF6wL3uIx/8wT9oLKXzI+rFqHHscByaA==", + "dev": true, + "license": "ISC" + }, + "node_modules/elliptic": { + "version": "6.6.1", + "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.6.1.tgz", + "integrity": "sha512-RaddvvMatK2LJHqFJ+YA4WysVN5Ita9E35botqIYspQ4TkRAlCicdzKOjlyv/1Za5RyTNn7di//eEV0uTAfe3g==", + "license": "MIT", + "dependencies": { + "bn.js": "^4.11.9", + "brorand": "^1.1.0", + "hash.js": "^1.0.0", + "hmac-drbg": "^1.0.1", + "inherits": "^2.0.4", + "minimalistic-assert": "^1.0.1", + "minimalistic-crypto-utils": "^1.0.1" + } + }, + "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": ">=0.4.0" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sindresorhus/emittery?sponsor=1" } }, - "node_modules/depd": { + "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==", + "license": "MIT" + }, + "node_modules/emojis-list": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz", + "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 4" + } + }, + "node_modules/enabled": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/enabled/-/enabled-2.0.0.tgz", + "integrity": "sha512-AKrN98kuwOzMIdAizXGI86UFBoo26CL21UM763y1h/GMSJ4/OHU9k2YlsmBpyScFo/wbLzWQJBMCW4+IO3/+OQ==", + "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/dependency-tree": { - "version": "9.0.0", - "dev": true, + "node_modules/encoding": { + "version": "0.1.13", + "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.13.tgz", + "integrity": "sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==", "license": "MIT", + "optional": true, "dependencies": { - "commander": "^2.20.3", - "debug": "^4.3.1", - "filing-cabinet": "^3.0.1", - "precinct": "^9.0.0", - "typescript": "^4.0.0" - }, - "bin": { - "dependency-tree": "bin/cli.js" + "iconv-lite": "^0.6.2" + } + }, + "node_modules/encoding/node_modules/iconv-lite": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", + "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", + "license": "MIT", + "optional": true, + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3.0.0" }, "engines": { - "node": "^10.13 || ^12 || >=14" + "node": ">=0.10.0" } }, - "node_modules/dependency-tree/node_modules/commander": { - "version": "2.20.3", + "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==", "dev": true, - "license": "MIT" + "license": "MIT", + "dependencies": { + "once": "^1.4.0" + } }, - "node_modules/dependency-tree/node_modules/detective-stylus": { - "version": "3.0.0", - "dev": true, + "node_modules/engine.io-client": { + "version": "6.2.3", + "resolved": "https://registry.npmjs.org/engine.io-client/-/engine.io-client-6.2.3.tgz", + "integrity": "sha512-aXPtgF1JS3RuuKcpSrBtimSjYvrbhKW9froICH4s0F3XQWLxsKNxqzG39nnvQZQnva4CMvUK63T7shevxRyYHw==", + "license": "MIT", + "dependencies": { + "@socket.io/component-emitter": "~3.1.0", + "debug": "~4.3.1", + "engine.io-parser": "~5.0.3", + "ws": "~8.2.3", + "xmlhttprequest-ssl": "~2.0.0" + } + }, + "node_modules/engine.io-client/node_modules/ws": { + "version": "8.2.3", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.2.3.tgz", + "integrity": "sha512-wBuoj1BDpC6ZQ1B7DWQBYVLphPWkm8i9Y0/3YdHjHKHiohOJ1ws+3OccDWtH+PoC9DZD5WOTrJvNbWvjS6JWaA==", "license": "MIT", "engines": { - "node": ">=12" + "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/dependency-tree/node_modules/module-definition": { - "version": "4.1.0", + "node_modules/engine.io-parser": { + "version": "5.0.7", + "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-5.0.7.tgz", + "integrity": "sha512-P+jDFbvK6lE3n1OL+q9KuzdOFWkkZ/cMV9gol/SbVfpyqfvrfrFTOFJ6fQm2VC3PZHlU3QPhVwmbsCnauHF2MQ==", + "license": "MIT", + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/enhanced-resolve": { + "version": "5.17.1", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.17.1.tgz", + "integrity": "sha512-LMHl3dXhTcfv8gM4kEzIUeTQ+7fpdA0l2tUf34BddXPkz2A5xJ5L/Pchd5BL6rdccM9QGvu0sWZzK1Z1t4wwyg==", "dev": true, "license": "MIT", "dependencies": { - "ast-module-types": "^4.0.0", - "node-source-walk": "^5.0.1" - }, - "bin": { - "module-definition": "bin/cli.js" + "graceful-fs": "^4.2.4", + "tapable": "^2.2.0" }, "engines": { - "node": ">=12" + "node": ">=10.13.0" } }, - "node_modules/dependency-tree/node_modules/precinct": { - "version": "9.2.1", + "node_modules/enquirer": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.4.1.tgz", + "integrity": "sha512-rRqJg/6gd538VHvR3PSrdRBb/1Vy2YfzHqzvbhGIQpDRKIa4FgV/54b5Q1xYSxOOwKvjXweS26E0Q+nAMwp2pQ==", "dev": true, "license": "MIT", "dependencies": { - "@dependents/detective-less": "^3.0.1", - "commander": "^9.5.0", - "detective-amd": "^4.1.0", - "detective-cjs": "^4.1.0", - "detective-es6": "^3.0.1", - "detective-postcss": "^6.1.1", - "detective-sass": "^4.1.1", - "detective-scss": "^3.0.1", - "detective-stylus": "^3.0.0", - "detective-typescript": "^9.1.1", - "module-definition": "^4.1.0", - "node-source-walk": "^5.0.1" - }, - "bin": { - "precinct": "bin/cli.js" + "ansi-colors": "^4.1.1", + "strip-ansi": "^6.0.1" }, "engines": { - "node": "^12.20.0 || ^14.14.0 || >=16.0.0" + "node": ">=8.6" } }, - "node_modules/dependency-tree/node_modules/precinct/node_modules/commander": { - "version": "9.5.0", + "node_modules/entities": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/entities/-/entities-1.1.2.tgz", + "integrity": "sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w==", + "license": "BSD-2-Clause" + }, + "node_modules/env-paths": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz", + "integrity": "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==", "dev": true, "license": "MIT", "engines": { - "node": "^12.20.0 || >=14" + "node": ">=6" } }, - "node_modules/dependency-tree/node_modules/typescript": { - "version": "4.9.5", + "node_modules/envinfo": { + "version": "7.13.0", + "resolved": "https://registry.npmjs.org/envinfo/-/envinfo-7.13.0.tgz", + "integrity": "sha512-cvcaMr7KqXVh4nyzGTVqTum+gAiL265x5jUWQIDLq//zOGbW+gSW/C+OWLleY/rs9Qole6AZLMXPbtIFQbqu+Q==", "dev": true, - "license": "Apache-2.0", + "license": "MIT", "bin": { - "tsc": "bin/tsc", - "tsserver": "bin/tsserver" + "envinfo": "dist/cli.js" }, "engines": { - "node": ">=4.2.0" + "node": ">=4" } }, - "node_modules/deprecation": { - "version": "2.3.1", + "node_modules/err-code": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/err-code/-/err-code-2.0.3.tgz", + "integrity": "sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA==", "dev": true, - "license": "ISC" + "license": "MIT" }, - "node_modules/des.js": { - "version": "1.1.0", + "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, "license": "MIT", "dependencies": { - "inherits": "^2.0.1", - "minimalistic-assert": "^1.0.0" + "is-arrayish": "^0.2.1" } }, - "node_modules/destroy": { - "version": "1.2.0", - "license": "MIT", + "node_modules/es-abstract": { + "version": "1.23.5", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.23.5.tgz", + "integrity": "sha512-vlmniQ0WNPwXqA0BnmwV3Ng7HxiGlh6r5U6JcTMNx8OilcAGqVJBHJcPjqOMaczU9fRuRK5Px2BdVyPRnKMMVQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "array-buffer-byte-length": "^1.0.1", + "arraybuffer.prototype.slice": "^1.0.3", + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.7", + "data-view-buffer": "^1.0.1", + "data-view-byte-length": "^1.0.1", + "data-view-byte-offset": "^1.0.0", + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0", + "es-set-tostringtag": "^2.0.3", + "es-to-primitive": "^1.2.1", + "function.prototype.name": "^1.1.6", + "get-intrinsic": "^1.2.4", + "get-symbol-description": "^1.0.2", + "globalthis": "^1.0.4", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.2", + "has-proto": "^1.0.3", + "has-symbols": "^1.0.3", + "hasown": "^2.0.2", + "internal-slot": "^1.0.7", + "is-array-buffer": "^3.0.4", + "is-callable": "^1.2.7", + "is-data-view": "^1.0.1", + "is-negative-zero": "^2.0.3", + "is-regex": "^1.1.4", + "is-shared-array-buffer": "^1.0.3", + "is-string": "^1.0.7", + "is-typed-array": "^1.1.13", + "is-weakref": "^1.0.2", + "object-inspect": "^1.13.3", + "object-keys": "^1.1.1", + "object.assign": "^4.1.5", + "regexp.prototype.flags": "^1.5.3", + "safe-array-concat": "^1.1.2", + "safe-regex-test": "^1.0.3", + "string.prototype.trim": "^1.2.9", + "string.prototype.trimend": "^1.0.8", + "string.prototype.trimstart": "^1.0.8", + "typed-array-buffer": "^1.0.2", + "typed-array-byte-length": "^1.0.1", + "typed-array-byte-offset": "^1.0.2", + "typed-array-length": "^1.0.6", + "unbox-primitive": "^1.0.2", + "which-typed-array": "^1.1.15" + }, "engines": { - "node": ">= 0.8", - "npm": "1.2.8000 || >= 1.4.16" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/detect-indent": { - "version": "6.1.0", - "dev": true, + "node_modules/es-define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.0.tgz", + "integrity": "sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==", "license": "MIT", + "dependencies": { + "get-intrinsic": "^1.2.4" + }, "engines": { - "node": ">=8" + "node": ">= 0.4" } }, - "node_modules/detect-newline": { - "version": "3.1.0", - "dev": true, + "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": ">=8" + "node": ">= 0.4" } }, - "node_modules/detective-amd": { - "version": "4.2.0", + "node_modules/es-module-lexer": { + "version": "1.5.4", + "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.5.4.tgz", + "integrity": "sha512-MVNK56NiMrOwitFB7cqDwq0CQutbw+0BvLshJSse0MUNU+y1FC3bUS/AQg7oUng+/wKrrki7JfmwtVHkVfPLlw==", "dev": true, - "license": "MIT", - "dependencies": { - "ast-module-types": "^4.0.0", - "escodegen": "^2.0.0", - "get-amd-module-type": "^4.1.0", - "node-source-walk": "^5.0.1" - }, - "bin": { - "detective-amd": "bin/cli.js" - }, - "engines": { - "node": ">=12" - } + "license": "MIT" }, - "node_modules/detective-cjs": { - "version": "4.1.0", + "node_modules/es-object-atoms": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.0.0.tgz", + "integrity": "sha512-MZ4iQ6JwHOBQjahnjwaC1ZtIBH+2ohjamzAO3oaHcXYup7qxjF2fixyH+Q71voWHeOkI2q/TnJao/KfXYIZWbw==", "dev": true, "license": "MIT", "dependencies": { - "ast-module-types": "^4.0.0", - "node-source-walk": "^5.0.1" + "es-errors": "^1.3.0" }, "engines": { - "node": ">=12" + "node": ">= 0.4" } }, - "node_modules/detective-es6": { - "version": "3.0.1", + "node_modules/es-set-tostringtag": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.3.tgz", + "integrity": "sha512-3T8uNMC3OQTHkFUsFq8r/BwAXLHvU/9O9mE0fBc/MY5iq/8H7ncvO947LmYA6ldWw9Uh8Yhf25zu6n7nML5QWQ==", "dev": true, "license": "MIT", "dependencies": { - "node-source-walk": "^5.0.0" + "get-intrinsic": "^1.2.4", + "has-tostringtag": "^1.0.2", + "hasown": "^2.0.1" }, "engines": { - "node": ">=12" + "node": ">= 0.4" } }, - "node_modules/detective-less": { + "node_modules/es-shim-unscopables": { "version": "1.0.2", + "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.0.2.tgz", + "integrity": "sha512-J3yBRXCzDu4ULnQwxyToo/OjdMx6akgVC7K6few0a7F/0wLtmKKN7I73AH5T2836UuXRqN7Qg+IIUw/+YJksRw==", "dev": true, "license": "MIT", "dependencies": { - "debug": "^4.0.0", - "gonzales-pe": "^4.2.3", - "node-source-walk": "^4.0.0" - }, - "engines": { - "node": ">= 6.0" + "hasown": "^2.0.0" } }, - "node_modules/detective-less/node_modules/node-source-walk": { - "version": "4.3.0", + "node_modules/es-to-primitive": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", + "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", "dev": true, "license": "MIT", "dependencies": { - "@babel/parser": "^7.0.0" + "is-callable": "^1.1.4", + "is-date-object": "^1.0.1", + "is-symbol": "^1.0.2" }, "engines": { - "node": ">=6.0" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/detective-postcss": { - "version": "6.1.3", + "node_modules/esbuild": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.19.12.tgz", + "integrity": "sha512-aARqgq8roFBj054KvQr5f1sFu0D65G+miZRCuJyJ0G13Zwx7vRar5Zhn2tkQNzIXcBrNVsv/8stehpj+GAjgbg==", "dev": true, + "hasInstallScript": true, "license": "MIT", - "dependencies": { - "is-url": "^1.2.4", - "postcss": "^8.4.23", - "postcss-values-parser": "^6.0.2" + "bin": { + "esbuild": "bin/esbuild" }, "engines": { - "node": "^12.0.0 || ^14.0.0 || >=16.0.0" + "node": ">=12" + }, + "optionalDependencies": { + "@esbuild/aix-ppc64": "0.19.12", + "@esbuild/android-arm": "0.19.12", + "@esbuild/android-arm64": "0.19.12", + "@esbuild/android-x64": "0.19.12", + "@esbuild/darwin-arm64": "0.19.12", + "@esbuild/darwin-x64": "0.19.12", + "@esbuild/freebsd-arm64": "0.19.12", + "@esbuild/freebsd-x64": "0.19.12", + "@esbuild/linux-arm": "0.19.12", + "@esbuild/linux-arm64": "0.19.12", + "@esbuild/linux-ia32": "0.19.12", + "@esbuild/linux-loong64": "0.19.12", + "@esbuild/linux-mips64el": "0.19.12", + "@esbuild/linux-ppc64": "0.19.12", + "@esbuild/linux-riscv64": "0.19.12", + "@esbuild/linux-s390x": "0.19.12", + "@esbuild/linux-x64": "0.19.12", + "@esbuild/netbsd-x64": "0.19.12", + "@esbuild/openbsd-x64": "0.19.12", + "@esbuild/sunos-x64": "0.19.12", + "@esbuild/win32-arm64": "0.19.12", + "@esbuild/win32-ia32": "0.19.12", + "@esbuild/win32-x64": "0.19.12" } }, - "node_modules/detective-sass": { - "version": "4.1.3", + "node_modules/esbuild-loader": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/esbuild-loader/-/esbuild-loader-4.2.2.tgz", + "integrity": "sha512-Mdq/A1L8p37hkibp8jGFwuQTDSWhDmlueAefsrCPRwNWThEOlQmIglV7Gd6GE2mO5bt7ksfxKOMwkuY7jjVTXg==", "dev": true, "license": "MIT", "dependencies": { - "gonzales-pe": "^4.3.0", - "node-source-walk": "^5.0.1" + "esbuild": "^0.21.0", + "get-tsconfig": "^4.7.0", + "loader-utils": "^2.0.4", + "webpack-sources": "^1.4.3" }, - "engines": { - "node": ">=12" + "funding": { + "url": "https://github.com/privatenumber/esbuild-loader?sponsor=1" + }, + "peerDependencies": { + "webpack": "^4.40.0 || ^5.0.0" } }, - "node_modules/detective-scss": { - "version": "3.1.1", + "node_modules/esbuild-loader/node_modules/@esbuild/aix-ppc64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.21.5.tgz", + "integrity": "sha512-1SDgH6ZSPTlggy1yI6+Dbkiz8xzpHJEVAlF/AM1tHPLsf5STom9rwtjE4hKAF20FfXXNTFqEYXyJNWh1GiZedQ==", + "cpu": [ + "ppc64" + ], "dev": true, "license": "MIT", - "dependencies": { - "gonzales-pe": "^4.3.0", - "node-source-walk": "^5.0.1" - }, + "optional": true, + "os": [ + "aix" + ], "engines": { "node": ">=12" } }, - "node_modules/detective-stylus": { - "version": "2.0.1", + "node_modules/esbuild-loader/node_modules/@esbuild/android-arm": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.21.5.tgz", + "integrity": "sha512-vCPvzSjpPHEi1siZdlvAlsPxXl7WbOVUBBAowWug4rJHb68Ox8KualB+1ocNvT5fjv6wpkX6o/iEpbDrf68zcg==", + "cpu": [ + "arm" + ], "dev": true, "license": "MIT", + "optional": true, + "os": [ + "android" + ], "engines": { - "node": ">=6.0" + "node": ">=12" } }, - "node_modules/detective-typescript": { - "version": "9.1.1", + "node_modules/esbuild-loader/node_modules/@esbuild/android-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.21.5.tgz", + "integrity": "sha512-c0uX9VAUBQ7dTDCjq+wdyGLowMdtR/GoC2U5IYk/7D1H1JYC0qseD7+11iMP2mRLN9RcCMRcjC4YMclCzGwS/A==", + "cpu": [ + "arm64" + ], "dev": true, "license": "MIT", - "dependencies": { - "@typescript-eslint/typescript-estree": "^5.55.0", - "ast-module-types": "^4.0.0", - "node-source-walk": "^5.0.1", - "typescript": "^4.9.5" - }, + "optional": true, + "os": [ + "android" + ], "engines": { - "node": "^12.20.0 || ^14.14.0 || >=16.0.0" + "node": ">=12" } }, - "node_modules/detective-typescript/node_modules/@typescript-eslint/types": { - "version": "5.62.0", + "node_modules/esbuild-loader/node_modules/@esbuild/android-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.21.5.tgz", + "integrity": "sha512-D7aPRUUNHRBwHxzxRvp856rjUHRFW1SdQATKXH2hqA0kAZb1hKmi02OpYRacl0TxIGz/ZmXWlbZgjwWYaCakTA==", + "cpu": [ + "x64" + ], "dev": true, "license": "MIT", + "optional": true, + "os": [ + "android" + ], "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" + "node": ">=12" } }, - "node_modules/detective-typescript/node_modules/@typescript-eslint/typescript-estree": { - "version": "5.62.0", + "node_modules/esbuild-loader/node_modules/@esbuild/darwin-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.21.5.tgz", + "integrity": "sha512-DwqXqZyuk5AiWWf3UfLiRDJ5EDd49zg6O9wclZ7kUMv2WRFr4HKjXp/5t8JZ11QbQfUS6/cRCKGwYhtNAY88kQ==", + "cpu": [ + "arm64" + ], "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "@typescript-eslint/types": "5.62.0", - "@typescript-eslint/visitor-keys": "5.62.0", - "debug": "^4.3.4", - "globby": "^11.1.0", - "is-glob": "^4.0.3", - "semver": "^7.3.7", - "tsutils": "^3.21.0" - }, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } + "node": ">=12" } }, - "node_modules/detective-typescript/node_modules/@typescript-eslint/visitor-keys": { - "version": "5.62.0", + "node_modules/esbuild-loader/node_modules/@esbuild/darwin-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.21.5.tgz", + "integrity": "sha512-se/JjF8NlmKVG4kNIuyWMV/22ZaerB+qaSi5MdrXtd6R08kvs2qCN4C09miupktDitvh8jRFflwGFBQcxZRjbw==", + "cpu": [ + "x64" + ], "dev": true, "license": "MIT", - "dependencies": { - "@typescript-eslint/types": "5.62.0", - "eslint-visitor-keys": "^3.3.0" - }, + "optional": true, + "os": [ + "darwin" + ], "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" + "node": ">=12" } }, - "node_modules/detective-typescript/node_modules/typescript": { - "version": "4.9.5", + "node_modules/esbuild-loader/node_modules/@esbuild/freebsd-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.21.5.tgz", + "integrity": "sha512-5JcRxxRDUJLX8JXp/wcBCy3pENnCgBR9bN6JsY4OmhfUtIHe3ZW0mawA7+RDAcMLrMIZaf03NlQiX9DGyB8h4g==", + "cpu": [ + "arm64" + ], "dev": true, - "license": "Apache-2.0", - "bin": { - "tsc": "bin/tsc", - "tsserver": "bin/tsserver" - }, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], "engines": { - "node": ">=4.2.0" + "node": ">=12" } }, - "node_modules/diff": { - "version": "4.0.2", + "node_modules/esbuild-loader/node_modules/@esbuild/freebsd-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.21.5.tgz", + "integrity": "sha512-J95kNBj1zkbMXtHVH29bBriQygMXqoVQOQYA+ISs0/2l3T9/kj42ow2mpqerRBxDJnmkUDCaQT/dfNXWX/ZZCQ==", + "cpu": [ + "x64" + ], "dev": true, - "license": "BSD-3-Clause", + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], "engines": { - "node": ">=0.3.1" + "node": ">=12" } }, - "node_modules/diff-sequences": { - "version": "29.4.3", + "node_modules/esbuild-loader/node_modules/@esbuild/linux-arm": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.21.5.tgz", + "integrity": "sha512-bPb5AHZtbeNGjCKVZ9UGqGwo8EUu4cLq68E95A53KlxAPRmUyYv2D6F0uUI65XisGOL1hBP5mTronbgo+0bFcA==", + "cpu": [ + "arm" + ], "dev": true, "license": "MIT", + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": ">=12" } }, - "node_modules/diffie-hellman": { - "version": "5.0.3", + "node_modules/esbuild-loader/node_modules/@esbuild/linux-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.21.5.tgz", + "integrity": "sha512-ibKvmyYzKsBeX8d8I7MH/TMfWDXBF3db4qM6sy+7re0YXya+K1cem3on9XgdT2EQGMu4hQyZhan7TeQ8XkGp4Q==", + "cpu": [ + "arm64" + ], "dev": true, "license": "MIT", - "dependencies": { - "bn.js": "^4.1.0", - "miller-rabin": "^4.0.0", - "randombytes": "^2.0.0" + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" } }, - "node_modules/diffie-hellman/node_modules/bn.js": { - "version": "4.12.0", - "dev": true, - "license": "MIT" - }, - "node_modules/dir-glob": { - "version": "3.0.1", + "node_modules/esbuild-loader/node_modules/@esbuild/linux-ia32": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.21.5.tgz", + "integrity": "sha512-YvjXDqLRqPDl2dvRODYmmhz4rPeVKYvppfGYKSNGdyZkA01046pLWyRKKI3ax8fbJoK5QbxblURkwK/MWY18Tg==", + "cpu": [ + "ia32" + ], "dev": true, "license": "MIT", - "dependencies": { - "path-type": "^4.0.0" - }, + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": ">=8" + "node": ">=12" } }, - "node_modules/doctrine": { - "version": "3.0.0", + "node_modules/esbuild-loader/node_modules/@esbuild/linux-loong64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.21.5.tgz", + "integrity": "sha512-uHf1BmMG8qEvzdrzAqg2SIG/02+4/DHB6a9Kbya0XDvwDEKCoC8ZRWI5JJvNdUjtciBGFQ5PuBlpEOXQj+JQSg==", + "cpu": [ + "loong64" + ], "dev": true, - "license": "Apache-2.0", - "dependencies": { - "esutils": "^2.0.2" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/dom-serializer": { - "version": "0.1.1", "license": "MIT", - "dependencies": { - "domelementtype": "^1.3.0", - "entities": "^1.1.1" + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" } }, - "node_modules/domelementtype": { - "version": "1.3.1", - "license": "BSD-2-Clause" - }, - "node_modules/domexception": { - "version": "2.0.1", + "node_modules/esbuild-loader/node_modules/@esbuild/linux-mips64el": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.21.5.tgz", + "integrity": "sha512-IajOmO+KJK23bj52dFSNCMsz1QP1DqM6cwLUv3W1QwyxkyIWecfafnI555fvSGqEKwjMXVLokcV5ygHW5b3Jbg==", + "cpu": [ + "mips64el" + ], "dev": true, "license": "MIT", - "dependencies": { - "webidl-conversions": "^5.0.0" - }, + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": ">=8" + "node": ">=12" } }, - "node_modules/domexception/node_modules/webidl-conversions": { - "version": "5.0.0", + "node_modules/esbuild-loader/node_modules/@esbuild/linux-ppc64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.21.5.tgz", + "integrity": "sha512-1hHV/Z4OEfMwpLO8rp7CvlhBDnjsC3CttJXIhBi+5Aj5r+MBvy4egg7wCbe//hSsT+RvDAG7s81tAvpL2XAE4w==", + "cpu": [ + "ppc64" + ], "dev": true, - "license": "BSD-2-Clause", + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": ">=8" - } - }, - "node_modules/domhandler": { - "version": "2.4.2", - "license": "BSD-2-Clause", - "dependencies": { - "domelementtype": "1" - } - }, - "node_modules/domutils": { - "version": "1.5.1", - "dependencies": { - "dom-serializer": "0", - "domelementtype": "1" + "node": ">=12" } }, - "node_modules/dot-prop": { - "version": "5.3.0", + "node_modules/esbuild-loader/node_modules/@esbuild/linux-riscv64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.21.5.tgz", + "integrity": "sha512-2HdXDMd9GMgTGrPWnJzP2ALSokE/0O5HhTUvWIbD3YdjME8JwvSCnNGBnTThKGEB91OZhzrJ4qIIxk/SBmyDDA==", + "cpu": [ + "riscv64" + ], "dev": true, "license": "MIT", - "dependencies": { - "is-obj": "^2.0.0" - }, + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": ">=8" + "node": ">=12" } }, - "node_modules/dotenv": { - "version": "16.4.5", + "node_modules/esbuild-loader/node_modules/@esbuild/linux-s390x": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.21.5.tgz", + "integrity": "sha512-zus5sxzqBJD3eXxwvjN1yQkRepANgxE9lgOW2qLnmr8ikMTphkjgXu1HR01K4FJg8h1kEEDAqDcZQtbrRnB41A==", + "cpu": [ + "s390x" + ], "dev": true, - "license": "BSD-2-Clause", + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], "engines": { "node": ">=12" - }, - "funding": { - "url": "https://dotenvx.com" } }, - "node_modules/dotenv-expand": { - "version": "11.0.6", + "node_modules/esbuild-loader/node_modules/@esbuild/linux-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.21.5.tgz", + "integrity": "sha512-1rYdTpyv03iycF1+BhzrzQJCdOuAOtaqHTWJZCWvijKD2N5Xu0TtVC8/+1faWqcP9iBCWOmjmhoH94dH82BxPQ==", + "cpu": [ + "x64" + ], "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "dotenv": "^16.4.4" - }, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], "engines": { "node": ">=12" - }, - "funding": { - "url": "https://dotenvx.com" } }, - "node_modules/duplexer": { - "version": "0.1.2", - "dev": true, - "license": "MIT" - }, - "node_modules/eastasianwidth": { - "version": "0.2.0", + "node_modules/esbuild-loader/node_modules/@esbuild/netbsd-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.21.5.tgz", + "integrity": "sha512-Woi2MXzXjMULccIwMnLciyZH4nCIMpWQAs049KEeMvOcNADVxo0UBIQPfSmxB3CWKedngg7sWZdLvLczpe0tLg==", + "cpu": [ + "x64" + ], "dev": true, - "license": "MIT" - }, - "node_modules/ecc-jsbn": { - "version": "0.1.2", "license": "MIT", - "dependencies": { - "jsbn": "~0.1.0", - "safer-buffer": "^2.1.0" - } - }, - "node_modules/ecdsa-sig-formatter": { - "version": "1.0.11", - "license": "Apache-2.0", - "dependencies": { - "safe-buffer": "^5.0.1" + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=12" } }, - "node_modules/ee-first": { - "version": "1.1.1", - "license": "MIT" - }, - "node_modules/ejs": { - "version": "3.1.10", + "node_modules/esbuild-loader/node_modules/@esbuild/openbsd-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.21.5.tgz", + "integrity": "sha512-HLNNw99xsvx12lFBUwoT8EVCsSvRNDVxNpjZ7bPn947b8gJPzeHWyNVhFsaerc0n3TsbOINvRP2byTZ5LKezow==", + "cpu": [ + "x64" + ], "dev": true, - "license": "Apache-2.0", - "dependencies": { - "jake": "^10.8.5" - }, - "bin": { - "ejs": "bin/cli.js" - }, + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], "engines": { - "node": ">=0.10.0" + "node": ">=12" } }, - "node_modules/electron-to-chromium": { - "version": "1.4.490", + "node_modules/esbuild-loader/node_modules/@esbuild/sunos-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.21.5.tgz", + "integrity": "sha512-6+gjmFpfy0BHU5Tpptkuh8+uw3mnrvgs+dSPQXQOv3ekbordwnzTVEb4qnIvQcYXq6gzkyTnoZ9dZG+D4garKg==", + "cpu": [ + "x64" + ], "dev": true, - "license": "ISC" - }, - "node_modules/elliptic": { - "version": "6.5.4", "license": "MIT", - "dependencies": { - "bn.js": "^4.11.9", - "brorand": "^1.1.0", - "hash.js": "^1.0.0", - "hmac-drbg": "^1.0.1", - "inherits": "^2.0.4", - "minimalistic-assert": "^1.0.1", - "minimalistic-crypto-utils": "^1.0.1" + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=12" } }, - "node_modules/elliptic/node_modules/bn.js": { - "version": "4.12.0", - "license": "MIT" - }, - "node_modules/emittery": { - "version": "0.13.1", + "node_modules/esbuild-loader/node_modules/@esbuild/win32-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.21.5.tgz", + "integrity": "sha512-Z0gOTd75VvXqyq7nsl93zwahcTROgqvuAcYDUr+vOv8uHhNSKROyU961kgtCD1e95IqPKSQKH7tBTslnS3tA8A==", + "cpu": [ + "arm64" + ], "dev": true, "license": "MIT", + "optional": true, + "os": [ + "win32" + ], "engines": { "node": ">=12" - }, - "funding": { - "url": "https://github.com/sindresorhus/emittery?sponsor=1" } }, - "node_modules/emoji-regex": { - "version": "8.0.0", - "license": "MIT" - }, - "node_modules/emojis-list": { - "version": "3.0.0", + "node_modules/esbuild-loader/node_modules/@esbuild/win32-ia32": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.21.5.tgz", + "integrity": "sha512-SWXFF1CL2RVNMaVs+BBClwtfZSvDgtL//G/smwAc5oVK/UPu2Gu9tIaRgFmYFFKrmg3SyAjSrElf0TiJ1v8fYA==", + "cpu": [ + "ia32" + ], "dev": true, "license": "MIT", + "optional": true, + "os": [ + "win32" + ], "engines": { - "node": ">= 4" + "node": ">=12" } }, - "node_modules/enabled": { - "version": "2.0.0", - "license": "MIT" - }, - "node_modules/encodeurl": { - "version": "1.0.2", + "node_modules/esbuild-loader/node_modules/@esbuild/win32-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.21.5.tgz", + "integrity": "sha512-tQd/1efJuzPC6rCFwEvLtci/xNFcTZknmXs98FYDfGE4wP9ClFV98nyKrzJKVPMhdDnjzLhdUyMX4PsQAPjwIw==", + "cpu": [ + "x64" + ], + "dev": true, "license": "MIT", + "optional": true, + "os": [ + "win32" + ], "engines": { - "node": ">= 0.8" + "node": ">=12" } }, - "node_modules/encoding": { - "version": "0.1.13", + "node_modules/esbuild-loader/node_modules/esbuild": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.21.5.tgz", + "integrity": "sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw==", + "dev": true, + "hasInstallScript": true, "license": "MIT", - "optional": true, - "dependencies": { - "iconv-lite": "^0.6.2" + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=12" + }, + "optionalDependencies": { + "@esbuild/aix-ppc64": "0.21.5", + "@esbuild/android-arm": "0.21.5", + "@esbuild/android-arm64": "0.21.5", + "@esbuild/android-x64": "0.21.5", + "@esbuild/darwin-arm64": "0.21.5", + "@esbuild/darwin-x64": "0.21.5", + "@esbuild/freebsd-arm64": "0.21.5", + "@esbuild/freebsd-x64": "0.21.5", + "@esbuild/linux-arm": "0.21.5", + "@esbuild/linux-arm64": "0.21.5", + "@esbuild/linux-ia32": "0.21.5", + "@esbuild/linux-loong64": "0.21.5", + "@esbuild/linux-mips64el": "0.21.5", + "@esbuild/linux-ppc64": "0.21.5", + "@esbuild/linux-riscv64": "0.21.5", + "@esbuild/linux-s390x": "0.21.5", + "@esbuild/linux-x64": "0.21.5", + "@esbuild/netbsd-x64": "0.21.5", + "@esbuild/openbsd-x64": "0.21.5", + "@esbuild/sunos-x64": "0.21.5", + "@esbuild/win32-arm64": "0.21.5", + "@esbuild/win32-ia32": "0.21.5", + "@esbuild/win32-x64": "0.21.5" } }, - "node_modules/encoding/node_modules/iconv-lite": { - "version": "0.6.3", + "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", - "optional": true, + "engines": { + "node": ">=6" + } + }, + "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/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==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "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": { - "safer-buffer": ">= 2.1.2 < 3.0.0" + "esprima": "^4.0.1", + "estraverse": "^5.2.0", + "esutils": "^2.0.2" + }, + "bin": { + "escodegen": "bin/escodegen.js", + "esgenerate": "bin/esgenerate.js" }, "engines": { - "node": ">=0.10.0" + "node": ">=6.0" + }, + "optionalDependencies": { + "source-map": "~0.6.1" } }, - "node_modules/end-of-stream": { - "version": "1.4.4", + "node_modules/eslint": { + "version": "8.57.1", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.57.1.tgz", + "integrity": "sha512-ypowyDxpVSYpkXr9WPv2PAZCtNip1Mv5KTW0SCurXv/9iOpcrH9PaqUElksqEB6pChqHGDRCFTyrZlGhnLNGiA==", + "deprecated": "This version is no longer supported. Please see https://eslint.org/version-support for other options.", "dev": true, "license": "MIT", "dependencies": { - "once": "^1.4.0" + "@eslint-community/eslint-utils": "^4.2.0", + "@eslint-community/regexpp": "^4.6.1", + "@eslint/eslintrc": "^2.1.4", + "@eslint/js": "8.57.1", + "@humanwhocodes/config-array": "^0.13.0", + "@humanwhocodes/module-importer": "^1.0.1", + "@nodelib/fs.walk": "^1.2.8", + "@ungap/structured-clone": "^1.2.0", + "ajv": "^6.12.4", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.2", + "debug": "^4.3.2", + "doctrine": "^3.0.0", + "escape-string-regexp": "^4.0.0", + "eslint-scope": "^7.2.2", + "eslint-visitor-keys": "^3.4.3", + "espree": "^9.6.1", + "esquery": "^1.4.2", + "esutils": "^2.0.2", + "fast-deep-equal": "^3.1.3", + "file-entry-cache": "^6.0.1", + "find-up": "^5.0.0", + "glob-parent": "^6.0.2", + "globals": "^13.19.0", + "graphemer": "^1.4.0", + "ignore": "^5.2.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "is-path-inside": "^3.0.3", + "js-yaml": "^4.1.0", + "json-stable-stringify-without-jsonify": "^1.0.1", + "levn": "^0.4.1", + "lodash.merge": "^4.6.2", + "minimatch": "^3.1.2", + "natural-compare": "^1.4.0", + "optionator": "^0.9.3", + "strip-ansi": "^6.0.1", + "text-table": "^0.2.0" + }, + "bin": { + "eslint": "bin/eslint.js" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" } }, - "node_modules/engine.io-client": { - "version": "6.2.3", + "node_modules/eslint-config-prettier": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-9.1.0.tgz", + "integrity": "sha512-NSWl5BFQWEPi1j4TjVNItzYV7dZXZ+wP6I6ZhrBGpChQhZRUaElihE9uRRkcbRnNb76UMKDF3r+WTmNcGPKsqw==", + "dev": true, + "license": "MIT", + "bin": { + "eslint-config-prettier": "bin/cli.js" + }, + "peerDependencies": { + "eslint": ">=7.0.0" + } + }, + "node_modules/eslint-import-resolver-node": { + "version": "0.3.9", + "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.9.tgz", + "integrity": "sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g==", + "dev": true, "license": "MIT", "dependencies": { - "@socket.io/component-emitter": "~3.1.0", - "debug": "~4.3.1", - "engine.io-parser": "~5.0.3", - "ws": "~8.2.3", - "xmlhttprequest-ssl": "~2.0.0" + "debug": "^3.2.7", + "is-core-module": "^2.13.0", + "resolve": "^1.22.4" } }, - "node_modules/engine.io-client/node_modules/ws": { - "version": "8.2.3", + "node_modules/eslint-import-resolver-node/node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, "license": "MIT", + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/eslint-import-resolver-typescript": { + "version": "3.6.3", + "resolved": "https://registry.npmjs.org/eslint-import-resolver-typescript/-/eslint-import-resolver-typescript-3.6.3.tgz", + "integrity": "sha512-ud9aw4szY9cCT1EWWdGv1L1XR6hh2PaRWif0j2QjQ0pgTY/69iw+W0Z4qZv5wHahOl8isEr+k/JnyAqNQkLkIA==", + "dev": true, + "license": "ISC", + "dependencies": { + "@nolyfill/is-core-module": "1.0.39", + "debug": "^4.3.5", + "enhanced-resolve": "^5.15.0", + "eslint-module-utils": "^2.8.1", + "fast-glob": "^3.3.2", + "get-tsconfig": "^4.7.5", + "is-bun-module": "^1.0.2", + "is-glob": "^4.0.3" + }, "engines": { - "node": ">=10.0.0" + "node": "^14.18.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/unts/projects/eslint-import-resolver-ts" }, "peerDependencies": { - "bufferutil": "^4.0.1", - "utf-8-validate": "^5.0.2" + "eslint": "*", + "eslint-plugin-import": "*", + "eslint-plugin-import-x": "*" }, "peerDependenciesMeta": { - "bufferutil": { + "eslint-plugin-import": { "optional": true }, - "utf-8-validate": { + "eslint-plugin-import-x": { "optional": true } } }, - "node_modules/engine.io-parser": { - "version": "5.0.7", - "license": "MIT", - "engines": { - "node": ">=10.0.0" - } - }, - "node_modules/enhanced-resolve": { - "version": "5.15.0", + "node_modules/eslint-module-utils": { + "version": "2.12.0", + "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.12.0.tgz", + "integrity": "sha512-wALZ0HFoytlyh/1+4wuZ9FJCD/leWHQzzrxJ8+rebyReSLk7LApMyd3WJaLVoN+D5+WIdJyDK1c6JnE65V4Zyg==", "dev": true, "license": "MIT", "dependencies": { - "graceful-fs": "^4.2.4", - "tapable": "^2.2.0" + "debug": "^3.2.7" }, "engines": { - "node": ">=10.13.0" + "node": ">=4" + }, + "peerDependenciesMeta": { + "eslint": { + "optional": true + } } }, - "node_modules/enquirer": { - "version": "2.4.1", + "node_modules/eslint-module-utils/node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", "dev": true, "license": "MIT", "dependencies": { - "ansi-colors": "^4.1.1", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8.6" + "ms": "^2.1.1" } }, - "node_modules/entities": { - "version": "1.1.2", - "license": "BSD-2-Clause" - }, - "node_modules/env-paths": { - "version": "2.2.1", + "node_modules/eslint-plugin-es": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-es/-/eslint-plugin-es-3.0.1.tgz", + "integrity": "sha512-GUmAsJaN4Fc7Gbtl8uOBlayo2DqhwWvEzykMHSCZHU3XdJ+NSzzZcVhXh3VxX5icqQ+oQdIEawXX8xkR3mIFmQ==", "dev": true, "license": "MIT", + "dependencies": { + "eslint-utils": "^2.0.0", + "regexpp": "^3.0.0" + }, "engines": { - "node": ">=6" + "node": ">=8.10.0" + }, + "funding": { + "url": "https://github.com/sponsors/mysticatea" + }, + "peerDependencies": { + "eslint": ">=4.19.1" } }, - "node_modules/envinfo": { - "version": "7.13.0", + "node_modules/eslint-plugin-import": { + "version": "2.31.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.31.0.tgz", + "integrity": "sha512-ixmkI62Rbc2/w8Vfxyh1jQRTdRTF52VxwRVHl/ykPAmqG+Nb7/kNn+byLP0LxPgI7zWA16Jt82SybJInmMia3A==", "dev": true, "license": "MIT", - "bin": { - "envinfo": "dist/cli.js" + "dependencies": { + "@rtsao/scc": "^1.1.0", + "array-includes": "^3.1.8", + "array.prototype.findlastindex": "^1.2.5", + "array.prototype.flat": "^1.3.2", + "array.prototype.flatmap": "^1.3.2", + "debug": "^3.2.7", + "doctrine": "^2.1.0", + "eslint-import-resolver-node": "^0.3.9", + "eslint-module-utils": "^2.12.0", + "hasown": "^2.0.2", + "is-core-module": "^2.15.1", + "is-glob": "^4.0.3", + "minimatch": "^3.1.2", + "object.fromentries": "^2.0.8", + "object.groupby": "^1.0.3", + "object.values": "^1.2.0", + "semver": "^6.3.1", + "string.prototype.trimend": "^1.0.8", + "tsconfig-paths": "^3.15.0" }, "engines": { "node": ">=4" + }, + "peerDependencies": { + "eslint": "^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8 || ^9" } }, - "node_modules/err-code": { - "version": "2.0.3", + "node_modules/eslint-plugin-import/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, - "license": "MIT" + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } }, - "node_modules/error-ex": { - "version": "1.3.2", + "node_modules/eslint-plugin-import/node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", "dev": true, "license": "MIT", "dependencies": { - "is-arrayish": "^0.2.1" + "ms": "^2.1.1" } }, - "node_modules/es-abstract": { - "version": "1.22.1", + "node_modules/eslint-plugin-import/node_modules/doctrine": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", + "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", "dev": true, - "license": "MIT", + "license": "Apache-2.0", "dependencies": { - "array-buffer-byte-length": "^1.0.0", - "arraybuffer.prototype.slice": "^1.0.1", - "available-typed-arrays": "^1.0.5", - "call-bind": "^1.0.2", - "es-set-tostringtag": "^2.0.1", - "es-to-primitive": "^1.2.1", - "function.prototype.name": "^1.1.5", - "get-intrinsic": "^1.2.1", - "get-symbol-description": "^1.0.0", - "globalthis": "^1.0.3", - "gopd": "^1.0.1", - "has": "^1.0.3", - "has-property-descriptors": "^1.0.0", - "has-proto": "^1.0.1", - "has-symbols": "^1.0.3", - "internal-slot": "^1.0.5", - "is-array-buffer": "^3.0.2", - "is-callable": "^1.2.7", - "is-negative-zero": "^2.0.2", - "is-regex": "^1.1.4", - "is-shared-array-buffer": "^1.0.2", - "is-string": "^1.0.7", - "is-typed-array": "^1.1.10", - "is-weakref": "^1.0.2", - "object-inspect": "^1.12.3", - "object-keys": "^1.1.1", - "object.assign": "^4.1.4", - "regexp.prototype.flags": "^1.5.0", - "safe-array-concat": "^1.0.0", - "safe-regex-test": "^1.0.0", - "string.prototype.trim": "^1.2.7", - "string.prototype.trimend": "^1.0.6", - "string.prototype.trimstart": "^1.0.6", - "typed-array-buffer": "^1.0.0", - "typed-array-byte-length": "^1.0.0", - "typed-array-byte-offset": "^1.0.0", - "typed-array-length": "^1.0.4", - "unbox-primitive": "^1.0.2", - "which-typed-array": "^1.1.10" + "esutils": "^2.0.2" }, "engines": { - "node": ">= 0.4" + "node": ">=0.10.0" + } + }, + "node_modules/eslint-plugin-import/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, + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "engines": { + "node": "*" } }, - "node_modules/es-module-lexer": { - "version": "1.3.0", + "node_modules/eslint-plugin-import/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": "MIT" + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } }, - "node_modules/es-set-tostringtag": { - "version": "2.0.1", + "node_modules/eslint-plugin-node": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-node/-/eslint-plugin-node-11.1.0.tgz", + "integrity": "sha512-oUwtPJ1W0SKD0Tr+wqu92c5xuCeQqB3hSCHasn/ZgjFdA9iDGNkNf2Zi9ztY7X+hNuMib23LNGRm6+uN+KLE3g==", "dev": true, "license": "MIT", "dependencies": { - "get-intrinsic": "^1.1.3", - "has": "^1.0.3", - "has-tostringtag": "^1.0.0" + "eslint-plugin-es": "^3.0.0", + "eslint-utils": "^2.0.0", + "ignore": "^5.1.1", + "minimatch": "^3.0.4", + "resolve": "^1.10.1", + "semver": "^6.1.0" }, "engines": { - "node": ">= 0.4" + "node": ">=8.10.0" + }, + "peerDependencies": { + "eslint": ">=5.16.0" } }, - "node_modules/es-shim-unscopables": { - "version": "1.0.0", + "node_modules/eslint-plugin-node/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, "license": "MIT", "dependencies": { - "has": "^1.0.3" + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" } }, - "node_modules/es-to-primitive": { - "version": "1.2.1", + "node_modules/eslint-plugin-node/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, - "license": "MIT", + "license": "ISC", "dependencies": { - "is-callable": "^1.1.4", - "is-date-object": "^1.0.1", - "is-symbol": "^1.0.2" + "brace-expansion": "^1.1.7" }, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": "*" } }, - "node_modules/es6-object-assign": { - "version": "1.1.0", - "dev": true, - "license": "MIT" - }, - "node_modules/esbuild": { - "version": "0.19.0", + "node_modules/eslint-plugin-node/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, - "hasInstallScript": true, - "license": "MIT", + "license": "ISC", "bin": { - "esbuild": "bin/esbuild" - }, - "engines": { - "node": ">=12" - }, - "optionalDependencies": { - "@esbuild/android-arm": "0.19.0", - "@esbuild/android-arm64": "0.19.0", - "@esbuild/android-x64": "0.19.0", - "@esbuild/darwin-arm64": "0.19.0", - "@esbuild/darwin-x64": "0.19.0", - "@esbuild/freebsd-arm64": "0.19.0", - "@esbuild/freebsd-x64": "0.19.0", - "@esbuild/linux-arm": "0.19.0", - "@esbuild/linux-arm64": "0.19.0", - "@esbuild/linux-ia32": "0.19.0", - "@esbuild/linux-loong64": "0.19.0", - "@esbuild/linux-mips64el": "0.19.0", - "@esbuild/linux-ppc64": "0.19.0", - "@esbuild/linux-riscv64": "0.19.0", - "@esbuild/linux-s390x": "0.19.0", - "@esbuild/linux-x64": "0.19.0", - "@esbuild/netbsd-x64": "0.19.0", - "@esbuild/openbsd-x64": "0.19.0", - "@esbuild/sunos-x64": "0.19.0", - "@esbuild/win32-arm64": "0.19.0", - "@esbuild/win32-ia32": "0.19.0", - "@esbuild/win32-x64": "0.19.0" + "semver": "bin/semver.js" } }, - "node_modules/esbuild-loader": { - "version": "4.0.0", + "node_modules/eslint-plugin-prettier": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-5.2.1.tgz", + "integrity": "sha512-gH3iR3g4JfF+yYPaJYkN7jEl9QbweL/YfkoRlNnuIEHEz1vHVlCmWOS+eGGiRuzHQXdJFCOTxRgvju9b8VUmrw==", "dev": true, "license": "MIT", "dependencies": { - "esbuild": "^0.19.0", - "get-tsconfig": "^4.6.2", - "loader-utils": "^2.0.4", - "webpack-sources": "^1.4.3" + "prettier-linter-helpers": "^1.0.0", + "synckit": "^0.9.1" + }, + "engines": { + "node": "^14.18.0 || >=16.0.0" }, "funding": { - "url": "https://github.com/esbuild-kit/esbuild-loader?sponsor=1" + "url": "https://opencollective.com/eslint-plugin-prettier" }, "peerDependencies": { - "webpack": "^4.40.0 || ^5.0.0" + "@types/eslint": ">=8.0.0", + "eslint": ">=8.0.0", + "eslint-config-prettier": "*", + "prettier": ">=3.0.0" + }, + "peerDependenciesMeta": { + "@types/eslint": { + "optional": true + }, + "eslint-config-prettier": { + "optional": true + } } }, - "node_modules/esbuild/node_modules/@esbuild/android-arm": { - "version": "0.19.0", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.19.0.tgz", - "integrity": "sha512-GAkjUyHgWTYuex3evPd5V7uV/XS4LMKr1PWHRPW1xNyy/Jx08x3uTrDFRefBYLKT/KpaWM8/YMQcwbp5a3yIDA==", - "cpu": [ - "arm" - ], + "node_modules/eslint-plugin-unused-imports": { + "version": "4.1.4", + "resolved": "https://registry.npmjs.org/eslint-plugin-unused-imports/-/eslint-plugin-unused-imports-4.1.4.tgz", + "integrity": "sha512-YptD6IzQjDardkl0POxnnRBhU1OEePMV0nd6siHaRBbd+lyh6NAhFEobiznKU7kTsSsDeSD62Pe7kAM1b7dAZQ==", "dev": true, "license": "MIT", - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=12" + "peerDependencies": { + "@typescript-eslint/eslint-plugin": "^8.0.0-0 || ^7.0.0 || ^6.0.0 || ^5.0.0", + "eslint": "^9.0.0 || ^8.0.0" + }, + "peerDependenciesMeta": { + "@typescript-eslint/eslint-plugin": { + "optional": true + } } }, - "node_modules/esbuild/node_modules/@esbuild/android-arm64": { - "version": "0.19.0", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.19.0.tgz", - "integrity": "sha512-AzsozJnB+RNaDncBCs3Ys5g3kqhPFUueItfEaCpp89JH2naFNX2mYDIvUgPYMqqjm8hiFoo+jklb3QHZyR3ubw==", - "cpu": [ - "arm64" - ], + "node_modules/eslint-scope": { + "version": "7.2.2", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz", + "integrity": "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==", "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "android" - ], + "license": "BSD-2-Clause", + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" + }, "engines": { - "node": ">=12" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" } }, - "node_modules/esbuild/node_modules/@esbuild/android-x64": { - "version": "0.19.0", - "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.19.0.tgz", - "integrity": "sha512-SUG8/qiVhljBDpdkHQ9DvOWbp7hFFIP0OzxOTptbmVsgBgzY6JWowmMd6yJuOhapfxmj/DrvwKmjRLvVSIAKZg==", - "cpu": [ - "x64" - ], + "node_modules/eslint-utils": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.1.0.tgz", + "integrity": "sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==", "dev": true, "license": "MIT", - "optional": true, - "os": [ - "android" - ], + "dependencies": { + "eslint-visitor-keys": "^1.1.0" + }, "engines": { - "node": ">=12" + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/mysticatea" } }, - "node_modules/esbuild/node_modules/@esbuild/darwin-x64": { - "version": "0.19.0", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.19.0.tgz", - "integrity": "sha512-9IRWJjqpWFHM9a5Qs3r3bK834NCFuDY5ZaLrmTjqE+10B6w65UMQzeZjh794JcxpHolsAHqwsN/33crUXNCM2Q==", - "cpu": [ - "x64" - ], + "node_modules/eslint-utils/node_modules/eslint-visitor-keys": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", + "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], + "license": "Apache-2.0", "engines": { - "node": ">=12" + "node": ">=4" } }, - "node_modules/esbuild/node_modules/@esbuild/freebsd-arm64": { - "version": "0.19.0", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.19.0.tgz", - "integrity": "sha512-s7i2WcXcK0V1PJHVBe7NsGddsL62a9Vhpz2U7zapPrwKoFuxPP9jybwX8SXnropR/AOj3ppt2ern4ItblU6UQQ==", - "cpu": [ - "arm64" - ], + "node_modules/eslint-visitor-keys": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", + "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "freebsd" - ], + "license": "Apache-2.0", "engines": { - "node": ">=12" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" } }, - "node_modules/esbuild/node_modules/@esbuild/freebsd-x64": { - "version": "0.19.0", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.19.0.tgz", - "integrity": "sha512-NMdBSSdgwHCqCsucU5k1xflIIRU0qi1QZnM6+vdGy5fvxm1c8rKh50VzsWsIVTFUG3l91AtRxVwoz3Lcvy3I5w==", - "cpu": [ - "x64" - ], + "node_modules/eslint/node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", "dev": true, "license": "MIT", - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">=12" + "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" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" } }, - "node_modules/esbuild/node_modules/@esbuild/linux-arm": { - "version": "0.19.0", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.19.0.tgz", - "integrity": "sha512-2F1+lH7ZBcCcgxiSs8EXQV0PPJJdTNiNcXxDb61vzxTRJJkXX1I/ye9mAhfHyScXzHaEibEXg1Jq9SW586zz7w==", - "cpu": [ - "arm" - ], + "node_modules/eslint/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/eslint/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, "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" } }, - "node_modules/esbuild/node_modules/@esbuild/linux-arm64": { - "version": "0.19.0", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.19.0.tgz", - "integrity": "sha512-I4zvE2srSZxRPapFnNqj+NL3sDJ1wkvEZqt903OZUlBBgigrQMvzUowvP/TTTu2OGYe1oweg5MFilfyrElIFag==", - "cpu": [ - "arm64" - ], + "node_modules/eslint/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==", "dev": true, "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" } }, - "node_modules/esbuild/node_modules/@esbuild/linux-ia32": { - "version": "0.19.0", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.19.0.tgz", - "integrity": "sha512-dz2Q7+P92r1Evc8kEN+cQnB3qqPjmCrOZ+EdBTn8lEc1yN8WDgaDORQQiX+mxaijbH8npXBT9GxUqE52Gt6Y+g==", - "cpu": [ - "ia32" - ], + "node_modules/eslint/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, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], + "license": "MIT" + }, + "node_modules/eslint/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, + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, "engines": { - "node": ">=12" + "node": "*" } }, - "node_modules/esbuild/node_modules/@esbuild/linux-loong64": { - "version": "0.19.0", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.19.0.tgz", - "integrity": "sha512-IcVJovJVflih4oFahhUw+N7YgNbuMSVFNr38awb0LNzfaiIfdqIh518nOfYaNQU3aVfiJnOIRVJDSAP4k35WxA==", - "cpu": [ - "loong64" - ], + "node_modules/espree": { + "version": "9.6.1", + "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz", + "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==", "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], + "license": "BSD-2-Clause", + "dependencies": { + "acorn": "^8.9.0", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^3.4.1" + }, "engines": { - "node": ">=12" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" } }, - "node_modules/esbuild/node_modules/@esbuild/linux-mips64el": { - "version": "0.19.0", - "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.19.0.tgz", - "integrity": "sha512-bZGRAGySMquWsKw0gIdsClwfvgbsSq/7oq5KVu1H1r9Il+WzOcfkV1hguntIuBjRVL8agI95i4AukjdAV2YpUw==", - "cpu": [ - "mips64el" - ], + "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": "MIT", - "optional": true, - "os": [ - "linux" - ], + "license": "BSD-2-Clause", + "bin": { + "esparse": "bin/esparse.js", + "esvalidate": "bin/esvalidate.js" + }, "engines": { - "node": ">=12" + "node": ">=4" } }, - "node_modules/esbuild/node_modules/@esbuild/linux-ppc64": { - "version": "0.19.0", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.19.0.tgz", - "integrity": "sha512-3LC6H5/gCDorxoRBUdpLV/m7UthYSdar0XcCu+ypycQxMS08MabZ06y1D1yZlDzL/BvOYliRNRWVG/YJJvQdbg==", - "cpu": [ - "ppc64" - ], + "node_modules/esquery": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.6.0.tgz", + "integrity": "sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==", "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], + "license": "BSD-3-Clause", + "dependencies": { + "estraverse": "^5.1.0" + }, "engines": { - "node": ">=12" + "node": ">=0.10" } }, - "node_modules/esbuild/node_modules/@esbuild/linux-riscv64": { - "version": "0.19.0", - "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.19.0.tgz", - "integrity": "sha512-jfvdKjWk+Cp2sgLtEEdSHXO7qckrw2B2eFBaoRdmfhThqZs29GMMg7q/LsQpybA7BxCLLEs4di5ucsWzZC5XPA==", - "cpu": [ - "riscv64" - ], + "node_modules/esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], + "license": "BSD-2-Clause", + "dependencies": { + "estraverse": "^5.2.0" + }, "engines": { - "node": ">=12" + "node": ">=4.0" } }, - "node_modules/esbuild/node_modules/@esbuild/linux-s390x": { - "version": "0.19.0", - "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.19.0.tgz", - "integrity": "sha512-ofcucfNLkoXmcnJaw9ugdEOf40AWKGt09WBFCkpor+vFJVvmk/8OPjl/qRtks2Z7BuZbG3ztJuK1zS9z5Cgx9A==", - "cpu": [ - "s390x" - ], + "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": "MIT", - "optional": true, - "os": [ - "linux" - ], + "license": "BSD-2-Clause", "engines": { - "node": ">=12" + "node": ">=4.0" } }, - "node_modules/esbuild/node_modules/@esbuild/linux-x64": { - "version": "0.19.0", - "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.19.0.tgz", - "integrity": "sha512-Fpf7zNDBti3xrQKQKLdXT0hTyOxgFdRJIMtNy8x1az9ATR9/GJ1brYbB/GLWoXhKiHsoWs+2DLkFVNNMTCLEwA==", - "cpu": [ - "x64" - ], + "node_modules/estree-walker": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-3.0.3.tgz", + "integrity": "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==", "dev": true, "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" + "dependencies": { + "@types/estree": "^1.0.0" } }, - "node_modules/esbuild/node_modules/@esbuild/netbsd-x64": { - "version": "0.19.0", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.19.0.tgz", - "integrity": "sha512-AMQAp/5oENgDOvVhvOlbhVe1pWii7oFAMRHlmTjSEMcpjTpIHtFXhv9uAFgUERHm3eYtNvS9Vf+gT55cwuI6Aw==", - "cpu": [ - "x64" - ], + "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": "MIT", - "optional": true, - "os": [ - "netbsd" - ], + "license": "BSD-2-Clause", "engines": { - "node": ">=12" + "node": ">=0.10.0" } }, - "node_modules/esbuild/node_modules/@esbuild/openbsd-x64": { - "version": "0.19.0", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.19.0.tgz", - "integrity": "sha512-fDztEve1QUs3h/Dw2AUmBlWGkNQbhDoD05ppm5jKvzQv+HVuV13so7m5RYeiSMIC2XQy7PAjZh+afkxAnCRZxA==", - "cpu": [ - "x64" - ], - "dev": true, + "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", - "optional": true, - "os": [ - "openbsd" - ], "engines": { - "node": ">=12" + "node": ">= 0.6" } }, - "node_modules/esbuild/node_modules/@esbuild/sunos-x64": { - "version": "0.19.0", - "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.19.0.tgz", - "integrity": "sha512-bKZzJ2/rvUjDzA5Ddyva2tMk89WzNJEibZEaq+wY6SiqPlwgFbqyQLimouxLHiHh1itb5P3SNCIF1bc2bw5H9w==", - "cpu": [ - "x64" - ], + "node_modules/eventemitter3": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", + "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==", + "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", - "optional": true, - "os": [ - "sunos" - ], "engines": { - "node": ">=12" + "node": ">=0.8.x" } }, - "node_modules/esbuild/node_modules/@esbuild/win32-arm64": { - "version": "0.19.0", - "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.19.0.tgz", - "integrity": "sha512-NQJ+4jmnA79saI+sE+QzcEls19uZkoEmdxo7r//PDOjIpX8pmoWtTnWg6XcbnO7o4fieyAwb5U2LvgWynF4diA==", - "cpu": [ - "arm64" - ], + "node_modules/evp_bytestokey": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz", + "integrity": "sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==", "dev": true, "license": "MIT", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=12" + "dependencies": { + "md5.js": "^1.3.4", + "safe-buffer": "^5.1.1" } }, - "node_modules/esbuild/node_modules/@esbuild/win32-ia32": { - "version": "0.19.0", - "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.19.0.tgz", - "integrity": "sha512-uyxiZAnsfu9diHm9/rIH2soecF/HWLXYUhJKW4q1+/LLmNQ+55lRjvSUDhUmsgJtSUscRJB/3S4RNiTb9o9mCg==", - "cpu": [ - "ia32" - ], + "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", - "optional": true, - "os": [ - "win32" - ], + "dependencies": { + "cross-spawn": "^7.0.3", + "get-stream": "^6.0.0", + "human-signals": "^2.1.0", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^4.0.1", + "onetime": "^5.1.2", + "signal-exit": "^3.0.3", + "strip-final-newline": "^2.0.0" + }, "engines": { - "node": ">=12" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sindresorhus/execa?sponsor=1" } }, - "node_modules/esbuild/node_modules/@esbuild/win32-x64": { - "version": "0.19.0", - "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.19.0.tgz", - "integrity": "sha512-jl+NXUjK2StMgqnZnqgNjZuerFG8zQqWXMBZdMMv4W/aO1ZKQaYWZBxTrtWKphkCBVEMh0wMVfGgOd2BjOZqUQ==", - "cpu": [ - "x64" - ], + "node_modules/exit": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz", + "integrity": "sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ==", "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ], "engines": { - "node": ">=12" + "node": ">= 0.8.0" } }, - "node_modules/escalade": { - "version": "3.1.1", + "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", + "jest-matcher-utils": "^29.7.0", + "jest-message-util": "^29.7.0", + "jest-util": "^29.7.0" + }, "engines": { - "node": ">=6" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/escape-html": { - "version": "1.0.3", - "license": "MIT" - }, - "node_modules/escape-string-regexp": { - "version": "1.0.5", - "license": "MIT", + "node_modules/expect-type": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/expect-type/-/expect-type-1.1.0.tgz", + "integrity": "sha512-bFi65yM+xZgk+u/KRIpekdSYkTB5W1pEf0Lt8Q8Msh7b+eQ7LXVtIB1Bkm4fvclDEL1b2CZkMhv2mOeF8tMdkA==", + "dev": true, + "license": "Apache-2.0", "engines": { - "node": ">=0.8.0" + "node": ">=12.0.0" } }, - "node_modules/escodegen": { - "version": "2.1.0", - "dev": true, - "license": "BSD-2-Clause", + "node_modules/exponential-backoff": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/exponential-backoff/-/exponential-backoff-3.1.1.tgz", + "integrity": "sha512-dX7e/LHVJ6W3DE1MHWi9S1EYzDESENfLrYohG2G++ovZrYOkm4Knwa0mc1cn84xJOR4KEU0WSchhLbd0UklbHw==", + "dev": true, + "license": "Apache-2.0" + }, + "node_modules/express": { + "version": "4.21.1", + "resolved": "https://registry.npmjs.org/express/-/express-4.21.1.tgz", + "integrity": "sha512-YSFlK1Ee0/GC8QaO91tHcDxJiE/X4FbpAyQWkxAvG6AXCuR65YzK8ua6D9hvi/TzUfZMpc+BwuM1IPw8fmQBiQ==", + "license": "MIT", "dependencies": { - "esprima": "^4.0.1", - "estraverse": "^5.2.0", - "esutils": "^2.0.2" - }, - "bin": { - "escodegen": "bin/escodegen.js", - "esgenerate": "bin/esgenerate.js" + "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.10", + "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": ">=6.0" - }, - "optionalDependencies": { - "source-map": "~0.6.1" + "node": ">= 0.10.0" } }, - "node_modules/eslint": { - "version": "8.46.0", - "dev": true, + "node_modules/express-winston": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/express-winston/-/express-winston-3.4.0.tgz", + "integrity": "sha512-CKo4ESwIV4BpNIsGVNiq2GcAwuomL4dVJRIIH/2K/jMpoRI2DakhkVTtaJACzV7n2I1v+knDJkkjZRCymJ7nmA==", "license": "MIT", "dependencies": { - "@eslint-community/eslint-utils": "^4.2.0", - "@eslint-community/regexpp": "^4.6.1", - "@eslint/eslintrc": "^2.1.1", - "@eslint/js": "^8.46.0", - "@humanwhocodes/config-array": "^0.11.10", - "@humanwhocodes/module-importer": "^1.0.1", - "@nodelib/fs.walk": "^1.2.8", - "ajv": "^6.12.4", - "chalk": "^4.0.0", - "cross-spawn": "^7.0.2", - "debug": "^4.3.2", - "doctrine": "^3.0.0", - "escape-string-regexp": "^4.0.0", - "eslint-scope": "^7.2.2", - "eslint-visitor-keys": "^3.4.2", - "espree": "^9.6.1", - "esquery": "^1.4.2", - "esutils": "^2.0.2", - "fast-deep-equal": "^3.1.3", - "file-entry-cache": "^6.0.1", - "find-up": "^5.0.0", - "glob-parent": "^6.0.2", - "globals": "^13.19.0", - "graphemer": "^1.4.0", - "ignore": "^5.2.0", - "imurmurhash": "^0.1.4", - "is-glob": "^4.0.0", - "is-path-inside": "^3.0.3", - "js-yaml": "^4.1.0", - "json-stable-stringify-without-jsonify": "^1.0.1", - "levn": "^0.4.1", - "lodash.merge": "^4.6.2", - "minimatch": "^3.1.2", - "natural-compare": "^1.4.0", - "optionator": "^0.9.3", - "strip-ansi": "^6.0.1", - "text-table": "^0.2.0" - }, - "bin": { - "eslint": "bin/eslint.js" + "chalk": "^2.4.1", + "lodash": "^4.17.10" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": ">= 6" }, - "funding": { - "url": "https://opencollective.com/eslint" + "peerDependencies": { + "winston": ">=3.x <4" } }, - "node_modules/eslint-config-prettier": { - "version": "9.0.0", - "dev": true, + "node_modules/express-winston/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==", "license": "MIT", - "bin": { - "eslint-config-prettier": "bin/cli.js" + "dependencies": { + "color-convert": "^1.9.0" }, - "peerDependencies": { - "eslint": ">=7.0.0" + "engines": { + "node": ">=4" } }, - "node_modules/eslint-import-resolver-node": { - "version": "0.3.9", - "dev": true, + "node_modules/express-winston/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==", "license": "MIT", "dependencies": { - "debug": "^3.2.7", - "is-core-module": "^2.13.0", - "resolve": "^1.22.4" + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" } }, - "node_modules/eslint-import-resolver-node/node_modules/debug": { - "version": "3.2.7", - "dev": true, + "node_modules/express-winston/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==", "license": "MIT", "dependencies": { - "ms": "^2.1.1" + "color-name": "1.1.3" } }, - "node_modules/eslint-import-resolver-typescript": { - "version": "3.6.0", - "dev": true, - "license": "ISC", - "dependencies": { - "debug": "^4.3.4", - "enhanced-resolve": "^5.12.0", - "eslint-module-utils": "^2.7.4", - "fast-glob": "^3.3.1", - "get-tsconfig": "^4.5.0", - "is-core-module": "^2.11.0", - "is-glob": "^4.0.3" - }, + "node_modules/express-winston/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==", + "license": "MIT" + }, + "node_modules/express-winston/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==", + "license": "MIT", "engines": { - "node": "^14.18.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/unts/projects/eslint-import-resolver-ts" - }, - "peerDependencies": { - "eslint": "*", - "eslint-plugin-import": "*" + "node": ">=0.8.0" } }, - "node_modules/eslint-module-utils": { - "version": "2.8.0", - "dev": true, + "node_modules/express-winston/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==", "license": "MIT", - "dependencies": { - "debug": "^3.2.7" - }, "engines": { "node": ">=4" - }, - "peerDependenciesMeta": { - "eslint": { - "optional": true - } } }, - "node_modules/eslint-module-utils/node_modules/debug": { - "version": "3.2.7", - "dev": true, + "node_modules/express-winston/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==", "license": "MIT", "dependencies": { - "ms": "^2.1.1" + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" } }, - "node_modules/eslint-plugin-es": { - "version": "3.0.1", - "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==", "license": "MIT", "dependencies": { - "eslint-utils": "^2.0.0", - "regexpp": "^3.0.0" - }, - "engines": { - "node": ">=8.10.0" - }, - "funding": { - "url": "https://github.com/sponsors/mysticatea" - }, - "peerDependencies": { - "eslint": ">=4.19.1" + "ms": "2.0.0" } }, - "node_modules/eslint-plugin-import": { - "version": "2.28.0", + "node_modules/express/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/extend": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", + "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", + "license": "MIT" + }, + "node_modules/extendable-error": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/extendable-error/-/extendable-error-0.1.7.tgz", + "integrity": "sha512-UOiS2in6/Q0FK0R0q6UY9vYpQ21mr/Qn1KOnte7vsACuNJf514WvCCUHSRCPcgjPT2bAhNIJdlE6bVap1GKmeg==", "dev": true, + "license": "MIT" + }, + "node_modules/external-editor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz", + "integrity": "sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==", "license": "MIT", "dependencies": { - "array-includes": "^3.1.6", - "array.prototype.findlastindex": "^1.2.2", - "array.prototype.flat": "^1.3.1", - "array.prototype.flatmap": "^1.3.1", - "debug": "^3.2.7", - "doctrine": "^2.1.0", - "eslint-import-resolver-node": "^0.3.7", - "eslint-module-utils": "^2.8.0", - "has": "^1.0.3", - "is-core-module": "^2.12.1", - "is-glob": "^4.0.3", - "minimatch": "^3.1.2", - "object.fromentries": "^2.0.6", - "object.groupby": "^1.0.0", - "object.values": "^1.1.6", - "resolve": "^1.22.3", - "semver": "^6.3.1", - "tsconfig-paths": "^3.14.2" + "chardet": "^0.7.0", + "iconv-lite": "^0.4.24", + "tmp": "^0.0.33" }, "engines": { "node": ">=4" - }, - "peerDependencies": { - "eslint": "^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8" } }, - "node_modules/eslint-plugin-import/node_modules/debug": { - "version": "3.2.7", + "node_modules/extsprintf": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", + "integrity": "sha512-11Ndz7Nv+mvAC1j0ktTa7fAb0vLyGGX+rMHNBYQviQDGU0Hw7lhctJANqbPhu9nV9/izT/IntTgZ7Im/9LJs9g==", + "engines": [ + "node >=0.6.0" + ], + "license": "MIT" + }, + "node_modules/fast-deep-equal": { + "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==", + "license": "MIT" + }, + "node_modules/fast-diff": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/fast-diff/-/fast-diff-1.3.0.tgz", + "integrity": "sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw==", "dev": true, - "license": "MIT", - "dependencies": { - "ms": "^2.1.1" - } + "license": "Apache-2.0" }, - "node_modules/eslint-plugin-import/node_modules/doctrine": { - "version": "2.1.0", + "node_modules/fast-glob": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz", + "integrity": "sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==", "dev": true, - "license": "Apache-2.0", + "license": "MIT", "dependencies": { - "esutils": "^2.0.2" + "@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" }, "engines": { - "node": ">=0.10.0" + "node": ">=8.6.0" } }, - "node_modules/eslint-plugin-import/node_modules/semver": { - "version": "6.3.1", + "node_modules/fast-glob/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", - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/eslint-plugin-node": { - "version": "11.1.0", - "dev": true, - "license": "MIT", "dependencies": { - "eslint-plugin-es": "^3.0.0", - "eslint-utils": "^2.0.0", - "ignore": "^5.1.1", - "minimatch": "^3.0.4", - "resolve": "^1.10.1", - "semver": "^6.1.0" + "is-glob": "^4.0.1" }, "engines": { - "node": ">=8.10.0" - }, - "peerDependencies": { - "eslint": ">=5.16.0" + "node": ">= 6" } }, - "node_modules/eslint-plugin-node/node_modules/semver": { - "version": "6.3.1", + "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==", + "license": "MIT" + }, + "node_modules/fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", + "dev": true, + "license": "MIT" + }, + "node_modules/fast-uri": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.0.3.tgz", + "integrity": "sha512-aLrHthzCjH5He4Z2H9YZ+v6Ujb9ocRuW6ZzkJQOrTxleEijANq4v1TsaPaVG1PZcuurEzrLcWRyYBYXD5cEiaw==", + "dev": true, + "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.17.1", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.17.1.tgz", + "integrity": "sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==", "dev": true, "license": "ISC", - "bin": { - "semver": "bin/semver.js" + "dependencies": { + "reusify": "^1.0.4" } }, - "node_modules/eslint-plugin-prettier": { - "version": "5.0.0", + "node_modules/fb-watchman": { + "version": "2.0.2", + "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/fecha": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/fecha/-/fecha-4.2.3.tgz", + "integrity": "sha512-OP2IUU6HeYKJi3i0z4A19kHMQoLVs4Hc+DPqqxI2h/DPZHTm/vjsfC6P0b4jCMy14XizLBqvndQ+UilD7707Jw==", + "license": "MIT" + }, + "node_modules/figures": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz", + "integrity": "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==", "license": "MIT", "dependencies": { - "prettier-linter-helpers": "^1.0.0", - "synckit": "^0.8.5" + "escape-string-regexp": "^1.0.5" }, "engines": { - "node": "^14.18.0 || >=16.0.0" + "node": ">=8" }, "funding": { - "url": "https://opencollective.com/prettier" - }, - "peerDependencies": { - "@types/eslint": ">=8.0.0", - "eslint": ">=8.0.0", - "prettier": ">=3.0.0" - }, - "peerDependenciesMeta": { - "@types/eslint": { - "optional": true - }, - "eslint-config-prettier": { - "optional": true - } + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/eslint-plugin-unused-imports": { - "version": "3.0.0", + "node_modules/figures/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==", + "license": "MIT", + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/file-entry-cache": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", + "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", "dev": true, "license": "MIT", "dependencies": { - "eslint-rule-composer": "^0.3.0" + "flat-cache": "^3.0.4" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "peerDependencies": { - "@typescript-eslint/eslint-plugin": "^6.0.0", - "eslint": "^8.0.0" - }, - "peerDependenciesMeta": { - "@typescript-eslint/eslint-plugin": { - "optional": true - } + "node": "^10.12.0 || >=12.0.0" } }, - "node_modules/eslint-rule-composer": { - "version": "0.3.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==", + "license": "MIT" + }, + "node_modules/filelist": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/filelist/-/filelist-1.0.4.tgz", + "integrity": "sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==", "dev": true, - "license": "MIT", - "engines": { - "node": ">=4.0.0" + "license": "Apache-2.0", + "dependencies": { + "minimatch": "^5.0.1" } }, - "node_modules/eslint-scope": { - "version": "7.2.2", + "node_modules/filelist/node_modules/minimatch": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", + "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", "dev": true, - "license": "BSD-2-Clause", + "license": "ISC", "dependencies": { - "esrecurse": "^4.3.0", - "estraverse": "^5.2.0" + "brace-expansion": "^2.0.1" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" + "node": ">=10" } }, - "node_modules/eslint-utils": { - "version": "2.1.0", + "node_modules/filing-cabinet": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/filing-cabinet/-/filing-cabinet-3.3.1.tgz", + "integrity": "sha512-renEK4Hh6DUl9Vl22Y3cxBq1yh8oNvbAdXnhih0wVpmea+uyKjC9K4QeRjUaybIiIewdzfum+Fg15ZqJ/GyCaA==", "dev": true, "license": "MIT", "dependencies": { - "eslint-visitor-keys": "^1.1.0" + "app-module-path": "^2.2.0", + "commander": "^2.20.3", + "debug": "^4.3.3", + "enhanced-resolve": "^5.8.3", + "is-relative-path": "^1.0.2", + "module-definition": "^3.3.1", + "module-lookup-amd": "^7.0.1", + "resolve": "^1.21.0", + "resolve-dependency-path": "^2.0.0", + "sass-lookup": "^3.0.0", + "stylus-lookup": "^3.0.1", + "tsconfig-paths": "^3.10.1", + "typescript": "^3.9.7" }, - "engines": { - "node": ">=6" + "bin": { + "filing-cabinet": "bin/cli.js" }, - "funding": { - "url": "https://github.com/sponsors/mysticatea" + "engines": { + "node": ">=10.13.0" } }, - "node_modules/eslint-utils/node_modules/eslint-visitor-keys": { - "version": "1.3.0", + "node_modules/filing-cabinet/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, - "license": "Apache-2.0", - "engines": { - "node": ">=4" - } + "license": "MIT" }, - "node_modules/eslint-visitor-keys": { - "version": "3.4.2", + "node_modules/filing-cabinet/node_modules/typescript": { + "version": "3.9.10", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-3.9.10.tgz", + "integrity": "sha512-w6fIxVE/H1PkLKcCPsFqKE7Kv7QUwhU8qQY2MueZXWx5cPZdwFupLgKK3vntcK98BtNHZtAF4LA/yl2a7k8R6Q==", "dev": true, "license": "Apache-2.0", - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" }, - "funding": { - "url": "https://opencollective.com/eslint" + "engines": { + "node": ">=4.2.0" } }, - "node_modules/eslint/node_modules/ansi-styles": { - "version": "4.3.0", + "node_modules/fill-range": { + "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": { - "color-convert": "^2.0.1" + "to-regex-range": "^5.0.1" }, "engines": { "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/eslint/node_modules/argparse": { - "version": "2.0.1", - "dev": true, - "license": "Python-2.0" + "node_modules/filter-obj": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/filter-obj/-/filter-obj-1.1.0.tgz", + "integrity": "sha512-8rXg1ZnX7xzy2NGDVkBVaAy+lSlPNwad13BtgSlLuxfIslyt5Vg64U7tFcCt4WS1R0hvtnQybT/IyCkGZ3DpXQ==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } }, - "node_modules/eslint/node_modules/chalk": { - "version": "4.1.2", - "dev": true, + "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": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" + "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": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" + "node": ">= 0.8" } }, - "node_modules/eslint/node_modules/color-convert": { - "version": "2.0.1", - "dev": true, + "node_modules/finalhandler/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": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" + "ms": "2.0.0" } }, - "node_modules/eslint/node_modules/color-name": { - "version": "1.1.4", - "dev": true, + "node_modules/finalhandler/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/eslint/node_modules/escape-string-regexp": { - "version": "4.0.0", + "node_modules/find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", "dev": true, "license": "MIT", + "dependencies": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + }, "engines": { "node": ">=10" }, @@ -10423,730 +11268,778 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/eslint/node_modules/has-flag": { - "version": "4.0.0", + "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": "MIT", - "engines": { - "node": ">=8" + "license": "BSD-3-Clause", + "bin": { + "flat": "cli.js" } }, - "node_modules/eslint/node_modules/js-yaml": { - "version": "4.1.0", + "node_modules/flat-cache": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.2.0.tgz", + "integrity": "sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==", "dev": true, "license": "MIT", "dependencies": { - "argparse": "^2.0.1" + "flatted": "^3.2.9", + "keyv": "^4.5.3", + "rimraf": "^3.0.2" }, - "bin": { - "js-yaml": "bin/js-yaml.js" + "engines": { + "node": "^10.12.0 || >=12.0.0" } }, - "node_modules/eslint/node_modules/supports-color": { - "version": "7.2.0", + "node_modules/flat-cache/node_modules/rimraf": { + "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": "MIT", + "license": "ISC", "dependencies": { - "has-flag": "^4.0.0" + "glob": "^7.1.3" }, - "engines": { - "node": ">=8" + "bin": { + "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/espree": { - "version": "9.6.1", + "node_modules/flatted": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.2.tgz", + "integrity": "sha512-AiwGJM8YcNOaobumgtng+6NHuOqC3A7MixFeDafM3X9cIUM+xUXoS5Vfgf+OihAYe20fxqNM9yPBXJzRtZ/4eA==", "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "acorn": "^8.9.0", - "acorn-jsx": "^5.3.2", - "eslint-visitor-keys": "^3.4.1" - }, + "license": "ISC" + }, + "node_modules/flatten": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/flatten/-/flatten-1.0.3.tgz", + "integrity": "sha512-dVsPA/UwQ8+2uoFe5GHtiBMu48dWLTdsuEd7CKGlZlD78r1TTWBvDuFaFGKCo/ZfEr95Uk56vZoX86OsHkUeIg==", + "deprecated": "flatten is deprecated in favor of utility frameworks such as lodash.", + "dev": true, + "license": "MIT" + }, + "node_modules/fn.name": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/fn.name/-/fn.name-1.1.0.tgz", + "integrity": "sha512-GRnmB5gPyJpAhTQdSZTSp9uaPSvl09KoYcMQtsB9rQoOmzs9dH6ffeccH+Z+cv6P68Hu5bC6JjRh4Ah/mHSNRw==", + "license": "MIT" + }, + "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==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/RubenVerborgh" + } + ], + "license": "MIT", "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": ">=4.0" }, - "funding": { - "url": "https://opencollective.com/eslint" + "peerDependenciesMeta": { + "debug": { + "optional": true + } } }, - "node_modules/esprima": { - "version": "4.0.1", + "node_modules/for-each": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", + "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==", "dev": true, - "license": "BSD-2-Clause", - "bin": { - "esparse": "bin/esparse.js", - "esvalidate": "bin/esvalidate.js" - }, - "engines": { - "node": ">=4" + "license": "MIT", + "dependencies": { + "is-callable": "^1.1.3" } }, - "node_modules/esquery": { - "version": "1.5.0", + "node_modules/foreground-child": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.3.0.tgz", + "integrity": "sha512-Ld2g8rrAyMYFXBhEqMz8ZAHBi4J4uS1i/CxGMDnjyFWddMXLVcDp051DZfu+t7+ab7Wv6SMqpWmyFIj5UbfFvg==", "dev": true, - "license": "BSD-3-Clause", + "license": "ISC", "dependencies": { - "estraverse": "^5.1.0" + "cross-spawn": "^7.0.0", + "signal-exit": "^4.0.1" }, "engines": { - "node": ">=0.10" + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/esrecurse": { - "version": "4.3.0", + "node_modules/foreground-child/node_modules/signal-exit": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "estraverse": "^5.2.0" - }, + "license": "ISC", "engines": { - "node": ">=4.0" + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/estraverse": { - "version": "5.3.0", - "dev": true, - "license": "BSD-2-Clause", + "node_modules/forever-agent": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", + "integrity": "sha512-j0KLYPhm6zeac4lz3oJ3o65qvgQCcPubiyotZrXqEaG4hNagNYO8qdlUrX5vwqv9ohqeT/Z3j6+yW067yWWdUw==", + "license": "Apache-2.0", "engines": { - "node": ">=4.0" + "node": "*" } }, - "node_modules/esutils": { - "version": "2.0.3", + "node_modules/form-data": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.1.tgz", + "integrity": "sha512-tzN8e4TX8+kkxGPK8D5u0FNmjPUjw3lwC9lSLxxoB/+GtsJG91CO8bSWy73APlgAZzZbXEYZJuxjkHH2w+Ezhw==", "dev": true, - "license": "BSD-2-Clause", + "license": "MIT", + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" + }, "engines": { - "node": ">=0.10.0" + "node": ">= 6" } }, - "node_modules/etag": { - "version": "1.8.1", + "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/eventemitter3": { - "version": "4.0.7", + "node_modules/fp-ts": { + "version": "2.16.9", + "resolved": "https://registry.npmjs.org/fp-ts/-/fp-ts-2.16.9.tgz", + "integrity": "sha512-+I2+FnVB+tVaxcYyQkHUq7ZdKScaBlX53A41mxQtpIccsfyv8PzdzP7fzp2AY832T4aoK6UZ5WRX/ebGd8uZuQ==", + "dev": true, "license": "MIT" }, - "node_modules/events": { - "version": "3.3.0", - "dev": true, + "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.8.x" + "node": ">= 0.6" } }, - "node_modules/evp_bytestokey": { - "version": "1.0.3", + "node_modules/front-matter": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/front-matter/-/front-matter-4.0.2.tgz", + "integrity": "sha512-I8ZuJ/qG92NWX8i5x1Y8qyj3vizhXS31OxjKDu3LKP+7/qBgfIKValiZIEwoVoJKUHlhWtYrktkxV1XsX+pPlg==", "dev": true, "license": "MIT", "dependencies": { - "md5.js": "^1.3.4", - "safe-buffer": "^5.1.1" + "js-yaml": "^3.13.1" } }, - "node_modules/execa": { - "version": "5.1.1", + "node_modules/fs-constants": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", + "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==", + "dev": true, + "license": "MIT" + }, + "node_modules/fs-extra": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-7.0.1.tgz", + "integrity": "sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==", "dev": true, "license": "MIT", "dependencies": { - "cross-spawn": "^7.0.3", - "get-stream": "^6.0.0", - "human-signals": "^2.1.0", - "is-stream": "^2.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^4.0.1", - "onetime": "^5.1.2", - "signal-exit": "^3.0.3", - "strip-final-newline": "^2.0.0" - }, - "engines": { - "node": ">=10" + "graceful-fs": "^4.1.2", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" }, - "funding": { - "url": "https://github.com/sindresorhus/execa?sponsor=1" - } - }, - "node_modules/exit": { - "version": "0.1.2", - "dev": true, "engines": { - "node": ">= 0.8.0" + "node": ">=6 <7 || >=8" } }, - "node_modules/expect": { - "version": "29.6.2", + "node_modules/fs-minipass": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-3.0.3.tgz", + "integrity": "sha512-XUBA9XClHbnJWSfBzjkm6RvPsyg3sryZt06BEQoXcF7EK/xpGaQYJgQKDJSUH5SGZ76Y7pFx1QBnXz09rU5Fbw==", "dev": true, - "license": "MIT", + "license": "ISC", "dependencies": { - "@jest/expect-utils": "^29.6.2", - "@types/node": "*", - "jest-get-type": "^29.4.3", - "jest-matcher-utils": "^29.6.2", - "jest-message-util": "^29.6.2", - "jest-util": "^29.6.2" + "minipass": "^7.0.3" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, - "node_modules/exponential-backoff": { - "version": "3.1.1", + "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": "Apache-2.0" + "license": "ISC" }, - "node_modules/express": { - "version": "4.18.2", + "node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "dev": true, + "hasInstallScript": true, "license": "MIT", - "dependencies": { - "accepts": "~1.3.8", - "array-flatten": "1.1.1", - "body-parser": "1.20.1", - "content-disposition": "0.5.4", - "content-type": "~1.0.4", - "cookie": "0.5.0", - "cookie-signature": "1.0.6", - "debug": "2.6.9", - "depd": "2.0.0", - "encodeurl": "~1.0.2", - "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", - "methods": "~1.1.2", - "on-finished": "2.4.1", - "parseurl": "~1.3.3", - "path-to-regexp": "0.1.7", - "proxy-addr": "~2.0.7", - "qs": "6.11.0", - "range-parser": "~1.2.1", - "safe-buffer": "5.2.1", - "send": "0.18.0", - "serve-static": "1.15.0", - "setprototypeof": "1.2.0", - "statuses": "2.0.1", - "type-is": "~1.6.18", - "utils-merge": "1.0.1", - "vary": "~1.1.2" - }, + "optional": true, + "os": [ + "darwin" + ], "engines": { - "node": ">= 0.10.0" + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" } }, - "node_modules/express-winston": { - "version": "3.4.0", + "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/function.prototype.name": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.6.tgz", + "integrity": "sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg==", + "dev": true, "license": "MIT", "dependencies": { - "chalk": "^2.4.1", - "lodash": "^4.17.10" + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "functions-have-names": "^1.2.3" }, "engines": { - "node": ">= 6" + "node": ">= 0.4" }, - "peerDependencies": { - "winston": ">=3.x <4" + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/express/node_modules/debug": { - "version": "2.6.9", + "node_modules/functions-have-names": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", + "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==", + "dev": true, "license": "MIT", - "dependencies": { - "ms": "2.0.0" + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/express/node_modules/ms": { - "version": "2.0.0", - "license": "MIT" - }, - "node_modules/extend": { - "version": "3.0.2", - "license": "MIT" - }, - "node_modules/extendable-error": { - "version": "0.1.7", + "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" - }, - "node_modules/external-editor": { - "version": "3.1.0", "license": "MIT", - "dependencies": { - "chardet": "^0.7.0", - "iconv-lite": "^0.4.24", - "tmp": "^0.0.33" - }, "engines": { - "node": ">=4" + "node": ">=6.9.0" } }, - "node_modules/extsprintf": { - "version": "1.3.0", - "engines": [ - "node >=0.6.0" - ], - "license": "MIT" - }, - "node_modules/fast-deep-equal": { - "version": "3.1.3", - "license": "MIT" - }, - "node_modules/fast-diff": { - "version": "1.3.0", - "dev": true, - "license": "Apache-2.0" - }, - "node_modules/fast-glob": { - "version": "3.3.1", + "node_modules/get-amd-module-type": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/get-amd-module-type/-/get-amd-module-type-4.1.0.tgz", + "integrity": "sha512-0e/eK6vTGCnSfQ6eYs3wtH05KotJYIP7ZIZEueP/KlA+0dIAEs8bYFvOd/U56w1vfjhJqBagUxVMyy9Tr/cViQ==", "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" + "ast-module-types": "^4.0.0", + "node-source-walk": "^5.0.1" }, "engines": { - "node": ">=8.6.0" + "node": ">=12" } }, - "node_modules/fast-glob/node_modules/glob-parent": { - "version": "5.1.2", + "node_modules/get-caller-file": { + "version": "2.0.5", + "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.4", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.4.tgz", + "integrity": "sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==", + "license": "MIT", "dependencies": { - "is-glob": "^4.0.1" + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "has-proto": "^1.0.1", + "has-symbols": "^1.0.3", + "hasown": "^2.0.0" }, "engines": { - "node": ">= 6" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/fast-json-stable-stringify": { - "version": "2.1.0", - "license": "MIT" + "node_modules/get-own-enumerable-property-symbols": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/get-own-enumerable-property-symbols/-/get-own-enumerable-property-symbols-3.0.2.tgz", + "integrity": "sha512-I0UBV/XOz1XkIJHEUDMZAbzCThU/H8DxmSfmdGcKPnVhu2VfFqr34jr9777IyaTYvxjedWhqVIilEDsCdP5G6g==", + "dev": true, + "license": "ISC" }, - "node_modules/fast-levenshtein": { - "version": "2.0.6", + "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" + "license": "MIT", + "engines": { + "node": ">=8.0.0" + } }, - "node_modules/fastest-levenshtein": { - "version": "1.0.16", + "node_modules/get-pkg-repo": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/get-pkg-repo/-/get-pkg-repo-4.2.1.tgz", + "integrity": "sha512-2+QbHjFRfGB74v/pYWjd5OhU3TDIC2Gv/YKUTk/tCvAz0pkn/Mz6P3uByuBimLOcPvN2jYdScl3xGFSrx0jEcA==", "dev": true, "license": "MIT", + "dependencies": { + "@hutson/parse-repository-url": "^3.0.0", + "hosted-git-info": "^4.0.0", + "through2": "^2.0.0", + "yargs": "^16.2.0" + }, + "bin": { + "get-pkg-repo": "src/cli.js" + }, "engines": { - "node": ">= 4.9.1" + "node": ">=6.9.0" } }, - "node_modules/fastq": { - "version": "1.15.0", + "node_modules/get-pkg-repo/node_modules/cliui": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", + "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", "dev": true, "license": "ISC", "dependencies": { - "reusify": "^1.0.4" + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^7.0.0" } }, - "node_modules/fb-watchman": { - "version": "2.0.2", + "node_modules/get-pkg-repo/node_modules/hosted-git-info": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.1.0.tgz", + "integrity": "sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==", "dev": true, - "license": "Apache-2.0", + "license": "ISC", "dependencies": { - "bser": "2.1.1" + "lru-cache": "^6.0.0" + }, + "engines": { + "node": ">=10" } }, - "node_modules/fecha": { - "version": "4.2.3", + "node_modules/get-pkg-repo/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, "license": "MIT" }, - "node_modules/figures": { - "version": "3.2.0", - "license": "MIT", + "node_modules/get-pkg-repo/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": { - "escape-string-regexp": "^1.0.5" + "yallist": "^4.0.0" }, "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=10" } }, - "node_modules/file-entry-cache": { - "version": "6.0.1", + "node_modules/get-pkg-repo/node_modules/readable-stream": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", "dev": true, "license": "MIT", "dependencies": { - "flat-cache": "^3.0.4" - }, - "engines": { - "node": "^10.12.0 || >=12.0.0" + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" } }, - "node_modules/file-uri-to-path": { - "version": "1.0.0", + "node_modules/get-pkg-repo/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, "license": "MIT" }, - "node_modules/filelist": { - "version": "1.0.4", + "node_modules/get-pkg-repo/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": "Apache-2.0", + "license": "MIT", "dependencies": { - "minimatch": "^5.0.1" + "safe-buffer": "~5.1.0" } }, - "node_modules/filelist/node_modules/brace-expansion": { - "version": "2.0.1", + "node_modules/get-pkg-repo/node_modules/through2": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", + "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", "dev": true, "license": "MIT", "dependencies": { - "balanced-match": "^1.0.0" + "readable-stream": "~2.3.6", + "xtend": "~4.0.1" } }, - "node_modules/filelist/node_modules/minimatch": { - "version": "5.1.6", + "node_modules/get-pkg-repo/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": "ISC", + "license": "MIT", "dependencies": { - "brace-expansion": "^2.0.1" + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" }, "engines": { "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" } }, - "node_modules/filing-cabinet": { - "version": "3.3.1", + "node_modules/get-pkg-repo/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/get-pkg-repo/node_modules/yargs": { + "version": "16.2.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", + "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", "dev": true, "license": "MIT", "dependencies": { - "app-module-path": "^2.2.0", - "commander": "^2.20.3", - "debug": "^4.3.3", - "enhanced-resolve": "^5.8.3", - "is-relative-path": "^1.0.2", - "module-definition": "^3.3.1", - "module-lookup-amd": "^7.0.1", - "resolve": "^1.21.0", - "resolve-dependency-path": "^2.0.0", - "sass-lookup": "^3.0.0", - "stylus-lookup": "^3.0.1", - "tsconfig-paths": "^3.10.1", - "typescript": "^3.9.7" - }, - "bin": { - "filing-cabinet": "bin/cli.js" + "cliui": "^7.0.2", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.0", + "y18n": "^5.0.5", + "yargs-parser": "^20.2.2" }, "engines": { - "node": ">=10.13.0" + "node": ">=10" } }, - "node_modules/filing-cabinet/node_modules/commander": { - "version": "2.20.3", - "dev": true, - "license": "MIT" - }, - "node_modules/filing-cabinet/node_modules/typescript": { - "version": "3.9.10", + "node_modules/get-pkg-repo/node_modules/yargs-parser": { + "version": "20.2.9", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", + "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", "dev": true, - "license": "Apache-2.0", - "bin": { - "tsc": "bin/tsc", - "tsserver": "bin/tsserver" - }, + "license": "ISC", "engines": { - "node": ">=4.2.0" + "node": ">=10" } }, - "node_modules/fill-range": { - "version": "7.0.1", + "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", - "dependencies": { - "to-regex-range": "^5.0.1" - }, "engines": { "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/filter-obj": { - "version": "1.1.0", + "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": ">=0.10.0" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/finalhandler": { - "version": "1.2.0", + "node_modules/get-symbol-description": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.2.tgz", + "integrity": "sha512-g0QYk1dZBxGwk+Ngc+ltRH2IBp2f7zBkBMBJZCDerh6EhlhSR6+9irMCuT/09zD6qkarHUSn529sK/yL4S27mg==", + "dev": true, "license": "MIT", "dependencies": { - "debug": "2.6.9", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "on-finished": "2.4.1", - "parseurl": "~1.3.3", - "statuses": "2.0.1", - "unpipe": "~1.0.0" + "call-bind": "^1.0.5", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.4" }, "engines": { - "node": ">= 0.8" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/finalhandler/node_modules/debug": { - "version": "2.6.9", + "node_modules/get-tsconfig": { + "version": "4.8.1", + "resolved": "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.8.1.tgz", + "integrity": "sha512-k9PN+cFBmaLWtVz29SkUoqU5O0slLuHJXt/2P+tMVFT+phsSGXGkp9t3rQIqdz0e+06EHNGs3oM6ZX1s2zHxRg==", + "dev": true, "license": "MIT", "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/finalhandler/node_modules/ms": { - "version": "2.0.0", - "license": "MIT" - }, - "node_modules/find-up": { - "version": "5.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "locate-path": "^6.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=10" + "resolve-pkg-maps": "^1.0.0" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/privatenumber/get-tsconfig?sponsor=1" } }, - "node_modules/find-yarn-workspace-root2": { - "version": "1.2.16", - "dev": true, - "license": "Apache-2.0", + "node_modules/getpass": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", + "integrity": "sha512-0fzj9JxOLfJ+XGLhR8ze3unN0KZCgZwiSSDz168VERjK8Wl8kVSdcu2kspd4s4wtAa1y/qrVRiAA0WclVsu0ng==", + "license": "MIT", "dependencies": { - "micromatch": "^4.0.2", - "pkg-dir": "^4.2.0" + "assert-plus": "^1.0.0" } }, - "node_modules/flat": { - "version": "5.0.2", + "node_modules/git-raw-commits": { + "version": "2.0.11", + "resolved": "https://registry.npmjs.org/git-raw-commits/-/git-raw-commits-2.0.11.tgz", + "integrity": "sha512-VnctFhw+xfj8Va1xtfEqCUD2XDrbAPSJx+hSrE5K7fGdjZruW7XV+QOrN7LF/RJyvspRiD2I0asWsxFp0ya26A==", "dev": true, - "license": "BSD-3-Clause", + "license": "MIT", + "dependencies": { + "dargs": "^7.0.0", + "lodash": "^4.17.15", + "meow": "^8.0.0", + "split2": "^3.0.0", + "through2": "^4.0.0" + }, "bin": { - "flat": "cli.js" + "git-raw-commits": "cli.js" + }, + "engines": { + "node": ">=10" } }, - "node_modules/flat-cache": { - "version": "3.0.4", + "node_modules/git-remote-origin-url": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/git-remote-origin-url/-/git-remote-origin-url-2.0.0.tgz", + "integrity": "sha512-eU+GGrZgccNJcsDH5LkXR3PB9M958hxc7sbA8DFJjrv9j4L2P/eZfKhM+QD6wyzpiv+b1BpK0XrYCxkovtjSLw==", "dev": true, "license": "MIT", "dependencies": { - "flatted": "^3.1.0", - "rimraf": "^3.0.2" + "gitconfiglocal": "^1.0.0", + "pify": "^2.3.0" }, "engines": { - "node": "^10.12.0 || >=12.0.0" + "node": ">=4" } }, - "node_modules/flat-cache/node_modules/rimraf": { - "version": "3.0.2", + "node_modules/git-remote-origin-url/node_modules/pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==", "dev": true, - "license": "ISC", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/git-semver-tags": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/git-semver-tags/-/git-semver-tags-5.0.1.tgz", + "integrity": "sha512-hIvOeZwRbQ+7YEUmCkHqo8FOLQZCEn18yevLHADlFPZY02KJGsu5FZt9YW/lybfK2uhWFI7Qg/07LekJiTv7iA==", + "dev": true, + "license": "MIT", "dependencies": { - "glob": "^7.1.3" + "meow": "^8.1.2", + "semver": "^7.0.0" }, "bin": { - "rimraf": "bin.js" + "git-semver-tags": "cli.js" }, - "funding": { - "url": "https://github.com/sponsors/isaacs" + "engines": { + "node": ">=14" } }, - "node_modules/flatted": { - "version": "3.2.7", - "dev": true, - "license": "ISC" - }, - "node_modules/flatten": { - "version": "1.0.3", - "dev": true, - "license": "MIT" - }, - "node_modules/fn.name": { - "version": "1.1.0", - "license": "MIT" - }, - "node_modules/follow-redirects": { - "version": "1.15.6", + "node_modules/git-up": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/git-up/-/git-up-7.0.0.tgz", + "integrity": "sha512-ONdIrbBCFusq1Oy0sC71F5azx8bVkvtZtMJAsv+a6lz5YAmbNnLD6HAB4gptHZVLPR8S2/kVN6Gab7lryq5+lQ==", "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://github.com/sponsors/RubenVerborgh" - } - ], "license": "MIT", - "engines": { - "node": ">=4.0" - }, - "peerDependenciesMeta": { - "debug": { - "optional": true - } + "dependencies": { + "is-ssh": "^1.4.0", + "parse-url": "^8.1.0" } }, - "node_modules/for-each": { - "version": "0.3.3", + "node_modules/git-url-parse": { + "version": "14.0.0", + "resolved": "https://registry.npmjs.org/git-url-parse/-/git-url-parse-14.0.0.tgz", + "integrity": "sha512-NnLweV+2A4nCvn4U/m2AoYu0pPKlsmhK9cknG7IMwsjFY1S2jxM+mAhsDxyxfCIGfGaD+dozsyX4b6vkYc83yQ==", "dev": true, "license": "MIT", "dependencies": { - "is-callable": "^1.1.3" + "git-up": "^7.0.0" } }, - "node_modules/foreground-child": { - "version": "3.1.1", + "node_modules/gitconfiglocal": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/gitconfiglocal/-/gitconfiglocal-1.0.0.tgz", + "integrity": "sha512-spLUXeTAVHxDtKsJc8FkFVgFtMdEN9qPGpL23VfSHx4fP4+Ds097IXLvymbnDH8FnmxX5Nr9bPw3A+AQ6mWEaQ==", "dev": true, - "license": "ISC", + "license": "BSD", "dependencies": { - "cross-spawn": "^7.0.0", - "signal-exit": "^4.0.1" - }, - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" + "ini": "^1.3.2" } }, - "node_modules/foreground-child/node_modules/signal-exit": { - "version": "4.1.0", + "node_modules/glob": { + "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", "dev": true, "license": "ISC", + "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": ">=14" + "node": "*" }, "funding": { "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/forever-agent": { - "version": "0.6.1", - "license": "Apache-2.0", - "engines": { - "node": "*" - } - }, - "node_modules/form-data": { - "version": "3.0.1", + "node_modules/glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", "dev": true, - "license": "MIT", + "license": "ISC", "dependencies": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.8", - "mime-types": "^2.1.12" + "is-glob": "^4.0.3" }, "engines": { - "node": ">= 6" - } - }, - "node_modules/forwarded": { - "version": "0.2.0", - "license": "MIT", - "engines": { - "node": ">= 0.6" + "node": ">=10.13.0" } }, - "node_modules/fp-ts": { - "version": "2.16.1", + "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, - "license": "MIT" - }, - "node_modules/fresh": { - "version": "0.5.2", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } + "license": "BSD-2-Clause" }, - "node_modules/front-matter": { - "version": "4.0.2", + "node_modules/glob/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, "license": "MIT", "dependencies": { - "js-yaml": "^3.13.1" + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" } }, - "node_modules/fs-constants": { - "version": "1.0.0", - "dev": true, - "license": "MIT" - }, - "node_modules/fs-extra": { - "version": "7.0.1", + "node_modules/glob/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, - "license": "MIT", + "license": "ISC", "dependencies": { - "graceful-fs": "^4.1.2", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" + "brace-expansion": "^1.1.7" }, "engines": { - "node": ">=6 <7 || >=8" + "node": "*" } }, - "node_modules/fs-minipass": { - "version": "3.0.3", + "node_modules/global-dirs": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/global-dirs/-/global-dirs-0.1.1.tgz", + "integrity": "sha512-NknMLn7F2J7aflwFOlGdNIuCDpN3VGoSoB+aap3KABFWbHVn1TCgFC+np23J8W2BiZbjfEw3BFBycSMv1AFblg==", "dev": true, - "license": "ISC", + "license": "MIT", "dependencies": { - "minipass": "^7.0.3" + "ini": "^1.3.4" }, "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/fs-minipass/node_modules/minipass": { - "version": "7.1.2", - "dev": true, - "license": "ISC", - "engines": { - "node": ">=16 || 14 >=14.17" + "node": ">=4" } }, - "node_modules/fs.realpath": { - "version": "1.0.0", - "dev": true, - "license": "ISC" - }, - "node_modules/fsevents": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", - "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "node_modules/globals": { + "version": "13.24.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", + "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", "dev": true, - "hasInstallScript": true, "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], + "dependencies": { + "type-fest": "^0.20.2" + }, "engines": { - "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/function-bind": { - "version": "1.1.1", - "license": "MIT" - }, - "node_modules/function.prototype.name": { - "version": "1.1.5", + "node_modules/globalthis": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.4.tgz", + "integrity": "sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==", "dev": true, "license": "MIT", "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.19.0", - "functions-have-names": "^1.2.2" + "define-properties": "^1.2.1", + "gopd": "^1.0.1" }, "engines": { "node": ">= 0.4" @@ -11155,182 +12048,225 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/functions-have-names": { - "version": "1.2.3", - "dev": true, - "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/gensync": { - "version": "1.0.0-beta.2", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/get-amd-module-type": { - "version": "4.1.0", + "node_modules/globby": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", + "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", "dev": true, "license": "MIT", "dependencies": { - "ast-module-types": "^4.0.0", - "node-source-walk": "^5.0.1" + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.2.9", + "ignore": "^5.2.0", + "merge2": "^1.4.1", + "slash": "^3.0.0" }, "engines": { - "node": ">=12" - } - }, - "node_modules/get-caller-file": { - "version": "2.0.5", - "dev": true, - "license": "ISC", - "engines": { - "node": "6.* || 8.* || >= 10.*" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/get-func-name": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.2.tgz", - "integrity": "sha512-8vXOvuE167CtIc3OyItco7N/dpRtBbYOsPsXCz7X/PMnlGjYjSGuZJgM1Y7mmew7BKf9BqvLX2tnOVy1BBUsxQ==", + "node_modules/gonzales-pe": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/gonzales-pe/-/gonzales-pe-4.3.0.tgz", + "integrity": "sha512-otgSPpUmdWJ43VXyiNgEYE4luzHCL2pz4wQ0OnDluC6Eg4Ko3Vexy/SrSynglw/eR+OhkzmqFCZa/OFa/RgAOQ==", "dev": true, "license": "MIT", + "dependencies": { + "minimist": "^1.2.5" + }, + "bin": { + "gonzales": "bin/gonzales.js" + }, "engines": { - "node": "*" + "node": ">=0.6.0" } }, - "node_modules/get-intrinsic": { - "version": "1.2.1", + "node_modules/gopd": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", + "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", "license": "MIT", "dependencies": { - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-proto": "^1.0.1", - "has-symbols": "^1.0.3" + "get-intrinsic": "^1.1.3" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/get-own-enumerable-property-symbols": { - "version": "3.0.2", + "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, "license": "ISC" }, - "node_modules/get-package-type": { - "version": "0.1.0", + "node_modules/graphemer": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", + "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", + "dev": true, + "license": "MIT" + }, + "node_modules/gzip-size": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/gzip-size/-/gzip-size-6.0.0.tgz", + "integrity": "sha512-ax7ZYomf6jqPTQ4+XCpUGyXKHk5WweS+e05MBO4/y3WJ5RkmPXNKvX+bx1behVILVwr6JSQvZAku021CHPXG3Q==", "dev": true, "license": "MIT", + "dependencies": { + "duplexer": "^0.1.2" + }, "engines": { - "node": ">=8.0.0" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/get-pkg-repo": { - "version": "4.2.1", + "node_modules/handlebars": { + "version": "4.7.8", + "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.7.8.tgz", + "integrity": "sha512-vafaFqs8MZkRrSX7sFVUdo3ap/eNiLnb4IakshzvP56X5Nr1iGKAIqdX6tMlm6HcNRIkr6AxO5jFEoJzzpT8aQ==", "dev": true, "license": "MIT", "dependencies": { - "@hutson/parse-repository-url": "^3.0.0", - "hosted-git-info": "^4.0.0", - "through2": "^2.0.0", - "yargs": "^16.2.0" + "minimist": "^1.2.5", + "neo-async": "^2.6.2", + "source-map": "^0.6.1", + "wordwrap": "^1.0.0" }, "bin": { - "get-pkg-repo": "src/cli.js" + "handlebars": "bin/handlebars" }, "engines": { - "node": ">=6.9.0" + "node": ">=0.4.7" + }, + "optionalDependencies": { + "uglify-js": "^3.1.4" } }, - "node_modules/get-pkg-repo/node_modules/isarray": { - "version": "1.0.0", - "dev": true, - "license": "MIT" + "node_modules/har-schema": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", + "integrity": "sha512-Oqluz6zhGX8cyRaTQlFMPw80bSJVG2x/cFb8ZPhUILGgHka9SsokCCOQgpveePerqidZOrT14ipqfJb7ILcW5Q==", + "license": "ISC", + "engines": { + "node": ">=4" + } }, - "node_modules/get-pkg-repo/node_modules/readable-stream": { - "version": "2.3.8", - "dev": true, + "node_modules/har-validator": { + "version": "5.1.5", + "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.5.tgz", + "integrity": "sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w==", + "deprecated": "this library is no longer supported", "license": "MIT", "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" + "ajv": "^6.12.3", + "har-schema": "^2.0.0" + }, + "engines": { + "node": ">=6" } }, - "node_modules/get-pkg-repo/node_modules/safe-buffer": { - "version": "5.1.2", - "dev": true, + "node_modules/har-validator/node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "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" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/har-validator/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==", "license": "MIT" }, - "node_modules/get-pkg-repo/node_modules/string_decoder": { - "version": "1.1.1", + "node_modules/hard-rejection": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/hard-rejection/-/hard-rejection-2.1.0.tgz", + "integrity": "sha512-VIZB+ibDhx7ObhAe7OVtoEbuP4h/MuOTHJ+J8h/eBXotJYl0fBgR72xDFCKgIh22OJZIOVNxBMWuhAr10r8HdA==", "dev": true, "license": "MIT", - "dependencies": { - "safe-buffer": "~5.1.0" + "engines": { + "node": ">=6" } }, - "node_modules/get-pkg-repo/node_modules/through2": { - "version": "2.0.5", + "node_modules/has-bigints": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz", + "integrity": "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==", "dev": true, "license": "MIT", - "dependencies": { - "readable-stream": "~2.3.6", - "xtend": "~4.0.1" + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/get-pkg-repo/node_modules/yargs": { - "version": "16.2.0", - "dev": true, + "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==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/has-property-descriptors": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", + "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", "license": "MIT", "dependencies": { - "cliui": "^7.0.2", - "escalade": "^3.1.1", - "get-caller-file": "^2.0.5", - "require-directory": "^2.1.1", - "string-width": "^4.2.0", - "y18n": "^5.0.5", - "yargs-parser": "^20.2.2" + "es-define-property": "^1.0.0" }, - "engines": { - "node": ">=10" + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/get-port": { - "version": "5.1.1", - "dev": true, + "node_modules/has-proto": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.3.tgz", + "integrity": "sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==", "license": "MIT", "engines": { - "node": ">=8" + "node": ">= 0.4" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/get-stream": { - "version": "6.0.1", - "dev": true, + "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==", "license": "MIT", "engines": { - "node": ">=10" + "node": ">= 0.4" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/get-symbol-description": { - "version": "1.0.0", + "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": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.1.1" + "has-symbols": "^1.0.3" }, "engines": { "node": ">= 0.4" @@ -11339,446 +12275,607 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/get-tsconfig": { - "version": "4.7.0", + "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, + "license": "ISC" + }, + "node_modules/hash-base": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.0.4.tgz", + "integrity": "sha512-EeeoJKjTyt868liAlVmcv2ZsUfGHlE3Q+BICOXcZiwN3osr5Q/zFGYmTJpoIzuaSTAwndFy+GqhEwlU4L3j4Ow==", "license": "MIT", "dependencies": { - "resolve-pkg-maps": "^1.0.0" + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" }, - "funding": { - "url": "https://github.com/privatenumber/get-tsconfig?sponsor=1" + "engines": { + "node": ">=4" } }, - "node_modules/getpass": { - "version": "0.1.7", + "node_modules/hash.js": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz", + "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==", "license": "MIT", "dependencies": { - "assert-plus": "^1.0.0" + "inherits": "^2.0.3", + "minimalistic-assert": "^1.0.1" } }, - "node_modules/git-raw-commits": { - "version": "2.0.11", - "dev": true, + "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": { - "dargs": "^7.0.0", - "lodash": "^4.17.15", - "meow": "^8.0.0", - "split2": "^3.0.0", - "through2": "^4.0.0" - }, - "bin": { - "git-raw-commits": "cli.js" + "function-bind": "^1.1.2" }, "engines": { - "node": ">=10" + "node": ">= 0.4" } }, - "node_modules/git-raw-commits/node_modules/find-up": { - "version": "4.1.0", - "dev": true, + "node_modules/hmac-drbg": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", + "integrity": "sha512-Tti3gMqLdZfhOQY1Mzf/AanLiqh1WTiJgEj26ZuYQ9fbkLomzGchCws4FyrSd4VkpBfiNhaE1On+lOz894jvXg==", "license": "MIT", "dependencies": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" + "hash.js": "^1.0.3", + "minimalistic-assert": "^1.0.0", + "minimalistic-crypto-utils": "^1.0.1" + } + }, + "node_modules/hosted-git-info": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-7.0.2.tgz", + "integrity": "sha512-puUZAUKT5m8Zzvs72XWy3HtvVbTWljRE66cP60bxJzAqf2DgICo7lYTY2IHUmLnNpjYvw5bvmoHvPc0QO2a62w==", + "dev": true, + "license": "ISC", + "dependencies": { + "lru-cache": "^10.0.1" }, "engines": { - "node": ">=8" + "node": "^16.14.0 || >=18.0.0" } }, - "node_modules/git-raw-commits/node_modules/hosted-git-info": { - "version": "2.8.9", + "node_modules/hosted-git-info/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, "license": "ISC" }, - "node_modules/git-raw-commits/node_modules/locate-path": { - "version": "5.0.0", + "node_modules/html-encoding-sniffer": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-2.0.1.tgz", + "integrity": "sha512-D5JbOMBIR/TVZkubHT+OyT2705QvogUW4IBn6nHd756OwieSF9aDYFj4dv6HHEVGYbHaLETa3WggZYWWMyy3ZQ==", "dev": true, "license": "MIT", "dependencies": { - "p-locate": "^4.1.0" + "whatwg-encoding": "^1.0.5" }, "engines": { - "node": ">=8" + "node": ">=10" } }, - "node_modules/git-raw-commits/node_modules/meow": { - "version": "8.1.2", + "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, + "license": "MIT" + }, + "node_modules/htmlparser2": { + "version": "3.10.1", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.10.1.tgz", + "integrity": "sha512-IgieNijUMbkDovyoKObU1DUhm1iwNYE/fuifEoEHfd1oZKZDaONBSkal7Y01shxsM49R4XaMdGez3WnF9UfiCQ==", "license": "MIT", "dependencies": { - "@types/minimist": "^1.2.0", - "camelcase-keys": "^6.2.2", - "decamelize-keys": "^1.1.0", - "hard-rejection": "^2.1.0", - "minimist-options": "4.1.0", - "normalize-package-data": "^3.0.0", - "read-pkg-up": "^7.0.1", - "redent": "^3.0.0", - "trim-newlines": "^3.0.0", - "type-fest": "^0.18.0", - "yargs-parser": "^20.2.3" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "domelementtype": "^1.3.1", + "domhandler": "^2.3.0", + "domutils": "^1.5.1", + "entities": "^1.1.1", + "inherits": "^2.0.1", + "readable-stream": "^3.1.1" } }, - "node_modules/git-raw-commits/node_modules/p-locate": { - "version": "4.1.0", + "node_modules/http-cache-semantics": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz", + "integrity": "sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==", "dev": true, + "license": "BSD-2-Clause" + }, + "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": { - "p-limit": "^2.2.0" + "depd": "2.0.0", + "inherits": "2.0.4", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "toidentifier": "1.0.1" }, "engines": { - "node": ">=8" + "node": ">= 0.8" } }, - "node_modules/git-raw-commits/node_modules/read-pkg": { - "version": "5.2.0", + "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": { - "@types/normalize-package-data": "^2.4.0", - "normalize-package-data": "^2.5.0", - "parse-json": "^5.0.0", - "type-fest": "^0.6.0" + "agent-base": "^7.1.0", + "debug": "^4.3.4" }, "engines": { - "node": ">=8" + "node": ">= 14" } }, - "node_modules/git-raw-commits/node_modules/read-pkg-up": { - "version": "7.0.1", - "dev": true, + "node_modules/http-signature": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", + "integrity": "sha512-CAbnr6Rz4CYQkLYUtSNXxQPUH2gK8f3iWexVlsnMeD+GjlsQ0Xsy1cOX+mN3dtxYomRy21CiOzU8Uhw6OwncEQ==", "license": "MIT", "dependencies": { - "find-up": "^4.1.0", - "read-pkg": "^5.2.0", - "type-fest": "^0.8.1" + "assert-plus": "^1.0.0", + "jsprim": "^1.2.2", + "sshpk": "^1.7.0" }, "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=0.8", + "npm": ">=1.3.7" } }, - "node_modules/git-raw-commits/node_modules/read-pkg-up/node_modules/type-fest": { - "version": "0.8.1", + "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==", "dev": true, - "license": "(MIT OR CC0-1.0)", + "license": "MIT", + "dependencies": { + "agent-base": "^7.0.2", + "debug": "4" + }, "engines": { - "node": ">=8" + "node": ">= 14" } }, - "node_modules/git-raw-commits/node_modules/read-pkg/node_modules/normalize-package-data": { - "version": "2.5.0", + "node_modules/human-id": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/human-id/-/human-id-1.0.2.tgz", + "integrity": "sha512-UNopramDEhHJD+VR+ehk8rOslwSfByxPIZyJRfV739NDhN5LF1fa1MqnzKm2lGTQRjNrjK19Q5fhkgIfjlVUKw==", "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "hosted-git-info": "^2.1.4", - "resolve": "^1.10.0", - "semver": "2 || 3 || 4 || 5", - "validate-npm-package-license": "^3.0.1" - } + "license": "MIT" }, - "node_modules/git-raw-commits/node_modules/read-pkg/node_modules/type-fest": { - "version": "0.6.0", + "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": "(MIT OR CC0-1.0)", + "license": "Apache-2.0", "engines": { - "node": ">=8" + "node": ">=10.17.0" } }, - "node_modules/git-raw-commits/node_modules/semver": { - "version": "5.7.2", + "node_modules/husky": { + "version": "8.0.3", + "resolved": "https://registry.npmjs.org/husky/-/husky-8.0.3.tgz", + "integrity": "sha512-+dQSyqPh4x1hlO1swXBiNb2HzTDN1I2IGLQx1GrBuiqFJfoMrnZWwVmatvSiO+Iz8fBUnf+lekwNo4c2LlXItg==", "dev": true, - "license": "ISC", + "license": "MIT", "bin": { - "semver": "bin/semver" - } - }, - "node_modules/git-raw-commits/node_modules/type-fest": { - "version": "0.18.1", - "dev": true, - "license": "(MIT OR CC0-1.0)", + "husky": "lib/bin.js" + }, "engines": { - "node": ">=10" + "node": ">=14" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/sponsors/typicode" } }, - "node_modules/git-remote-origin-url": { - "version": "2.0.0", - "dev": true, + "node_modules/iced-error": { + "version": "0.0.13", + "resolved": "https://registry.npmjs.org/iced-error/-/iced-error-0.0.13.tgz", + "integrity": "sha512-yEEaG8QfyyRL0SsbNNDw3rVgTyqwHFMCuV6jDvD43f/2shmdaFXkqvFLGhDlsYNSolzYHwVLM/CrXt9GygYopA==" + }, + "node_modules/iced-lock": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/iced-lock/-/iced-lock-1.1.0.tgz", + "integrity": "sha512-J9UMVitgTMYrkUil5EB9/Q4BPWiMpFH156yjDlmMoMRKs3s3PnXj/6G0UlzIOGnNi5JVNk/zVYLXVnuo+1QnqQ==", + "dependencies": { + "iced-runtime": "^1.0.0" + } + }, + "node_modules/iced-runtime": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/iced-runtime/-/iced-runtime-1.0.4.tgz", + "integrity": "sha512-rgiJXNF6ZgF2Clh/TKUlBDW3q51YPDJUXmxGQXx1b8tbZpVpTn+1RX9q1sjNkujXIIaVxZByQzPHHORg7KV51g==" + }, + "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": { - "gitconfiglocal": "^1.0.0", - "pify": "^2.3.0" + "safer-buffer": ">= 2.1.2 < 3" }, "engines": { - "node": ">=4" + "node": ">=0.10.0" } }, - "node_modules/git-remote-origin-url/node_modules/pify": { - "version": "2.3.0", + "node_modules/ieee754": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", + "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": "BSD-3-Clause" + }, + "node_modules/ignore": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", + "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==", "dev": true, "license": "MIT", "engines": { - "node": ">=0.10.0" + "node": ">= 4" } }, - "node_modules/git-semver-tags": { - "version": "5.0.1", + "node_modules/ignore-walk": { + "version": "6.0.5", + "resolved": "https://registry.npmjs.org/ignore-walk/-/ignore-walk-6.0.5.tgz", + "integrity": "sha512-VuuG0wCnjhnylG1ABXT3dAuIpTNDs/G8jlpmwXY03fXoXy/8ZK8/T+hMzt8L4WnrLCJgdybqgPagnF/f97cg3A==", "dev": true, - "license": "MIT", + "license": "ISC", "dependencies": { - "meow": "^8.1.2", - "semver": "^7.0.0" - }, - "bin": { - "git-semver-tags": "cli.js" + "minimatch": "^9.0.0" }, "engines": { - "node": ">=14" + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, - "node_modules/git-semver-tags/node_modules/find-up": { - "version": "4.1.0", + "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==", "dev": true, "license": "MIT", "dependencies": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" }, "engines": { - "node": ">=8" + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/git-semver-tags/node_modules/hosted-git-info": { - "version": "2.8.9", - "dev": true, - "license": "ISC" - }, - "node_modules/git-semver-tags/node_modules/locate-path": { - "version": "5.0.0", + "node_modules/import-fresh/node_modules/resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", "dev": true, "license": "MIT", - "dependencies": { - "p-locate": "^4.1.0" - }, "engines": { - "node": ">=8" + "node": ">=4" } }, - "node_modules/git-semver-tags/node_modules/meow": { - "version": "8.1.2", + "node_modules/import-local": { + "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": { - "@types/minimist": "^1.2.0", - "camelcase-keys": "^6.2.2", - "decamelize-keys": "^1.1.0", - "hard-rejection": "^2.1.0", - "minimist-options": "4.1.0", - "normalize-package-data": "^3.0.0", - "read-pkg-up": "^7.0.1", - "redent": "^3.0.0", - "trim-newlines": "^3.0.0", - "type-fest": "^0.18.0", - "yargs-parser": "^20.2.3" + "pkg-dir": "^4.2.0", + "resolve-cwd": "^3.0.0" + }, + "bin": { + "import-local-fixture": "fixtures/cli.js" }, "engines": { - "node": ">=10" + "node": ">=8" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/git-semver-tags/node_modules/p-locate": { - "version": "4.1.0", + "node_modules/imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", "dev": true, "license": "MIT", - "dependencies": { - "p-limit": "^2.2.0" - }, "engines": { - "node": ">=8" + "node": ">=0.8.19" } }, - "node_modules/git-semver-tags/node_modules/read-pkg": { - "version": "5.2.0", + "node_modules/indent-string": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", + "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", "dev": true, "license": "MIT", - "dependencies": { - "@types/normalize-package-data": "^2.4.0", - "normalize-package-data": "^2.5.0", - "parse-json": "^5.0.0", - "type-fest": "^0.6.0" - }, "engines": { "node": ">=8" } }, - "node_modules/git-semver-tags/node_modules/read-pkg-up": { - "version": "7.0.1", + "node_modules/indexes-of": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/indexes-of/-/indexes-of-1.0.1.tgz", + "integrity": "sha512-bup+4tap3Hympa+JBJUG7XuOsdNQ6fxt0MHyXMKuLBKn0OqsTfvUxkUrroEX1+B2VsSHvCjiIcZVxRtYa4nllA==", "dev": true, - "license": "MIT", - "dependencies": { - "find-up": "^4.1.0", - "read-pkg": "^5.2.0", - "type-fest": "^0.8.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "license": "MIT" + }, + "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==", + "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" } }, - "node_modules/git-semver-tags/node_modules/read-pkg-up/node_modules/type-fest": { - "version": "0.8.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==", + "license": "ISC" + }, + "node_modules/ini": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", + "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", "dev": true, - "license": "(MIT OR CC0-1.0)", + "license": "ISC" + }, + "node_modules/init-package-json": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/init-package-json/-/init-package-json-6.0.3.tgz", + "integrity": "sha512-Zfeb5ol+H+eqJWHTaGca9BovufyGeIfr4zaaBorPmJBMrJ+KBnN+kQx2ZtXdsotUTgldHmHQV44xvUWOUA7E2w==", + "dev": true, + "license": "ISC", + "dependencies": { + "@npmcli/package-json": "^5.0.0", + "npm-package-arg": "^11.0.0", + "promzard": "^1.0.0", + "read": "^3.0.1", + "semver": "^7.3.5", + "validate-npm-package-license": "^3.0.4", + "validate-npm-package-name": "^5.0.0" + }, "engines": { - "node": ">=8" + "node": "^16.14.0 || >=18.0.0" } }, - "node_modules/git-semver-tags/node_modules/read-pkg/node_modules/normalize-package-data": { - "version": "2.5.0", + "node_modules/inquirer": { + "version": "8.2.6", + "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-8.2.6.tgz", + "integrity": "sha512-M1WuAmb7pn9zdFRtQYk26ZBoY043Sse0wVDdk4Bppr+JOXyQYybdtvK+l9wUibhtjdjvtoiNy8tk+EgsYIUqKg==", "dev": true, - "license": "BSD-2-Clause", + "license": "MIT", "dependencies": { - "hosted-git-info": "^2.1.4", - "resolve": "^1.10.0", - "semver": "2 || 3 || 4 || 5", - "validate-npm-package-license": "^3.0.1" + "ansi-escapes": "^4.2.1", + "chalk": "^4.1.1", + "cli-cursor": "^3.1.0", + "cli-width": "^3.0.0", + "external-editor": "^3.0.3", + "figures": "^3.0.0", + "lodash": "^4.17.21", + "mute-stream": "0.0.8", + "ora": "^5.4.1", + "run-async": "^2.4.0", + "rxjs": "^7.5.5", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0", + "through": "^2.3.6", + "wrap-ansi": "^6.0.1" + }, + "engines": { + "node": ">=12.0.0" } }, - "node_modules/git-semver-tags/node_modules/read-pkg/node_modules/semver": { - "version": "5.7.2", + "node_modules/inquirer/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==", "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver" + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.1.0" } }, - "node_modules/git-semver-tags/node_modules/read-pkg/node_modules/type-fest": { - "version": "0.6.0", + "node_modules/inspectpack": { + "version": "4.7.1", + "resolved": "https://registry.npmjs.org/inspectpack/-/inspectpack-4.7.1.tgz", + "integrity": "sha512-XoDJbKSM9I2KA+8+OLFJHm8m4NM2pMEgsDD2hze6swVfynEed9ngCx36mRR+otzOsskwnxIZWXjI23FTW1uHqA==", "dev": true, - "license": "(MIT OR CC0-1.0)", + "license": "MIT", + "dependencies": { + "chalk": "^4.1.0", + "fp-ts": "^2.6.1", + "io-ts": "^2.2.13", + "io-ts-reporters": "^1.2.2", + "pify": "^5.0.0", + "semver-compare": "^1.0.0", + "yargs": "^16.2.0" + }, + "bin": { + "inspectpack": "bin/inspectpack.js" + }, "engines": { - "node": ">=8" + "node": ">=6.0.0" } }, - "node_modules/git-semver-tags/node_modules/type-fest": { - "version": "0.18.1", + "node_modules/inspectpack/node_modules/cliui": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", + "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", "dev": true, - "license": "(MIT OR CC0-1.0)", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "license": "ISC", + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^7.0.0" } }, - "node_modules/git-up": { + "node_modules/inspectpack/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": { - "is-ssh": "^1.4.0", - "parse-url": "^8.1.0" + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" } }, - "node_modules/git-url-parse": { - "version": "14.0.0", + "node_modules/inspectpack/node_modules/yargs": { + "version": "16.2.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", + "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", "dev": true, "license": "MIT", "dependencies": { - "git-up": "^7.0.0" + "cliui": "^7.0.2", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.0", + "y18n": "^5.0.5", + "yargs-parser": "^20.2.2" + }, + "engines": { + "node": ">=10" } }, - "node_modules/gitconfiglocal": { - "version": "1.0.0", + "node_modules/inspectpack/node_modules/yargs-parser": { + "version": "20.2.9", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", + "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", "dev": true, - "license": "BSD", - "dependencies": { - "ini": "^1.3.2" + "license": "ISC", + "engines": { + "node": ">=10" } }, - "node_modules/glob": { - "version": "7.2.3", + "node_modules/internal-slot": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.7.tgz", + "integrity": "sha512-NGnrKwXzSms2qUUih/ILZ5JBqNTSa1+ZmP6flaIp6KmSElgE9qdndzS3cqjrDovwFdmwsGsLdeFgB6suw+1e9g==", "dev": true, - "license": "ISC", + "license": "MIT", "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" + "es-errors": "^1.3.0", + "hasown": "^2.0.0", + "side-channel": "^1.0.4" }, "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" + "node": ">= 0.4" } }, - "node_modules/glob-parent": { - "version": "6.0.2", + "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": "ISC", - "dependencies": { - "is-glob": "^4.0.3" - }, + "license": "MIT", "engines": { "node": ">=10.13.0" } }, - "node_modules/glob-to-regexp": { - "version": "0.4.1", + "node_modules/io-ts": { + "version": "2.2.21", + "resolved": "https://registry.npmjs.org/io-ts/-/io-ts-2.2.21.tgz", + "integrity": "sha512-zz2Z69v9ZIC3mMLYWIeoUcwWD6f+O7yP92FMVVaXEOSZH1jnVBmET/urd/uoarD1WGBY4rCj8TAyMPzsGNzMFQ==", "dev": true, - "license": "BSD-2-Clause" + "license": "MIT", + "peerDependencies": { + "fp-ts": "^2.5.0" + } }, - "node_modules/global-dirs": { - "version": "0.1.1", + "node_modules/io-ts-reporters": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/io-ts-reporters/-/io-ts-reporters-1.2.2.tgz", + "integrity": "sha512-igASwWWkDY757OutNcM6zTtdJf/eTZYkoe2ymsX2qpm5bKZLo74FJYjsCtMQOEdY7dRHLLEulCyFQwdN69GBCg==", + "dev": true, + "license": "MIT", + "peerDependencies": { + "fp-ts": "^2.0.2", + "io-ts": "^2.0.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==", "dev": true, "license": "MIT", "dependencies": { - "ini": "^1.3.4" + "jsbn": "1.1.0", + "sprintf-js": "^1.1.3" }, "engines": { - "node": ">=4" + "node": ">= 12" } }, - "node_modules/globals": { - "version": "13.20.0", + "node_modules/ip-address/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, + "license": "BSD-3-Clause" + }, + "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", - "dependencies": { - "type-fest": "^0.20.2" - }, "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">= 0.10" } }, - "node_modules/globalthis": { - "version": "1.0.3", + "node_modules/is-arguments": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.1.tgz", + "integrity": "sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==", "dev": true, "license": "MIT", "dependencies": { - "define-properties": "^1.1.3" + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" }, "engines": { "node": ">= 0.4" @@ -11787,164 +12884,245 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/globby": { - "version": "11.1.0", + "node_modules/is-array-buffer": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.4.tgz", + "integrity": "sha512-wcjaerHw0ydZwfhiKbXJWLDY8A7yV7KhjQOpb83hGgGfId/aQa4TOvwyzn2PuswW2gPCYEL/nEAiSVpdOj1lXw==", "dev": true, "license": "MIT", "dependencies": { - "array-union": "^2.1.0", - "dir-glob": "^3.0.1", - "fast-glob": "^3.2.9", - "ignore": "^5.2.0", - "merge2": "^1.4.1", - "slash": "^3.0.0" + "call-bind": "^1.0.2", + "get-intrinsic": "^1.2.1" }, "engines": { - "node": ">=10" + "node": ">= 0.4" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/gonzales-pe": { - "version": "4.3.0", + "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, - "license": "MIT", - "dependencies": { - "minimist": "^1.2.5" - }, - "bin": { - "gonzales": "bin/gonzales.js" - }, - "engines": { - "node": ">=0.6.0" - } + "license": "MIT" }, - "node_modules/gopd": { - "version": "1.0.1", + "node_modules/is-bigint": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz", + "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==", "dev": true, "license": "MIT", "dependencies": { - "get-intrinsic": "^1.1.3" + "has-bigints": "^1.0.1" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/graceful-fs": { - "version": "4.2.11", + "node_modules/is-boolean-object": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz", + "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==", "dev": true, - "license": "ISC" + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } }, - "node_modules/grapheme-splitter": { - "version": "1.0.4", + "node_modules/is-bun-module": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/is-bun-module/-/is-bun-module-1.2.1.tgz", + "integrity": "sha512-AmidtEM6D6NmUiLOvvU7+IePxjEjOzra2h0pSrsfSAcXwl/83zLLXDByafUJy9k/rKK0pvXMLdwKwGHlX2Ke6Q==", "dev": true, - "license": "MIT" + "license": "MIT", + "dependencies": { + "semver": "^7.6.3" + } }, - "node_modules/graphemer": { - "version": "1.4.0", + "node_modules/is-callable": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", + "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", "dev": true, - "license": "MIT" + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } }, - "node_modules/gzip-size": { - "version": "6.0.0", + "node_modules/is-ci": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-3.0.1.tgz", + "integrity": "sha512-ZYvCgrefwqoQ6yTyYUbQu64HsITZ3NfKX1lzaEYdkTDcfKzzCI/wthRRYKkdjHKFVgNiXKAKm65Zo1pk2as/QQ==", "dev": true, "license": "MIT", "dependencies": { - "duplexer": "^0.1.2" + "ci-info": "^3.2.0" + }, + "bin": { + "is-ci": "bin.js" + } + }, + "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==", + "dev": true, + "license": "MIT", + "dependencies": { + "hasown": "^2.0.2" }, "engines": { - "node": ">=10" + "node": ">= 0.4" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/handlebars": { - "version": "4.7.8", + "node_modules/is-data-view": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-data-view/-/is-data-view-1.0.1.tgz", + "integrity": "sha512-AHkaJrsUVW6wq6JS8y3JnM/GJF/9cf+k20+iDzlSaJrinEo5+7vRiteOSwBhHRiAyQATN1AmY4hwzxJKPmYf+w==", "dev": true, "license": "MIT", "dependencies": { - "minimist": "^1.2.5", - "neo-async": "^2.6.2", - "source-map": "^0.6.1", - "wordwrap": "^1.0.0" + "is-typed-array": "^1.1.13" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-date-object": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", + "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "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": { - "handlebars": "bin/handlebars" + "is-docker": "cli.js" }, "engines": { - "node": ">=0.4.7" + "node": ">=8" }, - "optionalDependencies": { - "uglify-js": "^3.1.4" + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/har-schema": { - "version": "2.0.0", - "license": "ISC", + "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": ">=4" + "node": ">=0.10.0" } }, - "node_modules/har-validator": { - "version": "5.1.5", + "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==", "license": "MIT", - "dependencies": { - "ajv": "^6.12.3", - "har-schema": "^2.0.0" - }, "engines": { - "node": ">=6" + "node": ">=8" } }, - "node_modules/hard-rejection": { + "node_modules/is-generator-fn": { "version": "2.1.0", + "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/has": { - "version": "1.0.3", + "node_modules/is-generator-function": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.0.10.tgz", + "integrity": "sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==", + "dev": true, "license": "MIT", "dependencies": { - "function-bind": "^1.1.1" + "has-tostringtag": "^1.0.0" }, "engines": { - "node": ">= 0.4.0" - } - }, - "node_modules/has-bigints": { - "version": "1.0.2", - "dev": true, - "license": "MIT", + "node": ">= 0.4" + }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/has-flag": { - "version": "3.0.0", + "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, "license": "MIT", + "dependencies": { + "is-extglob": "^2.1.1" + }, "engines": { - "node": ">=4" + "node": ">=0.10.0" } }, - "node_modules/has-property-descriptors": { + "node_modules/is-interactive": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-interactive/-/is-interactive-1.0.0.tgz", + "integrity": "sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==", "dev": true, "license": "MIT", - "dependencies": { - "get-intrinsic": "^1.1.1" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "engines": { + "node": ">=8" } }, - "node_modules/has-proto": { + "node_modules/is-lambda": { "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-lambda/-/is-lambda-1.0.1.tgz", + "integrity": "sha512-z7CMFGNrENq5iFB9Bqo64Xk6Y9sg+epq1myIcdHaGnbMTYOxvzsEtdYqQUylB7LxfkvgrrjP32T6Ywciio9UIQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/is-nan": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/is-nan/-/is-nan-1.3.2.tgz", + "integrity": "sha512-E+zBKpQ2t6MEo1VsonYmluk9NxGrbzpeeLC2xIViuO2EjU2xsXsBPwTr3Ykv9l08UYEVEdWeRZNouaZqF6RN0w==", + "dev": true, "license": "MIT", + "dependencies": { + "call-bind": "^1.0.0", + "define-properties": "^1.1.3" + }, "engines": { "node": ">= 0.4" }, @@ -11952,8 +13130,11 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/has-symbols": { - "version": "1.0.3", + "node_modules/is-negative-zero": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.3.tgz", + "integrity": "sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==", + "dev": true, "license": "MIT", "engines": { "node": ">= 0.4" @@ -11962,12 +13143,24 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/has-tostringtag": { - "version": "1.0.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" + } + }, + "node_modules/is-number-object": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz", + "integrity": "sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==", "dev": true, "license": "MIT", "dependencies": { - "has-symbols": "^1.0.2" + "has-tostringtag": "^1.0.0" }, "engines": { "node": ">= 0.4" @@ -11976,5477 +13169,6285 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/has-unicode": { - "version": "2.0.1", + "node_modules/is-obj": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-2.0.0.tgz", + "integrity": "sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==", "dev": true, - "license": "ISC" - }, - "node_modules/hash-base": { - "version": "3.1.0", "license": "MIT", - "dependencies": { - "inherits": "^2.0.4", - "readable-stream": "^3.6.0", - "safe-buffer": "^5.2.0" - }, "engines": { - "node": ">=4" - } - }, - "node_modules/hash.js": { - "version": "1.1.7", - "license": "MIT", - "dependencies": { - "inherits": "^2.0.3", - "minimalistic-assert": "^1.0.1" + "node": ">=8" } }, - "node_modules/hmac-drbg": { - "version": "1.0.1", + "node_modules/is-path-inside": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", + "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", + "dev": true, "license": "MIT", - "dependencies": { - "hash.js": "^1.0.3", - "minimalistic-assert": "^1.0.0", - "minimalistic-crypto-utils": "^1.0.1" + "engines": { + "node": ">=8" } }, - "node_modules/hosted-git-info": { - "version": "4.1.0", + "node_modules/is-plain-obj": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz", + "integrity": "sha512-yvkRyxmFKEOQ4pNXCmJG5AEQNlXJS5LaONXo5/cLdTZdWvsZ1ioJEonLGAosKlMWE8lwUy/bJzMjcw8az73+Fg==", "dev": true, - "license": "ISC", - "dependencies": { - "lru-cache": "^6.0.0" - }, + "license": "MIT", "engines": { - "node": ">=10" + "node": ">=0.10.0" } }, - "node_modules/hosted-git-info/node_modules/lru-cache": { - "version": "6.0.0", + "node_modules/is-plain-object": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-5.0.0.tgz", + "integrity": "sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==", "dev": true, - "license": "ISC", - "dependencies": { - "yallist": "^4.0.0" - }, + "license": "MIT", "engines": { - "node": ">=10" + "node": ">=0.10.0" } }, - "node_modules/hosted-git-info/node_modules/yallist": { - "version": "4.0.0", + "node_modules/is-potential-custom-element-name": { + "version": "1.0.1", + "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": "ISC" + "license": "MIT" }, - "node_modules/html-encoding-sniffer": { - "version": "2.0.1", + "node_modules/is-regex": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", + "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", "dev": true, "license": "MIT", "dependencies": { - "whatwg-encoding": "^1.0.5" + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" }, "engines": { - "node": ">=10" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/html-escaper": { - "version": "2.0.2", + "node_modules/is-regexp": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-regexp/-/is-regexp-1.0.0.tgz", + "integrity": "sha512-7zjFAPO4/gwyQAAgRRmqeEeyIICSdmCqa3tsVHMdBzaXXRiqopZL4Cyghg/XulGWrtABTpbnYYzzIRffLkP4oA==", "dev": true, - "license": "MIT" - }, - "node_modules/htmlparser2": { - "version": "3.10.1", "license": "MIT", - "dependencies": { - "domelementtype": "^1.3.1", - "domhandler": "^2.3.0", - "domutils": "^1.5.1", - "entities": "^1.1.1", - "inherits": "^2.0.1", - "readable-stream": "^3.1.1" + "engines": { + "node": ">=0.10.0" } }, - "node_modules/http-cache-semantics": { - "version": "4.1.1", + "node_modules/is-relative-path": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-relative-path/-/is-relative-path-1.0.2.tgz", + "integrity": "sha512-i1h+y50g+0hRbBD+dbnInl3JlJ702aar58snAeX+MxBAPvzXGej7sYoPMhlnykabt0ZzCJNBEyzMlekuQZN7fA==", "dev": true, - "license": "BSD-2-Clause" + "license": "MIT" }, - "node_modules/http-errors": { - "version": "2.0.0", + "node_modules/is-shared-array-buffer": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.3.tgz", + "integrity": "sha512-nA2hv5XIhLR3uVzDDfCIknerhx8XUKnstuOERPNNIinXG7v9u+ohXF67vxm4TPTEPU6lm61ZkwP3c9PCB97rhg==", + "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" + "call-bind": "^1.0.7" }, "engines": { - "node": ">= 0.8" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/http-proxy-agent": { - "version": "7.0.2", + "node_modules/is-ssh": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/is-ssh/-/is-ssh-1.4.0.tgz", + "integrity": "sha512-x7+VxdxOdlV3CYpjvRLBv5Lo9OJerlYanjwFrPR9fuGPjCiNiCzFgAWpiLAohSbsnH4ZAys3SBh+hq5rJosxUQ==", "dev": true, "license": "MIT", "dependencies": { - "agent-base": "^7.1.0", - "debug": "^4.3.4" - }, - "engines": { - "node": ">= 14" + "protocols": "^2.0.1" } }, - "node_modules/http-proxy-agent/node_modules/agent-base": { - "version": "7.1.1", - "dev": true, + "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==", "license": "MIT", - "dependencies": { - "debug": "^4.3.4" - }, "engines": { - "node": ">= 14" + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/http-signature": { - "version": "1.2.0", + "node_modules/is-string": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", + "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", + "dev": true, "license": "MIT", "dependencies": { - "assert-plus": "^1.0.0", - "jsprim": "^1.2.2", - "sshpk": "^1.7.0" + "has-tostringtag": "^1.0.0" }, "engines": { - "node": ">=0.8", - "npm": ">=1.3.7" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/https-proxy-agent": { - "version": "5.0.1", + "node_modules/is-subdir": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/is-subdir/-/is-subdir-1.2.0.tgz", + "integrity": "sha512-2AT6j+gXe/1ueqbW6fLZJiIw3F8iXGJtt0yDrZaBhAZEG1raiTxKWU+IPqMCzQAXOUCKdA4UDMgacKH25XG2Cw==", "dev": true, "license": "MIT", "dependencies": { - "agent-base": "6", - "debug": "4" + "better-path-resolve": "1.0.0" }, "engines": { - "node": ">= 6" - } - }, - "node_modules/human-id": { - "version": "1.0.2", - "dev": true, - "license": "MIT" - }, - "node_modules/human-signals": { - "version": "2.1.0", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": ">=10.17.0" + "node": ">=4" } }, - "node_modules/husky": { - "version": "8.0.3", + "node_modules/is-symbol": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", + "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", "dev": true, "license": "MIT", - "bin": { - "husky": "lib/bin.js" + "dependencies": { + "has-symbols": "^1.0.2" }, "engines": { - "node": ">=14" + "node": ">= 0.4" }, "funding": { - "url": "https://github.com/sponsors/typicode" - } - }, - "node_modules/iced-error": { - "version": "0.0.13" - }, - "node_modules/iced-lock": { - "version": "1.1.0", - "dependencies": { - "iced-runtime": "^1.0.0" - } - }, - "node_modules/iced-runtime": { - "version": "1.0.4" - }, - "node_modules/iconv-lite": { - "version": "0.4.24", - "license": "MIT", - "dependencies": { - "safer-buffer": ">= 2.1.2 < 3" - }, - "engines": { - "node": ">=0.10.0" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/ieee754": { - "version": "1.2.1", - "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": "BSD-3-Clause" - }, - "node_modules/ignore": { - "version": "5.2.4", + "node_modules/is-text-path": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-text-path/-/is-text-path-1.0.1.tgz", + "integrity": "sha512-xFuJpne9oFz5qDaodwmmG08e3CawH/2ZV8Qqza1Ko7Sk8POWbkRdwIoAWVhqvq0XeUzANEhKo2n0IXUGBm7A/w==", "dev": true, "license": "MIT", - "engines": { - "node": ">= 4" - } - }, - "node_modules/ignore-walk": { - "version": "6.0.5", - "dev": true, - "license": "ISC", "dependencies": { - "minimatch": "^9.0.0" + "text-extensions": "^1.0.0" }, "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + "node": ">=0.10.0" } }, - "node_modules/ignore-walk/node_modules/brace-expansion": { - "version": "2.0.1", + "node_modules/is-typed-array": { + "version": "1.1.13", + "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.13.tgz", + "integrity": "sha512-uZ25/bUAlUY5fR4OKT4rZQEBrzQWYV9ZJYGGsUmEJ6thodVJ1HX64ePQ6Z0qPWP+m+Uq6e9UugrE38jeYsDSMw==", "dev": true, "license": "MIT", "dependencies": { - "balanced-match": "^1.0.0" - } - }, - "node_modules/ignore-walk/node_modules/minimatch": { - "version": "9.0.5", - "dev": true, - "license": "ISC", - "dependencies": { - "brace-expansion": "^2.0.1" + "which-typed-array": "^1.1.14" }, "engines": { - "node": ">=16 || 14 >=14.17" + "node": ">= 0.4" }, "funding": { - "url": "https://github.com/sponsors/isaacs" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/import-fresh": { - "version": "3.3.0", + "node_modules/is-typedarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", + "integrity": "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==", + "license": "MIT" + }, + "node_modules/is-unicode-supported": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", + "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", "dev": true, "license": "MIT", - "dependencies": { - "parent-module": "^1.0.0", - "resolve-from": "^4.0.0" - }, "engines": { - "node": ">=6" + "node": ">=10" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/import-fresh/node_modules/resolve-from": { + "node_modules/is-url": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/is-url/-/is-url-1.2.4.tgz", + "integrity": "sha512-ITvGim8FhRiYe4IQ5uHSkj7pVaPDrCTkNd3yq3cV7iZAcJdHTUMPMEHcqSOy9xZ9qFenQCvi+2wjH9a1nXqHww==", + "dev": true, + "license": "MIT" + }, + "node_modules/is-url-superb": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/is-url-superb/-/is-url-superb-4.0.0.tgz", + "integrity": "sha512-GI+WjezhPPcbM+tqE9LnmsY5qqjwHzTvjJ36wxYX5ujNXefSUJ/T17r5bqDV8yLhcgB59KTPNOc9O9cmHTPWsA==", "dev": true, "license": "MIT", "engines": { - "node": ">=4" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/import-local": { - "version": "3.1.0", + "node_modules/is-weakref": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz", + "integrity": "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==", "dev": true, "license": "MIT", "dependencies": { - "pkg-dir": "^4.2.0", - "resolve-cwd": "^3.0.0" - }, - "bin": { - "import-local-fixture": "fixtures/cli.js" - }, - "engines": { - "node": ">=8" + "call-bind": "^1.0.2" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/imurmurhash": { - "version": "0.1.4", + "node_modules/is-windows": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", + "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==", "dev": true, "license": "MIT", "engines": { - "node": ">=0.8.19" + "node": ">=0.10.0" } }, - "node_modules/indent-string": { - "version": "4.0.0", + "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/indexes-of": { - "version": "1.0.1", + "node_modules/isarray": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", + "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", "dev": true, "license": "MIT" }, - "node_modules/inflight": { - "version": "1.0.6", + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", "dev": true, - "license": "ISC", - "dependencies": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "node_modules/inherits": { - "version": "2.0.4", "license": "ISC" }, - "node_modules/ini": { - "version": "1.3.8", + "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": "ISC" + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } }, - "node_modules/init-package-json": { - "version": "6.0.3", + "node_modules/isstream": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", + "integrity": "sha512-Yljz7ffyPbrLpLngrMtZ7NduUgVvi6wG9RJ9IUcyCd59YQ911PBJphODUcbOVbqYfxe1wuYf/LJ8PauMRwsM/g==", + "license": "MIT" + }, + "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": "ISC", + "license": "BSD-3-Clause", + "engines": { + "node": ">=8" + } + }, + "node_modules/istanbul-lib-instrument": { + "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": { - "@npmcli/package-json": "^5.0.0", - "npm-package-arg": "^11.0.0", - "promzard": "^1.0.0", - "read": "^3.0.1", - "semver": "^7.3.5", - "validate-npm-package-license": "^3.0.4", - "validate-npm-package-name": "^5.0.0" + "@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" }, "engines": { - "node": "^16.14.0 || >=18.0.0" + "node": ">=10" } }, - "node_modules/inquirer": { - "version": "7.3.3", - "license": "MIT", + "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": { - "ansi-escapes": "^4.2.1", - "chalk": "^4.1.0", - "cli-cursor": "^3.1.0", - "cli-width": "^3.0.0", - "external-editor": "^3.0.3", - "figures": "^3.0.0", - "lodash": "^4.17.19", - "mute-stream": "0.0.8", - "run-async": "^2.4.0", - "rxjs": "^6.6.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0", - "through": "^2.3.6" + "istanbul-lib-coverage": "^3.0.0", + "make-dir": "^4.0.0", + "supports-color": "^7.1.0" }, "engines": { - "node": ">=8.0.0" + "node": ">=10" } }, - "node_modules/inquirer/node_modules/ansi-styles": { - "version": "4.3.0", - "license": "MIT", + "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": { - "color-convert": "^2.0.1" + "debug": "^4.1.1", + "istanbul-lib-coverage": "^3.0.0", + "source-map": "^0.6.1" }, "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "node": ">=10" } }, - "node_modules/inquirer/node_modules/chalk": { - "version": "4.1.2", - "license": "MIT", + "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==", + "dev": true, + "license": "BSD-3-Clause", "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" + "html-escaper": "^2.0.0", + "istanbul-lib-report": "^3.0.0" }, "engines": { - "node": ">=10" + "node": ">=8" + } + }, + "node_modules/jackspeak": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.3.tgz", + "integrity": "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==", + "dev": true, + "license": "BlueOak-1.0.0", + "dependencies": { + "@isaacs/cliui": "^8.0.2" }, "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" + "url": "https://github.com/sponsors/isaacs" + }, + "optionalDependencies": { + "@pkgjs/parseargs": "^0.11.0" } }, - "node_modules/inquirer/node_modules/color-convert": { - "version": "2.0.1", - "license": "MIT", + "node_modules/jake": { + "version": "10.9.2", + "resolved": "https://registry.npmjs.org/jake/-/jake-10.9.2.tgz", + "integrity": "sha512-2P4SQ0HrLQ+fw6llpLnOaGAvN2Zu6778SJMrCUwns4fOoG9ayrTiZk3VV8sCPkVZF8ab0zksVpS8FDY5pRCNBA==", + "dev": true, + "license": "Apache-2.0", "dependencies": { - "color-name": "~1.1.4" + "async": "^3.2.3", + "chalk": "^4.0.2", + "filelist": "^1.0.4", + "minimatch": "^3.1.2" + }, + "bin": { + "jake": "bin/cli.js" }, "engines": { - "node": ">=7.0.0" + "node": ">=10" } }, - "node_modules/inquirer/node_modules/color-name": { - "version": "1.1.4", - "license": "MIT" - }, - "node_modules/inquirer/node_modules/has-flag": { - "version": "4.0.0", + "node_modules/jake/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, "license": "MIT", - "engines": { - "node": ">=8" + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" } }, - "node_modules/inquirer/node_modules/supports-color": { - "version": "7.2.0", - "license": "MIT", + "node_modules/jake/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, + "license": "ISC", "dependencies": { - "has-flag": "^4.0.0" + "brace-expansion": "^1.1.7" }, "engines": { - "node": ">=8" + "node": "*" } }, - "node_modules/inspectpack": { - "version": "4.7.1", + "node_modules/jest": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest/-/jest-29.7.0.tgz", + "integrity": "sha512-NIy3oAFp9shda19hy4HK0HRTWKtPJmGdnvywu01nOqNC2vZg+Z+fvJDxpMQA88eb2I9EcafcdjYgsDthnYTvGw==", "dev": true, "license": "MIT", "dependencies": { - "chalk": "^4.1.0", - "fp-ts": "^2.6.1", - "io-ts": "^2.2.13", - "io-ts-reporters": "^1.2.2", - "pify": "^5.0.0", - "semver-compare": "^1.0.0", - "yargs": "^16.2.0" + "@jest/core": "^29.7.0", + "@jest/types": "^29.6.3", + "import-local": "^3.0.2", + "jest-cli": "^29.7.0" }, "bin": { - "inspectpack": "bin/inspectpack.js" + "jest": "bin/jest.js" }, "engines": { - "node": ">=6.0.0" + "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/inspectpack/node_modules/ansi-styles": { - "version": "4.3.0", + "node_modules/jest-changed-files": { + "version": "29.7.0", + "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": { - "color-convert": "^2.0.1" + "execa": "^5.0.0", + "jest-util": "^29.7.0", + "p-limit": "^3.1.0" }, "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/inspectpack/node_modules/chalk": { - "version": "4.1.2", + "node_modules/jest-changed-files/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": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" + "yocto-queue": "^0.1.0" }, "engines": { "node": ">=10" }, "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/inspectpack/node_modules/color-convert": { - "version": "2.0.1", + "node_modules/jest-circus": { + "version": "29.7.0", + "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": { - "color-name": "~1.1.4" + "@jest/environment": "^29.7.0", + "@jest/expect": "^29.7.0", + "@jest/test-result": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/node": "*", + "chalk": "^4.0.0", + "co": "^4.6.0", + "dedent": "^1.0.0", + "is-generator-fn": "^2.0.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.0.0", + "slash": "^3.0.0", + "stack-utils": "^2.0.3" }, "engines": { - "node": ">=7.0.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/inspectpack/node_modules/color-name": { - "version": "1.1.4", - "dev": true, - "license": "MIT" - }, - "node_modules/inspectpack/node_modules/has-flag": { - "version": "4.0.0", + "node_modules/jest-circus/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" + }, "engines": { - "node": ">=8" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/inspectpack/node_modules/supports-color": { - "version": "7.2.0", + "node_modules/jest-cli": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-29.7.0.tgz", + "integrity": "sha512-OVVobw2IubN/GSYsxETi+gOe7Ka59EFMR/twOU3Jb2GnKKeMGJB5SGUUrEz3SFVmJASUdZUzy83sLNNQ2gZslg==", "dev": true, "license": "MIT", "dependencies": { - "has-flag": "^4.0.0" + "@jest/core": "^29.7.0", + "@jest/test-result": "^29.7.0", + "@jest/types": "^29.6.3", + "chalk": "^4.0.0", + "create-jest": "^29.7.0", + "exit": "^0.1.2", + "import-local": "^3.0.2", + "jest-config": "^29.7.0", + "jest-util": "^29.7.0", + "jest-validate": "^29.7.0", + "yargs": "^17.3.1" + }, + "bin": { + "jest": "bin/jest.js" }, "engines": { - "node": ">=8" + "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/inspectpack/node_modules/yargs": { - "version": "16.2.0", + "node_modules/jest-config": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-29.7.0.tgz", + "integrity": "sha512-uXbpfeQ7R6TZBqI3/TxCU4q4ttk3u0PJeC+E0zbfSoSjq6bJ7buBPxzQPL0ifrkY4DNu4JUdk0ImlBUYi840eQ==", "dev": true, "license": "MIT", "dependencies": { - "cliui": "^7.0.2", - "escalade": "^3.1.1", - "get-caller-file": "^2.0.5", - "require-directory": "^2.1.1", - "string-width": "^4.2.0", - "y18n": "^5.0.5", - "yargs-parser": "^20.2.2" + "@babel/core": "^7.11.6", + "@jest/test-sequencer": "^29.7.0", + "@jest/types": "^29.6.3", + "babel-jest": "^29.7.0", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "deepmerge": "^4.2.2", + "glob": "^7.1.3", + "graceful-fs": "^4.2.9", + "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.4", + "parse-json": "^5.2.0", + "pretty-format": "^29.7.0", + "slash": "^3.0.0", + "strip-json-comments": "^3.1.1" }, "engines": { - "node": ">=10" + "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 + } } }, - "node_modules/internal-slot": { - "version": "1.0.5", + "node_modules/jest-diff": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-29.7.0.tgz", + "integrity": "sha512-LMIgiIrhigmPrs03JHpxUh2yISK3vLFPkAodPeo0+BuF7wA2FoQbkEg1u8gBYBThncu7e1oEDUfIXVuTqLRUjw==", "dev": true, "license": "MIT", "dependencies": { - "get-intrinsic": "^1.2.0", - "has": "^1.0.3", - "side-channel": "^1.0.4" + "chalk": "^4.0.0", + "diff-sequences": "^29.6.3", + "jest-get-type": "^29.6.3", + "pretty-format": "^29.7.0" }, "engines": { - "node": ">= 0.4" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/interpret": { - "version": "3.1.1", + "node_modules/jest-docblock": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-29.7.0.tgz", + "integrity": "sha512-q617Auw3A612guyaFgsbFeYpNP5t2aoUNLwBUbc/0kD1R4t9ixDbyFTHd1nok4epoVFpr7PmeWHrhvuV3XaJ4g==", "dev": true, "license": "MIT", - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/io-ts": { - "version": "2.2.20", - "dev": true, - "license": "MIT", - "peerDependencies": { - "fp-ts": "^2.5.0" + "dependencies": { + "detect-newline": "^3.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/io-ts-reporters": { - "version": "1.2.2", + "node_modules/jest-each": { + "version": "29.7.0", + "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", - "peerDependencies": { - "fp-ts": "^2.0.2", - "io-ts": "^2.0.0" + "dependencies": { + "@jest/types": "^29.6.3", + "chalk": "^4.0.0", + "jest-get-type": "^29.6.3", + "jest-util": "^29.7.0", + "pretty-format": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/ip-address": { - "version": "9.0.5", + "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": { - "jsbn": "1.1.0", - "sprintf-js": "^1.1.3" + "@jest/environment": "^29.7.0", + "@jest/fake-timers": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/node": "*", + "jest-mock": "^29.7.0", + "jest-util": "^29.7.0" }, "engines": { - "node": ">= 12" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/ip-address/node_modules/jsbn": { - "version": "1.1.0", + "node_modules/jest-fetch-mock": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/jest-fetch-mock/-/jest-fetch-mock-3.0.3.tgz", + "integrity": "sha512-Ux1nWprtLrdrH4XwE7O7InRY6psIi3GOsqNESJgMJ+M5cv4A8Lh7SN9d2V2kKRZ8ebAfcd1LNyZguAOb6JiDqw==", "dev": true, - "license": "MIT" + "license": "MIT", + "dependencies": { + "cross-fetch": "^3.0.4", + "promise-polyfill": "^8.1.3" + } }, - "node_modules/ip-address/node_modules/sprintf-js": { - "version": "1.1.3", + "node_modules/jest-get-type": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-29.6.3.tgz", + "integrity": "sha512-zrteXnqYxfQh7l5FHyL38jL39di8H8rHoecLH3JNxH3BwOrBsNeabdap5e0I23lD4HHI8W5VFBZqG4Eaq5LNcw==", "dev": true, - "license": "BSD-3-Clause" - }, - "node_modules/ipaddr.js": { - "version": "1.9.1", "license": "MIT", "engines": { - "node": ">= 0.10" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/is-arguments": { - "version": "1.1.1", + "node_modules/jest-haste-map": { + "version": "29.7.0", + "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": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" + "@jest/types": "^29.6.3", + "@types/graceful-fs": "^4.1.3", + "@types/node": "*", + "anymatch": "^3.0.3", + "fb-watchman": "^2.0.0", + "graceful-fs": "^4.2.9", + "jest-regex-util": "^29.6.3", + "jest-util": "^29.7.0", + "jest-worker": "^29.7.0", + "micromatch": "^4.0.4", + "walker": "^1.0.8" }, "engines": { - "node": ">= 0.4" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "optionalDependencies": { + "fsevents": "^2.3.2" } }, - "node_modules/is-array-buffer": { - "version": "3.0.2", + "node_modules/jest-leak-detector": { + "version": "29.7.0", + "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": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.2.0", - "is-typed-array": "^1.1.10" + "jest-get-type": "^29.6.3", + "pretty-format": "^29.7.0" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/is-arrayish": { - "version": "0.2.1", - "dev": true, - "license": "MIT" - }, - "node_modules/is-bigint": { - "version": "1.0.4", + "node_modules/jest-matcher-utils": { + "version": "29.7.0", + "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": { - "has-bigints": "^1.0.1" + "chalk": "^4.0.0", + "jest-diff": "^29.7.0", + "jest-get-type": "^29.6.3", + "pretty-format": "^29.7.0" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/is-boolean-object": { - "version": "1.1.2", + "node_modules/jest-message-util": { + "version": "29.7.0", + "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": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" + "@babel/code-frame": "^7.12.13", + "@jest/types": "^29.6.3", + "@types/stack-utils": "^2.0.0", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "micromatch": "^4.0.4", + "pretty-format": "^29.7.0", + "slash": "^3.0.0", + "stack-utils": "^2.0.3" }, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/is-callable": { - "version": "1.2.7", + "node_modules/jest-mock": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-29.7.0.tgz", + "integrity": "sha512-ITOMZn+UkYS4ZFh83xYAOzWStloNzJFO2s8DWrE4lhtGD+AorgnbkiKERe4wQVBydIGPx059g6riW5Btp6Llnw==", "dev": true, "license": "MIT", - "engines": { - "node": ">= 0.4" + "dependencies": { + "@jest/types": "^29.6.3", + "@types/node": "*", + "jest-util": "^29.7.0" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/is-ci": { - "version": "3.0.1", + "node_modules/jest-module-name-mapper": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/jest-module-name-mapper/-/jest-module-name-mapper-0.1.5.tgz", + "integrity": "sha512-lUpDxar6/vh/DurBIr+CvmJA6TKtqHatLVYO0Q46EgFEtm17ksfXqXHZTj0fYOokdaW9wwzPMb8jRkOpP2VA4g==", "dev": true, "license": "MIT", "dependencies": { - "ci-info": "^3.2.0" + "chalk": "^2.4.2", + "tsconfig-paths": "^3.9.0" }, - "bin": { - "is-ci": "bin.js" + "engines": { + "npm": ">= 5.0.0", + "yarn": ">= 1.7.0" } }, - "node_modules/is-core-module": { - "version": "2.13.0", + "node_modules/jest-module-name-mapper/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, "license": "MIT", "dependencies": { - "has": "^1.0.3" + "color-convert": "^1.9.0" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "engines": { + "node": ">=4" } }, - "node_modules/is-date-object": { - "version": "1.0.5", + "node_modules/jest-module-name-mapper/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, "license": "MIT", "dependencies": { - "has-tostringtag": "^1.0.0" + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" }, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">=4" } }, - "node_modules/is-docker": { - "version": "2.2.1", + "node_modules/jest-module-name-mapper/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, "license": "MIT", - "bin": { - "is-docker": "cli.js" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "dependencies": { + "color-name": "1.1.3" } }, - "node_modules/is-extglob": { - "version": "2.1.1", + "node_modules/jest-module-name-mapper/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, + "license": "MIT" + }, + "node_modules/jest-module-name-mapper/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, "license": "MIT", "engines": { - "node": ">=0.10.0" + "node": ">=0.8.0" } }, - "node_modules/is-fullwidth-code-point": { + "node_modules/jest-module-name-mapper/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, "license": "MIT", "engines": { - "node": ">=8" + "node": ">=4" } }, - "node_modules/is-generator-fn": { - "version": "2.1.0", + "node_modules/jest-module-name-mapper/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, + "license": "MIT", + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/jest-pnp-resolver": { + "version": "1.2.3", + "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" + }, + "peerDependencies": { + "jest-resolve": "*" + }, + "peerDependenciesMeta": { + "jest-resolve": { + "optional": true + } } }, - "node_modules/is-generator-function": { - "version": "1.0.10", + "node_modules/jest-regex-util": { + "version": "29.6.3", + "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" + } + }, + "node_modules/jest-resolve": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-29.7.0.tgz", + "integrity": "sha512-IOVhZSrg+UvVAshDSDtHyFCCBUl/Q3AAJv8iZ6ZjnZ74xzvwuzLXid9IIIPgTnY62SJjfuupMKZsZQRsCvxEgA==", "dev": true, "license": "MIT", "dependencies": { - "has-tostringtag": "^1.0.0" + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^29.7.0", + "jest-pnp-resolver": "^1.2.2", + "jest-util": "^29.7.0", + "jest-validate": "^29.7.0", + "resolve": "^1.20.0", + "resolve.exports": "^2.0.0", + "slash": "^3.0.0" }, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/is-glob": { - "version": "4.0.3", + "node_modules/jest-resolve-dependencies": { + "version": "29.7.0", + "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": { - "is-extglob": "^2.1.1" + "jest-regex-util": "^29.6.3", + "jest-snapshot": "^29.7.0" }, "engines": { - "node": ">=0.10.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/is-inside-container": { - "version": "1.0.0", + "node_modules/jest-runner": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-29.7.0.tgz", + "integrity": "sha512-fsc4N6cPCAahybGBfTRcq5wFR6fpLznMg47sY5aDpsoejOcVYFb07AHuSnR0liMcPTgBsA3ZJL6kFOjPdoNipQ==", "dev": true, "license": "MIT", "dependencies": { - "is-docker": "^3.0.0" - }, - "bin": { - "is-inside-container": "cli.js" + "@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": "*", + "chalk": "^4.0.0", + "emittery": "^0.13.1", + "graceful-fs": "^4.2.9", + "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" }, "engines": { - "node": ">=14.16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/is-inside-container/node_modules/is-docker": { - "version": "3.0.0", + "node_modules/jest-runner/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", - "bin": { - "is-docker": "cli.js" + "dependencies": { + "yocto-queue": "^0.1.0" }, "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + "node": ">=10" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/is-interactive": { - "version": "1.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/is-lambda": { - "version": "1.0.1", - "dev": true, - "license": "MIT" - }, - "node_modules/is-nan": { - "version": "1.3.2", + "node_modules/jest-runtime": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-29.7.0.tgz", + "integrity": "sha512-gUnLjgwdGqW7B4LvOIkbKs9WGbn+QLqRQQ9juC6HndeDiezIwhDP+mhMwHWCEcfQ5RUXa6OPnFF8BJh5xegwwQ==", "dev": true, "license": "MIT", "dependencies": { - "call-bind": "^1.0.0", - "define-properties": "^1.1.3" + "@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": "*", + "chalk": "^4.0.0", + "cjs-module-lexer": "^1.0.0", + "collect-v8-coverage": "^1.0.0", + "glob": "^7.1.3", + "graceful-fs": "^4.2.9", + "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" }, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/is-negative-zero": { - "version": "2.0.2", + "node_modules/jest-snapshot": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-29.7.0.tgz", + "integrity": "sha512-Rm0BMWtxBcioHr1/OX5YCP8Uov4riHvKPknOGs804Zg9JGZgmIBkbtlxJC/7Z4msKYVbIJtfU+tKb8xlYNfdkw==", "dev": true, "license": "MIT", - "engines": { - "node": ">= 0.4" + "dependencies": { + "@babel/core": "^7.11.6", + "@babel/generator": "^7.7.2", + "@babel/plugin-syntax-jsx": "^7.7.2", + "@babel/plugin-syntax-typescript": "^7.7.2", + "@babel/types": "^7.3.3", + "@jest/expect-utils": "^29.7.0", + "@jest/transform": "^29.7.0", + "@jest/types": "^29.6.3", + "babel-preset-current-node-syntax": "^1.0.0", + "chalk": "^4.0.0", + "expect": "^29.7.0", + "graceful-fs": "^4.2.9", + "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" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-number": { - "version": "7.0.0", - "dev": true, - "license": "MIT", "engines": { - "node": ">=0.12.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/is-number-object": { - "version": "1.0.7", + "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": { - "has-tostringtag": "^1.0.0" + "@jest/types": "^29.6.3", + "@types/node": "*", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "graceful-fs": "^4.2.9", + "picomatch": "^2.2.3" }, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/is-obj": { - "version": "2.0.0", + "node_modules/jest-validate": { + "version": "29.7.0", + "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", + "chalk": "^4.0.0", + "jest-get-type": "^29.6.3", + "leven": "^3.1.0", + "pretty-format": "^29.7.0" + }, "engines": { - "node": ">=8" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/is-path-inside": { - "version": "3.0.3", + "node_modules/jest-validate/node_modules/camelcase": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", + "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", "dev": true, "license": "MIT", "engines": { - "node": ">=8" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/is-plain-obj": { - "version": "1.1.0", + "node_modules/jest-watcher": { + "version": "29.7.0", + "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", + "@types/node": "*", + "ansi-escapes": "^4.2.1", + "chalk": "^4.0.0", + "emittery": "^0.13.1", + "jest-util": "^29.7.0", + "string-length": "^4.0.1" + }, "engines": { - "node": ">=0.10.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/is-plain-object": { - "version": "5.0.0", + "node_modules/jest-worker": { + "version": "29.7.0", + "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", + "merge-stream": "^2.0.0", + "supports-color": "^8.0.0" + }, "engines": { - "node": ">=0.10.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/is-potential-custom-element-name": { - "version": "1.0.1", - "dev": true, - "license": "MIT" - }, - "node_modules/is-regex": { - "version": "1.1.4", + "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": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" + "has-flag": "^4.0.0" }, "engines": { - "node": ">= 0.4" + "node": ">=10" }, "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-regexp": { - "version": "1.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" + "url": "https://github.com/chalk/supports-color?sponsor=1" } }, - "node_modules/is-relative-path": { - "version": "1.0.2", + "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, "license": "MIT" }, - "node_modules/is-shared-array-buffer": { - "version": "1.0.2", + "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==", "dev": true, "license": "MIT", "dependencies": { - "call-bind": "^1.0.2" + "argparse": "^1.0.7", + "esprima": "^4.0.0" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "bin": { + "js-yaml": "bin/js-yaml.js" } }, - "node_modules/is-ssh": { - "version": "1.4.0", + "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, - "license": "MIT", - "dependencies": { - "protocols": "^2.0.1" - } + "license": "MIT" }, - "node_modules/is-stream": { - "version": "2.0.1", + "node_modules/jsdom": { + "version": "16.7.0", + "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-16.7.0.tgz", + "integrity": "sha512-u9Smc2G1USStM+s/x1ru5Sxrl6mPYCbByG1U/hUmqaVsm4tbNyS7CicOSRyuGQYZhTu0h84qkZZQ/I+dzizSVw==", + "dev": true, "license": "MIT", + "dependencies": { + "abab": "^2.0.5", + "acorn": "^8.2.4", + "acorn-globals": "^6.0.0", + "cssom": "^0.4.4", + "cssstyle": "^2.3.0", + "data-urls": "^2.0.0", + "decimal.js": "^10.2.1", + "domexception": "^2.0.1", + "escodegen": "^2.0.0", + "form-data": "^3.0.0", + "html-encoding-sniffer": "^2.0.1", + "http-proxy-agent": "^4.0.1", + "https-proxy-agent": "^5.0.0", + "is-potential-custom-element-name": "^1.0.1", + "nwsapi": "^2.2.0", + "parse5": "6.0.1", + "saxes": "^5.0.1", + "symbol-tree": "^3.2.4", + "tough-cookie": "^4.0.0", + "w3c-hr-time": "^1.0.2", + "w3c-xmlserializer": "^2.0.0", + "webidl-conversions": "^6.1.0", + "whatwg-encoding": "^1.0.5", + "whatwg-mimetype": "^2.3.0", + "whatwg-url": "^8.5.0", + "ws": "^7.4.6", + "xml-name-validator": "^3.0.0" + }, "engines": { - "node": ">=8" + "node": ">=10" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "peerDependencies": { + "canvas": "^2.5.0" + }, + "peerDependenciesMeta": { + "canvas": { + "optional": true + } } }, - "node_modules/is-string": { - "version": "1.0.7", + "node_modules/jsdom/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": { - "has-tostringtag": "^1.0.0" + "debug": "4" }, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">= 6.0.0" } }, - "node_modules/is-subdir": { - "version": "1.2.0", + "node_modules/jsdom/node_modules/form-data": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-3.0.2.tgz", + "integrity": "sha512-sJe+TQb2vIaIyO783qN6BlMYWMw3WBOHA1Ay2qxsnjuafEOQFJ2JakedOQirT6D5XPRxDvS7AHYyem9fTpb4LQ==", "dev": true, "license": "MIT", "dependencies": { - "better-path-resolve": "1.0.0" + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" }, "engines": { - "node": ">=4" + "node": ">= 6" } }, - "node_modules/is-symbol": { - "version": "1.0.4", + "node_modules/jsdom/node_modules/http-proxy-agent": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz", + "integrity": "sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg==", "dev": true, "license": "MIT", "dependencies": { - "has-symbols": "^1.0.2" + "@tootallnate/once": "1", + "agent-base": "6", + "debug": "4" }, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">= 6" } }, - "node_modules/is-text-path": { - "version": "1.0.1", + "node_modules/jsdom/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": { - "text-extensions": "^1.0.0" + "agent-base": "6", + "debug": "4" }, "engines": { - "node": ">=0.10.0" + "node": ">= 6" } }, - "node_modules/is-typed-array": { - "version": "1.1.12", + "node_modules/jsdom/node_modules/tr46": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-2.1.0.tgz", + "integrity": "sha512-15Ih7phfcdP5YxqiB+iDtLoaTz4Nd35+IiAv0kQ5FNKHzXgdWqPoTIqEDDJmXceQt4JZk6lVPT8lnDlPpGDppw==", "dev": true, "license": "MIT", "dependencies": { - "which-typed-array": "^1.1.11" + "punycode": "^2.1.1" }, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">=8" } }, - "node_modules/is-typedarray": { - "version": "1.0.0", - "license": "MIT" - }, - "node_modules/is-unicode-supported": { - "version": "0.1.0", + "node_modules/jsdom/node_modules/webidl-conversions": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-6.1.0.tgz", + "integrity": "sha512-qBIvFLGiBpLjfwmYAaHPXsn+ho5xZnGvyGvsarywGNc8VyQJUMHJ8OBKGGrPER0okBeMDaan4mNBlgBROxuI8w==", "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/is-url": { - "version": "1.2.4", - "dev": true, - "license": "MIT" - }, - "node_modules/is-url-superb": { - "version": "4.0.0", - "dev": true, - "license": "MIT", + "license": "BSD-2-Clause", "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=10.4" } }, - "node_modules/is-weakref": { - "version": "1.0.2", + "node_modules/jsdom/node_modules/whatwg-url": { + "version": "8.7.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-8.7.0.tgz", + "integrity": "sha512-gAojqb/m9Q8a5IV96E3fHJM70AzCkgt4uXYX2O7EmuyOnLrViCQlsEBmF9UQIu3/aeAIp2U17rtbpZWNntQqdg==", "dev": true, "license": "MIT", "dependencies": { - "call-bind": "^1.0.2" + "lodash": "^4.7.0", + "tr46": "^2.1.0", + "webidl-conversions": "^6.1.0" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-windows": { - "version": "1.0.2", - "dev": true, - "license": "MIT", "engines": { - "node": ">=0.10.0" + "node": ">=10" } }, - "node_modules/is-wsl": { - "version": "2.2.0", + "node_modules/jsesc": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.0.2.tgz", + "integrity": "sha512-xKqzzWXDttJuOcawBt4KnKHHIf5oQ/Cxax+0PWFG+DFDgHNAdi+TXECADI+RYiFUMmx8792xsMbbgXj4CwnP4g==", "dev": true, "license": "MIT", - "dependencies": { - "is-docker": "^2.0.0" + "bin": { + "jsesc": "bin/jsesc" }, "engines": { - "node": ">=8" + "node": ">=6" } }, - "node_modules/isarray": { - "version": "2.0.5", + "node_modules/json-buffer": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", + "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", "dev": true, "license": "MIT" }, - "node_modules/isexe": { - "version": "2.0.0", + "node_modules/json-parse-better-errors": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", + "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==", "dev": true, - "license": "ISC" + "license": "MIT" }, - "node_modules/isobject": { - "version": "3.0.1", + "node_modules/json-parse-even-better-errors": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-3.0.2.tgz", + "integrity": "sha512-fi0NG4bPjCHunUJffmLd0gxssIgkNmArMvis4iNah6Owg1MCJjWhEcDLmsK6iGkJq3tHwbDkTlce70/tmXN4cQ==", "dev": true, "license": "MIT", "engines": { - "node": ">=0.10.0" + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, - "node_modules/isstream": { - "version": "0.1.2", - "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/istanbul-lib-coverage": { - "version": "3.2.0", + "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, - "license": "BSD-3-Clause", - "engines": { - "node": ">=8" - } + "license": "MIT" }, - "node_modules/istanbul-lib-instrument": { - "version": "5.2.1", + "node_modules/json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", + "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "@babel/core": "^7.12.3", - "@babel/parser": "^7.14.7", - "@istanbuljs/schema": "^0.1.2", - "istanbul-lib-coverage": "^3.2.0", - "semver": "^6.3.0" - }, - "engines": { - "node": ">=8" - } + "license": "MIT" }, - "node_modules/istanbul-lib-instrument/node_modules/semver": { - "version": "6.3.1", + "node_modules/json-stringify-nice": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/json-stringify-nice/-/json-stringify-nice-1.1.4.tgz", + "integrity": "sha512-5Z5RFW63yxReJ7vANgW6eZFGWaQvnPE3WNmZoOJrSkGju2etKA2L5rrOa1sm877TVTFt57A80BH1bArcmlLfPw==", "dev": true, "license": "ISC", - "bin": { - "semver": "bin/semver.js" + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/istanbul-lib-report": { - "version": "3.0.1", + "node_modules/json-stringify-safe": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", + "integrity": "sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==", + "license": "ISC" + }, + "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": "BSD-3-Clause", - "dependencies": { - "istanbul-lib-coverage": "^3.0.0", - "make-dir": "^4.0.0", - "supports-color": "^7.1.0" + "license": "MIT", + "bin": { + "json5": "lib/cli.js" }, "engines": { - "node": ">=10" + "node": ">=6" } }, - "node_modules/istanbul-lib-report/node_modules/has-flag": { + "node_modules/jsonc-parser": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.2.0.tgz", + "integrity": "sha512-gfFQZrcTc8CnKXp6Y4/CBT3fTc0OVuDofpre4aEeEpSBPV5X5v4+Vmx+8snU7RLPrNHPKSgLxGo9YuQzz20o+w==", + "dev": true, + "license": "MIT" + }, + "node_modules/jsonfile": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", + "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==", "dev": true, "license": "MIT", - "engines": { - "node": ">=8" + "optionalDependencies": { + "graceful-fs": "^4.1.6" } }, - "node_modules/istanbul-lib-report/node_modules/supports-color": { - "version": "7.2.0", + "node_modules/jsonparse": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/jsonparse/-/jsonparse-1.3.1.tgz", + "integrity": "sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg==", "dev": true, - "license": "MIT", + "engines": [ + "node >= 0.2.0" + ], + "license": "MIT" + }, + "node_modules/jsonrpc-lite": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/jsonrpc-lite/-/jsonrpc-lite-2.2.0.tgz", + "integrity": "sha512-/cbbSxtZWs1O7R4tWqabrCM/t3N8qKUZMAg9IUqpPvUs6UyRvm6pCNYkskyKN/XU0UgffW+NY2ZRr8t0AknX7g==", + "license": "MIT" + }, + "node_modules/JSONStream": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/JSONStream/-/JSONStream-1.3.5.tgz", + "integrity": "sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ==", + "dev": true, + "license": "(MIT OR Apache-2.0)", "dependencies": { - "has-flag": "^4.0.0" + "jsonparse": "^1.2.0", + "through": ">=2.2.7 <3" + }, + "bin": { + "JSONStream": "bin.js" }, "engines": { - "node": ">=8" + "node": "*" } }, - "node_modules/istanbul-lib-source-maps": { + "node_modules/jsontokens": { "version": "4.0.1", - "dev": true, - "license": "BSD-3-Clause", + "resolved": "https://registry.npmjs.org/jsontokens/-/jsontokens-4.0.1.tgz", + "integrity": "sha512-+MO415LEN6M+3FGsRz4wU20g7N2JA+2j9d9+pGaNJHviG4L8N0qzavGyENw6fJqsq9CcrHOIL6iWX5yeTZ86+Q==", + "license": "MIT", "dependencies": { - "debug": "^4.1.1", - "istanbul-lib-coverage": "^3.0.0", - "source-map": "^0.6.1" - }, - "engines": { - "node": ">=10" + "@noble/hashes": "^1.1.2", + "@noble/secp256k1": "^1.6.3", + "base64-js": "^1.5.1" } }, - "node_modules/istanbul-reports": { - "version": "3.1.6", - "dev": true, - "license": "BSD-3-Clause", + "node_modules/jsprim": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.2.tgz", + "integrity": "sha512-P2bSOMAc/ciLz6DzgjVlGJP9+BrJWu5UDGK70C2iweC5QBIeFf0ZXRvGjEj2uYgrY2MkAAhsSWHDWlFtEroZWw==", + "license": "MIT", "dependencies": { - "html-escaper": "^2.0.0", - "istanbul-lib-report": "^3.0.0" + "assert-plus": "1.0.0", + "extsprintf": "1.3.0", + "json-schema": "0.4.0", + "verror": "1.10.0" }, "engines": { - "node": ">=8" + "node": ">=0.6.0" } }, - "node_modules/jackspeak": { - "version": "2.3.6", + "node_modules/just-diff": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/just-diff/-/just-diff-6.0.2.tgz", + "integrity": "sha512-S59eriX5u3/QhMNq3v/gm8Kd0w8OS6Tz2FS1NG4blv+z0MuQcBRJyFWjdovM0Rad4/P4aUPFtnkNjMjyMlMSYA==", "dev": true, - "license": "BlueOak-1.0.0", - "dependencies": { - "@isaacs/cliui": "^8.0.2" - }, - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - }, - "optionalDependencies": { - "@pkgjs/parseargs": "^0.11.0" - } + "license": "MIT" }, - "node_modules/jake": { - "version": "10.9.1", + "node_modules/just-diff-apply": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/just-diff-apply/-/just-diff-apply-5.5.0.tgz", + "integrity": "sha512-OYTthRfSh55WOItVqwpefPtNt2VdKsq5AnAK6apdtR6yCH8pr0CmSr710J0Mf+WdQy7K/OzMy7K2MgAfdQURDw==", "dev": true, - "license": "Apache-2.0", + "license": "MIT" + }, + "node_modules/key-encoder": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/key-encoder/-/key-encoder-2.0.3.tgz", + "integrity": "sha512-fgBtpAGIr/Fy5/+ZLQZIPPhsZEcbSlYu/Wu96tNDFNSjSACw5lEIOFeaVdQ/iwrb8oxjlWi6wmWdH76hV6GZjg==", + "license": "MIT", "dependencies": { - "async": "^3.2.3", - "chalk": "^4.0.2", - "filelist": "^1.0.4", - "minimatch": "^3.1.2" - }, - "bin": { - "jake": "bin/cli.js" - }, - "engines": { - "node": ">=10" + "@types/elliptic": "^6.4.9", + "asn1.js": "^5.0.1", + "bn.js": "^4.11.8", + "elliptic": "^6.4.1" } }, - "node_modules/jake/node_modules/ansi-styles": { - "version": "4.3.0", - "dev": true, + "node_modules/key-encoder/node_modules/asn1.js": { + "version": "5.4.1", + "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-5.4.1.tgz", + "integrity": "sha512-+I//4cYPccV8LdmBLiX8CYvf9Sp3vQsrqu2QNXRcrbiWvcx/UdlFiqUJJzxRQxgsZmvhXhn4cSKeSmoFjVdupA==", "license": "MIT", "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "bn.js": "^4.0.0", + "inherits": "^2.0.1", + "minimalistic-assert": "^1.0.0", + "safer-buffer": "^2.1.0" } }, - "node_modules/jake/node_modules/chalk": { - "version": "4.1.2", + "node_modules/keyv": { + "version": "4.5.4", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", + "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", "dev": true, "license": "MIT", "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" + "json-buffer": "3.0.1" } }, - "node_modules/jake/node_modules/color-convert": { - "version": "2.0.1", + "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", - "dependencies": { - "color-name": "~1.1.4" - }, "engines": { - "node": ">=7.0.0" + "node": ">=0.10.0" } }, - "node_modules/jake/node_modules/color-name": { - "version": "1.1.4", + "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/kuler": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/kuler/-/kuler-2.0.0.tgz", + "integrity": "sha512-Xq9nH7KlWZmXAtodXDDRE7vs6DU1gTU8zYDHDiWLSip45Egwq3plLHzPn27NgvzL2r1LMPC1vdqh98sQxtqj4A==", "license": "MIT" }, - "node_modules/jake/node_modules/has-flag": { - "version": "4.0.0", + "node_modules/lerna": { + "version": "8.1.9", + "resolved": "https://registry.npmjs.org/lerna/-/lerna-8.1.9.tgz", + "integrity": "sha512-ZRFlRUBB2obm+GkbTR7EbgTMuAdni6iwtTQTMy7LIrQ4UInG44LyfRepljtgUxh4HA0ltzsvWfPkd5J1DKGCeQ==", "dev": true, "license": "MIT", + "dependencies": { + "@lerna/create": "8.1.9", + "@npmcli/arborist": "7.5.4", + "@npmcli/package-json": "5.2.0", + "@npmcli/run-script": "8.1.0", + "@nx/devkit": ">=17.1.2 < 21", + "@octokit/plugin-enterprise-rest": "6.0.1", + "@octokit/rest": "19.0.11", + "aproba": "2.0.0", + "byte-size": "8.1.1", + "chalk": "4.1.0", + "clone-deep": "4.0.1", + "cmd-shim": "6.0.3", + "color-support": "1.1.3", + "columnify": "1.6.0", + "console-control-strings": "^1.1.0", + "conventional-changelog-angular": "7.0.0", + "conventional-changelog-core": "5.0.1", + "conventional-recommended-bump": "7.0.1", + "cosmiconfig": "9.0.0", + "dedent": "1.5.3", + "envinfo": "7.13.0", + "execa": "5.0.0", + "fs-extra": "^11.2.0", + "get-port": "5.1.1", + "get-stream": "6.0.0", + "git-url-parse": "14.0.0", + "glob-parent": "6.0.2", + "globby": "11.1.0", + "graceful-fs": "4.2.11", + "has-unicode": "2.0.1", + "import-local": "3.1.0", + "ini": "^1.3.8", + "init-package-json": "6.0.3", + "inquirer": "^8.2.4", + "is-ci": "3.0.1", + "is-stream": "2.0.0", + "jest-diff": ">=29.4.3 < 30", + "js-yaml": "4.1.0", + "libnpmaccess": "8.0.6", + "libnpmpublish": "9.0.9", + "load-json-file": "6.2.0", + "lodash": "^4.17.21", + "make-dir": "4.0.0", + "minimatch": "3.0.5", + "multimatch": "5.0.0", + "node-fetch": "2.6.7", + "npm-package-arg": "11.0.2", + "npm-packlist": "8.0.2", + "npm-registry-fetch": "^17.1.0", + "nx": ">=17.1.2 < 21", + "p-map": "4.0.0", + "p-map-series": "2.1.0", + "p-pipe": "3.1.0", + "p-queue": "6.6.2", + "p-reduce": "2.1.0", + "p-waterfall": "2.1.1", + "pacote": "^18.0.6", + "pify": "5.0.0", + "read-cmd-shim": "4.0.0", + "resolve-from": "5.0.0", + "rimraf": "^4.4.1", + "semver": "^7.3.8", + "set-blocking": "^2.0.0", + "signal-exit": "3.0.7", + "slash": "3.0.0", + "ssri": "^10.0.6", + "string-width": "^4.2.3", + "strip-ansi": "^6.0.1", + "strong-log-transformer": "2.1.0", + "tar": "6.2.1", + "temp-dir": "1.0.0", + "typescript": ">=3 < 6", + "upath": "2.0.1", + "uuid": "^10.0.0", + "validate-npm-package-license": "3.0.4", + "validate-npm-package-name": "5.0.1", + "wide-align": "1.1.5", + "write-file-atomic": "5.0.1", + "write-pkg": "4.0.0", + "yargs": "17.7.2", + "yargs-parser": "21.1.1" + }, + "bin": { + "lerna": "dist/cli.js" + }, "engines": { - "node": ">=8" + "node": ">=18.0.0" } }, - "node_modules/jake/node_modules/supports-color": { - "version": "7.2.0", + "node_modules/lerna/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/lerna/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, "license": "MIT", "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" } }, - "node_modules/jest": { - "version": "29.6.2", + "node_modules/lerna/node_modules/chalk": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", + "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", "dev": true, "license": "MIT", "dependencies": { - "@jest/core": "^29.6.2", - "@jest/types": "^29.6.1", - "import-local": "^3.0.2", - "jest-cli": "^29.6.2" - }, - "bin": { - "jest": "bin/jest.js" + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": ">=10" }, - "peerDependencies": { - "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/lerna/node_modules/conventional-changelog-angular": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/conventional-changelog-angular/-/conventional-changelog-angular-7.0.0.tgz", + "integrity": "sha512-ROjNchA9LgfNMTTFSIWPzebCwOGFdgkEq45EnvvrmSLvCtAw0HSmrCs7/ty+wAeYUZyNay0YMUNYFTRL72PkBQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "compare-func": "^2.0.0" }, - "peerDependenciesMeta": { - "node-notifier": { - "optional": true - } + "engines": { + "node": ">=16" } }, - "node_modules/jest-changed-files": { - "version": "29.5.0", + "node_modules/lerna/node_modules/cosmiconfig": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-9.0.0.tgz", + "integrity": "sha512-itvL5h8RETACmOTFc4UfIyB2RfEHi71Ax6E/PivVxq9NseKbOWpeyHEOIbmAw1rs8Ak0VursQNww7lf7YtUwzg==", "dev": true, "license": "MIT", "dependencies": { - "execa": "^5.0.0", - "p-limit": "^3.1.0" + "env-paths": "^2.2.1", + "import-fresh": "^3.3.0", + "js-yaml": "^4.1.0", + "parse-json": "^5.2.0" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/d-fischer" + }, + "peerDependencies": { + "typescript": ">=4.9.5" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } } }, - "node_modules/jest-changed-files/node_modules/p-limit": { - "version": "3.1.0", + "node_modules/lerna/node_modules/execa": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-5.0.0.tgz", + "integrity": "sha512-ov6w/2LCiuyO4RLYGdpFGjkcs0wMTgGE8PrkTHikeUy5iJekXyPIKUjifk5CsE0pt7sMCrMZ3YNqoCj6idQOnQ==", "dev": true, "license": "MIT", "dependencies": { - "yocto-queue": "^0.1.0" + "cross-spawn": "^7.0.3", + "get-stream": "^6.0.0", + "human-signals": "^2.1.0", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^4.0.1", + "onetime": "^5.1.2", + "signal-exit": "^3.0.3", + "strip-final-newline": "^2.0.0" }, "engines": { "node": ">=10" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/sindresorhus/execa?sponsor=1" } }, - "node_modules/jest-circus": { - "version": "29.6.2", + "node_modules/lerna/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, "license": "MIT", "dependencies": { - "@jest/environment": "^29.6.2", - "@jest/expect": "^29.6.2", - "@jest/test-result": "^29.6.2", - "@jest/types": "^29.6.1", - "@types/node": "*", - "chalk": "^4.0.0", - "co": "^4.6.0", - "dedent": "^1.0.0", - "is-generator-fn": "^2.0.0", - "jest-each": "^29.6.2", - "jest-matcher-utils": "^29.6.2", - "jest-message-util": "^29.6.2", - "jest-runtime": "^29.6.2", - "jest-snapshot": "^29.6.2", - "jest-util": "^29.6.2", - "p-limit": "^3.1.0", - "pretty-format": "^29.6.2", - "pure-rand": "^6.0.0", - "slash": "^3.0.0", - "stack-utils": "^2.0.3" + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": ">=14.14" } }, - "node_modules/jest-circus/node_modules/ansi-styles": { - "version": "4.3.0", + "node_modules/lerna/node_modules/get-stream": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.0.tgz", + "integrity": "sha512-A1B3Bh1UmL0bidM/YX2NsCOTnGJePL9rO/M+Mw3m9f2gUpfokS0hi5Eah0WSUEWZdZhIZtMjkIYS7mDfOqNHbg==", "dev": true, "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" - }, "engines": { - "node": ">=8" + "node": ">=10" }, "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/jest-circus/node_modules/chalk": { - "version": "4.1.2", + "node_modules/lerna/node_modules/glob": { + "version": "9.3.5", + "resolved": "https://registry.npmjs.org/glob/-/glob-9.3.5.tgz", + "integrity": "sha512-e1LleDykUz2Iu+MTYdkSsuWX8lvAjAcs0Xef0lNIu0S2wOAzuTxCJtcd9S3cijlwYF18EsU3rzb8jPVobxDh9Q==", "dev": true, - "license": "MIT", + "license": "ISC", "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" + "fs.realpath": "^1.0.0", + "minimatch": "^8.0.2", + "minipass": "^4.2.4", + "path-scurry": "^1.6.1" }, "engines": { - "node": ">=10" + "node": ">=16 || 14 >=14.17" }, "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/jest-circus/node_modules/color-convert": { + "node_modules/lerna/node_modules/glob/node_modules/brace-expansion": { "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", "dev": true, "license": "MIT", "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" + "balanced-match": "^1.0.0" } }, - "node_modules/jest-circus/node_modules/color-name": { - "version": "1.1.4", - "dev": true, - "license": "MIT" - }, - "node_modules/jest-circus/node_modules/has-flag": { - "version": "4.0.0", + "node_modules/lerna/node_modules/glob/node_modules/minimatch": { + "version": "8.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-8.0.4.tgz", + "integrity": "sha512-W0Wvr9HyFXZRGIDgCicunpQ299OKXs9RgZfaukz4qAW/pJhcpUfupc9c+OObPOFueNy8VSrZgEmDtk6Kh4WzDA==", "dev": true, - "license": "MIT", + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, "engines": { - "node": ">=8" + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/jest-circus/node_modules/p-limit": { + "node_modules/lerna/node_modules/import-local": { "version": "3.1.0", + "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.1.0.tgz", + "integrity": "sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg==", "dev": true, "license": "MIT", "dependencies": { - "yocto-queue": "^0.1.0" + "pkg-dir": "^4.2.0", + "resolve-cwd": "^3.0.0" + }, + "bin": { + "import-local-fixture": "fixtures/cli.js" }, "engines": { - "node": ">=10" + "node": ">=8" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/jest-circus/node_modules/supports-color": { - "version": "7.2.0", + "node_modules/lerna/node_modules/is-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.0.tgz", + "integrity": "sha512-XCoy+WlUr7d1+Z8GgSuXmpuUFC9fOhRXglJMx+dwLKTkL44Cjd4W1Z5P+BQZpr+cR93aGP4S/s7Ftw6Nd/kiEw==", "dev": true, "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, "engines": { "node": ">=8" } }, - "node_modules/jest-cli": { - "version": "29.6.2", + "node_modules/lerna/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==", "dev": true, "license": "MIT", "dependencies": { - "@jest/core": "^29.6.2", - "@jest/test-result": "^29.6.2", - "@jest/types": "^29.6.1", - "chalk": "^4.0.0", - "exit": "^0.1.2", - "graceful-fs": "^4.2.9", - "import-local": "^3.0.2", - "jest-config": "^29.6.2", - "jest-util": "^29.6.2", - "jest-validate": "^29.6.2", - "prompts": "^2.0.1", - "yargs": "^17.3.1" + "argparse": "^2.0.1" }, "bin": { - "jest": "bin/jest.js" - }, - "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-cli/node_modules/ansi-styles": { - "version": "4.3.0", - "dev": true, - "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "js-yaml": "bin/js-yaml.js" } }, - "node_modules/jest-cli/node_modules/chalk": { - "version": "4.1.2", + "node_modules/lerna/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, "license": "MIT", "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" + "universalify": "^2.0.0" }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" + "optionalDependencies": { + "graceful-fs": "^4.1.6" } }, - "node_modules/jest-cli/node_modules/color-convert": { - "version": "2.0.1", + "node_modules/lerna/node_modules/minimatch": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.5.tgz", + "integrity": "sha512-tUpxzX0VAzJHjLu0xUfFv1gwVp9ba3IOuRAVH2EGuRW8a5emA2FlACLqiT/lDVtS1W+TGNwqz3sWaNyLgDJWuw==", "dev": true, - "license": "MIT", + "license": "ISC", "dependencies": { - "color-name": "~1.1.4" + "brace-expansion": "^1.1.7" }, "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/jest-cli/node_modules/color-name": { - "version": "1.1.4", - "dev": true, - "license": "MIT" - }, - "node_modules/jest-cli/node_modules/has-flag": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" + "node": "*" } }, - "node_modules/jest-cli/node_modules/supports-color": { - "version": "7.2.0", + "node_modules/lerna/node_modules/minipass": { + "version": "4.2.8", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-4.2.8.tgz", + "integrity": "sha512-fNzuVyifolSLFL4NzpF+wEF4qrgqaaKX0haXPQEdQ7NKAN+WecoKMHV09YcuL/DHxrUsYQOK3MiuDf7Ip2OXfQ==", "dev": true, - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, + "license": "ISC", "engines": { "node": ">=8" } }, - "node_modules/jest-config": { - "version": "29.6.2", + "node_modules/lerna/node_modules/node-fetch": { + "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": { - "@babel/core": "^7.11.6", - "@jest/test-sequencer": "^29.6.2", - "@jest/types": "^29.6.1", - "babel-jest": "^29.6.2", - "chalk": "^4.0.0", - "ci-info": "^3.2.0", - "deepmerge": "^4.2.2", - "glob": "^7.1.3", - "graceful-fs": "^4.2.9", - "jest-circus": "^29.6.2", - "jest-environment-node": "^29.6.2", - "jest-get-type": "^29.4.3", - "jest-regex-util": "^29.4.3", - "jest-resolve": "^29.6.2", - "jest-runner": "^29.6.2", - "jest-util": "^29.6.2", - "jest-validate": "^29.6.2", - "micromatch": "^4.0.4", - "parse-json": "^5.2.0", - "pretty-format": "^29.6.2", - "slash": "^3.0.0", - "strip-json-comments": "^3.1.1" + "whatwg-url": "^5.0.0" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": "4.x || >=6.0.0" }, "peerDependencies": { - "@types/node": "*", - "ts-node": ">=9.0.0" + "encoding": "^0.1.0" }, "peerDependenciesMeta": { - "@types/node": { - "optional": true - }, - "ts-node": { + "encoding": { "optional": true } } }, - "node_modules/jest-config/node_modules/ansi-styles": { - "version": "4.3.0", + "node_modules/lerna/node_modules/rimraf": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-4.4.1.tgz", + "integrity": "sha512-Gk8NlF062+T9CqNGn6h4tls3k6T1+/nXdOcSZVikNVtlRdYpA7wRJJMoXmuvOnLW844rPjdQ7JgXCYM6PPC/og==", "dev": true, - "license": "MIT", + "license": "ISC", "dependencies": { - "color-convert": "^2.0.1" + "glob": "^9.2.0" + }, + "bin": { + "rimraf": "dist/cjs/src/bin.js" }, "engines": { - "node": ">=8" + "node": ">=14" }, "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/jest-config/node_modules/chalk": { - "version": "4.1.2", + "node_modules/lerna/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, "license": "MIT", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" + "node": ">= 10.0.0" } }, - "node_modules/jest-config/node_modules/color-convert": { - "version": "2.0.1", + "node_modules/lerna/node_modules/write-file-atomic": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-5.0.1.tgz", + "integrity": "sha512-+QU2zd6OTD8XWIJCbffaiQeH9U73qIqafo1x6V1snCWYGJf6cVE0cDR4D8xRzcEnfI21IFrUPzPGtcPf8AC+Rw==", "dev": true, - "license": "MIT", + "license": "ISC", "dependencies": { - "color-name": "~1.1.4" + "imurmurhash": "^0.1.4", + "signal-exit": "^4.0.1" }, "engines": { - "node": ">=7.0.0" + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, - "node_modules/jest-config/node_modules/color-name": { - "version": "1.1.4", + "node_modules/lerna/node_modules/write-file-atomic/node_modules/signal-exit": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", "dev": true, - "license": "MIT" + "license": "ISC", + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } }, - "node_modules/jest-config/node_modules/has-flag": { - "version": "4.0.0", + "node_modules/leven": { + "version": "3.1.0", + "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": ">=8" + "node": ">=6" } }, - "node_modules/jest-config/node_modules/supports-color": { - "version": "7.2.0", + "node_modules/levn": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", + "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", "dev": true, "license": "MIT", "dependencies": { - "has-flag": "^4.0.0" + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" }, "engines": { - "node": ">=8" + "node": ">= 0.8.0" } }, - "node_modules/jest-diff": { - "version": "29.6.2", + "node_modules/libnpmaccess": { + "version": "8.0.6", + "resolved": "https://registry.npmjs.org/libnpmaccess/-/libnpmaccess-8.0.6.tgz", + "integrity": "sha512-uM8DHDEfYG6G5gVivVl+yQd4pH3uRclHC59lzIbSvy7b5FEwR+mU49Zq1jEyRtRFv7+M99mUW9S0wL/4laT4lw==", "dev": true, - "license": "MIT", + "license": "ISC", "dependencies": { - "chalk": "^4.0.0", - "diff-sequences": "^29.4.3", - "jest-get-type": "^29.4.3", - "pretty-format": "^29.6.2" + "npm-package-arg": "^11.0.2", + "npm-registry-fetch": "^17.0.1" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": "^16.14.0 || >=18.0.0" } }, - "node_modules/jest-diff/node_modules/ansi-styles": { - "version": "4.3.0", + "node_modules/libnpmpublish": { + "version": "9.0.9", + "resolved": "https://registry.npmjs.org/libnpmpublish/-/libnpmpublish-9.0.9.tgz", + "integrity": "sha512-26zzwoBNAvX9AWOPiqqF6FG4HrSCPsHFkQm7nT+xU1ggAujL/eae81RnCv4CJ2In9q9fh10B88sYSzKCUh/Ghg==", "dev": true, - "license": "MIT", + "license": "ISC", "dependencies": { - "color-convert": "^2.0.1" + "ci-info": "^4.0.0", + "normalize-package-data": "^6.0.1", + "npm-package-arg": "^11.0.2", + "npm-registry-fetch": "^17.0.1", + "proc-log": "^4.2.0", + "semver": "^7.3.7", + "sigstore": "^2.2.0", + "ssri": "^10.0.6" }, "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "node": "^16.14.0 || >=18.0.0" } }, - "node_modules/jest-diff/node_modules/chalk": { - "version": "4.1.2", + "node_modules/libnpmpublish/node_modules/ci-info": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-4.1.0.tgz", + "integrity": "sha512-HutrvTNsF48wnxkzERIXOe5/mlcfFcbfCmwcg6CJnizbSue78AbDt+1cgl26zwn61WFxhcPykPfZrbqjGmBb4A==", "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/sibiraj-s" + } + ], "license": "MIT", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" + "node": ">=8" } }, - "node_modules/jest-diff/node_modules/color-convert": { - "version": "2.0.1", + "node_modules/lines-and-columns": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-2.0.3.tgz", + "integrity": "sha512-cNOjgCnLB+FnvWWtyRTzmB3POJ+cXxTA81LoW7u8JdmhfXzriropYwpjShnz1QLLWsQwY7nIxoDmcPTwphDK9w==", "dev": true, "license": "MIT", - "dependencies": { - "color-name": "~1.1.4" - }, "engines": { - "node": ">=7.0.0" + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" } }, - "node_modules/jest-diff/node_modules/color-name": { - "version": "1.1.4", - "dev": true, - "license": "MIT" - }, - "node_modules/jest-diff/node_modules/has-flag": { - "version": "4.0.0", + "node_modules/load-json-file": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-6.2.0.tgz", + "integrity": "sha512-gUD/epcRms75Cw8RT1pUdHugZYM5ce64ucs2GEISABwkRsOQr0q2wm/MV2TKThycIe5e0ytRweW2RZxclogCdQ==", "dev": true, "license": "MIT", + "dependencies": { + "graceful-fs": "^4.1.15", + "parse-json": "^5.0.0", + "strip-bom": "^4.0.0", + "type-fest": "^0.6.0" + }, "engines": { "node": ">=8" } }, - "node_modules/jest-diff/node_modules/supports-color": { - "version": "7.2.0", + "node_modules/load-json-file/node_modules/type-fest": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz", + "integrity": "sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==", "dev": true, - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, + "license": "(MIT OR CC0-1.0)", "engines": { "node": ">=8" } }, - "node_modules/jest-docblock": { - "version": "29.4.3", + "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==", "dev": true, "license": "MIT", - "dependencies": { - "detect-newline": "^3.0.0" - }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": ">=6.11.5" } }, - "node_modules/jest-each": { - "version": "29.6.2", + "node_modules/loader-utils": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.4.tgz", + "integrity": "sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw==", "dev": true, "license": "MIT", "dependencies": { - "@jest/types": "^29.6.1", - "chalk": "^4.0.0", - "jest-get-type": "^29.4.3", - "jest-util": "^29.6.2", - "pretty-format": "^29.6.2" + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^2.1.2" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": ">=8.9.0" } }, - "node_modules/jest-each/node_modules/ansi-styles": { - "version": "4.3.0", + "node_modules/locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", "dev": true, "license": "MIT", "dependencies": { - "color-convert": "^2.0.1" + "p-locate": "^5.0.0" }, "engines": { - "node": ">=8" + "node": ">=10" }, "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/jest-each/node_modules/chalk": { - "version": "4.1.2", + "node_modules/lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", + "license": "MIT" + }, + "node_modules/lodash.assignin": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/lodash.assignin/-/lodash.assignin-4.2.0.tgz", + "integrity": "sha512-yX/rx6d/UTVh7sSVWVSIMjfnz95evAgDFdb1ZozC35I9mSFCkmzptOzevxjgbQUsc78NR44LVHWjsoMQXy9FDg==", + "license": "MIT" + }, + "node_modules/lodash.bind": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/lodash.bind/-/lodash.bind-4.2.1.tgz", + "integrity": "sha512-lxdsn7xxlCymgLYo1gGvVrfHmkjDiyqVv62FAeF2i5ta72BipE1SLxw8hPEPLhD4/247Ijw07UQH7Hq/chT5LA==", + "license": "MIT" + }, + "node_modules/lodash.camelcase": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz", + "integrity": "sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==", "dev": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } + "license": "MIT" }, - "node_modules/jest-each/node_modules/color-convert": { - "version": "2.0.1", + "node_modules/lodash.clonedeep": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz", + "integrity": "sha512-H5ZhCF25riFd9uB5UCkVKo61m3S/xZk1x4wA6yp/L3RFP6Z/eHH1ymQcGLo7J3GMPfm0V/7m1tryHuGVxpqEBQ==", + "license": "MIT" + }, + "node_modules/lodash.defaults": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/lodash.defaults/-/lodash.defaults-4.2.0.tgz", + "integrity": "sha512-qjxPLHd3r5DnsdGacqOMU6pb/avJzdh9tFX2ymgoZE27BmjXrNy/y4LoaiTeAb+O3gL8AfpJGtqfX/ae2leYYQ==", + "license": "MIT" + }, + "node_modules/lodash.filter": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/lodash.filter/-/lodash.filter-4.6.0.tgz", + "integrity": "sha512-pXYUy7PR8BCLwX5mgJ/aNtyOvuJTdZAo9EQFUvMIYugqmJxnrYaANvTbgndOzHSCSR0wnlBBfRXJL5SbWxo3FQ==", + "license": "MIT" + }, + "node_modules/lodash.flatten": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/lodash.flatten/-/lodash.flatten-4.4.0.tgz", + "integrity": "sha512-C5N2Z3DgnnKr0LOpv/hKCgKdb7ZZwafIrsesve6lmzvZIRZRGaZ/l6Q8+2W7NaT+ZwO3fFlSCzCzrDCFdJfZ4g==", + "license": "MIT" + }, + "node_modules/lodash.foreach": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.foreach/-/lodash.foreach-4.5.0.tgz", + "integrity": "sha512-aEXTF4d+m05rVOAUG3z4vZZ4xVexLKZGF0lIxuHZ1Hplpk/3B6Z1+/ICICYRLm7c41Z2xiejbkCkJoTlypoXhQ==", + "license": "MIT" + }, + "node_modules/lodash.isfunction": { + "version": "3.0.9", + "resolved": "https://registry.npmjs.org/lodash.isfunction/-/lodash.isfunction-3.0.9.tgz", + "integrity": "sha512-AirXNj15uRIMMPihnkInB4i3NHeb4iBtNg9WRWuK2o31S+ePwwNmDPaTL3o7dTJ+VXNZim7rFs4rxN4YU1oUJw==", "dev": true, - "license": "MIT", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } + "license": "MIT" }, - "node_modules/jest-each/node_modules/color-name": { - "version": "1.1.4", + "node_modules/lodash.ismatch": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/lodash.ismatch/-/lodash.ismatch-4.4.0.tgz", + "integrity": "sha512-fPMfXjGQEV9Xsq/8MTSgUf255gawYRbjwMyDbcvDhXgV7enSZA0hynz6vMPnpAb5iONEzBHBPsT+0zes5Z301g==", "dev": true, "license": "MIT" }, - "node_modules/jest-each/node_modules/has-flag": { - "version": "4.0.0", + "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==", "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } + "license": "MIT" }, - "node_modules/jest-each/node_modules/supports-color": { - "version": "7.2.0", + "node_modules/lodash.kebabcase": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/lodash.kebabcase/-/lodash.kebabcase-4.1.1.tgz", + "integrity": "sha512-N8XRTIMMqqDgSy4VLKPnJ/+hpGZN+PHQiJnSenYqPaVV/NCqEogTnAdZLQiGKhxX+JCs8waWq2t1XHWKOmlY8g==", "dev": true, - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } + "license": "MIT" }, - "node_modules/jest-environment-node": { - "version": "29.6.2", + "node_modules/lodash.map": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/lodash.map/-/lodash.map-4.6.0.tgz", + "integrity": "sha512-worNHGKLDetmcEYDvh2stPCrrQRkP20E4l0iIS7F8EvzMqBBi7ltvFN5m1HvTf1P7Jk1txKhvFcmYsCr8O2F1Q==", + "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, - "license": "MIT", - "dependencies": { - "@jest/environment": "^29.6.2", - "@jest/fake-timers": "^29.6.2", - "@jest/types": "^29.6.1", - "@types/node": "*", - "jest-mock": "^29.6.2", - "jest-util": "^29.6.2" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } + "license": "MIT" }, - "node_modules/jest-fetch-mock": { - "version": "3.0.3", + "node_modules/lodash.merge": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", + "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", + "license": "MIT" + }, + "node_modules/lodash.mergewith": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/lodash.mergewith/-/lodash.mergewith-4.6.2.tgz", + "integrity": "sha512-GK3g5RPZWTRSeLSpgP8Xhra+pnjBC56q9FZYe1d5RN3TJ35dbkGy3YqBSMbyCrlbi+CM9Z3Jk5yTL7RCsqboyQ==", "dev": true, - "license": "MIT", - "dependencies": { - "cross-fetch": "^3.0.4", - "promise-polyfill": "^8.1.3" - } + "license": "MIT" }, - "node_modules/jest-get-type": { - "version": "29.4.3", + "node_modules/lodash.pick": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/lodash.pick/-/lodash.pick-4.4.0.tgz", + "integrity": "sha512-hXt6Ul/5yWjfklSGvLQl8vM//l3FtyHZeuelpzK6mm99pNvN9yTDruNZPEJZD1oWrqo+izBmB7oUfWgcCX7s4Q==", + "license": "MIT" + }, + "node_modules/lodash.reduce": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/lodash.reduce/-/lodash.reduce-4.6.0.tgz", + "integrity": "sha512-6raRe2vxCYBhpBu+B+TtNGUzah+hQjVdu3E17wfusjyrXBka2nBS8OH/gjVZ5PvHOhWmIZTYri09Z6n/QfnNMw==", + "license": "MIT" + }, + "node_modules/lodash.reject": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/lodash.reject/-/lodash.reject-4.6.0.tgz", + "integrity": "sha512-qkTuvgEzYdyhiJBx42YPzPo71R1aEr0z79kAv7Ixg8wPFEjgRgJdUsGMG3Hf3OYSF/kHI79XhNlt+5Ar6OzwxQ==", + "license": "MIT" + }, + "node_modules/lodash.snakecase": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/lodash.snakecase/-/lodash.snakecase-4.1.1.tgz", + "integrity": "sha512-QZ1d4xoBHYUeuouhEq3lk3Uq7ldgyFXGBhg04+oRLnIz8o9T65Eh+8YdroUwn846zchkA9yDsDl5CVVaV2nqYw==", "dev": true, - "license": "MIT", - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } + "license": "MIT" }, - "node_modules/jest-haste-map": { - "version": "29.6.2", + "node_modules/lodash.some": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/lodash.some/-/lodash.some-4.6.0.tgz", + "integrity": "sha512-j7MJE+TuT51q9ggt4fSgVqro163BEFjAt3u97IqU+JA2DkWl80nFTrowzLpZ/BnpN7rrl0JA/593NAdd8p/scQ==", + "license": "MIT" + }, + "node_modules/lodash.startcase": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/lodash.startcase/-/lodash.startcase-4.4.0.tgz", + "integrity": "sha512-+WKqsK294HMSc2jEbNgpHpd0JfIBhp7rEV4aqXWqFr6AlXov+SlcgB1Fv01y2kGe3Gc8nMW7VA0SrGuSkRfIEg==", + "dev": true, + "license": "MIT" + }, + "node_modules/lodash.uniq": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz", + "integrity": "sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/lodash.upperfirst": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/lodash.upperfirst/-/lodash.upperfirst-4.3.1.tgz", + "integrity": "sha512-sReKOYJIJf74dhJONhU4e0/shzi1trVbSWDOhKYE5XV2O+H7Sb2Dihwuc7xWxVl+DgFPyTqIN3zMfT9cq5iWDg==", + "dev": true, + "license": "MIT" + }, + "node_modules/log-symbols": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", + "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", "dev": true, "license": "MIT", "dependencies": { - "@jest/types": "^29.6.1", - "@types/graceful-fs": "^4.1.3", - "@types/node": "*", - "anymatch": "^3.0.3", - "fb-watchman": "^2.0.0", - "graceful-fs": "^4.2.9", - "jest-regex-util": "^29.4.3", - "jest-util": "^29.6.2", - "jest-worker": "^29.6.2", - "micromatch": "^4.0.4", - "walker": "^1.0.8" + "chalk": "^4.1.0", + "is-unicode-supported": "^0.1.0" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": ">=10" }, - "optionalDependencies": { - "fsevents": "^2.3.2" + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/jest-leak-detector": { - "version": "29.6.2", - "dev": true, + "node_modules/logform": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/logform/-/logform-2.7.0.tgz", + "integrity": "sha512-TFYA4jnP7PVbmlBIfhlSe+WKxs9dklXMTEGcBCIvLhE/Tn3H6Gk1norupVW7m5Cnd4bLcr08AytbyV/xj7f/kQ==", "license": "MIT", "dependencies": { - "jest-get-type": "^29.4.3", - "pretty-format": "^29.6.2" + "@colors/colors": "1.6.0", + "@types/triple-beam": "^1.3.2", + "fecha": "^4.2.0", + "ms": "^2.1.1", + "safe-stable-stringify": "^2.3.1", + "triple-beam": "^1.3.0" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": ">= 12.0.0" } }, - "node_modules/jest-matcher-utils": { - "version": "29.6.2", + "node_modules/loupe": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/loupe/-/loupe-3.1.2.tgz", + "integrity": "sha512-23I4pFZHmAemUnz8WZXbYRSKYj801VDaNv9ETuMh7IrMc7VuVVSo+Z9iLE3ni30+U48iDWfi30d3twAXBYmnCg==", "dev": true, - "license": "MIT", + "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": { - "chalk": "^4.0.0", - "jest-diff": "^29.6.2", - "jest-get-type": "^29.4.3", - "pretty-format": "^29.6.2" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "yallist": "^3.0.2" } }, - "node_modules/jest-matcher-utils/node_modules/ansi-styles": { - "version": "4.3.0", + "node_modules/lunr": { + "version": "2.3.9", + "resolved": "https://registry.npmjs.org/lunr/-/lunr-2.3.9.tgz", + "integrity": "sha512-zTU3DaZaF3Rt9rhN3uBMGQD3dD2/vFQqnvZCDv4dl5iOzq2IZQqTxu90r4E5J+nP70J3ilqVCrbho2eWaeW8Ow==", + "dev": true, + "license": "MIT" + }, + "node_modules/madge": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/madge/-/madge-6.1.0.tgz", + "integrity": "sha512-irWhT5RpFOc6lkzGHKLihonCVgM0YtfNUh4IrFeW3EqHpnt/JHUG3z26j8PeJEktCGB4tmGOOOJi1Rl/ACWucQ==", "dev": true, "license": "MIT", "dependencies": { - "color-convert": "^2.0.1" + "chalk": "^4.1.1", + "commander": "^7.2.0", + "commondir": "^1.0.1", + "debug": "^4.3.1", + "dependency-tree": "^9.0.0", + "detective-amd": "^4.0.1", + "detective-cjs": "^4.0.0", + "detective-es6": "^3.0.0", + "detective-less": "^1.0.2", + "detective-postcss": "^6.1.0", + "detective-sass": "^4.0.1", + "detective-scss": "^3.0.0", + "detective-stylus": "^2.0.1", + "detective-typescript": "^9.0.0", + "ora": "^5.4.1", + "pluralize": "^8.0.0", + "precinct": "^8.1.0", + "pretty-ms": "^7.0.1", + "rc": "^1.2.7", + "stream-to-array": "^2.3.0", + "ts-graphviz": "^1.5.0", + "walkdir": "^0.4.1" + }, + "bin": { + "madge": "bin/cli.js" }, "engines": { - "node": ">=8" + "node": ">=14" }, "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "type": "individual", + "url": "https://www.paypal.me/pahen" + }, + "peerDependencies": { + "typescript": "^3.9.5 || ^4.9.5 || ^5" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } } }, - "node_modules/jest-matcher-utils/node_modules/chalk": { - "version": "4.1.2", + "node_modules/magic-string": { + "version": "0.30.13", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.13.tgz", + "integrity": "sha512-8rYBO+MsWkgjDSOvLomYnzhdwEG51olQ4zL5KXnNJWV5MNmrb4rTZdrtkhxjnD/QyZUqR/Z/XDsUs/4ej2nx0g==", "dev": true, "license": "MIT", "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" + "@jridgewell/sourcemap-codec": "^1.5.0" + } + }, + "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" }, "engines": { "node": ">=10" }, "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/jest-matcher-utils/node_modules/color-convert": { - "version": "2.0.1", + "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, - "license": "MIT", + "license": "ISC" + }, + "node_modules/make-fetch-happen": { + "version": "13.0.1", + "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-13.0.1.tgz", + "integrity": "sha512-cKTUFc/rbKUd/9meOvgrpJ2WrNzymt6jfRDdwg5UCnVzv9dTpEj9JS5m3wtziXVCjluIXyL8pcaukYqezIzZQA==", + "dev": true, + "license": "ISC", "dependencies": { - "color-name": "~1.1.4" + "@npmcli/agent": "^2.0.0", + "cacache": "^18.0.0", + "http-cache-semantics": "^4.1.1", + "is-lambda": "^1.0.1", + "minipass": "^7.0.2", + "minipass-fetch": "^3.0.0", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.4", + "negotiator": "^0.6.3", + "proc-log": "^4.2.0", + "promise-retry": "^2.0.1", + "ssri": "^10.0.0" }, "engines": { - "node": ">=7.0.0" + "node": "^16.14.0 || >=18.0.0" } }, - "node_modules/jest-matcher-utils/node_modules/color-name": { - "version": "1.1.4", + "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": "MIT" + "license": "BSD-3-Clause", + "dependencies": { + "tmpl": "1.0.5" + } }, - "node_modules/jest-matcher-utils/node_modules/has-flag": { - "version": "4.0.0", + "node_modules/map-obj": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-4.3.0.tgz", + "integrity": "sha512-hdN1wVrZbb29eBGiGjJbeP8JbKjq1urkHJ/LIP/NY48MZ1QVXUsQBV1G1zvYFHn1XE06cwjBsOI2K3Ulnj1YXQ==", "dev": true, "license": "MIT", "engines": { "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/jest-matcher-utils/node_modules/supports-color": { - "version": "7.2.0", + "node_modules/marked": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/marked/-/marked-4.3.0.tgz", + "integrity": "sha512-PRsaiG84bK+AMvxziE/lCFss8juXjNaWzVbN5tXAm4XjeaS9NAHhop+PjQxz2A9h8Q4M/xGmzP8vqNwy6JeK0A==", "dev": true, "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" + "bin": { + "marked": "bin/marked.js" }, "engines": { - "node": ">=8" + "node": ">= 12" } }, - "node_modules/jest-message-util": { - "version": "29.6.2", - "dev": true, + "node_modules/md5.js": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz", + "integrity": "sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==", "license": "MIT", "dependencies": { - "@babel/code-frame": "^7.12.13", - "@jest/types": "^29.6.1", - "@types/stack-utils": "^2.0.0", - "chalk": "^4.0.0", - "graceful-fs": "^4.2.9", - "micromatch": "^4.0.4", - "pretty-format": "^29.6.2", - "slash": "^3.0.0", - "stack-utils": "^2.0.3" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "hash-base": "^3.0.0", + "inherits": "^2.0.1", + "safe-buffer": "^5.1.2" } }, - "node_modules/jest-message-util/node_modules/ansi-styles": { - "version": "4.3.0", - "dev": true, + "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", - "dependencies": { - "color-convert": "^2.0.1" - }, "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "node": ">= 0.6" } }, - "node_modules/jest-message-util/node_modules/chalk": { - "version": "4.1.2", + "node_modules/meow": { + "version": "8.1.2", + "resolved": "https://registry.npmjs.org/meow/-/meow-8.1.2.tgz", + "integrity": "sha512-r85E3NdZ+mpYk1C6RjPFEMSE+s1iZMuHtsHAqY0DT3jZczl0diWUZ8g6oU7h0M9cD2EL+PzaYghhCLzR0ZNn5Q==", "dev": true, "license": "MIT", "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" + "@types/minimist": "^1.2.0", + "camelcase-keys": "^6.2.2", + "decamelize-keys": "^1.1.0", + "hard-rejection": "^2.1.0", + "minimist-options": "4.1.0", + "normalize-package-data": "^3.0.0", + "read-pkg-up": "^7.0.1", + "redent": "^3.0.0", + "trim-newlines": "^3.0.0", + "type-fest": "^0.18.0", + "yargs-parser": "^20.2.3" }, "engines": { "node": ">=10" }, "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/jest-message-util/node_modules/color-convert": { - "version": "2.0.1", + "node_modules/meow/node_modules/find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", "dev": true, "license": "MIT", "dependencies": { - "color-name": "~1.1.4" + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/jest-message-util/node_modules/color-name": { - "version": "1.1.4", - "dev": true, - "license": "MIT" - }, - "node_modules/jest-message-util/node_modules/has-flag": { - "version": "4.0.0", - "dev": true, - "license": "MIT", "engines": { "node": ">=8" } }, - "node_modules/jest-message-util/node_modules/supports-color": { - "version": "7.2.0", + "node_modules/meow/node_modules/hosted-git-info": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.1.0.tgz", + "integrity": "sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==", "dev": true, - "license": "MIT", + "license": "ISC", "dependencies": { - "has-flag": "^4.0.0" + "lru-cache": "^6.0.0" }, "engines": { - "node": ">=8" + "node": ">=10" } }, - "node_modules/jest-mock": { - "version": "29.6.2", + "node_modules/meow/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": { - "@jest/types": "^29.6.1", - "@types/node": "*", - "jest-util": "^29.6.2" + "p-locate": "^4.1.0" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": ">=8" } }, - "node_modules/jest-module-name-mapper": { - "version": "0.1.5", + "node_modules/meow/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": "MIT", + "license": "ISC", "dependencies": { - "chalk": "^2.4.2", - "tsconfig-paths": "^3.9.0" + "yallist": "^4.0.0" }, "engines": { - "npm": ">= 5.0.0", - "yarn": ">= 1.7.0" + "node": ">=10" } }, - "node_modules/jest-pnp-resolver": { - "version": "1.2.3", + "node_modules/meow/node_modules/normalize-package-data": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-3.0.3.tgz", + "integrity": "sha512-p2W1sgqij3zMMyRC067Dg16bfzVH+w7hyegmpIvZ4JNjqtGOVAIvLmjBx3yP7YTe9vKJgkoNOPjwQGogDoMXFA==", "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - }, - "peerDependencies": { - "jest-resolve": "*" + "license": "BSD-2-Clause", + "dependencies": { + "hosted-git-info": "^4.0.1", + "is-core-module": "^2.5.0", + "semver": "^7.3.4", + "validate-npm-package-license": "^3.0.1" }, - "peerDependenciesMeta": { - "jest-resolve": { - "optional": true - } - } - }, - "node_modules/jest-regex-util": { - "version": "29.4.3", - "dev": true, - "license": "MIT", "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": ">=10" } }, - "node_modules/jest-resolve": { - "version": "29.6.2", + "node_modules/meow/node_modules/p-locate": { + "version": "4.1.0", + "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": { - "chalk": "^4.0.0", - "graceful-fs": "^4.2.9", - "jest-haste-map": "^29.6.2", - "jest-pnp-resolver": "^1.2.2", - "jest-util": "^29.6.2", - "jest-validate": "^29.6.2", - "resolve": "^1.20.0", - "resolve.exports": "^2.0.0", - "slash": "^3.0.0" + "p-limit": "^2.2.0" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": ">=8" } }, - "node_modules/jest-resolve-dependencies": { - "version": "29.6.2", + "node_modules/meow/node_modules/read-pkg": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz", + "integrity": "sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==", "dev": true, "license": "MIT", "dependencies": { - "jest-regex-util": "^29.4.3", - "jest-snapshot": "^29.6.2" + "@types/normalize-package-data": "^2.4.0", + "normalize-package-data": "^2.5.0", + "parse-json": "^5.0.0", + "type-fest": "^0.6.0" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": ">=8" } }, - "node_modules/jest-resolve/node_modules/ansi-styles": { - "version": "4.3.0", + "node_modules/meow/node_modules/read-pkg-up": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-7.0.1.tgz", + "integrity": "sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==", "dev": true, "license": "MIT", "dependencies": { - "color-convert": "^2.0.1" + "find-up": "^4.1.0", + "read-pkg": "^5.2.0", + "type-fest": "^0.8.1" }, "engines": { "node": ">=8" }, "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/jest-resolve/node_modules/chalk": { - "version": "4.1.2", + "node_modules/meow/node_modules/read-pkg-up/node_modules/type-fest": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", + "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", "dev": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, + "license": "(MIT OR CC0-1.0)", "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" + "node": ">=8" } }, - "node_modules/jest-resolve/node_modules/color-convert": { - "version": "2.0.1", + "node_modules/meow/node_modules/read-pkg/node_modules/hosted-git-info": { + "version": "2.8.9", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", + "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", "dev": true, - "license": "MIT", + "license": "ISC" + }, + "node_modules/meow/node_modules/read-pkg/node_modules/normalize-package-data": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", + "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", + "dev": true, + "license": "BSD-2-Clause", "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" + "hosted-git-info": "^2.1.4", + "resolve": "^1.10.0", + "semver": "2 || 3 || 4 || 5", + "validate-npm-package-license": "^3.0.1" } }, - "node_modules/jest-resolve/node_modules/color-name": { - "version": "1.1.4", + "node_modules/meow/node_modules/read-pkg/node_modules/semver": { + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", + "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", "dev": true, - "license": "MIT" + "license": "ISC", + "bin": { + "semver": "bin/semver" + } }, - "node_modules/jest-resolve/node_modules/has-flag": { - "version": "4.0.0", + "node_modules/meow/node_modules/read-pkg/node_modules/type-fest": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz", + "integrity": "sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==", "dev": true, - "license": "MIT", + "license": "(MIT OR CC0-1.0)", "engines": { "node": ">=8" } }, - "node_modules/jest-resolve/node_modules/supports-color": { - "version": "7.2.0", + "node_modules/meow/node_modules/type-fest": { + "version": "0.18.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.18.1.tgz", + "integrity": "sha512-OIAYXk8+ISY+qTOwkHtKqzAuxchoMiD9Udx+FSGQDuiRR+PJKJHc2NJAXlbhkGwTt/4/nKZxELY1w3ReWOL8mw==", "dev": true, - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, + "license": "(MIT OR CC0-1.0)", "engines": { - "node": ">=8" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/jest-runner": { - "version": "29.6.2", + "node_modules/meow/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": "MIT", - "dependencies": { - "@jest/console": "^29.6.2", - "@jest/environment": "^29.6.2", - "@jest/test-result": "^29.6.2", - "@jest/transform": "^29.6.2", - "@jest/types": "^29.6.1", - "@types/node": "*", - "chalk": "^4.0.0", - "emittery": "^0.13.1", - "graceful-fs": "^4.2.9", - "jest-docblock": "^29.4.3", - "jest-environment-node": "^29.6.2", - "jest-haste-map": "^29.6.2", - "jest-leak-detector": "^29.6.2", - "jest-message-util": "^29.6.2", - "jest-resolve": "^29.6.2", - "jest-runtime": "^29.6.2", - "jest-util": "^29.6.2", - "jest-watcher": "^29.6.2", - "jest-worker": "^29.6.2", - "p-limit": "^3.1.0", - "source-map-support": "0.5.13" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } + "license": "ISC" }, - "node_modules/jest-runner/node_modules/ansi-styles": { - "version": "4.3.0", + "node_modules/meow/node_modules/yargs-parser": { + "version": "20.2.9", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", + "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", "dev": true, - "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" - }, + "license": "ISC", "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "node": ">=10" } }, - "node_modules/jest-runner/node_modules/chalk": { - "version": "4.1.2", - "dev": true, + "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", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/jest-runner/node_modules/color-convert": { - "version": "2.0.1", + "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, + "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", - "dependencies": { - "color-name": "~1.1.4" - }, "engines": { - "node": ">=7.0.0" + "node": ">= 8" } }, - "node_modules/jest-runner/node_modules/color-name": { - "version": "1.1.4", - "dev": true, + "node_modules/merkle-lib": { + "version": "2.0.10", + "resolved": "https://registry.npmjs.org/merkle-lib/-/merkle-lib-2.0.10.tgz", + "integrity": "sha512-XrNQvUbn1DL5hKNe46Ccs+Tu3/PYOlrcZILuGUhb95oKBPjc/nmIC8D462PQkipVDGKRvwhn+QFg2cCdIvmDJA==", "license": "MIT" }, - "node_modules/jest-runner/node_modules/has-flag": { - "version": "4.0.0", - "dev": true, + "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": ">=8" + "node": ">= 0.6" } }, - "node_modules/jest-runner/node_modules/p-limit": { - "version": "3.1.0", - "dev": true, + "node_modules/micro-packed": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/micro-packed/-/micro-packed-0.6.3.tgz", + "integrity": "sha512-VmVkyc7lIzAq/XCPFuLc/CwQ7Ehs5XDK3IwqsZHiBIDttAI9Gs7go6Lv4lNRuAIKrGKcRTtthFKUNyHS0S4wJQ==", "license": "MIT", "dependencies": { - "yocto-queue": "^0.1.0" - }, - "engines": { - "node": ">=10" + "@scure/base": "~1.1.5" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://paulmillr.com/funding/" } }, - "node_modules/jest-runner/node_modules/supports-color": { - "version": "7.2.0", + "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": { - "has-flag": "^4.0.0" + "braces": "^3.0.3", + "picomatch": "^2.3.1" }, "engines": { - "node": ">=8" + "node": ">=8.6" } }, - "node_modules/jest-runtime": { - "version": "29.6.2", + "node_modules/miller-rabin": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/miller-rabin/-/miller-rabin-4.0.1.tgz", + "integrity": "sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==", "dev": true, "license": "MIT", "dependencies": { - "@jest/environment": "^29.6.2", - "@jest/fake-timers": "^29.6.2", - "@jest/globals": "^29.6.2", - "@jest/source-map": "^29.6.0", - "@jest/test-result": "^29.6.2", - "@jest/transform": "^29.6.2", - "@jest/types": "^29.6.1", - "@types/node": "*", - "chalk": "^4.0.0", - "cjs-module-lexer": "^1.0.0", - "collect-v8-coverage": "^1.0.0", - "glob": "^7.1.3", - "graceful-fs": "^4.2.9", - "jest-haste-map": "^29.6.2", - "jest-message-util": "^29.6.2", - "jest-mock": "^29.6.2", - "jest-regex-util": "^29.4.3", - "jest-resolve": "^29.6.2", - "jest-snapshot": "^29.6.2", - "jest-util": "^29.6.2", - "slash": "^3.0.0", - "strip-bom": "^4.0.0" + "bn.js": "^4.0.0", + "brorand": "^1.0.1" }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "bin": { + "miller-rabin": "bin/miller-rabin" } }, - "node_modules/jest-runtime/node_modules/ansi-styles": { - "version": "4.3.0", - "dev": true, + "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", - "dependencies": { - "color-convert": "^2.0.1" + "bin": { + "mime": "cli.js" }, "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "node": ">=4" } }, - "node_modules/jest-runtime/node_modules/chalk": { - "version": "4.1.2", - "dev": true, + "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", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" + "node": ">= 0.6" } }, - "node_modules/jest-runtime/node_modules/color-convert": { - "version": "2.0.1", - "dev": true, + "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": { - "color-name": "~1.1.4" + "mime-db": "1.52.0" }, "engines": { - "node": ">=7.0.0" + "node": ">= 0.6" } }, - "node_modules/jest-runtime/node_modules/color-name": { - "version": "1.1.4", - "dev": true, - "license": "MIT" - }, - "node_modules/jest-runtime/node_modules/has-flag": { - "version": "4.0.0", - "dev": true, + "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==", "license": "MIT", "engines": { - "node": ">=8" + "node": ">=6" } }, - "node_modules/jest-runtime/node_modules/supports-color": { - "version": "7.2.0", + "node_modules/min-indent": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/min-indent/-/min-indent-1.0.1.tgz", + "integrity": "sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==", "dev": true, "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, "engines": { - "node": ">=8" + "node": ">=4" } }, - "node_modules/jest-snapshot": { - "version": "29.6.2", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/core": "^7.11.6", - "@babel/generator": "^7.7.2", - "@babel/plugin-syntax-jsx": "^7.7.2", - "@babel/plugin-syntax-typescript": "^7.7.2", - "@babel/types": "^7.3.3", - "@jest/expect-utils": "^29.6.2", - "@jest/transform": "^29.6.2", - "@jest/types": "^29.6.1", - "babel-preset-current-node-syntax": "^1.0.0", - "chalk": "^4.0.0", - "expect": "^29.6.2", - "graceful-fs": "^4.2.9", - "jest-diff": "^29.6.2", - "jest-get-type": "^29.4.3", - "jest-matcher-utils": "^29.6.2", - "jest-message-util": "^29.6.2", - "jest-util": "^29.6.2", - "natural-compare": "^1.4.0", - "pretty-format": "^29.6.2", - "semver": "^7.5.3" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } + "node_modules/minimalistic-assert": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", + "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==", + "license": "ISC" }, - "node_modules/jest-snapshot/node_modules/ansi-styles": { - "version": "4.3.0", + "node_modules/minimalistic-crypto-utils": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz", + "integrity": "sha512-JIYlbt6g8i5jKfJ3xz7rF0LXmv2TkDxBLUkiBeZ7bAx4GnnNMr8xFpGnOxn6GhTEHx3SjRrZEoU+j04prX1ktg==", + "license": "MIT" + }, + "node_modules/minimatch": { + "version": "9.0.3", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz", + "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==", "dev": true, - "license": "MIT", + "license": "ISC", "dependencies": { - "color-convert": "^2.0.1" + "brace-expansion": "^2.0.1" }, "engines": { - "node": ">=8" + "node": ">=16 || 14 >=14.17" }, "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/jest-snapshot/node_modules/chalk": { - "version": "4.1.2", + "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", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/jest-snapshot/node_modules/color-convert": { - "version": "2.0.1", + "node_modules/minimist-options": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/minimist-options/-/minimist-options-4.1.0.tgz", + "integrity": "sha512-Q4r8ghd80yhO/0j1O3B2BjweX3fiHg9cdOwjJd2J76Q135c+NDxGCqdYKQ1SKBuFfgWbAUzBfvYjPUEeNgqN1A==", "dev": true, "license": "MIT", "dependencies": { - "color-name": "~1.1.4" + "arrify": "^1.0.1", + "is-plain-obj": "^1.1.0", + "kind-of": "^6.0.3" }, "engines": { - "node": ">=7.0.0" + "node": ">= 6" } }, - "node_modules/jest-snapshot/node_modules/color-name": { - "version": "1.1.4", - "dev": true, - "license": "MIT" - }, - "node_modules/jest-snapshot/node_modules/has-flag": { - "version": "4.0.0", + "node_modules/minipass": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", + "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", "dev": true, - "license": "MIT", + "license": "ISC", "engines": { - "node": ">=8" + "node": ">=16 || 14 >=14.17" } }, - "node_modules/jest-snapshot/node_modules/supports-color": { - "version": "7.2.0", + "node_modules/minipass-collect": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/minipass-collect/-/minipass-collect-2.0.1.tgz", + "integrity": "sha512-D7V8PO9oaz7PWGLbCACuI1qEOsq7UKfLotx/C0Aet43fCUB/wfQ7DYeq2oR/svFJGYDHPr38SHATeaj/ZoKHKw==", "dev": true, - "license": "MIT", + "license": "ISC", "dependencies": { - "has-flag": "^4.0.0" + "minipass": "^7.0.3" }, "engines": { - "node": ">=8" + "node": ">=16 || 14 >=14.17" } }, - "node_modules/jest-util": { - "version": "29.6.2", + "node_modules/minipass-fetch": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-3.0.5.tgz", + "integrity": "sha512-2N8elDQAtSnFV0Dk7gt15KHsS0Fyz6CbYZ360h0WTYV1Ty46li3rAXVOQj1THMNLdmrD9Vt5pBPtWtVkpwGBqg==", "dev": true, "license": "MIT", "dependencies": { - "@jest/types": "^29.6.1", - "@types/node": "*", - "chalk": "^4.0.0", - "ci-info": "^3.2.0", - "graceful-fs": "^4.2.9", - "picomatch": "^2.2.3" + "minipass": "^7.0.3", + "minipass-sized": "^1.0.3", + "minizlib": "^2.1.2" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + }, + "optionalDependencies": { + "encoding": "^0.1.13" } }, - "node_modules/jest-util/node_modules/ansi-styles": { - "version": "4.3.0", + "node_modules/minipass-flush": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/minipass-flush/-/minipass-flush-1.0.5.tgz", + "integrity": "sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw==", "dev": true, - "license": "MIT", + "license": "ISC", "dependencies": { - "color-convert": "^2.0.1" + "minipass": "^3.0.0" }, "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "node": ">= 8" } }, - "node_modules/jest-util/node_modules/chalk": { - "version": "4.1.2", + "node_modules/minipass-flush/node_modules/minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", "dev": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/jest-util/node_modules/color-convert": { - "version": "2.0.1", - "dev": true, - "license": "MIT", + "license": "ISC", "dependencies": { - "color-name": "~1.1.4" + "yallist": "^4.0.0" }, "engines": { - "node": ">=7.0.0" + "node": ">=8" } }, - "node_modules/jest-util/node_modules/color-name": { - "version": "1.1.4", + "node_modules/minipass-flush/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": "MIT" + "license": "ISC" }, - "node_modules/jest-util/node_modules/has-flag": { - "version": "4.0.0", + "node_modules/minipass-pipeline": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/minipass-pipeline/-/minipass-pipeline-1.2.4.tgz", + "integrity": "sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A==", "dev": true, - "license": "MIT", + "license": "ISC", + "dependencies": { + "minipass": "^3.0.0" + }, "engines": { "node": ">=8" } }, - "node_modules/jest-util/node_modules/supports-color": { - "version": "7.2.0", + "node_modules/minipass-pipeline/node_modules/minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", "dev": true, - "license": "MIT", + "license": "ISC", "dependencies": { - "has-flag": "^4.0.0" + "yallist": "^4.0.0" }, "engines": { "node": ">=8" } }, - "node_modules/jest-validate": { - "version": "29.6.2", + "node_modules/minipass-pipeline/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": "MIT", + "license": "ISC" + }, + "node_modules/minipass-sized": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/minipass-sized/-/minipass-sized-1.0.3.tgz", + "integrity": "sha512-MbkQQ2CTiBMlA2Dm/5cY+9SWFEN8pzzOXi6rlM5Xxq0Yqbda5ZQy9sU75a673FE9ZK0Zsbr6Y5iP6u9nktfg2g==", + "dev": true, + "license": "ISC", "dependencies": { - "@jest/types": "^29.6.1", - "camelcase": "^6.2.0", - "chalk": "^4.0.0", - "jest-get-type": "^29.4.3", - "leven": "^3.1.0", - "pretty-format": "^29.6.2" + "minipass": "^3.0.0" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": ">=8" } }, - "node_modules/jest-validate/node_modules/ansi-styles": { - "version": "4.3.0", + "node_modules/minipass-sized/node_modules/minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", "dev": true, - "license": "MIT", + "license": "ISC", "dependencies": { - "color-convert": "^2.0.1" + "yallist": "^4.0.0" }, "engines": { "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/jest-validate/node_modules/camelcase": { - "version": "6.3.0", + "node_modules/minipass-sized/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": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } + "license": "ISC" }, - "node_modules/jest-validate/node_modules/chalk": { - "version": "4.1.2", + "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, "license": "MIT", "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" + "minipass": "^3.0.0", + "yallist": "^4.0.0" }, "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" + "node": ">= 8" } }, - "node_modules/jest-validate/node_modules/color-convert": { - "version": "2.0.1", + "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==", "dev": true, - "license": "MIT", + "license": "ISC", "dependencies": { - "color-name": "~1.1.4" + "yallist": "^4.0.0" }, "engines": { - "node": ">=7.0.0" + "node": ">=8" } }, - "node_modules/jest-validate/node_modules/color-name": { - "version": "1.1.4", + "node_modules/minizlib/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": "MIT" + "license": "ISC" }, - "node_modules/jest-validate/node_modules/has-flag": { - "version": "4.0.0", + "node_modules/mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", "dev": true, "license": "MIT", + "bin": { + "mkdirp": "bin/cmd.js" + }, "engines": { - "node": ">=8" + "node": ">=10" } }, - "node_modules/jest-validate/node_modules/supports-color": { - "version": "7.2.0", + "node_modules/modify-values": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/modify-values/-/modify-values-1.0.1.tgz", + "integrity": "sha512-xV2bxeN6F7oYjZWTe/YPAy6MN2M+sL4u/Rlm2AHCIVGfo2p1yGmBHQ6vHehl4bRTZBdHu3TSkWdYgkwpYzAGSw==", "dev": true, "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, "engines": { - "node": ">=8" + "node": ">=0.10.0" } }, - "node_modules/jest-watcher": { - "version": "29.6.2", + "node_modules/module-definition": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/module-definition/-/module-definition-3.4.0.tgz", + "integrity": "sha512-XxJ88R1v458pifaSkPNLUTdSPNVGMP2SXVncVmApGO+gAfrLANiYe6JofymCzVceGOMwQE2xogxBSc8uB7XegA==", "dev": true, "license": "MIT", "dependencies": { - "@jest/test-result": "^29.6.2", - "@jest/types": "^29.6.1", - "@types/node": "*", - "ansi-escapes": "^4.2.1", - "chalk": "^4.0.0", - "emittery": "^0.13.1", - "jest-util": "^29.6.2", - "string-length": "^4.0.1" + "ast-module-types": "^3.0.0", + "node-source-walk": "^4.0.0" + }, + "bin": { + "module-definition": "bin/cli.js" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": ">=6.0" } }, - "node_modules/jest-watcher/node_modules/ansi-styles": { - "version": "4.3.0", + "node_modules/module-definition/node_modules/ast-module-types": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ast-module-types/-/ast-module-types-3.0.0.tgz", + "integrity": "sha512-CMxMCOCS+4D+DkOQfuZf+vLrSEmY/7xtORwdxs4wtcC1wVgvk2MqFFTwQCFhvWsI4KPU9lcWXPI8DgRiz+xetQ==", "dev": true, "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" - }, "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "node": ">=6.0" } }, - "node_modules/jest-watcher/node_modules/chalk": { - "version": "4.1.2", + "node_modules/module-definition/node_modules/node-source-walk": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/node-source-walk/-/node-source-walk-4.3.0.tgz", + "integrity": "sha512-8Q1hXew6ETzqKRAs3jjLioSxNfT1cx74ooiF8RlAONwVMcfq+UdzLC2eB5qcPldUxaE5w3ytLkrmV1TGddhZTA==", "dev": true, "license": "MIT", "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" + "@babel/parser": "^7.0.0" }, "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" + "node": ">=6.0" } }, - "node_modules/jest-watcher/node_modules/color-convert": { - "version": "2.0.1", + "node_modules/module-lookup-amd": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/module-lookup-amd/-/module-lookup-amd-7.0.1.tgz", + "integrity": "sha512-w9mCNlj0S8qviuHzpakaLVc+/7q50jl9a/kmJ/n8bmXQZgDPkQHnPBb8MUOYh3WpAYkXuNc2c+khsozhIp/amQ==", "dev": true, "license": "MIT", "dependencies": { - "color-name": "~1.1.4" + "commander": "^2.8.1", + "debug": "^4.1.0", + "glob": "^7.1.6", + "requirejs": "^2.3.5", + "requirejs-config-file": "^4.0.0" + }, + "bin": { + "lookup-amd": "bin/cli.js" }, "engines": { - "node": ">=7.0.0" + "node": ">=10.13.0" } }, - "node_modules/jest-watcher/node_modules/color-name": { - "version": "1.1.4", + "node_modules/module-lookup-amd/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, "license": "MIT" }, - "node_modules/jest-watcher/node_modules/has-flag": { - "version": "4.0.0", + "node_modules/more-entropy": { + "version": "0.0.7", + "resolved": "https://registry.npmjs.org/more-entropy/-/more-entropy-0.0.7.tgz", + "integrity": "sha512-e0TxQtU1F6/ZA8WnEA2JLQwwDqBTtZFLJSW7rWgUsQou35wx1IOL0g2O7q7oGoMgIJto+jHMnNGHLfSiylHRrw==", + "dependencies": { + "iced-runtime": ">=0.0.1" + } + }, + "node_modules/mri": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/mri/-/mri-1.2.0.tgz", + "integrity": "sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==", "dev": true, "license": "MIT", "engines": { - "node": ">=8" + "node": ">=4" } }, - "node_modules/jest-watcher/node_modules/supports-color": { - "version": "7.2.0", + "node_modules/mrmime": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/mrmime/-/mrmime-2.0.0.tgz", + "integrity": "sha512-eu38+hdgojoyq63s+yTpN4XMBdt5l8HhMhc4VKLO9KM5caLIBvUm4thi7fFaxyTmCKeNnXZ5pAlBwCUnhA09uw==", "dev": true, "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, "engines": { - "node": ">=8" + "node": ">=10" } }, - "node_modules/jest-worker": { - "version": "29.6.2", + "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/multimatch": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/multimatch/-/multimatch-5.0.0.tgz", + "integrity": "sha512-ypMKuglUrZUD99Tk2bUQ+xNQj43lPEfAeX2o9cTteAmShXy2VHDJpuwu1o0xqoKCt9jLVAvwyFKdLTPXKAfJyA==", "dev": true, "license": "MIT", "dependencies": { - "@types/node": "*", - "jest-util": "^29.6.2", - "merge-stream": "^2.0.0", - "supports-color": "^8.0.0" + "@types/minimatch": "^3.0.3", + "array-differ": "^3.0.0", + "array-union": "^2.1.0", + "arrify": "^2.0.1", + "minimatch": "^3.0.4" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/jest-worker/node_modules/has-flag": { - "version": "4.0.0", + "node_modules/multimatch/node_modules/arrify": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/arrify/-/arrify-2.0.1.tgz", + "integrity": "sha512-3duEwti880xqi4eAMN8AyR4a0ByT90zoYdLlevfrvU43vb0YZwZVfxOgxWrLXXXpyugL0hNZc9G6BiB5B3nUug==", "dev": true, "license": "MIT", "engines": { "node": ">=8" } }, - "node_modules/jest-worker/node_modules/supports-color": { - "version": "8.1.1", + "node_modules/multimatch/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, "license": "MIT", "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/supports-color?sponsor=1" + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" } }, - "node_modules/js-tokens": { - "version": "4.0.0", - "dev": true, - "license": "MIT" - }, - "node_modules/js-yaml": { - "version": "3.14.1", + "node_modules/multimatch/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, - "license": "MIT", + "license": "ISC", "dependencies": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" + "brace-expansion": "^1.1.7" }, - "bin": { - "js-yaml": "bin/js-yaml.js" + "engines": { + "node": "*" } }, - "node_modules/jsbn": { - "version": "0.1.1", + "node_modules/mute-stream": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz", + "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==", + "license": "ISC" + }, + "node_modules/nan": { + "version": "2.22.0", + "resolved": "https://registry.npmjs.org/nan/-/nan-2.22.0.tgz", + "integrity": "sha512-nbajikzWTMwsW+eSsNm3QwlOs7het9gGJU5dDZzRTQGk03vyBOauxgI4VakDzE0PtsGTmXPsXTbbjVhRwR5mpw==", "license": "MIT" }, - "node_modules/jsdom": { - "version": "16.7.0", - "dev": true, - "license": "MIT", - "dependencies": { - "abab": "^2.0.5", - "acorn": "^8.2.4", - "acorn-globals": "^6.0.0", - "cssom": "^0.4.4", - "cssstyle": "^2.3.0", - "data-urls": "^2.0.0", - "decimal.js": "^10.2.1", - "domexception": "^2.0.1", - "escodegen": "^2.0.0", - "form-data": "^3.0.0", - "html-encoding-sniffer": "^2.0.1", - "http-proxy-agent": "^4.0.1", - "https-proxy-agent": "^5.0.0", - "is-potential-custom-element-name": "^1.0.1", - "nwsapi": "^2.2.0", - "parse5": "6.0.1", - "saxes": "^5.0.1", - "symbol-tree": "^3.2.4", - "tough-cookie": "^4.0.0", - "w3c-hr-time": "^1.0.2", - "w3c-xmlserializer": "^2.0.0", - "webidl-conversions": "^6.1.0", - "whatwg-encoding": "^1.0.5", - "whatwg-mimetype": "^2.3.0", - "whatwg-url": "^8.5.0", - "ws": "^7.4.6", - "xml-name-validator": "^3.0.0" + "node_modules/nanoid": { + "version": "3.3.7", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.7.tgz", + "integrity": "sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "bin": { + "nanoid": "bin/nanoid.cjs" }, "engines": { - "node": ">=10" - }, - "peerDependencies": { - "canvas": "^2.5.0" - }, - "peerDependenciesMeta": { - "canvas": { - "optional": true - } + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" } }, - "node_modules/jsdom/node_modules/@tootallnate/once": { - "version": "1.1.2", + "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, + "license": "MIT" + }, + "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": ">= 6" + "node": ">= 0.6" } }, - "node_modules/jsdom/node_modules/http-proxy-agent": { - "version": "4.0.1", + "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-fetch": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz", + "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==", "license": "MIT", "dependencies": { - "@tootallnate/once": "1", - "agent-base": "6", - "debug": "4" + "whatwg-url": "^5.0.0" }, "engines": { - "node": ">= 6" + "node": "4.x || >=6.0.0" + }, + "peerDependencies": { + "encoding": "^0.1.0" + }, + "peerDependenciesMeta": { + "encoding": { + "optional": true + } } }, - "node_modules/jsdom/node_modules/tr46": { - "version": "2.1.0", + "node_modules/node-gyp": { + "version": "10.2.0", + "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-10.2.0.tgz", + "integrity": "sha512-sp3FonBAaFe4aYTcFdZUn2NYkbP7xroPGYvQmP4Nl5PxamznItBnNCgjrVTKrEfQynInMsJvZrdmqUnysCJ8rw==", "dev": true, "license": "MIT", "dependencies": { - "punycode": "^2.1.1" + "env-paths": "^2.2.0", + "exponential-backoff": "^3.1.1", + "glob": "^10.3.10", + "graceful-fs": "^4.2.6", + "make-fetch-happen": "^13.0.0", + "nopt": "^7.0.0", + "proc-log": "^4.1.0", + "semver": "^7.3.5", + "tar": "^6.2.1", + "which": "^4.0.0" + }, + "bin": { + "node-gyp": "bin/node-gyp.js" }, "engines": { - "node": ">=8" + "node": "^16.14.0 || >=18.0.0" } }, - "node_modules/jsdom/node_modules/webidl-conversions": { - "version": "6.1.0", + "node_modules/node-gyp/node_modules/glob": { + "version": "10.4.5", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz", + "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==", "dev": true, - "license": "BSD-2-Clause", + "license": "ISC", + "dependencies": { + "foreground-child": "^3.1.0", + "jackspeak": "^3.1.2", + "minimatch": "^9.0.4", + "minipass": "^7.1.2", + "package-json-from-dist": "^1.0.0", + "path-scurry": "^1.11.1" + }, + "bin": { + "glob": "dist/esm/bin.mjs" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/node-gyp/node_modules/isexe": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-3.1.1.tgz", + "integrity": "sha512-LpB/54B+/2J5hqQ7imZHfdU31OlgQqx7ZicVlkm9kzg9/w8GKLEcFfJl/t7DCEDueOyBAD6zCCwTO6Fzs0NoEQ==", + "dev": true, + "license": "ISC", "engines": { - "node": ">=10.4" + "node": ">=16" } }, - "node_modules/jsdom/node_modules/whatwg-url": { - "version": "8.7.0", + "node_modules/node-gyp/node_modules/minimatch": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", "dev": true, - "license": "MIT", + "license": "ISC", "dependencies": { - "lodash": "^4.7.0", - "tr46": "^2.1.0", - "webidl-conversions": "^6.1.0" + "brace-expansion": "^2.0.1" }, "engines": { - "node": ">=10" + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/jsesc": { - "version": "2.5.2", + "node_modules/node-gyp/node_modules/which": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/which/-/which-4.0.0.tgz", + "integrity": "sha512-GlaYyEb07DPxYCKhKzplCWBJtvxZcZMrL+4UkrTSJHHPyZU4mYYTv3qaOe77H7EODLSSopAUFAc6W8U4yqvscg==", "dev": true, - "license": "MIT", + "license": "ISC", + "dependencies": { + "isexe": "^3.1.1" + }, "bin": { - "jsesc": "bin/jsesc" + "node-which": "bin/which.js" }, "engines": { - "node": ">=4" + "node": "^16.13.0 || >=18.0.0" } }, - "node_modules/json-parse-better-errors": { - "version": "1.0.2", + "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, "license": "MIT" }, - "node_modules/json-parse-even-better-errors": { - "version": "2.3.1", + "node_modules/node-machine-id": { + "version": "1.1.12", + "resolved": "https://registry.npmjs.org/node-machine-id/-/node-machine-id-1.1.12.tgz", + "integrity": "sha512-QNABxbrPa3qEIfrE6GOJ7BYIuignnJw7iQ2YPbc3Nla1HzRJjXzZOiikfF8m7eAMfichLt3M4VgLOetqgDmgGQ==", "dev": true, "license": "MIT" }, - "node_modules/json-schema": { - "version": "0.4.0", - "license": "(AFL-2.1 OR BSD-3-Clause)" - }, - "node_modules/json-schema-traverse": { - "version": "0.4.1", - "license": "MIT" - }, - "node_modules/json-stable-stringify-without-jsonify": { - "version": "1.0.1", + "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, "license": "MIT" }, - "node_modules/json-stringify-nice": { - "version": "1.1.4", + "node_modules/node-source-walk": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/node-source-walk/-/node-source-walk-5.0.2.tgz", + "integrity": "sha512-Y4jr/8SRS5hzEdZ7SGuvZGwfORvNsSsNRwDXx5WisiqzsVfeftDvRgfeqWNgZvWSJbgubTRVRYBzK6UO+ErqjA==", "dev": true, - "license": "ISC", - "funding": { - "url": "https://github.com/sponsors/isaacs" + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.21.4" + }, + "engines": { + "node": ">=12" } }, - "node_modules/json-stringify-safe": { - "version": "5.0.1", - "license": "ISC" - }, - "node_modules/json5": { - "version": "2.2.3", + "node_modules/nopt": { + "version": "7.2.1", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-7.2.1.tgz", + "integrity": "sha512-taM24ViiimT/XntxbPyJQzCG+p4EKOpgD3mxFwW38mGjVUrfERQOeY4EDHjdnptttfHuHQXFx+lTP08Q+mLa/w==", "dev": true, - "license": "MIT", + "license": "ISC", + "dependencies": { + "abbrev": "^2.0.0" + }, "bin": { - "json5": "lib/cli.js" + "nopt": "bin/nopt.js" }, "engines": { - "node": ">=6" + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, - "node_modules/jsonc-parser": { - "version": "3.2.0", + "node_modules/normalize-package-data": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-6.0.2.tgz", + "integrity": "sha512-V6gygoYb/5EmNI+MEGrWkC+e6+Rr7mTmfHrxDbLzxQogBkgzo76rkok0Am6thgSF7Mv2nLOajAJj5vDJZEFn7g==", "dev": true, - "license": "MIT" + "license": "BSD-2-Clause", + "dependencies": { + "hosted-git-info": "^7.0.0", + "semver": "^7.3.5", + "validate-npm-package-license": "^3.0.4" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } }, - "node_modules/jsonfile": { - "version": "4.0.0", + "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", - "optionalDependencies": { - "graceful-fs": "^4.1.6" + "engines": { + "node": ">=0.10.0" } }, - "node_modules/jsonparse": { - "version": "1.3.1", - "dev": true, - "engines": [ - "node >= 0.2.0" - ], - "license": "MIT" - }, - "node_modules/jsonrpc-lite": { - "version": "2.2.0", - "license": "MIT" - }, - "node_modules/JSONStream": { - "version": "1.3.5", + "node_modules/npm-bundled": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/npm-bundled/-/npm-bundled-3.0.1.tgz", + "integrity": "sha512-+AvaheE/ww1JEwRHOrn4WHNzOxGtVp+adrg2AeZS/7KuxGUYFuBta98wYpfHBbJp6Tg6j1NKSEVHNcfZzJHQwQ==", "dev": true, - "license": "(MIT OR Apache-2.0)", + "license": "ISC", "dependencies": { - "jsonparse": "^1.2.0", - "through": ">=2.2.7 <3" - }, - "bin": { - "JSONStream": "bin.js" + "npm-normalize-package-bin": "^3.0.0" }, "engines": { - "node": "*" + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, - "node_modules/jsontokens": { - "version": "4.0.1", - "license": "MIT", - "dependencies": { - "@noble/hashes": "^1.1.2", - "@noble/secp256k1": "^1.6.3", - "base64-js": "^1.5.1" - } - }, - "node_modules/jsprim": { - "version": "1.4.2", - "license": "MIT", + "node_modules/npm-install-checks": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/npm-install-checks/-/npm-install-checks-6.3.0.tgz", + "integrity": "sha512-W29RiK/xtpCGqn6f3ixfRYGk+zRyr+Ew9F2E20BfXxT5/euLdA/Nm7fO7OeTGuAmTs30cpgInyJ0cYe708YTZw==", + "dev": true, + "license": "BSD-2-Clause", "dependencies": { - "assert-plus": "1.0.0", - "extsprintf": "1.3.0", - "json-schema": "0.4.0", - "verror": "1.10.0" + "semver": "^7.1.1" }, "engines": { - "node": ">=0.6.0" + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, - "node_modules/just-diff": { - "version": "6.0.2", + "node_modules/npm-normalize-package-bin": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/npm-normalize-package-bin/-/npm-normalize-package-bin-3.0.1.tgz", + "integrity": "sha512-dMxCf+zZ+3zeQZXKxmyuCKlIDPGuv8EF940xbkC4kQVDTtqoh6rJFO+JTKSA6/Rwi0getWmtuy4Itup0AMcaDQ==", "dev": true, - "license": "MIT" + "license": "ISC", + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } }, - "node_modules/just-diff-apply": { - "version": "5.5.0", + "node_modules/npm-package-arg": { + "version": "11.0.2", + "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-11.0.2.tgz", + "integrity": "sha512-IGN0IAwmhDJwy13Wc8k+4PEbTPhpJnMtfR53ZbOyjkvmEcLS4nCwp6mvMWjS5sUjeiW3mpx6cHmuhKEu9XmcQw==", "dev": true, - "license": "MIT" - }, - "node_modules/key-encoder": { - "version": "2.0.3", - "license": "MIT", + "license": "ISC", "dependencies": { - "@types/elliptic": "^6.4.9", - "asn1.js": "^5.0.1", - "bn.js": "^4.11.8", - "elliptic": "^6.4.1" + "hosted-git-info": "^7.0.0", + "proc-log": "^4.0.0", + "semver": "^7.3.5", + "validate-npm-package-name": "^5.0.0" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" } }, - "node_modules/key-encoder/node_modules/bn.js": { - "version": "4.12.0", - "license": "MIT" - }, - "node_modules/kind-of": { - "version": "6.0.3", + "node_modules/npm-packlist": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/npm-packlist/-/npm-packlist-8.0.2.tgz", + "integrity": "sha512-shYrPFIS/JLP4oQmAwDyk5HcyysKW8/JLTEA32S0Z5TzvpaeeX2yMFfoK1fjEBnCBvVyIB/Jj/GBFdm0wsgzbA==", "dev": true, - "license": "MIT", + "license": "ISC", + "dependencies": { + "ignore-walk": "^6.0.4" + }, "engines": { - "node": ">=0.10.0" + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, - "node_modules/kleur": { - "version": "3.0.3", + "node_modules/npm-pick-manifest": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/npm-pick-manifest/-/npm-pick-manifest-9.1.0.tgz", + "integrity": "sha512-nkc+3pIIhqHVQr085X9d2JzPzLyjzQS96zbruppqC9aZRm/x8xx6xhI98gHtsfELP2bE+loHq8ZaHFHhe+NauA==", "dev": true, - "license": "MIT", + "license": "ISC", + "dependencies": { + "npm-install-checks": "^6.0.0", + "npm-normalize-package-bin": "^3.0.0", + "npm-package-arg": "^11.0.0", + "semver": "^7.3.5" + }, "engines": { - "node": ">=6" + "node": "^16.14.0 || >=18.0.0" } }, - "node_modules/kuler": { - "version": "2.0.0", - "license": "MIT" - }, - "node_modules/lerna": { - "version": "8.1.6", + "node_modules/npm-registry-fetch": { + "version": "17.1.0", + "resolved": "https://registry.npmjs.org/npm-registry-fetch/-/npm-registry-fetch-17.1.0.tgz", + "integrity": "sha512-5+bKQRH0J1xG1uZ1zMNvxW0VEyoNWgJpY9UDuluPFLKDfJ9u2JmmjmTJV1srBGQOROfdBMiVvnH2Zvpbm+xkVA==", "dev": true, - "license": "MIT", + "license": "ISC", "dependencies": { - "@lerna/create": "8.1.6", - "@npmcli/arborist": "7.5.3", - "@npmcli/package-json": "5.2.0", - "@npmcli/run-script": "8.1.0", - "@nx/devkit": ">=17.1.2 < 20", - "@octokit/plugin-enterprise-rest": "6.0.1", - "@octokit/rest": "19.0.11", - "aproba": "2.0.0", - "byte-size": "8.1.1", - "chalk": "4.1.0", - "clone-deep": "4.0.1", - "cmd-shim": "6.0.3", - "color-support": "1.1.3", - "columnify": "1.6.0", - "console-control-strings": "^1.1.0", - "conventional-changelog-angular": "7.0.0", - "conventional-changelog-core": "5.0.1", - "conventional-recommended-bump": "7.0.1", - "cosmiconfig": "^8.2.0", - "dedent": "1.5.3", - "envinfo": "7.13.0", - "execa": "5.0.0", - "fs-extra": "^11.2.0", - "get-port": "5.1.1", - "get-stream": "6.0.0", - "git-url-parse": "14.0.0", - "glob-parent": "6.0.2", - "globby": "11.1.0", - "graceful-fs": "4.2.11", - "has-unicode": "2.0.1", - "import-local": "3.1.0", - "ini": "^1.3.8", - "init-package-json": "6.0.3", - "inquirer": "^8.2.4", - "is-ci": "3.0.1", - "is-stream": "2.0.0", - "jest-diff": ">=29.4.3 < 30", - "js-yaml": "4.1.0", - "libnpmaccess": "8.0.6", - "libnpmpublish": "9.0.9", - "load-json-file": "6.2.0", - "lodash": "^4.17.21", - "make-dir": "4.0.0", - "minimatch": "3.0.5", - "multimatch": "5.0.0", - "node-fetch": "2.6.7", - "npm-package-arg": "11.0.2", - "npm-packlist": "8.0.2", - "npm-registry-fetch": "^17.1.0", - "nx": ">=17.1.2 < 20", - "p-map": "4.0.0", - "p-map-series": "2.1.0", - "p-pipe": "3.1.0", - "p-queue": "6.6.2", - "p-reduce": "2.1.0", - "p-waterfall": "2.1.1", - "pacote": "^18.0.6", - "pify": "5.0.0", - "read-cmd-shim": "4.0.0", - "resolve-from": "5.0.0", - "rimraf": "^4.4.1", - "semver": "^7.3.8", - "set-blocking": "^2.0.0", - "signal-exit": "3.0.7", - "slash": "3.0.0", - "ssri": "^10.0.6", - "string-width": "^4.2.3", - "strong-log-transformer": "2.1.0", - "tar": "6.2.1", - "temp-dir": "1.0.0", - "typescript": ">=3 < 6", - "upath": "2.0.1", - "uuid": "^10.0.0", - "validate-npm-package-license": "3.0.4", - "validate-npm-package-name": "5.0.1", - "wide-align": "1.1.5", - "write-file-atomic": "5.0.1", - "write-pkg": "4.0.0", - "yargs": "17.7.2", - "yargs-parser": "21.1.1" - }, - "bin": { - "lerna": "dist/cli.js" + "@npmcli/redact": "^2.0.0", + "jsonparse": "^1.3.1", + "make-fetch-happen": "^13.0.0", + "minipass": "^7.0.2", + "minipass-fetch": "^3.0.0", + "minizlib": "^2.1.2", + "npm-package-arg": "^11.0.0", + "proc-log": "^4.0.0" }, "engines": { - "node": ">=18.0.0" + "node": "^16.14.0 || >=18.0.0" } }, - "node_modules/lerna/node_modules/ansi-styles": { - "version": "4.3.0", + "node_modules/npm-run-path": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", + "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", "dev": true, "license": "MIT", "dependencies": { - "color-convert": "^2.0.1" + "path-key": "^3.0.0" }, "engines": { "node": ">=8" + } + }, + "node_modules/nth-check": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.0.1.tgz", + "integrity": "sha512-it1vE95zF6dTT9lBsYbxvqh0Soy4SPowchj0UBGj/V6cTPnXXtQOPUbhZ6CmGzAD/rW22LQK6E96pcdJXk4A4w==", + "license": "BSD-2-Clause", + "dependencies": { + "boolbase": "^1.0.0" }, "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "url": "https://github.com/fb55/nth-check?sponsor=1" } }, - "node_modules/lerna/node_modules/argparse": { - "version": "2.0.1", + "node_modules/nwsapi": { + "version": "2.2.13", + "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.13.tgz", + "integrity": "sha512-cTGB9ptp9dY9A5VbMSe7fQBcl/tt22Vcqdq8+eN93rblOuE0aCFu4aZ2vMwct/2t+lFnosm8RkQW1I0Omb1UtQ==", "dev": true, - "license": "Python-2.0" + "license": "MIT" }, - "node_modules/lerna/node_modules/chalk": { - "version": "4.1.0", + "node_modules/nx": { + "version": "20.1.2", + "resolved": "https://registry.npmjs.org/nx/-/nx-20.1.2.tgz", + "integrity": "sha512-CvjmuQmI0RWLYZxRSIgQZmzsQv6dPp9oI0YZE3L1dagBPfTf5Cun65I0GLt7bdkDnVx2PGYkDbIoJSv2/V+83Q==", "dev": true, + "hasInstallScript": true, "license": "MIT", "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" + "@napi-rs/wasm-runtime": "0.2.4", + "@yarnpkg/lockfile": "^1.1.0", + "@yarnpkg/parsers": "3.0.2", + "@zkochan/js-yaml": "0.0.7", + "axios": "^1.7.4", + "chalk": "^4.1.0", + "cli-cursor": "3.1.0", + "cli-spinners": "2.6.1", + "cliui": "^8.0.1", + "dotenv": "~16.4.5", + "dotenv-expand": "~11.0.6", + "enquirer": "~2.3.6", + "figures": "3.2.0", + "flat": "^5.0.2", + "front-matter": "^4.0.2", + "ignore": "^5.0.4", + "jest-diff": "^29.4.1", + "jsonc-parser": "3.2.0", + "lines-and-columns": "2.0.3", + "minimatch": "9.0.3", + "node-machine-id": "1.1.12", + "npm-run-path": "^4.0.1", + "open": "^8.4.0", + "ora": "5.3.0", + "semver": "^7.5.3", + "string-width": "^4.2.3", + "tar-stream": "~2.2.0", + "tmp": "~0.2.1", + "tsconfig-paths": "^4.1.2", + "tslib": "^2.3.0", + "yargs": "^17.6.2", + "yargs-parser": "21.1.1" }, - "engines": { - "node": ">=10" + "bin": { + "nx": "bin/nx.js", + "nx-cloud": "bin/nx-cloud.js" }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" + "optionalDependencies": { + "@nx/nx-darwin-arm64": "20.1.2", + "@nx/nx-darwin-x64": "20.1.2", + "@nx/nx-freebsd-x64": "20.1.2", + "@nx/nx-linux-arm-gnueabihf": "20.1.2", + "@nx/nx-linux-arm64-gnu": "20.1.2", + "@nx/nx-linux-arm64-musl": "20.1.2", + "@nx/nx-linux-x64-gnu": "20.1.2", + "@nx/nx-linux-x64-musl": "20.1.2", + "@nx/nx-win32-arm64-msvc": "20.1.2", + "@nx/nx-win32-x64-msvc": "20.1.2" + }, + "peerDependencies": { + "@swc-node/register": "^1.8.0", + "@swc/core": "^1.3.85" + }, + "peerDependenciesMeta": { + "@swc-node/register": { + "optional": true + }, + "@swc/core": { + "optional": true + } } }, - "node_modules/lerna/node_modules/color-convert": { - "version": "2.0.1", + "node_modules/nx/node_modules/enquirer": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.3.6.tgz", + "integrity": "sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==", "dev": true, "license": "MIT", "dependencies": { - "color-name": "~1.1.4" + "ansi-colors": "^4.1.1" }, "engines": { - "node": ">=7.0.0" + "node": ">=8.6" } }, - "node_modules/lerna/node_modules/color-name": { - "version": "1.1.4", - "dev": true, - "license": "MIT" - }, - "node_modules/lerna/node_modules/conventional-changelog-angular": { - "version": "7.0.0", - "dev": true, - "license": "ISC", - "dependencies": { - "compare-func": "^2.0.0" - }, - "engines": { - "node": ">=16" - } - }, - "node_modules/lerna/node_modules/execa": { - "version": "5.0.0", + "node_modules/nx/node_modules/ora": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/ora/-/ora-5.3.0.tgz", + "integrity": "sha512-zAKMgGXUim0Jyd6CXK9lraBnD3H5yPGBPPOkC23a2BG6hsm4Zu6OQSjQuEtV0BHDf4aKHcUFvJiGRrFuW3MG8g==", "dev": true, "license": "MIT", "dependencies": { - "cross-spawn": "^7.0.3", - "get-stream": "^6.0.0", - "human-signals": "^2.1.0", - "is-stream": "^2.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^4.0.1", - "onetime": "^5.1.2", - "signal-exit": "^3.0.3", - "strip-final-newline": "^2.0.0" + "bl": "^4.0.3", + "chalk": "^4.1.0", + "cli-cursor": "^3.1.0", + "cli-spinners": "^2.5.0", + "is-interactive": "^1.0.0", + "log-symbols": "^4.0.0", + "strip-ansi": "^6.0.0", + "wcwidth": "^1.0.1" }, "engines": { "node": ">=10" }, "funding": { - "url": "https://github.com/sindresorhus/execa?sponsor=1" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/lerna/node_modules/fs-extra": { - "version": "11.2.0", + "node_modules/nx/node_modules/strip-bom": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==", "dev": true, "license": "MIT", - "dependencies": { - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - }, "engines": { - "node": ">=14.14" + "node": ">=4" } }, - "node_modules/lerna/node_modules/get-stream": { - "version": "6.0.0", + "node_modules/nx/node_modules/tmp": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.3.tgz", + "integrity": "sha512-nZD7m9iCPC5g0pYmcaxogYKggSfLsdxl8of3Q/oIbqCqLLIO9IAF0GWjX1z9NZRHPiXv8Wex4yDCaZsgEw0Y8w==", "dev": true, "license": "MIT", "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=14.14" } }, - "node_modules/lerna/node_modules/glob": { - "version": "9.3.5", + "node_modules/nx/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==", "dev": true, - "license": "ISC", + "license": "MIT", "dependencies": { - "fs.realpath": "^1.0.0", - "minimatch": "^8.0.2", - "minipass": "^4.2.4", - "path-scurry": "^1.6.1" + "json5": "^2.2.2", + "minimist": "^1.2.6", + "strip-bom": "^3.0.0" }, "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" + "node": ">=6" } }, - "node_modules/lerna/node_modules/glob/node_modules/brace-expansion": { - "version": "2.0.1", - "dev": true, + "node_modules/oauth-sign": { + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", + "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==", + "license": "Apache-2.0", + "engines": { + "node": "*" + } + }, + "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==", "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0" + "engines": { + "node": ">=0.10.0" } }, - "node_modules/lerna/node_modules/glob/node_modules/minimatch": { - "version": "8.0.4", + "node_modules/object-inspect": { + "version": "1.13.3", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.3.tgz", + "integrity": "sha512-kDCGIbxkDSXE3euJZZXzc6to7fCrKHNI/hSRQnRuQ+BWjFNzZwiFF8fj/6o2t2G9/jTj8PSIYTfCLelLZEeRpA==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object-is": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.1.6.tgz", + "integrity": "sha512-F8cZ+KfGlSGi09lJT7/Nd6KJZ9ygtvYC0/UYYLI9nmQKLMnydpB9yvbv9K1uSkEu7FU9vYPmVwLg328tX+ot3Q==", "dev": true, - "license": "ISC", + "license": "MIT", "dependencies": { - "brace-expansion": "^2.0.1" + "call-bind": "^1.0.7", + "define-properties": "^1.2.1" }, "engines": { - "node": ">=16 || 14 >=14.17" + "node": ">= 0.4" }, "funding": { - "url": "https://github.com/sponsors/isaacs" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/lerna/node_modules/has-flag": { - "version": "4.0.0", + "node_modules/object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", "dev": true, "license": "MIT", "engines": { - "node": ">=8" + "node": ">= 0.4" } }, - "node_modules/lerna/node_modules/inquirer": { - "version": "8.2.6", + "node_modules/object.assign": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.5.tgz", + "integrity": "sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ==", "dev": true, "license": "MIT", "dependencies": { - "ansi-escapes": "^4.2.1", - "chalk": "^4.1.1", - "cli-cursor": "^3.1.0", - "cli-width": "^3.0.0", - "external-editor": "^3.0.3", - "figures": "^3.0.0", - "lodash": "^4.17.21", - "mute-stream": "0.0.8", - "ora": "^5.4.1", - "run-async": "^2.4.0", - "rxjs": "^7.5.5", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0", - "through": "^2.3.6", - "wrap-ansi": "^6.0.1" + "call-bind": "^1.0.5", + "define-properties": "^1.2.1", + "has-symbols": "^1.0.3", + "object-keys": "^1.1.1" }, "engines": { - "node": ">=12.0.0" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/lerna/node_modules/inquirer/node_modules/chalk": { - "version": "4.1.2", + "node_modules/object.fromentries": { + "version": "2.0.8", + "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.8.tgz", + "integrity": "sha512-k6E21FzySsSK5a21KRADBd/NGneRegFO5pLHfdQLpRDETUNJueLXs3WCzyQ3tFRDYgbq3KHGXfTbi2bs8WQ6rQ==", "dev": true, "license": "MIT", "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2", + "es-object-atoms": "^1.0.0" }, "engines": { - "node": ">=10" + "node": ">= 0.4" }, "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/lerna/node_modules/is-stream": { - "version": "2.0.0", + "node_modules/object.groupby": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/object.groupby/-/object.groupby-1.0.3.tgz", + "integrity": "sha512-+Lhy3TQTuzXI5hevh8sBGqbmurHbbIjAi0Z4S63nthVLmLxfbj4T54a4CfZrXIrt9iP4mVAPYMo/v99taj3wjQ==", "dev": true, "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2" + }, "engines": { - "node": ">=8" + "node": ">= 0.4" } }, - "node_modules/lerna/node_modules/js-yaml": { - "version": "4.1.0", + "node_modules/object.values": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.2.0.tgz", + "integrity": "sha512-yBYjY9QX2hnRmZHAjG/f13MzmBzxzYgQhFrke06TTyKY5zSTEqkOeukBzIdVA3j3ulu8Qa3MbVFShV7T2RmGtQ==", "dev": true, "license": "MIT", "dependencies": { - "argparse": "^2.0.1" + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0" }, - "bin": { - "js-yaml": "bin/js-yaml.js" + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/lerna/node_modules/jsonfile": { - "version": "6.1.0", - "dev": true, + "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": { - "universalify": "^2.0.0" + "ee-first": "1.1.1" }, - "optionalDependencies": { - "graceful-fs": "^4.1.6" + "engines": { + "node": ">= 0.8" } }, - "node_modules/lerna/node_modules/minimatch": { - "version": "3.0.5", + "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": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" + "wrappy": "1" } }, - "node_modules/lerna/node_modules/minipass": { - "version": "4.2.8", - "dev": true, - "license": "ISC", - "engines": { - "node": ">=8" + "node_modules/one-time": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/one-time/-/one-time-1.0.0.tgz", + "integrity": "sha512-5DXOiRKwuSEcQ/l0kGCF6Q3jcADFv5tSmRaJck/OqkVFcOzutB134KRSfF0xDrL39MNnqxbHBbUUcjZIhTgb2g==", + "license": "MIT", + "dependencies": { + "fn.name": "1.x.x" } }, - "node_modules/lerna/node_modules/node-fetch": { - "version": "2.6.7", - "dev": true, + "node_modules/onetime": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", "license": "MIT", "dependencies": { - "whatwg-url": "^5.0.0" + "mimic-fn": "^2.1.0" }, "engines": { - "node": "4.x || >=6.0.0" - }, - "peerDependencies": { - "encoding": "^0.1.0" + "node": ">=6" }, - "peerDependenciesMeta": { - "encoding": { - "optional": true - } + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/lerna/node_modules/rimraf": { - "version": "4.4.1", + "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==", "dev": true, - "license": "ISC", + "license": "MIT", "dependencies": { - "glob": "^9.2.0" - }, - "bin": { - "rimraf": "dist/cjs/src/bin.js" + "define-lazy-prop": "^2.0.0", + "is-docker": "^2.1.1", + "is-wsl": "^2.2.0" }, "engines": { - "node": ">=14" + "node": ">=12" }, "funding": { - "url": "https://github.com/sponsors/isaacs" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/lerna/node_modules/rxjs": { - "version": "7.8.1", + "node_modules/opener": { + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/opener/-/opener-1.5.2.tgz", + "integrity": "sha512-ur5UIdyw5Y7yEj9wLzhqXiy6GZ3Mwx0yGI+5sMn2r0N0v3cKJvUmFH5yPP+WXh9e0xfyzyJX95D8l088DNFj7A==", "dev": true, - "license": "Apache-2.0", - "dependencies": { - "tslib": "^2.1.0" + "license": "(WTFPL OR MIT)", + "bin": { + "opener": "bin/opener-bin.js" } }, - "node_modules/lerna/node_modules/supports-color": { - "version": "7.2.0", + "node_modules/optionator": { + "version": "0.9.4", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz", + "integrity": "sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==", "dev": true, "license": "MIT", "dependencies": { - "has-flag": "^4.0.0" + "deep-is": "^0.1.3", + "fast-levenshtein": "^2.0.6", + "levn": "^0.4.1", + "prelude-ls": "^1.2.1", + "type-check": "^0.4.0", + "word-wrap": "^1.2.5" }, "engines": { - "node": ">=8" + "node": ">= 0.8.0" } }, - "node_modules/lerna/node_modules/universalify": { - "version": "2.0.1", + "node_modules/ora": { + "version": "5.4.1", + "resolved": "https://registry.npmjs.org/ora/-/ora-5.4.1.tgz", + "integrity": "sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==", "dev": true, "license": "MIT", - "engines": { - "node": ">= 10.0.0" + "dependencies": { + "bl": "^4.1.0", + "chalk": "^4.1.0", + "cli-cursor": "^3.1.0", + "cli-spinners": "^2.5.0", + "is-interactive": "^1.0.0", + "is-unicode-supported": "^0.1.0", + "log-symbols": "^4.1.0", + "strip-ansi": "^6.0.0", + "wcwidth": "^1.0.1" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/lerna/node_modules/uuid": { - "version": "10.0.0", - "dev": true, - "funding": [ - "https://github.com/sponsors/broofa", - "https://github.com/sponsors/ctavan" - ], + "node_modules/os-tmpdir": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", + "integrity": "sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==", "license": "MIT", - "bin": { - "uuid": "dist/bin/uuid" + "engines": { + "node": ">=0.10.0" } }, - "node_modules/lerna/node_modules/wrap-ansi": { - "version": "6.2.0", + "node_modules/outdent": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/outdent/-/outdent-0.5.0.tgz", + "integrity": "sha512-/jHxFIzoMXdqPzTaCpFzAAWhpkSjZPF4Vsn6jAfNpmbH/ymsmd7Qc6VE9BGn0L6YMj6uwpQLxCECpus4ukKS9Q==", + "dev": true, + "license": "MIT" + }, + "node_modules/p-filter": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/p-filter/-/p-filter-2.1.0.tgz", + "integrity": "sha512-ZBxxZ5sL2HghephhpGAQdoskxplTwr7ICaehZwLIlfL6acuVgZPm8yBNuRAFBGEqtD/hmUeq9eqLg2ys9Xr/yw==", "dev": true, "license": "MIT", "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" + "p-map": "^2.0.0" }, "engines": { "node": ">=8" } }, - "node_modules/lerna/node_modules/write-file-atomic": { - "version": "5.0.1", + "node_modules/p-filter/node_modules/p-map": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-2.1.0.tgz", + "integrity": "sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw==", "dev": true, - "license": "ISC", - "dependencies": { - "imurmurhash": "^0.1.4", - "signal-exit": "^4.0.1" - }, + "license": "MIT", "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + "node": ">=6" } }, - "node_modules/lerna/node_modules/write-file-atomic/node_modules/signal-exit": { - "version": "4.1.0", + "node_modules/p-finally": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", + "integrity": "sha512-LICb2p9CB7FS+0eR1oqWnHhp0FljGLZCWBE9aix0Uye9W8LTQPwMTYVGWQWIw9RdQiDg4+epXQODwIYJtSJaow==", "dev": true, - "license": "ISC", + "license": "MIT", "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" + "node": ">=4" } }, - "node_modules/lerna/node_modules/yargs-parser": { - "version": "21.1.1", + "node_modules/p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", "dev": true, - "license": "ISC", + "license": "MIT", + "dependencies": { + "p-try": "^2.0.0" + }, "engines": { - "node": ">=12" + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/leven": { - "version": "3.1.0", + "node_modules/p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", "dev": true, "license": "MIT", + "dependencies": { + "p-limit": "^3.0.2" + }, "engines": { - "node": ">=6" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/levn": { - "version": "0.4.1", + "node_modules/p-locate/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": { - "prelude-ls": "^1.2.1", - "type-check": "~0.4.0" + "yocto-queue": "^0.1.0" }, "engines": { - "node": ">= 0.8.0" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/libnpmaccess": { - "version": "8.0.6", + "node_modules/p-map": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", + "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", "dev": true, - "license": "ISC", + "license": "MIT", "dependencies": { - "npm-package-arg": "^11.0.2", - "npm-registry-fetch": "^17.0.1" + "aggregate-error": "^3.0.0" }, "engines": { - "node": "^16.14.0 || >=18.0.0" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/libnpmpublish": { - "version": "9.0.9", + "node_modules/p-map-series": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/p-map-series/-/p-map-series-2.1.0.tgz", + "integrity": "sha512-RpYIIK1zXSNEOdwxcfe7FdvGcs7+y5n8rifMhMNWvaxRNMPINJHF5GDeuVxWqnfrcHPSCnp7Oo5yNXHId9Av2Q==", "dev": true, - "license": "ISC", - "dependencies": { - "ci-info": "^4.0.0", - "normalize-package-data": "^6.0.1", - "npm-package-arg": "^11.0.2", - "npm-registry-fetch": "^17.0.1", - "proc-log": "^4.2.0", - "semver": "^7.3.7", - "sigstore": "^2.2.0", - "ssri": "^10.0.6" - }, + "license": "MIT", "engines": { - "node": "^16.14.0 || >=18.0.0" + "node": ">=8" } }, - "node_modules/libnpmpublish/node_modules/ci-info": { - "version": "4.0.0", + "node_modules/p-pipe": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-pipe/-/p-pipe-3.1.0.tgz", + "integrity": "sha512-08pj8ATpzMR0Y80x50yJHn37NF6vjrqHutASaX5LiH5npS9XPvrUmscd9MF5R4fuYRHOxQR1FfMIlF7AzwoPqw==", "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/sibiraj-s" - } - ], "license": "MIT", "engines": { "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/libnpmpublish/node_modules/hosted-git-info": { - "version": "7.0.2", + "node_modules/p-queue": { + "version": "6.6.2", + "resolved": "https://registry.npmjs.org/p-queue/-/p-queue-6.6.2.tgz", + "integrity": "sha512-RwFpb72c/BhQLEXIZ5K2e+AhgNVmIejGlTgiB9MzZ0e93GRvqZ7uSi0dvRF7/XIXDeNkra2fNHBxTyPDGySpjQ==", "dev": true, - "license": "ISC", + "license": "MIT", "dependencies": { - "lru-cache": "^10.0.1" + "eventemitter3": "^4.0.4", + "p-timeout": "^3.2.0" }, "engines": { - "node": "^16.14.0 || >=18.0.0" + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/libnpmpublish/node_modules/lru-cache": { - "version": "10.4.0", + "node_modules/p-reduce": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/p-reduce/-/p-reduce-2.1.0.tgz", + "integrity": "sha512-2USApvnsutq8uoxZBGbbWM0JIYLiEMJ9RlaN7fAzVNb9OZN0SHjjTTfIcb667XynS5Y1VhwDJVDa72TnPzAYWw==", "dev": true, - "license": "ISC", + "license": "MIT", "engines": { - "node": ">=18" + "node": ">=8" } }, - "node_modules/libnpmpublish/node_modules/normalize-package-data": { - "version": "6.0.2", + "node_modules/p-timeout": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-3.2.0.tgz", + "integrity": "sha512-rhIwUycgwwKcP9yTOOFK/AKsAopjjCakVqLHePO3CC6Mir1Z99xT+R63jZxAT5lFZLa2inS5h+ZS2GvR99/FBg==", "dev": true, - "license": "BSD-2-Clause", + "license": "MIT", "dependencies": { - "hosted-git-info": "^7.0.0", - "semver": "^7.3.5", - "validate-npm-package-license": "^3.0.4" + "p-finally": "^1.0.0" }, "engines": { - "node": "^16.14.0 || >=18.0.0" + "node": ">=8" } }, - "node_modules/lines-and-columns": { - "version": "2.0.4", + "node_modules/p-try": { + "version": "2.2.0", + "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": "^12.20.0 || ^14.13.1 || >=16.0.0" + "node": ">=6" } }, - "node_modules/load-json-file": { - "version": "6.2.0", + "node_modules/p-waterfall": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/p-waterfall/-/p-waterfall-2.1.1.tgz", + "integrity": "sha512-RRTnDb2TBG/epPRI2yYXsimO0v3BXC8Yd3ogr1545IaqKK17VGhbWVeGGN+XfCm/08OK8635nH31c8bATkHuSw==", "dev": true, "license": "MIT", "dependencies": { - "graceful-fs": "^4.1.15", - "parse-json": "^5.0.0", - "strip-bom": "^4.0.0", - "type-fest": "^0.6.0" + "p-reduce": "^2.0.0" }, "engines": { "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/load-json-file/node_modules/type-fest": { - "version": "0.6.0", + "node_modules/package-json-from-dist": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.1.tgz", + "integrity": "sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==", "dev": true, - "license": "(MIT OR CC0-1.0)", - "engines": { - "node": ">=8" - } + "license": "BlueOak-1.0.0" }, - "node_modules/load-yaml-file": { - "version": "0.2.0", + "node_modules/package-manager-detector": { + "version": "0.2.4", + "resolved": "https://registry.npmjs.org/package-manager-detector/-/package-manager-detector-0.2.4.tgz", + "integrity": "sha512-H/OUu9/zUfP89z1APcBf2X8Us0tt8dUK4lUmKqz12QNXif3DxAs1/YqjGtcutZi1zQqeNQRWr9C+EbQnnvSSFA==", "dev": true, - "license": "MIT", + "license": "MIT" + }, + "node_modules/pacote": { + "version": "18.0.6", + "resolved": "https://registry.npmjs.org/pacote/-/pacote-18.0.6.tgz", + "integrity": "sha512-+eK3G27SMwsB8kLIuj4h1FUhHtwiEUo21Tw8wNjmvdlpOEr613edv+8FUsTj/4F/VN5ywGE19X18N7CC2EJk6A==", + "dev": true, + "license": "ISC", "dependencies": { - "graceful-fs": "^4.1.5", - "js-yaml": "^3.13.0", - "pify": "^4.0.1", - "strip-bom": "^3.0.0" + "@npmcli/git": "^5.0.0", + "@npmcli/installed-package-contents": "^2.0.1", + "@npmcli/package-json": "^5.1.0", + "@npmcli/promise-spawn": "^7.0.0", + "@npmcli/run-script": "^8.0.0", + "cacache": "^18.0.0", + "fs-minipass": "^3.0.0", + "minipass": "^7.0.2", + "npm-package-arg": "^11.0.0", + "npm-packlist": "^8.0.0", + "npm-pick-manifest": "^9.0.0", + "npm-registry-fetch": "^17.0.0", + "proc-log": "^4.0.0", + "promise-retry": "^2.0.1", + "sigstore": "^2.2.0", + "ssri": "^10.0.0", + "tar": "^6.1.11" + }, + "bin": { + "pacote": "bin/index.js" }, "engines": { - "node": ">=6" + "node": "^16.14.0 || >=18.0.0" } }, - "node_modules/load-yaml-file/node_modules/pify": { - "version": "4.0.1", + "node_modules/parent-module": { + "version": "1.0.1", + "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" + }, "engines": { "node": ">=6" } }, - "node_modules/load-yaml-file/node_modules/strip-bom": { - "version": "3.0.0", + "node_modules/parse-asn1": { + "version": "5.1.7", + "resolved": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.7.tgz", + "integrity": "sha512-CTM5kuWR3sx9IFamcl5ErfPl6ea/N8IYwiJ+vpeB2g+1iknv7zBl5uPwbMbRVznRVbrNY6lGuDoE5b30grmbqg==", "dev": true, - "license": "MIT", + "license": "ISC", + "dependencies": { + "asn1.js": "^4.10.1", + "browserify-aes": "^1.2.0", + "evp_bytestokey": "^1.0.3", + "hash-base": "~3.0", + "pbkdf2": "^3.1.2", + "safe-buffer": "^5.2.1" + }, "engines": { - "node": ">=4" + "node": ">= 0.10" } }, - "node_modules/loader-runner": { - "version": "4.3.0", + "node_modules/parse-conflict-json": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/parse-conflict-json/-/parse-conflict-json-3.0.1.tgz", + "integrity": "sha512-01TvEktc68vwbJOtWZluyWeVGWjP+bZwXtPDMQVbBKzbJ/vZBif0L69KH1+cHv1SZ6e0FKLvjyHe8mqsIqYOmw==", "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.11.5" - } - }, - "node_modules/loader-utils": { - "version": "2.0.4", - "dev": true, - "license": "MIT", + "license": "ISC", "dependencies": { - "big.js": "^5.2.2", - "emojis-list": "^3.0.0", - "json5": "^2.1.2" + "json-parse-even-better-errors": "^3.0.0", + "just-diff": "^6.0.0", + "just-diff-apply": "^5.2.0" }, "engines": { - "node": ">=8.9.0" - } - }, - "node_modules/local-pkg": { - "version": "0.4.3", - "resolved": "https://registry.npmjs.org/local-pkg/-/local-pkg-0.4.3.tgz", - "integrity": "sha512-SFppqq5p42fe2qcZQqqEOiVRXl+WCP1MdT6k7BDEW1j++sp5fIY+/fdRQitvKgB5BrBcmrs5m/L0v2FrU5MY1g==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/antfu" + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, - "node_modules/locate-path": { - "version": "6.0.0", + "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": { - "p-locate": "^5.0.0" + "@babel/code-frame": "^7.0.0", + "error-ex": "^1.3.1", + "json-parse-even-better-errors": "^2.3.0", + "lines-and-columns": "^1.1.6" }, "engines": { - "node": ">=10" + "node": ">=8" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/lodash": { - "version": "4.17.21", - "license": "MIT" - }, - "node_modules/lodash.assignin": { - "version": "4.2.0", - "license": "MIT" - }, - "node_modules/lodash.bind": { - "version": "4.2.1", - "license": "MIT" - }, - "node_modules/lodash.camelcase": { - "version": "4.3.0", + "node_modules/parse-json/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, "license": "MIT" }, - "node_modules/lodash.clonedeep": { - "version": "4.5.0", - "license": "MIT" - }, - "node_modules/lodash.defaults": { - "version": "4.2.0", - "license": "MIT" - }, - "node_modules/lodash.filter": { - "version": "4.6.0", - "license": "MIT" - }, - "node_modules/lodash.flatten": { - "version": "4.4.0", - "license": "MIT" - }, - "node_modules/lodash.foreach": { - "version": "4.5.0", - "license": "MIT" - }, - "node_modules/lodash.isfunction": { - "version": "3.0.9", + "node_modules/parse-json/node_modules/lines-and-columns": { + "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, "license": "MIT" }, - "node_modules/lodash.ismatch": { - "version": "4.4.0", + "node_modules/parse-ms": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/parse-ms/-/parse-ms-2.1.0.tgz", + "integrity": "sha512-kHt7kzLoS9VBZfUsiKjv43mr91ea+U05EyKkEtqp7vNbHxmaVuEqN7XxeEVnGrMtYOAxGrDElSi96K7EgO1zCA==", "dev": true, - "license": "MIT" + "license": "MIT", + "engines": { + "node": ">=6" + } }, - "node_modules/lodash.isplainobject": { - "version": "4.0.6", + "node_modules/parse-path": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/parse-path/-/parse-path-7.0.0.tgz", + "integrity": "sha512-Euf9GG8WT9CdqwuWJGdf3RkUcTBArppHABkO7Lm8IzRQp0e2r/kkFnmhu4TSK30Wcu5rVAZLmfPKSBBi9tWFog==", "dev": true, - "license": "MIT" + "license": "MIT", + "dependencies": { + "protocols": "^2.0.0" + } }, - "node_modules/lodash.kebabcase": { - "version": "4.1.1", + "node_modules/parse-url": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/parse-url/-/parse-url-8.1.0.tgz", + "integrity": "sha512-xDvOoLU5XRrcOZvnI6b8zA6n9O9ejNk/GExuz1yBuWUGn9KA97GI6HTs6u02wKara1CeVmZhH+0TZFdWScR89w==", "dev": true, - "license": "MIT" - }, - "node_modules/lodash.map": { - "version": "4.6.0", - "license": "MIT" + "license": "MIT", + "dependencies": { + "parse-path": "^7.0.0" + } }, - "node_modules/lodash.memoize": { - "version": "4.1.2", + "node_modules/parse5": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz", + "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==", "dev": true, "license": "MIT" }, - "node_modules/lodash.merge": { - "version": "4.6.2", - "license": "MIT" + "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/lodash.mergewith": { - "version": "4.6.2", + "node_modules/path-browserify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-1.0.1.tgz", + "integrity": "sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==", "dev": true, "license": "MIT" }, - "node_modules/lodash.pick": { - "version": "4.4.0", - "license": "MIT" - }, - "node_modules/lodash.reduce": { - "version": "4.6.0", - "license": "MIT" - }, - "node_modules/lodash.reject": { - "version": "4.6.0", - "license": "MIT" - }, - "node_modules/lodash.snakecase": { - "version": "4.1.1", + "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" - }, - "node_modules/lodash.some": { - "version": "4.6.0", - "license": "MIT" + "license": "MIT", + "engines": { + "node": ">=8" + } }, - "node_modules/lodash.startcase": { - "version": "4.4.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, - "license": "MIT" + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } }, - "node_modules/lodash.uniq": { - "version": "4.5.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" + "license": "MIT", + "engines": { + "node": ">=8" + } }, - "node_modules/lodash.upperfirst": { - "version": "4.3.1", + "node_modules/path-parse": { + "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, "license": "MIT" }, - "node_modules/log-symbols": { - "version": "4.1.0", + "node_modules/path-scurry": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz", + "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==", "dev": true, - "license": "MIT", + "license": "BlueOak-1.0.0", "dependencies": { - "chalk": "^4.1.0", - "is-unicode-supported": "^0.1.0" + "lru-cache": "^10.2.0", + "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" }, "engines": { - "node": ">=10" + "node": ">=16 || 14 >=14.18" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/log-symbols/node_modules/ansi-styles": { - "version": "4.3.0", + "node_modules/path-scurry/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, + "license": "ISC" + }, + "node_modules/path-to-regexp": { + "version": "0.1.10", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.10.tgz", + "integrity": "sha512-7lf7qcQidTku0Gu3YDPc8DJ1q7OOucfa/BSsIwjuh56VU7katFvuM8hULfkwB3Fns/rsVF7PwPKVw1sl5KQS9w==", + "license": "MIT" + }, + "node_modules/path-type": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", "dev": true, "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" - }, "engines": { "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/log-symbols/node_modules/chalk": { - "version": "4.1.2", + "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, + "license": "MIT" + }, + "node_modules/pathval": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/pathval/-/pathval-2.0.0.tgz", + "integrity": "sha512-vE7JKRyES09KiunauX7nd2Q9/L7lhok4smP9RZTDeD4MVs72Dp2qNFVz39Nz5a0FVEW0BJR6C0DYrq6unoziZA==", "dev": true, "license": "MIT", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" + "node": ">= 14.16" } }, - "node_modules/log-symbols/node_modules/color-convert": { - "version": "2.0.1", + "node_modules/pbkdf2": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.1.2.tgz", + "integrity": "sha512-iuh7L6jA7JEGu2WxDwtQP1ddOpaJNC4KlDEFfdQajSGgGPNi4OyDc2R7QnbY2bR9QjBVGwgvTdNJZoE7RaxUMA==", "dev": true, "license": "MIT", "dependencies": { - "color-name": "~1.1.4" + "create-hash": "^1.1.2", + "create-hmac": "^1.1.4", + "ripemd160": "^2.0.1", + "safe-buffer": "^5.0.1", + "sha.js": "^2.4.8" }, "engines": { - "node": ">=7.0.0" + "node": ">=0.12" } }, - "node_modules/log-symbols/node_modules/color-name": { - "version": "1.1.4", - "dev": true, + "node_modules/performance-now": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", + "integrity": "sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow==", "license": "MIT" }, - "node_modules/log-symbols/node_modules/has-flag": { - "version": "4.0.0", + "node_modules/picocolors": { + "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==", "dev": true, "license": "MIT", "engines": { - "node": ">=8" + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" } }, - "node_modules/log-symbols/node_modules/supports-color": { - "version": "7.2.0", + "node_modules/pify": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-5.0.0.tgz", + "integrity": "sha512-eW/gHNMlxdSP6dmG6uJip6FXN0EQBwm2clYYd8Wul42Cwu/DK8HEftzsapcNdYe2MfLiIwZqsDk2RDEsTE79hA==", "dev": true, "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, "engines": { - "node": ">=8" - } - }, - "node_modules/logform": { - "version": "2.5.1", - "license": "MIT", - "dependencies": { - "@colors/colors": "1.5.0", - "@types/triple-beam": "^1.3.2", - "fecha": "^4.2.0", - "ms": "^2.1.1", - "safe-stable-stringify": "^2.3.1", - "triple-beam": "^1.3.0" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/loupe": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/loupe/-/loupe-2.3.7.tgz", - "integrity": "sha512-zSMINGVYkdpYSOBmLi0D1Uo7JU9nVdQKrHxC8eYlV+9YKK9WePqAlL7lSlorG/U2Fw1w0hTBmaa/jrQ3UbPHtA==", + "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==", "dev": true, "license": "MIT", - "dependencies": { - "get-func-name": "^2.0.1" - } - }, - "node_modules/lru-cache": { - "version": "5.1.1", - "dev": true, - "license": "ISC", - "dependencies": { - "yallist": "^3.0.2" + "engines": { + "node": ">= 6" } }, - "node_modules/lunr": { - "version": "2.3.9", - "dev": true, - "license": "MIT" - }, - "node_modules/madge": { - "version": "6.1.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": { - "chalk": "^4.1.1", - "commander": "^7.2.0", - "commondir": "^1.0.1", - "debug": "^4.3.1", - "dependency-tree": "^9.0.0", - "detective-amd": "^4.0.1", - "detective-cjs": "^4.0.0", - "detective-es6": "^3.0.0", - "detective-less": "^1.0.2", - "detective-postcss": "^6.1.0", - "detective-sass": "^4.0.1", - "detective-scss": "^3.0.0", - "detective-stylus": "^2.0.1", - "detective-typescript": "^9.0.0", - "ora": "^5.4.1", - "pluralize": "^8.0.0", - "precinct": "^8.1.0", - "pretty-ms": "^7.0.1", - "rc": "^1.2.7", - "stream-to-array": "^2.3.0", - "ts-graphviz": "^1.5.0", - "walkdir": "^0.4.1" - }, - "bin": { - "madge": "bin/cli.js" + "find-up": "^4.0.0" }, "engines": { - "node": ">=14" - }, - "funding": { - "type": "individual", - "url": "https://www.paypal.me/pahen" - }, - "peerDependencies": { - "typescript": "^3.9.5 || ^4.9.5 || ^5" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } + "node": ">=8" } }, - "node_modules/madge/node_modules/ansi-styles": { - "version": "4.3.0", + "node_modules/pkg-dir/node_modules/find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", "dev": true, "license": "MIT", "dependencies": { - "color-convert": "^2.0.1" + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" }, "engines": { "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/madge/node_modules/chalk": { - "version": "4.1.2", + "node_modules/pkg-dir/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": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" + "p-locate": "^4.1.0" }, "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" + "node": ">=8" } }, - "node_modules/madge/node_modules/color-convert": { - "version": "2.0.1", + "node_modules/pkg-dir/node_modules/p-locate": { + "version": "4.1.0", + "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": { - "color-name": "~1.1.4" + "p-limit": "^2.2.0" }, "engines": { - "node": ">=7.0.0" + "node": ">=8" } }, - "node_modules/madge/node_modules/color-name": { - "version": "1.1.4", + "node_modules/pluralize": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/pluralize/-/pluralize-8.0.0.tgz", + "integrity": "sha512-Nc3IT5yHzflTfbjgqWcCPpo7DaKy4FnpB0l/zCAW0Tc7jxAiuqSxHasntB3D7887LSrA93kDJ9IXovxJYxyLCA==", "dev": true, - "license": "MIT" + "license": "MIT", + "engines": { + "node": ">=4" + } }, - "node_modules/madge/node_modules/has-flag": { - "version": "4.0.0", + "node_modules/possible-typed-array-names": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/possible-typed-array-names/-/possible-typed-array-names-1.0.0.tgz", + "integrity": "sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q==", "dev": true, "license": "MIT", "engines": { - "node": ">=8" + "node": ">= 0.4" } }, - "node_modules/madge/node_modules/supports-color": { - "version": "7.2.0", + "node_modules/postcss": { + "version": "8.4.49", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.49.tgz", + "integrity": "sha512-OCVPnIObs4N29kxTjzLfUryOkvZEq+pf8jTF0lg8E7uETuWHA+v7j3c/xJmiqpX450191LlmZfUKkXxkTry7nA==", "dev": true, + "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": { - "has-flag": "^4.0.0" + "nanoid": "^3.3.7", + "picocolors": "^1.1.1", + "source-map-js": "^1.2.1" }, "engines": { - "node": ">=8" + "node": "^10 || ^12 || >=14" } }, - "node_modules/magic-string": { - "version": "0.30.13", - "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.13.tgz", - "integrity": "sha512-8rYBO+MsWkgjDSOvLomYnzhdwEG51olQ4zL5KXnNJWV5MNmrb4rTZdrtkhxjnD/QyZUqR/Z/XDsUs/4ej2nx0g==", + "node_modules/postcss-selector-parser": { + "version": "6.1.2", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.1.2.tgz", + "integrity": "sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==", "dev": true, "license": "MIT", "dependencies": { - "@jridgewell/sourcemap-codec": "^1.5.0" + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + }, + "engines": { + "node": ">=4" } }, - "node_modules/make-dir": { - "version": "4.0.0", + "node_modules/postcss-values-parser": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/postcss-values-parser/-/postcss-values-parser-6.0.2.tgz", + "integrity": "sha512-YLJpK0N1brcNJrs9WatuJFtHaV9q5aAOj+S4DI5S7jgHlRfm0PIbDCAFRYMQD5SHq7Fy6xsDhyutgS0QOAs0qw==", "dev": true, - "license": "MIT", + "license": "MPL-2.0", "dependencies": { - "semver": "^7.5.3" + "color-name": "^1.1.4", + "is-url-superb": "^4.0.0", + "quote-unquote": "^1.0.0" }, "engines": { "node": ">=10" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "peerDependencies": { + "postcss": "^8.2.9" } }, - "node_modules/make-error": { - "version": "1.3.6", - "dev": true, - "license": "ISC" - }, - "node_modules/make-fetch-happen": { - "version": "13.0.1", + "node_modules/precinct": { + "version": "8.3.1", + "resolved": "https://registry.npmjs.org/precinct/-/precinct-8.3.1.tgz", + "integrity": "sha512-pVppfMWLp2wF68rwHqBIpPBYY8Kd12lDhk8LVQzOwqllifVR15qNFyod43YLyFpurKRZQKnE7E4pofAagDOm2Q==", "dev": true, - "license": "ISC", + "license": "MIT", "dependencies": { - "@npmcli/agent": "^2.0.0", - "cacache": "^18.0.0", - "http-cache-semantics": "^4.1.1", - "is-lambda": "^1.0.1", - "minipass": "^7.0.2", - "minipass-fetch": "^3.0.0", - "minipass-flush": "^1.0.5", - "minipass-pipeline": "^1.2.4", - "negotiator": "^0.6.3", - "proc-log": "^4.2.0", - "promise-retry": "^2.0.1", - "ssri": "^10.0.0" + "commander": "^2.20.3", + "debug": "^4.3.3", + "detective-amd": "^3.1.0", + "detective-cjs": "^3.1.1", + "detective-es6": "^2.2.1", + "detective-less": "^1.0.2", + "detective-postcss": "^4.0.0", + "detective-sass": "^3.0.1", + "detective-scss": "^2.0.1", + "detective-stylus": "^1.0.0", + "detective-typescript": "^7.0.0", + "module-definition": "^3.3.1", + "node-source-walk": "^4.2.0" + }, + "bin": { + "precinct": "bin/cli.js" }, "engines": { - "node": "^16.14.0 || >=18.0.0" + "node": "^10.13 || ^12 || >=14" } }, - "node_modules/make-fetch-happen/node_modules/minipass": { - "version": "7.1.2", + "node_modules/precinct/node_modules/@typescript-eslint/types": { + "version": "4.33.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-4.33.0.tgz", + "integrity": "sha512-zKp7CjQzLQImXEpLt2BUw1tvOMPfNoTAfb8l51evhYbOEEzdWyQNmHWWGPR6hwKJDAi+1VXSBmnhL9kyVTTOuQ==", "dev": true, - "license": "ISC", + "license": "MIT", "engines": { - "node": ">=16 || 14 >=14.17" + "node": "^8.10.0 || ^10.13.0 || >=11.10.1" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" } }, - "node_modules/makeerror": { - "version": "1.0.12", + "node_modules/precinct/node_modules/@typescript-eslint/typescript-estree": { + "version": "4.33.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-4.33.0.tgz", + "integrity": "sha512-rkWRY1MPFzjwnEVHsxGemDzqqddw2QbTJlICPD9p9I9LfsO8fdmfQPOX3uKfUaGRDFJbfrtm/sXhVXN4E+bzCA==", "dev": true, - "license": "BSD-3-Clause", + "license": "BSD-2-Clause", "dependencies": { - "tmpl": "1.0.5" - } - }, - "node_modules/map-obj": { - "version": "4.3.0", - "dev": true, - "license": "MIT", + "@typescript-eslint/types": "4.33.0", + "@typescript-eslint/visitor-keys": "4.33.0", + "debug": "^4.3.1", + "globby": "^11.0.3", + "is-glob": "^4.0.1", + "semver": "^7.3.5", + "tsutils": "^3.21.0" + }, "engines": { - "node": ">=8" + "node": "^10.12.0 || >=12.0.0" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } } }, - "node_modules/marked": { - "version": "4.3.0", + "node_modules/precinct/node_modules/@typescript-eslint/visitor-keys": { + "version": "4.33.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-4.33.0.tgz", + "integrity": "sha512-uqi/2aSz9g2ftcHWf8uLPJA70rUv6yuMW5Bohw+bwcuzaxQIHaKFZCKGoGXIrc9vkTJ3+0txM73K0Hq3d5wgIg==", "dev": true, "license": "MIT", - "bin": { - "marked": "bin/marked.js" + "dependencies": { + "@typescript-eslint/types": "4.33.0", + "eslint-visitor-keys": "^2.0.0" }, "engines": { - "node": ">= 12" - } - }, - "node_modules/md5.js": { - "version": "1.3.5", - "license": "MIT", - "dependencies": { - "hash-base": "^3.0.0", - "inherits": "^2.0.1", - "safe-buffer": "^5.1.2" + "node": "^8.10.0 || ^10.13.0 || >=11.10.1" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" } }, - "node_modules/media-typer": { - "version": "0.3.0", + "node_modules/precinct/node_modules/ast-module-types": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ast-module-types/-/ast-module-types-3.0.0.tgz", + "integrity": "sha512-CMxMCOCS+4D+DkOQfuZf+vLrSEmY/7xtORwdxs4wtcC1wVgvk2MqFFTwQCFhvWsI4KPU9lcWXPI8DgRiz+xetQ==", + "dev": true, "license": "MIT", "engines": { - "node": ">= 0.6" + "node": ">=6.0" } }, - "node_modules/meow": { - "version": "6.1.1", + "node_modules/precinct/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, + "license": "MIT" + }, + "node_modules/precinct/node_modules/detective-amd": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/detective-amd/-/detective-amd-3.1.2.tgz", + "integrity": "sha512-jffU26dyqJ37JHR/o44La6CxtrDf3Rt9tvd2IbImJYxWKTMdBjctp37qoZ6ZcY80RHg+kzWz4bXn39e4P7cctQ==", "dev": true, "license": "MIT", "dependencies": { - "@types/minimist": "^1.2.0", - "camelcase-keys": "^6.2.2", - "decamelize-keys": "^1.1.0", - "hard-rejection": "^2.1.0", - "minimist-options": "^4.0.2", - "normalize-package-data": "^2.5.0", - "read-pkg-up": "^7.0.1", - "redent": "^3.0.0", - "trim-newlines": "^3.0.0", - "type-fest": "^0.13.1", - "yargs-parser": "^18.1.3" + "ast-module-types": "^3.0.0", + "escodegen": "^2.0.0", + "get-amd-module-type": "^3.0.0", + "node-source-walk": "^4.2.0" }, - "engines": { - "node": ">=8" + "bin": { + "detective-amd": "bin/cli.js" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "engines": { + "node": ">=6.0" } }, - "node_modules/meow/node_modules/find-up": { - "version": "4.1.0", + "node_modules/precinct/node_modules/detective-cjs": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/detective-cjs/-/detective-cjs-3.1.3.tgz", + "integrity": "sha512-ljs7P0Yj9MK64B7G0eNl0ThWSYjhAaSYy+fQcpzaKalYl/UoQBOzOeLCSFEY1qEBhziZ3w7l46KG/nH+s+L7BQ==", "dev": true, "license": "MIT", "dependencies": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" + "ast-module-types": "^3.0.0", + "node-source-walk": "^4.0.0" }, "engines": { - "node": ">=8" + "node": ">=6.0" } }, - "node_modules/meow/node_modules/hosted-git-info": { - "version": "2.8.9", - "dev": true, - "license": "ISC" - }, - "node_modules/meow/node_modules/locate-path": { - "version": "5.0.0", + "node_modules/precinct/node_modules/detective-es6": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/detective-es6/-/detective-es6-2.2.2.tgz", + "integrity": "sha512-eZUKCUsbHm8xoeoCM0z6JFwvDfJ5Ww5HANo+jPR7AzkFpW9Mun3t/TqIF2jjeWa2TFbAiGaWESykf2OQp3oeMw==", "dev": true, "license": "MIT", "dependencies": { - "p-locate": "^4.1.0" + "node-source-walk": "^4.0.0" }, "engines": { - "node": ">=8" + "node": ">=6.0" } }, - "node_modules/meow/node_modules/normalize-package-data": { - "version": "2.5.0", + "node_modules/precinct/node_modules/detective-postcss": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/detective-postcss/-/detective-postcss-4.0.0.tgz", + "integrity": "sha512-Fwc/g9VcrowODIAeKRWZfVA/EufxYL7XfuqJQFroBKGikKX83d2G7NFw6kDlSYGG3LNQIyVa+eWv1mqre+v4+A==", "dev": true, - "license": "BSD-2-Clause", + "license": "Apache-2.0", "dependencies": { - "hosted-git-info": "^2.1.4", - "resolve": "^1.10.0", - "semver": "2 || 3 || 4 || 5", - "validate-npm-package-license": "^3.0.1" + "debug": "^4.1.1", + "is-url": "^1.2.4", + "postcss": "^8.1.7", + "postcss-values-parser": "^2.0.1" + }, + "engines": { + "node": "^10 || ^12 || >=14" } }, - "node_modules/meow/node_modules/p-locate": { - "version": "4.1.0", + "node_modules/precinct/node_modules/detective-sass": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/detective-sass/-/detective-sass-3.0.2.tgz", + "integrity": "sha512-DNVYbaSlmti/eztFGSfBw4nZvwsTaVXEQ4NsT/uFckxhJrNRFUh24d76KzoCC3aarvpZP9m8sC2L1XbLej4F7g==", "dev": true, "license": "MIT", "dependencies": { - "p-limit": "^2.2.0" + "gonzales-pe": "^4.3.0", + "node-source-walk": "^4.0.0" }, "engines": { - "node": ">=8" + "node": ">=6.0" } }, - "node_modules/meow/node_modules/read-pkg": { - "version": "5.2.0", + "node_modules/precinct/node_modules/detective-scss": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/detective-scss/-/detective-scss-2.0.2.tgz", + "integrity": "sha512-hDWnWh/l0tht/7JQltumpVea/inmkBaanJUcXRB9kEEXVwVUMuZd6z7eusQ6GcBFrfifu3pX/XPyD7StjbAiBg==", "dev": true, "license": "MIT", "dependencies": { - "@types/normalize-package-data": "^2.4.0", - "normalize-package-data": "^2.5.0", - "parse-json": "^5.0.0", - "type-fest": "^0.6.0" + "gonzales-pe": "^4.3.0", + "node-source-walk": "^4.0.0" }, "engines": { - "node": ">=8" + "node": ">=6.0" } }, - "node_modules/meow/node_modules/read-pkg-up": { - "version": "7.0.1", + "node_modules/precinct/node_modules/detective-stylus": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/detective-stylus/-/detective-stylus-1.0.3.tgz", + "integrity": "sha512-4/bfIU5kqjwugymoxLXXLltzQNeQfxGoLm2eIaqtnkWxqbhap9puDVpJPVDx96hnptdERzS5Cy6p9N8/08A69Q==", + "dev": true, + "license": "MIT" + }, + "node_modules/precinct/node_modules/detective-typescript": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/detective-typescript/-/detective-typescript-7.0.2.tgz", + "integrity": "sha512-unqovnhxzvkCz3m1/W4QW4qGsvXCU06aU2BAm8tkza+xLnp9SOFnob2QsTxUv5PdnQKfDvWcv9YeOeFckWejwA==", "dev": true, "license": "MIT", "dependencies": { - "find-up": "^4.1.0", - "read-pkg": "^5.2.0", - "type-fest": "^0.8.1" + "@typescript-eslint/typescript-estree": "^4.33.0", + "ast-module-types": "^2.7.1", + "node-source-walk": "^4.2.0", + "typescript": "^3.9.10" }, "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": "^10.13 || >=12.0.0" } }, - "node_modules/meow/node_modules/read-pkg-up/node_modules/type-fest": { - "version": "0.8.1", + "node_modules/precinct/node_modules/detective-typescript/node_modules/ast-module-types": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/ast-module-types/-/ast-module-types-2.7.1.tgz", + "integrity": "sha512-Rnnx/4Dus6fn7fTqdeLEAn5vUll5w7/vts0RN608yFa6si/rDOUonlIIiwugHBFWjylHjxm9owoSZn71KwG4gw==", "dev": true, - "license": "(MIT OR CC0-1.0)", - "engines": { - "node": ">=8" - } + "license": "MIT" }, - "node_modules/meow/node_modules/read-pkg/node_modules/type-fest": { - "version": "0.6.0", + "node_modules/precinct/node_modules/eslint-visitor-keys": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", + "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", "dev": true, - "license": "(MIT OR CC0-1.0)", + "license": "Apache-2.0", "engines": { - "node": ">=8" + "node": ">=10" } }, - "node_modules/meow/node_modules/semver": { - "version": "5.7.2", + "node_modules/precinct/node_modules/get-amd-module-type": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/get-amd-module-type/-/get-amd-module-type-3.0.2.tgz", + "integrity": "sha512-PcuKwB8ouJnKuAPn6Hk3UtdfKoUV3zXRqVEvj8XGIXqjWfgd1j7QGdXy5Z9OdQfzVt1Sk29HVe/P+X74ccOuqw==", "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver" + "license": "MIT", + "dependencies": { + "ast-module-types": "^3.0.0", + "node-source-walk": "^4.2.2" + }, + "engines": { + "node": ">=6.0" } }, - "node_modules/meow/node_modules/type-fest": { - "version": "0.13.1", + "node_modules/precinct/node_modules/node-source-walk": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/node-source-walk/-/node-source-walk-4.3.0.tgz", + "integrity": "sha512-8Q1hXew6ETzqKRAs3jjLioSxNfT1cx74ooiF8RlAONwVMcfq+UdzLC2eB5qcPldUxaE5w3ytLkrmV1TGddhZTA==", "dev": true, - "license": "(MIT OR CC0-1.0)", - "engines": { - "node": ">=10" + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.0.0" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "engines": { + "node": ">=6.0" } }, - "node_modules/meow/node_modules/yargs-parser": { - "version": "18.1.3", + "node_modules/precinct/node_modules/postcss-values-parser": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/postcss-values-parser/-/postcss-values-parser-2.0.1.tgz", + "integrity": "sha512-2tLuBsA6P4rYTNKCXYG/71C7j1pU6pK503suYOmn4xYrQIzW+opD+7FAFNuGSdZC/3Qfy334QbeMu7MEb8gOxg==", "dev": true, - "license": "ISC", + "license": "MIT", "dependencies": { - "camelcase": "^5.0.0", - "decamelize": "^1.2.0" + "flatten": "^1.0.2", + "indexes-of": "^1.0.1", + "uniq": "^1.0.1" }, "engines": { - "node": ">=6" + "node": ">=6.14.4" } }, - "node_modules/merge-descriptors": { - "version": "1.0.1", - "license": "MIT" - }, - "node_modules/merge-stream": { - "version": "2.0.0", + "node_modules/precinct/node_modules/typescript": { + "version": "3.9.10", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-3.9.10.tgz", + "integrity": "sha512-w6fIxVE/H1PkLKcCPsFqKE7Kv7QUwhU8qQY2MueZXWx5cPZdwFupLgKK3vntcK98BtNHZtAF4LA/yl2a7k8R6Q==", "dev": true, - "license": "MIT" + "license": "Apache-2.0", + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=4.2.0" + } }, - "node_modules/merge2": { - "version": "1.4.1", + "node_modules/prelude-ls": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", + "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", "dev": true, "license": "MIT", "engines": { - "node": ">= 8" + "node": ">= 0.8.0" } }, - "node_modules/merkle-lib": { - "version": "2.0.10", - "license": "MIT" - }, - "node_modules/methods": { - "version": "1.1.2", + "node_modules/prettier": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.3.3.tgz", + "integrity": "sha512-i2tDNA0O5IrMO757lfrdQZCc2jPNDVntV0m/+4whiDfWaTKfMNgR7Qz0NAeGz/nRqF4m5/6CLzbP4/liHt12Ew==", + "dev": true, "license": "MIT", + "bin": { + "prettier": "bin/prettier.cjs" + }, "engines": { - "node": ">= 0.6" + "node": ">=14" + }, + "funding": { + "url": "https://github.com/prettier/prettier?sponsor=1" } }, - "node_modules/micro-packed": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/micro-packed/-/micro-packed-0.3.2.tgz", - "integrity": "sha512-D1Bq0/lVOzdxhnX5vylCxZpdw5LylH7Vd81py0DfRsKUP36XYpwvy8ZIsECVo3UfnoROn8pdKqkOzL7Cd82sGA==", - "funding": [ - { - "type": "individual", - "url": "https://paulmillr.com/funding/" - } - ], + "node_modules/prettier-linter-helpers": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/prettier-linter-helpers/-/prettier-linter-helpers-1.0.0.tgz", + "integrity": "sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w==", + "dev": true, "license": "MIT", "dependencies": { - "@scure/base": "~1.1.1" + "fast-diff": "^1.1.2" + }, + "engines": { + "node": ">=6.0.0" } }, - "node_modules/micromatch": { - "version": "4.0.5", + "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": { - "braces": "^3.0.2", - "picomatch": "^2.3.1" + "@jest/schemas": "^29.6.3", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" }, "engines": { - "node": ">=8.6" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/miller-rabin": { - "version": "4.0.1", + "node_modules/pretty-format/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", - "dependencies": { - "bn.js": "^4.0.0", - "brorand": "^1.0.1" + "engines": { + "node": ">=10" }, - "bin": { - "miller-rabin": "bin/miller-rabin" + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/miller-rabin/node_modules/bn.js": { - "version": "4.12.0", + "node_modules/pretty-ms": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/pretty-ms/-/pretty-ms-7.0.1.tgz", + "integrity": "sha512-973driJZvxiGOQ5ONsFhOF/DtzPMOMtgC11kCpUrPGMTgqp2q/1gwzCquocrN33is0VZ5GFHXZYMM9l6h67v2Q==", "dev": true, - "license": "MIT" - }, - "node_modules/mime": { - "version": "1.6.0", "license": "MIT", - "bin": { - "mime": "cli.js" + "dependencies": { + "parse-ms": "^2.1.0" }, "engines": { - "node": ">=4" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/mime-db": { - "version": "1.52.0", - "license": "MIT", + "node_modules/proc-log": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/proc-log/-/proc-log-4.2.0.tgz", + "integrity": "sha512-g8+OnU/L2v+wyiVK+D5fA34J7EH8jZ8DDlvwhRCMxmMj7UCBvxiO1mGeN+36JXIKF4zevU4kRBd8lVgG9vLelA==", + "dev": true, + "license": "ISC", "engines": { - "node": ">= 0.6" + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, - "node_modules/mime-types": { - "version": "2.1.35", + "node_modules/process": { + "version": "0.11.10", + "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", + "integrity": "sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==", + "dev": true, "license": "MIT", - "dependencies": { - "mime-db": "1.52.0" - }, "engines": { - "node": ">= 0.6" + "node": ">= 0.6.0" } }, - "node_modules/mimic-fn": { - "version": "2.1.0", - "license": "MIT", + "node_modules/process-nextick-args": { + "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, + "license": "MIT" + }, + "node_modules/proggy": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/proggy/-/proggy-2.0.0.tgz", + "integrity": "sha512-69agxLtnI8xBs9gUGqEnK26UfiexpHy+KUpBQWabiytQjnn5wFY8rklAi7GRfABIuPNnQ/ik48+LGLkYYJcy4A==", + "dev": true, + "license": "ISC", "engines": { - "node": ">=6" + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, - "node_modules/min-indent": { + "node_modules/progress": { + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/progress/-/progress-1.1.8.tgz", + "integrity": "sha512-UdA8mJ4weIkUBO224tIarHzuHs4HuYiJvsuGT7j/SPQiUJVjYvNDBIPa0hAorduOfjGohB/qHWRa/lrrWX/mXw==", + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/promise-all-reject-late": { "version": "1.0.1", + "resolved": "https://registry.npmjs.org/promise-all-reject-late/-/promise-all-reject-late-1.0.1.tgz", + "integrity": "sha512-vuf0Lf0lOxyQREH7GDIOUMLS7kz+gs8i6B+Yi8dC68a2sychGrHTJYghMBD6k7eUcH0H5P73EckCA48xijWqXw==", "dev": true, - "license": "MIT", - "engines": { - "node": ">=4" + "license": "ISC", + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/minimalistic-assert": { + "node_modules/promise-call-limit": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/promise-call-limit/-/promise-call-limit-3.0.2.tgz", + "integrity": "sha512-mRPQO2T1QQVw11E7+UdCJu7S61eJVWknzml9sC1heAdj1jxl0fWMBypIt9ZOcLFf8FkG995ZD7RnVk7HH72fZw==", + "dev": true, + "license": "ISC", + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/promise-inflight": { "version": "1.0.1", + "resolved": "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz", + "integrity": "sha512-6zWPyEOFaQBJYcGMHBKTKJ3u6TBsnMFOIZSa6ce1e/ZrrsOlnHRHbabMjLiBYKp+n44X9eUI6VUPaukCXHuG4g==", + "dev": true, "license": "ISC" }, - "node_modules/minimalistic-crypto-utils": { - "version": "1.0.1", + "node_modules/promise-polyfill": { + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/promise-polyfill/-/promise-polyfill-8.3.0.tgz", + "integrity": "sha512-H5oELycFml5yto/atYqmjyigJoAo3+OXwolYiH7OfQuYlAqhxNvTfiNMbV9hsC6Yp83yE5r2KTVmtrG6R9i6Pg==", + "dev": true, "license": "MIT" }, - "node_modules/minimatch": { - "version": "3.1.2", + "node_modules/promise-retry": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/promise-retry/-/promise-retry-2.0.1.tgz", + "integrity": "sha512-y+WKFlBR8BGXnsNlIHFGPZmyDf3DFMoLhaflAnyZgV6rG6xu+JwesTo2Q9R6XwYmtmwAFCkAk3e35jEdoeh/3g==", "dev": true, - "license": "ISC", + "license": "MIT", "dependencies": { - "brace-expansion": "^1.1.7" + "err-code": "^2.0.2", + "retry": "^0.12.0" }, "engines": { - "node": "*" - } - }, - "node_modules/minimist": { - "version": "1.2.8", - "dev": true, - "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">=10" } }, - "node_modules/minimist-options": { - "version": "4.1.0", + "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": { - "arrify": "^1.0.1", - "is-plain-obj": "^1.1.0", - "kind-of": "^6.0.3" + "kleur": "^3.0.3", + "sisteransi": "^1.0.5" }, "engines": { "node": ">= 6" } }, - "node_modules/minipass": { - "version": "5.0.0", + "node_modules/promzard": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/promzard/-/promzard-1.0.2.tgz", + "integrity": "sha512-2FPputGL+mP3jJ3UZg/Dl9YOkovB7DX0oOr+ck5QbZ5MtORtds8k/BZdn+02peDLI8/YWbmzx34k5fA+fHvCVQ==", "dev": true, "license": "ISC", + "dependencies": { + "read": "^3.0.1" + }, "engines": { - "node": ">=8" + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, - "node_modules/minipass-collect": { + "node_modules/protocols": { "version": "2.0.1", + "resolved": "https://registry.npmjs.org/protocols/-/protocols-2.0.1.tgz", + "integrity": "sha512-/XJ368cyBJ7fzLMwLKv1e4vLxOju2MNAIokcr7meSaNcVbWz/CPcW22cP04mwxOErdA5mwjA8Q6w/cdAQxVn7Q==", "dev": true, - "license": "ISC", + "license": "MIT" + }, + "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": { - "minipass": "^7.0.3" + "forwarded": "0.2.0", + "ipaddr.js": "1.9.1" }, "engines": { - "node": ">=16 || 14 >=14.17" + "node": ">= 0.10" } }, - "node_modules/minipass-collect/node_modules/minipass": { - "version": "7.1.2", + "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": "ISC", - "engines": { - "node": ">=16 || 14 >=14.17" - } + "license": "MIT" }, - "node_modules/minipass-fetch": { - "version": "3.0.5", + "node_modules/pseudomap": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz", + "integrity": "sha512-b/YwNhb8lk1Zz2+bXXpS/LK9OisiZZ1SNsSLxN1x2OXVEhW2Ckr/7mWE5vrC1ZTiJlD9g19jWszTmJsB+oEpFQ==", "dev": true, + "license": "ISC" + }, + "node_modules/psl": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/psl/-/psl-1.10.0.tgz", + "integrity": "sha512-KSKHEbjAnpUuAUserOq0FxGXCUrzC3WniuSJhvdbs102rL55266ZcHBqLWOsG30spQMlPdpy7icATiAQehg/iA==", "license": "MIT", "dependencies": { - "minipass": "^7.0.3", - "minipass-sized": "^1.0.3", - "minizlib": "^2.1.2" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - }, - "optionalDependencies": { - "encoding": "^0.1.13" + "punycode": "^2.3.1" } }, - "node_modules/minipass-fetch/node_modules/minipass": { - "version": "7.1.2", + "node_modules/public-encrypt": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/public-encrypt/-/public-encrypt-4.0.3.tgz", + "integrity": "sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q==", "dev": true, - "license": "ISC", + "license": "MIT", + "dependencies": { + "bn.js": "^4.1.0", + "browserify-rsa": "^4.0.0", + "create-hash": "^1.1.0", + "parse-asn1": "^5.0.0", + "randombytes": "^2.0.1", + "safe-buffer": "^5.1.2" + } + }, + "node_modules/punycode": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", + "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", + "license": "MIT", "engines": { - "node": ">=16 || 14 >=14.17" + "node": ">=6" } }, - "node_modules/minipass-flush": { - "version": "1.0.5", + "node_modules/pure-rand": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/pure-rand/-/pure-rand-6.1.0.tgz", + "integrity": "sha512-bVWawvoZoBYpp6yIoQtQXHZjmz35RSVHnUOTefl8Vcjr8snTPY1wnpSPMWekcFwbxI6gtmT7rSYPFvz71ldiOA==", "dev": true, - "license": "ISC", + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/dubzzz" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/fast-check" + } + ], + "license": "MIT" + }, + "node_modules/pushdata-bitcoin": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/pushdata-bitcoin/-/pushdata-bitcoin-1.0.1.tgz", + "integrity": "sha512-hw7rcYTJRAl4olM8Owe8x0fBuJJ+WGbMhQuLWOXEMN3PxPCKQHRkhfL+XG0+iXUmSHjkMmb3Ba55Mt21cZc9kQ==", + "license": "MIT", "dependencies": { - "minipass": "^3.0.0" - }, - "engines": { - "node": ">= 8" + "bitcoin-ops": "^1.3.0" } }, - "node_modules/minipass-flush/node_modules/minipass": { - "version": "3.3.6", + "node_modules/pvtsutils": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/pvtsutils/-/pvtsutils-1.3.5.tgz", + "integrity": "sha512-ARvb14YB9Nm2Xi6nBq1ZX6dAM0FsJnuk+31aUp4TrcZEdKUlSqOqsxJHUPJDNE3qiIp+iUPEIeR6Je/tgV7zsA==", "dev": true, - "license": "ISC", + "license": "MIT", "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=8" + "tslib": "^2.6.1" } }, - "node_modules/minipass-flush/node_modules/yallist": { - "version": "4.0.0", + "node_modules/pvutils": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/pvutils/-/pvutils-1.1.3.tgz", + "integrity": "sha512-pMpnA0qRdFp32b1sJl1wOJNxZLQ2cbQx+k6tjNtZ8CpvVhNqEPRgivZ2WOUev2YMajecdH7ctUPDvEe87nariQ==", "dev": true, - "license": "ISC" + "license": "MIT", + "engines": { + "node": ">=6.0.0" + } }, - "node_modules/minipass-pipeline": { - "version": "1.2.4", - "dev": true, - "license": "ISC", + "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": { - "minipass": "^3.0.0" + "side-channel": "^1.0.6" }, "engines": { - "node": ">=8" + "node": ">=0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/minipass-pipeline/node_modules/minipass": { - "version": "3.3.6", - "dev": true, - "license": "ISC", + "node_modules/query-string": { + "version": "6.14.1", + "resolved": "https://registry.npmjs.org/query-string/-/query-string-6.14.1.tgz", + "integrity": "sha512-XDxAeVmpfu1/6IjyT/gXHOl+S0vQ9owggJ30hhWKdHAsNPOcasn5o9BW0eejZqL2e4vMjhAxoW3jVHcD6mbcYw==", + "license": "MIT", "dependencies": { - "yallist": "^4.0.0" + "decode-uri-component": "^0.2.0", + "filter-obj": "^1.1.0", + "split-on-first": "^1.0.0", + "strict-uri-encode": "^2.0.0" }, "engines": { - "node": ">=8" + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/minipass-pipeline/node_modules/yallist": { - "version": "4.0.0", + "node_modules/querystringify": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.2.0.tgz", + "integrity": "sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==", + "license": "MIT" + }, + "node_modules/queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", "dev": true, - "license": "ISC" + "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/minipass-sized": { - "version": "1.0.3", + "node_modules/quick-lru": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-4.0.1.tgz", + "integrity": "sha512-ARhCpm70fzdcvNQfPoy49IaanKkTlRWF2JMzqhcJbhSFRZv7nPTvZJdcY7301IPmvW+/p0RgIWnQDLJxifsQ7g==", "dev": true, - "license": "ISC", - "dependencies": { - "minipass": "^3.0.0" - }, + "license": "MIT", "engines": { "node": ">=8" } }, - "node_modules/minipass-sized/node_modules/minipass": { - "version": "3.3.6", + "node_modules/quote-unquote": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/quote-unquote/-/quote-unquote-1.0.0.tgz", + "integrity": "sha512-twwRO/ilhlG/FIgYeKGFqyHhoEhqgnKVkcmqMKi2r524gz3ZbDTcyFt38E9xjJI2vT+KbRNHVbnJ/e0I25Azwg==", "dev": true, - "license": "ISC", + "license": "MIT" + }, + "node_modules/randombytes": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", + "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", + "license": "MIT", "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=8" + "safe-buffer": "^5.1.0" } }, - "node_modules/minipass-sized/node_modules/yallist": { - "version": "4.0.0", - "dev": true, - "license": "ISC" - }, - "node_modules/minizlib": { - "version": "2.1.2", + "node_modules/randomfill": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/randomfill/-/randomfill-1.0.4.tgz", + "integrity": "sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw==", "dev": true, "license": "MIT", "dependencies": { - "minipass": "^3.0.0", - "yallist": "^4.0.0" - }, + "randombytes": "^2.0.5", + "safe-buffer": "^5.1.0" + } + }, + "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": ">= 8" + "node": ">= 0.6" } }, - "node_modules/minizlib/node_modules/minipass": { - "version": "3.3.6", - "dev": true, - "license": "ISC", + "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": { - "yallist": "^4.0.0" + "bytes": "3.1.2", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "unpipe": "1.0.0" }, "engines": { - "node": ">=8" + "node": ">= 0.8" } }, - "node_modules/minizlib/node_modules/yallist": { - "version": "4.0.0", + "node_modules/rc": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", + "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", "dev": true, - "license": "ISC" + "license": "(BSD-2-Clause OR MIT OR Apache-2.0)", + "dependencies": { + "deep-extend": "^0.6.0", + "ini": "~1.3.0", + "minimist": "^1.2.0", + "strip-json-comments": "~2.0.1" + }, + "bin": { + "rc": "cli.js" + } }, - "node_modules/mixme": { - "version": "0.5.9", + "node_modules/rc/node_modules/strip-json-comments": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", + "integrity": "sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==", "dev": true, "license": "MIT", "engines": { - "node": ">= 8.0.0" + "node": ">=0.10.0" } }, - "node_modules/mkdirp": { - "version": "1.0.4", + "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", - "bin": { - "mkdirp": "bin/cmd.js" - }, - "engines": { - "node": ">=10" - } + "license": "MIT" }, - "node_modules/mlly": { - "version": "1.7.3", - "resolved": "https://registry.npmjs.org/mlly/-/mlly-1.7.3.tgz", - "integrity": "sha512-xUsx5n/mN0uQf4V548PKQ+YShA4/IW0KI1dZhrNrPCLG+xizETbHTkOa1f8/xut9JRPp8kQuMnz0oqwkTiLo/A==", + "node_modules/read": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/read/-/read-3.0.1.tgz", + "integrity": "sha512-SLBrDU/Srs/9EoWhU5GdbAoxG1GzpQHo/6qiGItaoLJ1thmYpcNIM1qISEUvyHBzfGlWIyd6p2DNi1oV1VmAuw==", "dev": true, - "license": "MIT", + "license": "ISC", "dependencies": { - "acorn": "^8.14.0", - "pathe": "^1.1.2", - "pkg-types": "^1.2.1", - "ufo": "^1.5.4" + "mute-stream": "^1.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, - "node_modules/modify-values": { - "version": "1.0.1", + "node_modules/read-cmd-shim": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/read-cmd-shim/-/read-cmd-shim-4.0.0.tgz", + "integrity": "sha512-yILWifhaSEEytfXI76kB9xEEiG1AiozaCJZ83A87ytjRiN+jVibXjedjCRNjoZviinhG+4UkalO3mWTd8u5O0Q==", "dev": true, - "license": "MIT", + "license": "ISC", "engines": { - "node": ">=0.10.0" + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, - "node_modules/module-definition": { - "version": "3.4.0", + "node_modules/read-package-json-fast": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/read-package-json-fast/-/read-package-json-fast-3.0.2.tgz", + "integrity": "sha512-0J+Msgym3vrLOUB3hzQCuZHII0xkNGCtz/HJH9xZshwv9DbDwkw1KaE3gx/e2J5rpEY5rtOy6cyhKOPrkP7FZw==", "dev": true, - "license": "MIT", + "license": "ISC", "dependencies": { - "ast-module-types": "^3.0.0", - "node-source-walk": "^4.0.0" - }, - "bin": { - "module-definition": "bin/cli.js" + "json-parse-even-better-errors": "^3.0.0", + "npm-normalize-package-bin": "^3.0.0" }, "engines": { - "node": ">=6.0" + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, - "node_modules/module-definition/node_modules/ast-module-types": { + "node_modules/read-pkg": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-3.0.0.tgz", + "integrity": "sha512-BLq/cCO9two+lBgiTYNqD6GdtK8s4NpaWrl6/rCO9w0TUS8oJl7cmToOZfRYllKTISY6nt1U7jQ53brmKqY6BA==", "dev": true, "license": "MIT", + "dependencies": { + "load-json-file": "^4.0.0", + "normalize-package-data": "^2.3.2", + "path-type": "^3.0.0" + }, "engines": { - "node": ">=6.0" + "node": ">=4" } }, - "node_modules/module-definition/node_modules/node-source-walk": { - "version": "4.3.0", + "node_modules/read-pkg-up": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-3.0.0.tgz", + "integrity": "sha512-YFzFrVvpC6frF1sz8psoHDBGF7fLPc+llq/8NB43oagqWkx8ar5zYtsTORtOjw9W2RHLpWP+zTWwBvf1bCmcSw==", "dev": true, "license": "MIT", "dependencies": { - "@babel/parser": "^7.0.0" + "find-up": "^2.0.0", + "read-pkg": "^3.0.0" }, "engines": { - "node": ">=6.0" + "node": ">=4" } }, - "node_modules/module-lookup-amd": { - "version": "7.0.1", + "node_modules/read-pkg-up/node_modules/find-up": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", + "integrity": "sha512-NWzkk0jSJtTt08+FBFMvXoeZnOJD+jTtsRmBYbAIzJdX6l7dLgR7CTubCM5/eDdPUBvLCeVasP1brfVR/9/EZQ==", "dev": true, "license": "MIT", "dependencies": { - "commander": "^2.8.1", - "debug": "^4.1.0", - "glob": "^7.1.6", - "requirejs": "^2.3.5", - "requirejs-config-file": "^4.0.0" - }, - "bin": { - "lookup-amd": "bin/cli.js" + "locate-path": "^2.0.0" }, "engines": { - "node": ">=10.13.0" + "node": ">=4" } }, - "node_modules/module-lookup-amd/node_modules/commander": { - "version": "2.20.3", + "node_modules/read-pkg-up/node_modules/locate-path": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", + "integrity": "sha512-NCI2kiDkyR7VeEKm27Kda/iQHyKJe1Bu0FlTbYp3CqJu+9IFe9bLyAjMxf5ZDDbEg+iMPzB5zYyUTSm8wVTKmA==", "dev": true, - "license": "MIT" - }, - "node_modules/more-entropy": { - "version": "0.0.7", + "license": "MIT", "dependencies": { - "iced-runtime": ">=0.0.1" + "p-locate": "^2.0.0", + "path-exists": "^3.0.0" + }, + "engines": { + "node": ">=4" } }, - "node_modules/mrmime": { - "version": "1.0.1", + "node_modules/read-pkg-up/node_modules/p-limit": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", + "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", "dev": true, "license": "MIT", + "dependencies": { + "p-try": "^1.0.0" + }, "engines": { - "node": ">=10" + "node": ">=4" } }, - "node_modules/ms": { - "version": "2.1.2", - "license": "MIT" - }, - "node_modules/multimatch": { - "version": "5.0.0", + "node_modules/read-pkg-up/node_modules/p-locate": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", + "integrity": "sha512-nQja7m7gSKuewoVRen45CtVfODR3crN3goVQ0DDZ9N3yHxgpkuBhZqsaiotSQRrADUrne346peY7kT3TSACykg==", "dev": true, "license": "MIT", "dependencies": { - "@types/minimatch": "^3.0.3", - "array-differ": "^3.0.0", - "array-union": "^2.1.0", - "arrify": "^2.0.1", - "minimatch": "^3.0.4" + "p-limit": "^1.1.0" }, "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=4" } }, - "node_modules/multimatch/node_modules/arrify": { - "version": "2.0.1", + "node_modules/read-pkg-up/node_modules/p-try": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", + "integrity": "sha512-U1etNYuMJoIz3ZXSrrySFjsXQTWOx2/jdi86L+2pRvph/qMKL6sbcCYdH23fqsbm8TH2Gn0OybpT4eSFlCVHww==", "dev": true, "license": "MIT", "engines": { - "node": ">=8" + "node": ">=4" } }, - "node_modules/mute-stream": { - "version": "0.0.8", - "license": "ISC" - }, - "node_modules/nan": { - "version": "2.17.0", - "license": "MIT" - }, - "node_modules/nanoid": { - "version": "3.3.7", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.7.tgz", - "integrity": "sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==", + "node_modules/read-pkg-up/node_modules/path-exists": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==", "dev": true, - "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": ">=4" } }, - "node_modules/natural-compare": { - "version": "1.4.0", + "node_modules/read-pkg/node_modules/hosted-git-info": { + "version": "2.8.9", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", + "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", "dev": true, - "license": "MIT" + "license": "ISC" }, - "node_modules/natural-compare-lite": { - "version": "1.4.0", + "node_modules/read-pkg/node_modules/load-json-file": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-4.0.0.tgz", + "integrity": "sha512-Kx8hMakjX03tiGTLAIdJ+lL0htKnXjEZN6hk/tozf/WOuYGdZBJrZ+rCJRbVCugsjB3jMLn9746NsQIf5VjBMw==", "dev": true, - "license": "MIT" - }, - "node_modules/negotiator": { - "version": "0.6.3", "license": "MIT", + "dependencies": { + "graceful-fs": "^4.1.2", + "parse-json": "^4.0.0", + "pify": "^3.0.0", + "strip-bom": "^3.0.0" + }, "engines": { - "node": ">= 0.6" + "node": ">=4" } }, - "node_modules/neo-async": { - "version": "2.6.2", + "node_modules/read-pkg/node_modules/normalize-package-data": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", + "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", "dev": true, - "license": "MIT" + "license": "BSD-2-Clause", + "dependencies": { + "hosted-git-info": "^2.1.4", + "resolve": "^1.10.0", + "semver": "2 || 3 || 4 || 5", + "validate-npm-package-license": "^3.0.1" + } }, - "node_modules/node-fetch": { - "version": "2.6.12", + "node_modules/read-pkg/node_modules/parse-json": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", + "integrity": "sha512-aOIos8bujGN93/8Ox/jPLh7RwVnPEysynVFE+fQZyg6jKELEHwzgKdLRFHUgXJL6kylijVSBC4BvN9OmsB48Rw==", + "dev": true, "license": "MIT", "dependencies": { - "whatwg-url": "^5.0.0" + "error-ex": "^1.3.1", + "json-parse-better-errors": "^1.0.1" }, "engines": { - "node": "4.x || >=6.0.0" - }, - "peerDependencies": { - "encoding": "^0.1.0" - }, - "peerDependenciesMeta": { - "encoding": { - "optional": true - } + "node": ">=4" } }, - "node_modules/node-gyp": { - "version": "10.1.0", + "node_modules/read-pkg/node_modules/path-type": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz", + "integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==", "dev": true, "license": "MIT", "dependencies": { - "env-paths": "^2.2.0", - "exponential-backoff": "^3.1.1", - "glob": "^10.3.10", - "graceful-fs": "^4.2.6", - "make-fetch-happen": "^13.0.0", - "nopt": "^7.0.0", - "proc-log": "^3.0.0", - "semver": "^7.3.5", - "tar": "^6.1.2", - "which": "^4.0.0" - }, - "bin": { - "node-gyp": "bin/node-gyp.js" + "pify": "^3.0.0" }, "engines": { - "node": "^16.14.0 || >=18.0.0" + "node": ">=4" } }, - "node_modules/node-gyp/node_modules/brace-expansion": { - "version": "2.0.1", + "node_modules/read-pkg/node_modules/pify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==", "dev": true, "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0" + "engines": { + "node": ">=4" } }, - "node_modules/node-gyp/node_modules/glob": { - "version": "10.4.3", + "node_modules/read-pkg/node_modules/semver": { + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", + "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", "dev": true, "license": "ISC", - "dependencies": { - "foreground-child": "^3.1.0", - "jackspeak": "^3.1.2", - "minimatch": "^9.0.4", - "minipass": "^7.1.2", - "package-json-from-dist": "^1.0.0", - "path-scurry": "^1.11.1" - }, "bin": { - "glob": "dist/esm/bin.mjs" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" + "semver": "bin/semver" } }, - "node_modules/node-gyp/node_modules/isexe": { - "version": "3.1.1", + "node_modules/read-pkg/node_modules/strip-bom": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==", "dev": true, - "license": "ISC", + "license": "MIT", "engines": { - "node": ">=16" + "node": ">=4" } }, - "node_modules/node-gyp/node_modules/jackspeak": { - "version": "3.4.1", + "node_modules/read-yaml-file": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/read-yaml-file/-/read-yaml-file-1.1.0.tgz", + "integrity": "sha512-VIMnQi/Z4HT2Fxuwg5KrY174U1VdUIASQVWXXyqtNRtxSr9IYkn1rsI6Tb6HsrHCmB7gVpNwX6JxPTHcH6IoTA==", "dev": true, - "license": "BlueOak-1.0.0", + "license": "MIT", "dependencies": { - "@isaacs/cliui": "^8.0.2" + "graceful-fs": "^4.1.5", + "js-yaml": "^3.6.1", + "pify": "^4.0.1", + "strip-bom": "^3.0.0" }, "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - }, - "optionalDependencies": { - "@pkgjs/parseargs": "^0.11.0" + "node": ">=6" } }, - "node_modules/node-gyp/node_modules/minimatch": { - "version": "9.0.5", + "node_modules/read-yaml-file/node_modules/pify": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", + "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", "dev": true, - "license": "ISC", - "dependencies": { - "brace-expansion": "^2.0.1" - }, + "license": "MIT", "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" + "node": ">=6" } }, - "node_modules/node-gyp/node_modules/minipass": { - "version": "7.1.2", + "node_modules/read-yaml-file/node_modules/strip-bom": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==", "dev": true, - "license": "ISC", + "license": "MIT", "engines": { - "node": ">=16 || 14 >=14.17" + "node": ">=4" } }, - "node_modules/node-gyp/node_modules/proc-log": { - "version": "3.0.0", + "node_modules/read/node_modules/mute-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-1.0.0.tgz", + "integrity": "sha512-avsJQhyd+680gKXyG/sQc0nXaC6rBkPOfyHYcFb9+hdkqQkR9bdnkJ0AMZhke0oesPqIO+mFFJ+IdBc7mst4IA==", "dev": true, "license": "ISC", "engines": { "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, - "node_modules/node-gyp/node_modules/which": { - "version": "4.0.0", - "dev": true, - "license": "ISC", + "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==", + "license": "MIT", "dependencies": { - "isexe": "^3.1.1" - }, - "bin": { - "node-which": "bin/which.js" + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" }, "engines": { - "node": "^16.13.0 || >=18.0.0" + "node": ">= 6" } }, - "node_modules/node-int64": { - "version": "0.4.0", - "dev": true, - "license": "MIT" - }, - "node_modules/node-machine-id": { - "version": "1.1.12", - "dev": true, - "license": "MIT" - }, - "node_modules/node-releases": { - "version": "2.0.13", - "dev": true, - "license": "MIT" - }, - "node_modules/node-source-walk": { - "version": "5.0.2", + "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": { - "@babel/parser": "^7.21.4" + "resolve": "^1.20.0" }, "engines": { - "node": ">=12" + "node": ">= 10.13.0" } }, - "node_modules/nopt": { - "version": "7.2.1", + "node_modules/redent": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/redent/-/redent-3.0.0.tgz", + "integrity": "sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==", "dev": true, - "license": "ISC", + "license": "MIT", "dependencies": { - "abbrev": "^2.0.0" - }, - "bin": { - "nopt": "bin/nopt.js" + "indent-string": "^4.0.0", + "strip-indent": "^3.0.0" }, "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + "node": ">=8" } }, - "node_modules/normalize-package-data": { - "version": "3.0.3", + "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, - "license": "BSD-2-Clause", + "license": "MIT" + }, + "node_modules/regexp.prototype.flags": { + "version": "1.5.3", + "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.3.tgz", + "integrity": "sha512-vqlC04+RQoFalODCbCumG2xIOvapzVMHwsyIGM/SIE8fRhFFsXeH8/QQ+s0T0kDAhKc4k30s73/0ydkHQz6HlQ==", + "dev": true, + "license": "MIT", "dependencies": { - "hosted-git-info": "^4.0.1", - "is-core-module": "^2.5.0", - "semver": "^7.3.4", - "validate-npm-package-license": "^3.0.1" + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-errors": "^1.3.0", + "set-function-name": "^2.0.2" }, "engines": { - "node": ">=10" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/normalize-path": { - "version": "3.0.0", + "node_modules/regexpp": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz", + "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==", "dev": true, "license": "MIT", "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/npm-bundled": { - "version": "1.1.2", - "dev": true, - "license": "ISC", - "dependencies": { - "npm-normalize-package-bin": "^1.0.1" + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/mysticatea" } }, - "node_modules/npm-install-checks": { - "version": "6.3.0", - "dev": true, - "license": "BSD-2-Clause", + "node_modules/request": { + "version": "2.88.2", + "resolved": "https://registry.npmjs.org/request/-/request-2.88.2.tgz", + "integrity": "sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==", + "deprecated": "request has been deprecated, see https://github.com/request/request/issues/3142", + "license": "Apache-2.0", "dependencies": { - "semver": "^7.1.1" + "aws-sign2": "~0.7.0", + "aws4": "^1.8.0", + "caseless": "~0.12.0", + "combined-stream": "~1.0.6", + "extend": "~3.0.2", + "forever-agent": "~0.6.1", + "form-data": "~2.3.2", + "har-validator": "~5.1.3", + "http-signature": "~1.2.0", + "is-typedarray": "~1.0.0", + "isstream": "~0.1.2", + "json-stringify-safe": "~5.0.1", + "mime-types": "~2.1.19", + "oauth-sign": "~0.9.0", + "performance-now": "^2.1.0", + "qs": "~6.5.2", + "safe-buffer": "^5.1.2", + "tough-cookie": "~2.5.0", + "tunnel-agent": "^0.6.0", + "uuid": "^3.3.2" }, "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + "node": ">= 6" } }, - "node_modules/npm-normalize-package-bin": { - "version": "1.0.1", - "dev": true, - "license": "ISC" - }, - "node_modules/npm-package-arg": { - "version": "11.0.2", - "dev": true, - "license": "ISC", - "dependencies": { - "hosted-git-info": "^7.0.0", - "proc-log": "^4.0.0", - "semver": "^7.3.5", - "validate-npm-package-name": "^5.0.0" - }, - "engines": { - "node": "^16.14.0 || >=18.0.0" - } - }, - "node_modules/npm-package-arg/node_modules/hosted-git-info": { - "version": "7.0.2", - "dev": true, - "license": "ISC", + "node_modules/request/node_modules/form-data": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", + "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", + "license": "MIT", "dependencies": { - "lru-cache": "^10.0.1" + "asynckit": "^0.4.0", + "combined-stream": "^1.0.6", + "mime-types": "^2.1.12" }, "engines": { - "node": "^16.14.0 || >=18.0.0" + "node": ">= 0.12" } }, - "node_modules/npm-package-arg/node_modules/lru-cache": { - "version": "10.4.0", - "dev": true, - "license": "ISC", + "node_modules/request/node_modules/qs": { + "version": "6.5.3", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.3.tgz", + "integrity": "sha512-qxXIEh4pCGfHICj1mAJQ2/2XVZkjCDTcEgfoSQxc/fYivUZxTkk7L3bDBJSoNrEzXI17oUO5Dp07ktqE5KzczA==", + "license": "BSD-3-Clause", "engines": { - "node": ">=18" + "node": ">=0.6" } }, - "node_modules/npm-packlist": { - "version": "8.0.2", - "dev": true, - "license": "ISC", - "dependencies": { - "ignore-walk": "^6.0.4" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + "node_modules/request/node_modules/uuid": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", + "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==", + "deprecated": "Please upgrade to version 7 or higher. Older versions may use Math.random() in certain circumstances, which is known to be problematic. See https://v8.dev/blog/math-random for details.", + "license": "MIT", + "bin": { + "uuid": "bin/uuid" } }, - "node_modules/npm-pick-manifest": { - "version": "9.0.1", + "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": "ISC", - "dependencies": { - "npm-install-checks": "^6.0.0", - "npm-normalize-package-bin": "^3.0.0", - "npm-package-arg": "^11.0.0", - "semver": "^7.3.5" - }, + "license": "MIT", "engines": { - "node": "^16.14.0 || >=18.0.0" + "node": ">=0.10.0" } }, - "node_modules/npm-pick-manifest/node_modules/npm-normalize-package-bin": { - "version": "3.0.1", + "node_modules/require-from-string": { + "version": "2.0.2", + "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": "ISC", + "license": "MIT", "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + "node": ">=0.10.0" } }, - "node_modules/npm-registry-fetch": { - "version": "17.1.0", + "node_modules/requirejs": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/requirejs/-/requirejs-2.3.7.tgz", + "integrity": "sha512-DouTG8T1WanGok6Qjg2SXuCMzszOo0eHeH9hDZ5Y4x8Je+9JB38HdTLT4/VA8OaUhBa0JPVHJ0pyBkM1z+pDsw==", "dev": true, - "license": "ISC", - "dependencies": { - "@npmcli/redact": "^2.0.0", - "jsonparse": "^1.3.1", - "make-fetch-happen": "^13.0.0", - "minipass": "^7.0.2", - "minipass-fetch": "^3.0.0", - "minizlib": "^2.1.2", - "npm-package-arg": "^11.0.0", - "proc-log": "^4.0.0" + "license": "MIT", + "bin": { + "r_js": "bin/r.js", + "r.js": "bin/r.js" }, "engines": { - "node": "^16.14.0 || >=18.0.0" - } - }, - "node_modules/npm-registry-fetch/node_modules/minipass": { - "version": "7.1.2", - "dev": true, - "license": "ISC", - "engines": { - "node": ">=16 || 14 >=14.17" + "node": ">=0.4.0" } }, - "node_modules/npm-run-path": { - "version": "4.0.1", + "node_modules/requirejs-config-file": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/requirejs-config-file/-/requirejs-config-file-4.0.0.tgz", + "integrity": "sha512-jnIre8cbWOyvr8a5F2KuqBnY+SDA4NXr/hzEZJG79Mxm2WiFQz2dzhC8ibtPJS7zkmBEl1mxSwp5HhC1W4qpxw==", "dev": true, "license": "MIT", "dependencies": { - "path-key": "^3.0.0" + "esprima": "^4.0.0", + "stringify-object": "^3.2.1" }, "engines": { - "node": ">=8" - } - }, - "node_modules/nth-check": { - "version": "2.0.1", - "license": "BSD-2-Clause", - "dependencies": { - "boolbase": "^1.0.0" - }, - "funding": { - "url": "https://github.com/fb55/nth-check?sponsor=1" + "node": ">=10.13.0" } }, - "node_modules/nwsapi": { - "version": "2.2.7", - "dev": true, + "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==", "license": "MIT" }, - "node_modules/nx": { - "version": "19.4.1", + "node_modules/resolve": { + "version": "1.22.8", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz", + "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==", "dev": true, - "hasInstallScript": true, "license": "MIT", "dependencies": { - "@nrwl/tao": "19.4.1", - "@yarnpkg/lockfile": "^1.1.0", - "@yarnpkg/parsers": "3.0.0-rc.46", - "@zkochan/js-yaml": "0.0.7", - "axios": "^1.6.0", - "chalk": "^4.1.0", - "cli-cursor": "3.1.0", - "cli-spinners": "2.6.1", - "cliui": "^8.0.1", - "dotenv": "~16.4.5", - "dotenv-expand": "~11.0.6", - "enquirer": "~2.3.6", - "figures": "3.2.0", - "flat": "^5.0.2", - "front-matter": "^4.0.2", - "fs-extra": "^11.1.0", - "ignore": "^5.0.4", - "jest-diff": "^29.4.1", - "jsonc-parser": "3.2.0", - "lines-and-columns": "~2.0.3", - "minimatch": "9.0.3", - "node-machine-id": "1.1.12", - "npm-run-path": "^4.0.1", - "open": "^8.4.0", - "ora": "5.3.0", - "semver": "^7.5.3", - "string-width": "^4.2.3", - "strong-log-transformer": "^2.1.0", - "tar-stream": "~2.2.0", - "tmp": "~0.2.1", - "tsconfig-paths": "^4.1.2", - "tslib": "^2.3.0", - "yargs": "^17.6.2", - "yargs-parser": "21.1.1" + "is-core-module": "^2.13.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" }, "bin": { - "nx": "bin/nx.js", - "nx-cloud": "bin/nx-cloud.js" - }, - "optionalDependencies": { - "@nx/nx-darwin-arm64": "19.4.1", - "@nx/nx-darwin-x64": "19.4.1", - "@nx/nx-freebsd-x64": "19.4.1", - "@nx/nx-linux-arm-gnueabihf": "19.4.1", - "@nx/nx-linux-arm64-gnu": "19.4.1", - "@nx/nx-linux-arm64-musl": "19.4.1", - "@nx/nx-linux-x64-gnu": "19.4.1", - "@nx/nx-linux-x64-musl": "19.4.1", - "@nx/nx-win32-arm64-msvc": "19.4.1", - "@nx/nx-win32-x64-msvc": "19.4.1" - }, - "peerDependencies": { - "@swc-node/register": "^1.8.0", - "@swc/core": "^1.3.85" + "resolve": "bin/resolve" }, - "peerDependenciesMeta": { - "@swc-node/register": { - "optional": true - }, - "@swc/core": { - "optional": true - } + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/nx/node_modules/ansi-styles": { - "version": "4.3.0", + "node_modules/resolve-cwd": { + "version": "3.0.0", + "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": { - "color-convert": "^2.0.1" + "resolve-from": "^5.0.0" }, "engines": { "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/nx/node_modules/brace-expansion": { - "version": "2.0.1", + "node_modules/resolve-dependency-path": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/resolve-dependency-path/-/resolve-dependency-path-2.0.0.tgz", + "integrity": "sha512-DIgu+0Dv+6v2XwRaNWnumKu7GPufBBOr5I1gRPJHkvghrfCGOooJODFvgFimX/KRxk9j0whD2MnKHzM1jYvk9w==", "dev": true, "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0" + "engines": { + "node": ">=6.0.0" } }, - "node_modules/nx/node_modules/chalk": { - "version": "4.1.2", + "node_modules/resolve-from": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", "dev": true, "license": "MIT", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" + "node": ">=8" } }, - "node_modules/nx/node_modules/cliui": { - "version": "8.0.1", + "node_modules/resolve-global": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/resolve-global/-/resolve-global-1.0.0.tgz", + "integrity": "sha512-zFa12V4OLtT5XUX/Q4VLvTfBf+Ok0SPc1FNGM/z9ctUdiU618qwKpWnd0CHs3+RqROfyEg/DhuHbMWYqcgljEw==", "dev": true, - "license": "ISC", + "license": "MIT", "dependencies": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.1", - "wrap-ansi": "^7.0.0" + "global-dirs": "^0.1.1" }, "engines": { - "node": ">=12" + "node": ">=8" } }, - "node_modules/nx/node_modules/color-convert": { - "version": "2.0.1", + "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", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" + "funding": { + "url": "https://github.com/privatenumber/resolve-pkg-maps?sponsor=1" } }, - "node_modules/nx/node_modules/color-name": { - "version": "1.1.4", + "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==", "dev": true, - "license": "MIT" + "license": "MIT", + "engines": { + "node": ">=10" + } }, - "node_modules/nx/node_modules/enquirer": { - "version": "2.3.6", - "dev": true, + "node_modules/restore-cursor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", + "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", "license": "MIT", "dependencies": { - "ansi-colors": "^4.1.1" + "onetime": "^5.1.0", + "signal-exit": "^3.0.2" }, "engines": { - "node": ">=8.6" + "node": ">=8" } }, - "node_modules/nx/node_modules/fs-extra": { - "version": "11.2.0", + "node_modules/retry": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz", + "integrity": "sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==", "dev": true, "license": "MIT", - "dependencies": { - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - }, "engines": { - "node": ">=14.14" + "node": ">= 4" } }, - "node_modules/nx/node_modules/has-flag": { - "version": "4.0.0", + "node_modules/reusify": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", "dev": true, "license": "MIT", "engines": { - "node": ">=8" + "iojs": ">=1.0.0", + "node": ">=0.10.0" } }, - "node_modules/nx/node_modules/jsonfile": { - "version": "6.1.0", + "node_modules/rimraf": { + "version": "5.0.10", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-5.0.10.tgz", + "integrity": "sha512-l0OE8wL34P4nJH/H2ffoaniAokM2qSmrtXHmlpvYr5AVVX8msAyW0l8NVJFDxlSK4u3Uh/f41cQheDVdnYijwQ==", "dev": true, - "license": "MIT", + "license": "ISC", "dependencies": { - "universalify": "^2.0.0" + "glob": "^10.3.7" }, - "optionalDependencies": { - "graceful-fs": "^4.1.6" + "bin": { + "rimraf": "dist/esm/bin.mjs" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/nx/node_modules/minimatch": { - "version": "9.0.3", + "node_modules/rimraf/node_modules/glob": { + "version": "10.4.5", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz", + "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==", "dev": true, "license": "ISC", "dependencies": { - "brace-expansion": "^2.0.1" + "foreground-child": "^3.1.0", + "jackspeak": "^3.1.2", + "minimatch": "^9.0.4", + "minipass": "^7.1.2", + "package-json-from-dist": "^1.0.0", + "path-scurry": "^1.11.1" }, - "engines": { - "node": ">=16 || 14 >=14.17" + "bin": { + "glob": "dist/esm/bin.mjs" }, "funding": { "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/nx/node_modules/ora": { - "version": "5.3.0", + "node_modules/rimraf/node_modules/minimatch": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", "dev": true, - "license": "MIT", + "license": "ISC", "dependencies": { - "bl": "^4.0.3", - "chalk": "^4.1.0", - "cli-cursor": "^3.1.0", - "cli-spinners": "^2.5.0", - "is-interactive": "^1.0.0", - "log-symbols": "^4.0.0", - "strip-ansi": "^6.0.0", - "wcwidth": "^1.0.1" + "brace-expansion": "^2.0.1" }, "engines": { - "node": ">=10" + "node": ">=16 || 14 >=14.17" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/nx/node_modules/strip-bom": { - "version": "3.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=4" + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/nx/node_modules/supports-color": { - "version": "7.2.0", - "dev": true, + "node_modules/ripemd160": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.2.tgz", + "integrity": "sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==", "license": "MIT", "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" + "hash-base": "^3.0.0", + "inherits": "^2.0.1" } }, - "node_modules/nx/node_modules/tmp": { - "version": "0.2.3", - "dev": true, - "license": "MIT", + "node_modules/ripemd160-min": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/ripemd160-min/-/ripemd160-min-0.0.6.tgz", + "integrity": "sha512-+GcJgQivhs6S9qvLogusiTcS9kQUfgR75whKuy5jIhuiOfQuJ8fjqxV6EGD5duH1Y/FawFUMtMhyeq3Fbnib8A==", "engines": { - "node": ">=14.14" + "node": ">=8" } }, - "node_modules/nx/node_modules/tsconfig-paths": { - "version": "4.2.0", + "node_modules/rollup": { + "version": "4.27.3", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.27.3.tgz", + "integrity": "sha512-SLsCOnlmGt9VoZ9Ek8yBK8tAdmPHeppkw+Xa7yDlCEhDTvwYei03JlWo1fdc7YTfLZ4tD8riJCUyAgTbszk1fQ==", "dev": true, "license": "MIT", "dependencies": { - "json5": "^2.2.2", - "minimist": "^1.2.6", - "strip-bom": "^3.0.0" + "@types/estree": "1.0.6" + }, + "bin": { + "rollup": "dist/bin/rollup" }, "engines": { - "node": ">=6" + "node": ">=18.0.0", + "npm": ">=8.0.0" + }, + "optionalDependencies": { + "@rollup/rollup-android-arm-eabi": "4.27.3", + "@rollup/rollup-android-arm64": "4.27.3", + "@rollup/rollup-darwin-arm64": "4.27.3", + "@rollup/rollup-darwin-x64": "4.27.3", + "@rollup/rollup-freebsd-arm64": "4.27.3", + "@rollup/rollup-freebsd-x64": "4.27.3", + "@rollup/rollup-linux-arm-gnueabihf": "4.27.3", + "@rollup/rollup-linux-arm-musleabihf": "4.27.3", + "@rollup/rollup-linux-arm64-gnu": "4.27.3", + "@rollup/rollup-linux-arm64-musl": "4.27.3", + "@rollup/rollup-linux-powerpc64le-gnu": "4.27.3", + "@rollup/rollup-linux-riscv64-gnu": "4.27.3", + "@rollup/rollup-linux-s390x-gnu": "4.27.3", + "@rollup/rollup-linux-x64-gnu": "4.27.3", + "@rollup/rollup-linux-x64-musl": "4.27.3", + "@rollup/rollup-win32-arm64-msvc": "4.27.3", + "@rollup/rollup-win32-ia32-msvc": "4.27.3", + "@rollup/rollup-win32-x64-msvc": "4.27.3", + "fsevents": "~2.3.2" } }, - "node_modules/nx/node_modules/universalify": { - "version": "2.0.1", - "dev": true, + "node_modules/run-async": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.4.1.tgz", + "integrity": "sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==", "license": "MIT", "engines": { - "node": ">= 10.0.0" + "node": ">=0.12.0" } }, - "node_modules/nx/node_modules/yargs-parser": { - "version": "21.1.1", + "node_modules/run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", "dev": true, - "license": "ISC", - "engines": { - "node": ">=12" + "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", + "dependencies": { + "queue-microtask": "^1.2.2" } }, - "node_modules/oauth-sign": { - "version": "0.9.0", + "node_modules/rxjs": { + "version": "6.6.7", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz", + "integrity": "sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==", "license": "Apache-2.0", + "dependencies": { + "tslib": "^1.9.0" + }, "engines": { - "node": "*" + "npm": ">=2.0.0" } }, - "node_modules/object-assign": { - "version": "4.1.1", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } + "node_modules/rxjs/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "license": "0BSD" }, - "node_modules/object-inspect": { - "version": "1.12.3", + "node_modules/safe-array-concat": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.1.2.tgz", + "integrity": "sha512-vj6RsCsWBCf19jIeHEfkRMw8DPiBb+DMXklQ/1SGDHOMlHdPUkZXFQ2YdplS23zESTijAcurb1aSgJA3AgMu1Q==", + "dev": true, "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "get-intrinsic": "^1.2.4", + "has-symbols": "^1.0.3", + "isarray": "^2.0.5" + }, + "engines": { + "node": ">=0.4" + }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/object-is": { - "version": "1.1.5", + "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/safe-regex-test": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.3.tgz", + "integrity": "sha512-CdASjNJPvRa7roO6Ra/gLYBTzYzzPyyBXxIMdGW3USQLyjWEls2RgW5UBTXaQVp+OrpeCK3bLem8smtmheoRuw==", "dev": true, "license": "MIT", "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3" + "call-bind": "^1.0.6", + "es-errors": "^1.3.0", + "is-regex": "^1.1.4" }, "engines": { "node": ">= 0.4" @@ -17455,4610 +19456,2738 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/object-keys": { - "version": "1.1.1", - "dev": true, + "node_modules/safe-stable-stringify": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/safe-stable-stringify/-/safe-stable-stringify-2.5.0.tgz", + "integrity": "sha512-b3rppTKm9T+PsVCBEOUR46GWI7fdOs00VKZ1+9c1EWDaDMvjQc6tUwuFyIprgGgTcWoVHSKrU8H31ZHA2e0RHA==", "license": "MIT", "engines": { - "node": ">= 0.4" + "node": ">=10" } }, - "node_modules/object.assign": { - "version": "4.1.4", + "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/sass-lookup": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/sass-lookup/-/sass-lookup-3.0.0.tgz", + "integrity": "sha512-TTsus8CfFRn1N44bvdEai1no6PqdmDiQUiqW5DlpmtT+tYnIt1tXtDIph5KA1efC+LmioJXSnCtUVpcK9gaKIg==", "dev": true, "license": "MIT", "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "has-symbols": "^1.0.3", - "object-keys": "^1.1.1" + "commander": "^2.16.0" }, - "engines": { - "node": ">= 0.4" + "bin": { + "sass-lookup": "bin/cli.js" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "engines": { + "node": ">=6.0.0" } }, - "node_modules/object.fromentries": { - "version": "2.0.6", + "node_modules/sass-lookup/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, - "license": "MIT", + "license": "MIT" + }, + "node_modules/saxes": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/saxes/-/saxes-5.0.1.tgz", + "integrity": "sha512-5LBh1Tls8c9xgGjw3QrMwETmTMVk0oFgvrFSvWx62llR2hcEInrKNZ2GZCCuuy2lvWrdl5jhbpeqc5hRYKFOcw==", + "dev": true, + "license": "ISC", "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4" + "xmlchars": "^2.2.0" }, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">=10" } }, - "node_modules/object.groupby": { - "version": "1.0.0", - "dev": true, + "node_modules/sbtc": { + "resolved": "packages/sbtc", + "link": true + }, + "node_modules/schema-inspector": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/schema-inspector/-/schema-inspector-2.0.2.tgz", + "integrity": "sha512-phq0/I55VGzl4kmq3Tp1jlY75Xtc1o7wfGmOEFTgGyucI6zIdEsiM7MJu9jjQf2SfMreqSbTi/ktUsEMs6pV7A==", "license": "MIT", "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.21.2", - "get-intrinsic": "^1.2.1" + "async": "~2.6.3" } }, - "node_modules/object.values": { - "version": "1.1.6", - "dev": true, + "node_modules/schema-inspector/node_modules/async": { + "version": "2.6.4", + "resolved": "https://registry.npmjs.org/async/-/async-2.6.4.tgz", + "integrity": "sha512-mzo5dfJYwAn29PeiJ0zvwTo04zj8HDJj0Mn8TD7sno7q12prdbnasKJHhkm2c1LgrhlJ0teaea8860oxi51mGA==", "license": "MIT", "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "lodash": "^4.17.14" } }, - "node_modules/on-finished": { - "version": "2.4.1", + "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, "license": "MIT", "dependencies": { - "ee-first": "1.1.1" + "@types/json-schema": "^7.0.8", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" }, "engines": { - "node": ">= 0.8" + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" } }, - "node_modules/once": { - "version": "1.4.0", + "node_modules/schema-utils/node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", "dev": true, - "license": "ISC", - "dependencies": { - "wrappy": "1" - } - }, - "node_modules/one-time": { - "version": "1.0.0", - "license": "MIT", - "dependencies": { - "fn.name": "1.x.x" - } - }, - "node_modules/onetime": { - "version": "5.1.2", "license": "MIT", "dependencies": { - "mimic-fn": "^2.1.0" - }, - "engines": { - "node": ">=6" + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" } }, - "node_modules/open": { - "version": "8.4.2", + "node_modules/schema-utils/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, "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" + "peerDependencies": { + "ajv": "^6.9.1" } }, - "node_modules/opener": { - "version": "1.5.2", + "node_modules/schema-utils/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, - "license": "(WTFPL OR MIT)", + "license": "MIT" + }, + "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, + "license": "ISC", "bin": { - "opener": "bin/opener-bin.js" + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" } }, - "node_modules/optionator": { - "version": "0.9.3", + "node_modules/semver-compare": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/semver-compare/-/semver-compare-1.0.0.tgz", + "integrity": "sha512-YM3/ITh2MJ5MtzaM429anh+x2jiLVjqILF4m4oyQB18W7Ggea7BfqdH/wGMK7dDiMghv/6WG7znWMwUDzJiXow==", "dev": true, + "license": "MIT" + }, + "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": { - "@aashutoshrathi/word-wrap": "^1.2.3", - "deep-is": "^0.1.3", - "fast-levenshtein": "^2.0.6", - "levn": "^0.4.1", - "prelude-ls": "^1.2.1", - "type-check": "^0.4.0" + "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/ora": { - "version": "5.4.1", - "dev": true, + "node_modules/send/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": { - "bl": "^4.1.0", - "chalk": "^4.1.0", - "cli-cursor": "^3.1.0", - "cli-spinners": "^2.5.0", - "is-interactive": "^1.0.0", - "is-unicode-supported": "^0.1.0", - "log-symbols": "^4.1.0", - "strip-ansi": "^6.0.0", - "wcwidth": "^1.0.1" - }, + "ms": "2.0.0" + } + }, + "node_modules/send/node_modules/debug/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/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": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">= 0.8" } }, - "node_modules/ora/node_modules/ansi-styles": { - "version": "4.3.0", + "node_modules/serialize-javascript": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.2.tgz", + "integrity": "sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==", "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "randombytes": "^2.1.0" + } + }, + "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": { - "color-convert": "^2.0.1" + "encodeurl": "~2.0.0", + "escape-html": "~1.0.3", + "parseurl": "~1.3.3", + "send": "0.19.0" }, "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "node": ">= 0.8.0" } }, - "node_modules/ora/node_modules/chalk": { - "version": "4.1.2", + "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, + "license": "ISC" + }, + "node_modules/set-function-length": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz", + "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==", "license": "MIT", "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" + "define-data-property": "^1.1.4", + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.4", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.2" }, "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" + "node": ">= 0.4" } }, - "node_modules/ora/node_modules/color-convert": { - "version": "2.0.1", + "node_modules/set-function-name": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/set-function-name/-/set-function-name-2.0.2.tgz", + "integrity": "sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==", "dev": true, "license": "MIT", "dependencies": { - "color-name": "~1.1.4" + "define-data-property": "^1.1.4", + "es-errors": "^1.3.0", + "functions-have-names": "^1.2.3", + "has-property-descriptors": "^1.0.2" }, "engines": { - "node": ">=7.0.0" + "node": ">= 0.4" } }, - "node_modules/ora/node_modules/color-name": { - "version": "1.1.4", - "dev": true, - "license": "MIT" + "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/ora/node_modules/has-flag": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" + "node_modules/sha.js": { + "version": "2.4.11", + "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz", + "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==", + "license": "(MIT AND BSD-3-Clause)", + "dependencies": { + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" + }, + "bin": { + "sha.js": "bin.js" } }, - "node_modules/ora/node_modules/supports-color": { - "version": "7.2.0", + "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": { - "has-flag": "^4.0.0" + "kind-of": "^6.0.2" }, "engines": { "node": ">=8" } }, - "node_modules/os-tmpdir": { - "version": "1.0.2", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/outdent": { - "version": "0.5.0", - "dev": true, - "license": "MIT" - }, - "node_modules/p-filter": { - "version": "2.1.0", + "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": { - "p-map": "^2.0.0" + "shebang-regex": "^3.0.0" }, "engines": { "node": ">=8" } }, - "node_modules/p-filter/node_modules/p-map": { - "version": "2.1.0", + "node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", "dev": true, "license": "MIT", "engines": { - "node": ">=6" + "node": ">=8" } }, - "node_modules/p-finally": { - "version": "1.0.0", + "node_modules/shiki": { + "version": "0.14.7", + "resolved": "https://registry.npmjs.org/shiki/-/shiki-0.14.7.tgz", + "integrity": "sha512-dNPAPrxSc87ua2sKJ3H5dQ/6ZaY8RNnaAqK+t0eG7p0Soi2ydiqbGOTaZCqaYvA/uZYfS1LJnemt3Q+mSfcPCg==", "dev": true, "license": "MIT", - "engines": { - "node": ">=4" + "dependencies": { + "ansi-sequence-parser": "^1.1.0", + "jsonc-parser": "^3.2.0", + "vscode-oniguruma": "^1.7.0", + "vscode-textmate": "^8.0.0" } }, - "node_modules/p-limit": { - "version": "2.3.0", - "dev": true, + "node_modules/side-channel": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.6.tgz", + "integrity": "sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==", "license": "MIT", "dependencies": { - "p-try": "^2.0.0" + "call-bind": "^1.0.7", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.4", + "object-inspect": "^1.13.1" }, "engines": { - "node": ">=6" + "node": ">= 0.4" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/p-locate": { - "version": "5.0.0", + "node_modules/siginfo": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/siginfo/-/siginfo-2.0.0.tgz", + "integrity": "sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g==", "dev": true, - "license": "MIT", + "license": "ISC" + }, + "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==", + "license": "ISC" + }, + "node_modules/sigstore": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/sigstore/-/sigstore-2.3.1.tgz", + "integrity": "sha512-8G+/XDU8wNsJOQS5ysDVO0Etg9/2uA5gR9l4ZwijjlwxBcrU6RPfwi2+jJmbP+Ap1Hlp/nVAaEO4Fj22/SL2gQ==", + "dev": true, + "license": "Apache-2.0", "dependencies": { - "p-limit": "^3.0.2" + "@sigstore/bundle": "^2.3.2", + "@sigstore/core": "^1.0.0", + "@sigstore/protobuf-specs": "^0.3.2", + "@sigstore/sign": "^2.3.2", + "@sigstore/tuf": "^2.3.4", + "@sigstore/verify": "^1.2.1" }, "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": "^16.14.0 || >=18.0.0" } }, - "node_modules/p-locate/node_modules/p-limit": { - "version": "3.1.0", - "dev": true, + "node_modules/simple-swizzle": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz", + "integrity": "sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg==", "license": "MIT", "dependencies": { - "yocto-queue": "^0.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "is-arrayish": "^0.3.1" } }, - "node_modules/p-map": { - "version": "4.0.0", + "node_modules/simple-swizzle/node_modules/is-arrayish": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz", + "integrity": "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==", + "license": "MIT" + }, + "node_modules/sirv": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/sirv/-/sirv-2.0.4.tgz", + "integrity": "sha512-94Bdh3cC2PKrbgSOUqTiGPWVZeSiXfKOVZNJniWoqrWrRkB1CJzBU3NEbiTsPcYy1lDsANA/THzS+9WBiy5nfQ==", "dev": true, "license": "MIT", "dependencies": { - "aggregate-error": "^3.0.0" + "@polka/url": "^1.0.0-next.24", + "mrmime": "^2.0.0", + "totalist": "^3.0.0" }, "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">= 10" } }, - "node_modules/p-map-series": { - "version": "2.1.0", + "node_modules/sisteransi": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", + "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==", + "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/p-pipe": { - "version": "3.1.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": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">= 6.0.0", + "npm": ">= 3.0.0" } }, - "node_modules/p-queue": { - "version": "6.6.2", - "dev": true, + "node_modules/socket.io-client": { + "version": "4.5.3", + "resolved": "https://registry.npmjs.org/socket.io-client/-/socket.io-client-4.5.3.tgz", + "integrity": "sha512-I/hqDYpQ6JKwtJOf5ikM+Qz+YujZPMEl6qBLhxiP0nX+TfXKhW4KZZG8lamrD6Y5ngjmYHreESVasVCgi5Kl3A==", "license": "MIT", "dependencies": { - "eventemitter3": "^4.0.4", - "p-timeout": "^3.2.0" + "@socket.io/component-emitter": "~3.1.0", + "debug": "~4.3.2", + "engine.io-client": "~6.2.3", + "socket.io-parser": "~4.2.0" }, "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=10.0.0" } }, - "node_modules/p-reduce": { - "version": "2.1.0", - "dev": true, + "node_modules/socket.io-parser": { + "version": "4.2.4", + "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-4.2.4.tgz", + "integrity": "sha512-/GbIKmo8ioc+NIWIhwdecY0ge+qVBSMdgxGygevmdHj24bsfgtCmcUUcQ5ZzcylGFHsN3k4HB4Cgkl96KVnuew==", "license": "MIT", + "dependencies": { + "@socket.io/component-emitter": "~3.1.0", + "debug": "~4.3.1" + }, "engines": { - "node": ">=8" + "node": ">=10.0.0" } }, - "node_modules/p-timeout": { - "version": "3.2.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==", "dev": true, "license": "MIT", "dependencies": { - "p-finally": "^1.0.0" + "ip-address": "^9.0.5", + "smart-buffer": "^4.2.0" }, "engines": { - "node": ">=8" + "node": ">= 10.0.0", + "npm": ">= 3.0.0" } }, - "node_modules/p-try": { - "version": "2.2.0", + "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==", "dev": true, "license": "MIT", + "dependencies": { + "agent-base": "^7.1.1", + "debug": "^4.3.4", + "socks": "^2.8.3" + }, "engines": { - "node": ">=6" + "node": ">= 14" } }, - "node_modules/p-waterfall": { - "version": "2.1.1", + "node_modules/sort-keys": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/sort-keys/-/sort-keys-2.0.0.tgz", + "integrity": "sha512-/dPCrG1s3ePpWm6yBbxZq5Be1dXGLyLn9Z791chDC3NFrpkVbWGzkBwPN1knaciexFXgRJ7hzdnwZ4stHSDmjg==", "dev": true, "license": "MIT", "dependencies": { - "p-reduce": "^2.0.0" + "is-plain-obj": "^1.0.0" }, "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=4" } }, - "node_modules/package-json-from-dist": { - "version": "1.0.0", + "node_modules/source-list-map": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/source-list-map/-/source-list-map-2.0.1.tgz", + "integrity": "sha512-qnQ7gVMxGNxsiL4lEuJwe/To8UnK7fAnmbGEEH8RpLouuKbeEm0lhbQVFIrNSuB+G7tVrAlVsZgETT5nljf+Iw==", "dev": true, - "license": "BlueOak-1.0.0" + "license": "MIT" }, - "node_modules/pacote": { - "version": "18.0.6", + "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": "ISC", - "dependencies": { - "@npmcli/git": "^5.0.0", - "@npmcli/installed-package-contents": "^2.0.1", - "@npmcli/package-json": "^5.1.0", - "@npmcli/promise-spawn": "^7.0.0", - "@npmcli/run-script": "^8.0.0", - "cacache": "^18.0.0", - "fs-minipass": "^3.0.0", - "minipass": "^7.0.2", - "npm-package-arg": "^11.0.0", - "npm-packlist": "^8.0.0", - "npm-pick-manifest": "^9.0.0", - "npm-registry-fetch": "^17.0.0", - "proc-log": "^4.0.0", - "promise-retry": "^2.0.1", - "sigstore": "^2.2.0", - "ssri": "^10.0.0", - "tar": "^6.1.11" - }, - "bin": { - "pacote": "bin/index.js" - }, + "license": "BSD-3-Clause", "engines": { - "node": "^16.14.0 || >=18.0.0" + "node": ">=0.10.0" } }, - "node_modules/pacote/node_modules/minipass": { - "version": "7.1.2", + "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==", "dev": true, - "license": "ISC", + "license": "BSD-3-Clause", "engines": { - "node": ">=16 || 14 >=14.17" + "node": ">=0.10.0" } }, - "node_modules/parent-module": { - "version": "1.0.1", + "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, "license": "MIT", "dependencies": { - "callsites": "^3.0.0" - }, - "engines": { - "node": ">=6" + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" } }, - "node_modules/parse-asn1": { - "version": "5.1.6", + "node_modules/spawndamnit": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/spawndamnit/-/spawndamnit-2.0.0.tgz", + "integrity": "sha512-j4JKEcncSjFlqIwU5L/rp2N5SIPsdxaRsIv678+TZxZ0SRDJTm8JrxJMjE/XuiEZNEir3S8l0Fa3Ke339WI4qA==", "dev": true, - "license": "ISC", + "license": "MIT", "dependencies": { - "asn1.js": "^5.2.0", - "browserify-aes": "^1.0.0", - "evp_bytestokey": "^1.0.0", - "pbkdf2": "^3.0.3", - "safe-buffer": "^5.1.1" + "cross-spawn": "^5.1.0", + "signal-exit": "^3.0.2" } }, - "node_modules/parse-conflict-json": { - "version": "3.0.1", + "node_modules/spawndamnit/node_modules/cross-spawn": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-5.1.0.tgz", + "integrity": "sha512-pTgQJ5KC0d2hcY8eyL1IzlBPYjTkyH72XRZPnLyKus2mBfNjQs3klqbJU2VILqZryAZUt9JOb3h/mWMy23/f5A==", "dev": true, - "license": "ISC", + "license": "MIT", "dependencies": { - "json-parse-even-better-errors": "^3.0.0", - "just-diff": "^6.0.0", - "just-diff-apply": "^5.2.0" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + "lru-cache": "^4.0.1", + "shebang-command": "^1.2.0", + "which": "^1.2.9" } }, - "node_modules/parse-conflict-json/node_modules/json-parse-even-better-errors": { - "version": "3.0.2", + "node_modules/spawndamnit/node_modules/lru-cache": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz", + "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==", "dev": true, - "license": "MIT", - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + "license": "ISC", + "dependencies": { + "pseudomap": "^1.0.2", + "yallist": "^2.1.2" } }, - "node_modules/parse-json": { - "version": "5.2.0", + "node_modules/spawndamnit/node_modules/shebang-command": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", + "integrity": "sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==", "dev": true, "license": "MIT", "dependencies": { - "@babel/code-frame": "^7.0.0", - "error-ex": "^1.3.1", - "json-parse-even-better-errors": "^2.3.0", - "lines-and-columns": "^1.1.6" + "shebang-regex": "^1.0.0" }, "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=0.10.0" } }, - "node_modules/parse-json/node_modules/lines-and-columns": { - "version": "1.2.4", - "dev": true, - "license": "MIT" - }, - "node_modules/parse-ms": { - "version": "2.1.0", + "node_modules/spawndamnit/node_modules/shebang-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", + "integrity": "sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ==", "dev": true, "license": "MIT", "engines": { - "node": ">=6" + "node": ">=0.10.0" } }, - "node_modules/parse-path": { - "version": "7.0.0", + "node_modules/spawndamnit/node_modules/which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", "dev": true, - "license": "MIT", + "license": "ISC", "dependencies": { - "protocols": "^2.0.0" + "isexe": "^2.0.0" + }, + "bin": { + "which": "bin/which" } }, - "node_modules/parse-url": { - "version": "8.1.0", + "node_modules/spawndamnit/node_modules/yallist": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", + "integrity": "sha512-ncTzHV7NvsQZkYe1DW7cbDLm0YpzHmZF5r/iyP3ZnQtMiJ+pjzisCiMNI+Sj+xQF5pXhSHxSB3uDbsBTzY/c2A==", "dev": true, - "license": "MIT", + "license": "ISC" + }, + "node_modules/spdx-correct": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.2.0.tgz", + "integrity": "sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==", + "dev": true, + "license": "Apache-2.0", "dependencies": { - "parse-path": "^7.0.0" + "spdx-expression-parse": "^3.0.0", + "spdx-license-ids": "^3.0.0" } }, - "node_modules/parse5": { - "version": "6.0.1", + "node_modules/spdx-exceptions": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.5.0.tgz", + "integrity": "sha512-PiU42r+xO4UbUS1buo3LPJkjlO7430Xn5SVAhdpzzsPHsjbYVflnnFdATgabnLude+Cqu25p6N+g2lw/PFsa4w==", "dev": true, - "license": "MIT" + "license": "CC-BY-3.0" }, - "node_modules/parseurl": { - "version": "1.3.3", - "license": "MIT", - "engines": { - "node": ">= 0.8" + "node_modules/spdx-expression-parse": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", + "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "spdx-exceptions": "^2.1.0", + "spdx-license-ids": "^3.0.0" } }, - "node_modules/path-browserify": { - "version": "1.0.1", + "node_modules/spdx-license-ids": { + "version": "3.0.20", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.20.tgz", + "integrity": "sha512-jg25NiDV/1fLtSgEgyvVyDunvaNHbuwF9lfNV17gSmPFAlYzdfNBlLtLzXTevwkPj7DhGbmN9VnmJIgLnhvaBw==", "dev": true, - "license": "MIT" + "license": "CC0-1.0" }, - "node_modules/path-exists": { - "version": "4.0.0", + "node_modules/split": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/split/-/split-1.0.1.tgz", + "integrity": "sha512-mTyOoPbrivtXnwnIxZRFYRrPNtEFKlpB2fvjSnCQUiAA6qAZzqwna5envK4uk6OIeP17CsdF3rSBGYVBsU0Tkg==", "dev": true, "license": "MIT", + "dependencies": { + "through": "2" + }, "engines": { - "node": ">=8" + "node": "*" } }, - "node_modules/path-is-absolute": { - "version": "1.0.1", - "dev": true, + "node_modules/split-on-first": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/split-on-first/-/split-on-first-1.1.0.tgz", + "integrity": "sha512-43ZssAJaMusuKWL8sKUBQXHWOpq8d6CfN/u1p4gUzfJkM05C8rxTmYrkIPTXapZpORA6LkkzcUulJ8FqA7Uudw==", "license": "MIT", "engines": { - "node": ">=0.10.0" + "node": ">=6" } }, - "node_modules/path-key": { - "version": "3.1.1", + "node_modules/split2": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/split2/-/split2-3.2.2.tgz", + "integrity": "sha512-9NThjpgZnifTkJpzTZ7Eue85S49QwpNhZTq6GRJwObb6jnLFNGB7Qm73V5HewTROPyxD0C29xqmaI68bQtV+hg==", + "dev": true, + "license": "ISC", + "dependencies": { + "readable-stream": "^3.0.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, + "license": "BSD-3-Clause" + }, + "node_modules/sshpk": { + "version": "1.18.0", + "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.18.0.tgz", + "integrity": "sha512-2p2KJZTSqQ/I3+HX42EpYOa2l3f8Erv8MWKsy2I9uf4wA7yFIkXRffYdsx86y6z4vHtV8u7g+pPlr8/4ouAxsQ==", "license": "MIT", + "dependencies": { + "asn1": "~0.2.3", + "assert-plus": "^1.0.0", + "bcrypt-pbkdf": "^1.0.0", + "dashdash": "^1.12.0", + "ecc-jsbn": "~0.1.1", + "getpass": "^0.1.1", + "jsbn": "~0.1.0", + "safer-buffer": "^2.0.2", + "tweetnacl": "~0.14.0" + }, + "bin": { + "sshpk-conv": "bin/sshpk-conv", + "sshpk-sign": "bin/sshpk-sign", + "sshpk-verify": "bin/sshpk-verify" + }, "engines": { - "node": ">=8" + "node": ">=0.10.0" } }, - "node_modules/path-parse": { - "version": "1.0.7", - "dev": true, + "node_modules/sshpk/node_modules/jsbn": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", + "integrity": "sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg==", "license": "MIT" }, - "node_modules/path-scurry": { - "version": "1.11.1", + "node_modules/ssri": { + "version": "10.0.6", + "resolved": "https://registry.npmjs.org/ssri/-/ssri-10.0.6.tgz", + "integrity": "sha512-MGrFH9Z4NP9Iyhqn16sDtBpRRNJ0Y2hNa6D65h736fVSaPCHr4DM4sWUNvVaSuC+0OBGhwsrydQwmgfg5LncqQ==", "dev": true, - "license": "BlueOak-1.0.0", + "license": "ISC", "dependencies": { - "lru-cache": "^10.2.0", - "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" + "minipass": "^7.0.3" }, "engines": { - "node": ">=16 || 14 >=14.18" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, - "node_modules/path-scurry/node_modules/lru-cache": { - "version": "10.2.0", - "dev": true, - "license": "ISC", + "node_modules/stack-trace": { + "version": "0.0.10", + "resolved": "https://registry.npmjs.org/stack-trace/-/stack-trace-0.0.10.tgz", + "integrity": "sha512-KGzahc7puUKkzyMt+IqAep+TVNbKP+k2Lmwhub39m1AsTSkaDutx56aDCo+HLDzf/D26BIHTJWNiTG1KAJiQCg==", + "license": "MIT", "engines": { - "node": "14 || >=16.14" + "node": "*" } }, - "node_modules/path-to-regexp": { - "version": "0.1.7", - "license": "MIT" + "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" + }, + "engines": { + "node": ">=10" + } }, - "node_modules/path-type": { - "version": "4.0.0", + "node_modules/stack-utils/node_modules/escape-string-regexp": { + "version": "2.0.0", + "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/pathe": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/pathe/-/pathe-1.1.2.tgz", - "integrity": "sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ==", + "node_modules/stackback": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/stackback/-/stackback-0.0.2.tgz", + "integrity": "sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==", "dev": true, "license": "MIT" }, - "node_modules/pathval": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/pathval/-/pathval-1.1.1.tgz", - "integrity": "sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==", - "dev": true, + "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": "*" + "node": ">= 0.8" } }, - "node_modules/pbkdf2": { - "version": "3.1.2", + "node_modules/std-env": { + "version": "3.8.0", + "resolved": "https://registry.npmjs.org/std-env/-/std-env-3.8.0.tgz", + "integrity": "sha512-Bc3YwwCB+OzldMxOXJIIvC6cPRWr/LxOp48CdQTOkPyk/t4JWWJbrilwBd7RJzKV8QW7tJkcgAmeuLLJugl5/w==", + "dev": true, + "license": "MIT" + }, + "node_modules/stream-browserify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/stream-browserify/-/stream-browserify-3.0.0.tgz", + "integrity": "sha512-H73RAHsVBapbim0tU2JwwOiXUj+fikfiaoYAKHF3VJfA0pe2BCzkhAHBlLG6REzE+2WNZcxOXjK7lkso+9euLA==", "dev": true, "license": "MIT", "dependencies": { - "create-hash": "^1.1.2", - "create-hmac": "^1.1.4", - "ripemd160": "^2.0.1", - "safe-buffer": "^5.0.1", - "sha.js": "^2.4.8" - }, - "engines": { - "node": ">=0.12" + "inherits": "~2.0.4", + "readable-stream": "^3.5.0" } }, - "node_modules/performance-now": { - "version": "2.1.0", - "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==", + "node_modules/stream-http": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/stream-http/-/stream-http-3.2.0.tgz", + "integrity": "sha512-Oq1bLqisTyK3TSCXpPbT4sdeYNdmyZJv1LxpEm2vu1ZhK89kSE5YXwZc3cWk0MagGaKriBh9mCFbVGtO+vY29A==", "dev": true, - "license": "ISC" + "license": "MIT", + "dependencies": { + "builtin-status-codes": "^3.0.0", + "inherits": "^2.0.4", + "readable-stream": "^3.6.0", + "xtend": "^4.0.2" + } }, - "node_modules/picomatch": { - "version": "2.3.1", + "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", - "engines": { - "node": ">=8.6" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" + "dependencies": { + "any-promise": "^1.1.0" } }, - "node_modules/pify": { - "version": "5.0.0", - "dev": true, + "node_modules/strict-uri-encode": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strict-uri-encode/-/strict-uri-encode-2.0.0.tgz", + "integrity": "sha512-QwiXZgpRcKkhTj2Scnn++4PKtWsH0kpzZ62L2R6c/LUVYv7hVnZqcg2+sMuT6R7Jusu1vviK/MFsu6kNJfWlEQ==", "license": "MIT", "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=4" } }, - "node_modules/pirates": { - "version": "4.0.6", - "dev": true, + "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==", "license": "MIT", - "engines": { - "node": ">= 6" + "dependencies": { + "safe-buffer": "~5.2.0" } }, - "node_modules/pkg-dir": { - "version": "4.2.0", + "node_modules/string-length": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/string-length/-/string-length-4.0.2.tgz", + "integrity": "sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ==", "dev": true, "license": "MIT", "dependencies": { - "find-up": "^4.0.0" + "char-regex": "^1.0.2", + "strip-ansi": "^6.0.0" }, "engines": { - "node": ">=8" + "node": ">=10" } }, - "node_modules/pkg-dir/node_modules/find-up": { - "version": "4.1.0", - "dev": true, + "node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", "license": "MIT", "dependencies": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" }, "engines": { "node": ">=8" } }, - "node_modules/pkg-dir/node_modules/locate-path": { - "version": "5.0.0", + "node_modules/string-width-cjs": { + "name": "string-width", + "version": "4.2.3", + "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": { - "p-locate": "^4.1.0" + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" }, "engines": { "node": ">=8" } }, - "node_modules/pkg-dir/node_modules/p-locate": { - "version": "4.1.0", + "node_modules/string.prototype.trim": { + "version": "1.2.9", + "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.9.tgz", + "integrity": "sha512-klHuCNxiMZ8MlsOihJhJEBJAiMVqU3Z2nEXWfWnIqjN0gEFS9J9+IxKozWWtQGcgoa1WUZzLjKPTr4ZHNFTFxw==", "dev": true, "license": "MIT", "dependencies": { - "p-limit": "^2.2.0" + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.0", + "es-object-atoms": "^1.0.0" }, "engines": { - "node": ">=8" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/pkg-types": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/pkg-types/-/pkg-types-1.2.1.tgz", - "integrity": "sha512-sQoqa8alT3nHjGuTjuKgOnvjo4cljkufdtLMnO2LBP/wRwuDlo1tkaEdMxCRhyGRPacv/ztlZgDPm2b7FAmEvw==", + "node_modules/string.prototype.trimend": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.8.tgz", + "integrity": "sha512-p73uL5VCHCO2BZZ6krwwQE3kCzM7NKmis8S//xEC6fQonchbum4eP6kR4DLEjQFO3Wnj3Fuo8NM0kOSjVdHjZQ==", "dev": true, "license": "MIT", "dependencies": { - "confbox": "^0.1.8", - "mlly": "^1.7.2", - "pathe": "^1.1.2" + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/pluralize": { - "version": "8.0.0", + "node_modules/string.prototype.trimstart": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.8.tgz", + "integrity": "sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==", "dev": true, "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0" + }, "engines": { - "node": ">=4" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/postcss": { - "version": "8.4.49", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.49.tgz", - "integrity": "sha512-OCVPnIObs4N29kxTjzLfUryOkvZEq+pf8jTF0lg8E7uETuWHA+v7j3c/xJmiqpX450191LlmZfUKkXxkTry7nA==", + "node_modules/stringify-object": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/stringify-object/-/stringify-object-3.3.0.tgz", + "integrity": "sha512-rHqiFh1elqCQ9WPLIC8I0Q/g/wj5J1eMkyoiD6eoQApWHP0FtlK7rqnhmabL5VUY9JQCcqwwvlOaSuutekgyrw==", "dev": true, - "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", + "license": "BSD-2-Clause", "dependencies": { - "nanoid": "^3.3.7", - "picocolors": "^1.1.1", - "source-map-js": "^1.2.1" + "get-own-enumerable-property-symbols": "^3.0.0", + "is-obj": "^1.0.1", + "is-regexp": "^1.0.0" }, "engines": { - "node": "^10 || ^12 || >=14" + "node": ">=4" } }, - "node_modules/postcss-selector-parser": { - "version": "6.1.0", + "node_modules/stringify-object/node_modules/is-obj": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz", + "integrity": "sha512-l4RyHgRqGN4Y3+9JHVrNqO+tN0rV5My76uW5/nuO4K1b6vw5G8d/cmFjP9tRfEsdhZNt0IFdZuK/c2Vr4Nb+Qg==", "dev": true, "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "license": "MIT", "dependencies": { - "cssesc": "^3.0.0", - "util-deprecate": "^1.0.2" + "ansi-regex": "^5.0.1" }, "engines": { - "node": ">=4" + "node": ">=8" } }, - "node_modules/postcss-values-parser": { - "version": "6.0.2", + "node_modules/strip-ansi-cjs": { + "name": "strip-ansi", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", "dev": true, - "license": "MPL-2.0", + "license": "MIT", "dependencies": { - "color-name": "^1.1.4", - "is-url-superb": "^4.0.0", - "quote-unquote": "^1.0.0" + "ansi-regex": "^5.0.1" }, "engines": { - "node": ">=10" - }, - "peerDependencies": { - "postcss": "^8.2.9" + "node": ">=8" } }, - "node_modules/postcss-values-parser/node_modules/color-name": { - "version": "1.1.4", + "node_modules/strip-bom": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz", + "integrity": "sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==", "dev": true, - "license": "MIT" + "license": "MIT", + "engines": { + "node": ">=8" + } }, - "node_modules/precinct": { - "version": "8.3.1", + "node_modules/strip-final-newline": { + "version": "2.0.0", + "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/strip-indent": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-3.0.0.tgz", + "integrity": "sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==", "dev": true, "license": "MIT", "dependencies": { - "commander": "^2.20.3", - "debug": "^4.3.3", - "detective-amd": "^3.1.0", - "detective-cjs": "^3.1.1", - "detective-es6": "^2.2.1", - "detective-less": "^1.0.2", - "detective-postcss": "^4.0.0", - "detective-sass": "^3.0.1", - "detective-scss": "^2.0.1", - "detective-stylus": "^1.0.0", - "detective-typescript": "^7.0.0", - "module-definition": "^3.3.1", - "node-source-walk": "^4.2.0" - }, - "bin": { - "precinct": "bin/cli.js" + "min-indent": "^1.0.0" }, "engines": { - "node": "^10.13 || ^12 || >=14" + "node": ">=8" } }, - "node_modules/precinct/node_modules/@typescript-eslint/types": { - "version": "4.33.0", + "node_modules/strip-json-comments": { + "version": "3.1.1", + "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.10.0 || ^10.13.0 || >=11.10.1" + "node": ">=8" }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/precinct/node_modules/@typescript-eslint/typescript-estree": { - "version": "4.33.0", + "node_modules/strong-log-transformer": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/strong-log-transformer/-/strong-log-transformer-2.1.0.tgz", + "integrity": "sha512-B3Hgul+z0L9a236FAUC9iZsL+nVHgoCJnqCbN588DjYxvGXaXaaFbfmQ/JhvKjZwsOukuR72XbHv71Qkug0HxA==", "dev": true, - "license": "BSD-2-Clause", + "license": "Apache-2.0", "dependencies": { - "@typescript-eslint/types": "4.33.0", - "@typescript-eslint/visitor-keys": "4.33.0", - "debug": "^4.3.1", - "globby": "^11.0.3", - "is-glob": "^4.0.1", - "semver": "^7.3.5", - "tsutils": "^3.21.0" + "duplexer": "^0.1.1", + "minimist": "^1.2.0", + "through": "^2.3.4" + }, + "bin": { + "sl-log-transformer": "bin/sl-log-transformer.js" }, "engines": { - "node": "^10.12.0 || >=12.0.0" + "node": ">=4" + } + }, + "node_modules/stylus-lookup": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/stylus-lookup/-/stylus-lookup-3.0.2.tgz", + "integrity": "sha512-oEQGHSjg/AMaWlKe7gqsnYzan8DLcGIHe0dUaFkucZZ14z4zjENRlQMCHT4FNsiWnJf17YN9OvrCfCoi7VvOyg==", + "dev": true, + "license": "MIT", + "dependencies": { + "commander": "^2.8.1", + "debug": "^4.1.0" }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" + "bin": { + "stylus-lookup": "bin/cli.js" }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } + "engines": { + "node": ">=6.0.0" } }, - "node_modules/precinct/node_modules/@typescript-eslint/visitor-keys": { - "version": "4.33.0", + "node_modules/stylus-lookup/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, + "license": "MIT" + }, + "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==", "license": "MIT", "dependencies": { - "@typescript-eslint/types": "4.33.0", - "eslint-visitor-keys": "^2.0.0" + "has-flag": "^4.0.0" }, "engines": { - "node": "^8.10.0 || ^10.13.0 || >=11.10.1" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" + "node": ">=8" } }, - "node_modules/precinct/node_modules/ast-module-types": { - "version": "3.0.0", + "node_modules/supports-preserve-symlinks-flag": { + "version": "1.0.0", + "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": ">=6.0" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/precinct/node_modules/commander": { - "version": "2.20.3", + "node_modules/symbol-tree": { + "version": "3.2.4", + "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" }, - "node_modules/precinct/node_modules/detective-amd": { - "version": "3.1.2", + "node_modules/synckit": { + "version": "0.9.2", + "resolved": "https://registry.npmjs.org/synckit/-/synckit-0.9.2.tgz", + "integrity": "sha512-vrozgXDQwYO72vHjUb/HnFbQx1exDjoKzqx23aXEg2a9VIg2TSFZ8FmeZpTjUCFMYw7mpX4BE2SFu8wI7asYsw==", "dev": true, "license": "MIT", "dependencies": { - "ast-module-types": "^3.0.0", - "escodegen": "^2.0.0", - "get-amd-module-type": "^3.0.0", - "node-source-walk": "^4.2.0" - }, - "bin": { - "detective-amd": "bin/cli.js" + "@pkgr/core": "^0.1.0", + "tslib": "^2.6.2" }, "engines": { - "node": ">=6.0" + "node": "^14.18.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/unts" } }, - "node_modules/precinct/node_modules/detective-cjs": { - "version": "3.1.3", + "node_modules/tapable": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", + "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==", "dev": true, "license": "MIT", - "dependencies": { - "ast-module-types": "^3.0.0", - "node-source-walk": "^4.0.0" - }, "engines": { - "node": ">=6.0" + "node": ">=6" } }, - "node_modules/precinct/node_modules/detective-es6": { - "version": "2.2.2", + "node_modules/tar": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/tar/-/tar-6.2.1.tgz", + "integrity": "sha512-DZ4yORTwrbTj/7MZYq2w+/ZFdI6OZ/f9SFHR+71gIVUZhOQPHzVCLpvRnPgyaMpfWxxk/4ONva3GQSyNIKRv6A==", "dev": true, - "license": "MIT", + "license": "ISC", "dependencies": { - "node-source-walk": "^4.0.0" + "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" }, "engines": { - "node": ">=6.0" + "node": ">=10" } }, - "node_modules/precinct/node_modules/detective-postcss": { - "version": "4.0.0", + "node_modules/tar-stream": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz", + "integrity": "sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==", "dev": true, - "license": "Apache-2.0", + "license": "MIT", "dependencies": { - "debug": "^4.1.1", - "is-url": "^1.2.4", - "postcss": "^8.1.7", - "postcss-values-parser": "^2.0.1" + "bl": "^4.0.3", + "end-of-stream": "^1.4.1", + "fs-constants": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^3.1.1" }, "engines": { - "node": "^10 || ^12 || >=14" + "node": ">=6" } }, - "node_modules/precinct/node_modules/detective-sass": { - "version": "3.0.2", + "node_modules/tar/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, - "license": "MIT", + "license": "ISC", "dependencies": { - "gonzales-pe": "^4.3.0", - "node-source-walk": "^4.0.0" + "minipass": "^3.0.0" }, "engines": { - "node": ">=6.0" + "node": ">= 8" } }, - "node_modules/precinct/node_modules/detective-scss": { - "version": "2.0.2", + "node_modules/tar/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, - "license": "MIT", + "license": "ISC", "dependencies": { - "gonzales-pe": "^4.3.0", - "node-source-walk": "^4.0.0" + "yallist": "^4.0.0" }, "engines": { - "node": ">=6.0" + "node": ">=8" } }, - "node_modules/precinct/node_modules/detective-stylus": { - "version": "1.0.3", + "node_modules/tar/node_modules/minipass": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-5.0.0.tgz", + "integrity": "sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==", "dev": true, - "license": "MIT" - }, - "node_modules/precinct/node_modules/detective-typescript": { - "version": "7.0.2", - "dev": true, - "license": "MIT", - "dependencies": { - "@typescript-eslint/typescript-estree": "^4.33.0", - "ast-module-types": "^2.7.1", - "node-source-walk": "^4.2.0", - "typescript": "^3.9.10" - }, + "license": "ISC", "engines": { - "node": "^10.13 || >=12.0.0" + "node": ">=8" } }, - "node_modules/precinct/node_modules/detective-typescript/node_modules/ast-module-types": { - "version": "2.7.1", + "node_modules/tar/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": "MIT" + "license": "ISC" }, - "node_modules/precinct/node_modules/eslint-visitor-keys": { - "version": "2.1.0", + "node_modules/temp-dir": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/temp-dir/-/temp-dir-1.0.0.tgz", + "integrity": "sha512-xZFXEGbG7SNC3itwBzI3RYjq/cEhBkx2hJuKGIUOcEULmkQExXiHat2z/qkISYsuR+IKumhEfKKbV5qXmhICFQ==", "dev": true, - "license": "Apache-2.0", + "license": "MIT", "engines": { - "node": ">=10" + "node": ">=4" } }, - "node_modules/precinct/node_modules/get-amd-module-type": { - "version": "3.0.2", + "node_modules/term-size": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/term-size/-/term-size-2.2.1.tgz", + "integrity": "sha512-wK0Ri4fOGjv/XPy8SBHZChl8CM7uMc5VML7SqiQ0zG7+J5Vr+RMQDoHa2CNT6KHUnTGIXH34UDMkPzAUyapBZg==", "dev": true, "license": "MIT", - "dependencies": { - "ast-module-types": "^3.0.0", - "node-source-walk": "^4.2.2" - }, "engines": { - "node": ">=6.0" + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/precinct/node_modules/node-source-walk": { - "version": "4.3.0", + "node_modules/terser": { + "version": "5.36.0", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.36.0.tgz", + "integrity": "sha512-IYV9eNMuFAV4THUspIRXkLakHnV6XO7FEdtKjf/mDyrnqUg9LnlOn6/RwRvM9SZjR4GUq8Nk8zj67FzVARr74w==", "dev": true, - "license": "MIT", + "license": "BSD-2-Clause", "dependencies": { - "@babel/parser": "^7.0.0" + "@jridgewell/source-map": "^0.3.3", + "acorn": "^8.8.2", + "commander": "^2.20.0", + "source-map-support": "~0.5.20" + }, + "bin": { + "terser": "bin/terser" }, "engines": { - "node": ">=6.0" + "node": ">=10" } }, - "node_modules/precinct/node_modules/postcss-values-parser": { - "version": "2.0.1", + "node_modules/terser-webpack-plugin": { + "version": "5.3.10", + "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.10.tgz", + "integrity": "sha512-BKFPWlPDndPs+NGGCr1U59t0XScL5317Y0UReNrHaw9/FwhPENlq6bfgs+4yPfyP51vqC1bQ4rp1EfXW5ZSH9w==", "dev": true, "license": "MIT", "dependencies": { - "flatten": "^1.0.2", - "indexes-of": "^1.0.1", - "uniq": "^1.0.1" + "@jridgewell/trace-mapping": "^0.3.20", + "jest-worker": "^27.4.5", + "schema-utils": "^3.1.1", + "serialize-javascript": "^6.0.1", + "terser": "^5.26.0" }, "engines": { - "node": ">=6.14.4" + "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/precinct/node_modules/typescript": { - "version": "3.9.10", + "node_modules/terser-webpack-plugin/node_modules/jest-worker": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.1.tgz", + "integrity": "sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==", "dev": true, - "license": "Apache-2.0", - "bin": { - "tsc": "bin/tsc", - "tsserver": "bin/tsserver" + "license": "MIT", + "dependencies": { + "@types/node": "*", + "merge-stream": "^2.0.0", + "supports-color": "^8.0.0" }, "engines": { - "node": ">=4.2.0" + "node": ">= 10.13.0" } }, - "node_modules/preferred-pm": { - "version": "3.0.3", + "node_modules/terser-webpack-plugin/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": { - "find-up": "^5.0.0", - "find-yarn-workspace-root2": "1.2.16", - "path-exists": "^4.0.0", - "which-pm": "2.0.0" + "has-flag": "^4.0.0" }, "engines": { "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" } }, - "node_modules/prelude-ls": { - "version": "1.2.1", + "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, + "license": "MIT" + }, + "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==", "dev": true, "license": "MIT", - "engines": { - "node": ">= 0.8.0" + "dependencies": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" } }, - "node_modules/prettier": { - "version": "3.3.2", + "node_modules/test-exclude": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz", + "integrity": "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==", "dev": true, - "license": "MIT", - "bin": { - "prettier": "bin/prettier.cjs" + "license": "ISC", + "dependencies": { + "@istanbuljs/schema": "^0.1.2", + "glob": "^7.1.4", + "minimatch": "^3.0.4" }, "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/prettier/prettier?sponsor=1" + "node": ">=8" } }, - "node_modules/prettier-linter-helpers": { - "version": "1.0.0", + "node_modules/test-exclude/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, "license": "MIT", "dependencies": { - "fast-diff": "^1.1.2" - }, - "engines": { - "node": ">=6.0.0" + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" } }, - "node_modules/pretty-format": { - "version": "29.6.2", + "node_modules/test-exclude/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, - "license": "MIT", + "license": "ISC", "dependencies": { - "@jest/schemas": "^29.6.0", - "ansi-styles": "^5.0.0", - "react-is": "^18.0.0" + "brace-expansion": "^1.1.7" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": "*" } }, - "node_modules/pretty-format/node_modules/ansi-styles": { - "version": "5.2.0", + "node_modules/text-extensions": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/text-extensions/-/text-extensions-1.9.0.tgz", + "integrity": "sha512-wiBrwC1EhBelW12Zy26JeOUkQ5mRu+5o8rpsJk5+2t+Y5vE7e842qtZDQ2g1NpX/29HdyFeJ4nSIhI47ENSxlQ==", "dev": true, "license": "MIT", "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "node": ">=0.10" } }, - "node_modules/pretty-ms": { - "version": "7.0.1", + "node_modules/text-hex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/text-hex/-/text-hex-1.0.0.tgz", + "integrity": "sha512-uuVGNWzgJ4yhRaNSiubPY7OjISw4sw4E5Uv0wbjp+OzcbmVU/rsT8ujgcXJhn9ypzsgr5vlzpPqP+MBBKcGvbg==", + "license": "MIT" + }, + "node_modules/text-table": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", + "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", + "dev": true, + "license": "MIT" + }, + "node_modules/through": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", + "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==", + "license": "MIT" + }, + "node_modules/through2": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/through2/-/through2-4.0.2.tgz", + "integrity": "sha512-iOqSav00cVxEEICeD7TjLB1sueEL+81Wpzp2bY17uZjZN0pWZPuo4suZ/61VujxmqSGFfgOcNuTZ85QJwNZQpw==", "dev": true, "license": "MIT", "dependencies": { - "parse-ms": "^2.1.0" + "readable-stream": "3" + } + }, + "node_modules/tiny-secp256k1": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/tiny-secp256k1/-/tiny-secp256k1-1.1.7.tgz", + "integrity": "sha512-eb+F6NabSnjbLwNoC+2o5ItbmP1kg7HliWue71JgLegQt6A5mTN8YbvTLCazdlg6e5SV6A+r8OGvZYskdlmhqQ==", + "hasInstallScript": true, + "license": "MIT", + "dependencies": { + "bindings": "^1.3.0", + "bn.js": "^4.11.8", + "create-hmac": "^1.1.7", + "elliptic": "^6.4.0", + "nan": "^2.13.2" }, "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=6.0.0" } }, - "node_modules/proc-log": { - "version": "4.2.0", + "node_modules/tinybench": { + "version": "2.9.0", + "resolved": "https://registry.npmjs.org/tinybench/-/tinybench-2.9.0.tgz", + "integrity": "sha512-0+DUvqWMValLmha6lr4kD8iAMK1HzV0/aKnCtWb9v9641TnP/MFb7Pc2bxoxQjTXAErryXVgUOfv2YqNllqGeg==", "dev": true, - "license": "ISC", - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } + "license": "MIT" }, - "node_modules/process": { - "version": "0.11.10", + "node_modules/tinyexec": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/tinyexec/-/tinyexec-0.3.1.tgz", + "integrity": "sha512-WiCJLEECkO18gwqIp6+hJg0//p23HXp4S+gGtAKu3mI2F2/sXC4FvHvXvB0zJVVaTPhx1/tOwdbRsa1sOBIKqQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/tinypool": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/tinypool/-/tinypool-1.0.2.tgz", + "integrity": "sha512-al6n+QEANGFOMf/dmUMsuS5/r9B06uwlyNjZZql/zv8J7ybHCgoihBNORZCY2mzUuAnomQa2JdhyHKzZxPCrFA==", "dev": true, "license": "MIT", "engines": { - "node": ">= 0.6.0" + "node": "^18.0.0 || >=20.0.0" } }, - "node_modules/process-nextick-args": { - "version": "2.0.1", + "node_modules/tinyrainbow": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/tinyrainbow/-/tinyrainbow-1.2.0.tgz", + "integrity": "sha512-weEDEq7Z5eTHPDh4xjX789+fHfF+P8boiFB+0vbWzpbnbsEr/GRaohi/uMKxg8RZMXnl1ItAi/IUHWMsjDV7kQ==", "dev": true, - "license": "MIT" + "license": "MIT", + "engines": { + "node": ">=14.0.0" + } }, - "node_modules/proggy": { - "version": "2.0.0", + "node_modules/tinyspy": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/tinyspy/-/tinyspy-3.0.2.tgz", + "integrity": "sha512-n1cw8k1k0x4pgA2+9XrOkFydTerNcJ1zWCO5Nn9scWHTD+5tp8dghT2x1uduQePZTZgd3Tupf+x9BxJjeJi77Q==", "dev": true, - "license": "ISC", + "license": "MIT", "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + "node": ">=14.0.0" } }, - "node_modules/progress": { - "version": "1.1.8", + "node_modules/tmp": { + "version": "0.0.33", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", + "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", + "license": "MIT", + "dependencies": { + "os-tmpdir": "~1.0.2" + }, "engines": { - "node": ">=0.4.0" + "node": ">=0.6.0" } }, - "node_modules/promise-all-reject-late": { - "version": "1.0.1", + "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, - "license": "ISC", - "funding": { - "url": "https://github.com/sponsors/isaacs" - } + "license": "BSD-3-Clause" }, - "node_modules/promise-call-limit": { - "version": "3.0.1", + "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": "ISC", - "funding": { - "url": "https://github.com/sponsors/isaacs" + "license": "MIT", + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" } }, - "node_modules/promise-inflight": { + "node_modules/toidentifier": { "version": "1.0.1", - "dev": true, - "license": "ISC" - }, - "node_modules/promise-polyfill": { - "version": "8.3.0", - "dev": true, - "license": "MIT" + "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/promise-retry": { - "version": "2.0.1", + "node_modules/totalist": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/totalist/-/totalist-3.0.1.tgz", + "integrity": "sha512-sf4i37nQ2LBx4m3wB74y+ubopq6W/dIzXg0FDGjsYnZHVa1Da8FH853wlL2gtUhg+xJXjfk3kUZS3BRoQeoQBQ==", "dev": true, "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "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==", + "license": "BSD-3-Clause", "dependencies": { - "err-code": "^2.0.2", - "retry": "^0.12.0" + "psl": "^1.1.33", + "punycode": "^2.1.1", + "universalify": "^0.2.0", + "url-parse": "^1.5.3" }, "engines": { - "node": ">=10" + "node": ">=6" } }, - "node_modules/prompts": { - "version": "2.4.2", - "dev": true, + "node_modules/tough-cookie/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==", "license": "MIT", - "dependencies": { - "kleur": "^3.0.3", - "sisteransi": "^1.0.5" - }, "engines": { - "node": ">= 6" + "node": ">= 4.0.0" } }, - "node_modules/promzard": { - "version": "1.0.2", + "node_modules/tr46": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", + "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==", + "license": "MIT" + }, + "node_modules/treeverse": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/treeverse/-/treeverse-3.0.0.tgz", + "integrity": "sha512-gcANaAnd2QDZFmHFEOF4k7uc1J/6a6z3DJMd/QwEyxLoKGiptJRwid582r7QIsFlFMIZ3SnxfS52S4hm2DHkuQ==", "dev": true, "license": "ISC", - "dependencies": { - "read": "^3.0.1" - }, "engines": { "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, - "node_modules/protocols": { - "version": "2.0.1", + "node_modules/trim-newlines": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-3.0.1.tgz", + "integrity": "sha512-c1PTsA3tYrIsLGkJkzHF+w9F2EyxfXGo4UyJc4pFL++FMjnq0HJS69T3M7d//gKrFKwy429bouPescbjecU+Zw==", "dev": true, - "license": "MIT" - }, - "node_modules/proxy-addr": { - "version": "2.0.7", "license": "MIT", - "dependencies": { - "forwarded": "0.2.0", - "ipaddr.js": "1.9.1" - }, "engines": { - "node": ">= 0.10" + "node": ">=8" } }, - "node_modules/proxy-from-env": { - "version": "1.1.0", - "dev": true, - "license": "MIT" - }, - "node_modules/pseudomap": { - "version": "1.0.2", - "dev": true, - "license": "ISC" + "node_modules/triple-beam": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/triple-beam/-/triple-beam-1.4.1.tgz", + "integrity": "sha512-aZbgViZrg1QNcG+LULa7nhZpJTZSLm/mXnHXnbAbjmN5aSa0y7V+wvv6+4WaBtpISJzThKy+PIPxc1Nq1EJ9mg==", + "license": "MIT", + "engines": { + "node": ">= 14.0.0" + } }, - "node_modules/psl": { - "version": "1.9.0", - "license": "MIT" + "node_modules/triplesec": { + "version": "3.0.27", + "resolved": "https://registry.npmjs.org/triplesec/-/triplesec-3.0.27.tgz", + "integrity": "sha512-FDhkxa3JYnPOerOd+8k+SBmm7cb7KkyX+xXwNFV3XV6dsQgHuRvjtbnzWfPJ2kimeR8ErjZfPd/6r7RH6epHDw==", + "dependencies": { + "iced-error": ">=0.0.9", + "iced-lock": "^1.0.1", + "iced-runtime": "^1.0.2", + "more-entropy": ">=0.0.7", + "progress": "~1.1.2", + "uglify-js": "^3.1.9" + } }, - "node_modules/public-encrypt": { - "version": "4.0.3", + "node_modules/ts-api-utils": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-1.4.0.tgz", + "integrity": "sha512-032cPxaEKwM+GT3vA5JXNzIaizx388rhsSW79vGRNGXfRRAdEAn2mvk36PvK5HnOchyWZ7afLEXqYCvPCrzuzQ==", "dev": true, "license": "MIT", - "dependencies": { - "bn.js": "^4.1.0", - "browserify-rsa": "^4.0.0", - "create-hash": "^1.1.0", - "parse-asn1": "^5.0.0", - "randombytes": "^2.0.1", - "safe-buffer": "^5.1.2" + "engines": { + "node": ">=16" + }, + "peerDependencies": { + "typescript": ">=4.2.0" } }, - "node_modules/public-encrypt/node_modules/bn.js": { - "version": "4.12.0", + "node_modules/ts-graphviz": { + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/ts-graphviz/-/ts-graphviz-1.8.2.tgz", + "integrity": "sha512-5YhbFoHmjxa7pgQLkB07MtGnGJ/yhvjmc9uhsnDBEICME6gkPf83SBwLDQqGDoCa3XzUMWLk1AU2Wn1u1naDtA==", "dev": true, - "license": "MIT" - }, - "node_modules/punycode": { - "version": "2.3.0", "license": "MIT", "engines": { - "node": ">=6" + "node": ">=14.16" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/ts-graphviz" } }, - "node_modules/pure-rand": { - "version": "6.0.2", + "node_modules/ts-jest": { + "version": "29.2.5", + "resolved": "https://registry.npmjs.org/ts-jest/-/ts-jest-29.2.5.tgz", + "integrity": "sha512-KD8zB2aAZrcKIdGk4OwpJggeLcH1FgrICqDSROWqlnJXGCXK4Mn6FcdK2B6670Xr73lHMG1kHw8R87A0ecZ+vA==", "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://github.com/sponsors/dubzzz" + "license": "MIT", + "dependencies": { + "bs-logger": "^0.2.6", + "ejs": "^3.1.10", + "fast-json-stable-stringify": "^2.1.0", + "jest-util": "^29.0.0", + "json5": "^2.2.3", + "lodash.memoize": "^4.1.2", + "make-error": "^1.3.6", + "semver": "^7.6.3", + "yargs-parser": "^21.1.1" + }, + "bin": { + "ts-jest": "cli.js" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || ^18.0.0 || >=20.0.0" + }, + "peerDependencies": { + "@babel/core": ">=7.0.0-beta.0 <8", + "@jest/transform": "^29.0.0", + "@jest/types": "^29.0.0", + "babel-jest": "^29.0.0", + "jest": "^29.0.0", + "typescript": ">=4.3 <6" + }, + "peerDependenciesMeta": { + "@babel/core": { + "optional": true }, - { - "type": "opencollective", - "url": "https://opencollective.com/fast-check" + "@jest/transform": { + "optional": true + }, + "@jest/types": { + "optional": true + }, + "babel-jest": { + "optional": true + }, + "esbuild": { + "optional": true } - ], - "license": "MIT" + } }, - "node_modules/pushdata-bitcoin": { - "version": "1.0.1", + "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": { - "bitcoin-ops": "^1.3.0" + "@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/pvtsutils": { - "version": "1.3.3", + "node_modules/tsconfig-paths": { + "version": "3.15.0", + "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.15.0.tgz", + "integrity": "sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg==", "dev": true, "license": "MIT", "dependencies": { - "tslib": "^2.6.1" + "@types/json5": "^0.0.29", + "json5": "^1.0.2", + "minimist": "^1.2.6", + "strip-bom": "^3.0.0" } }, - "node_modules/pvutils": { - "version": "1.1.3", + "node_modules/tsconfig-paths/node_modules/strip-bom": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==", "dev": true, "license": "MIT", "engines": { - "node": ">=6.0.0" + "node": ">=4" } }, - "node_modules/qs": { - "version": "6.11.0", - "license": "BSD-3-Clause", + "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==", + "dev": true, + "license": "0BSD" + }, + "node_modules/tsutils": { + "version": "3.21.0", + "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz", + "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==", + "dev": true, + "license": "MIT", "dependencies": { - "side-channel": "^1.0.4" + "tslib": "^1.8.1" }, "engines": { - "node": ">=0.6" + "node": ">= 6" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "peerDependencies": { + "typescript": ">=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta" } }, - "node_modules/query-string": { - "version": "6.14.1", - "license": "MIT", - "dependencies": { - "decode-uri-component": "^0.2.0", - "filter-obj": "^1.1.0", - "split-on-first": "^1.0.0", - "strict-uri-encode": "^2.0.0" + "node_modules/tsutils/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/tuf-js": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/tuf-js/-/tuf-js-2.2.1.tgz", + "integrity": "sha512-GwIJau9XaA8nLVbUXsN3IlFi7WmQ48gBUrl3FTkkL/XLu/POhBzfmX9hd33FNMX1qAsfl6ozO1iMmW9NC8YniA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@tufjs/models": "2.0.1", + "debug": "^4.3.4", + "make-fetch-happen": "^13.0.1" }, "engines": { - "node": ">=6" + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/tunnel-agent": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", + "integrity": "sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==", + "license": "Apache-2.0", + "dependencies": { + "safe-buffer": "^5.0.1" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "engines": { + "node": "*" } }, - "node_modules/querystringify": { - "version": "2.2.0", - "license": "MIT" + "node_modules/tweetnacl": { + "version": "0.14.5", + "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", + "integrity": "sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA==", + "license": "Unlicense" }, - "node_modules/queue-microtask": { - "version": "1.2.3", + "node_modules/type-check": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", + "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", "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" + "license": "MIT", + "dependencies": { + "prelude-ls": "^1.2.1" + }, + "engines": { + "node": ">= 0.8.0" + } }, - "node_modules/quick-lru": { - "version": "4.0.1", + "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": ">=8" + "node": ">=4" } }, - "node_modules/quote-unquote": { - "version": "1.0.0", + "node_modules/type-fest": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", "dev": true, - "license": "MIT" + "license": "(MIT OR CC0-1.0)", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } }, - "node_modules/randombytes": { - "version": "2.1.0", + "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": { - "safe-buffer": "^5.1.0" + "media-typer": "0.3.0", + "mime-types": "~2.1.24" + }, + "engines": { + "node": ">= 0.6" } }, - "node_modules/randomfill": { - "version": "1.0.4", + "node_modules/typed-array-buffer": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.2.tgz", + "integrity": "sha512-gEymJYKZtKXzzBzM4jqa9w6Q1Jjm7x2d+sh19AdsD4wqnMPDYyvwpsIc2Q/835kHuo3BEQ7CjelGhfTsoBb2MQ==", "dev": true, "license": "MIT", "dependencies": { - "randombytes": "^2.0.5", - "safe-buffer": "^5.1.0" - } - }, - "node_modules/range-parser": { - "version": "1.2.1", - "license": "MIT", + "call-bind": "^1.0.7", + "es-errors": "^1.3.0", + "is-typed-array": "^1.1.13" + }, "engines": { - "node": ">= 0.6" + "node": ">= 0.4" } }, - "node_modules/raw-body": { - "version": "2.5.1", + "node_modules/typed-array-byte-length": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.1.tgz", + "integrity": "sha512-3iMJ9q0ao7WE9tWcaYKIptkNBuOIcZCCT0d4MRvuuH88fEoEH62IuQe0OtraD3ebQEoTRk8XCBoknUNc1Y67pw==", + "dev": true, "license": "MIT", "dependencies": { - "bytes": "3.1.2", - "http-errors": "2.0.0", - "iconv-lite": "0.4.24", - "unpipe": "1.0.0" + "call-bind": "^1.0.7", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "has-proto": "^1.0.3", + "is-typed-array": "^1.1.13" }, "engines": { - "node": ">= 0.8" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/rc": { - "version": "1.2.8", + "node_modules/typed-array-byte-offset": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.2.tgz", + "integrity": "sha512-Ous0vodHa56FviZucS2E63zkgtgrACj7omjwd/8lTEMEPFFyjfixMZ1ZXenpgCFBBt4EC1J2XsyVS2gkG0eTFA==", "dev": true, - "license": "(BSD-2-Clause OR MIT OR Apache-2.0)", + "license": "MIT", "dependencies": { - "deep-extend": "^0.6.0", - "ini": "~1.3.0", - "minimist": "^1.2.0", - "strip-json-comments": "~2.0.1" + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.7", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "has-proto": "^1.0.3", + "is-typed-array": "^1.1.13" }, - "bin": { - "rc": "cli.js" + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/rc/node_modules/strip-json-comments": { - "version": "2.0.1", + "node_modules/typed-array-length": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.6.tgz", + "integrity": "sha512-/OxDN6OtAk5KBpGb28T+HZc2M+ADtvRxXrKKbUwtsLgdoxgX13hyy7ek6bFRl5+aBs2yZzB0c4CnQfAtVypW/g==", "dev": true, "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "has-proto": "^1.0.3", + "is-typed-array": "^1.1.13", + "possible-typed-array-names": "^1.0.0" + }, "engines": { - "node": ">=0.10.0" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/react-is": { - "version": "18.2.0", + "node_modules/typedarray": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", + "integrity": "sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==", "dev": true, "license": "MIT" }, - "node_modules/read": { - "version": "3.0.1", + "node_modules/typedoc": { + "version": "0.24.8", + "resolved": "https://registry.npmjs.org/typedoc/-/typedoc-0.24.8.tgz", + "integrity": "sha512-ahJ6Cpcvxwaxfu4KtjA8qZNqS43wYt6JL27wYiIgl1vd38WW/KWX11YuAeZhuz9v+ttrutSsgK+XO1CjL1kA3w==", "dev": true, - "license": "ISC", + "license": "Apache-2.0", "dependencies": { - "mute-stream": "^1.0.0" + "lunr": "^2.3.9", + "marked": "^4.3.0", + "minimatch": "^9.0.0", + "shiki": "^0.14.1" + }, + "bin": { + "typedoc": "bin/typedoc" }, "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + "node": ">= 14.14" + }, + "peerDependencies": { + "typescript": "4.6.x || 4.7.x || 4.8.x || 4.9.x || 5.0.x || 5.1.x" } }, - "node_modules/read-cmd-shim": { - "version": "4.0.0", + "node_modules/typedoc-plugin-replace-text": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/typedoc-plugin-replace-text/-/typedoc-plugin-replace-text-3.3.0.tgz", + "integrity": "sha512-Bn2bodwpbj98sYzcVMXjbeDdempncHY7jEvP9MCX4e5IfjO0xCaRAHIlpH+UoqqhB+4B1mc599E22W67kvua1w==", "dev": true, "license": "ISC", - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + "peerDependencies": { + "typedoc": "^0.24.8 || 0.25.x" } }, - "node_modules/read-package-json-fast": { - "version": "3.0.2", - "dev": true, - "license": "ISC", - "dependencies": { - "json-parse-even-better-errors": "^3.0.0", - "npm-normalize-package-bin": "^3.0.0" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } + "node_modules/typeforce": { + "version": "1.18.0", + "resolved": "https://registry.npmjs.org/typeforce/-/typeforce-1.18.0.tgz", + "integrity": "sha512-7uc1O8h1M1g0rArakJdf0uLRSSgFcYexrVoKo+bzJd32gd4gDy2L/Z+8/FjPnU9ydY3pEnVPtr9FyscYY60K1g==", + "license": "MIT" }, - "node_modules/read-package-json-fast/node_modules/json-parse-even-better-errors": { - "version": "3.0.2", + "node_modules/typescript": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.1.6.tgz", + "integrity": "sha512-zaWCozRZ6DLEWAWFrVDz1H6FVXzUSfTy5FUMWsQlU8Ym5JP9eO4xkTIROFCQvhQf61z6O/G6ugw3SgAnvvm+HA==", "dev": true, - "license": "MIT", + "license": "Apache-2.0", + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + "node": ">=14.17" } }, - "node_modules/read-package-json-fast/node_modules/npm-normalize-package-bin": { - "version": "3.0.1", - "dev": true, - "license": "ISC", + "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==", + "license": "BSD-2-Clause", + "bin": { + "uglifyjs": "bin/uglifyjs" + }, "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + "node": ">=0.8.0" } }, - "node_modules/read-pkg": { - "version": "3.0.0", + "node_modules/unbox-primitive": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz", + "integrity": "sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==", "dev": true, "license": "MIT", "dependencies": { - "load-json-file": "^4.0.0", - "normalize-package-data": "^2.3.2", - "path-type": "^3.0.0" + "call-bind": "^1.0.2", + "has-bigints": "^1.0.2", + "has-symbols": "^1.0.3", + "which-boxed-primitive": "^1.0.2" }, - "engines": { - "node": ">=4" + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/read-pkg-up": { + "node_modules/uniq": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/uniq/-/uniq-1.0.1.tgz", + "integrity": "sha512-Gw+zz50YNKPDKXs+9d+aKAjVwpjNwqzvNpLigIruT4HA9lMZNdMqs9x07kKHB/L9WRzqp4+DlTU5s4wG2esdoA==", + "dev": true, + "license": "MIT" + }, + "node_modules/unique-filename": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-3.0.0.tgz", + "integrity": "sha512-afXhuC55wkAmZ0P18QsVE6kp8JaxrEokN2HGIoIVv2ijHQd419H0+6EigAFcIzXeMIkcIkNBpB3L/DXB3cTS/g==", "dev": true, - "license": "MIT", + "license": "ISC", "dependencies": { - "find-up": "^2.0.0", - "read-pkg": "^3.0.0" + "unique-slug": "^4.0.0" }, "engines": { - "node": ">=4" + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, - "node_modules/read-pkg-up/node_modules/find-up": { - "version": "2.1.0", + "node_modules/unique-slug": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-4.0.0.tgz", + "integrity": "sha512-WrcA6AyEfqDX5bWige/4NQfPZMtASNVxdmWR76WESYQVAACSgWcR6e9i0mofqqBxYFtL4oAxPIptY73/0YE1DQ==", "dev": true, - "license": "MIT", + "license": "ISC", "dependencies": { - "locate-path": "^2.0.0" + "imurmurhash": "^0.1.4" }, "engines": { - "node": ">=4" + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, - "node_modules/read-pkg-up/node_modules/locate-path": { - "version": "2.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "p-locate": "^2.0.0", - "path-exists": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/read-pkg-up/node_modules/p-limit": { - "version": "1.3.0", + "node_modules/universal-user-agent": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/universal-user-agent/-/universal-user-agent-6.0.1.tgz", + "integrity": "sha512-yCzhz6FN2wU1NiiQRogkTQszlQSlpWaw8SvVegAc+bDxbzHgh1vX8uIe8OYyMH6DwH+sdTJsgMl36+mSMdRJIQ==", "dev": true, - "license": "MIT", - "dependencies": { - "p-try": "^1.0.0" - }, - "engines": { - "node": ">=4" - } + "license": "ISC" }, - "node_modules/read-pkg-up/node_modules/p-locate": { - "version": "2.0.0", + "node_modules/universalify": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", + "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", "dev": true, "license": "MIT", - "dependencies": { - "p-limit": "^1.1.0" - }, "engines": { - "node": ">=4" + "node": ">= 4.0.0" } }, - "node_modules/read-pkg-up/node_modules/p-try": { + "node_modules/unpipe": { "version": "1.0.0", - "dev": true, + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", "license": "MIT", "engines": { - "node": ">=4" + "node": ">= 0.8" } }, - "node_modules/read-pkg-up/node_modules/path-exists": { - "version": "3.0.0", + "node_modules/upath": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/upath/-/upath-2.0.1.tgz", + "integrity": "sha512-1uEe95xksV1O0CYKXo8vQvN1JEbtJp7lb7C5U9HMsIp6IVwntkH/oNUzyVNQSd4S1sYk2FpSSW44FqMc8qee5w==", "dev": true, "license": "MIT", "engines": { - "node": ">=4" + "node": ">=4", + "yarn": "*" } }, - "node_modules/read-pkg/node_modules/hosted-git-info": { - "version": "2.8.9", - "dev": true, - "license": "ISC" - }, - "node_modules/read-pkg/node_modules/load-json-file": { - "version": "4.0.0", + "node_modules/update-browserslist-db": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.1.tgz", + "integrity": "sha512-R8UzCaa9Az+38REPiJ1tXlImTJXlVfgHZsglwBD/k6nj76ctsH1E3q4doGrukiLQd3sGQYu56r5+lo5r94l29A==", "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], "license": "MIT", "dependencies": { - "graceful-fs": "^4.1.2", - "parse-json": "^4.0.0", - "pify": "^3.0.0", - "strip-bom": "^3.0.0" + "escalade": "^3.2.0", + "picocolors": "^1.1.0" }, - "engines": { - "node": ">=4" + "bin": { + "update-browserslist-db": "cli.js" + }, + "peerDependencies": { + "browserslist": ">= 4.21.0" } }, - "node_modules/read-pkg/node_modules/normalize-package-data": { - "version": "2.5.0", - "dev": true, + "node_modules/uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", "license": "BSD-2-Clause", "dependencies": { - "hosted-git-info": "^2.1.4", - "resolve": "^1.10.0", - "semver": "2 || 3 || 4 || 5", - "validate-npm-package-license": "^3.0.1" + "punycode": "^2.1.0" } }, - "node_modules/read-pkg/node_modules/parse-json": { - "version": "4.0.0", - "dev": true, + "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==", "license": "MIT", "dependencies": { - "error-ex": "^1.3.1", - "json-parse-better-errors": "^1.0.1" - }, - "engines": { - "node": ">=4" + "querystringify": "^2.1.1", + "requires-port": "^1.0.0" } }, - "node_modules/read-pkg/node_modules/path-type": { - "version": "3.0.0", + "node_modules/util": { + "version": "0.12.5", + "resolved": "https://registry.npmjs.org/util/-/util-0.12.5.tgz", + "integrity": "sha512-kZf/K6hEIrWHI6XqOFUiiMa+79wE/D8Q+NCNAWclkyg3b4d2k7s0QGepNjiABc+aR3N1PAyHL7p6UcLY6LmrnA==", "dev": true, "license": "MIT", "dependencies": { - "pify": "^3.0.0" - }, - "engines": { - "node": ">=4" + "inherits": "^2.0.3", + "is-arguments": "^1.0.4", + "is-generator-function": "^1.0.7", + "is-typed-array": "^1.1.3", + "which-typed-array": "^1.1.2" } }, - "node_modules/read-pkg/node_modules/pify": { - "version": "3.0.0", - "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==", + "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==", "license": "MIT", "engines": { - "node": ">=4" + "node": ">= 0.4.0" } }, - "node_modules/read-pkg/node_modules/semver": { - "version": "5.7.2", + "node_modules/uuid": { + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-10.0.0.tgz", + "integrity": "sha512-8XkAphELsDnEGrDxUOHB3RGvXz6TeuYSGEZBOjtTtPm2lwhGBjLgOzLHB63IUWfBpNucQjND6d3AOudO+H3RWQ==", "dev": true, - "license": "ISC", + "funding": [ + "https://github.com/sponsors/broofa", + "https://github.com/sponsors/ctavan" + ], + "license": "MIT", "bin": { - "semver": "bin/semver" + "uuid": "dist/bin/uuid" } }, - "node_modules/read-pkg/node_modules/strip-bom": { - "version": "3.0.0", + "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, - "license": "MIT", - "engines": { - "node": ">=4" - } + "license": "MIT" }, - "node_modules/read-yaml-file": { - "version": "1.1.0", + "node_modules/v8-to-istanbul": { + "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": "MIT", + "license": "ISC", "dependencies": { - "graceful-fs": "^4.1.5", - "js-yaml": "^3.6.1", - "pify": "^4.0.1", - "strip-bom": "^3.0.0" + "@jridgewell/trace-mapping": "^0.3.12", + "@types/istanbul-lib-coverage": "^2.0.1", + "convert-source-map": "^2.0.0" }, "engines": { - "node": ">=6" - } - }, - "node_modules/read-yaml-file/node_modules/pify": { - "version": "4.0.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" + "node": ">=10.12.0" } }, - "node_modules/read-yaml-file/node_modules/strip-bom": { - "version": "3.0.0", + "node_modules/validate-npm-package-license": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", + "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", "dev": true, - "license": "MIT", - "engines": { - "node": ">=4" + "license": "Apache-2.0", + "dependencies": { + "spdx-correct": "^3.0.0", + "spdx-expression-parse": "^3.0.0" } }, - "node_modules/read/node_modules/mute-stream": { - "version": "1.0.0", + "node_modules/validate-npm-package-name": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/validate-npm-package-name/-/validate-npm-package-name-5.0.1.tgz", + "integrity": "sha512-OljLrQ9SQdOUqTaQxqL5dEfZWrXExyyWsozYlAWFawPVNuD83igl7uJD2RTkNMbniIYgt8l81eCJGIdQF7avLQ==", "dev": true, "license": "ISC", "engines": { "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, - "node_modules/readable-stream": { - "version": "3.6.2", + "node_modules/varuint-bitcoin": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/varuint-bitcoin/-/varuint-bitcoin-1.1.2.tgz", + "integrity": "sha512-4EVb+w4rx+YfVM32HQX42AbbT7/1f5zwAYhIujKXKk8NQK+JfRVl3pqT3hjNn/L+RstigmGGKVwHA/P0wgITZw==", "license": "MIT", "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - }, - "engines": { - "node": ">= 6" + "safe-buffer": "^5.1.1" } }, - "node_modules/rechoir": { - "version": "0.8.0", - "dev": true, + "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", - "dependencies": { - "resolve": "^1.20.0" - }, "engines": { - "node": ">= 10.13.0" + "node": ">= 0.8" } }, - "node_modules/redent": { - "version": "3.0.0", - "dev": true, + "node_modules/verror": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", + "integrity": "sha512-ZZKSmDAEFOijERBLkmYfJ+vmk3w+7hOLYDNkRCuRuMJGEmqYNCNLyBBFwWKVMhfwaEF3WOd0Zlw86U/WC/+nYw==", + "engines": [ + "node >=0.6.0" + ], "license": "MIT", "dependencies": { - "indent-string": "^4.0.0", - "strip-indent": "^3.0.0" - }, - "engines": { - "node": ">=8" + "assert-plus": "^1.0.0", + "core-util-is": "1.0.2", + "extsprintf": "^1.2.0" } }, - "node_modules/regenerator-runtime": { - "version": "0.14.0", - "dev": true, - "license": "MIT" - }, - "node_modules/regexp.prototype.flags": { - "version": "1.5.0", + "node_modules/vite": { + "version": "5.4.11", + "resolved": "https://registry.npmjs.org/vite/-/vite-5.4.11.tgz", + "integrity": "sha512-c7jFQRklXua0mTzneGW9QVyxFjUgwcihC4bXEtujIo2ouWCe1Ajt/amn2PCxYnhYfd5k09JX3SB7OYWFKYqj8Q==", "dev": true, "license": "MIT", "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "functions-have-names": "^1.2.3" + "esbuild": "^0.21.3", + "postcss": "^8.4.43", + "rollup": "^4.20.0" }, - "engines": { - "node": ">= 0.4" + "bin": { + "vite": "bin/vite.js" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/regexpp": { - "version": "3.2.0", - "dev": true, - "license": "MIT", "engines": { - "node": ">=8" + "node": "^18.0.0 || >=20.0.0" }, "funding": { - "url": "https://github.com/sponsors/mysticatea" - } - }, - "node_modules/request": { - "version": "2.88.2", - "license": "Apache-2.0", - "dependencies": { - "aws-sign2": "~0.7.0", - "aws4": "^1.8.0", - "caseless": "~0.12.0", - "combined-stream": "~1.0.6", - "extend": "~3.0.2", - "forever-agent": "~0.6.1", - "form-data": "~2.3.2", - "har-validator": "~5.1.3", - "http-signature": "~1.2.0", - "is-typedarray": "~1.0.0", - "isstream": "~0.1.2", - "json-stringify-safe": "~5.0.1", - "mime-types": "~2.1.19", - "oauth-sign": "~0.9.0", - "performance-now": "^2.1.0", - "qs": "~6.5.2", - "safe-buffer": "^5.1.2", - "tough-cookie": "~2.5.0", - "tunnel-agent": "^0.6.0", - "uuid": "^3.3.2" + "url": "https://github.com/vitejs/vite?sponsor=1" }, - "engines": { - "node": ">= 6" + "optionalDependencies": { + "fsevents": "~2.3.3" + }, + "peerDependencies": { + "@types/node": "^18.0.0 || >=20.0.0", + "less": "*", + "lightningcss": "^1.21.0", + "sass": "*", + "sass-embedded": "*", + "stylus": "*", + "sugarss": "*", + "terser": "^5.4.0" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + }, + "less": { + "optional": true + }, + "lightningcss": { + "optional": true + }, + "sass": { + "optional": true + }, + "sass-embedded": { + "optional": true + }, + "stylus": { + "optional": true + }, + "sugarss": { + "optional": true + }, + "terser": { + "optional": true + } } }, - "node_modules/request/node_modules/form-data": { - "version": "2.3.3", + "node_modules/vite-node": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/vite-node/-/vite-node-2.1.5.tgz", + "integrity": "sha512-rd0QIgx74q4S1Rd56XIiL2cYEdyWn13cunYBIuqh9mpmQr7gGS0IxXoP8R6OaZtNQQLyXSWbd4rXKYUbhFpK5w==", + "dev": true, "license": "MIT", "dependencies": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.6", - "mime-types": "^2.1.12" + "cac": "^6.7.14", + "debug": "^4.3.7", + "es-module-lexer": "^1.5.4", + "pathe": "^1.1.2", + "vite": "^5.0.0" + }, + "bin": { + "vite-node": "vite-node.mjs" }, "engines": { - "node": ">= 0.12" + "node": "^18.0.0 || >=20.0.0" + }, + "funding": { + "url": "https://opencollective.com/vitest" } }, - "node_modules/request/node_modules/qs": { - "version": "6.5.3", - "license": "BSD-3-Clause", + "node_modules/vite/node_modules/@esbuild/aix-ppc64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.21.5.tgz", + "integrity": "sha512-1SDgH6ZSPTlggy1yI6+Dbkiz8xzpHJEVAlF/AM1tHPLsf5STom9rwtjE4hKAF20FfXXNTFqEYXyJNWh1GiZedQ==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "aix" + ], "engines": { - "node": ">=0.6" + "node": ">=12" } }, - "node_modules/require-directory": { - "version": "2.1.1", + "node_modules/vite/node_modules/@esbuild/android-arm": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.21.5.tgz", + "integrity": "sha512-vCPvzSjpPHEi1siZdlvAlsPxXl7WbOVUBBAowWug4rJHb68Ox8KualB+1ocNvT5fjv6wpkX6o/iEpbDrf68zcg==", + "cpu": [ + "arm" + ], "dev": true, "license": "MIT", + "optional": true, + "os": [ + "android" + ], "engines": { - "node": ">=0.10.0" + "node": ">=12" } }, - "node_modules/require-from-string": { - "version": "2.0.2", + "node_modules/vite/node_modules/@esbuild/android-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.21.5.tgz", + "integrity": "sha512-c0uX9VAUBQ7dTDCjq+wdyGLowMdtR/GoC2U5IYk/7D1H1JYC0qseD7+11iMP2mRLN9RcCMRcjC4YMclCzGwS/A==", + "cpu": [ + "arm64" + ], "dev": true, "license": "MIT", + "optional": true, + "os": [ + "android" + ], "engines": { - "node": ">=0.10.0" + "node": ">=12" } }, - "node_modules/require-main-filename": { - "version": "2.0.0", - "dev": true, - "license": "ISC" - }, - "node_modules/requirejs": { - "version": "2.3.6", + "node_modules/vite/node_modules/@esbuild/android-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.21.5.tgz", + "integrity": "sha512-D7aPRUUNHRBwHxzxRvp856rjUHRFW1SdQATKXH2hqA0kAZb1hKmi02OpYRacl0TxIGz/ZmXWlbZgjwWYaCakTA==", + "cpu": [ + "x64" + ], "dev": true, "license": "MIT", - "bin": { - "r_js": "bin/r.js", - "r.js": "bin/r.js" - }, + "optional": true, + "os": [ + "android" + ], "engines": { - "node": ">=0.4.0" + "node": ">=12" } }, - "node_modules/requirejs-config-file": { - "version": "4.0.0", + "node_modules/vite/node_modules/@esbuild/darwin-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.21.5.tgz", + "integrity": "sha512-DwqXqZyuk5AiWWf3UfLiRDJ5EDd49zg6O9wclZ7kUMv2WRFr4HKjXp/5t8JZ11QbQfUS6/cRCKGwYhtNAY88kQ==", + "cpu": [ + "arm64" + ], "dev": true, "license": "MIT", - "dependencies": { - "esprima": "^4.0.0", - "stringify-object": "^3.2.1" - }, + "optional": true, + "os": [ + "darwin" + ], "engines": { - "node": ">=10.13.0" + "node": ">=12" } }, - "node_modules/requires-port": { - "version": "1.0.0", - "license": "MIT" - }, - "node_modules/resolve": { - "version": "1.22.4", + "node_modules/vite/node_modules/@esbuild/darwin-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.21.5.tgz", + "integrity": "sha512-se/JjF8NlmKVG4kNIuyWMV/22ZaerB+qaSi5MdrXtd6R08kvs2qCN4C09miupktDitvh8jRFflwGFBQcxZRjbw==", + "cpu": [ + "x64" + ], "dev": true, "license": "MIT", - "dependencies": { - "is-core-module": "^2.13.0", - "path-parse": "^1.0.7", - "supports-preserve-symlinks-flag": "^1.0.0" - }, - "bin": { - "resolve": "bin/resolve" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" } }, - "node_modules/resolve-cwd": { - "version": "3.0.0", + "node_modules/vite/node_modules/@esbuild/freebsd-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.21.5.tgz", + "integrity": "sha512-5JcRxxRDUJLX8JXp/wcBCy3pENnCgBR9bN6JsY4OmhfUtIHe3ZW0mawA7+RDAcMLrMIZaf03NlQiX9DGyB8h4g==", + "cpu": [ + "arm64" + ], "dev": true, "license": "MIT", - "dependencies": { - "resolve-from": "^5.0.0" - }, + "optional": true, + "os": [ + "freebsd" + ], "engines": { - "node": ">=8" + "node": ">=12" } }, - "node_modules/resolve-dependency-path": { - "version": "2.0.0", + "node_modules/vite/node_modules/@esbuild/freebsd-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.21.5.tgz", + "integrity": "sha512-J95kNBj1zkbMXtHVH29bBriQygMXqoVQOQYA+ISs0/2l3T9/kj42ow2mpqerRBxDJnmkUDCaQT/dfNXWX/ZZCQ==", + "cpu": [ + "x64" + ], "dev": true, "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], "engines": { - "node": ">=6.0.0" + "node": ">=12" } }, - "node_modules/resolve-from": { - "version": "5.0.0", + "node_modules/vite/node_modules/@esbuild/linux-arm": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.21.5.tgz", + "integrity": "sha512-bPb5AHZtbeNGjCKVZ9UGqGwo8EUu4cLq68E95A53KlxAPRmUyYv2D6F0uUI65XisGOL1hBP5mTronbgo+0bFcA==", + "cpu": [ + "arm" + ], "dev": true, "license": "MIT", + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": ">=8" + "node": ">=12" } }, - "node_modules/resolve-global": { - "version": "1.0.0", + "node_modules/vite/node_modules/@esbuild/linux-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.21.5.tgz", + "integrity": "sha512-ibKvmyYzKsBeX8d8I7MH/TMfWDXBF3db4qM6sy+7re0YXya+K1cem3on9XgdT2EQGMu4hQyZhan7TeQ8XkGp4Q==", + "cpu": [ + "arm64" + ], "dev": true, "license": "MIT", - "dependencies": { - "global-dirs": "^0.1.1" - }, + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": ">=8" + "node": ">=12" } }, - "node_modules/resolve-pkg-maps": { - "version": "1.0.0", + "node_modules/vite/node_modules/@esbuild/linux-ia32": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.21.5.tgz", + "integrity": "sha512-YvjXDqLRqPDl2dvRODYmmhz4rPeVKYvppfGYKSNGdyZkA01046pLWyRKKI3ax8fbJoK5QbxblURkwK/MWY18Tg==", + "cpu": [ + "ia32" + ], "dev": true, "license": "MIT", - "funding": { - "url": "https://github.com/privatenumber/resolve-pkg-maps?sponsor=1" + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" } }, - "node_modules/resolve.exports": { - "version": "2.0.2", + "node_modules/vite/node_modules/@esbuild/linux-loong64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.21.5.tgz", + "integrity": "sha512-uHf1BmMG8qEvzdrzAqg2SIG/02+4/DHB6a9Kbya0XDvwDEKCoC8ZRWI5JJvNdUjtciBGFQ5PuBlpEOXQj+JQSg==", + "cpu": [ + "loong64" + ], "dev": true, "license": "MIT", + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": ">=10" + "node": ">=12" } }, - "node_modules/restore-cursor": { - "version": "3.1.0", + "node_modules/vite/node_modules/@esbuild/linux-mips64el": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.21.5.tgz", + "integrity": "sha512-IajOmO+KJK23bj52dFSNCMsz1QP1DqM6cwLUv3W1QwyxkyIWecfafnI555fvSGqEKwjMXVLokcV5ygHW5b3Jbg==", + "cpu": [ + "mips64el" + ], + "dev": true, "license": "MIT", - "dependencies": { - "onetime": "^5.1.0", - "signal-exit": "^3.0.2" - }, + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": ">=8" + "node": ">=12" } }, - "node_modules/retry": { - "version": "0.12.0", + "node_modules/vite/node_modules/@esbuild/linux-ppc64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.21.5.tgz", + "integrity": "sha512-1hHV/Z4OEfMwpLO8rp7CvlhBDnjsC3CttJXIhBi+5Aj5r+MBvy4egg7wCbe//hSsT+RvDAG7s81tAvpL2XAE4w==", + "cpu": [ + "ppc64" + ], "dev": true, "license": "MIT", + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": ">= 4" + "node": ">=12" } }, - "node_modules/reusify": { - "version": "1.0.4", + "node_modules/vite/node_modules/@esbuild/linux-riscv64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.21.5.tgz", + "integrity": "sha512-2HdXDMd9GMgTGrPWnJzP2ALSokE/0O5HhTUvWIbD3YdjME8JwvSCnNGBnTThKGEB91OZhzrJ4qIIxk/SBmyDDA==", + "cpu": [ + "riscv64" + ], "dev": true, "license": "MIT", + "optional": true, + "os": [ + "linux" + ], "engines": { - "iojs": ">=1.0.0", - "node": ">=0.10.0" + "node": ">=12" } }, - "node_modules/rimraf": { - "version": "5.0.1", + "node_modules/vite/node_modules/@esbuild/linux-s390x": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.21.5.tgz", + "integrity": "sha512-zus5sxzqBJD3eXxwvjN1yQkRepANgxE9lgOW2qLnmr8ikMTphkjgXu1HR01K4FJg8h1kEEDAqDcZQtbrRnB41A==", + "cpu": [ + "s390x" + ], "dev": true, - "license": "ISC", - "dependencies": { - "glob": "^10.2.5" - }, - "bin": { - "rimraf": "dist/cjs/src/bin.js" - }, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" + "node": ">=12" } }, - "node_modules/rimraf/node_modules/brace-expansion": { - "version": "2.0.1", + "node_modules/vite/node_modules/@esbuild/linux-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.21.5.tgz", + "integrity": "sha512-1rYdTpyv03iycF1+BhzrzQJCdOuAOtaqHTWJZCWvijKD2N5Xu0TtVC8/+1faWqcP9iBCWOmjmhoH94dH82BxPQ==", + "cpu": [ + "x64" + ], "dev": true, "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0" - } - }, - "node_modules/rimraf/node_modules/glob": { - "version": "10.3.3", - "dev": true, - "license": "ISC", - "dependencies": { - "foreground-child": "^3.1.0", - "jackspeak": "^2.0.3", - "minimatch": "^9.0.1", - "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0", - "path-scurry": "^1.10.1" - }, - "bin": { - "glob": "dist/cjs/src/bin.js" - }, + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" + "node": ">=12" } }, - "node_modules/rimraf/node_modules/minimatch": { - "version": "9.0.3", + "node_modules/vite/node_modules/@esbuild/netbsd-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.21.5.tgz", + "integrity": "sha512-Woi2MXzXjMULccIwMnLciyZH4nCIMpWQAs049KEeMvOcNADVxo0UBIQPfSmxB3CWKedngg7sWZdLvLczpe0tLg==", + "cpu": [ + "x64" + ], "dev": true, - "license": "ISC", - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/ripemd160": { - "version": "2.0.2", "license": "MIT", - "dependencies": { - "hash-base": "^3.0.0", - "inherits": "^2.0.1" - } - }, - "node_modules/ripemd160-min": { - "version": "0.0.6", + "optional": true, + "os": [ + "netbsd" + ], "engines": { - "node": ">=8" + "node": ">=12" } }, - "node_modules/rollup": { - "version": "4.27.3", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.27.3.tgz", - "integrity": "sha512-SLsCOnlmGt9VoZ9Ek8yBK8tAdmPHeppkw+Xa7yDlCEhDTvwYei03JlWo1fdc7YTfLZ4tD8riJCUyAgTbszk1fQ==", + "node_modules/vite/node_modules/@esbuild/openbsd-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.21.5.tgz", + "integrity": "sha512-HLNNw99xsvx12lFBUwoT8EVCsSvRNDVxNpjZ7bPn947b8gJPzeHWyNVhFsaerc0n3TsbOINvRP2byTZ5LKezow==", + "cpu": [ + "x64" + ], "dev": true, "license": "MIT", - "dependencies": { - "@types/estree": "1.0.6" - }, - "bin": { - "rollup": "dist/bin/rollup" - }, + "optional": true, + "os": [ + "openbsd" + ], "engines": { - "node": ">=18.0.0", - "npm": ">=8.0.0" - }, - "optionalDependencies": { - "@rollup/rollup-android-arm-eabi": "4.27.3", - "@rollup/rollup-android-arm64": "4.27.3", - "@rollup/rollup-darwin-arm64": "4.27.3", - "@rollup/rollup-darwin-x64": "4.27.3", - "@rollup/rollup-freebsd-arm64": "4.27.3", - "@rollup/rollup-freebsd-x64": "4.27.3", - "@rollup/rollup-linux-arm-gnueabihf": "4.27.3", - "@rollup/rollup-linux-arm-musleabihf": "4.27.3", - "@rollup/rollup-linux-arm64-gnu": "4.27.3", - "@rollup/rollup-linux-arm64-musl": "4.27.3", - "@rollup/rollup-linux-powerpc64le-gnu": "4.27.3", - "@rollup/rollup-linux-riscv64-gnu": "4.27.3", - "@rollup/rollup-linux-s390x-gnu": "4.27.3", - "@rollup/rollup-linux-x64-gnu": "4.27.3", - "@rollup/rollup-linux-x64-musl": "4.27.3", - "@rollup/rollup-win32-arm64-msvc": "4.27.3", - "@rollup/rollup-win32-ia32-msvc": "4.27.3", - "@rollup/rollup-win32-x64-msvc": "4.27.3", - "fsevents": "~2.3.2" + "node": ">=12" } }, - "node_modules/run-applescript": { - "version": "5.0.0", + "node_modules/vite/node_modules/@esbuild/sunos-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.21.5.tgz", + "integrity": "sha512-6+gjmFpfy0BHU5Tpptkuh8+uw3mnrvgs+dSPQXQOv3ekbordwnzTVEb4qnIvQcYXq6gzkyTnoZ9dZG+D4garKg==", + "cpu": [ + "x64" + ], "dev": true, "license": "MIT", - "dependencies": { - "execa": "^5.0.0" - }, + "optional": true, + "os": [ + "sunos" + ], "engines": { "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/run-async": { - "version": "2.4.1", + "node_modules/vite/node_modules/@esbuild/win32-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.21.5.tgz", + "integrity": "sha512-Z0gOTd75VvXqyq7nsl93zwahcTROgqvuAcYDUr+vOv8uHhNSKROyU961kgtCD1e95IqPKSQKH7tBTslnS3tA8A==", + "cpu": [ + "arm64" + ], + "dev": true, "license": "MIT", + "optional": true, + "os": [ + "win32" + ], "engines": { - "node": ">=0.12.0" + "node": ">=12" } }, - "node_modules/run-parallel": { - "version": "1.2.0", + "node_modules/vite/node_modules/@esbuild/win32-ia32": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.21.5.tgz", + "integrity": "sha512-SWXFF1CL2RVNMaVs+BBClwtfZSvDgtL//G/smwAc5oVK/UPu2Gu9tIaRgFmYFFKrmg3SyAjSrElf0TiJ1v8fYA==", + "cpu": [ + "ia32" + ], "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", - "dependencies": { - "queue-microtask": "^1.2.2" - } - }, - "node_modules/rxjs": { - "version": "6.6.7", - "license": "Apache-2.0", - "dependencies": { - "tslib": "^1.9.0" - }, - "engines": { - "npm": ">=2.0.0" - } - }, - "node_modules/rxjs/node_modules/tslib": { - "version": "1.14.1", - "license": "0BSD" - }, - "node_modules/safe-array-concat": { - "version": "1.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.2.0", - "has-symbols": "^1.0.3", - "isarray": "^2.0.5" - }, - "engines": { - "node": ">=0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/safe-buffer": { - "version": "5.2.1", - "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/safe-regex-test": { - "version": "1.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.1.3", - "is-regex": "^1.1.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/safe-stable-stringify": { - "version": "2.4.3", - "license": "MIT", - "engines": { - "node": ">=10" - } - }, - "node_modules/safer-buffer": { - "version": "2.1.2", - "license": "MIT" - }, - "node_modules/sass-lookup": { - "version": "3.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "commander": "^2.16.0" - }, - "bin": { - "sass-lookup": "bin/cli.js" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/sass-lookup/node_modules/commander": { - "version": "2.20.3", - "dev": true, - "license": "MIT" - }, - "node_modules/saxes": { - "version": "5.0.1", - "dev": true, - "license": "ISC", - "dependencies": { - "xmlchars": "^2.2.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/sbtc": { - "resolved": "packages/sbtc", - "link": true - }, - "node_modules/sbtc-bridge-lib": { - "version": "1.1.27", - "resolved": "https://registry.npmjs.org/sbtc-bridge-lib/-/sbtc-bridge-lib-1.1.27.tgz", - "integrity": "sha512-PnCiSiV2k6+Iqo1KqeT51ZLJrQsQsLDeg0RK5SiilgjtJq4spbWMFZrwM8IqY93xxgBOUN94PBEpJPqZPpiJgA==", - "dev": true, - "license": "ISC", - "dependencies": { - "@noble/secp256k1": "^2.0.0", - "@scure/base": "^1.1.1", - "@scure/btc-signer": "^1.1.0", - "@stacks/encryption": "^6.5.4", - "@stacks/stacks-blockchain-api-types": "^7.1.10", - "base58check": "^2.0.0", - "c32check": "^2.0.0", - "micro-packed": "^0.3.2", - "micro-stacks": "^1.2.1" - } - }, - "node_modules/sbtc-bridge-lib/node_modules/@noble/secp256k1": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/@noble/secp256k1/-/secp256k1-2.1.0.tgz", - "integrity": "sha512-XLEQQNdablO0XZOIniFQimiXsZDNwaYgL96dZwC54Q30imSbAOFf3NKtepc+cXyuZf5Q1HCgbqgZ2UFFuHVcEw==", - "dev": true, - "license": "MIT", - "funding": { - "url": "https://paulmillr.com/funding/" - } - }, - "node_modules/sbtc-bridge-lib/node_modules/@scure/bip32": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@scure/bip32/-/bip32-1.1.0.tgz", - "integrity": "sha512-ftTW3kKX54YXLCxH6BB7oEEoJfoE2pIgw7MINKAs5PsS6nqKPuKk1haTF/EuHmYqG330t5GSrdmtRuHaY1a62Q==", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://paulmillr.com/funding/" - } - ], - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "@noble/hashes": "~1.1.1", - "@noble/secp256k1": "~1.6.0", - "@scure/base": "~1.1.0" - } - }, - "node_modules/sbtc-bridge-lib/node_modules/@scure/bip32/node_modules/@noble/secp256k1": { - "version": "1.6.3", - "resolved": "https://registry.npmjs.org/@noble/secp256k1/-/secp256k1-1.6.3.tgz", - "integrity": "sha512-T04e4iTurVy7I8Sw4+c5OSN9/RkPlo1uKxAomtxQNLq8j1uPAqnsqG1bqvY3Jv7c13gyr6dui0zmh/I3+f/JaQ==", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://paulmillr.com/funding/" - } - ], "license": "MIT", "optional": true, - "peer": true - }, - "node_modules/sbtc-bridge-lib/node_modules/@stacks/common": { - "version": "6.16.0", - "resolved": "https://registry.npmjs.org/@stacks/common/-/common-6.16.0.tgz", - "integrity": "sha512-PnzvhrdGRMVZvxTulitlYafSK4l02gPCBBoI9QEoTqgSnv62oaOXhYAUUkTMFKxdHW1seVEwZsrahuXiZPIAwg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/bn.js": "^5.1.0", - "@types/node": "^18.0.4" - } - }, - "node_modules/sbtc-bridge-lib/node_modules/@stacks/encryption": { - "version": "6.17.0", - "resolved": "https://registry.npmjs.org/@stacks/encryption/-/encryption-6.17.0.tgz", - "integrity": "sha512-c0+ZOjrAiB1fDCjXO6XqHdYgpeBeMYyeH+dWahpD1VQUDor2PE5Q47qyuibWmx36rLWt1M6wlaLdeVm6HlKGzw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@noble/hashes": "1.1.5", - "@noble/secp256k1": "1.7.1", - "@scure/bip39": "1.1.0", - "@stacks/common": "^6.16.0", - "@types/node": "^18.0.4", - "base64-js": "^1.5.1", - "bs58": "^5.0.0", - "ripemd160-min": "^0.0.6", - "varuint-bitcoin": "^1.1.2" - } - }, - "node_modules/sbtc-bridge-lib/node_modules/@stacks/encryption/node_modules/@noble/secp256k1": { - "version": "1.7.1", - "resolved": "https://registry.npmjs.org/@noble/secp256k1/-/secp256k1-1.7.1.tgz", - "integrity": "sha512-hOUk6AyBFmqVrv7k5WAw/LpszxVbj9gGN4JRkIX52fdFAj1UA61KXmZDvqVEm+pOyec3+fIeZB02LYa/pWOArw==", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://paulmillr.com/funding/" - } - ], - "license": "MIT" - }, - "node_modules/sbtc-bridge-lib/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==", - "dev": true, - "license": "MIT", - "dependencies": { - "undici-types": "~5.26.4" - } - }, - "node_modules/sbtc-bridge-lib/node_modules/micro-stacks": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/micro-stacks/-/micro-stacks-1.2.1.tgz", - "integrity": "sha512-CmFAH34GfgW9vMwnINflxH1COUWUg2kSYnPVfToZXPEJwHMGo8b3syte7s5zJ2rR/RSjpquQduiDNRAgF2Hh0w==", - "dev": true, - "license": "MIT", - "dependencies": { - "@noble/hashes": "1.1.2", - "@noble/secp256k1": "1.6.3" - }, - "engines": { - "node": ">=14" - }, - "peerDependencies": { - "@scure/bip32": "1.1.0", - "@scure/bip39": "1.1.0" - }, - "peerDependenciesMeta": { - "@scure/bip32": { - "optional": true - }, - "@scure/bip39": { - "optional": true - } - } - }, - "node_modules/sbtc-bridge-lib/node_modules/micro-stacks/node_modules/@noble/hashes": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.1.2.tgz", - "integrity": "sha512-KYRCASVTv6aeUi1tsF8/vpyR7zpfs3FUzy2Jqm+MU+LmUKhQ0y2FpfwqkCcxSg2ua4GALJd8k2R76WxwZGbQpA==", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://paulmillr.com/funding/" - } - ], - "license": "MIT" - }, - "node_modules/sbtc-bridge-lib/node_modules/micro-stacks/node_modules/@noble/secp256k1": { - "version": "1.6.3", - "resolved": "https://registry.npmjs.org/@noble/secp256k1/-/secp256k1-1.6.3.tgz", - "integrity": "sha512-T04e4iTurVy7I8Sw4+c5OSN9/RkPlo1uKxAomtxQNLq8j1uPAqnsqG1bqvY3Jv7c13gyr6dui0zmh/I3+f/JaQ==", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://paulmillr.com/funding/" - } - ], - "license": "MIT" - }, - "node_modules/schema-inspector": { - "version": "2.0.2", - "license": "MIT", - "dependencies": { - "async": "~2.6.3" - } - }, - "node_modules/schema-inspector/node_modules/async": { - "version": "2.6.4", - "license": "MIT", - "dependencies": { - "lodash": "^4.17.14" - } - }, - "node_modules/schema-utils": { - "version": "3.3.0", - "dev": true, - "license": "MIT", - "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/semver": { - "version": "7.5.4", - "dev": true, - "license": "ISC", - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/semver-compare": { - "version": "1.0.0", - "dev": true, - "license": "MIT" - }, - "node_modules/semver/node_modules/lru-cache": { - "version": "6.0.0", - "dev": true, - "license": "ISC", - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/semver/node_modules/yallist": { - "version": "4.0.0", - "dev": true, - "license": "ISC" - }, - "node_modules/send": { - "version": "0.18.0", - "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/debug": { - "version": "2.6.9", - "license": "MIT", - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/send/node_modules/debug/node_modules/ms": { - "version": "2.0.0", - "license": "MIT" - }, - "node_modules/send/node_modules/ms": { - "version": "2.1.3", - "license": "MIT" - }, - "node_modules/serialize-javascript": { - "version": "6.0.1", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "randombytes": "^2.1.0" - } - }, - "node_modules/serve-static": { - "version": "1.15.0", - "license": "MIT", - "dependencies": { - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "parseurl": "~1.3.3", - "send": "0.18.0" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/set-blocking": { - "version": "2.0.0", - "dev": true, - "license": "ISC" - }, - "node_modules/setprototypeof": { - "version": "1.2.0", - "license": "ISC" - }, - "node_modules/sha.js": { - "version": "2.4.11", - "license": "(MIT AND BSD-3-Clause)", - "dependencies": { - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" - }, - "bin": { - "sha.js": "bin.js" - } - }, - "node_modules/shallow-clone": { - "version": "3.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "kind-of": "^6.0.2" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/shebang-command": { - "version": "2.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "shebang-regex": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/shebang-regex": { - "version": "3.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/shiki": { - "version": "0.14.3", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-sequence-parser": "^1.1.0", - "jsonc-parser": "^3.2.0", - "vscode-oniguruma": "^1.7.0", - "vscode-textmate": "^8.0.0" - } - }, - "node_modules/side-channel": { - "version": "1.0.4", - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.0", - "get-intrinsic": "^1.0.2", - "object-inspect": "^1.9.0" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/siginfo": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/siginfo/-/siginfo-2.0.0.tgz", - "integrity": "sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g==", - "dev": true, - "license": "ISC" - }, - "node_modules/signal-exit": { - "version": "3.0.7", - "license": "ISC" - }, - "node_modules/sigstore": { - "version": "2.3.1", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@sigstore/bundle": "^2.3.2", - "@sigstore/core": "^1.0.0", - "@sigstore/protobuf-specs": "^0.3.2", - "@sigstore/sign": "^2.3.2", - "@sigstore/tuf": "^2.3.4", - "@sigstore/verify": "^1.2.1" - }, - "engines": { - "node": "^16.14.0 || >=18.0.0" - } - }, - "node_modules/simple-swizzle": { - "version": "0.2.2", - "license": "MIT", - "dependencies": { - "is-arrayish": "^0.3.1" - } - }, - "node_modules/simple-swizzle/node_modules/is-arrayish": { - "version": "0.3.2", - "license": "MIT" - }, - "node_modules/sirv": { - "version": "1.0.19", - "dev": true, - "license": "MIT", - "dependencies": { - "@polka/url": "^1.0.0-next.20", - "mrmime": "^1.0.0", - "totalist": "^1.0.0" - }, - "engines": { - "node": ">= 10" - } - }, - "node_modules/sisteransi": { - "version": "1.0.5", - "dev": true, - "license": "MIT" - }, - "node_modules/slash": { - "version": "3.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/smart-buffer": { - "version": "4.2.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 6.0.0", - "npm": ">= 3.0.0" - } - }, - "node_modules/smartwrap": { - "version": "2.0.2", - "dev": true, - "license": "MIT", - "dependencies": { - "array.prototype.flat": "^1.2.3", - "breakword": "^1.0.5", - "grapheme-splitter": "^1.0.4", - "strip-ansi": "^6.0.0", - "wcwidth": "^1.0.1", - "yargs": "^15.1.0" - }, - "bin": { - "smartwrap": "src/terminal-adapter.js" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/smartwrap/node_modules/ansi-styles": { - "version": "4.3.0", - "dev": true, - "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/smartwrap/node_modules/cliui": { - "version": "6.0.0", - "dev": true, - "license": "ISC", - "dependencies": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.0", - "wrap-ansi": "^6.2.0" - } - }, - "node_modules/smartwrap/node_modules/color-convert": { - "version": "2.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/smartwrap/node_modules/color-name": { - "version": "1.1.4", - "dev": true, - "license": "MIT" - }, - "node_modules/smartwrap/node_modules/find-up": { - "version": "4.1.0", - "dev": true, - "license": "MIT", - "dependencies": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/smartwrap/node_modules/locate-path": { - "version": "5.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "p-locate": "^4.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/smartwrap/node_modules/p-locate": { - "version": "4.1.0", - "dev": true, - "license": "MIT", - "dependencies": { - "p-limit": "^2.2.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/smartwrap/node_modules/wrap-ansi": { - "version": "6.2.0", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/smartwrap/node_modules/y18n": { - "version": "4.0.3", - "dev": true, - "license": "ISC" - }, - "node_modules/smartwrap/node_modules/yargs": { - "version": "15.4.1", - "dev": true, - "license": "MIT", - "dependencies": { - "cliui": "^6.0.0", - "decamelize": "^1.2.0", - "find-up": "^4.1.0", - "get-caller-file": "^2.0.1", - "require-directory": "^2.1.1", - "require-main-filename": "^2.0.0", - "set-blocking": "^2.0.0", - "string-width": "^4.2.0", - "which-module": "^2.0.0", - "y18n": "^4.0.0", - "yargs-parser": "^18.1.2" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/smartwrap/node_modules/yargs-parser": { - "version": "18.1.3", - "dev": true, - "license": "ISC", - "dependencies": { - "camelcase": "^5.0.0", - "decamelize": "^1.2.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/socket.io-client": { - "version": "4.5.3", - "license": "MIT", - "dependencies": { - "@socket.io/component-emitter": "~3.1.0", - "debug": "~4.3.2", - "engine.io-client": "~6.2.3", - "socket.io-parser": "~4.2.0" - }, - "engines": { - "node": ">=10.0.0" - } - }, - "node_modules/socket.io-parser": { - "version": "4.2.4", - "license": "MIT", - "dependencies": { - "@socket.io/component-emitter": "~3.1.0", - "debug": "~4.3.1" - }, - "engines": { - "node": ">=10.0.0" - } - }, - "node_modules/socks": { - "version": "2.8.3", - "dev": true, - "license": "MIT", - "dependencies": { - "ip-address": "^9.0.5", - "smart-buffer": "^4.2.0" - }, - "engines": { - "node": ">= 10.0.0", - "npm": ">= 3.0.0" - } - }, - "node_modules/socks-proxy-agent": { - "version": "8.0.4", - "dev": true, - "license": "MIT", - "dependencies": { - "agent-base": "^7.1.1", - "debug": "^4.3.4", - "socks": "^2.8.3" - }, - "engines": { - "node": ">= 14" - } - }, - "node_modules/socks-proxy-agent/node_modules/agent-base": { - "version": "7.1.1", - "dev": true, - "license": "MIT", - "dependencies": { - "debug": "^4.3.4" - }, - "engines": { - "node": ">= 14" - } - }, - "node_modules/sort-keys": { - "version": "2.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "is-plain-obj": "^1.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/source-list-map": { - "version": "2.0.1", - "dev": true, - "license": "MIT" - }, - "node_modules/source-map": { - "version": "0.6.1", - "dev": true, - "license": "BSD-3-Clause", - "engines": { - "node": ">=0.10.0" - } - }, - "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==", - "dev": true, - "license": "BSD-3-Clause", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/source-map-support": { - "version": "0.5.13", - "dev": true, - "license": "MIT", - "dependencies": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" - } - }, - "node_modules/spawndamnit": { - "version": "2.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "cross-spawn": "^5.1.0", - "signal-exit": "^3.0.2" - } - }, - "node_modules/spawndamnit/node_modules/cross-spawn": { - "version": "5.1.0", - "dev": true, - "license": "MIT", - "dependencies": { - "lru-cache": "^4.0.1", - "shebang-command": "^1.2.0", - "which": "^1.2.9" - } - }, - "node_modules/spawndamnit/node_modules/lru-cache": { - "version": "4.1.5", - "dev": true, - "license": "ISC", - "dependencies": { - "pseudomap": "^1.0.2", - "yallist": "^2.1.2" - } - }, - "node_modules/spawndamnit/node_modules/shebang-command": { - "version": "1.2.0", - "dev": true, - "license": "MIT", - "dependencies": { - "shebang-regex": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/spawndamnit/node_modules/shebang-regex": { - "version": "1.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/spawndamnit/node_modules/which": { - "version": "1.3.1", - "dev": true, - "license": "ISC", - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "which": "bin/which" - } - }, - "node_modules/spawndamnit/node_modules/yallist": { - "version": "2.1.2", - "dev": true, - "license": "ISC" - }, - "node_modules/spdx-correct": { - "version": "3.2.0", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "spdx-expression-parse": "^3.0.0", - "spdx-license-ids": "^3.0.0" - } - }, - "node_modules/spdx-exceptions": { - "version": "2.3.0", - "dev": true, - "license": "CC-BY-3.0" - }, - "node_modules/spdx-expression-parse": { - "version": "3.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "spdx-exceptions": "^2.1.0", - "spdx-license-ids": "^3.0.0" - } - }, - "node_modules/spdx-license-ids": { - "version": "3.0.13", - "dev": true, - "license": "CC0-1.0" - }, - "node_modules/split": { - "version": "1.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "through": "2" - }, - "engines": { - "node": "*" - } - }, - "node_modules/split-on-first": { - "version": "1.1.0", - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/split2": { - "version": "3.2.2", - "dev": true, - "license": "ISC", - "dependencies": { - "readable-stream": "^3.0.0" - } - }, - "node_modules/sprintf-js": { - "version": "1.0.3", - "dev": true, - "license": "BSD-3-Clause" - }, - "node_modules/sshpk": { - "version": "1.17.0", - "license": "MIT", - "dependencies": { - "asn1": "~0.2.3", - "assert-plus": "^1.0.0", - "bcrypt-pbkdf": "^1.0.0", - "dashdash": "^1.12.0", - "ecc-jsbn": "~0.1.1", - "getpass": "^0.1.1", - "jsbn": "~0.1.0", - "safer-buffer": "^2.0.2", - "tweetnacl": "~0.14.0" - }, - "bin": { - "sshpk-conv": "bin/sshpk-conv", - "sshpk-sign": "bin/sshpk-sign", - "sshpk-verify": "bin/sshpk-verify" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ssri": { - "version": "10.0.6", - "dev": true, - "license": "ISC", - "dependencies": { - "minipass": "^7.0.3" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/ssri/node_modules/minipass": { - "version": "7.1.2", - "dev": true, - "license": "ISC", - "engines": { - "node": ">=16 || 14 >=14.17" - } - }, - "node_modules/stack-trace": { - "version": "0.0.10", - "license": "MIT", - "engines": { - "node": "*" - } - }, - "node_modules/stack-utils": { - "version": "2.0.6", - "dev": true, - "license": "MIT", - "dependencies": { - "escape-string-regexp": "^2.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/stack-utils/node_modules/escape-string-regexp": { - "version": "2.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/stackback": { - "version": "0.0.2", - "resolved": "https://registry.npmjs.org/stackback/-/stackback-0.0.2.tgz", - "integrity": "sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==", - "dev": true, - "license": "MIT" - }, - "node_modules/statuses": { - "version": "2.0.1", - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/std-env": { - "version": "3.8.0", - "resolved": "https://registry.npmjs.org/std-env/-/std-env-3.8.0.tgz", - "integrity": "sha512-Bc3YwwCB+OzldMxOXJIIvC6cPRWr/LxOp48CdQTOkPyk/t4JWWJbrilwBd7RJzKV8QW7tJkcgAmeuLLJugl5/w==", - "dev": true, - "license": "MIT" - }, - "node_modules/stream-browserify": { - "version": "3.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "inherits": "~2.0.4", - "readable-stream": "^3.5.0" - } - }, - "node_modules/stream-http": { - "version": "3.2.0", - "dev": true, - "license": "MIT", - "dependencies": { - "builtin-status-codes": "^3.0.0", - "inherits": "^2.0.4", - "readable-stream": "^3.6.0", - "xtend": "^4.0.2" - } - }, - "node_modules/stream-to-array": { - "version": "2.3.0", - "dev": true, - "license": "MIT", - "dependencies": { - "any-promise": "^1.1.0" - } - }, - "node_modules/stream-transform": { - "version": "2.1.3", - "dev": true, - "license": "MIT", - "dependencies": { - "mixme": "^0.5.1" - } - }, - "node_modules/strict-uri-encode": { - "version": "2.0.0", - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/string_decoder": { - "version": "1.3.0", - "license": "MIT", - "dependencies": { - "safe-buffer": "~5.2.0" - } - }, - "node_modules/string-length": { - "version": "4.0.2", - "dev": true, - "license": "MIT", - "dependencies": { - "char-regex": "^1.0.2", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/string-width": { - "version": "4.2.3", - "license": "MIT", - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/string-width-cjs": { - "name": "string-width", - "version": "4.2.3", - "dev": true, - "license": "MIT", - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/string.prototype.trim": { - "version": "1.2.7", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/string.prototype.trimend": { - "version": "1.0.6", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/string.prototype.trimstart": { - "version": "1.0.6", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/stringify-object": { - "version": "3.3.0", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "get-own-enumerable-property-symbols": "^3.0.0", - "is-obj": "^1.0.1", - "is-regexp": "^1.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/stringify-object/node_modules/is-obj": { - "version": "1.0.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/strip-ansi": { - "version": "6.0.1", - "license": "MIT", - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/strip-ansi-cjs": { - "name": "strip-ansi", - "version": "6.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/strip-bom": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/strip-final-newline": { - "version": "2.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/strip-indent": { - "version": "3.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "min-indent": "^1.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/strip-json-comments": { - "version": "3.1.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/strip-literal": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/strip-literal/-/strip-literal-1.3.0.tgz", - "integrity": "sha512-PugKzOsyXpArk0yWmUwqOZecSO0GH0bPoctLcqNDH9J04pVW3lflYE0ujElBGTloevcxF5MofAOZ7C5l2b+wLg==", - "dev": true, - "license": "MIT", - "dependencies": { - "acorn": "^8.10.0" - }, - "funding": { - "url": "https://github.com/sponsors/antfu" - } - }, - "node_modules/strong-log-transformer": { - "version": "2.1.0", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "duplexer": "^0.1.1", - "minimist": "^1.2.0", - "through": "^2.3.4" - }, - "bin": { - "sl-log-transformer": "bin/sl-log-transformer.js" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/stylus-lookup": { - "version": "3.0.2", - "dev": true, - "license": "MIT", - "dependencies": { - "commander": "^2.8.1", - "debug": "^4.1.0" - }, - "bin": { - "stylus-lookup": "bin/cli.js" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/stylus-lookup/node_modules/commander": { - "version": "2.20.3", - "dev": true, - "license": "MIT" - }, - "node_modules/supports-color": { - "version": "5.5.0", - "license": "MIT", - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/supports-preserve-symlinks-flag": { - "version": "1.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/symbol-tree": { - "version": "3.2.4", - "dev": true, - "license": "MIT" - }, - "node_modules/synckit": { - "version": "0.8.5", - "dev": true, - "license": "MIT", - "dependencies": { - "@pkgr/utils": "^2.3.1", - "tslib": "^2.5.0" - }, - "engines": { - "node": "^14.18.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/unts" - } - }, - "node_modules/tapable": { - "version": "2.2.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/tar": { - "version": "6.2.1", - "dev": true, - "license": "ISC", - "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" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/tar-stream": { - "version": "2.2.0", - "dev": true, - "license": "MIT", - "dependencies": { - "bl": "^4.0.3", - "end-of-stream": "^1.4.1", - "fs-constants": "^1.0.0", - "inherits": "^2.0.3", - "readable-stream": "^3.1.1" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/tar/node_modules/fs-minipass": { - "version": "2.1.0", - "dev": true, - "license": "ISC", - "dependencies": { - "minipass": "^3.0.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/tar/node_modules/fs-minipass/node_modules/minipass": { - "version": "3.3.6", - "dev": true, - "license": "ISC", - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/tar/node_modules/yallist": { - "version": "4.0.0", - "dev": true, - "license": "ISC" - }, - "node_modules/temp-dir": { - "version": "1.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/term-size": { - "version": "2.2.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/terser": { - "version": "5.19.2", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "@jridgewell/source-map": "^0.3.3", - "acorn": "^8.8.2", - "commander": "^2.20.0", - "source-map-support": "~0.5.20" - }, - "bin": { - "terser": "bin/terser" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/terser-webpack-plugin": { - "version": "5.3.9", - "dev": true, - "license": "MIT", - "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/has-flag": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/terser-webpack-plugin/node_modules/jest-worker": { - "version": "27.5.1", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/node": "*", - "merge-stream": "^2.0.0", - "supports-color": "^8.0.0" - }, - "engines": { - "node": ">= 10.13.0" - } - }, - "node_modules/terser-webpack-plugin/node_modules/supports-color": { - "version": "8.1.1", - "dev": true, - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/supports-color?sponsor=1" - } - }, - "node_modules/terser/node_modules/commander": { - "version": "2.20.3", - "dev": true, - "license": "MIT" - }, - "node_modules/terser/node_modules/source-map-support": { - "version": "0.5.21", - "dev": true, - "license": "MIT", - "dependencies": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" - } - }, - "node_modules/test-exclude": { - "version": "6.0.0", - "dev": true, - "license": "ISC", - "dependencies": { - "@istanbuljs/schema": "^0.1.2", - "glob": "^7.1.4", - "minimatch": "^3.0.4" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/text-extensions": { - "version": "1.9.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10" - } - }, - "node_modules/text-hex": { - "version": "1.0.0", - "license": "MIT" - }, - "node_modules/text-table": { - "version": "0.2.0", - "dev": true, - "license": "MIT" - }, - "node_modules/through": { - "version": "2.3.8", - "license": "MIT" - }, - "node_modules/through2": { - "version": "4.0.2", - "dev": true, - "license": "MIT", - "dependencies": { - "readable-stream": "3" - } - }, - "node_modules/tiny-secp256k1": { - "version": "1.1.6", - "hasInstallScript": true, - "license": "MIT", - "dependencies": { - "bindings": "^1.3.0", - "bn.js": "^4.11.8", - "create-hmac": "^1.1.7", - "elliptic": "^6.4.0", - "nan": "^2.13.2" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/tiny-secp256k1/node_modules/bn.js": { - "version": "4.12.0", - "license": "MIT" - }, - "node_modules/tinybench": { - "version": "2.9.0", - "resolved": "https://registry.npmjs.org/tinybench/-/tinybench-2.9.0.tgz", - "integrity": "sha512-0+DUvqWMValLmha6lr4kD8iAMK1HzV0/aKnCtWb9v9641TnP/MFb7Pc2bxoxQjTXAErryXVgUOfv2YqNllqGeg==", - "dev": true, - "license": "MIT" - }, - "node_modules/tinypool": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/tinypool/-/tinypool-0.7.0.tgz", - "integrity": "sha512-zSYNUlYSMhJ6Zdou4cJwo/p7w5nmAH17GRfU/ui3ctvjXFErXXkruT4MWW6poDeXgCaIBlGLrfU6TbTXxyGMww==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/tinyspy": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/tinyspy/-/tinyspy-2.2.1.tgz", - "integrity": "sha512-KYad6Vy5VDWV4GH3fjpseMQ/XU2BhIYP7Vzd0LG44qRWm/Yt2WCOTicFdvmgo6gWaqooMQCawTtILVQJupKu7A==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/titleize": { - "version": "3.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/tmp": { - "version": "0.0.33", - "license": "MIT", - "dependencies": { - "os-tmpdir": "~1.0.2" - }, - "engines": { - "node": ">=0.6.0" - } - }, - "node_modules/tmpl": { - "version": "1.0.5", - "dev": true, - "license": "BSD-3-Clause" - }, - "node_modules/to-fast-properties": { - "version": "2.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/to-regex-range": { - "version": "5.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "is-number": "^7.0.0" - }, - "engines": { - "node": ">=8.0" - } - }, - "node_modules/toidentifier": { - "version": "1.0.1", - "license": "MIT", - "engines": { - "node": ">=0.6" - } - }, - "node_modules/totalist": { - "version": "1.1.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/tough-cookie": { - "version": "4.1.3", - "license": "BSD-3-Clause", - "dependencies": { - "psl": "^1.1.33", - "punycode": "^2.1.1", - "universalify": "^0.2.0", - "url-parse": "^1.5.3" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/tough-cookie/node_modules/universalify": { - "version": "0.2.0", - "license": "MIT", - "engines": { - "node": ">= 4.0.0" - } - }, - "node_modules/tr46": { - "version": "0.0.3", - "license": "MIT" - }, - "node_modules/treeverse": { - "version": "3.0.0", - "dev": true, - "license": "ISC", - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/trim-newlines": { - "version": "3.0.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/triple-beam": { - "version": "1.4.1", - "license": "MIT", - "engines": { - "node": ">= 14.0.0" - } - }, - "node_modules/ts-api-utils": { - "version": "1.0.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=16.13.0" - }, - "peerDependencies": { - "typescript": ">=4.2.0" - } - }, - "node_modules/ts-graphviz": { - "version": "1.8.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=14.16" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/ts-graphviz" - } - }, - "node_modules/ts-jest": { - "version": "29.1.1", - "dev": true, - "license": "MIT", - "dependencies": { - "bs-logger": "0.x", - "fast-json-stable-stringify": "2.x", - "jest-util": "^29.0.0", - "json5": "^2.2.3", - "lodash.memoize": "4.x", - "make-error": "1.x", - "semver": "^7.5.3", - "yargs-parser": "^21.0.1" - }, - "bin": { - "ts-jest": "cli.js" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.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" - }, - "peerDependenciesMeta": { - "@babel/core": { - "optional": true - }, - "@jest/types": { - "optional": true - }, - "babel-jest": { - "optional": true - }, - "esbuild": { - "optional": true - } - } - }, - "node_modules/ts-jest/node_modules/yargs-parser": { - "version": "21.1.1", - "dev": true, - "license": "ISC", - "engines": { - "node": ">=12" - } - }, - "node_modules/ts-node": { - "version": "10.9.1", - "dev": true, - "license": "MIT", - "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/tsconfig-paths": { - "version": "3.14.2", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/json5": "^0.0.29", - "json5": "^1.0.2", - "minimist": "^1.2.6", - "strip-bom": "^3.0.0" - } - }, - "node_modules/tsconfig-paths/node_modules/strip-bom": { - "version": "3.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/tslib": { - "version": "2.6.1", - "dev": true, - "license": "0BSD" - }, - "node_modules/tsutils": { - "version": "3.21.0", - "dev": true, - "license": "MIT", - "dependencies": { - "tslib": "^1.8.1" - }, - "engines": { - "node": ">= 6" - }, - "peerDependencies": { - "typescript": ">=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta" - } - }, - "node_modules/tsutils/node_modules/tslib": { - "version": "1.14.1", - "dev": true, - "license": "0BSD" - }, - "node_modules/tty-table": { - "version": "4.2.1", - "dev": true, - "license": "MIT", - "dependencies": { - "chalk": "^4.1.2", - "csv": "^5.5.3", - "kleur": "^4.1.5", - "smartwrap": "^2.0.2", - "strip-ansi": "^6.0.1", - "wcwidth": "^1.0.1", - "yargs": "^17.7.1" - }, - "bin": { - "tty-table": "adapters/terminal-adapter.js" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/tty-table/node_modules/ansi-styles": { - "version": "4.3.0", - "dev": true, - "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/tty-table/node_modules/chalk": { - "version": "4.1.2", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/tty-table/node_modules/color-convert": { - "version": "2.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/tty-table/node_modules/color-name": { - "version": "1.1.4", - "dev": true, - "license": "MIT" - }, - "node_modules/tty-table/node_modules/has-flag": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/tty-table/node_modules/kleur": { - "version": "4.1.5", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/tty-table/node_modules/supports-color": { - "version": "7.2.0", - "dev": true, - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/tuf-js": { - "version": "2.2.1", - "dev": true, - "license": "MIT", - "dependencies": { - "@tufjs/models": "2.0.1", - "debug": "^4.3.4", - "make-fetch-happen": "^13.0.1" - }, - "engines": { - "node": "^16.14.0 || >=18.0.0" - } - }, - "node_modules/tunnel-agent": { - "version": "0.6.0", - "license": "Apache-2.0", - "dependencies": { - "safe-buffer": "^5.0.1" - }, - "engines": { - "node": "*" - } - }, - "node_modules/tweetnacl": { - "version": "0.14.5", - "license": "Unlicense" - }, - "node_modules/type-check": { - "version": "0.4.0", - "dev": true, - "license": "MIT", - "dependencies": { - "prelude-ls": "^1.2.1" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/type-detect": { - "version": "4.0.8", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/type-fest": { - "version": "0.20.2", - "dev": true, - "license": "(MIT OR CC0-1.0)", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/type-is": { - "version": "1.6.18", - "license": "MIT", - "dependencies": { - "media-typer": "0.3.0", - "mime-types": "~2.1.24" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/typed-array-buffer": { - "version": "1.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.2.1", - "is-typed-array": "^1.1.10" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/typed-array-byte-length": { - "version": "1.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.2", - "for-each": "^0.3.3", - "has-proto": "^1.0.1", - "is-typed-array": "^1.1.10" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/typed-array-byte-offset": { - "version": "1.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "available-typed-arrays": "^1.0.5", - "call-bind": "^1.0.2", - "for-each": "^0.3.3", - "has-proto": "^1.0.1", - "is-typed-array": "^1.1.10" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/typed-array-length": { - "version": "1.0.4", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.2", - "for-each": "^0.3.3", - "is-typed-array": "^1.1.9" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/typedarray": { - "version": "0.0.6", - "dev": true, - "license": "MIT" - }, - "node_modules/typedoc": { - "version": "0.24.8", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "lunr": "^2.3.9", - "marked": "^4.3.0", - "minimatch": "^9.0.0", - "shiki": "^0.14.1" - }, - "bin": { - "typedoc": "bin/typedoc" - }, - "engines": { - "node": ">= 14.14" - }, - "peerDependencies": { - "typescript": "4.6.x || 4.7.x || 4.8.x || 4.9.x || 5.0.x || 5.1.x" - } - }, - "node_modules/typedoc-plugin-replace-text": { - "version": "3.2.0", - "dev": true, - "license": "ISC", - "peerDependencies": { - "typedoc": "^0.24.8 || 0.25.x" - } - }, - "node_modules/typedoc/node_modules/brace-expansion": { - "version": "2.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0" - } - }, - "node_modules/typedoc/node_modules/minimatch": { - "version": "9.0.3", - "dev": true, - "license": "ISC", - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/typeforce": { - "version": "1.18.0", - "license": "MIT" - }, - "node_modules/typescript": { - "version": "5.1.6", - "dev": true, - "license": "Apache-2.0", - "bin": { - "tsc": "bin/tsc", - "tsserver": "bin/tsserver" - }, - "engines": { - "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, - "license": "MIT" - }, - "node_modules/uglify-js": { - "version": "3.17.4", - "license": "BSD-2-Clause", - "bin": { - "uglifyjs": "bin/uglifyjs" - }, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/unbox-primitive": { - "version": "1.0.2", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.2", - "has-bigints": "^1.0.2", - "has-symbols": "^1.0.3", - "which-boxed-primitive": "^1.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "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==", - "license": "MIT" - }, - "node_modules/uniq": { - "version": "1.0.1", - "dev": true, - "license": "MIT" - }, - "node_modules/unique-filename": { - "version": "3.0.0", - "dev": true, - "license": "ISC", - "dependencies": { - "unique-slug": "^4.0.0" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/unique-slug": { - "version": "4.0.0", - "dev": true, - "license": "ISC", - "dependencies": { - "imurmurhash": "^0.1.4" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/universal-user-agent": { - "version": "6.0.1", - "dev": true, - "license": "ISC" - }, - "node_modules/universalify": { - "version": "0.1.2", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 4.0.0" - } - }, - "node_modules/unpipe": { - "version": "1.0.0", - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/untildify": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/upath": { - "version": "2.0.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=4", - "yarn": "*" - } - }, - "node_modules/update-browserslist-db": { - "version": "1.0.11", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/browserslist" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "license": "MIT", - "dependencies": { - "escalade": "^3.1.1", - "picocolors": "^1.0.0" - }, - "bin": { - "update-browserslist-db": "cli.js" - }, - "peerDependencies": { - "browserslist": ">= 4.21.0" - } - }, - "node_modules/uri-js": { - "version": "4.4.1", - "license": "BSD-2-Clause", - "dependencies": { - "punycode": "^2.1.0" - } - }, - "node_modules/url-parse": { - "version": "1.5.10", - "license": "MIT", - "dependencies": { - "querystringify": "^2.1.1", - "requires-port": "^1.0.0" - } - }, - "node_modules/util": { - "version": "0.12.5", - "dev": true, - "license": "MIT", - "dependencies": { - "inherits": "^2.0.3", - "is-arguments": "^1.0.4", - "is-generator-function": "^1.0.7", - "is-typed-array": "^1.1.3", - "which-typed-array": "^1.1.2" - } - }, - "node_modules/util-deprecate": { - "version": "1.0.2", - "license": "MIT" - }, - "node_modules/utils-merge": { - "version": "1.0.1", - "license": "MIT", - "engines": { - "node": ">= 0.4.0" - } - }, - "node_modules/uuid": { - "version": "3.4.0", - "license": "MIT", - "bin": { - "uuid": "bin/uuid" - } - }, - "node_modules/v8-compile-cache-lib": { - "version": "3.0.1", - "dev": true, - "license": "MIT" - }, - "node_modules/v8-to-istanbul": { - "version": "9.1.0", - "dev": true, - "license": "ISC", - "dependencies": { - "@jridgewell/trace-mapping": "^0.3.12", - "@types/istanbul-lib-coverage": "^2.0.1", - "convert-source-map": "^1.6.0" - }, - "engines": { - "node": ">=10.12.0" - } - }, - "node_modules/v8-to-istanbul/node_modules/convert-source-map": { - "version": "1.9.0", - "dev": true, - "license": "MIT" - }, - "node_modules/validate-npm-package-license": { - "version": "3.0.4", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "spdx-correct": "^3.0.0", - "spdx-expression-parse": "^3.0.0" - } - }, - "node_modules/validate-npm-package-name": { - "version": "5.0.1", - "dev": true, - "license": "ISC", - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/varuint-bitcoin": { - "version": "1.1.2", - "license": "MIT", - "dependencies": { - "safe-buffer": "^5.1.1" - } - }, - "node_modules/vary": { - "version": "1.1.2", - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/verror": { - "version": "1.10.0", - "engines": [ - "node >=0.6.0" - ], - "license": "MIT", - "dependencies": { - "assert-plus": "^1.0.0", - "core-util-is": "1.0.2", - "extsprintf": "^1.2.0" - } - }, - "node_modules/vite": { - "version": "5.4.11", - "resolved": "https://registry.npmjs.org/vite/-/vite-5.4.11.tgz", - "integrity": "sha512-c7jFQRklXua0mTzneGW9QVyxFjUgwcihC4bXEtujIo2ouWCe1Ajt/amn2PCxYnhYfd5k09JX3SB7OYWFKYqj8Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "esbuild": "^0.21.3", - "postcss": "^8.4.43", - "rollup": "^4.20.0" - }, - "bin": { - "vite": "bin/vite.js" - }, - "engines": { - "node": "^18.0.0 || >=20.0.0" - }, - "funding": { - "url": "https://github.com/vitejs/vite?sponsor=1" - }, - "optionalDependencies": { - "fsevents": "~2.3.3" - }, - "peerDependencies": { - "@types/node": "^18.0.0 || >=20.0.0", - "less": "*", - "lightningcss": "^1.21.0", - "sass": "*", - "sass-embedded": "*", - "stylus": "*", - "sugarss": "*", - "terser": "^5.4.0" - }, - "peerDependenciesMeta": { - "@types/node": { - "optional": true - }, - "less": { - "optional": true - }, - "lightningcss": { - "optional": true - }, - "sass": { - "optional": true - }, - "sass-embedded": { - "optional": true - }, - "stylus": { - "optional": true - }, - "sugarss": { - "optional": true - }, - "terser": { - "optional": true - } - } - }, - "node_modules/vite-node": { - "version": "0.34.6", - "resolved": "https://registry.npmjs.org/vite-node/-/vite-node-0.34.6.tgz", - "integrity": "sha512-nlBMJ9x6n7/Amaz6F3zJ97EBwR2FkzhBRxF5e+jE6LA3yi6Wtc2lyTij1OnDMIr34v5g/tVQtsVAzhT0jc5ygA==", - "dev": true, - "license": "MIT", - "dependencies": { - "cac": "^6.7.14", - "debug": "^4.3.4", - "mlly": "^1.4.0", - "pathe": "^1.1.1", - "picocolors": "^1.0.0", - "vite": "^3.0.0 || ^4.0.0 || ^5.0.0-0" - }, - "bin": { - "vite-node": "vite-node.mjs" - }, + "os": [ + "win32" + ], "engines": { - "node": ">=v14.18.0" - }, - "funding": { - "url": "https://opencollective.com/vitest" + "node": ">=12" } }, - "node_modules/vite/node_modules/@esbuild/darwin-arm64": { + "node_modules/vite/node_modules/@esbuild/win32-x64": { "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.21.5.tgz", - "integrity": "sha512-DwqXqZyuk5AiWWf3UfLiRDJ5EDd49zg6O9wclZ7kUMv2WRFr4HKjXp/5t8JZ11QbQfUS6/cRCKGwYhtNAY88kQ==", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.21.5.tgz", + "integrity": "sha512-tQd/1efJuzPC6rCFwEvLtci/xNFcTZknmXs98FYDfGE4wP9ClFV98nyKrzJKVPMhdDnjzLhdUyMX4PsQAPjwIw==", "cpu": [ - "arm64" + "x64" ], "dev": true, "license": "MIT", "optional": true, "os": [ - "darwin" + "win32" ], "engines": { "node": ">=12" @@ -22104,60 +22233,57 @@ } }, "node_modules/vitest": { - "version": "0.34.6", - "resolved": "https://registry.npmjs.org/vitest/-/vitest-0.34.6.tgz", - "integrity": "sha512-+5CALsOvbNKnS+ZHMXtuUC7nL8/7F1F2DnHGjSsszX8zCjWSSviphCb/NuS9Nzf4Q03KyyDRBAXhF/8lffME4Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/chai": "^4.3.5", - "@types/chai-subset": "^1.3.3", - "@types/node": "*", - "@vitest/expect": "0.34.6", - "@vitest/runner": "0.34.6", - "@vitest/snapshot": "0.34.6", - "@vitest/spy": "0.34.6", - "@vitest/utils": "0.34.6", - "acorn": "^8.9.0", - "acorn-walk": "^8.2.0", - "cac": "^6.7.14", - "chai": "^4.3.10", - "debug": "^4.3.4", - "local-pkg": "^0.4.3", - "magic-string": "^0.30.1", - "pathe": "^1.1.1", - "picocolors": "^1.0.0", - "std-env": "^3.3.3", - "strip-literal": "^1.0.1", - "tinybench": "^2.5.0", - "tinypool": "^0.7.0", - "vite": "^3.1.0 || ^4.0.0 || ^5.0.0-0", - "vite-node": "0.34.6", - "why-is-node-running": "^2.2.2" + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/vitest/-/vitest-2.1.5.tgz", + "integrity": "sha512-P4ljsdpuzRTPI/kbND2sDZ4VmieerR2c9szEZpjc+98Z9ebvnXmM5+0tHEKqYZumXqlvnmfWsjeFOjXVriDG7A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@vitest/expect": "2.1.5", + "@vitest/mocker": "2.1.5", + "@vitest/pretty-format": "^2.1.5", + "@vitest/runner": "2.1.5", + "@vitest/snapshot": "2.1.5", + "@vitest/spy": "2.1.5", + "@vitest/utils": "2.1.5", + "chai": "^5.1.2", + "debug": "^4.3.7", + "expect-type": "^1.1.0", + "magic-string": "^0.30.12", + "pathe": "^1.1.2", + "std-env": "^3.8.0", + "tinybench": "^2.9.0", + "tinyexec": "^0.3.1", + "tinypool": "^1.0.1", + "tinyrainbow": "^1.2.0", + "vite": "^5.0.0", + "vite-node": "2.1.5", + "why-is-node-running": "^2.3.0" }, "bin": { "vitest": "vitest.mjs" }, "engines": { - "node": ">=v14.18.0" + "node": "^18.0.0 || >=20.0.0" }, "funding": { "url": "https://opencollective.com/vitest" }, "peerDependencies": { "@edge-runtime/vm": "*", - "@vitest/browser": "*", - "@vitest/ui": "*", + "@types/node": "^18.0.0 || >=20.0.0", + "@vitest/browser": "2.1.5", + "@vitest/ui": "2.1.5", "happy-dom": "*", - "jsdom": "*", - "playwright": "*", - "safaridriver": "*", - "webdriverio": "*" + "jsdom": "*" }, "peerDependenciesMeta": { "@edge-runtime/vm": { "optional": true }, + "@types/node": { + "optional": true + }, "@vitest/browser": { "optional": true }, @@ -22169,30 +22295,41 @@ }, "jsdom": { "optional": true - }, - "playwright": { - "optional": true - }, - "safaridriver": { - "optional": true - }, - "webdriverio": { - "optional": true } } }, + "node_modules/vitest-fetch-mock": { + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/vitest-fetch-mock/-/vitest-fetch-mock-0.4.2.tgz", + "integrity": "sha512-MuN/TCAvvUs9sLMdOPKqdXEUOD0E5cNW/LN7Tro3KkrLBsvUaH7iQWcznNUU4ml+GqX6ZbNguDmFQ2tliKqhCg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18.0.0" + }, + "peerDependencies": { + "vitest": ">=2.0.0" + } + }, "node_modules/vscode-oniguruma": { "version": "1.7.0", + "resolved": "https://registry.npmjs.org/vscode-oniguruma/-/vscode-oniguruma-1.7.0.tgz", + "integrity": "sha512-L9WMGRfrjOhgHSdOYgCt/yRMsXzLDJSL7BPrOZt73gU0iWO4mpqzqQzOz5srxqTvMBaR0XZTSrVWo4j55Rc6cA==", "dev": true, "license": "MIT" }, "node_modules/vscode-textmate": { "version": "8.0.0", + "resolved": "https://registry.npmjs.org/vscode-textmate/-/vscode-textmate-8.0.0.tgz", + "integrity": "sha512-AFbieoL7a5LMqcnOF04ji+rpXadgOXnZsxQr//r83kLPr7biP7am3g9zbaZIaBGwBRWeSvoMD4mgPdX3e4NWBg==", "dev": true, "license": "MIT" }, "node_modules/w3c-hr-time": { "version": "1.0.2", + "resolved": "https://registry.npmjs.org/w3c-hr-time/-/w3c-hr-time-1.0.2.tgz", + "integrity": "sha512-z8P5DvDNjKDoFIHK7q8r8lackT6l+jo/Ye3HOle7l9nICP9lf1Ci25fy9vHd0JOWewkIFzXIEig3TdKT7JQ5fQ==", + "deprecated": "Use your platform's native performance.now() and performance.timeOrigin.", "dev": true, "license": "MIT", "dependencies": { @@ -22201,6 +22338,8 @@ }, "node_modules/w3c-xmlserializer": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-2.0.0.tgz", + "integrity": "sha512-4tzD0mF8iSiMiNs30BiLO3EpfGLZUT2MSX/G+o7ZywDzliWQ3OPtTZ0PTC3B3ca1UAf4cJMHB+2Bf56EriJuRA==", "dev": true, "license": "MIT", "dependencies": { @@ -22212,11 +22351,15 @@ }, "node_modules/walk-up-path": { "version": "3.0.1", + "resolved": "https://registry.npmjs.org/walk-up-path/-/walk-up-path-3.0.1.tgz", + "integrity": "sha512-9YlCL/ynK3CTlrSRrDxZvUauLzAswPCrsaCgilqFevUYpeEW0/3ScEjaa3kbW/T0ghhkEr7mv+fpjqn1Y1YuTA==", "dev": true, "license": "ISC" }, "node_modules/walkdir": { "version": "0.4.1", + "resolved": "https://registry.npmjs.org/walkdir/-/walkdir-0.4.1.tgz", + "integrity": "sha512-3eBwRyEln6E1MSzcxcVpQIhRG8Q1jLvEqRmCZqS3dsfXEDR/AhOF4d+jHg1qvDCpYaVRZjENPQyrVxAkQqxPgQ==", "dev": true, "license": "MIT", "engines": { @@ -22225,6 +22368,8 @@ }, "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": { @@ -22232,7 +22377,9 @@ } }, "node_modules/watchpack": { - "version": "2.4.0", + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.2.tgz", + "integrity": "sha512-TnbFSbcOCcDgjZ4piURLCbJ3nJhznVh9kw6F6iokjiFPl8ONxe9A6nMDVXDiNbrSfLILs6vB07F7wLBrwPYzJw==", "dev": true, "license": "MIT", "dependencies": { @@ -22245,6 +22392,8 @@ }, "node_modules/wcwidth": { "version": "1.0.1", + "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz", + "integrity": "sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==", "dev": true, "license": "MIT", "dependencies": { @@ -22252,49 +22401,54 @@ } }, "node_modules/webcrypto-core": { - "version": "1.7.7", + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/webcrypto-core/-/webcrypto-core-1.8.1.tgz", + "integrity": "sha512-P+x1MvlNCXlKbLSOY4cYrdreqPG5hbzkmawbcXLKN/mf6DZW0SdNNkZ+sjwsqVkI4A4Ko2sPZmkZtCKY58w83A==", "dev": true, "license": "MIT", "dependencies": { - "@peculiar/asn1-schema": "^2.3.6", + "@peculiar/asn1-schema": "^2.3.13", "@peculiar/json-schema": "^1.1.12", - "asn1js": "^3.0.1", - "pvtsutils": "^1.3.2", - "tslib": "^2.4.0" + "asn1js": "^3.0.5", + "pvtsutils": "^1.3.5", + "tslib": "^2.7.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==", "license": "BSD-2-Clause" }, "node_modules/webpack": { - "version": "5.88.2", + "version": "5.96.1", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.96.1.tgz", + "integrity": "sha512-l2LlBSvVZGhL4ZrPwyr8+37AunkcYj5qh8o6u2/2rzoPc8gxFJkLj1WxNgooi9pnoc06jh0BjuXnamM4qlujZA==", "dev": true, "license": "MIT", "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", + "@types/eslint-scope": "^3.7.7", + "@types/estree": "^1.0.6", + "@webassemblyjs/ast": "^1.12.1", + "@webassemblyjs/wasm-edit": "^1.12.1", + "@webassemblyjs/wasm-parser": "^1.12.1", + "acorn": "^8.14.0", + "browserslist": "^4.24.0", "chrome-trace-event": "^1.0.2", - "enhanced-resolve": "^5.15.0", + "enhanced-resolve": "^5.17.1", "es-module-lexer": "^1.2.1", "eslint-scope": "5.1.1", "events": "^3.2.0", "glob-to-regexp": "^0.4.1", - "graceful-fs": "^4.2.9", + "graceful-fs": "^4.2.11", "json-parse-even-better-errors": "^2.3.1", "loader-runner": "^4.2.0", "mime-types": "^2.1.27", "neo-async": "^2.6.2", "schema-utils": "^3.2.0", "tapable": "^2.1.1", - "terser-webpack-plugin": "^5.3.7", - "watchpack": "^2.4.0", + "terser-webpack-plugin": "^5.3.10", + "watchpack": "^2.4.1", "webpack-sources": "^3.2.3" }, "bin": { @@ -22314,19 +22468,23 @@ } }, "node_modules/webpack-bundle-analyzer": { - "version": "4.9.0", + "version": "4.10.2", + "resolved": "https://registry.npmjs.org/webpack-bundle-analyzer/-/webpack-bundle-analyzer-4.10.2.tgz", + "integrity": "sha512-vJptkMm9pk5si4Bv922ZbKLV8UTT4zib4FPgXMhgzUny0bfDDkLXAVQs3ly3fS4/TN9ROFtb0NFrm04UXFE/Vw==", "dev": true, "license": "MIT", "dependencies": { "@discoveryjs/json-ext": "0.5.7", "acorn": "^8.0.4", "acorn-walk": "^8.0.0", - "chalk": "^4.1.0", "commander": "^7.2.0", + "debounce": "^1.2.1", + "escape-string-regexp": "^4.0.0", "gzip-size": "^6.0.0", - "lodash": "^4.17.20", + "html-escaper": "^2.0.2", "opener": "^1.5.2", - "sirv": "^1.0.7", + "picocolors": "^1.0.0", + "sirv": "^2.0.3", "ws": "^7.3.1" }, "bin": { @@ -22336,72 +22494,10 @@ "node": ">= 10.13.0" } }, - "node_modules/webpack-bundle-analyzer/node_modules/ansi-styles": { - "version": "4.3.0", - "dev": true, - "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/webpack-bundle-analyzer/node_modules/chalk": { - "version": "4.1.2", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/webpack-bundle-analyzer/node_modules/color-convert": { - "version": "2.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/webpack-bundle-analyzer/node_modules/color-name": { - "version": "1.1.4", - "dev": true, - "license": "MIT" - }, - "node_modules/webpack-bundle-analyzer/node_modules/has-flag": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/webpack-bundle-analyzer/node_modules/supports-color": { - "version": "7.2.0", - "dev": true, - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/webpack-cli": { "version": "5.1.4", + "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": { @@ -22446,6 +22542,8 @@ }, "node_modules/webpack-cli/node_modules/commander": { "version": "10.0.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-10.0.1.tgz", + "integrity": "sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug==", "dev": true, "license": "MIT", "engines": { @@ -22453,11 +22551,14 @@ } }, "node_modules/webpack-merge": { - "version": "5.9.0", + "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": { @@ -22466,6 +22567,8 @@ }, "node_modules/webpack-sources": { "version": "1.4.3", + "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-1.4.3.tgz", + "integrity": "sha512-lgTS3Xhv1lCOKo7SA5TjKXMjpSM4sBjNV5+q2bqesbSPs5FjGmU6jjtBSkX9b4qW87vDIsCIlUPOEhbZrMdjeQ==", "dev": true, "license": "MIT", "dependencies": { @@ -22475,6 +22578,8 @@ }, "node_modules/webpack/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": { @@ -22487,14 +22592,25 @@ }, "node_modules/webpack/node_modules/estraverse": { "version": "4.3.0", + "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" } }, + "node_modules/webpack/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, + "license": "MIT" + }, "node_modules/webpack/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==", "dev": true, "license": "MIT", "engines": { @@ -22503,6 +22619,8 @@ }, "node_modules/whatwg-encoding": { "version": "1.0.5", + "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-1.0.5.tgz", + "integrity": "sha512-b5lim54JOPN9HtzvK9HFXvBma/rnfFeqsic0hSpjtDbVxR3dJKLc+KB4V6GgiGOvl7CY/KNh8rxSo9DKQrnUEw==", "dev": true, "license": "MIT", "dependencies": { @@ -22511,15 +22629,21 @@ }, "node_modules/whatwg-fetch": { "version": "2.0.4", + "resolved": "https://registry.npmjs.org/whatwg-fetch/-/whatwg-fetch-2.0.4.tgz", + "integrity": "sha512-dcQ1GWpOD/eEQ97k66aiEVpNnapVj90/+R+SXTPYGHpYBBypfKJEQjLrvMZ7YXbKm21gXd4NcuxUTjiv1YtLng==", "license": "MIT" }, "node_modules/whatwg-mimetype": { "version": "2.3.0", + "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-2.3.0.tgz", + "integrity": "sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g==", "dev": true, "license": "MIT" }, "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==", "license": "MIT", "dependencies": { "tr46": "~0.0.3", @@ -22528,6 +22652,8 @@ }, "node_modules/which": { "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", "dev": true, "license": "ISC", "dependencies": { @@ -22542,6 +22668,8 @@ }, "node_modules/which-boxed-primitive": { "version": "1.0.2", + "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", + "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", "dev": true, "license": "MIT", "dependencies": { @@ -22555,33 +22683,18 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/which-module": { - "version": "2.0.1", - "dev": true, - "license": "ISC" - }, - "node_modules/which-pm": { - "version": "2.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "load-yaml-file": "^0.2.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=8.15" - } - }, "node_modules/which-typed-array": { - "version": "1.1.11", + "version": "1.1.15", + "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.15.tgz", + "integrity": "sha512-oV0jmFtUky6CXfkqehVvBP/LSWJ2sy4vWMioiENyJLePrBO/yKyV9OyJySfAKosh+RYkIl5zJCNZ8/4JncrpdA==", "dev": true, "license": "MIT", "dependencies": { - "available-typed-arrays": "^1.0.5", - "call-bind": "^1.0.2", + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.7", "for-each": "^0.3.3", "gopd": "^1.0.1", - "has-tostringtag": "^1.0.0" + "has-tostringtag": "^1.0.2" }, "engines": { "node": ">= 0.4" @@ -22609,6 +22722,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==", "dev": true, "license": "ISC", "dependencies": { @@ -22617,6 +22732,8 @@ }, "node_modules/wif": { "version": "2.0.6", + "resolved": "https://registry.npmjs.org/wif/-/wif-2.0.6.tgz", + "integrity": "sha512-HIanZn1zmduSF+BQhkE+YXIbEiH0xPr1012QbFEGB0xsKqJii0/SqJjyn8dFv6y36kOznMgMB+LGcbZTJ1xACQ==", "license": "MIT", "dependencies": { "bs58check": "<3.0.0" @@ -22624,48 +22741,68 @@ }, "node_modules/wildcard": { "version": "2.0.1", + "resolved": "https://registry.npmjs.org/wildcard/-/wildcard-2.0.1.tgz", + "integrity": "sha512-CC1bOL87PIWSBhDcTrdeLo6eGT7mCFtrg0uIJtqJUFyK+eJnzl8A1niH56uu7KMa5XFrtiV+AQuHO3n7DsHnLQ==", "dev": true, "license": "MIT" }, "node_modules/winston": { - "version": "3.10.0", + "version": "3.17.0", + "resolved": "https://registry.npmjs.org/winston/-/winston-3.17.0.tgz", + "integrity": "sha512-DLiFIXYC5fMPxaRg832S6F5mJYvePtmO5G9v9IgUFPhXm9/GkXarH/TUrBAVzhTCzAj9anE/+GjrgXp/54nOgw==", "license": "MIT", "dependencies": { - "@colors/colors": "1.5.0", + "@colors/colors": "^1.6.0", "@dabh/diagnostics": "^2.0.2", "async": "^3.2.3", "is-stream": "^2.0.0", - "logform": "^2.4.0", + "logform": "^2.7.0", "one-time": "^1.0.0", "readable-stream": "^3.4.0", "safe-stable-stringify": "^2.3.1", "stack-trace": "0.0.x", "triple-beam": "^1.3.0", - "winston-transport": "^4.5.0" + "winston-transport": "^4.9.0" }, "engines": { "node": ">= 12.0.0" } }, "node_modules/winston-transport": { - "version": "4.5.0", + "version": "4.9.0", + "resolved": "https://registry.npmjs.org/winston-transport/-/winston-transport-4.9.0.tgz", + "integrity": "sha512-8drMJ4rkgaPo1Me4zD/3WLfI/zPdA9o2IipKODunnGDcuqbHwjsbB79ylv04LCGGzU0xQ6vTznOMpQGaLhhm6A==", "license": "MIT", "dependencies": { - "logform": "^2.3.2", - "readable-stream": "^3.6.0", + "logform": "^2.7.0", + "readable-stream": "^3.6.2", "triple-beam": "^1.3.0" }, "engines": { - "node": ">= 6.4.0" + "node": ">= 12.0.0" + } + }, + "node_modules/word-wrap": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz", + "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" } }, "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", + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", + "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", "dev": true, "license": "MIT", "dependencies": { @@ -22674,15 +22811,14 @@ "strip-ansi": "^6.0.0" }, "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + "node": ">=8" } }, "node_modules/wrap-ansi-cjs": { "name": "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": { @@ -22697,73 +22833,17 @@ "url": "https://github.com/chalk/wrap-ansi?sponsor=1" } }, - "node_modules/wrap-ansi-cjs/node_modules/ansi-styles": { - "version": "4.3.0", - "dev": true, - "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/wrap-ansi-cjs/node_modules/color-convert": { - "version": "2.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/wrap-ansi-cjs/node_modules/color-name": { - "version": "1.1.4", - "dev": true, - "license": "MIT" - }, - "node_modules/wrap-ansi/node_modules/ansi-styles": { - "version": "4.3.0", - "dev": true, - "license": "MIT", - "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", - "dev": true, - "license": "MIT", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/wrap-ansi/node_modules/color-name": { - "version": "1.1.4", - "dev": true, - "license": "MIT" - }, "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, "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": { @@ -22776,6 +22856,8 @@ }, "node_modules/write-json-file": { "version": "3.2.0", + "resolved": "https://registry.npmjs.org/write-json-file/-/write-json-file-3.2.0.tgz", + "integrity": "sha512-3xZqT7Byc2uORAatYiP3DHUUAVEkNOswEWNs9H5KXiicRTvzYzYqKjYc4G7p+8pltvAw641lVByKVtMpf+4sYQ==", "dev": true, "license": "MIT", "dependencies": { @@ -22792,6 +22874,8 @@ }, "node_modules/write-json-file/node_modules/detect-indent": { "version": "5.0.0", + "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-5.0.0.tgz", + "integrity": "sha512-rlpvsxUtM0PQvy9iZe640/IWwWYyBsTApREbA1pHOpmOUIl9MkP/U4z7vTtg4Oaojvqhxt7sdufnT0EzGaR31g==", "dev": true, "license": "MIT", "engines": { @@ -22800,6 +22884,8 @@ }, "node_modules/write-json-file/node_modules/make-dir": { "version": "2.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz", + "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==", "dev": true, "license": "MIT", "dependencies": { @@ -22812,6 +22898,8 @@ }, "node_modules/write-json-file/node_modules/pify": { "version": "4.0.1", + "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", + "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", "dev": true, "license": "MIT", "engines": { @@ -22820,6 +22908,8 @@ }, "node_modules/write-json-file/node_modules/semver": { "version": "5.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", + "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", "dev": true, "license": "ISC", "bin": { @@ -22828,6 +22918,8 @@ }, "node_modules/write-json-file/node_modules/write-file-atomic": { "version": "2.4.3", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-2.4.3.tgz", + "integrity": "sha512-GaETH5wwsX+GcnzhPgKcKjJ6M2Cq3/iZp1WyY/X1CSqrW+jVNM9Y7D8EC2sM4ZG/V8wZlSniJnCKWPmBYAucRQ==", "dev": true, "license": "ISC", "dependencies": { @@ -22838,6 +22930,8 @@ }, "node_modules/write-pkg": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/write-pkg/-/write-pkg-4.0.0.tgz", + "integrity": "sha512-v2UQ+50TNf2rNHJ8NyWttfm/EJUBWMJcx6ZTYZr6Qp52uuegWw/lBkCtCbnYZEmPRNL61m+u67dAmGxo+HTULA==", "dev": true, "license": "MIT", "dependencies": { @@ -22851,6 +22945,8 @@ }, "node_modules/write-pkg/node_modules/type-fest": { "version": "0.4.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.4.1.tgz", + "integrity": "sha512-IwzA/LSfD2vC1/YDYMv/zHP4rDF1usCwllsDpbolT3D4fUepIO7f9K70jjmUewU/LmGUKJcwcVtDCpnKk4BPMw==", "dev": true, "license": "(MIT OR CC0-1.0)", "engines": { @@ -22858,7 +22954,9 @@ } }, "node_modules/ws": { - "version": "7.5.9", + "version": "7.5.10", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.10.tgz", + "integrity": "sha512-+dbF1tHwZpXcbOJdVOkzLDxZP1ailvSxM6ZweXTegylPny803bFhA+vqBYw4s31NSAk4S2Qz+AKXK9a4wkdjcQ==", "license": "MIT", "engines": { "node": ">=8.3.0" @@ -22878,22 +22976,30 @@ }, "node_modules/xml-name-validator": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-3.0.0.tgz", + "integrity": "sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw==", "dev": true, "license": "Apache-2.0" }, "node_modules/xmlchars": { "version": "2.2.0", + "resolved": "https://registry.npmjs.org/xmlchars/-/xmlchars-2.2.0.tgz", + "integrity": "sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==", "dev": true, "license": "MIT" }, "node_modules/xmlhttprequest-ssl": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/xmlhttprequest-ssl/-/xmlhttprequest-ssl-2.0.0.tgz", + "integrity": "sha512-QKxVRxiRACQcVuQEYFsI1hhkrMlrXHPegbbd1yn9UHOmRxY+si12nQYzri3vbzt8VdTTRviqcKxcyllFas5z2A==", "engines": { "node": ">=0.4.0" } }, "node_modules/xtend": { "version": "4.0.2", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", + "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", "dev": true, "license": "MIT", "engines": { @@ -22902,6 +23008,8 @@ }, "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": { @@ -22910,6 +23018,8 @@ }, "node_modules/yalc": { "version": "1.0.0-pre.49", + "resolved": "https://registry.npmjs.org/yalc/-/yalc-1.0.0-pre.49.tgz", + "integrity": "sha512-7fTnwsX4qKnr2h1LVTLQzc9gosFrGnJcBRPnNGsM+3YJSLAjB+i8XnqmNptdktjyc4hOzI+XzN1Wp2kXvKAPxA==", "dev": true, "license": "MIT", "dependencies": { @@ -22925,82 +23035,88 @@ "yalc": "src/yalc.js" } }, - "node_modules/yalc/node_modules/ansi-styles": { - "version": "4.3.0", - "dev": true, - "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/yalc/node_modules/chalk": { - "version": "4.1.2", + "node_modules/yalc/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, "license": "MIT", "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" } }, - "node_modules/yalc/node_modules/color-convert": { - "version": "2.0.1", + "node_modules/yalc/node_modules/cliui": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", + "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", "dev": true, - "license": "MIT", + "license": "ISC", "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^7.0.0" } }, - "node_modules/yalc/node_modules/color-name": { - "version": "1.1.4", - "dev": true, - "license": "MIT" - }, "node_modules/yalc/node_modules/fs-extra": { "version": "8.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", + "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", "dev": true, "license": "MIT", "dependencies": { "graceful-fs": "^4.2.0", "jsonfile": "^4.0.0", "universalify": "^0.1.0" - }, - "engines": { - "node": ">=6 <7 || >=8" - } - }, - "node_modules/yalc/node_modules/has-flag": { - "version": "4.0.0", - "dev": true, - "license": "MIT", + }, "engines": { - "node": ">=8" + "node": ">=6 <7 || >=8" } }, "node_modules/yalc/node_modules/ignore-walk": { "version": "3.0.4", + "resolved": "https://registry.npmjs.org/ignore-walk/-/ignore-walk-3.0.4.tgz", + "integrity": "sha512-PY6Ii8o1jMRA1z4F2hRkH/xN59ox43DavKvD3oDpfurRlOJyAHpifIwpbdv1n4jt4ov0jSpw3kQ4GhJnpBL6WQ==", "dev": true, "license": "ISC", "dependencies": { "minimatch": "^3.0.4" } }, + "node_modules/yalc/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, + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/yalc/node_modules/npm-bundled": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/npm-bundled/-/npm-bundled-1.1.2.tgz", + "integrity": "sha512-x5DHup0SuyQcmL3s7Rx/YQ8sbw/Hzg0rj48eN0dV7hf5cmQq5PXIeioroH3raV1QC1yh3uTYuMThvEQF3iKgGQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "npm-normalize-package-bin": "^1.0.1" + } + }, + "node_modules/yalc/node_modules/npm-normalize-package-bin": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/npm-normalize-package-bin/-/npm-normalize-package-bin-1.0.1.tgz", + "integrity": "sha512-EPfafl6JL5/rU+ot6P3gRSCpPDW5VmIzX959Ob1+ySFUuuYHWHekXpwdUZcKP5C+DS4GEtdJluwBjnsNDl+fSA==", + "dev": true, + "license": "ISC" + }, "node_modules/yalc/node_modules/npm-packlist": { "version": "1.4.8", + "resolved": "https://registry.npmjs.org/npm-packlist/-/npm-packlist-1.4.8.tgz", + "integrity": "sha512-5+AZgwru5IevF5ZdnFglB5wNlHG1AOOuw28WhUq8/8emhBmLv6jX5by4WJCh7lW0uSYZYS6DXqIsyZVIXRZU9A==", "dev": true, "license": "ISC", "dependencies": { @@ -23009,19 +23125,28 @@ "npm-normalize-package-bin": "^1.0.1" } }, - "node_modules/yalc/node_modules/supports-color": { - "version": "7.2.0", + "node_modules/yalc/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": { - "has-flag": "^4.0.0" + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" }, "engines": { - "node": ">=8" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" } }, "node_modules/yalc/node_modules/yargs": { "version": "16.2.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", + "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", "dev": true, "license": "MIT", "dependencies": { @@ -23037,13 +23162,27 @@ "node": ">=10" } }, + "node_modules/yalc/node_modules/yargs-parser": { + "version": "20.2.9", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", + "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=10" + } + }, "node_modules/yallist": { "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==", "dev": true, "license": "MIT", "dependencies": { @@ -23060,28 +23199,9 @@ } }, "node_modules/yargs-parser": { - "version": "20.2.4", - "dev": true, - "license": "ISC", - "engines": { - "node": ">=10" - } - }, - "node_modules/yargs/node_modules/cliui": { - "version": "8.0.1", - "dev": true, - "license": "ISC", - "dependencies": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.1", - "wrap-ansi": "^7.0.0" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/yargs/node_modules/yargs-parser": { "version": "21.1.1", + "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": { @@ -23090,6 +23210,8 @@ }, "node_modules/yn": { "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", + "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==", "dev": true, "license": "MIT", "engines": { @@ -23098,6 +23220,8 @@ }, "node_modules/yocto-queue": { "version": "0.1.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", "dev": true, "license": "MIT", "engines": { @@ -23109,6 +23233,8 @@ }, "node_modules/zone-file": { "version": "2.0.0-beta.3", + "resolved": "https://registry.npmjs.org/zone-file/-/zone-file-2.0.0-beta.3.tgz", + "integrity": "sha512-6tE3PSRcpN5lbTTLlkLez40WkNPc9vw/u1J2j6DBiy0jcVX48nCkWrx2EC+bWHqC2SLp069Xw4AdnYn/qp/W5g==", "license": "ISC", "engines": { "node": ">=10" @@ -23262,6 +23388,48 @@ "dev": true, "license": "MIT" }, + "packages/cli/node_modules/ajv": { + "version": "6.12.6", + "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" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "packages/cli/node_modules/inquirer": { + "version": "7.3.3", + "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-7.3.3.tgz", + "integrity": "sha512-JG3eIAj5V9CwcGvuOmoo6LB9kbAYT8HXffUl6memuszlwDC/qvFAJw49XJ5NROSFNPxp3iQg1GqkFhaY/CR0IA==", + "license": "MIT", + "dependencies": { + "ansi-escapes": "^4.2.1", + "chalk": "^4.1.0", + "cli-cursor": "^3.1.0", + "cli-width": "^3.0.0", + "external-editor": "^3.0.3", + "figures": "^3.0.0", + "lodash": "^4.17.19", + "mute-stream": "0.0.8", + "run-async": "^2.4.0", + "rxjs": "^6.6.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0", + "through": "^2.3.6" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "packages/cli/node_modules/json-schema-traverse": { + "version": "0.4.1", + "license": "MIT" + }, "packages/cli/node_modules/rimraf": { "version": "3.0.2", "dev": true, @@ -23342,6 +23510,21 @@ "dev": true, "license": "MIT" }, + "packages/encryption/node_modules/base-x": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/base-x/-/base-x-4.0.0.tgz", + "integrity": "sha512-FuwxlW4H5kh37X/oW59pwTzzTKRzfrrQwhmyspRM7swOEZcHtDZSCt45U6oKgtuFE+WYPblePMVIPR4RZrh/hw==", + "license": "MIT" + }, + "packages/encryption/node_modules/bs58": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/bs58/-/bs58-5.0.0.tgz", + "integrity": "sha512-r+ihvQJvahgYT50JD05dyJNKlmmSlMoOGwn1lCcEzanPglg7TxYjioQUYehQ9mAR/+hOSd2jRc/Z2y5UxBymvQ==", + "license": "MIT", + "dependencies": { + "base-x": "^4.0.0" + } + }, "packages/encryption/node_modules/rimraf": { "version": "3.0.2", "dev": true, @@ -23545,37 +23728,27 @@ "license": "MIT", "dependencies": { "@btc-helpers/rpc": "^2.0.0", - "@noble/secp256k1": "^2.0.0", - "@scure/base": "^1.1.3", - "@scure/btc-signer": "^1.1.0", - "@stacks/common": "^6.7.0", - "@stacks/encryption": "^6.7.0", - "@stacks/transactions": "^6.7.0", + "@noble/secp256k1": "^2.1.0", + "@scure/base": "^1.1.9", + "@scure/btc-signer": "^1.4.0", + "@stacks/common": "^7.0.2", + "@stacks/encryption": "^7.0.2", + "@stacks/network": "^7.0.2", + "@stacks/transactions": "^7.0.2", "c32check": "^2.0.0", - "micro-packed": "^0.3.2" + "micro-packed": "^0.6.3" }, "devDependencies": { - "@scure/bip32": "^1.3.2", - "@scure/bip39": "^1.2.1", - "jest-fetch-mock": "^3.0.3", - "rimraf": "^3.0.2", - "sbtc-bridge-lib": "latest", - "vitest": "^0.34.6" + "@scure/bip32": "^1.5.0", + "@scure/bip39": "^1.4.0", + "@stacks/internal": "file:../internal", + "rimraf": "^6.0.1", + "vitest": "^2.1.5", + "vitest-fetch-mock": "^0.4.2" } }, "packages/sbtc/node_modules/@noble/secp256k1": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/@noble/secp256k1/-/secp256k1-2.1.0.tgz", - "integrity": "sha512-XLEQQNdablO0XZOIniFQimiXsZDNwaYgL96dZwC54Q30imSbAOFf3NKtepc+cXyuZf5Q1HCgbqgZ2UFFuHVcEw==", - "license": "MIT", - "funding": { - "url": "https://paulmillr.com/funding/" - } - }, - "packages/sbtc/node_modules/@scure/base": { - "version": "1.1.9", - "resolved": "https://registry.npmjs.org/@scure/base/-/base-1.1.9.tgz", - "integrity": "sha512-8YKhl8GHiNI/pU2VMaofa2Tor7PJRAjwQLBBuilkJ9L5+13yVbC7JO/wS7piioAvPSwR3JKM1IJ/u4xQzbcXKg==", "license": "MIT", "funding": { "url": "https://paulmillr.com/funding/" @@ -23583,8 +23756,6 @@ }, "packages/sbtc/node_modules/@scure/bip32": { "version": "1.5.0", - "resolved": "https://registry.npmjs.org/@scure/bip32/-/bip32-1.5.0.tgz", - "integrity": "sha512-8EnFYkqEQdnkuGBVpCzKxyIwDCBLDVj3oiX0EKUFre/tOjL/Hqba1D6n/8RcmaQy4f95qQFrO2A8Sr6ybh4NRw==", "dev": true, "license": "MIT", "dependencies": { @@ -23598,8 +23769,6 @@ }, "packages/sbtc/node_modules/@scure/bip32/node_modules/@noble/hashes": { "version": "1.5.0", - "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.5.0.tgz", - "integrity": "sha512-1j6kQFb7QRru7eKN3ZDvRcP13rugwdxZqCjbiAVZfIJwgj2A65UmT4TgARXGlXgnRkORLTDTrO19ZErt7+QXgA==", "dev": true, "license": "MIT", "engines": { @@ -23611,8 +23780,6 @@ }, "packages/sbtc/node_modules/@scure/bip39": { "version": "1.4.0", - "resolved": "https://registry.npmjs.org/@scure/bip39/-/bip39-1.4.0.tgz", - "integrity": "sha512-BEEm6p8IueV/ZTfQLp/0vhw4NPnT9oWf5+28nvmeUICjP99f4vr2d+qc7AVGDDtwRep6ifR43Yed9ERVmiITzw==", "dev": true, "license": "MIT", "dependencies": { @@ -23625,8 +23792,6 @@ }, "packages/sbtc/node_modules/@scure/bip39/node_modules/@noble/hashes": { "version": "1.5.0", - "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.5.0.tgz", - "integrity": "sha512-1j6kQFb7QRru7eKN3ZDvRcP13rugwdxZqCjbiAVZfIJwgj2A65UmT4TgARXGlXgnRkORLTDTrO19ZErt7+QXgA==", "dev": true, "license": "MIT", "engines": { @@ -23636,118 +23801,92 @@ "url": "https://paulmillr.com/funding/" } }, - "packages/sbtc/node_modules/@stacks/common": { - "version": "6.16.0", - "resolved": "https://registry.npmjs.org/@stacks/common/-/common-6.16.0.tgz", - "integrity": "sha512-PnzvhrdGRMVZvxTulitlYafSK4l02gPCBBoI9QEoTqgSnv62oaOXhYAUUkTMFKxdHW1seVEwZsrahuXiZPIAwg==", - "license": "MIT", - "dependencies": { - "@types/bn.js": "^5.1.0", - "@types/node": "^18.0.4" - } - }, - "packages/sbtc/node_modules/@stacks/encryption": { - "version": "6.17.0", - "resolved": "https://registry.npmjs.org/@stacks/encryption/-/encryption-6.17.0.tgz", - "integrity": "sha512-c0+ZOjrAiB1fDCjXO6XqHdYgpeBeMYyeH+dWahpD1VQUDor2PE5Q47qyuibWmx36rLWt1M6wlaLdeVm6HlKGzw==", - "license": "MIT", + "packages/sbtc/node_modules/glob": { + "version": "11.0.0", + "dev": true, + "license": "ISC", "dependencies": { - "@noble/hashes": "1.1.5", - "@noble/secp256k1": "1.7.1", - "@scure/bip39": "1.1.0", - "@stacks/common": "^6.16.0", - "@types/node": "^18.0.4", - "base64-js": "^1.5.1", - "bs58": "^5.0.0", - "ripemd160-min": "^0.0.6", - "varuint-bitcoin": "^1.1.2" + "foreground-child": "^3.1.0", + "jackspeak": "^4.0.1", + "minimatch": "^10.0.0", + "minipass": "^7.1.2", + "package-json-from-dist": "^1.0.0", + "path-scurry": "^2.0.0" + }, + "bin": { + "glob": "dist/esm/bin.mjs" + }, + "engines": { + "node": "20 || >=22" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "packages/sbtc/node_modules/@stacks/encryption/node_modules/@noble/secp256k1": { - "version": "1.7.1", - "resolved": "https://registry.npmjs.org/@noble/secp256k1/-/secp256k1-1.7.1.tgz", - "integrity": "sha512-hOUk6AyBFmqVrv7k5WAw/LpszxVbj9gGN4JRkIX52fdFAj1UA61KXmZDvqVEm+pOyec3+fIeZB02LYa/pWOArw==", - "funding": [ - { - "type": "individual", - "url": "https://paulmillr.com/funding/" - } - ], - "license": "MIT" - }, - "packages/sbtc/node_modules/@stacks/encryption/node_modules/@scure/bip39": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@scure/bip39/-/bip39-1.1.0.tgz", - "integrity": "sha512-pwrPOS16VeTKg98dYXQyIjJEcWfz7/1YJIwxUEPFfQPtc86Ym/1sVgQ2RLoD43AazMk2l/unK4ITySSpW2+82w==", - "funding": [ - { - "type": "individual", - "url": "https://paulmillr.com/funding/" - } - ], - "license": "MIT", + "packages/sbtc/node_modules/jackspeak": { + "version": "4.0.2", + "dev": true, + "license": "BlueOak-1.0.0", "dependencies": { - "@noble/hashes": "~1.1.1", - "@scure/base": "~1.1.0" + "@isaacs/cliui": "^8.0.2" + }, + "engines": { + "node": "20 || >=22" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "packages/sbtc/node_modules/@stacks/network": { - "version": "6.17.0", - "resolved": "https://registry.npmjs.org/@stacks/network/-/network-6.17.0.tgz", - "integrity": "sha512-numHbfKjwco/rbkGPOEz8+FcJ2nBnS/tdJ8R422Q70h3SiA9eqk9RjSzB8p4JP8yW1SZvW+eihADHfMpBuZyfw==", - "license": "MIT", - "dependencies": { - "@stacks/common": "^6.16.0", - "cross-fetch": "^3.1.5" + "packages/sbtc/node_modules/lru-cache": { + "version": "11.0.2", + "dev": true, + "license": "ISC", + "engines": { + "node": "20 || >=22" } }, - "packages/sbtc/node_modules/@stacks/transactions": { - "version": "6.17.0", - "resolved": "https://registry.npmjs.org/@stacks/transactions/-/transactions-6.17.0.tgz", - "integrity": "sha512-FUah2BRgV66ApLcEXGNGhwyFTRXqX5Zco3LpiM3essw8PF0NQlHwwdPgtDko5RfrJl3LhGXXe/30nwsfNnB3+g==", - "license": "MIT", + "packages/sbtc/node_modules/minimatch": { + "version": "10.0.1", + "dev": true, + "license": "ISC", "dependencies": { - "@noble/hashes": "1.1.5", - "@noble/secp256k1": "1.7.1", - "@stacks/common": "^6.16.0", - "@stacks/network": "^6.17.0", - "c32check": "^2.0.0", - "lodash.clonedeep": "^4.5.0" + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": "20 || >=22" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "packages/sbtc/node_modules/@stacks/transactions/node_modules/@noble/secp256k1": { - "version": "1.7.1", - "resolved": "https://registry.npmjs.org/@noble/secp256k1/-/secp256k1-1.7.1.tgz", - "integrity": "sha512-hOUk6AyBFmqVrv7k5WAw/LpszxVbj9gGN4JRkIX52fdFAj1UA61KXmZDvqVEm+pOyec3+fIeZB02LYa/pWOArw==", - "funding": [ - { - "type": "individual", - "url": "https://paulmillr.com/funding/" - } - ], - "license": "MIT" - }, - "packages/sbtc/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==", - "license": "MIT", + "packages/sbtc/node_modules/path-scurry": { + "version": "2.0.0", + "dev": true, + "license": "BlueOak-1.0.0", "dependencies": { - "undici-types": "~5.26.4" + "lru-cache": "^11.0.0", + "minipass": "^7.1.2" + }, + "engines": { + "node": "20 || >=22" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, "packages/sbtc/node_modules/rimraf": { - "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", + "version": "6.0.1", "dev": true, "license": "ISC", "dependencies": { - "glob": "^7.1.3" + "glob": "^11.0.0", + "package-json-from-dist": "^1.0.0" }, "bin": { - "rimraf": "bin.js" + "rimraf": "dist/esm/bin.mjs" + }, + "engines": { + "node": "20 || >=22" }, "funding": { "url": "https://github.com/sponsors/isaacs" @@ -23776,6 +23915,16 @@ "stream-browserify": "^3.0.0" } }, + "packages/stacking/node_modules/@scure/base": { + "version": "1.1.1", + "funding": [ + { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + ], + "license": "MIT" + }, "packages/stacking/node_modules/@stacks/blockchain-api-client": { "version": "7.12.0", "dev": true, @@ -23794,6 +23943,21 @@ "version": "0.61.0", "license": "ISC" }, + "packages/stacking/node_modules/base-x": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/base-x/-/base-x-4.0.0.tgz", + "integrity": "sha512-FuwxlW4H5kh37X/oW59pwTzzTKRzfrrQwhmyspRM7swOEZcHtDZSCt45U6oKgtuFE+WYPblePMVIPR4RZrh/hw==", + "license": "MIT" + }, + "packages/stacking/node_modules/bs58": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/bs58/-/bs58-5.0.0.tgz", + "integrity": "sha512-r+ihvQJvahgYT50JD05dyJNKlmmSlMoOGwn1lCcEzanPglg7TxYjioQUYehQ9mAR/+hOSd2jRc/Z2y5UxBymvQ==", + "license": "MIT", + "dependencies": { + "base-x": "^4.0.0" + } + }, "packages/stacking/node_modules/cross-fetch": { "version": "3.1.5", "dev": true, @@ -23949,6 +24113,14 @@ "buffer": "^6.0.3" } }, + "packages/storage/node_modules/@types/bn.js": { + "version": "5.1.6", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, "packages/storage/node_modules/@types/node": { "version": "18.17.4", "dev": true, diff --git a/packages/internal/package.json b/packages/internal/package.json index 62eb30fb0..c58a2e745 100644 --- a/packages/internal/package.json +++ b/packages/internal/package.json @@ -1,6 +1,8 @@ { "private": true, "name": "@stacks/internal", + "version": "7.0.3", + "main": "./src/index.ts", "scripts": { "start": "tsc -b tsconfig.build.json --watch --verbose", "typecheck": "tsc --noEmit", @@ -11,6 +13,5 @@ "@stacks/network": "^7.0.2", "@stacks/stacking": "^7.0.3", "jest-fetch-mock": "^3.0.3" - }, - "version": "7.0.3" + } } diff --git a/packages/internal/src/apiMockingHelpers.ts b/packages/internal/src/apiMockingHelpers.ts index df1254e93..c26314936 100644 --- a/packages/internal/src/apiMockingHelpers.ts +++ b/packages/internal/src/apiMockingHelpers.ts @@ -2,6 +2,7 @@ import { Configuration, TransactionsApi } from '@stacks/blockchain-api-client'; import { STACKS_TESTNET } from '@stacks/network'; import { MockResponseInitFunction } from 'jest-fetch-mock'; import { StackingClient } from '@stacks/stacking'; +import fs from 'fs'; // NOTES // Capture traffic via the fetchWrapper @@ -185,3 +186,18 @@ export function getFetchMockBroadcast() { .find((m: any) => m[0].endsWith('/transactions')); return JSON.parse(broadcast[1].body); } + +export function enableFetchLogging() { + const fetchOriginal = globalThis.fetch; + (globalThis.fetch as any) = async (input: string | Request, init?: RequestInit) => { + const r = await fetchOriginal(input, init); + const response = await r + .clone() + .json() + .catch(() => r.clone().text()); + const url = input instanceof Request ? input.url : input; + const log = `'${url}': \`${JSON.stringify(response)}\`,`; + fs.appendFileSync('network.txt', `${log}\n`); + return r; + }; +} diff --git a/packages/sbtc/package.json b/packages/sbtc/package.json index 8591091f8..037a30c38 100644 --- a/packages/sbtc/package.json +++ b/packages/sbtc/package.json @@ -14,29 +14,30 @@ "pack": "npm pack", "prepublishOnly": "npm run test && NODE_ENV=production npm run build", "start": "tsc -b tsconfig.build.json --watch --verbose", - "test": "echo 'tests disabled'", + "test": "vitest", "test:watch": "jest --watch --coverage=false", "typecheck": "tsc --noEmit", "typecheck:watch": "npm run typecheck -- --watch" }, "dependencies": { "@btc-helpers/rpc": "^2.0.0", - "@noble/secp256k1": "^2.0.0", - "@scure/base": "^1.1.3", - "@scure/btc-signer": "^1.1.0", - "@stacks/common": "^6.7.0", - "@stacks/encryption": "^6.7.0", - "@stacks/transactions": "^6.7.0", + "@noble/secp256k1": "^2.1.0", + "@scure/base": "^1.1.9", + "@scure/btc-signer": "^1.4.0", + "@stacks/common": "^7.0.2", + "@stacks/encryption": "^7.0.2", + "@stacks/network": "^7.0.2", + "@stacks/transactions": "^7.0.2", "c32check": "^2.0.0", - "micro-packed": "^0.3.2" + "micro-packed": "^0.6.3" }, "devDependencies": { - "@scure/bip32": "^1.3.2", - "@scure/bip39": "^1.2.1", - "jest-fetch-mock": "^3.0.3", - "rimraf": "^3.0.2", - "sbtc-bridge-lib": "latest", - "vitest": "^0.34.6" + "@scure/bip32": "^1.5.0", + "@scure/bip39": "^1.4.0", + "@stacks/internal": "file:../internal", + "rimraf": "^6.0.1", + "vitest": "^2.1.5", + "vitest-fetch-mock": "^0.4.2" }, "sideEffects": false, "typings": "dist/index.d.ts", diff --git a/packages/sbtc/src/api.ts b/packages/sbtc/src/api.ts index 6dd57ba43..5edc3c23b 100644 --- a/packages/sbtc/src/api.ts +++ b/packages/sbtc/src/api.ts @@ -1,117 +1,127 @@ -import { HDKey } from '@scure/bip32'; -import * as bip39 from '@scure/bip39'; import * as btc from '@scure/btc-signer'; +import { TransactionInput } from '@scure/btc-signer/psbt'; +import { STACKS_DEVNET } from '@stacks/network'; import { BufferCV, + Cl, + ClarityValue, SomeCV, - TransactionVersion, UIntCV, - getAddressFromPrivateKey, - serializeCV, + fetchCallReadOnlyFunction, } from '@stacks/transactions'; - -import RpcClient from '@btc-helpers/rpc'; -import { RpcCallSpec } from '@btc-helpers/rpc/dist/callspec'; -import { bytesToHex } from '@stacks/common'; -import { compressPrivateKey } from '@stacks/encryption'; -import { Cl } from '@stacks/transactions'; -import { BitcoinNetwork, MAINNET, REGTEST, SBTC_FT_ADDRESS_TESTNET, TESTNET } from './constants'; +import { REGTEST } from './constants'; import { wrapLazyProxy } from './utils'; -import { ClarityValue } from '@stacks/transactions'; /** todo */ // https://blockstream.info/api/address/1KFHE7w8BhaENAswwryaoccDb6qcT6DbYY/utxo // [{"txid":"033e44b535c5709d30234921608219ee5ca1e320fa9def44715eaeb2b7ad52d3","vout":0,"status":{"confirmed":false},"value":42200}] -export type BlockstreamUtxo = { +export type MempoolApiUtxo = { txid: string; vout: number; value: number; - status: { + status?: { confirmed: boolean; block_height: number; }; }; /** todo */ -export type UtxoWithTx = BlockstreamUtxo & { +export type UtxoWithTx = MempoolApiUtxo & { tx: string | Promise; }; -export type SpendableUtxo = BlockstreamUtxo & { - input: btc.TransactionInput | Promise; +export type SpendableUtxo = MempoolApiUtxo & { + input: TransactionInput | Promise; vsize?: number | Promise; }; -/** todo */ -export type BlockstreamFeeEstimates = - // prettier-ignore - { [K in | '1' | '2' | '3' | '4' | '5' | '6' | '7' | '8' | '9' | '10' | '11' | '12' | '13' | '14' | '15' | '16' | '17' | '18' | '19' | '20' | '21' | '22' | '23' | '24' | '25' | '144' | '504' | '1008']: number; }; +export type MempoolFeeEstimates = { + fastestFee: number; + halfHourFee: number; + hourFee: number; + // economyFee: number; + // minimumFee: number; +}; -export interface BaseUrlConfig { - bitcoinElectrsApiUrl: string; - stacksApiUrl: string; +export interface BaseClientConfig { + sbtcContract: string; + + sbtcApiUrl: string; + btcMempoolApiUrl: string; + stxApiUrl: string; } -export class SbtcApiHelper { - constructor(public config: BaseUrlConfig) {} +export class SbtcApiClient { + constructor(public config: BaseClientConfig) {} async fetchUtxos(address: string): Promise { - return fetch(`${this.config.bitcoinElectrsApiUrl}/address/${address}/utxo`) - .then(res => res.json()) - .then((utxos: BlockstreamUtxo[]) => - utxos.sort((a, b) => a.status.block_height - b.status.block_height) - ) - .then((utxos: BlockstreamUtxo[]) => - utxos.map(u => wrapLazyProxy(u, 'tx', () => this.fetchTxHex(u.txid))) - ); + return ( + fetch(`${this.config.btcMempoolApiUrl}/address/${address}/utxo`) + .then(res => res.json()) + // .then((utxos: MempoolApiUtxo[]) => + // utxos.sort((a, b) => a.status.block_height - b.status.block_height) + // ) + .then((utxos: MempoolApiUtxo[]) => + utxos.map(u => wrapLazyProxy(u, 'tx', () => this.fetchTxHex(u.txid))) + ) + ); } async fetchTxHex(txid: string): Promise { - return fetch(`${this.config.bitcoinElectrsApiUrl}/tx/${txid}/hex`).then(res => res.text()); + return fetch(`${this.config.btcMempoolApiUrl}/api/tx/${txid}/hex`).then(res => res.text()); } - async estimateFeeRates(): Promise { - return fetch(`${this.config.bitcoinElectrsApiUrl}/fee-estimates`).then(res => res.json()); + async fetchFeeRates(): Promise { + return fetch(`${this.config.btcMempoolApiUrl}/api/v1/fees/recommended`).then(res => res.json()); } - async estimateFeeRate(target: 'low' | 'medium' | 'high' | number): Promise { - const feeEstimates = await this.estimateFeeRates(); - const t = - typeof target === 'number' - ? target.toString() - : target === 'high' - ? '1' - : target === 'medium' - ? '2' - : '3'; - if (t in feeEstimates) { - return feeEstimates[t as keyof BlockstreamFeeEstimates]; - } - - throw new Error(`Invalid fee target: ${target}`); + async fetchFeeRate(target: 'low' | 'medium' | 'high'): Promise { + const feeEstimates = await this.fetchFeeRates(); + const t = target === 'high' ? 'fastestFee' : target === 'medium' ? 'halfHourFee' : 'hourFee'; + return feeEstimates[t]; } async broadcastTx(tx: btc.Transaction): Promise { - return await fetch(`${this.config.bitcoinElectrsApiUrl}/tx`, { + return await fetch(`${this.config.btcMempoolApiUrl}/tx`, { method: 'POST', body: tx.hex, }).then(res => res.text()); } - async stacksCallReadOnly({ + async fetchSignersPublicKey(contractAddress?: string): Promise { + const res = (await fetchCallReadOnlyFunction({ + contractAddress: contractAddress ?? this.config.sbtcContract, + contractName: 'sbtc-registry', + functionName: 'get-current-aggregate-pubkey', + functionArgs: [], + senderAddress: STACKS_DEVNET.bootAddress, // zero address + client: { + baseUrl: this.config.stxApiUrl, + }, + })) as BufferCV; + + return res.value.slice(2); + } + + async fetchSignersAddress(contractAddress?: string): Promise { + const pub = await this.fetchSignersPublicKey(contractAddress ?? this.config.sbtcContract); + return btc.p2tr(pub, undefined, REGTEST).address!; + } + + async fetchCallReadOnly({ contractAddress, functionName, - sender = 'ST000000000000000000002AMW42H', args = [], + sender = STACKS_DEVNET.bootAddress, // zero address }: { contractAddress: string; functionName: string; - sender?: string; args?: ClarityValue[]; + sender?: string; }) { contractAddress = contractAddress.replace('.', '/'); return await fetch( - `${this.config.stacksApiUrl}/v2/contracts/call-read/${contractAddress}/${encodeURIComponent( + `${this.config.stxApiUrl}/v2/contracts/call-read/${contractAddress}/${encodeURIComponent( functionName )}`, { @@ -120,176 +130,192 @@ export class SbtcApiHelper { Accept: 'application/json', 'Content-Type': 'application/json', }, - body: JSON.stringify({ sender, arguments: args.map(serializeCV).map(bytesToHex) }), + body: JSON.stringify({ sender, arguments: args.map(Cl.serialize) }), } ) .then(res => res.json()) .then(res => Cl.deserialize(res.result)); } - /** - * Get BTC balance (in satoshis) - * todo: check if better endpoints now exist - */ - async getBalance(address: string): Promise { - const addressInfo = await fetch(`${this.config.bitcoinElectrsApiUrl}/address/${address}`).then( - r => r.json() + /** Get BTC balance (in satoshis) */ + async fetchBalance(address: string): Promise { + // todo: check if better endpoints now exist + const addressInfo = await fetch(`${this.config.btcMempoolApiUrl}/address/${address}`).then(r => + r.json() ); return addressInfo.chain_stats.funded_txo_sum - addressInfo.chain_stats.spent_txo_sum; } - async getSbtcBalance({ - holderAddress, - sbtcContract, - }: { - holderAddress: string; - sbtcContract: string; - }) { - const [address, name] = holderAddress.split('.'); + async fetchSbtcBalance(stacksAddress: string) { + const [address, name] = stacksAddress.split('.'); - const balance = (await this.stacksCallReadOnly({ - contractAddress: sbtcContract, + const balance = (await this.fetchCallReadOnly({ + contractAddress: this.config.sbtcContract, functionName: 'get-balance', args: [name ? Cl.contractPrincipal(address, name) : Cl.standardPrincipal(address)], })) as SomeCV; return balance?.value?.value ?? 0; } - - async getBitcoinAccount(mnemonic: string, idx: number = 0) { - return await getBitcoinAccount(MAINNET, mnemonic, idx); - } - - async getStacksAccount(mnemonic: string, idx: number = 0) { - return await getStacksAccount(TransactionVersion.Mainnet, mnemonic, idx); - } } -export class TestnetHelper extends SbtcApiHelper { - constructor(config?: Partial) { +export class SbtcApiClientTestnet extends SbtcApiClient { + constructor(config?: Partial) { super( Object.assign( { - bitcoinElectrsApiUrl: 'https://blockstream.info/testnet/api', - stacksApiUrl: 'https://stacks-node-api.testnet.stacks.co', + sbtcApiUrl: 'https://sbtc.tech', // todo: get real url + btcMempoolApiUrl: 'https://blockstream.info/testnet/api', // todo: mempool it + stxApiUrl: 'https://stacks-node-api.testnet.stacks.co', + sbtcContract: 'SN3R84XZYA63QS28932XQF3G1J8R9PC3W76P9CSQS', // todo: find final value }, config ) ); } - - async getSbtcPegAddress(contractAddress = SBTC_FT_ADDRESS_TESTNET): Promise { - const publicKey = ( - (await this.stacksCallReadOnly({ - contractAddress, - functionName: 'get-bitcoin-wallet-public-key', - })) as SomeCV - ).value.buffer; - - const tr = btc.p2tr( - publicKey.length === 33 ? publicKey.subarray(1) : publicKey, // strip y byte - undefined, - TESTNET - ); - return tr.address!; - } - - async getBitcoinAccount(mnemonic: string, idx: number = 0) { - return await getBitcoinAccount(TESTNET, mnemonic, idx); - } - - async getStacksAccount(mnemonic: string, idx: number = 0) { - return await getStacksAccount(TransactionVersion.Testnet, mnemonic, idx); - } } -export class DevEnvHelper extends SbtcApiHelper { - btcRpc: RpcClient & RpcCallSpec; - - constructor(config?: Partial) { +export class SbtcApiClientDevenv extends SbtcApiClient { + constructor(config?: Partial) { super( Object.assign( { - bitcoinElectrsApiUrl: 'http://127.0.0.1:3002', - stacksApiUrl: 'http://127.0.0.1:3999', + sbtcApiUrl: 'http://localhost:3031', // todo: get real url + btcMempoolApiUrl: 'http://localhost:8083', + stxApiUrl: 'http://localhost:3999', + sbtcContract: 'SN3R84XZYA63QS28932XQF3G1J8R9PC3W76P9CSQS', }, config ) ); - - const bitcoinCoreRpcUrl = config?.bitcoinCoreRpcUrl ?? 'http://devnet:devnet@127.0.0.1:18433'; - this.btcRpc = new RpcClient(bitcoinCoreRpcUrl).Typed; - } - - async getSbtcPegAddress(): Promise { - const pegAccount = await this.getBitcoinAccount(WALLET_00); - return pegAccount.tr.address; - } - - async getBitcoinAccount(mnemonic: string, idx: number = 0) { - return await getBitcoinAccount(REGTEST, mnemonic, idx); - } - - async getStacksAccount(mnemonic: string, idx: number = 0) { - return await getStacksAccount(TransactionVersion.Testnet, mnemonic, idx); } } -// == WALLET =================================================================== - -export const WALLET_00 = - 'twice kind fence tip hidden tilt action fragile skin nothing glory cousin green tomorrow spring wrist shed math olympic multiply hip blue scout claw'; -export const WALLET_01 = - 'sell invite acquire kitten bamboo drastic jelly vivid peace spawn twice guilt pave pen trash pretty park cube fragile unaware remain midnight betray rebuild'; -export const WALLET_02 = - 'hold excess usual excess ring elephant install account glad dry fragile donkey gaze humble truck breeze nation gasp vacuum limb head keep delay hospital'; - -export async function getBitcoinAccount( - network: BitcoinNetwork, - mnemonic: string, - idx: number = 0 -) { - const seed = await bip39.mnemonicToSeed(mnemonic); - const hdkey = HDKey.fromMasterSeed(seed, network.bip32); - - const path = `m/84'/${network.bip84.coin}'/${idx}'/0/0`; - const privateKey = hdkey.derive(path).privateKey!; - const publicKey = hdkey.derive(path).publicKey!; - - const trPath = `m/86'/${network.bip84.coin}'/${idx}'/0/0`; - const trPrivateKey = hdkey.derive(trPath).privateKey!; - const trPublicKey = hdkey.derive(trPath).publicKey!; // not sure if this should be used, but this is what the CLI returns - - return { - privateKey, - publicKey, - wpkh: { address: btc.getAddress('wpkh', privateKey, network)! }, - tr: { - address: btc.getAddress('tr', trPrivateKey, network)!, - publicKey: trPublicKey, - }, - }; -} - -export async function getStacksAccount( - transactionVersion: TransactionVersion, - mnemonic: string, - idx: number = 0 -) { - const rootPrivateKey = await bip39.mnemonicToSeed(mnemonic); - const rootNode = HDKey.fromMasterSeed(rootPrivateKey); - - const childKey = rootNode.derive(`m/44'/5757'/0'/0`).deriveChild(idx); - const stxPrivateKey = bytesToHex(compressPrivateKey(childKey.privateKey!)); - - return { - /** Alias for `privateKey` @deprecated use `.privateKey` instead */ - stxPrivateKey, - privateKey: stxPrivateKey, - address: getAddressFromPrivateKey(stxPrivateKey, transactionVersion), - }; -} +// export class TestnetHelper extends SbtcApiClient { +// constructor(config?: Partial) { +// super( +// Object.assign( +// { +// bitcoinElectrsApiUrl: 'https://blockstream.info/testnet/api', +// stacksApiUrl: 'https://stacks-node-api.testnet.stacks.co', +// }, +// config +// ) +// ); +// } + +// async getSbtcPegAddress(contractAddress = SBTC_FT_ADDRESS_TESTNET): Promise { +// const publicKey = ( +// (await this.fetchCallReadOnly({ +// contractAddress, +// functionName: 'get-bitcoin-wallet-public-key', +// })) as SomeCV +// ).value.buffer; + +// const tr = btc.p2tr( +// publicKey.length === 33 ? publicKey.subarray(1) : publicKey, // strip y byte +// undefined, +// TESTNET +// ); +// return tr.address!; +// } + +// async getBitcoinAccount(mnemonic: string, idx: number = 0) { +// return await getBitcoinAccount(TESTNET, mnemonic, idx); +// } + +// async getStacksAccount(mnemonic: string, idx: number = 0) { +// return await getStacksAccount(TransactionVersion.Testnet, mnemonic, idx); +// } +// } + +// export class DevEnvHelper extends SbtcApiClient { +// btcRpc: RpcClient & RpcCallSpec; + +// constructor(config?: Partial) { +// super( +// Object.assign( +// { +// bitcoinElectrsApiUrl: 'http://127.0.0.1:3002', +// stacksApiUrl: 'http://127.0.0.1:3999', +// }, +// config +// ) +// ); + +// const bitcoinCoreRpcUrl = config?.bitcoinCoreRpcUrl ?? 'http://devnet:devnet@127.0.0.1:18433'; +// this.btcRpc = new RpcClient(bitcoinCoreRpcUrl).Typed; +// } + +// async getSbtcPegAddress(): Promise { +// const pegAccount = await this.getBitcoinAccount(WALLET_00); +// return pegAccount.tr.address; +// } + +// async getBitcoinAccount(mnemonic: string, idx: number = 0) { +// return await getBitcoinAccount(REGTEST, mnemonic, idx); +// } + +// async getStacksAccount(mnemonic: string, idx: number = 0) { +// return await getStacksAccount(TransactionVersion.Testnet, mnemonic, idx); +// } +// } + +// // == WALLET =================================================================== + +// export const WALLET_00 = +// 'twice kind fence tip hidden tilt action fragile skin nothing glory cousin green tomorrow spring wrist shed math olympic multiply hip blue scout claw'; +// export const WALLET_01 = +// 'sell invite acquire kitten bamboo drastic jelly vivid peace spawn twice guilt pave pen trash pretty park cube fragile unaware remain midnight betray rebuild'; +// export const WALLET_02 = +// 'hold excess usual excess ring elephant install account glad dry fragile donkey gaze humble truck breeze nation gasp vacuum limb head keep delay hospital'; + +// export async function getBitcoinAccount( +// network: BitcoinNetwork, +// mnemonic: string, +// idx: number = 0 +// ) { +// const seed = await bip39.mnemonicToSeed(mnemonic); +// const hdkey = HDKey.fromMasterSeed(seed, network.bip32); + +// const path = `m/84'/${network.bip84.coin}'/${idx}'/0/0`; +// const privateKey = hdkey.derive(path).privateKey!; +// const publicKey = hdkey.derive(path).publicKey!; + +// const trPath = `m/86'/${network.bip84.coin}'/${idx}'/0/0`; +// const trPrivateKey = hdkey.derive(trPath).privateKey!; +// const trPublicKey = hdkey.derive(trPath).publicKey!; // not sure if this should be used, but this is what the CLI returns + +// return { +// privateKey, +// publicKey, +// wpkh: { address: btc.getAddress('wpkh', privateKey, network)! }, +// tr: { +// address: btc.getAddress('tr', trPrivateKey, network)!, +// publicKey: trPublicKey, +// }, +// }; +// } + +// export async function getStacksAccount( +// transactionVersion: TransactionVersion, +// mnemonic: string, +// idx: number = 0 +// ) { +// const rootPrivateKey = await bip39.mnemonicToSeed(mnemonic); +// const rootNode = HDKey.fromMasterSeed(rootPrivateKey); + +// const childKey = rootNode.derive(`m/44'/5757'/0'/0`).deriveChild(idx); +// const stxPrivateKey = bytesToHex(compressPrivateKey(childKey.privateKey!)); + +// return { +// /** Alias for `privateKey` @deprecated use `.privateKey` instead */ +// stxPrivateKey, +// privateKey: stxPrivateKey, +// address: getAddressFromPrivateKey(stxPrivateKey, transactionVersion), +// }; +// } export function sleep(ms: number) { return new Promise(resolve => setTimeout(resolve, ms)); diff --git a/packages/sbtc/src/constants.ts b/packages/sbtc/src/constants.ts index 525960d69..d2e394fe6 100644 --- a/packages/sbtc/src/constants.ts +++ b/packages/sbtc/src/constants.ts @@ -66,7 +66,7 @@ export const REGTEST: BitcoinNetwork = { }; // Estimates based on https://bitcoinops.org/en/tools/calc-size/ -export const OVERHEAD_TX = 4 + 1 + 1 + 4; // new btc.Transaction().vsize +export const VSIZE_OVERHEAD_TX = 4 + 1 + 1 + 4; // new btc.Transaction().vsize // const OVERHEAD_INPUT = 36 + 1 + 4 + 0.25; // const OVERHEAD_OUTPUT = 8 + 1; // const OVERHEAD_INPUT_P2PKH = 107; diff --git a/packages/sbtc/src/transactions/deposit.ts b/packages/sbtc/src/transactions/deposit.ts index 7fe2068fb..8b02090c1 100644 --- a/packages/sbtc/src/transactions/deposit.ts +++ b/packages/sbtc/src/transactions/deposit.ts @@ -1,14 +1,8 @@ import * as btc from '@scure/btc-signer'; -import { asciiToBytes, hexToBytes } from '@stacks/common'; +import { bytesToHex, hexToBytes } from '@stacks/common'; import * as P from 'micro-packed'; import { UtxoWithTx } from '../api'; -import { - BitcoinNetwork, - OpCode, - REGTEST, - SBTC_PEG_ADDRESS_DEVENV, - VSIZE_INPUT_P2WPKH, -} from '../constants'; +import { BitcoinNetwork, REGTEST, VSIZE_INPUT_P2WPKH } from '../constants'; import { DEFAULT_UTXO_TO_SPENDABLE, SpendableByScriptTypes, @@ -18,91 +12,205 @@ import { stacksAddressBytes, } from '../utils'; -const concat = P.concatBytes; +const concat = P.utils.concatBytes; -export function buildSBtcDepositBtcPayload({ - network, - address, -}: { - network: BitcoinNetwork; - address: string; -}): Uint8Array { - const magicBytes = asciiToBytes(network.magicBytes); - const opCodeBytes = hexToBytes(OpCode.PegIn); - const principalTypeBytes = address.includes('.') ? hexToBytes('06') : hexToBytes('05'); - return concat(magicBytes, opCodeBytes, principalTypeBytes, stacksAddressBytes(address)); +// export function buildSBtcDepositBtcPayload({ +// network, +// address, +// }: { +// network: BitcoinNetwork; +// address: string; +// }): Uint8Array { +// const magicBytes = asciiToBytes(network.magicBytes); +// const opCodeBytes = hexToBytes(OpCode.PegIn); +// const addressBytes = stacksAddressBytes(address); + +// return concat(magicBytes, opCodeBytes, addressBytes); +// } + +export function buildSbtcDepositScript(opts: { + maxFee: number; + stacksAddress: string; + signersPublicKey: string; +}) { + const maxFeeBytes = P.U64BE.encode(BigInt(opts.maxFee)); + const recipientBytes = stacksAddressBytes(opts.stacksAddress); + const signersPublicKeyBytes = hexToBytes(opts.signersPublicKey); + + return btc.Script.encode([ + concat(maxFeeBytes, recipientBytes), + 'DROP', + signersPublicKeyBytes, + 'CHECKSIG', + ]); +} + +export function buildSbtcReclaimScript(opts: { lockTime: number }) { + return btc.Script.encode([ + btc.ScriptNum().encode(BigInt(opts.lockTime)), + 'CHECKSEQUENCEVERIFY', + // 'CHECKSEQUENCEVERIFY', // todo: remove; I'm assuming once is enough? // sbtc-bridge code does twice with additional optional data before + ]); } -/** */ -export const buildSbtcDepositTx = buildSbtcDepositTxOpReturn; // default to OP RETURN for developer release +export function buildSbtcDepositTr(opts: { + network: BitcoinNetwork; + stacksAddress: string; + signersPublicKey: string; + maxFee: number; + lockTime: number; +}) { + const deposit = buildSbtcDepositScript(opts); + const reclaim = buildSbtcReclaimScript(opts); + + const NUMS_X_COORDINATE = new Uint8Array([ + 0x50, 0x92, 0x9b, 0x74, 0xc1, 0xa0, 0x49, 0x54, 0xb7, 0x8b, 0x4b, 0x60, 0x35, 0xe9, 0x7a, 0x5e, + 0x07, 0x8a, 0x5a, 0x0f, 0x28, 0xec, 0x96, 0xd5, 0x47, 0xbf, 0xee, 0x9a, 0xce, 0x80, 0x3a, 0xc0, + ]); -/** - * - */ -export function buildSbtcDepositTxOpReturn({ + return { + depositScript: bytesToHex(deposit), + reclaimScript: bytesToHex(reclaim), + + trOut: btc.p2tr( + NUMS_X_COORDINATE, + [{ script: deposit }, { script: reclaim }], + opts.network, + true + ), + }; +} + +export function buildSbtcDepositTx({ network = REGTEST, amountSats, stacksAddress, - pegAddress = SBTC_PEG_ADDRESS_DEVENV, + signersPublicKey, + maxFee, + reclaimLockTime, }: { - network?: BitcoinNetwork; + network: BitcoinNetwork; amountSats: number; stacksAddress: string; - pegAddress?: string; + /** Aggregated (schnorr) public key of all signers */ + signersPublicKey: string; + maxFee: number; + reclaimLockTime: number; }) { - const data = buildSBtcDepositBtcPayload({ network, address: stacksAddress }); + // todo: check opts, e.g. pub key length to be schnorr - const tx = new btc.Transaction({ - allowUnknownInputs: true, - allowUnknownOutputs: true, + const tr = buildSbtcDepositTr({ + network, + stacksAddress, + signersPublicKey, + maxFee, + lockTime: reclaimLockTime, }); - tx.addOutput({ script: btc.Script.encode(['RETURN', data]), amount: BigInt(0) }); - tx.addOutputAddress(pegAddress, BigInt(amountSats), network); + if (!tr.trOut.address) throw new Error('Failed to create build taproot output'); + + const tx = new btc.Transaction(); + tx.addOutputAddress(tr.trOut.address, BigInt(amountSats), network); - return tx; + return { transaction: tx, ...tr }; } +// export function buildSbtcDepositTxOpReturn({ +// network = REGTEST, +// amountSats, +// stacksAddress, +// pegAddress = SBTC_PEG_ADDRESS_DEVENV, +// }: { +// network?: BitcoinNetwork; +// amountSats: number; +// stacksAddress: string; +// pegAddress?: string; +// }) { +// const data = buildSBtcDepositBtcPayload({ network, address: stacksAddress }); + +// const tx = new btc.Transaction({ +// allowUnknownInputs: true, +// allowUnknownOutputs: true, +// }); +// tx.addOutput({ script: btc.Script.encode(['RETURN', data]), amount: BigInt(0) }); +// tx.addOutputAddress(pegAddress, BigInt(amountSats), network); + +// return tx; +// } + export async function sbtcDepositHelper({ network = REGTEST, amountSats, stacksAddress, bitcoinChangeAddress, + signersPublicKey, feeRate, utxos, utxoToSpendable = DEFAULT_UTXO_TO_SPENDABLE, - pegAddress = SBTC_PEG_ADDRESS_DEVENV, paymentPublicKey, + maxFee = 80_000, + reclaimLockTime = 6_000, }: { + /** Bitcoin network, defaults to REGTEST */ network?: BitcoinNetwork; + /** Signers public key (aggregated schnorr) */ + signersPublicKey: string; + + /** Bitcoin amount denominated in sats (* 10^8) */ amountSats: number; + /** The deposit recipient Stacks address */ stacksAddress: string; + /** Bitcoin change address */ bitcoinChangeAddress: string; + /** Fee rate in sat/vbyte */ feeRate: number; + /** UTXOs to use for the transaction */ utxos: UtxoWithTx[]; + /** * Tries to convert p2wpk and p2sh utxos to spendable inputs by default. * To extend, add your own function that takes a {@link UtxoToSpendableOpts} * and returns a {@link Spendable}. + * + * @example + * ```ts + * utxoToSpendable: [ + * wpkh: myWpkhUtxoToSpendableFn, + * sh: myShUtxoToSpendableFn, + * // ... + * ] + * ``` */ utxoToSpendable?: Partial; - pegAddress?: string; + + /** Optional maximum fee to pay for the deposit transaction, defaults to 80_000 */ + maxFee?: number; + /** Optional reclaim lock time, defaults to 6_000 */ + reclaimLockTime?: number; + /** Optional payment public key (currently only used for `utxoToSpendable.sh`) */ paymentPublicKey?: string; }) { if (paymentPublicKey) { utxoToSpendable.sh = shUtxoToSpendable.bind(null, network, paymentPublicKey); } - const tx = buildSbtcDepositTxOpReturn({ network, amountSats, stacksAddress, pegAddress }); + const txInfo = buildSbtcDepositTx({ + network, + amountSats, + stacksAddress, + signersPublicKey, + maxFee: maxFee, + reclaimLockTime, + }); - // we separate this part, since wallets could handle it themselves - const pay = await paymentInfo({ tx, feeRate, utxos, utxoToSpendable }); - for (const input of pay.inputs) tx.addInput(input); + // We separate this part, since wallets could handle it themselves + const pay = await paymentInfo({ tx: txInfo.transaction, feeRate, utxos, utxoToSpendable }); + for (const input of pay.inputs) txInfo.transaction.addInput(input); const changeAfterAdditionalOutput = pay.changeSats - BigInt(Math.ceil(VSIZE_INPUT_P2WPKH * feeRate)); if (changeAfterAdditionalOutput > dustMinimum(VSIZE_INPUT_P2WPKH, feeRate)) { - tx.addOutputAddress(bitcoinChangeAddress, changeAfterAdditionalOutput, network); + txInfo.transaction.addOutputAddress(bitcoinChangeAddress, changeAfterAdditionalOutput, network); } - return tx; + return txInfo; } diff --git a/packages/sbtc/src/utils.ts b/packages/sbtc/src/utils.ts index 16cc10978..6a8513fc0 100644 --- a/packages/sbtc/src/utils.ts +++ b/packages/sbtc/src/utils.ts @@ -1,25 +1,38 @@ import * as btc from '@scure/btc-signer'; +import { + TransactionInput, + TransactionInputUpdate, + TransactionOutput, +} from '@scure/btc-signer/psbt'; import { hexToBytes, intToHex, utf8ToBytes } from '@stacks/common'; import { c32addressDecode } from 'c32check'; import * as P from 'micro-packed'; import { UtxoWithTx } from './api'; -import { BitcoinNetwork, OVERHEAD_TX, VSIZE_INPUT_P2WPKH } from './constants'; +import { BitcoinNetwork, VSIZE_INPUT_P2WPKH, VSIZE_OVERHEAD_TX } from './constants'; -const concat = P.concatBytes; +const concat = P.utils.concatBytes; + +/** @internal */ +export type Prettify = { + [K in keyof T]: T[K]; + // eslint-disable-next-line @typescript-eslint/ban-types +} & {}; // todo: move to transactions package export function stacksAddressBytes(address: string): Uint8Array { const [addr, contractName] = address.split('.'); const [version, hash] = c32addressDecode(addr); - const versionBytes = hexToBytes(version.toString(16)); + + const principalTypeByte = Uint8Array.from([contractName ? 0x06 : 0x05]); // todo: find vars/enum + const versionByte = Uint8Array.from([version]); const hashBytes = hexToBytes(hash); - const contractNameBytes = lengthPrefixedString(contractName, utf8ToBytes); + const contractNameBytes = lengthPrefixedString(contractName); - return concat(versionBytes, hashBytes, contractNameBytes); + return concat(principalTypeByte, versionByte, hashBytes, contractNameBytes); } // todo: move to transactions package -export function lengthPrefixedString( +function lengthPrefixedString( something: string | null | undefined, map: (something: string) => Uint8Array = utf8ToBytes, maxByteLength: number = 40, @@ -52,20 +65,22 @@ export async function paymentInfo({ const outputs = []; // can't enumerate directly for (let i = 0; i < tx.outputsLength; i++) outputs.push(tx.getOutput(i)); - return await utxoSelect({ feeRate, utxos, utxoToSpendable, outputs }); + return await utxoSelect({ feeRate, utxos, utxoToSpendables: utxoToSpendable, outputs }); } // == vsizing ================================================================== -export function txBytes(inputs: btc.TransactionInput[], outputs: btc.TransactionOutput[]) { +export function txBytes(inputs: TransactionInputUpdate[], outputs: TransactionOutput[]) { return ( - OVERHEAD_TX + inputs.map(inputBytes).reduce(plus, 0) + outputs.map(outputBytes).reduce(plus, 0) + VSIZE_OVERHEAD_TX + + inputs.map(inputBytes).reduce(plus, 0) + + outputs.map(outputBytes).reduce(plus, 0) ); } // todo: switch to estimating? -export function inputBytes(input: btc.TransactionInput) { +export function inputBytes(input: TransactionInputUpdate) { const tmpTx = new btc.Transaction({ allowUnknownInputs: true }); const originalSize = tmpTx.vsize; tmpTx.addInput(input); @@ -73,7 +88,7 @@ export function inputBytes(input: btc.TransactionInput) { // return OVERHEAD_INPUT + (input.finalScriptWitness ? input.finalScriptWitness.byteLength : OVERHEAD_INPUT_P2PKH); } -export function outputBytes(output: btc.TransactionOutput) { +export function outputBytes(output: TransactionOutput) { const tmpTx = new btc.Transaction({ allowUnknownOutputs: true }); const originalSize = tmpTx.vsize; tmpTx.addOutput(output); @@ -87,7 +102,7 @@ export function dustMinimum(inputVsize: number, feeRate: number) { const plus = (a: number, b: number) => a + b; -export type Spendable = { input: btc.TransactionInput; vsize?: number }; +export type Spendable = { input: TransactionInputUpdate; vsize?: number }; export type SpendableByScriptTypes = // prettier-ignore @@ -102,14 +117,14 @@ interface UtxoToSpendableOpts { tx: btc.Transaction; txHex: string; utxo: UtxoWithTx; - output: ReturnType; + output: TransactionOutput; spendScript: ReturnType; } export function wpkhUtxoToSpendable(opts: UtxoToSpendableOpts) { if (!opts.output?.script) throw new Error('No script found on utxo tx'); - const spendableInput: btc.TransactionInput = { + const spendableInput: TransactionInputUpdate = { txid: hexToBytes(opts.utxo.txid), index: opts.utxo.vout, ...opts.output, @@ -155,7 +170,7 @@ export function shUtxoToSpendable( // wrapped witness script if (i < 3) { - const input: btc.TransactionInput = { + const input: TransactionInput = { txid: hexToBytes(opts.utxo.txid), index: opts.utxo.vout, witnessUtxo: { @@ -173,7 +188,7 @@ export function shUtxoToSpendable( index: opts.utxo.vout, nonWitnessUtxo: opts.txHex, redeemScript: p2shRet.redeemScript, - } as unknown as btc.TransactionInput; // todo: something wrong with types here? + } as TransactionInputUpdate; // todo: something wrong with types here? new btc.Transaction().addInput(input); return { input, vsize: p2shRet.script?.byteLength ?? 0 }; } catch (e) {} @@ -184,31 +199,31 @@ export function shUtxoToSpendable( export async function utxoSelect({ feeRate, utxos, - utxoToSpendable, + utxoToSpendables, outputs, }: { feeRate: number; utxos: UtxoWithTx[]; - utxoToSpendable: Partial; - outputs: btc.TransactionOutput[]; + utxoToSpendables: Partial; + outputs: TransactionOutput[]; }): Promise<{ - inputs: btc.TransactionInput[]; + inputs: TransactionInputUpdate[]; totalSats: bigint; changeSats: bigint; }> { const outputsValue = outputs.reduce( - (acc: bigint, o: btc.TransactionOutput) => acc + (o.amount ?? 0n), + (acc: bigint, o: TransactionOutput) => acc + (o.amount ?? 0n), 0n ); - const inputs: btc.TransactionInput[] = []; // collect inputs + const inputs: TransactionInputUpdate[] = []; // collect inputs let inputRunning = 0n; let vsizeRunning = txBytes([], outputs); for (const utxo of utxos) { try { - const { input, vsize } = await switchUtxoToSpendable(utxo, utxoToSpendable); + const { input, vsize } = await switchUtxoToSpendable(utxo, utxoToSpendables); const inputVsize = vsize ?? inputBytes(input); const utxoFee = feeRate * inputVsize; @@ -265,13 +280,10 @@ export async function switchUtxoToSpendable( } } -const x: btc.TransactionInput | btc.TransactionOutput = {} as any; -if ('index' in x) x; - // todo: after DR? // async function tryAllToSpendable( // utxo: BlockstreamUtxo | BlockstreamUtxoWithTxHex -// ): Promise { +// ): Promise { // const utxoWithTx: BlockstreamUtxoWithTxHex = // 'hex' in utxo ? utxo : { ...utxo, hex: await fetchTxHex(utxo.txid) }; @@ -296,6 +308,7 @@ if ('index' in x) x; type LazyLoadable = T & Record; +/** @internal */ export function wrapLazyProxy< T extends { [key: string]: any; diff --git a/packages/sbtc/tests/api.test.ts b/packages/sbtc/tests/api.test.ts index 6d7ac1a1d..c1d05de7c 100644 --- a/packages/sbtc/tests/api.test.ts +++ b/packages/sbtc/tests/api.test.ts @@ -1,26 +1,13 @@ -import { base58 } from '@scure/base'; -import { bytesToHex } from '@stacks/common'; import { describe, expect, test } from 'vitest'; -import { - DevEnvHelper, - SBTC_FT_ADDRESS_DEVENV, - SBTC_PEG_ADDRESS_DEVENV, - TestnetHelper, - WALLET_00, - sleep, -} from '../src'; +import { SbtcApiClientDevenv, SbtcApiClientTestnet } from '../src'; +import { WALLET_00, getBitcoinAccount, getStacksAccount } from './helpers/wallet'; -const dev = new DevEnvHelper(); -const tnet = new TestnetHelper(); +const dev = new SbtcApiClientDevenv(); +const tnet = new SbtcApiClientTestnet(); describe('testnet:', () => { - test('peg address matches', async () => { - const address = await tnet.getSbtcPegAddress(); - expect(address).toBe('tb1pt0h3xp6pj3hpgfnyrx2s942j7uks2xtuwj9ths2hsfwr807pm4asas6uva'); // taken from: https://bridge.sbtc.tech/bridge-api/testnet/v1/sbtc/init-ui - }); - test('fetch utxos', async () => { - const wallet = await tnet.getBitcoinAccount(WALLET_00); + const wallet = await getBitcoinAccount(WALLET_00); const unspent = await tnet.fetchUtxos(wallet.wpkh.address); expect(unspent.length).toBeGreaterThan(0); @@ -28,53 +15,26 @@ describe('testnet:', () => { }); describe('devenv:', () => { - test('peg address matches', async () => { - const address = await dev.getSbtcPegAddress(); - expect(address).toBe((await dev.getBitcoinAccount(WALLET_00)).tr.address); - expect(address).toBe(SBTC_PEG_ADDRESS_DEVENV); - }); - - test('mint bitcoin', async () => { - const wallet = await dev.getBitcoinAccount(WALLET_00); - - const balance = await dev.getBalance(wallet.wpkh.address); - console.log('balance', balance); - - await dev.btcRpc.generatetoaddress({ - nblocks: 101, // more than 100 blocks, because coinbase txs mature after 100 blocks - address: wallet.wpkh.address, - }); - await sleep(500); - - const balanceAfter = await dev.getBalance(wallet.wpkh.address); - console.log('balanceAfter', balanceAfter); - expect(balanceAfter).toBeGreaterThan(balance); - }); + const btcAddressDevenv = 'bcrt1qgl8eevaz70u7ny69l052w8ku36sgeddjjcawwq'; test('fetch utxos', async () => { - const wallet = await dev.getBitcoinAccount(WALLET_00); - - const unspent = await dev.fetchUtxos(wallet.wpkh.address); - + const unspent = await dev.fetchUtxos(btcAddressDevenv); expect(unspent.length).toBeGreaterThan(0); }); test('get btc balance', async () => { - const wallet = await dev.getBitcoinAccount(WALLET_00); + const wallet = await getBitcoinAccount(WALLET_00); - const balance = await dev.getBalance(wallet.wpkh.address); + const balance = await dev.fetchBalance(wallet.wpkh.address); console.log('balance', balance); expect(balance).toBeGreaterThan(0); }); test('get sbtc balance', async () => { - const wallet = await dev.getStacksAccount(WALLET_00); + const wallet = await getStacksAccount(WALLET_00); - const balance = await dev.getSbtcBalance({ - holderAddress: wallet.address, - sbtcContract: SBTC_FT_ADDRESS_DEVENV, - }); + const balance = await dev.fetchSbtcBalance(wallet.address); console.log('balance', balance); expect(balance).toBeGreaterThan(0); @@ -83,17 +43,7 @@ describe('devenv:', () => { describe('both:', () => { test.each([dev, tnet])('fee estimate', async helper => { - const feeRate = await helper.estimateFeeRate('high'); + const feeRate = await helper.fetchFeeRate('high'); expect(feeRate).toBeGreaterThan(0); }); }); - -test('bitcoin core rpc returns regtest privatekey wif in testnet format', async () => { - const address = await dev.btcRpc.getnewaddress(); - expect(address.slice(0, 4)).toBe('bcrt'); // is regtest address - - // 80 = mainnet - // ef = testnet - const wif = await dev.btcRpc.dumpprivkey({ address }); - expect(bytesToHex(base58.decode(wif).slice(0, 1))).toBe('ef'); // regtest wif uses testnet prefix -}); diff --git a/packages/sbtc/tests/deposit.test.ts b/packages/sbtc/tests/deposit.test.ts index 379f54025..d3802df83 100644 --- a/packages/sbtc/tests/deposit.test.ts +++ b/packages/sbtc/tests/deposit.test.ts @@ -1,61 +1,182 @@ import * as btc from '@scure/btc-signer'; -import { hexToBytes } from '@stacks/common'; -import { expect, test } from 'vitest'; -import { DevEnvHelper, WALLET_00, sbtcDepositHelper } from '../src'; +import { bytesToHex, hexToBytes } from '@stacks/common'; +import { enableFetchLogging } from '@stacks/internal'; +import { beforeAll, beforeEach, expect, test } from 'vitest'; +import createFetchMock from 'vitest-fetch-mock'; +import { vi } from 'vitest'; +import { MempoolApiUtxo, SbtcApiClientDevenv, sbtcDepositHelper, wrapLazyProxy } from '../src'; +import { WALLET_00, getBitcoinAccount, getStacksAccount } from './helpers/wallet'; +import RpcClient from '@btc-helpers/rpc'; -const dev = new DevEnvHelper(); +const dev = new SbtcApiClientDevenv(); + +const contractAddress = 'SN3R84XZYA63QS28932XQF3G1J8R9PC3W76P9CSQS'; + +beforeAll(() => { + // createFetchMock(vi).enableMocks(); // sets globalThis.fetch and globalThis.fetchMock to mocked version +}); + +beforeEach(() => { + // fetchMock.resetMocks(); + enableFetchLogging(); +}); test('btc tx, deposit to sbtc, broadcast', async () => { - const bitcoinAccount = await dev.getBitcoinAccount(WALLET_00); - const stacksAccount = await dev.getStacksAccount(WALLET_00); + const btcAddressDevenv = 'bcrt1qgl8eevaz70u7ny69l052w8ku36sgeddjjcawwq'; + const stacksAccount = await getStacksAccount(WALLET_00); - // Tx building - const txStacksjs = await sbtcDepositHelper({ - pegAddress: await dev.getSbtcPegAddress(), + // const res = await fetch('http://localhost:3010/api/bitcoind', { + // method: 'POST', + // headers: { + // 'Content-Type': 'application/json', + // }, + // body: `{"rpcMethod":"scantxoutset","params":["start",[{"desc":"addr(bcrt1qgl8eevaz70u7ny69l052w8ku36sgeddjjcawwq)","range":10000}]],"bitcoinDUrl":"http://bitcoin:18443/"}`, + // }); + // const json = await res.text(); + // console.log(json); + + const c = new SbtcApiClientDevenv(); + + const utxosRequest = JSON.parse( + `{"result":{"success":true,"txouts":855,"height":442,"bestblock":"2d678b58df8ece4d48a757df291b76d199377c14ffac879e34edecf9aedbcd46","unspents":[{"txid":"1d090cb3b1e3196b46f49375333f00e0371888b5d86e8726e91f09ccf3810256","vout":1,"scriptPubKey":"001447cf9cb3a2f3f9e99345fbe8a71edc8ea08cb5b2","desc":"addr(bcrt1qgl8eevaz70u7ny69l052w8ku36sgeddjjcawwq)#sf4xyvk2","amount":0.9682,"coinbase":false,"height":423}],"total_amount":0.9682}}` + ); + const utxosPre = utxosRequest.result.unspents as { + txid: string; + vout: number; + amount: number; + height: number; + scriptPubKey: string; + }[]; + const utxos = utxosPre + .map(u => ({ + txid: u.txid, + vout: u.vout, + value: Math.round(u.amount * 1e8), + })) + .map(u => wrapLazyProxy(u, 'tx', () => c.fetchTxHex(u.txid))); + + console.log(utxos); + + // Tx building + const { transaction: tx } = await sbtcDepositHelper({ stacksAddress: stacksAccount.address, - amountSats: 1_000, + amountSats: 5_000_000, + + signersPublicKey: await dev.fetchSignersPublicKey(contractAddress), - feeRate: await dev.estimateFeeRate('low'), - utxos: await dev.fetchUtxos(bitcoinAccount.wpkh.address), + feeRate: await dev.fetchFeeRate('low'), + utxos, - bitcoinChangeAddress: bitcoinAccount.wpkh.address, + bitcoinChangeAddress: btcAddressDevenv, }); + console.log(tx); + + // todo: once leather works + // // Instead we could PSBT and sign via extension wallet + // tx.sign(bitcoinAccount.privateKey); + // tx.finalize(); + + // const txid = await dev.broadcastTx(tx); + // console.log('txid', txid); +}); - // Instead we could PSBT and sign via extension wallet - txStacksjs.sign(bitcoinAccount.privateKey); - txStacksjs.finalize(); +test('sbtc info', async () => { + const address = await dev.fetchSignersAddress(); + console.log(address); - const txid = await dev.broadcastTx(txStacksjs); - console.log('txid', txid); + const pub = await dev.fetchSignersPublicKey(); + console.log(pub); + + const stacksAccount = await getStacksAccount(WALLET_00); + console.log(stacksAccount.address); }); +// generated with the bridge +// btc tx 0200000001e450fb7b009a6e239099c2fc83ce887097b4aa2f60e9dd51f6f70f566acfe7040000000000ffffffff02c0c62d00000000002251209954c9dbd02d550c595d973bfe7aa717ce7749207b69c0e25dcf729f7866e0f6c0e1c6050000000016001447cf9cb3a2f3f9e99345fbe8a71edc8ea08cb5b200000000 + test('btc tx, deposit to sbtc, tx compare', async () => { - const bitcoinAccount = await dev.getBitcoinAccount(WALLET_00, 1); - const stacksAccount = await dev.getStacksAccount(WALLET_00, 1); + // Tx building + + // const res = await fetch('http://localhost:3010/api/bitcoind', { + // method: 'POST', + // headers: { + // 'Content-Type': 'application/json', + // }, + // body: `{"rpcMethod":"scantxoutset","params":["start",[{"desc":"addr(bcrt1qgl8eevaz70u7ny69l052w8ku36sgeddjjcawwq)","range":10000}]],"bitcoinDUrl":"http://bitcoin:18443/"}`, + // }); + // const json = await res.text(); + // console.log(json); + + const utxosRequest = JSON.parse( + `{"result":{"success":true,"txouts":855,"height":442,"bestblock":"2d678b58df8ece4d48a757df291b76d199377c14ffac879e34edecf9aedbcd46","unspents":[{"txid":"1d090cb3b1e3196b46f49375333f00e0371888b5d86e8726e91f09ccf3810256","vout":1,"scriptPubKey":"001447cf9cb3a2f3f9e99345fbe8a71edc8ea08cb5b2","desc":"addr(bcrt1qgl8eevaz70u7ny69l052w8ku36sgeddjjcawwq)#sf4xyvk2","amount":0.9682,"coinbase":false,"height":423,"tx":"020000000195d850c68941c18cd57218d828e74c1b5aa198e8c63ce5115f417ab08cfa0c990100000000ffffffff02204e00000000000022512089d656f598e0b6923d086daccd110c2a4f46596484460dcdf6ed2c87930cf6b0205bc5050000000016001447cf9cb3a2f3f9e99345fbe8a71edc8ea08cb5b200000000"}],"total_amount":0.9682}}` + ); + const utxosRaw = utxosRequest.result.unspents as { + txid: string; + vout: number; + amount: number; + height: number; + scriptPubKey: string; + tx: string; + }[]; + + const utxos = utxosRaw.map(u => ({ + txid: u.txid, + vout: u.vout, + value: Math.round(u.amount * 1e8), + tx: u.tx, + })); + + console.log(utxos); // Tx building - const txStacksjs = await sbtcDepositHelper({ - pegAddress: await dev.getSbtcPegAddress(), + const { + transaction: tx, + depositScript, + reclaimScript, + } = await sbtcDepositHelper({ + stacksAddress: 'STGSJA8EMYDBAJDX6Z4ED8CWW071B6NB97SRAM1E', + amountSats: 20042, - stacksAddress: stacksAccount.address, - amountSats: 1_000, + maxFee: 20000, + reclaimLockTime: 50, - feeRate: await dev.estimateFeeRate('low'), - utxos: await dev.fetchUtxos(bitcoinAccount.wpkh.address), + signersPublicKey: '14c515722f2b61f9bc8bfbcd48422988533007602c74f3145616817f27302237', - bitcoinChangeAddress: bitcoinAccount.wpkh.address, - }); + feeRate: 1, + utxos, - // generated with ./utils/deposit.sh (set to amount=1000) - const hexCli = - '0100000000010101717cad71b870970c55e7fa9fdc5ddf09fa928e33bd6b0b10d32d0e3d1c80e10000000000feffffff0300000000000000001b6a1969643c051ab3a14500ad8ac4e6d823ab20fd2c6d1369aa5bb7e8030000000000002251205e682db7c014ab76f2b4fdcbbdb76f9b8111468174cdb159df6e88fe9d078ce6db77814a0000000016001488bfaab3ad5f2f164e1cbb50cd07658ccea264e00247304402205a43e26a8f372bc97c7c44b045effd23eaaf2a747c0a237082f0505e752dd32f02201610945844e438b4a27c08149d04be3dce544d9318c280f7405ae0e56a2e24e0012103969ff3e2bf7f2f73dc903cd11442032c8c7811d57d96ce327ee89c9edea63fa8d5010000'; - const txCli = btc.Transaction.fromRaw(hexToBytes(hexCli), { - allowUnknownInputs: true, - allowUnknownOutputs: true, + bitcoinChangeAddress: 'bcrt1qgl8eevaz70u7ny69l052w8ku36sgeddjjcawwq', }); + console.log(tx); + + // Test vector created with CLI in sbtc repo: + // cargo run -p signer --bin demo-cli deposit --amount 42 --max-fee 20000 --lock-time 50 --stacks-addr STGSJA8EMYDBAJDX6Z4ED8CWW071B6NB97SRAM1E --signer-key 14c515722f2b61f9bc8bfbcd48422988533007602c74f3145616817f27302237` + + // deposit script: "1e0000000000004e20051a2199290ea79ab549bd37c8e6a19ce00e159aab49752014c515722f2b61f9bc8bfbcd48422988533007602c74f3145616817f27302237ac" + // reclaim script: "0132b2" + // Signed transaction: "02000000000101f73f625a29bc8f2dccbbc93ea3038546595de71217d9e31dd8cdd9e39f00970d000000000000000000024a4e0000000000002251208a8ec821941873b50143143f2cac95b7355979bbf75ab948f5ee2742bf1523ba1daa029500000000160014ec69329c9831f38b0a50746e53b31ad9a1b690b4024730440220119e0ec42bbf2bc7ece892929210b534de6331b27b7c94b6d77802b35fb974f7022025d077df8561ac0d949df1b6f7ee1af2075108dacc1659fa13aefb1f6ffe6dcf012102ddb1eddf71e71e6c757ecbdf6fa91aff4215f76cd2aff6a08d248ffac724269300000000" + // Transaction sent: calculated txid 956867ecb25f4623617c0cdb58801faf8a9e18b9f16afae069544eed1e552867, actual txid 956867ecb25f4623617c0cdb58801faf8a9e18b9f16afae069544eed1e552867 + // Deposit request created: Deposit { amount: 0, bitcoin_tx_output_index: 0, bitcoin_txid: "956867ecb25f4623617c0cdb58801faf8a9e18b9f16afae069544eed1e552867", deposit_script: "1e0000000000004e20051a2199290ea79ab549bd37c8e6a19ce00e159aab49752014c515722f2b61f9bc8bfbcd48422988533007602c74f3145616817f27302237ac", fulfillment: None, last_update_block_hash: "c97e12e335b4debc49b7f6fb14592dd151a0edc4f1d3d3745e80ae72e04edb22", last_update_height: 602, parameters: DepositParameters { lock_time: 50, max_fee: 20000 }, recipient: "051a2199290ea79ab549bd37c8e6a19ce00e159aab49", reclaim_script: "0132b2", status: Pending, status_message: "Just received deposit" } + + const depositCli = + '1e0000000000004e20051a2199290ea79ab549bd37c8e6a19ce00e159aab49752014c515722f2b61f9bc8bfbcd48422988533007602c74f3145616817f27302237ac'; + const reclaimCli = '0132b2'; + + expect(depositScript).toEqual(depositCli); + expect(reclaimScript).toEqual(reclaimCli); + + const txHexCli = + '02000000000101f73f625a29bc8f2dccbbc93ea3038546595de71217d9e31dd8cdd9e39f00970d000000000000000000024a4e0000000000002251208a8ec821941873b50143143f2cac95b7355979bbf75ab948f5ee2742bf1523ba1daa029500000000160014ec69329c9831f38b0a50746e53b31ad9a1b690b4024730440220119e0ec42bbf2bc7ece892929210b534de6331b27b7c94b6d77802b35fb974f7022025d077df8561ac0d949df1b6f7ee1af2075108dacc1659fa13aefb1f6ffe6dcf012102ddb1eddf71e71e6c757ecbdf6fa91aff4215f76cd2aff6a08d248ffac724269300000000'; + const txCli = btc.Transaction.fromRaw(hexToBytes(txHexCli)); + + // deposit output + expect(tx.getOutput(0).amount).toEqual(20_042n); + console.log('tx (0)', tx.getOutput(0)); + console.log('txCli (0)', txCli.getOutput(0)); + expect(tx.getOutput(0)).toEqual(txCli.getOutput(0)); - expect(txStacksjs.getOutput(0)).toEqual(txCli.getOutput(0)); - expect(txStacksjs.getOutput(1)).toEqual(txCli.getOutput(1)); - expect(txStacksjs.outputsLength).toEqual(txCli.outputsLength); + // change output + expect(tx.getOutput(1).amount).toBeGreaterThan(1_000_000); + // expect(tx.getOutput(1)).toEqual(txCli.getOutput(1)); // we don't care about change }); diff --git a/packages/sbtc/tests/helpers/wallet.ts b/packages/sbtc/tests/helpers/wallet.ts index 262af93d3..89ed8b2ad 100644 --- a/packages/sbtc/tests/helpers/wallet.ts +++ b/packages/sbtc/tests/helpers/wallet.ts @@ -1,4 +1,11 @@ import { ProjectivePoint } from '@noble/secp256k1'; +import { HDKey } from '@scure/bip32'; +import * as bip39 from '@scure/bip39'; +import * as btc from '@scure/btc-signer'; +import { REGTEST } from '../../src'; +import { bytesToHex } from '@stacks/common'; +import { compressPrivateKey, privateKeyToAddress } from '@stacks/transactions'; +import { STACKS_TESTNET } from '../../../network/src'; export function schnorrPublicKey(privateKey: Uint8Array) { return ProjectivePoint.fromPrivateKey(privateKey).toRawBytes(true).slice(1); @@ -7,3 +14,50 @@ export function schnorrPublicKey(privateKey: Uint8Array) { export function sleep(ms: number) { return new Promise(resolve => setTimeout(resolve, ms)); } + +export const WALLET_00 = + 'twice kind fence tip hidden tilt action fragile skin nothing glory cousin green tomorrow spring wrist shed math olympic multiply hip blue scout claw'; +export const WALLET_01 = + 'sell invite acquire kitten bamboo drastic jelly vivid peace spawn twice guilt pave pen trash pretty park cube fragile unaware remain midnight betray rebuild'; +export const WALLET_02 = + 'hold excess usual excess ring elephant install account glad dry fragile donkey gaze humble truck breeze nation gasp vacuum limb head keep delay hospital'; + +export async function getBitcoinAccount(mnemonic: string, idx: number = 0) { + const network = REGTEST; + + const seed = await bip39.mnemonicToSeed(mnemonic); + const hdkey = HDKey.fromMasterSeed(seed, network.bip32); + + const path = `m/84'/${network.bip84.coin}'/${idx}'/0/0`; + const privateKey = hdkey.derive(path).privateKey!; + const publicKey = hdkey.derive(path).publicKey!; + + const trPath = `m/86'/${network.bip84.coin}'/${idx}'/0/0`; + const trPrivateKey = hdkey.derive(trPath).privateKey!; + const trPublicKey = hdkey.derive(trPath).publicKey!; // not sure if this should be used, but this is what the CLI returns + + return { + privateKey, + publicKey, + wpkh: { address: btc.getAddress('wpkh', privateKey, network)! }, + tr: { + address: btc.getAddress('tr', trPrivateKey, network)!, + publicKey: trPublicKey, + }, + }; +} + +export async function getStacksAccount(mnemonic: string, idx: number = 0) { + const rootPrivateKey = await bip39.mnemonicToSeed(mnemonic); + const rootNode = HDKey.fromMasterSeed(rootPrivateKey); + + const childKey = rootNode.derive(`m/44'/5757'/0'/0`).deriveChild(idx); + const stxPrivateKey = compressPrivateKey(bytesToHex(childKey.privateKey!)); + + return { + /** Alias for `privateKey` @deprecated use `.privateKey` instead */ + stxPrivateKey, + privateKey: stxPrivateKey, + address: privateKeyToAddress(stxPrivateKey, STACKS_TESTNET), + }; +} diff --git a/packages/sbtc/tests/withdraw.test.ts b/packages/sbtc/tests/withdraw.test.ts index b5cb7caef..94bddd7ca 100644 --- a/packages/sbtc/tests/withdraw.test.ts +++ b/packages/sbtc/tests/withdraw.test.ts @@ -1,3 +1,6 @@ +import { test } from 'vitest'; +test.skip('', () => {}); + // import * as btc from '@scure/btc-signer'; // import { bytesToHex, hexToBytes } from '@stacks/common'; // import { hashMessage } from '@stacks/encryption'; From 421b79e931782b650ee5a21964b194d8d6e95ed6 Mon Sep 17 00:00:00 2001 From: janniks Date: Mon, 2 Dec 2024 21:41:55 -0500 Subject: [PATCH 35/49] feat: update to latest testnet sbtc --- packages/internal/src/apiMockingHelpers.ts | 5 +- packages/internal/src/index.ts | 1 + packages/internal/src/waits.ts | 18 ++ packages/sbtc/src/api.ts | 60 +++++-- packages/sbtc/src/transactions/deposit.ts | 51 +----- packages/sbtc/tests/api.test.ts | 16 +- packages/sbtc/tests/deposit.test.ts | 183 ++++++++++++--------- vitest.config.ts | 1 + 8 files changed, 196 insertions(+), 139 deletions(-) create mode 100644 packages/internal/src/waits.ts diff --git a/packages/internal/src/apiMockingHelpers.ts b/packages/internal/src/apiMockingHelpers.ts index c26314936..17cfb4040 100644 --- a/packages/internal/src/apiMockingHelpers.ts +++ b/packages/internal/src/apiMockingHelpers.ts @@ -26,7 +26,8 @@ const MATCHER = { export function setApiMocks(responseMap: { [key: string]: any }, mockTxBroadcast = true) { // we want to be able to call setApiMocks and it do nothing if mocking is currently disabled // (maybe move this to inside the mockIf handler, for better enabling/disabling mocking during a run) - if (!isMocking()) return; + + // if (!isMocking()) return; todo: disabled for vitest compatibility if (mockTxBroadcast) responseMap = { @@ -57,7 +58,7 @@ function sleep(ms: number) { return new Promise(resolve => setTimeout(resolve, ms)); } -function isMocking(): boolean { +export function isMocking(): boolean { const result = fetchMock.isMocking(''); // be careful using .isMocking, it will consume .mockOnce's if (typeof result === 'boolean') return result; return result[0]; diff --git a/packages/internal/src/index.ts b/packages/internal/src/index.ts index dc33a200d..b7b08fceb 100644 --- a/packages/internal/src/index.ts +++ b/packages/internal/src/index.ts @@ -1 +1,2 @@ export * from './apiMockingHelpers'; +export * from './waits'; diff --git a/packages/internal/src/waits.ts b/packages/internal/src/waits.ts new file mode 100644 index 000000000..691c9cb7f --- /dev/null +++ b/packages/internal/src/waits.ts @@ -0,0 +1,18 @@ +export async function timeout(ms: number) { + return new Promise(resolve => setTimeout(resolve, ms)); +} + +export const sleep = timeout; + +export async function waitForFulfilled(fn: () => Promise, interval: number = 300) { + console.log(`waiting for fn fulfilled '${fn.name}'...`); + while (true) { + try { + const result = await fn(); + console.log(`fn fulfilled '${fn.name}'`); + return; + } catch (error) { + await timeout(interval); + } + } +} diff --git a/packages/sbtc/src/api.ts b/packages/sbtc/src/api.ts index 5edc3c23b..c6481f1fb 100644 --- a/packages/sbtc/src/api.ts +++ b/packages/sbtc/src/api.ts @@ -11,6 +11,7 @@ import { } from '@stacks/transactions'; import { REGTEST } from './constants'; import { wrapLazyProxy } from './utils'; +import { bytesToHex } from '@stacks/common'; /** todo */ // https://blockstream.info/api/address/1KFHE7w8BhaENAswwryaoccDb6qcT6DbYY/utxo @@ -47,7 +48,7 @@ export interface BaseClientConfig { sbtcContract: string; sbtcApiUrl: string; - btcMempoolApiUrl: string; + btcApiUrl: string; stxApiUrl: string; } @@ -56,7 +57,7 @@ export class SbtcApiClient { async fetchUtxos(address: string): Promise { return ( - fetch(`${this.config.btcMempoolApiUrl}/address/${address}/utxo`) + fetch(`${this.config.btcApiUrl}/address/${address}/utxo`) .then(res => res.json()) // .then((utxos: MempoolApiUtxo[]) => // utxos.sort((a, b) => a.status.block_height - b.status.block_height) @@ -68,11 +69,11 @@ export class SbtcApiClient { } async fetchTxHex(txid: string): Promise { - return fetch(`${this.config.btcMempoolApiUrl}/api/tx/${txid}/hex`).then(res => res.text()); + return fetch(`${this.config.btcApiUrl}/api/tx/${txid}/hex`).then(res => res.text()); } async fetchFeeRates(): Promise { - return fetch(`${this.config.btcMempoolApiUrl}/api/v1/fees/recommended`).then(res => res.json()); + return fetch(`${this.config.btcApiUrl}/api/v1/fees/recommended`).then(res => res.json()); } async fetchFeeRate(target: 'low' | 'medium' | 'high'): Promise { @@ -82,12 +83,45 @@ export class SbtcApiClient { } async broadcastTx(tx: btc.Transaction): Promise { - return await fetch(`${this.config.btcMempoolApiUrl}/tx`, { + return await fetch(`${this.config.btcApiUrl}/tx`, { method: 'POST', body: tx.hex, }).then(res => res.text()); } + async notifySbtc(tx: btc.Transaction) { + const depositScript = tx.getOutput(0).script; + const reclaimScript = tx.getOutput(1).script; + + if (!depositScript) throw new Error('Missing deposit script at index 0'); + if (!reclaimScript) throw new Error('Missing reclaim script at index 1'); + + return (await fetch(`${this.config.sbtcApiUrl}/deposit`, { + method: 'POST', + body: JSON.stringify({ + bitcoinTxid: tx.id, + bitcoinTxOutputIndex: 0, + depositScript: bytesToHex(depositScript), + reclaimScript: bytesToHex(reclaimScript), + }), + }).then(res => res.json())) as { + bitcoinTxid: string; + bitcoinTxOutputIndex: number; + recipient: string; + amount: number; + lastUpdateHeight: number; + lastUpdateBlockHash: string; + status: string; + statusMessage: string; + parameters: { + maxFee: number; + lockTime: number; + }; + reclaimScript: string; + depositScript: string; + }; + } + async fetchSignersPublicKey(contractAddress?: string): Promise { const res = (await fetchCallReadOnlyFunction({ contractAddress: contractAddress ?? this.config.sbtcContract, @@ -140,7 +174,7 @@ export class SbtcApiClient { /** Get BTC balance (in satoshis) */ async fetchBalance(address: string): Promise { // todo: check if better endpoints now exist - const addressInfo = await fetch(`${this.config.btcMempoolApiUrl}/address/${address}`).then(r => + const addressInfo = await fetch(`${this.config.btcApiUrl}/address/${address}`).then(r => r.json() ); @@ -160,15 +194,17 @@ export class SbtcApiClient { } } +/** todo */ export class SbtcApiClientTestnet extends SbtcApiClient { constructor(config?: Partial) { super( Object.assign( { - sbtcApiUrl: 'https://sbtc.tech', // todo: get real url - btcMempoolApiUrl: 'https://blockstream.info/testnet/api', // todo: mempool it - stxApiUrl: 'https://stacks-node-api.testnet.stacks.co', - sbtcContract: 'SN3R84XZYA63QS28932XQF3G1J8R9PC3W76P9CSQS', // todo: find final value + sbtcApiUrl: 'https://beta.sbtc-emily.com', // todo: get real url + btcApiUrl: 'https://TODO', // todo: replace with functioning regtest testnet deployment + stxApiUrl: 'https://api.testnet.hiro.so', + /** ⚠︎ Attention: This contract address might still change over the course of the sBTC contract on Testnet */ + sbtcContract: 'SNGWPN3XDAQE673MXYXF81016M50NHF5X5PWWM70', }, config ) @@ -181,8 +217,8 @@ export class SbtcApiClientDevenv extends SbtcApiClient { super( Object.assign( { - sbtcApiUrl: 'http://localhost:3031', // todo: get real url - btcMempoolApiUrl: 'http://localhost:8083', + sbtcApiUrl: 'http://localhost:3031', + btcApiUrl: 'http://localhost:3002', stxApiUrl: 'http://localhost:3999', sbtcContract: 'SN3R84XZYA63QS28932XQF3G1J8R9PC3W76P9CSQS', }, diff --git a/packages/sbtc/src/transactions/deposit.ts b/packages/sbtc/src/transactions/deposit.ts index 8b02090c1..001ca5b5b 100644 --- a/packages/sbtc/src/transactions/deposit.ts +++ b/packages/sbtc/src/transactions/deposit.ts @@ -14,20 +14,6 @@ import { const concat = P.utils.concatBytes; -// export function buildSBtcDepositBtcPayload({ -// network, -// address, -// }: { -// network: BitcoinNetwork; -// address: string; -// }): Uint8Array { -// const magicBytes = asciiToBytes(network.magicBytes); -// const opCodeBytes = hexToBytes(OpCode.PegIn); -// const addressBytes = stacksAddressBytes(address); - -// return concat(magicBytes, opCodeBytes, addressBytes); -// } - export function buildSbtcDepositScript(opts: { maxFee: number; stacksAddress: string; @@ -48,8 +34,7 @@ export function buildSbtcDepositScript(opts: { export function buildSbtcReclaimScript(opts: { lockTime: number }) { return btc.Script.encode([ btc.ScriptNum().encode(BigInt(opts.lockTime)), - 'CHECKSEQUENCEVERIFY', - // 'CHECKSEQUENCEVERIFY', // todo: remove; I'm assuming once is enough? // sbtc-bridge code does twice with additional optional data before + 'CHECKSEQUENCEVERIFY', // sbtc-bridge code does twice with additional optional data before ]); } @@ -63,7 +48,7 @@ export function buildSbtcDepositTr(opts: { const deposit = buildSbtcDepositScript(opts); const reclaim = buildSbtcReclaimScript(opts); - const NUMS_X_COORDINATE = new Uint8Array([ + const UNSPENDABLE_PUB = new Uint8Array([ 0x50, 0x92, 0x9b, 0x74, 0xc1, 0xa0, 0x49, 0x54, 0xb7, 0x8b, 0x4b, 0x60, 0x35, 0xe9, 0x7a, 0x5e, 0x07, 0x8a, 0x5a, 0x0f, 0x28, 0xec, 0x96, 0xd5, 0x47, 0xbf, 0xee, 0x9a, 0xce, 0x80, 0x3a, 0xc0, ]); @@ -73,10 +58,10 @@ export function buildSbtcDepositTr(opts: { reclaimScript: bytesToHex(reclaim), trOut: btc.p2tr( - NUMS_X_COORDINATE, + UNSPENDABLE_PUB, [{ script: deposit }, { script: reclaim }], opts.network, - true + true // allow custom scripts ), }; } @@ -114,29 +99,6 @@ export function buildSbtcDepositTx({ return { transaction: tx, ...tr }; } -// export function buildSbtcDepositTxOpReturn({ -// network = REGTEST, -// amountSats, -// stacksAddress, -// pegAddress = SBTC_PEG_ADDRESS_DEVENV, -// }: { -// network?: BitcoinNetwork; -// amountSats: number; -// stacksAddress: string; -// pegAddress?: string; -// }) { -// const data = buildSBtcDepositBtcPayload({ network, address: stacksAddress }); - -// const tx = new btc.Transaction({ -// allowUnknownInputs: true, -// allowUnknownOutputs: true, -// }); -// tx.addOutput({ script: btc.Script.encode(['RETURN', data]), amount: BigInt(0) }); -// tx.addOutputAddress(pegAddress, BigInt(amountSats), network); - -// return tx; -// } - export async function sbtcDepositHelper({ network = REGTEST, amountSats, @@ -186,7 +148,8 @@ export async function sbtcDepositHelper({ maxFee?: number; /** Optional reclaim lock time, defaults to 6_000 */ reclaimLockTime?: number; - /** Optional payment public key (currently only used for `utxoToSpendable.sh`) */ + + /** Optional payment public key (currently only used for the default `utxoToSpendable.sh` implementation) */ paymentPublicKey?: string; }) { if (paymentPublicKey) { @@ -198,7 +161,7 @@ export async function sbtcDepositHelper({ amountSats, stacksAddress, signersPublicKey, - maxFee: maxFee, + maxFee, reclaimLockTime, }); diff --git a/packages/sbtc/tests/api.test.ts b/packages/sbtc/tests/api.test.ts index c1d05de7c..0bda04166 100644 --- a/packages/sbtc/tests/api.test.ts +++ b/packages/sbtc/tests/api.test.ts @@ -1,6 +1,7 @@ import { describe, expect, test } from 'vitest'; -import { SbtcApiClientDevenv, SbtcApiClientTestnet } from '../src'; +import { REGTEST, SbtcApiClientDevenv, SbtcApiClientTestnet } from '../src'; import { WALLET_00, getBitcoinAccount, getStacksAccount } from './helpers/wallet'; +import * as btc from '@scure/btc-signer'; const dev = new SbtcApiClientDevenv(); const tnet = new SbtcApiClientTestnet(); @@ -17,6 +18,19 @@ describe('testnet:', () => { describe('devenv:', () => { const btcAddressDevenv = 'bcrt1qgl8eevaz70u7ny69l052w8ku36sgeddjjcawwq'; + test('fetch signers info', async () => { + const pub = await dev.fetchSignersPublicKey(); + console.log(pub); + + const address = await dev.fetchSignersAddress(); + console.log(address); + }); + + test('get signers address', () => { + const pub = 'ae0636a3ba8c98ca311fe8856f377f86abe76788716c8fccd065d59f85483e6d'; + console.log(btc.p2tr(pub, undefined, REGTEST).address!); + }); + test('fetch utxos', async () => { const unspent = await dev.fetchUtxos(btcAddressDevenv); expect(unspent.length).toBeGreaterThan(0); diff --git a/packages/sbtc/tests/deposit.test.ts b/packages/sbtc/tests/deposit.test.ts index d3802df83..55d1383f6 100644 --- a/packages/sbtc/tests/deposit.test.ts +++ b/packages/sbtc/tests/deposit.test.ts @@ -1,115 +1,143 @@ import * as btc from '@scure/btc-signer'; -import { bytesToHex, hexToBytes } from '@stacks/common'; +import { hexToBytes } from '@stacks/common'; import { enableFetchLogging } from '@stacks/internal'; -import { beforeAll, beforeEach, expect, test } from 'vitest'; +import { expect, test, vi } from 'vitest'; import createFetchMock from 'vitest-fetch-mock'; -import { vi } from 'vitest'; -import { MempoolApiUtxo, SbtcApiClientDevenv, sbtcDepositHelper, wrapLazyProxy } from '../src'; +import { SbtcApiClientDevenv, sbtcDepositHelper } from '../src'; import { WALLET_00, getBitcoinAccount, getStacksAccount } from './helpers/wallet'; -import RpcClient from '@btc-helpers/rpc'; -const dev = new SbtcApiClientDevenv(); +enableFetchLogging(); // enable if you want to record requests to network.txt file -const contractAddress = 'SN3R84XZYA63QS28932XQF3G1J8R9PC3W76P9CSQS'; - -beforeAll(() => { - // createFetchMock(vi).enableMocks(); // sets globalThis.fetch and globalThis.fetchMock to mocked version -}); - -beforeEach(() => { - // fetchMock.resetMocks(); - enableFetchLogging(); -}); +// set globalThis.fetch and globalThis.fetchMock to mocked version +createFetchMock(vi).enableMocks(); test('btc tx, deposit to sbtc, broadcast', async () => { - const btcAddressDevenv = 'bcrt1qgl8eevaz70u7ny69l052w8ku36sgeddjjcawwq'; + // TEST CASE + // Assumes a manually funded signers address and WALLET_00 wpkh address + + const bitcoinAccount = await getBitcoinAccount(WALLET_00); // wpkh bcrt1q3tj2fr9scwmcw3rq5m6jslva65f2rqjxfrjz47 (manually funded on devenv via bridge) const stacksAccount = await getStacksAccount(WALLET_00); - // const res = await fetch('http://localhost:3010/api/bitcoind', { - // method: 'POST', - // headers: { - // 'Content-Type': 'application/json', - // }, - // body: `{"rpcMethod":"scantxoutset","params":["start",[{"desc":"addr(bcrt1qgl8eevaz70u7ny69l052w8ku36sgeddjjcawwq)","range":10000}]],"bitcoinDUrl":"http://bitcoin:18443/"}`, - // }); - // const json = await res.text(); - // console.log(json); + // todo: switch to mempool proxy once it's live - const c = new SbtcApiClientDevenv(); + fetchMock.mockOnce( + `{"result":{"success":true,"txouts":342,"height":252,"bestblock":"71903ce6738b723dad54e3ad110b859e8c1bd6ba499d94b4b0b22a44b0c10b37","unspents":[{"txid":"51349ba2a37959a5d84826311a556cf5201aeae6ddeb94b8d254976d0d20c217","vout":0,"scriptPubKey":"00148ae4a48cb0c3b7874460a6f5287d9dd512a18246","desc":"addr(bcrt1q3tj2fr9scwmcw3rq5m6jslva65f2rqjxfrjz47)#gcletckr","amount":1,"coinbase":false,"height":241}],"total_amount":1}}` + ); - const utxosRequest = JSON.parse( - `{"result":{"success":true,"txouts":855,"height":442,"bestblock":"2d678b58df8ece4d48a757df291b76d199377c14ffac879e34edecf9aedbcd46","unspents":[{"txid":"1d090cb3b1e3196b46f49375333f00e0371888b5d86e8726e91f09ccf3810256","vout":1,"scriptPubKey":"001447cf9cb3a2f3f9e99345fbe8a71edc8ea08cb5b2","desc":"addr(bcrt1qgl8eevaz70u7ny69l052w8ku36sgeddjjcawwq)#sf4xyvk2","amount":0.9682,"coinbase":false,"height":423}],"total_amount":0.9682}}` + const resScantxoutset = await fetch('http://localhost:3010/api/bitcoind', { + method: 'POST', + headers: { 'Content-Type': 'application/json' }, + body: `{"rpcMethod":"scantxoutset","params":["start",[{"desc":"addr(${bitcoinAccount.wpkh.address})","range":10000}]],"bitcoinDUrl":"http://bitcoin:18443/"}`, + }); + const jsonUtxo = await resScantxoutset.json(); + + fetchMock.mockOnce( + `{"result":"020000000150a4f0768a8ec85e76c8c049dd1839b2a6c8f35d79a5f0e0c1b23ed398cf8240000000006b4830450221008f19e4bc403136bad26e757647ccb45d8d0fc8d572da0adecd92194319be6e39022018830d39aabfbb76c037d450609466ae01d2e9a98167866d26379ce5cbf41a340121035379aa40c02890d253cfa577964116eb5295570ae9f7287cbae5f2585f5b2c7cffffffff0200e1f505000000001600148ae4a48cb0c3b7874460a6f5287d9dd512a18246e0c20f24010000001976a9141dc27eba0247f8cc9575e7d45e50a0bc7e72427d88ac00000000"}` ); - const utxosPre = utxosRequest.result.unspents as { + + const txHexResponse = await fetch('http://localhost:3010/api/bitcoind', { + method: 'POST', + headers: { 'Content-Type': 'application/json' }, + body: JSON.stringify({ + rpcMethod: 'getrawtransaction', + params: [jsonUtxo.result.unspents[0].txid], + bitcoinDUrl: 'http://bitcoin:18443/', + }), + }); + const jsonTx = await txHexResponse.json(); + + // single utxo + const unspents = [{ ...jsonUtxo.result.unspents[0], tx: jsonTx.result }] as { txid: string; vout: number; amount: number; height: number; scriptPubKey: string; + tx: string; }[]; - const utxos = utxosPre - .map(u => ({ - txid: u.txid, - vout: u.vout, - value: Math.round(u.amount * 1e8), - })) - .map(u => wrapLazyProxy(u, 'tx', () => c.fetchTxHex(u.txid))); + // ensure correct object format + const utxos = unspents.map(u => ({ + txid: u.txid, + vout: u.vout, + value: Math.floor(u.amount * 1e8), + tx: u.tx, + })); + + const dev = new SbtcApiClientDevenv(); - console.log(utxos); + fetchMock.mockResponse( + `{"okay":true,"result":"0x020000002103b6ad657d5428873633f6c3c948b4102bd697c1c8449425c1be1ff71992f98b74"}` + ); + + const pub = await dev.fetchSignersPublicKey(); + expect(pub).toBe('b6ad657d5428873633f6c3c948b4102bd697c1c8449425c1be1ff71992f98b74'); + + const signerAddress = await dev.fetchSignersAddress(); + expect(signerAddress).toBe('bcrt1paeulen354qzsstck3es7ur4c27ls5kyq8myvts7zmkyp4m6972kqwanet5'); // Tx building - const { transaction: tx } = await sbtcDepositHelper({ + const { + transaction: tx, + depositScript, + reclaimScript, + } = await sbtcDepositHelper({ stacksAddress: stacksAccount.address, amountSats: 5_000_000, - signersPublicKey: await dev.fetchSignersPublicKey(contractAddress), + signersPublicKey: pub, - feeRate: await dev.fetchFeeRate('low'), + feeRate: 1, utxos, - bitcoinChangeAddress: btcAddressDevenv, + bitcoinChangeAddress: bitcoinAccount.wpkh.address, }); - console.log(tx); - // todo: once leather works - // // Instead we could PSBT and sign via extension wallet - // tx.sign(bitcoinAccount.privateKey); - // tx.finalize(); + tx.sign(bitcoinAccount.privateKey); + tx.finalize(); - // const txid = await dev.broadcastTx(tx); - // console.log('txid', txid); -}); + fetchMock.mockOnce( + `{"result":[{"txid":"3cc72977efc12ceeddaf5589e53cb67525e798e0c67018eeffdc1c583e9c6005","wtxid":"0f8ce4916f6550f8af6de05bf2e8066a090694ff65cf5ba4f3a574c457a797b8","allowed":true,"vsize":153,"fees":{"base":0.00000189,"effective-feerate":0.00001235,"effective-includes":["0f8ce4916f6550f8af6de05bf2e8066a090694ff65cf5ba4f3a574c457a797b8"]}}]}` + ); -test('sbtc info', async () => { - const address = await dev.fetchSignersAddress(); - console.log(address); + const resTestmempoolaccept = await fetch('http://localhost:3010/api/bitcoind', { + body: `{"rpcMethod":"testmempoolaccept","params":[["${tx.hex}"]],"bitcoinDUrl":"http://bitcoin:18443/"}`, + method: 'POST', + }); + const jsonTestmempoolaccept = await resTestmempoolaccept.json(); + expect(jsonTestmempoolaccept.result[0].txid).toBe(tx.id); - const pub = await dev.fetchSignersPublicKey(); - console.log(pub); + fetchMock.mockOnce( + `{"result":"3cc72977efc12ceeddaf5589e53cb67525e798e0c67018eeffdc1c583e9c6005"}` + ); - const stacksAccount = await getStacksAccount(WALLET_00); - console.log(stacksAccount.address); -}); + const resBroadcast = await fetch('http://localhost:3010/api/bitcoind', { + body: `{"rpcMethod":"sendrawtransaction","params":["${tx.hex}"],"bitcoinDUrl":"http://bitcoin:18443/"}`, + method: 'POST', + }); + const jsonBroadcast = (await resBroadcast.json()) as { result: string }; -// generated with the bridge -// btc tx 0200000001e450fb7b009a6e239099c2fc83ce887097b4aa2f60e9dd51f6f70f566acfe7040000000000ffffffff02c0c62d00000000002251209954c9dbd02d550c595d973bfe7aa717ce7749207b69c0e25dcf729f7866e0f6c0e1c6050000000016001447cf9cb3a2f3f9e99345fbe8a71edc8ea08cb5b200000000 + fetchMock.mockOnce( + `{"bitcoinTxid":"3cc72977efc12ceeddaf5589e53cb67525e798e0c67018eeffdc1c583e9c6005","bitcoinTxOutputIndex":0,"recipient":"051a6d78de7b0625dfbfc16c3a8a5735f6dc3dc3f2ce","amount":0,"lastUpdateHeight":137,"lastUpdateBlockHash":"aa92e5d8af05a266e98ac9ed8bc1979029adaff556b8ca33ca6b216458a3a22c","status":"pending","statusMessage":"Just received deposit","parameters":{"maxFee":80000,"lockTime":6000},"reclaimScript":"027017b2","depositScript":"1e0000000000013880051a6d78de7b0625dfbfc16c3a8a5735f6dc3dc3f2ce7520b6ad657d5428873633f6c3c948b4102bd697c1c8449425c1be1ff71992f98b74ac"}` + ); -test('btc tx, deposit to sbtc, tx compare', async () => { - // Tx building + const resEmilyDeposit = await fetch('http://localhost:3010/api/emilyDeposit', { + body: `{"bitcoinTxid":"${jsonBroadcast.result}","bitcoinTxOutputIndex":0,"reclaimScript":"${reclaimScript}","depositScript":"${depositScript}","url":"http://emily-server:3031"}`, + method: 'POST', + }); + const jsonEmilyDeposit = await resEmilyDeposit.json(); + expect(jsonEmilyDeposit.status).toBe('pending'); + expect(jsonEmilyDeposit.depositScript).toBe(depositScript); + expect(jsonEmilyDeposit.reclaimScript).toBe(reclaimScript); +}); - // const res = await fetch('http://localhost:3010/api/bitcoind', { - // method: 'POST', - // headers: { - // 'Content-Type': 'application/json', - // }, - // body: `{"rpcMethod":"scantxoutset","params":["start",[{"desc":"addr(bcrt1qgl8eevaz70u7ny69l052w8ku36sgeddjjcawwq)","range":10000}]],"bitcoinDUrl":"http://bitcoin:18443/"}`, - // }); - // const json = await res.text(); - // console.log(json); +test('btc tx, deposit to sbtc, tx compare to cli', async () => { + // TEST CASE + // Compares a JS generated transactions outputs to a test vector created with the CLI + // unspents const utxosRequest = JSON.parse( - `{"result":{"success":true,"txouts":855,"height":442,"bestblock":"2d678b58df8ece4d48a757df291b76d199377c14ffac879e34edecf9aedbcd46","unspents":[{"txid":"1d090cb3b1e3196b46f49375333f00e0371888b5d86e8726e91f09ccf3810256","vout":1,"scriptPubKey":"001447cf9cb3a2f3f9e99345fbe8a71edc8ea08cb5b2","desc":"addr(bcrt1qgl8eevaz70u7ny69l052w8ku36sgeddjjcawwq)#sf4xyvk2","amount":0.9682,"coinbase":false,"height":423,"tx":"020000000195d850c68941c18cd57218d828e74c1b5aa198e8c63ce5115f417ab08cfa0c990100000000ffffffff02204e00000000000022512089d656f598e0b6923d086daccd110c2a4f46596484460dcdf6ed2c87930cf6b0205bc5050000000016001447cf9cb3a2f3f9e99345fbe8a71edc8ea08cb5b200000000"}],"total_amount":0.9682}}` + `{"result":{"success":true,"txouts":517,"height":315,"bestblock":"1baa0a69cc82b2c93db9c44c27e9ec2c70326819fe0249a5524f9f505aaed6c8","unspents":[{"txid":"048661a0335d2d2f031817b1794e560a2aed11e4fc291ff0859f64d363f23676","vout":1,"scriptPubKey":"001447cf9cb3a2f3f9e99345fbe8a71edc8ea08cb5b2","desc":"addr(bcrt1qgl8eevaz70u7ny69l052w8ku36sgeddjjcawwq)#sf4xyvk2","amount":0.9692,"coinbase":false,"height":309,"tx":"0200000001e450fb7b009a6e239099c2fc83ce887097b4aa2f60e9dd51f6f70f566acfe7040000000000ffffffff02c0c62d0000000000225120ddc5a4b2bbe1708cc983f4f28560c9e0a15440471f3c9f64f37b35584b2a9ce7c0e1c6050000000016001447cf9cb3a2f3f9e99345fbe8a71edc8ea08cb5b200000000"}],"total_amount":0.9692}}` ); const utxosRaw = utxosRequest.result.unspents as { txid: string; @@ -127,8 +155,6 @@ test('btc tx, deposit to sbtc, tx compare', async () => { tx: u.tx, })); - console.log(utxos); - // Tx building const { transaction: tx, @@ -136,9 +162,9 @@ test('btc tx, deposit to sbtc, tx compare', async () => { reclaimScript, } = await sbtcDepositHelper({ stacksAddress: 'STGSJA8EMYDBAJDX6Z4ED8CWW071B6NB97SRAM1E', - amountSats: 20042, + amountSats: 20_042, - maxFee: 20000, + maxFee: 20_000, reclaimLockTime: 50, signersPublicKey: '14c515722f2b61f9bc8bfbcd48422988533007602c74f3145616817f27302237', @@ -146,9 +172,8 @@ test('btc tx, deposit to sbtc, tx compare', async () => { feeRate: 1, utxos, - bitcoinChangeAddress: 'bcrt1qgl8eevaz70u7ny69l052w8ku36sgeddjjcawwq', + bitcoinChangeAddress: 'bcrt1qgl8eevaz70u7ny69l052w8ku36sgeddjjcawwq', // devenv }); - console.log(tx); // Test vector created with CLI in sbtc repo: // cargo run -p signer --bin demo-cli deposit --amount 42 --max-fee 20000 --lock-time 50 --stacks-addr STGSJA8EMYDBAJDX6Z4ED8CWW071B6NB97SRAM1E --signer-key 14c515722f2b61f9bc8bfbcd48422988533007602c74f3145616817f27302237` @@ -172,8 +197,6 @@ test('btc tx, deposit to sbtc, tx compare', async () => { // deposit output expect(tx.getOutput(0).amount).toEqual(20_042n); - console.log('tx (0)', tx.getOutput(0)); - console.log('txCli (0)', txCli.getOutput(0)); expect(tx.getOutput(0)).toEqual(txCli.getOutput(0)); // change output diff --git a/vitest.config.ts b/vitest.config.ts index 31e4d9e3c..0813c313e 100644 --- a/vitest.config.ts +++ b/vitest.config.ts @@ -3,5 +3,6 @@ import { defineConfig } from 'vitest/config'; export default defineConfig({ test: { testTimeout: process.env.CI ? 5_000 : 1_000_000, + hookTimeout: 1_000_000_000, }, }); From 2dd32533d097880b87140044bf2c0f7461ea2234 Mon Sep 17 00:00:00 2001 From: janniks Date: Mon, 2 Dec 2024 22:58:08 -0500 Subject: [PATCH 36/49] chore: fixup readme --- packages/sbtc/README.md | 226 ++++++++++++++++++++++++------------- packages/sbtc/package.json | 2 +- packages/sbtc/src/api.ts | 19 +--- 3 files changed, 154 insertions(+), 93 deletions(-) diff --git a/packages/sbtc/README.md b/packages/sbtc/README.md index f92f4d59f..823d6f91e 100644 --- a/packages/sbtc/README.md +++ b/packages/sbtc/README.md @@ -1,129 +1,197 @@ -# `sbtc` 0.1.x (developer-release) +# `sbtc` 0.2.x (regtest/testnet-release) + +⚠︎ **Warning:** Some API instances are not fully deployed yet on Testnet. A helper package for interacting with sBTC from JavaScript/TypeScript. +> **Note:** This package currently targets the Stacks Testnet (on top of Bitcoin Regtest). + +- [Installation](#installation) +- [Overview](#overview) + - [sBTC](#sbtc) + - [Architecture](#architecture) + - [Deposit Flow](#deposit-flow) + - [Withdraw Flow](#withdraw-flow) + - [`sbtc` Package](#sbtc-package) +- [Examples](#examples) + - [`sbtcDepositHelper`](#sbtcdeposithelper) + - [`SbtcApiClientTestnet` / `SbtcApiClientDevenv`](#sbtcapiclienttestnet--sbtcapiclientdevenv) +- [API](#api) + - [`sbtcDepositHelper`](#sbtcdeposithelper-1) + - [`SbtcApiClientTestnet` / `SbtcApiClientDevenv`](#sbtcapiclienttestnet--sbtcapiclientdevenv-1) +- [Advanced API](#advanced-api) + - [`buildSbtcDepositTx` (e.g., for wallets)](#buildsbtcdeposittx-eg-for-wallets) + ## Installation ```bash npm install sbtc ``` -## Basic Usage +## Overview -The package exports two high-level helpers for interacting with sBTC: +### sBTC -- [`sbtcDepositHelper`](#sbtcdeposithelper) — create a deposit transaction (assuming spendable bitcoin UTXOs, and the sBTC peg address) -- [`sbtcWithdrawHelper`](#sbtcwithdrawhelper) — create a withdraw transaction (assuming spendable UTXOs, sBTC balance, a Stacks sBTC-withdraw signature via `sbtcWithdrawMessage`, and the sBTC peg address) +#### Architecture -Additionally, there are two API helpers, which make it easier to get all the data needed to create the above transactions: +- **Bitcoin:** The original funds are sourced from Bitcoin. A depositor sends these funds to a group of signers, which manage a (rotating) multisignature address formatted for sBTC transactions. +- **sBTC API (Emily):** This API is responsible for tracking deposits and notifying the signers about pending deposits. +- **Stacks:** The network where sBTC is minted. Once the deposit is confirmed, the signers mint the corresponding amount of sBTC to the depositor's specified address on the Stacks network. -- [`DevEnvHelper`](#devenvhelper--testnethelper) — a helper for interacting with a local development environment [`sbtc/devenv`](https://github.com/stacks-network/sbtc/tree/main/devenv) -- [`TestnetHelper`](#devenvhelper--testnethelper) — a helper for interacting with the testnet deployment of the sBTC contract +#### Deposit Flow -## Examples +- **Create Deposit (Bitcoin) Transaction:** + - Structure a Bitcoin transaction to send funds to the group of signers. + - Use a specialized format that includes: + - **Deposit Script**: Identifies which _Stacks address_ the sBTC will be minted to and what the _maximum fee_ (in satoshis) the signers may take in exchange for minting. + - **Reclaim Script**: Allows the sender to reclaim their funds if the transaction is not processed by the signers. +- **Sign and Broadcast the Transaction:** + - Sign the transaction with the sender’s private key. + - Broadcast the transaction to the Bitcoin network (Bitcoin Regtest for Stacks Testnet). +- **Notify the sBTC API (Emily):** + - Inform the API about the transaction by submitting its details. + This step ensures that the signers are aware of the deposit and can track it. +- **Processing by Signers:** (_no action required_) + - The signers retrieve and verify the deposit transaction from the Bitcoin blockchain. + - Once verified, the signers mint the equivalent amount of sBTC on the Stacks network. +- **Receive sBTC:** (_no action required_) + - The minted sBTC is sent to the depositor's designated Stacks address, completing the deposit process. + - sBTC is SIP-010 compatible and will show up in wallets and explorers. -### `sbtcDepositHelper` +#### Withdraw Flow -```typescript -import { DevEnvHelper, sbtcDepositHelper } from 'sbtc'; +> _Coming soon_ -const dev = new DevEnvHelper(); +### `sbtc` Package -// Transaction building -const tx = await sbtcDepositHelper({ - pegAddress: await dev.getSbtcPegAddress(), +The package exports two high-level helpers for interacting with sBTC: - stacksAddress: MY_STX_ADDRESS, - amountSats: 1_000, // amount of BTC to deposit, in satoshis +- [`sbtcDepositHelper`](#sbtcdeposithelper) — create a fully-formed deposit transaction (assuming an address with spendable bitcoin UTXOs) +- [`sbtcWithdrawHelper`](#sbtcwithdrawhelper) — _coming soon_ - feeRate: await dev.estimateFeeRate('low'), - utxos: await dev.fetchUtxos(MY_BTC_ADDRESS); +Additionally, there are two API helpers, which make it easier to get all the data needed to create the above transactions: - bitcoinChangeAddress: MY_BTC_ADDRESS, -}); +- [`SbtcApiClientTestnet`](#devenvhelper--testnethelper) — a client for communicating with the different pieces of the testnet deployment of sBTC +- [`SbtcApiClientDevenv`](#devenvhelper--testnethelper) — a client for developing against a [local deployment of sBTC](https://github.com/stacks-network/sbtc/blob/0ff9070ffdfde4a8c0fec025de5a182e2aedca2d/Makefile#L169-L173) -// Transaction signing and broadcasting -tx.sign(MY_BTC_PRIVATE_KEY); -tx.finalize(); +While the final adjustments are still being made in the pre-release phase, this package may change default URLs and contract addresses on every minor release. -const txid = await dev.broadcastTx(tx); -console.log('txid', txid) +| Version | Purpose | Functionality | +| ------- | ----------------------------- | ------------- | +| 0.1.x | Developer release (hackathon) | | +| 0.2.x | Regtest/Testnet release | Deposit only | -// Or: export as PSBT for signing with a different wallet -const psbtBytes = tx.toPSBT(); -``` +--- -> **Note:** Here `DevEnvHelper` can be replaced with `TestnetHelper` to interact with the testnet deployment of the sBTC contract. +## Examples -### `sbtcWithdrawHelper` +### `sbtcDepositHelper` ```typescript -import { DevEnvHelper, sbtcWithdrawHelper, sbtcWithdrawMessage } from 'sbtc'; - -const dev = new DevEnvHelper(); - -const message = sbtcWithdrawMessage({ - amountSats: 1_000, - bitcoinAddress: MY_BTC_ADDRESS, // withdrawl recipient -}); - -const signature = signMessageHashRsv({ - messageHash: bytesToHex(hashMessage(message)), - privateKey: createStacksPrivateKey(MY_STX_PRIVATE_KEY), -}).data; // Or: sign message with a different wallet +import { sbtcDepositHelper, SbtcApiClientTestnet } from 'sbtc'; -// Tx building -const tx = await sbtcWithdrawHelper({ - pegAddress: await dev.getSbtcPegAddress(), +const client = new SbtcApiClientTestnet(); - amountSats: 1_000, // amount of BTC to withdraw, in satoshis - bitcoinAddress: MY_BTC_ADDRESS, // withdrawl recipient - signature, +// 1. BUILD THE DEPOSIT TRANSACTION (GIVEN UTXOS FOR AN ADDRESS) +const deposit = await sbtcDepositHelper({ + stacksAddress: TARGET_STX_ADDRESS, // where to send/mint the sBTC + amountSats: 5_000_000, // (maximum) amount of sBTC to deposit - fulfillmentFeeSats: 2_000, + signersPublicKey: pub, // the aggregated public key of the signers - feeRate: await dev.estimateFeeRate('low'), - utxos: await dev.fetchUtxos(MY_BTC_ADDRESS), + feeRate: await client.fetchFeeRate('medium'), + utxos: await client.fetchUtxos(YOUR_BTC_ADDRESS), - bitcoinChangeAddress: MY_BTC_ADDRESS, + bitcoinChangeAddress: YOUR_BTC_ADDRESS, }); -// Transaction signing and broadcasting -tx.sign(MY_BTC_PRIVATE_KEY); -tx.finalize(); +// 2. SIGN THE TRANSACTION +deposit.transaction.sign(YOUR_BTC_PRIVATE_KEY); +deposit.transaction.finalize(); + +// 2. OR SIGN VIA EXTERNAL WALLET +const psbtBytes = deposit.transaction.toPSBT(); -const txid = await dev.broadcastTx(tx); +// 3. BROADCAST TRANSACTION +const txid = await client.broadcastTx(deposit.transaction); console.log('txid', txid); -// Or: export as PSBT for signing with a different wallet -const psbtBytes = tx.toPSBT(); +// 4. NOTIFY THE SIGNERS +const res = await client.notifySbtc(deposit); +console.log('res', res.status, res.statusMessage); ``` -> **Note:** Here `DevEnvHelper` can be replaced with `TestnetHelper` to interact with the testnet deployment of the sBTC contract. +> **Note:** Here `SbtcApiClientTestnet` can be replaced with `SbtcApiClientDevenv` to interact with the local deployment of the sBTC contract. -### `DevEnvHelper` / `TestnetHelper` +### `SbtcApiClientTestnet` / `SbtcApiClientDevenv` -```typescript -import { DevEnvHelper, TestnetHelper } from 'sbtc'; +```ts +import { SbtcApiClientTestnet, SbtcApiClientDevenv } from 'sbtc'; + +const client = new SbtcApiClientTestnet(); +// const client = new SbtcApiClientDevenv(); + +const pub = await client.fetchSignersPublicKey(); // fetches the aggregated public key of the signers +const address = await client.fetchSignersAddress(); // fetches the p2tr address of the aggregated public key of the signers -// const test = new TestnetHelper(); // interchangeable -const dev = new DevEnvHelper(); +const feeRate = await client.fetchFeeRate('low'); // or 'medium', 'high' +const unspents = await client.fetchUtxos(BTC_ADDRESS); +const hex = await client.fetchTxHex(TXID); -await dev.getBitcoinAccount('secure glass …'); // The Bitcoin account for a given seed phrase -await dev.getStacksAccount('secure glass …'); // The Stacks account for a given seed phrase +await client.broadcastTx(DEPOSIT_BTC_TX); // broadcast a deposit BTC transaction +await client.notifySbtc(DEPOSIT_BTC_TX); // notify the sBTC API about the deposit (otherwise it won't be processed) -await dev.getSbtcPegAddress(); // The sBTC peg address +const sbtcBalance = await client.fetchSbtcBalance(STX_ADDRESS); // fetch the sBTC balance of an Stacks address +``` -await dev.estimateFeeRate('low'); // The estimated fee rate -await dev.fetchUtxos(MY_BTC_ADDRESS); // The spendable BTC UTXOs for a given address -await dev.fetchTxHex(TXID); // The raw BTC transaction for a given txid -await dev.broadcastTx(TX); // Broadcast a BTC transaction +## API -await dev.getBalance(BTC_ADDRESS); -await dev.getSbtcBalance(STX_ADDRESS); +### `sbtcDepositHelper` -await dev.stacksCallReadOnly({ - contractAddress: '…', - functionName: '…', +| Parameter | Description | Type | Default | +| ---------------------- | ----------------------------------------------------------------------------------------------- | -------------------- | ---------------------------------------------------------- | +| `signersPublicKey` | Signers public key (aggregated schnorr) | `string` 32 byte hex | — | +| `amountSats` | Bitcoin amount denominated in sats (\* 10^8) | `number, bigint` | — | +| `stacksAddress` | The deposit recipient Stacks address | `string` | — | +| `bitcoinChangeAddress` | Bitcoin change address | `string` | — | +| `feeRate` | Fee rate in sat/vbyte | `number` | — | +| `utxos` | UTXOs to "fund" the transaction | `UtxoWithTx[]` | — | +| | | | | +| `paymentPublicKey` | Optional payment public key (currently only used for default utxoToSpendable.sh implementation) | `string` hex | — | +| `utxoToSpendable` | Optional function to convert p2wpk and p2sh utxos to spendable inputs | `Function` | Best effort default implementation to make utxos spendable | +| `maxFee` | Optional maximum fee to pay for the deposit transaction | `number` | `80_000` | +| `reclaimLockTime` | Optional reclaim lock time | `number` | `6_000` | +| `network` | Optional Bitcoin network | `BitcoinNetwork` | `REGTEST` | + +### `SbtcApiClientTestnet` / `SbtcApiClientDevenv` + +| Parameter | Description | Type | +| -------------- | ------------------------------------------------- | -------- | +| `sbtcContract` | The multisig address of the initial sBTC contract | `string` | +| `sbtcApiUrl` | The base URL of the sBTC API (Emily) | `string` | +| `btcApiUrl` | The base URL of the Bitcoin mempool/electrs API | `string` | +| `stxApiUrl` | The base URL of the Stacks API | `string` | + +## Advanced API + +If you need more control over the transaction, you can use the low-level functions to build the transaction directly. + +### `buildSbtcDepositTx` (e.g., for wallets) + +> **Note:** This function ONLY builds the basic format of the deposit transaction. You still need to add inputs (and potential change outputs) yourself. + +```ts +import { buildSbtcDepositTx } from 'sbtc'; + +const deposit = buildSbtcDepositTx({ + // subset of parameters from `sbtcDepositHelper` + network, + amountSats, + stacksAddress, + signersPublicKey, + maxFee, + reclaimLockTime, }); + +// `deposit.transaction` has one output, which is the combined taproot of the deposit and reclaim scripts ``` diff --git a/packages/sbtc/package.json b/packages/sbtc/package.json index 037a30c38..83267e6e7 100644 --- a/packages/sbtc/package.json +++ b/packages/sbtc/package.json @@ -1,6 +1,6 @@ { "name": "sbtc", - "version": "0.1.9", + "version": "0.2.0", "description": "Library for sBTC.", "license": "MIT", "author": "Hiro Systems PBC (https://hiro.so)", diff --git a/packages/sbtc/src/api.ts b/packages/sbtc/src/api.ts index c6481f1fb..3d47f215e 100644 --- a/packages/sbtc/src/api.ts +++ b/packages/sbtc/src/api.ts @@ -12,6 +12,7 @@ import { import { REGTEST } from './constants'; import { wrapLazyProxy } from './utils'; import { bytesToHex } from '@stacks/common'; +import { sbtcDepositHelper } from './transactions'; /** todo */ // https://blockstream.info/api/address/1KFHE7w8BhaENAswwryaoccDb6qcT6DbYY/utxo @@ -89,20 +90,14 @@ export class SbtcApiClient { }).then(res => res.text()); } - async notifySbtc(tx: btc.Transaction) { - const depositScript = tx.getOutput(0).script; - const reclaimScript = tx.getOutput(1).script; - - if (!depositScript) throw new Error('Missing deposit script at index 0'); - if (!reclaimScript) throw new Error('Missing reclaim script at index 1'); - + async notifySbtc(depositInfo: Awaited>) { return (await fetch(`${this.config.sbtcApiUrl}/deposit`, { method: 'POST', body: JSON.stringify({ - bitcoinTxid: tx.id, + bitcoinTxid: depositInfo.transaction.id, bitcoinTxOutputIndex: 0, - depositScript: bytesToHex(depositScript), - reclaimScript: bytesToHex(reclaimScript), + depositScript: depositInfo.depositScript, + reclaimScript: depositInfo.reclaimScript, }), }).then(res => res.json())) as { bitcoinTxid: string; @@ -182,12 +177,10 @@ export class SbtcApiClient { } async fetchSbtcBalance(stacksAddress: string) { - const [address, name] = stacksAddress.split('.'); - const balance = (await this.fetchCallReadOnly({ contractAddress: this.config.sbtcContract, functionName: 'get-balance', - args: [name ? Cl.contractPrincipal(address, name) : Cl.standardPrincipal(address)], + args: [Cl.address(stacksAddress)], })) as SomeCV; return balance?.value?.value ?? 0; From 96261b37341fda79bbca034a21d83bd5dc6cde0b Mon Sep 17 00:00:00 2001 From: janniks Date: Mon, 2 Dec 2024 23:00:07 -0500 Subject: [PATCH 37/49] fix: remove unneeded code --- packages/sbtc/src/api.ts | 3 +-- packages/sbtc/src/constants.ts | 9 --------- 2 files changed, 1 insertion(+), 11 deletions(-) diff --git a/packages/sbtc/src/api.ts b/packages/sbtc/src/api.ts index 3d47f215e..80bfecdba 100644 --- a/packages/sbtc/src/api.ts +++ b/packages/sbtc/src/api.ts @@ -10,9 +10,8 @@ import { fetchCallReadOnlyFunction, } from '@stacks/transactions'; import { REGTEST } from './constants'; -import { wrapLazyProxy } from './utils'; -import { bytesToHex } from '@stacks/common'; import { sbtcDepositHelper } from './transactions'; +import { wrapLazyProxy } from './utils'; /** todo */ // https://blockstream.info/api/address/1KFHE7w8BhaENAswwryaoccDb6qcT6DbYY/utxo diff --git a/packages/sbtc/src/constants.ts b/packages/sbtc/src/constants.ts index d2e394fe6..120c6b60b 100644 --- a/packages/sbtc/src/constants.ts +++ b/packages/sbtc/src/constants.ts @@ -1,14 +1,5 @@ import * as btc from '@scure/btc-signer'; -// todo: auto-fetch or hardcode if final -// or replace with testnet final address -export const SBTC_PEG_ADDRESS_TESTNET = '--TODO--'; -export const SBTC_PEG_ADDRESS_DEVENV = - 'bcrt1pte5zmd7qzj4hdu45lh9mmdm0nwq3z35pwnxmzkwld6y0a8g83nnqhj6vc0'; - -export const SBTC_FT_ADDRESS_TESTNET = 'ST3ACFZ2XKFPKAFD9YY92ZP0Y4QN6MTX3H20C27NY.asset'; -export const SBTC_FT_ADDRESS_DEVENV = 'ST1PQHQKV0RJXZFY1DGX8MNSNYVE3VGZJSRTPGZGM.asset'; - export enum MagicBytes { Mainnet = 'X2', Testnet = 'T2', From 97773a311f36cfeaef04d4fa065696af0078afbc Mon Sep 17 00:00:00 2001 From: janniks Date: Mon, 2 Dec 2024 23:09:21 -0500 Subject: [PATCH 38/49] fix!: rename to maxSignerFee for clarity --- packages/sbtc/README.md | 8 ++++---- packages/sbtc/src/transactions/deposit.ts | 20 ++++++++++---------- packages/sbtc/tests/deposit.test.ts | 2 +- 3 files changed, 15 insertions(+), 15 deletions(-) diff --git a/packages/sbtc/README.md b/packages/sbtc/README.md index 823d6f91e..20b1454fd 100644 --- a/packages/sbtc/README.md +++ b/packages/sbtc/README.md @@ -54,9 +54,9 @@ npm install sbtc - **Processing by Signers:** (_no action required_) - The signers retrieve and verify the deposit transaction from the Bitcoin blockchain. - Once verified, the signers mint the equivalent amount of sBTC on the Stacks network. -- **Receive sBTC:** (_no action required_) +- **Receive sBTC (Stacks):** (_no action required_) - The minted sBTC is sent to the depositor's designated Stacks address, completing the deposit process. - - sBTC is SIP-010 compatible and will show up in wallets and explorers. + - sBTC is SIP-010 compatible and will show up in Stacks wallets and explorers. #### Withdraw Flow @@ -159,7 +159,7 @@ const sbtcBalance = await client.fetchSbtcBalance(STX_ADDRESS); // fetch the sBT | | | | | | `paymentPublicKey` | Optional payment public key (currently only used for default utxoToSpendable.sh implementation) | `string` hex | — | | `utxoToSpendable` | Optional function to convert p2wpk and p2sh utxos to spendable inputs | `Function` | Best effort default implementation to make utxos spendable | -| `maxFee` | Optional maximum fee to pay for the deposit transaction | `number` | `80_000` | +| `maxSignerFee` | Optional maximum fee to pay for the deposit transaction | `number` | `80_000` | | `reclaimLockTime` | Optional reclaim lock time | `number` | `6_000` | | `network` | Optional Bitcoin network | `BitcoinNetwork` | `REGTEST` | @@ -189,7 +189,7 @@ const deposit = buildSbtcDepositTx({ amountSats, stacksAddress, signersPublicKey, - maxFee, + maxSignerFee, reclaimLockTime, }); diff --git a/packages/sbtc/src/transactions/deposit.ts b/packages/sbtc/src/transactions/deposit.ts index 001ca5b5b..79f6eaa27 100644 --- a/packages/sbtc/src/transactions/deposit.ts +++ b/packages/sbtc/src/transactions/deposit.ts @@ -15,16 +15,16 @@ import { const concat = P.utils.concatBytes; export function buildSbtcDepositScript(opts: { - maxFee: number; + maxSignerFee: number; stacksAddress: string; signersPublicKey: string; }) { - const maxFeeBytes = P.U64BE.encode(BigInt(opts.maxFee)); + const maxSignerFeeBytes = P.U64BE.encode(BigInt(opts.maxSignerFee)); const recipientBytes = stacksAddressBytes(opts.stacksAddress); const signersPublicKeyBytes = hexToBytes(opts.signersPublicKey); return btc.Script.encode([ - concat(maxFeeBytes, recipientBytes), + concat(maxSignerFeeBytes, recipientBytes), 'DROP', signersPublicKeyBytes, 'CHECKSIG', @@ -42,7 +42,7 @@ export function buildSbtcDepositTr(opts: { network: BitcoinNetwork; stacksAddress: string; signersPublicKey: string; - maxFee: number; + maxSignerFee: number; lockTime: number; }) { const deposit = buildSbtcDepositScript(opts); @@ -71,7 +71,7 @@ export function buildSbtcDepositTx({ amountSats, stacksAddress, signersPublicKey, - maxFee, + maxSignerFee, reclaimLockTime, }: { network: BitcoinNetwork; @@ -79,7 +79,7 @@ export function buildSbtcDepositTx({ stacksAddress: string; /** Aggregated (schnorr) public key of all signers */ signersPublicKey: string; - maxFee: number; + maxSignerFee: number; reclaimLockTime: number; }) { // todo: check opts, e.g. pub key length to be schnorr @@ -88,7 +88,7 @@ export function buildSbtcDepositTx({ network, stacksAddress, signersPublicKey, - maxFee, + maxSignerFee, lockTime: reclaimLockTime, }); if (!tr.trOut.address) throw new Error('Failed to create build taproot output'); @@ -109,7 +109,7 @@ export async function sbtcDepositHelper({ utxos, utxoToSpendable = DEFAULT_UTXO_TO_SPENDABLE, paymentPublicKey, - maxFee = 80_000, + maxSignerFee = 80_000, reclaimLockTime = 6_000, }: { /** Bitcoin network, defaults to REGTEST */ @@ -145,7 +145,7 @@ export async function sbtcDepositHelper({ utxoToSpendable?: Partial; /** Optional maximum fee to pay for the deposit transaction, defaults to 80_000 */ - maxFee?: number; + maxSignerFee?: number; /** Optional reclaim lock time, defaults to 6_000 */ reclaimLockTime?: number; @@ -161,7 +161,7 @@ export async function sbtcDepositHelper({ amountSats, stacksAddress, signersPublicKey, - maxFee, + maxSignerFee, reclaimLockTime, }); diff --git a/packages/sbtc/tests/deposit.test.ts b/packages/sbtc/tests/deposit.test.ts index 55d1383f6..15d72b1b4 100644 --- a/packages/sbtc/tests/deposit.test.ts +++ b/packages/sbtc/tests/deposit.test.ts @@ -164,7 +164,7 @@ test('btc tx, deposit to sbtc, tx compare to cli', async () => { stacksAddress: 'STGSJA8EMYDBAJDX6Z4ED8CWW071B6NB97SRAM1E', amountSats: 20_042, - maxFee: 20_000, + maxSignerFee: 20_000, reclaimLockTime: 50, signersPublicKey: '14c515722f2b61f9bc8bfbcd48422988533007602c74f3145616817f27302237', From 8543f4beaf7d54e100bd4be0b1f888b2a9cfccff Mon Sep 17 00:00:00 2001 From: janniks Date: Tue, 3 Dec 2024 14:11:03 -0500 Subject: [PATCH 39/49] fix: update docs and new buildSbtcDepositAddress method --- packages/sbtc/README.md | 115 ++++++++++++++++------ packages/sbtc/package.json | 2 +- packages/sbtc/src/api.ts | 24 +++-- packages/sbtc/src/transactions/deposit.ts | 38 ++++++- packages/sbtc/tests/deposit.test.ts | 111 ++++++++++++++++++++- 5 files changed, 242 insertions(+), 48 deletions(-) diff --git a/packages/sbtc/README.md b/packages/sbtc/README.md index 20b1454fd..bbd02baeb 100644 --- a/packages/sbtc/README.md +++ b/packages/sbtc/README.md @@ -14,13 +14,13 @@ A helper package for interacting with sBTC from JavaScript/TypeScript. - [Withdraw Flow](#withdraw-flow) - [`sbtc` Package](#sbtc-package) - [Examples](#examples) + - [`buildSbtcDepositAddress`](#buildsbtcdepositaddress) + - [`buildSbtcDepositTx`](#buildsbtcdeposittx) - [`sbtcDepositHelper`](#sbtcdeposithelper) - [`SbtcApiClientTestnet` / `SbtcApiClientDevenv`](#sbtcapiclienttestnet--sbtcapiclientdevenv) - [API](#api) - [`sbtcDepositHelper`](#sbtcdeposithelper-1) - [`SbtcApiClientTestnet` / `SbtcApiClientDevenv`](#sbtcapiclienttestnet--sbtcapiclientdevenv-1) -- [Advanced API](#advanced-api) - - [`buildSbtcDepositTx` (e.g., for wallets)](#buildsbtcdeposittx-eg-for-wallets) ## Installation @@ -62,12 +62,22 @@ npm install sbtc > _Coming soon_ +--- + ### `sbtc` Package -The package exports two high-level helpers for interacting with sBTC: +The package exports high-level functions for building addresses and transactions. + +**With wallets:** + +- [`buildSbtcDepositAddress`](#buildsbtcdepositaddress) — build a deposit address and metadata (enough for most use-cases) +- [`buildSbtcDepositTx`](#buildsbtcdepositaddress) — build a deposit transaction and metadata + +**Without wallets:** - [`sbtcDepositHelper`](#sbtcdeposithelper) — create a fully-formed deposit transaction (assuming an address with spendable bitcoin UTXOs) -- [`sbtcWithdrawHelper`](#sbtcwithdrawhelper) — _coming soon_ + +**HTTP Clients:** Additionally, there are two API helpers, which make it easier to get all the data needed to create the above transactions: @@ -85,14 +95,83 @@ While the final adjustments are still being made in the pre-release phase, this ## Examples +### `buildSbtcDepositAddress` + +Build a deposit address and metadata to be used with any wallet. + +```ts +import { buildSbtcDepositAddress, SbtcApiClientTestnet } from 'sbtc'; + +const client = new SbtcApiClientTestnet(); + +// 1. BUILD THE DEPOSIT ADDRESS AND METADATA +const deposit = buildSbtcDepositAddress({ + stacksAddress: TARGET_STX_ADDRESS, + signersPublicKey: await client.fetchSignersPublicKey(), + + // OPTIONAL DEFAULTS + // maxSignerFee: 80_000, // optional: fee to pay for the deposit transaction (taken from the signers from the sats) + // reclaimLockTime: 6_000, // optional: lock time for the reclaim script + // network: REGTEST, // optional: which bitcoin network to use +}); + +// `deposit.address` is the deposit address (send funds here, aka the deposit address as an output) + +// 2. DEPOSIT USING YOUR FAVORITE WALLET (TYPICALLY ALSO BROADCASTED BY THE WALLET) +const txid = await WalletProvider.sendTransfer({ + recipient: deposit.address, + amount: 100_000, // the amount to deposit; <=maxSignerFee is taken from this amount +}); + +// 3. NOTIFY THE SIGNERS +await client.notifySbtc({ txid, ...deposit }); +``` + +### `buildSbtcDepositTx` + +Like `buildSbtcDepositAddress`, but also builds a deposit transaction. + +> **Note:** This function ONLY builds the basic format of the deposit transaction. You still need to add inputs (and potential change outputs) yourself. + +```ts +import { buildSbtcDepositTx } from 'sbtc'; + +// 1. BUILD THE DEPOSIT TRANSACTION AND METADATA +const deposit = buildSbtcDepositTx({ + amountSats: DEPOSIT_AMOUNT, // the amount in sats/sBTC to deposit; <=maxSignerFee is taken from this amount + + // same options as `buildSbtcDepositAddress` + network, + stacksAddress, + signersPublicKey, + maxSignerFee, + reclaimLockTime, +}); + +// `deposit.transaction` has one output, which is the combined taproot of the deposit and reclaim scripts + +// 2. SIGN THE TRANSACTION +deposit.transaction.sign(YOUR_BTC_PRIVATE_KEY); +deposit.transaction.finalize(); + +// 2. OR SIGN VIA EXTERNAL WALLET +const psbtBytes = deposit.transaction.toPSBT(); + +// 3. BROADCAST THE TRANSACTION +const txid = await client.broadcastTx(deposit.transaction); + +// 4. NOTIFY THE SIGNERS +await client.notifySbtc(deposit); +``` + ### `sbtcDepositHelper` -```typescript +```ts import { sbtcDepositHelper, SbtcApiClientTestnet } from 'sbtc'; const client = new SbtcApiClientTestnet(); -// 1. BUILD THE DEPOSIT TRANSACTION (GIVEN UTXOS FOR AN ADDRESS) +// 1. BUILD THE DEPOSIT TRANSACTION AND METADATA (GIVEN UTXOS FOR AN ADDRESS) const deposit = await sbtcDepositHelper({ stacksAddress: TARGET_STX_ADDRESS, // where to send/mint the sBTC amountSats: 5_000_000, // (maximum) amount of sBTC to deposit @@ -171,27 +250,3 @@ const sbtcBalance = await client.fetchSbtcBalance(STX_ADDRESS); // fetch the sBT | `sbtcApiUrl` | The base URL of the sBTC API (Emily) | `string` | | `btcApiUrl` | The base URL of the Bitcoin mempool/electrs API | `string` | | `stxApiUrl` | The base URL of the Stacks API | `string` | - -## Advanced API - -If you need more control over the transaction, you can use the low-level functions to build the transaction directly. - -### `buildSbtcDepositTx` (e.g., for wallets) - -> **Note:** This function ONLY builds the basic format of the deposit transaction. You still need to add inputs (and potential change outputs) yourself. - -```ts -import { buildSbtcDepositTx } from 'sbtc'; - -const deposit = buildSbtcDepositTx({ - // subset of parameters from `sbtcDepositHelper` - network, - amountSats, - stacksAddress, - signersPublicKey, - maxSignerFee, - reclaimLockTime, -}); - -// `deposit.transaction` has one output, which is the combined taproot of the deposit and reclaim scripts -``` diff --git a/packages/sbtc/package.json b/packages/sbtc/package.json index 83267e6e7..24731d83f 100644 --- a/packages/sbtc/package.json +++ b/packages/sbtc/package.json @@ -1,6 +1,6 @@ { "name": "sbtc", - "version": "0.2.0", + "version": "0.2.2", "description": "Library for sBTC.", "license": "MIT", "author": "Hiro Systems PBC (https://hiro.so)", diff --git a/packages/sbtc/src/api.ts b/packages/sbtc/src/api.ts index 80bfecdba..f653160d5 100644 --- a/packages/sbtc/src/api.ts +++ b/packages/sbtc/src/api.ts @@ -69,11 +69,11 @@ export class SbtcApiClient { } async fetchTxHex(txid: string): Promise { - return fetch(`${this.config.btcApiUrl}/api/tx/${txid}/hex`).then(res => res.text()); + return fetch(`${this.config.btcApiUrl}/tx/${txid}/hex`).then(res => res.text()); } async fetchFeeRates(): Promise { - return fetch(`${this.config.btcApiUrl}/api/v1/fees/recommended`).then(res => res.json()); + return fetch(`${this.config.btcApiUrl}/fees/recommended`).then(res => res.json()); } async fetchFeeRate(target: 'low' | 'medium' | 'high'): Promise { @@ -89,14 +89,24 @@ export class SbtcApiClient { }).then(res => res.text()); } - async notifySbtc(depositInfo: Awaited>) { + async notifySbtc({ + depositScript, + reclaimScript, + vout = 0, + ...tx + }: { + depositScript: string; + reclaimScript: string; + /** Optional, output index (defaults to `0`) */ + vout?: number; + } & ({ txid: string } | { transaction: { id: string } })) { return (await fetch(`${this.config.sbtcApiUrl}/deposit`, { method: 'POST', body: JSON.stringify({ - bitcoinTxid: depositInfo.transaction.id, - bitcoinTxOutputIndex: 0, - depositScript: depositInfo.depositScript, - reclaimScript: depositInfo.reclaimScript, + bitcoinTxid: 'txid' in tx ? tx.txid : tx.transaction.id, + bitcoinTxOutputIndex: vout, + depositScript, + reclaimScript, }), }).then(res => res.json())) as { bitcoinTxid: string; diff --git a/packages/sbtc/src/transactions/deposit.ts b/packages/sbtc/src/transactions/deposit.ts index 79f6eaa27..7cdc0e705 100644 --- a/packages/sbtc/src/transactions/deposit.ts +++ b/packages/sbtc/src/transactions/deposit.ts @@ -66,6 +66,35 @@ export function buildSbtcDepositTr(opts: { }; } +export function buildSbtcDepositAddress({ + network = REGTEST, + stacksAddress, + signersPublicKey, + maxSignerFee, + reclaimLockTime, +}: { + network: BitcoinNetwork; + stacksAddress: string; + /** Aggregated (schnorr) public key of all signers */ + signersPublicKey: string; + maxSignerFee: number; + reclaimLockTime: number; +}) { + const tr = buildSbtcDepositTr({ + network, + stacksAddress, + signersPublicKey, + maxSignerFee, + lockTime: reclaimLockTime, + }); + if (!tr.trOut.address) throw new Error('Failed to create build taproot output'); + + return { + address: tr.trOut.address, + ...tr, + }; +} + export function buildSbtcDepositTx({ network = REGTEST, amountSats, @@ -84,19 +113,18 @@ export function buildSbtcDepositTx({ }) { // todo: check opts, e.g. pub key length to be schnorr - const tr = buildSbtcDepositTr({ + const deposit = buildSbtcDepositAddress({ network, stacksAddress, signersPublicKey, maxSignerFee, - lockTime: reclaimLockTime, + reclaimLockTime, }); - if (!tr.trOut.address) throw new Error('Failed to create build taproot output'); const tx = new btc.Transaction(); - tx.addOutputAddress(tr.trOut.address, BigInt(amountSats), network); + tx.addOutputAddress(deposit.address, BigInt(amountSats), network); - return { transaction: tx, ...tr }; + return { transaction: tx, ...deposit }; } export async function sbtcDepositHelper({ diff --git a/packages/sbtc/tests/deposit.test.ts b/packages/sbtc/tests/deposit.test.ts index 15d72b1b4..8c319ab72 100644 --- a/packages/sbtc/tests/deposit.test.ts +++ b/packages/sbtc/tests/deposit.test.ts @@ -1,25 +1,45 @@ import * as btc from '@scure/btc-signer'; import { hexToBytes } from '@stacks/common'; -import { enableFetchLogging } from '@stacks/internal'; +import { enableFetchLogging, waitForFulfilled } from '@stacks/internal'; import { expect, test, vi } from 'vitest'; import createFetchMock from 'vitest-fetch-mock'; import { SbtcApiClientDevenv, sbtcDepositHelper } from '../src'; import { WALLET_00, getBitcoinAccount, getStacksAccount } from './helpers/wallet'; +import RpcClient from '@btc-helpers/rpc'; enableFetchLogging(); // enable if you want to record requests to network.txt file // set globalThis.fetch and globalThis.fetchMock to mocked version -createFetchMock(vi).enableMocks(); +// createFetchMock(vi).enableMocks(); -test('btc tx, deposit to sbtc, broadcast', async () => { +test('fetch signer address', async () => { + const dev = new SbtcApiClientDevenv(); + + await waitForFulfilled(function sbtcIsDeployed() { + return dev.fetchSignersPublicKey(); + }); + + const address = await dev.fetchSignersAddress(); + console.log('address', address); + + const bitcoinAccount = await getBitcoinAccount(WALLET_00); + + const rpc = new RpcClient('http://devnet:devnet@127.0.0.1:18443').Typed; + + let res = await rpc.generatetoaddress({ nblocks: 1, address }); + console.log('res', res); + + res = await rpc.generatetoaddress({ nblocks: 1, address: bitcoinAccount.wpkh.address }); + console.log('res', res); +}); + +test('btc tx, deposit to sbtc, broadcast — raw fetch', async () => { // TEST CASE // Assumes a manually funded signers address and WALLET_00 wpkh address const bitcoinAccount = await getBitcoinAccount(WALLET_00); // wpkh bcrt1q3tj2fr9scwmcw3rq5m6jslva65f2rqjxfrjz47 (manually funded on devenv via bridge) const stacksAccount = await getStacksAccount(WALLET_00); - // todo: switch to mempool proxy once it's live - fetchMock.mockOnce( `{"result":{"success":true,"txouts":342,"height":252,"bestblock":"71903ce6738b723dad54e3ad110b859e8c1bd6ba499d94b4b0b22a44b0c10b37","unspents":[{"txid":"51349ba2a37959a5d84826311a556cf5201aeae6ddeb94b8d254976d0d20c217","vout":0,"scriptPubKey":"00148ae4a48cb0c3b7874460a6f5287d9dd512a18246","desc":"addr(bcrt1q3tj2fr9scwmcw3rq5m6jslva65f2rqjxfrjz47)#gcletckr","amount":1,"coinbase":false,"height":241}],"total_amount":1}}` ); @@ -131,6 +151,87 @@ test('btc tx, deposit to sbtc, broadcast', async () => { expect(jsonEmilyDeposit.reclaimScript).toBe(reclaimScript); }); +test('btc tx, deposit to sbtc, broadcast — client proxy', async () => { + // TEST CASE + // Assumes a manually funded signers address and WALLET_00 wpkh address + + const bitcoinAccount = await getBitcoinAccount(WALLET_00); // wpkh bcrt1q3tj2fr9scwmcw3rq5m6jslva65f2rqjxfrjz47 (manually funded on devenv via bridge) + const stacksAccount = await getStacksAccount(WALLET_00); + + const dev = new SbtcApiClientDevenv({ + btcApiUrl: 'http://localhost:3010/api/proxy', + }); + + const pub = await dev.fetchSignersPublicKey(); + expect(pub).toBe('f1934e22bddf0dff972cf91404ab0d1cb9d4797e07c310d47283b9100d762937'); + + const signerAddress = await dev.fetchSignersAddress(); + expect(signerAddress).toBe('bcrt1p5yupkjf2k8fk0unqfz9l40putap6ls9satez6a86hgdryfz4zvwqv9jal3'); + + const utxos = await dev.fetchUtxos(bitcoinAccount.wpkh.address); + expect(utxos.length).toBeGreaterThan(0); + + const utxosSigner = await dev.fetchUtxos(signerAddress); + expect(utxosSigner.length).toBeGreaterThan(0); + + expect(await utxos[0].tx).toBeInstanceOf(String); + return; + + // Tx building + const { + transaction: tx, + depositScript, + reclaimScript, + } = await sbtcDepositHelper({ + stacksAddress: stacksAccount.address, + amountSats: 5_000_000, + + signersPublicKey: pub, + + feeRate: 1, + utxos, + + bitcoinChangeAddress: bitcoinAccount.wpkh.address, + }); + + tx.sign(bitcoinAccount.privateKey); + tx.finalize(); + + fetchMock.mockOnce( + `{"result":[{"txid":"3cc72977efc12ceeddaf5589e53cb67525e798e0c67018eeffdc1c583e9c6005","wtxid":"0f8ce4916f6550f8af6de05bf2e8066a090694ff65cf5ba4f3a574c457a797b8","allowed":true,"vsize":153,"fees":{"base":0.00000189,"effective-feerate":0.00001235,"effective-includes":["0f8ce4916f6550f8af6de05bf2e8066a090694ff65cf5ba4f3a574c457a797b8"]}}]}` + ); + + const resTestmempoolaccept = await fetch('http://localhost:3010/api/bitcoind', { + body: `{"rpcMethod":"testmempoolaccept","params":[["${tx.hex}"]],"bitcoinDUrl":"http://bitcoin:18443/"}`, + method: 'POST', + }); + const jsonTestmempoolaccept = await resTestmempoolaccept.json(); + expect(jsonTestmempoolaccept.result[0].txid).toBe(tx.id); + + fetchMock.mockOnce( + `{"result":"3cc72977efc12ceeddaf5589e53cb67525e798e0c67018eeffdc1c583e9c6005"}` + ); + + const resBroadcast = await fetch('http://localhost:3010/api/bitcoind', { + body: `{"rpcMethod":"sendrawtransaction","params":["${tx.hex}"],"bitcoinDUrl":"http://bitcoin:18443/"}`, + method: 'POST', + }); + const jsonBroadcast = (await resBroadcast.json()) as { result: string }; + + fetchMock.mockOnce( + `{"bitcoinTxid":"3cc72977efc12ceeddaf5589e53cb67525e798e0c67018eeffdc1c583e9c6005","bitcoinTxOutputIndex":0,"recipient":"051a6d78de7b0625dfbfc16c3a8a5735f6dc3dc3f2ce","amount":0,"lastUpdateHeight":137,"lastUpdateBlockHash":"aa92e5d8af05a266e98ac9ed8bc1979029adaff556b8ca33ca6b216458a3a22c","status":"pending","statusMessage":"Just received deposit","parameters":{"maxFee":80000,"lockTime":6000},"reclaimScript":"027017b2","depositScript":"1e0000000000013880051a6d78de7b0625dfbfc16c3a8a5735f6dc3dc3f2ce7520b6ad657d5428873633f6c3c948b4102bd697c1c8449425c1be1ff71992f98b74ac"}` + ); + + const resEmilyDeposit = await fetch('http://localhost:3010/api/emilyDeposit', { + body: `{"bitcoinTxid":"${jsonBroadcast.result}","bitcoinTxOutputIndex":0,"reclaimScript":"${reclaimScript}","depositScript":"${depositScript}","url":"http://emily-server:3031"}`, + method: 'POST', + }); + const jsonEmilyDeposit = await resEmilyDeposit.json(); + expect(jsonEmilyDeposit.status).toBe('pending'); + expect(jsonEmilyDeposit.depositScript).toBe(depositScript); + expect(jsonEmilyDeposit.reclaimScript).toBe(reclaimScript); +}); + test('btc tx, deposit to sbtc, tx compare to cli', async () => { // TEST CASE // Compares a JS generated transactions outputs to a test vector created with the CLI From d329031a9c54b7cf36f470818cf7f3325ea71fca Mon Sep 17 00:00:00 2001 From: janniks Date: Tue, 3 Dec 2024 14:15:46 -0500 Subject: [PATCH 40/49] fix: remove unused import --- packages/sbtc/src/api.ts | 1 - 1 file changed, 1 deletion(-) diff --git a/packages/sbtc/src/api.ts b/packages/sbtc/src/api.ts index f653160d5..abf8d19c5 100644 --- a/packages/sbtc/src/api.ts +++ b/packages/sbtc/src/api.ts @@ -10,7 +10,6 @@ import { fetchCallReadOnlyFunction, } from '@stacks/transactions'; import { REGTEST } from './constants'; -import { sbtcDepositHelper } from './transactions'; import { wrapLazyProxy } from './utils'; /** todo */ From e9be50f7ee7eb40036fa3745d00119429ce52b99 Mon Sep 17 00:00:00 2001 From: janniks Date: Thu, 5 Dec 2024 13:54:31 -0500 Subject: [PATCH 41/49] fix: update urls --- packages/sbtc/src/api.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/sbtc/src/api.ts b/packages/sbtc/src/api.ts index abf8d19c5..d00db2729 100644 --- a/packages/sbtc/src/api.ts +++ b/packages/sbtc/src/api.ts @@ -201,8 +201,8 @@ export class SbtcApiClientTestnet extends SbtcApiClient { super( Object.assign( { - sbtcApiUrl: 'https://beta.sbtc-emily.com', // todo: get real url - btcApiUrl: 'https://TODO', // todo: replace with functioning regtest testnet deployment + sbtcApiUrl: 'https://beta.sbtc-emily.com', + btcApiUrl: 'https://beta.sbtc-mempool.tech/api/proxy', stxApiUrl: 'https://api.testnet.hiro.so', /** ⚠︎ Attention: This contract address might still change over the course of the sBTC contract on Testnet */ sbtcContract: 'SNGWPN3XDAQE673MXYXF81016M50NHF5X5PWWM70', From 58631bdc849245701e1102c26bc2a253d11fc355 Mon Sep 17 00:00:00 2001 From: janniks Date: Fri, 6 Dec 2024 14:02:19 -0500 Subject: [PATCH 42/49] fix: update deposit fetch --- packages/internal/src/apiMockingHelpers.ts | 16 + packages/sbtc/package.json | 2 +- packages/sbtc/src/api.ts | 78 +++- packages/sbtc/tests/api.test.ts | 11 + packages/sbtc/tests/deposit.test.ts | 440 ++++++++++++--------- 5 files changed, 329 insertions(+), 218 deletions(-) diff --git a/packages/internal/src/apiMockingHelpers.ts b/packages/internal/src/apiMockingHelpers.ts index 17cfb4040..6f667c894 100644 --- a/packages/internal/src/apiMockingHelpers.ts +++ b/packages/internal/src/apiMockingHelpers.ts @@ -192,6 +192,7 @@ export function enableFetchLogging() { const fetchOriginal = globalThis.fetch; (globalThis.fetch as any) = async (input: string | Request, init?: RequestInit) => { const r = await fetchOriginal(input, init); + logCurl(input, init); const response = await r .clone() .json() @@ -202,3 +203,18 @@ export function enableFetchLogging() { return r; }; } + +function logCurl(input: string | Request, init?: RequestInit) { + const url = input instanceof Request ? input.url : input; + const method = init?.method || 'GET'; + const headers = init?.headers + ? Object.entries(init.headers) + .map(([k, v]) => `-H '${k}: ${v}'`) + .join(' ') + : ''; + const body = init?.body + ? `-d '${typeof init.body === 'string' ? init.body : JSON.stringify(init.body)}'` + : ''; + const curl = `curl -X ${method} ${headers} ${body} '${url}'`; + fs.appendFileSync('curl.txt', `${curl}\n`); +} diff --git a/packages/sbtc/package.json b/packages/sbtc/package.json index 24731d83f..71472d192 100644 --- a/packages/sbtc/package.json +++ b/packages/sbtc/package.json @@ -1,6 +1,6 @@ { "name": "sbtc", - "version": "0.2.2", + "version": "0.2.3", "description": "Library for sBTC.", "license": "MIT", "author": "Hiro Systems PBC (https://hiro.so)", diff --git a/packages/sbtc/src/api.ts b/packages/sbtc/src/api.ts index d00db2729..9f2f9f8c3 100644 --- a/packages/sbtc/src/api.ts +++ b/packages/sbtc/src/api.ts @@ -43,12 +43,30 @@ export type MempoolFeeEstimates = { // minimumFee: number; }; +export type SbtcApiNotifyResponse = { + bitcoinTxid: string; + bitcoinTxOutputIndex: number; + recipient: string; + amount: number; + lastUpdateHeight: number; + lastUpdateBlockHash: string; + status: string; + statusMessage: string; + parameters: { + maxFee: number; + lockTime: number; + }; + reclaimScript: string; + depositScript: string; +}; + export interface BaseClientConfig { sbtcContract: string; - sbtcApiUrl: string; btcApiUrl: string; stxApiUrl: string; + sbtcApiUrl: string; + sbtcBridgeUrl: string; } export class SbtcApiClient { @@ -107,22 +125,31 @@ export class SbtcApiClient { depositScript, reclaimScript, }), - }).then(res => res.json())) as { - bitcoinTxid: string; - bitcoinTxOutputIndex: number; - recipient: string; - amount: number; - lastUpdateHeight: number; - lastUpdateBlockHash: string; - status: string; - statusMessage: string; - parameters: { - maxFee: number; - lockTime: number; - }; - reclaimScript: string; - depositScript: string; - }; + }).then(res => res.json())) as SbtcApiNotifyResponse; + } + + /** Proxies the Emily `/deposit` request via the bridge */ + async notifySbtcBridge({ + depositScript, + reclaimScript, + vout = 0, + ...tx + }: { + depositScript: string; + reclaimScript: string; + /** Optional, output index (defaults to `0`) */ + vout?: number; + } & ({ txid: string } | { transaction: { id: string } })) { + return (await fetch(`${this.config.sbtcBridgeUrl}/api/emilyDeposit`, { + method: 'POST', + body: JSON.stringify({ + bitcoinTxid: 'txid' in tx ? tx.txid : tx.transaction.id, + bitcoinTxOutputIndex: vout, + depositScript, + reclaimScript, + url: this.config.sbtcApiUrl, + }), + }).then(res => res.json())) as SbtcApiNotifyResponse; } async fetchSignersPublicKey(contractAddress?: string): Promise { @@ -193,6 +220,15 @@ export class SbtcApiClient { return balance?.value?.value ?? 0; } + + async fetchDeposit({ txid, vout }: { txid: string; vout: number }) { + const params = new URLSearchParams(); + params.append('bitcoinTxid', txid); + params.append('vout', vout.toString()); + return await fetch(`${this.config.sbtcBridgeUrl}/api/emilyDeposit?${params}`).then(r => + r.json() + ); + } } /** todo */ @@ -201,9 +237,10 @@ export class SbtcApiClientTestnet extends SbtcApiClient { super( Object.assign( { - sbtcApiUrl: 'https://beta.sbtc-emily.com', btcApiUrl: 'https://beta.sbtc-mempool.tech/api/proxy', stxApiUrl: 'https://api.testnet.hiro.so', + sbtcApiUrl: 'https://beta.sbtc-emily.com', + sbtcBridgeUrl: 'https://staging.beta.sbtc.tech', /** ⚠︎ Attention: This contract address might still change over the course of the sBTC contract on Testnet */ sbtcContract: 'SNGWPN3XDAQE673MXYXF81016M50NHF5X5PWWM70', }, @@ -218,9 +255,10 @@ export class SbtcApiClientDevenv extends SbtcApiClient { super( Object.assign( { - sbtcApiUrl: 'http://localhost:3031', - btcApiUrl: 'http://localhost:3002', + btcApiUrl: 'http://localhost:3010/api/proxy', stxApiUrl: 'http://localhost:3999', + sbtcApiUrl: 'http://localhost:3031', + sbtcBridgeUrl: 'http://localhost:3010', sbtcContract: 'SN3R84XZYA63QS28932XQF3G1J8R9PC3W76P9CSQS', }, config diff --git a/packages/sbtc/tests/api.test.ts b/packages/sbtc/tests/api.test.ts index 0bda04166..d0001f183 100644 --- a/packages/sbtc/tests/api.test.ts +++ b/packages/sbtc/tests/api.test.ts @@ -2,10 +2,13 @@ import { describe, expect, test } from 'vitest'; import { REGTEST, SbtcApiClientDevenv, SbtcApiClientTestnet } from '../src'; import { WALLET_00, getBitcoinAccount, getStacksAccount } from './helpers/wallet'; import * as btc from '@scure/btc-signer'; +import { enableFetchLogging } from '../../internal/src'; const dev = new SbtcApiClientDevenv(); const tnet = new SbtcApiClientTestnet(); +enableFetchLogging(); + describe('testnet:', () => { test('fetch utxos', async () => { const wallet = await getBitcoinAccount(WALLET_00); @@ -13,6 +16,14 @@ describe('testnet:', () => { expect(unspent.length).toBeGreaterThan(0); }); + + test('fetch deposit', async () => { + const deposit = await tnet.fetchDeposit({ + txid: '684efcfa9ca7d447495ca00263a5c868541a236556a31973f61a83260751d912', + vout: 0, + }); + console.log(deposit); + }); }); describe('devenv:', () => { diff --git a/packages/sbtc/tests/deposit.test.ts b/packages/sbtc/tests/deposit.test.ts index 8c319ab72..9f5c4ed6b 100644 --- a/packages/sbtc/tests/deposit.test.ts +++ b/packages/sbtc/tests/deposit.test.ts @@ -1,9 +1,9 @@ import * as btc from '@scure/btc-signer'; import { hexToBytes } from '@stacks/common'; import { enableFetchLogging, waitForFulfilled } from '@stacks/internal'; -import { expect, test, vi } from 'vitest'; +import { describe, expect, test, vi } from 'vitest'; import createFetchMock from 'vitest-fetch-mock'; -import { SbtcApiClientDevenv, sbtcDepositHelper } from '../src'; +import { SbtcApiClientDevenv, SbtcApiClientTestnet, sbtcDepositHelper } from '../src'; import { WALLET_00, getBitcoinAccount, getStacksAccount } from './helpers/wallet'; import RpcClient from '@btc-helpers/rpc'; @@ -12,227 +12,273 @@ enableFetchLogging(); // enable if you want to record requests to network.txt fi // set globalThis.fetch and globalThis.fetchMock to mocked version // createFetchMock(vi).enableMocks(); -test('fetch signer address', async () => { - const dev = new SbtcApiClientDevenv(); - - await waitForFulfilled(function sbtcIsDeployed() { - return dev.fetchSignersPublicKey(); +describe('deposit devenv', () => { + test('btc tx, broadcast — raw fetch', async () => { + // TEST CASE + // Assumes a manually funded signers address and WALLET_00 wpkh address + + const bitcoinAccount = await getBitcoinAccount(WALLET_00); // wpkh bcrt1q3tj2fr9scwmcw3rq5m6jslva65f2rqjxfrjz47 (manually funded on devenv via bridge) + const stacksAccount = await getStacksAccount(WALLET_00); + + fetchMock.mockOnce( + `{"result":{"success":true,"txouts":342,"height":252,"bestblock":"71903ce6738b723dad54e3ad110b859e8c1bd6ba499d94b4b0b22a44b0c10b37","unspents":[{"txid":"51349ba2a37959a5d84826311a556cf5201aeae6ddeb94b8d254976d0d20c217","vout":0,"scriptPubKey":"00148ae4a48cb0c3b7874460a6f5287d9dd512a18246","desc":"addr(bcrt1q3tj2fr9scwmcw3rq5m6jslva65f2rqjxfrjz47)#gcletckr","amount":1,"coinbase":false,"height":241}],"total_amount":1}}` + ); + + const resScantxoutset = await fetch('http://localhost:3010/api/bitcoind', { + method: 'POST', + headers: { 'Content-Type': 'application/json' }, + body: `{"rpcMethod":"scantxoutset","params":["start",[{"desc":"addr(${bitcoinAccount.wpkh.address})","range":10000}]],"bitcoinDUrl":"http://bitcoin:18443/"}`, + }); + const jsonUtxo = await resScantxoutset.json(); + + fetchMock.mockOnce( + `{"result":"020000000150a4f0768a8ec85e76c8c049dd1839b2a6c8f35d79a5f0e0c1b23ed398cf8240000000006b4830450221008f19e4bc403136bad26e757647ccb45d8d0fc8d572da0adecd92194319be6e39022018830d39aabfbb76c037d450609466ae01d2e9a98167866d26379ce5cbf41a340121035379aa40c02890d253cfa577964116eb5295570ae9f7287cbae5f2585f5b2c7cffffffff0200e1f505000000001600148ae4a48cb0c3b7874460a6f5287d9dd512a18246e0c20f24010000001976a9141dc27eba0247f8cc9575e7d45e50a0bc7e72427d88ac00000000"}` + ); + + const txHexResponse = await fetch('http://localhost:3010/api/bitcoind', { + method: 'POST', + headers: { 'Content-Type': 'application/json' }, + body: JSON.stringify({ + rpcMethod: 'getrawtransaction', + params: [jsonUtxo.result.unspents[0].txid], + bitcoinDUrl: 'http://bitcoin:18443/', + }), + }); + const jsonTx = await txHexResponse.json(); + + // single utxo + const unspents = [{ ...jsonUtxo.result.unspents[0], tx: jsonTx.result }] as { + txid: string; + vout: number; + amount: number; + height: number; + scriptPubKey: string; + tx: string; + }[]; + + // ensure correct object format + const utxos = unspents.map(u => ({ + txid: u.txid, + vout: u.vout, + value: Math.floor(u.amount * 1e8), + tx: u.tx, + })); + + const dev = new SbtcApiClientDevenv(); + + fetchMock.mockResponse( + `{"okay":true,"result":"0x020000002103b6ad657d5428873633f6c3c948b4102bd697c1c8449425c1be1ff71992f98b74"}` + ); + + const pub = await dev.fetchSignersPublicKey(); + expect(pub).toBe('b6ad657d5428873633f6c3c948b4102bd697c1c8449425c1be1ff71992f98b74'); + + const signerAddress = await dev.fetchSignersAddress(); + expect(signerAddress).toBe('bcrt1paeulen354qzsstck3es7ur4c27ls5kyq8myvts7zmkyp4m6972kqwanet5'); + + // Tx building + const { + transaction: tx, + depositScript, + reclaimScript, + } = await sbtcDepositHelper({ + stacksAddress: stacksAccount.address, + amountSats: 5_000_000, + + signersPublicKey: pub, + + feeRate: 1, + utxos, + + bitcoinChangeAddress: bitcoinAccount.wpkh.address, + }); + + tx.sign(bitcoinAccount.privateKey); + tx.finalize(); + + fetchMock.mockOnce( + `{"result":[{"txid":"3cc72977efc12ceeddaf5589e53cb67525e798e0c67018eeffdc1c583e9c6005","wtxid":"0f8ce4916f6550f8af6de05bf2e8066a090694ff65cf5ba4f3a574c457a797b8","allowed":true,"vsize":153,"fees":{"base":0.00000189,"effective-feerate":0.00001235,"effective-includes":["0f8ce4916f6550f8af6de05bf2e8066a090694ff65cf5ba4f3a574c457a797b8"]}}]}` + ); + + const resTestmempoolaccept = await fetch('http://localhost:3010/api/bitcoind', { + body: `{"rpcMethod":"testmempoolaccept","params":[["${tx.hex}"]],"bitcoinDUrl":"http://bitcoin:18443/"}`, + method: 'POST', + }); + const jsonTestmempoolaccept = await resTestmempoolaccept.json(); + expect(jsonTestmempoolaccept.result[0].txid).toBe(tx.id); + + fetchMock.mockOnce( + `{"result":"3cc72977efc12ceeddaf5589e53cb67525e798e0c67018eeffdc1c583e9c6005"}` + ); + + const resBroadcast = await fetch('http://localhost:3010/api/bitcoind', { + body: `{"rpcMethod":"sendrawtransaction","params":["${tx.hex}"],"bitcoinDUrl":"http://bitcoin:18443/"}`, + method: 'POST', + }); + const jsonBroadcast = (await resBroadcast.json()) as { result: string }; + + fetchMock.mockOnce( + `{"bitcoinTxid":"3cc72977efc12ceeddaf5589e53cb67525e798e0c67018eeffdc1c583e9c6005","bitcoinTxOutputIndex":0,"recipient":"051a6d78de7b0625dfbfc16c3a8a5735f6dc3dc3f2ce","amount":0,"lastUpdateHeight":137,"lastUpdateBlockHash":"aa92e5d8af05a266e98ac9ed8bc1979029adaff556b8ca33ca6b216458a3a22c","status":"pending","statusMessage":"Just received deposit","parameters":{"maxFee":80000,"lockTime":6000},"reclaimScript":"027017b2","depositScript":"1e0000000000013880051a6d78de7b0625dfbfc16c3a8a5735f6dc3dc3f2ce7520b6ad657d5428873633f6c3c948b4102bd697c1c8449425c1be1ff71992f98b74ac"}` + ); + + const resEmilyDeposit = await fetch('http://localhost:3010/api/emilyDeposit', { + body: `{"bitcoinTxid":"${jsonBroadcast.result}","bitcoinTxOutputIndex":0,"reclaimScript":"${reclaimScript}","depositScript":"${depositScript}","url":"http://emily-server:3031"}`, + method: 'POST', + }); + const jsonEmilyDeposit = await resEmilyDeposit.json(); + expect(jsonEmilyDeposit.status).toBe('pending'); + expect(jsonEmilyDeposit.depositScript).toBe(depositScript); + expect(jsonEmilyDeposit.reclaimScript).toBe(reclaimScript); }); - const address = await dev.fetchSignersAddress(); - console.log('address', address); - - const bitcoinAccount = await getBitcoinAccount(WALLET_00); - - const rpc = new RpcClient('http://devnet:devnet@127.0.0.1:18443').Typed; - - let res = await rpc.generatetoaddress({ nblocks: 1, address }); - console.log('res', res); - - res = await rpc.generatetoaddress({ nblocks: 1, address: bitcoinAccount.wpkh.address }); - console.log('res', res); -}); - -test('btc tx, deposit to sbtc, broadcast — raw fetch', async () => { - // TEST CASE - // Assumes a manually funded signers address and WALLET_00 wpkh address + test('btc tx, broadcast — client proxy', async () => { + // TEST CASE + // Assumes a manually funded signers address and WALLET_00 wpkh address - const bitcoinAccount = await getBitcoinAccount(WALLET_00); // wpkh bcrt1q3tj2fr9scwmcw3rq5m6jslva65f2rqjxfrjz47 (manually funded on devenv via bridge) - const stacksAccount = await getStacksAccount(WALLET_00); - - fetchMock.mockOnce( - `{"result":{"success":true,"txouts":342,"height":252,"bestblock":"71903ce6738b723dad54e3ad110b859e8c1bd6ba499d94b4b0b22a44b0c10b37","unspents":[{"txid":"51349ba2a37959a5d84826311a556cf5201aeae6ddeb94b8d254976d0d20c217","vout":0,"scriptPubKey":"00148ae4a48cb0c3b7874460a6f5287d9dd512a18246","desc":"addr(bcrt1q3tj2fr9scwmcw3rq5m6jslva65f2rqjxfrjz47)#gcletckr","amount":1,"coinbase":false,"height":241}],"total_amount":1}}` - ); + const bitcoinAccount = await getBitcoinAccount(WALLET_00); // wpkh bcrt1q3tj2fr9scwmcw3rq5m6jslva65f2rqjxfrjz47 (manually funded on devenv via bridge) + const stacksAccount = await getStacksAccount(WALLET_00); - const resScantxoutset = await fetch('http://localhost:3010/api/bitcoind', { - method: 'POST', - headers: { 'Content-Type': 'application/json' }, - body: `{"rpcMethod":"scantxoutset","params":["start",[{"desc":"addr(${bitcoinAccount.wpkh.address})","range":10000}]],"bitcoinDUrl":"http://bitcoin:18443/"}`, - }); - const jsonUtxo = await resScantxoutset.json(); - - fetchMock.mockOnce( - `{"result":"020000000150a4f0768a8ec85e76c8c049dd1839b2a6c8f35d79a5f0e0c1b23ed398cf8240000000006b4830450221008f19e4bc403136bad26e757647ccb45d8d0fc8d572da0adecd92194319be6e39022018830d39aabfbb76c037d450609466ae01d2e9a98167866d26379ce5cbf41a340121035379aa40c02890d253cfa577964116eb5295570ae9f7287cbae5f2585f5b2c7cffffffff0200e1f505000000001600148ae4a48cb0c3b7874460a6f5287d9dd512a18246e0c20f24010000001976a9141dc27eba0247f8cc9575e7d45e50a0bc7e72427d88ac00000000"}` - ); - - const txHexResponse = await fetch('http://localhost:3010/api/bitcoind', { - method: 'POST', - headers: { 'Content-Type': 'application/json' }, - body: JSON.stringify({ - rpcMethod: 'getrawtransaction', - params: [jsonUtxo.result.unspents[0].txid], - bitcoinDUrl: 'http://bitcoin:18443/', - }), - }); - const jsonTx = await txHexResponse.json(); - - // single utxo - const unspents = [{ ...jsonUtxo.result.unspents[0], tx: jsonTx.result }] as { - txid: string; - vout: number; - amount: number; - height: number; - scriptPubKey: string; - tx: string; - }[]; + const dev = new SbtcApiClientDevenv(); - // ensure correct object format - const utxos = unspents.map(u => ({ - txid: u.txid, - vout: u.vout, - value: Math.floor(u.amount * 1e8), - tx: u.tx, - })); + const pub = await dev.fetchSignersPublicKey(); + expect(pub).toBe('f1934e22bddf0dff972cf91404ab0d1cb9d4797e07c310d47283b9100d762937'); - const dev = new SbtcApiClientDevenv(); + const signerAddress = await dev.fetchSignersAddress(); + expect(signerAddress).toBe('bcrt1p5yupkjf2k8fk0unqfz9l40putap6ls9satez6a86hgdryfz4zvwqv9jal3'); - fetchMock.mockResponse( - `{"okay":true,"result":"0x020000002103b6ad657d5428873633f6c3c948b4102bd697c1c8449425c1be1ff71992f98b74"}` - ); + const utxos = await dev.fetchUtxos(bitcoinAccount.wpkh.address); + expect(utxos.length).toBeGreaterThan(0); - const pub = await dev.fetchSignersPublicKey(); - expect(pub).toBe('b6ad657d5428873633f6c3c948b4102bd697c1c8449425c1be1ff71992f98b74'); + const utxosSigner = await dev.fetchUtxos(signerAddress); + expect(utxosSigner.length).toBeGreaterThan(0); - const signerAddress = await dev.fetchSignersAddress(); - expect(signerAddress).toBe('bcrt1paeulen354qzsstck3es7ur4c27ls5kyq8myvts7zmkyp4m6972kqwanet5'); + expect(await utxos[0].tx).toBeInstanceOf(String); - // Tx building - const { - transaction: tx, - depositScript, - reclaimScript, - } = await sbtcDepositHelper({ - stacksAddress: stacksAccount.address, - amountSats: 5_000_000, + // Tx building + const { + transaction: tx, + depositScript, + reclaimScript, + } = await sbtcDepositHelper({ + stacksAddress: stacksAccount.address, + amountSats: 5_000_000, - signersPublicKey: pub, + signersPublicKey: pub, - feeRate: 1, - utxos, + feeRate: 1, + utxos, - bitcoinChangeAddress: bitcoinAccount.wpkh.address, - }); + bitcoinChangeAddress: bitcoinAccount.wpkh.address, + }); - tx.sign(bitcoinAccount.privateKey); - tx.finalize(); + tx.sign(bitcoinAccount.privateKey); + tx.finalize(); - fetchMock.mockOnce( - `{"result":[{"txid":"3cc72977efc12ceeddaf5589e53cb67525e798e0c67018eeffdc1c583e9c6005","wtxid":"0f8ce4916f6550f8af6de05bf2e8066a090694ff65cf5ba4f3a574c457a797b8","allowed":true,"vsize":153,"fees":{"base":0.00000189,"effective-feerate":0.00001235,"effective-includes":["0f8ce4916f6550f8af6de05bf2e8066a090694ff65cf5ba4f3a574c457a797b8"]}}]}` - ); + fetchMock.mockOnce( + `{"result":[{"txid":"3cc72977efc12ceeddaf5589e53cb67525e798e0c67018eeffdc1c583e9c6005","wtxid":"0f8ce4916f6550f8af6de05bf2e8066a090694ff65cf5ba4f3a574c457a797b8","allowed":true,"vsize":153,"fees":{"base":0.00000189,"effective-feerate":0.00001235,"effective-includes":["0f8ce4916f6550f8af6de05bf2e8066a090694ff65cf5ba4f3a574c457a797b8"]}}]}` + ); - const resTestmempoolaccept = await fetch('http://localhost:3010/api/bitcoind', { - body: `{"rpcMethod":"testmempoolaccept","params":[["${tx.hex}"]],"bitcoinDUrl":"http://bitcoin:18443/"}`, - method: 'POST', - }); - const jsonTestmempoolaccept = await resTestmempoolaccept.json(); - expect(jsonTestmempoolaccept.result[0].txid).toBe(tx.id); + const resTestmempoolaccept = await fetch('http://localhost:3010/api/bitcoind', { + body: `{"rpcMethod":"testmempoolaccept","params":[["${tx.hex}"]],"bitcoinDUrl":"http://bitcoin:18443/"}`, + method: 'POST', + }); + const jsonTestmempoolaccept = await resTestmempoolaccept.json(); + expect(jsonTestmempoolaccept.result[0].txid).toBe(tx.id); - fetchMock.mockOnce( - `{"result":"3cc72977efc12ceeddaf5589e53cb67525e798e0c67018eeffdc1c583e9c6005"}` - ); + fetchMock.mockOnce( + `{"result":"3cc72977efc12ceeddaf5589e53cb67525e798e0c67018eeffdc1c583e9c6005"}` + ); - const resBroadcast = await fetch('http://localhost:3010/api/bitcoind', { - body: `{"rpcMethod":"sendrawtransaction","params":["${tx.hex}"],"bitcoinDUrl":"http://bitcoin:18443/"}`, - method: 'POST', - }); - const jsonBroadcast = (await resBroadcast.json()) as { result: string }; + const resBroadcast = await fetch('http://localhost:3010/api/bitcoind', { + body: `{"rpcMethod":"sendrawtransaction","params":["${tx.hex}"],"bitcoinDUrl":"http://bitcoin:18443/"}`, + method: 'POST', + }); + const jsonBroadcast = (await resBroadcast.json()) as { result: string }; - fetchMock.mockOnce( - `{"bitcoinTxid":"3cc72977efc12ceeddaf5589e53cb67525e798e0c67018eeffdc1c583e9c6005","bitcoinTxOutputIndex":0,"recipient":"051a6d78de7b0625dfbfc16c3a8a5735f6dc3dc3f2ce","amount":0,"lastUpdateHeight":137,"lastUpdateBlockHash":"aa92e5d8af05a266e98ac9ed8bc1979029adaff556b8ca33ca6b216458a3a22c","status":"pending","statusMessage":"Just received deposit","parameters":{"maxFee":80000,"lockTime":6000},"reclaimScript":"027017b2","depositScript":"1e0000000000013880051a6d78de7b0625dfbfc16c3a8a5735f6dc3dc3f2ce7520b6ad657d5428873633f6c3c948b4102bd697c1c8449425c1be1ff71992f98b74ac"}` - ); + fetchMock.mockOnce( + `{"bitcoinTxid":"3cc72977efc12ceeddaf5589e53cb67525e798e0c67018eeffdc1c583e9c6005","bitcoinTxOutputIndex":0,"recipient":"051a6d78de7b0625dfbfc16c3a8a5735f6dc3dc3f2ce","amount":0,"lastUpdateHeight":137,"lastUpdateBlockHash":"aa92e5d8af05a266e98ac9ed8bc1979029adaff556b8ca33ca6b216458a3a22c","status":"pending","statusMessage":"Just received deposit","parameters":{"maxFee":80000,"lockTime":6000},"reclaimScript":"027017b2","depositScript":"1e0000000000013880051a6d78de7b0625dfbfc16c3a8a5735f6dc3dc3f2ce7520b6ad657d5428873633f6c3c948b4102bd697c1c8449425c1be1ff71992f98b74ac"}` + ); - const resEmilyDeposit = await fetch('http://localhost:3010/api/emilyDeposit', { - body: `{"bitcoinTxid":"${jsonBroadcast.result}","bitcoinTxOutputIndex":0,"reclaimScript":"${reclaimScript}","depositScript":"${depositScript}","url":"http://emily-server:3031"}`, - method: 'POST', + const resEmilyDeposit = await fetch('http://localhost:3010/api/emilyDeposit', { + body: `{"bitcoinTxid":"${jsonBroadcast.result}","bitcoinTxOutputIndex":0,"reclaimScript":"${reclaimScript}","depositScript":"${depositScript}","url":"http://emily-server:3031"}`, + method: 'POST', + }); + const jsonEmilyDeposit = await resEmilyDeposit.json(); + expect(jsonEmilyDeposit.status).toBe('pending'); + expect(jsonEmilyDeposit.depositScript).toBe(depositScript); + expect(jsonEmilyDeposit.reclaimScript).toBe(reclaimScript); }); - const jsonEmilyDeposit = await resEmilyDeposit.json(); - expect(jsonEmilyDeposit.status).toBe('pending'); - expect(jsonEmilyDeposit.depositScript).toBe(depositScript); - expect(jsonEmilyDeposit.reclaimScript).toBe(reclaimScript); }); -test('btc tx, deposit to sbtc, broadcast — client proxy', async () => { - // TEST CASE - // Assumes a manually funded signers address and WALLET_00 wpkh address - - const bitcoinAccount = await getBitcoinAccount(WALLET_00); // wpkh bcrt1q3tj2fr9scwmcw3rq5m6jslva65f2rqjxfrjz47 (manually funded on devenv via bridge) - const stacksAccount = await getStacksAccount(WALLET_00); - - const dev = new SbtcApiClientDevenv({ - btcApiUrl: 'http://localhost:3010/api/proxy', - }); - - const pub = await dev.fetchSignersPublicKey(); - expect(pub).toBe('f1934e22bddf0dff972cf91404ab0d1cb9d4797e07c310d47283b9100d762937'); - - const signerAddress = await dev.fetchSignersAddress(); - expect(signerAddress).toBe('bcrt1p5yupkjf2k8fk0unqfz9l40putap6ls9satez6a86hgdryfz4zvwqv9jal3'); - - const utxos = await dev.fetchUtxos(bitcoinAccount.wpkh.address); - expect(utxos.length).toBeGreaterThan(0); - - const utxosSigner = await dev.fetchUtxos(signerAddress); - expect(utxosSigner.length).toBeGreaterThan(0); - - expect(await utxos[0].tx).toBeInstanceOf(String); - return; - - // Tx building - const { - transaction: tx, - depositScript, - reclaimScript, - } = await sbtcDepositHelper({ - stacksAddress: stacksAccount.address, - amountSats: 5_000_000, - - signersPublicKey: pub, - - feeRate: 1, - utxos, - - bitcoinChangeAddress: bitcoinAccount.wpkh.address, - }); - - tx.sign(bitcoinAccount.privateKey); - tx.finalize(); - - fetchMock.mockOnce( - `{"result":[{"txid":"3cc72977efc12ceeddaf5589e53cb67525e798e0c67018eeffdc1c583e9c6005","wtxid":"0f8ce4916f6550f8af6de05bf2e8066a090694ff65cf5ba4f3a574c457a797b8","allowed":true,"vsize":153,"fees":{"base":0.00000189,"effective-feerate":0.00001235,"effective-includes":["0f8ce4916f6550f8af6de05bf2e8066a090694ff65cf5ba4f3a574c457a797b8"]}}]}` - ); - - const resTestmempoolaccept = await fetch('http://localhost:3010/api/bitcoind', { - body: `{"rpcMethod":"testmempoolaccept","params":[["${tx.hex}"]],"bitcoinDUrl":"http://bitcoin:18443/"}`, - method: 'POST', - }); - const jsonTestmempoolaccept = await resTestmempoolaccept.json(); - expect(jsonTestmempoolaccept.result[0].txid).toBe(tx.id); - - fetchMock.mockOnce( - `{"result":"3cc72977efc12ceeddaf5589e53cb67525e798e0c67018eeffdc1c583e9c6005"}` - ); - - const resBroadcast = await fetch('http://localhost:3010/api/bitcoind', { - body: `{"rpcMethod":"sendrawtransaction","params":["${tx.hex}"],"bitcoinDUrl":"http://bitcoin:18443/"}`, - method: 'POST', - }); - const jsonBroadcast = (await resBroadcast.json()) as { result: string }; - - fetchMock.mockOnce( - `{"bitcoinTxid":"3cc72977efc12ceeddaf5589e53cb67525e798e0c67018eeffdc1c583e9c6005","bitcoinTxOutputIndex":0,"recipient":"051a6d78de7b0625dfbfc16c3a8a5735f6dc3dc3f2ce","amount":0,"lastUpdateHeight":137,"lastUpdateBlockHash":"aa92e5d8af05a266e98ac9ed8bc1979029adaff556b8ca33ca6b216458a3a22c","status":"pending","statusMessage":"Just received deposit","parameters":{"maxFee":80000,"lockTime":6000},"reclaimScript":"027017b2","depositScript":"1e0000000000013880051a6d78de7b0625dfbfc16c3a8a5735f6dc3dc3f2ce7520b6ad657d5428873633f6c3c948b4102bd697c1c8449425c1be1ff71992f98b74ac"}` - ); - - const resEmilyDeposit = await fetch('http://localhost:3010/api/emilyDeposit', { - body: `{"bitcoinTxid":"${jsonBroadcast.result}","bitcoinTxOutputIndex":0,"reclaimScript":"${reclaimScript}","depositScript":"${depositScript}","url":"http://emily-server:3031"}`, - method: 'POST', +describe('deposit testnet', () => { + test('btc tx, broadcast — client proxy', async () => { + // TEST CASE + // Assumes a manually funded WALLET_00 wpkh address + + const bitcoinAccount = await getBitcoinAccount(WALLET_00); // wpkh bcrt1q3tj2fr9scwmcw3rq5m6jslva65f2rqjxfrjz47 (manually funded on devenv via bridge) + const stacksAccount = await getStacksAccount(WALLET_00); + + const tnet = new SbtcApiClientTestnet(); + + // fetchMock.mockResponse( + // `{"okay":true,"result":"0x0200000021024ea6e657117bc8168254b8943e55a65997c71b3994e1e2915002a9da0c22ee1e"}` + // ); + const pub = await tnet.fetchSignersPublicKey(); + expect(pub).toBe('4ea6e657117bc8168254b8943e55a65997c71b3994e1e2915002a9da0c22ee1e'); + + const signerAddress = await tnet.fetchSignersAddress(); + expect(signerAddress).toBe('bcrt1p534swhsspmeepqu8gcg9ehu95ny74kch6rlu4er3zml0saxds0cqwpn73n'); + + // fetchMock.mockOnce( + // `[{"txid":"2095d57185bdfca2b07456c60e3c7b853f51660fcb071d386cbbffe7e7630ea3","vout":0,"scriptPubKey":"00148ae4a48cb0c3b7874460a6f5287d9dd512a18246","status":{"confirmed":true,"block_height":76156,"block_hash":"0e48c180d554333816fca68c5de7c87cf44e3e2f87c503368d7a0d5dc744e1b5","block_time":1733510080},"value":50000000}]`, + // ); + const utxos = await tnet.fetchUtxos(bitcoinAccount.wpkh.address); + expect(utxos.length).toBeGreaterThan(0); + + // fetchMock.mockOnce( + // `[{"txid":"68f0a31be2d80c52599cbc0b88d07b4e1ca1d749daebaedbb06bdecbd7afbce0","vout":0,"scriptPubKey":"5120a46b075e100ef390838746105cdf85a4c9eadb17d0ffcae47116fef874cd83f0","status":{"confirmed":true,"block_height":77308,"block_hash":"0e48c180d554333816fca68c5de7c87cf44e3e2f87c503368d7a0d5dc744e1b5","block_time":1733510080},"value":225673939}]`, + // ); + const utxosSigner = await tnet.fetchUtxos(signerAddress); + expect(utxosSigner.length).toBeGreaterThan(0); + + // fetchMock.mockResponse( + // `"02000000018759eeec0f4e35663081ca2df21897d6003da0d0eb16d5be02dd58e3001ddd5a010000006a473044022004bd0273ce1349c2d85c476bf5060922ee92287f7a4bc697635bcf204015ccad02206c0d1afe2f9079cfa8cfd26d59395732157f83f1e9f2dbea1af6c8dda0bc696501210254ec0be893c64ca843baaaac650f7a278c5078f2f115d7d8a751f176f4460eb5ffffffff0280f0fa02000000001600148ae4a48cb0c3b7874460a6f5287d9dd512a182461870b3ee010000001976a9145f111ba7d289989af165d4d1f75863a61268c30788ac00000000"`, + // ); + expect(await utxos[0].tx).toBeTypeOf('string'); // full tx hexes can be fetched + + // Tx building + const { + transaction: tx, + depositScript, + reclaimScript, + } = await sbtcDepositHelper({ + stacksAddress: stacksAccount.address, + amountSats: 5_000_000, + + signersPublicKey: pub, + + feeRate: 1, + utxos, + + bitcoinChangeAddress: bitcoinAccount.wpkh.address, + }); + + tx.sign(bitcoinAccount.privateKey); + tx.finalize(); + + // fetchMock.mockOnce( + // "58830aaa68af737b772b7db155d70005ae7ae0e212673232ca8100e0337660cd" + // ); + const txid = await tnet.broadcastTx(tx); + + const notify = await tnet.notifySbtcBridge({ txid, depositScript, reclaimScript }); + expect(notify.status).toBe('pending'); + expect(notify.depositScript).toBe(depositScript); + expect(notify.reclaimScript).toBe(reclaimScript); }); - const jsonEmilyDeposit = await resEmilyDeposit.json(); - expect(jsonEmilyDeposit.status).toBe('pending'); - expect(jsonEmilyDeposit.depositScript).toBe(depositScript); - expect(jsonEmilyDeposit.reclaimScript).toBe(reclaimScript); }); -test('btc tx, deposit to sbtc, tx compare to cli', async () => { +test('btc tx — compare to cli', async () => { // TEST CASE // Compares a JS generated transactions outputs to a test vector created with the CLI From ecb4465f1cd1a51a15ffb668f9023522217804e1 Mon Sep 17 00:00:00 2001 From: janniks Date: Fri, 6 Dec 2024 19:02:35 -0500 Subject: [PATCH 43/49] fix: update emily deposit --- packages/sbtc/package.json | 2 +- packages/sbtc/src/api.ts | 79 +++++++++++++++++------------ packages/sbtc/tests/api.test.ts | 35 ++++++++++--- packages/sbtc/tests/deposit.test.ts | 44 ++++++++-------- 4 files changed, 101 insertions(+), 59 deletions(-) diff --git a/packages/sbtc/package.json b/packages/sbtc/package.json index 71472d192..0b7573232 100644 --- a/packages/sbtc/package.json +++ b/packages/sbtc/package.json @@ -1,6 +1,6 @@ { "name": "sbtc", - "version": "0.2.3", + "version": "0.2.4", "description": "Library for sBTC.", "license": "MIT", "author": "Hiro Systems PBC (https://hiro.so)", diff --git a/packages/sbtc/src/api.ts b/packages/sbtc/src/api.ts index 9f2f9f8c3..c00227721 100644 --- a/packages/sbtc/src/api.ts +++ b/packages/sbtc/src/api.ts @@ -66,7 +66,7 @@ export interface BaseClientConfig { btcApiUrl: string; stxApiUrl: string; sbtcApiUrl: string; - sbtcBridgeUrl: string; + // sbtcBridgeUrl: string; } export class SbtcApiClient { @@ -103,7 +103,7 @@ export class SbtcApiClient { return await fetch(`${this.config.btcApiUrl}/tx`, { method: 'POST', body: tx.hex, - }).then(res => res.text()); + }).then(res => res.json() as Promise); } async notifySbtc({ @@ -119,6 +119,11 @@ export class SbtcApiClient { } & ({ txid: string } | { transaction: { id: string } })) { return (await fetch(`${this.config.sbtcApiUrl}/deposit`, { method: 'POST', + headers: { + // needed for CORS + Accept: 'application/json', + 'Content-Type': 'application/json', + }, body: JSON.stringify({ bitcoinTxid: 'txid' in tx ? tx.txid : tx.transaction.id, bitcoinTxOutputIndex: vout, @@ -129,28 +134,28 @@ export class SbtcApiClient { } /** Proxies the Emily `/deposit` request via the bridge */ - async notifySbtcBridge({ - depositScript, - reclaimScript, - vout = 0, - ...tx - }: { - depositScript: string; - reclaimScript: string; - /** Optional, output index (defaults to `0`) */ - vout?: number; - } & ({ txid: string } | { transaction: { id: string } })) { - return (await fetch(`${this.config.sbtcBridgeUrl}/api/emilyDeposit`, { - method: 'POST', - body: JSON.stringify({ - bitcoinTxid: 'txid' in tx ? tx.txid : tx.transaction.id, - bitcoinTxOutputIndex: vout, - depositScript, - reclaimScript, - url: this.config.sbtcApiUrl, - }), - }).then(res => res.json())) as SbtcApiNotifyResponse; - } + // async notifySbtcBridge({ + // depositScript, + // reclaimScript, + // vout = 0, + // ...tx + // }: { + // depositScript: string; + // reclaimScript: string; + // /** Optional, output index (defaults to `0`) */ + // vout?: number; + // } & ({ txid: string } | { transaction: { id: string } })) { + // return (await fetch(`${this.config.sbtcBridgeUrl}/api/emilyDeposit`, { + // method: 'POST', + // body: JSON.stringify({ + // bitcoinTxid: 'txid' in tx ? tx.txid : tx.transaction.id, + // bitcoinTxOutputIndex: vout, + // depositScript, + // reclaimScript, + // url: this.config.sbtcApiUrl, + // }), + // }).then(res => res.json())) as SbtcApiNotifyResponse; + // } async fetchSignersPublicKey(contractAddress?: string): Promise { const res = (await fetchCallReadOnlyFunction({ @@ -221,16 +226,26 @@ export class SbtcApiClient { return balance?.value?.value ?? 0; } - async fetchDeposit({ txid, vout }: { txid: string; vout: number }) { - const params = new URLSearchParams(); - params.append('bitcoinTxid', txid); - params.append('vout', vout.toString()); - return await fetch(`${this.config.sbtcBridgeUrl}/api/emilyDeposit?${params}`).then(r => - r.json() + async fetchDeposit(txid: string): Promise; + async fetchDeposit({ + txid, + vout = 0, + }: { + txid: string; + vout: number; + }): Promise; + async fetchDeposit(param: string | { txid: string; vout: number }) { + if (typeof param === 'string') return this.fetchDeposit({ txid: param, vout: 0 }); + + const { txid, vout } = param; + return await fetch(`${this.config.sbtcApiUrl}/deposit/${txid}/${vout}`).then( + r => r.json() as Promise ); } } +// todo: add async fetchDeposits('pending' | 'confirmed') + /** todo */ export class SbtcApiClientTestnet extends SbtcApiClient { constructor(config?: Partial) { @@ -240,7 +255,7 @@ export class SbtcApiClientTestnet extends SbtcApiClient { btcApiUrl: 'https://beta.sbtc-mempool.tech/api/proxy', stxApiUrl: 'https://api.testnet.hiro.so', sbtcApiUrl: 'https://beta.sbtc-emily.com', - sbtcBridgeUrl: 'https://staging.beta.sbtc.tech', + // sbtcBridgeUrl: 'https://staging.beta.sbtc.tech', /** ⚠︎ Attention: This contract address might still change over the course of the sBTC contract on Testnet */ sbtcContract: 'SNGWPN3XDAQE673MXYXF81016M50NHF5X5PWWM70', }, @@ -258,7 +273,7 @@ export class SbtcApiClientDevenv extends SbtcApiClient { btcApiUrl: 'http://localhost:3010/api/proxy', stxApiUrl: 'http://localhost:3999', sbtcApiUrl: 'http://localhost:3031', - sbtcBridgeUrl: 'http://localhost:3010', + // sbtcBridgeUrl: 'http://localhost:3010', sbtcContract: 'SN3R84XZYA63QS28932XQF3G1J8R9PC3W76P9CSQS', }, config diff --git a/packages/sbtc/tests/api.test.ts b/packages/sbtc/tests/api.test.ts index d0001f183..d8f5d3254 100644 --- a/packages/sbtc/tests/api.test.ts +++ b/packages/sbtc/tests/api.test.ts @@ -1,16 +1,22 @@ -import { describe, expect, test } from 'vitest'; +import * as btc from '@scure/btc-signer'; +import { describe, expect, test, vi } from 'vitest'; +import createFetchMock from 'vitest-fetch-mock'; import { REGTEST, SbtcApiClientDevenv, SbtcApiClientTestnet } from '../src'; import { WALLET_00, getBitcoinAccount, getStacksAccount } from './helpers/wallet'; -import * as btc from '@scure/btc-signer'; -import { enableFetchLogging } from '../../internal/src'; const dev = new SbtcApiClientDevenv(); const tnet = new SbtcApiClientTestnet(); -enableFetchLogging(); +// enableFetchLogging(); + +createFetchMock(vi).enableMocks(); describe('testnet:', () => { test('fetch utxos', async () => { + fetchMock.mockOnce( + `[{"txid":"8d88c3878d172acd1fccf1763479b27d3287b67a14ef7ec5d36dc6335fd531fd","vout":1,"scriptPubKey":"00148ae4a48cb0c3b7874460a6f5287d9dd512a18246","status":{"confirmed":true,"block_height":77533,"block_hash":"35857448db9dfd9817c70e7e40eb1794853b7507893aac1703a40d1af44b2ddc","block_time":1733529658},"value":9998488}]` + ); + const wallet = await getBitcoinAccount(WALLET_00); const unspent = await tnet.fetchUtxos(wallet.wpkh.address); @@ -18,11 +24,28 @@ describe('testnet:', () => { }); test('fetch deposit', async () => { + fetchMock.mockOnce( + `{"bitcoinTxid":"a9a451fa6b0a5c387c997e4a229f1625574b56560559cd75d3c89a0c2ee302ac","bitcoinTxOutputIndex":0,"recipient":"051a6d78de7b0625dfbfc16c3a8a5735f6dc3dc3f2ce","amount":0,"lastUpdateHeight":200990,"lastUpdateBlockHash":"86fd8c3d197dd7c0214ba74938d12dc6a9b0895729f872c7fec8c67a81e56fe3","status":"pending","statusMessage":"Just received deposit","parameters":{"maxFee":80000,"lockTime":6000},"reclaimScript":"027017b2","depositScript":"1e0000000000013880051a6d78de7b0625dfbfc16c3a8a5735f6dc3dc3f2ce75204ea6e657117bc8168254b8943e55a65997c71b3994e1e2915002a9da0c22ee1eac"}` + ); + const deposit = await tnet.fetchDeposit({ - txid: '684efcfa9ca7d447495ca00263a5c868541a236556a31973f61a83260751d912', + txid: 'a9a451fa6b0a5c387c997e4a229f1625574b56560559cd75d3c89a0c2ee302ac', vout: 0, }); - console.log(deposit); + expect(deposit).toEqual({ + bitcoinTxid: 'a9a451fa6b0a5c387c997e4a229f1625574b56560559cd75d3c89a0c2ee302ac', + bitcoinTxOutputIndex: 0, + recipient: '051a6d78de7b0625dfbfc16c3a8a5735f6dc3dc3f2ce', + amount: 0, + lastUpdateHeight: 200_990, + lastUpdateBlockHash: '86fd8c3d197dd7c0214ba74938d12dc6a9b0895729f872c7fec8c67a81e56fe3', + status: 'pending', + statusMessage: 'Just received deposit', + parameters: { maxFee: 80_000, lockTime: 6_000 }, + reclaimScript: '027017b2', + depositScript: + '1e0000000000013880051a6d78de7b0625dfbfc16c3a8a5735f6dc3dc3f2ce75204ea6e657117bc8168254b8943e55a65997c71b3994e1e2915002a9da0c22ee1eac', + }); }); }); diff --git a/packages/sbtc/tests/deposit.test.ts b/packages/sbtc/tests/deposit.test.ts index 9f5c4ed6b..383662eed 100644 --- a/packages/sbtc/tests/deposit.test.ts +++ b/packages/sbtc/tests/deposit.test.ts @@ -1,16 +1,14 @@ import * as btc from '@scure/btc-signer'; import { hexToBytes } from '@stacks/common'; -import { enableFetchLogging, waitForFulfilled } from '@stacks/internal'; import { describe, expect, test, vi } from 'vitest'; import createFetchMock from 'vitest-fetch-mock'; import { SbtcApiClientDevenv, SbtcApiClientTestnet, sbtcDepositHelper } from '../src'; import { WALLET_00, getBitcoinAccount, getStacksAccount } from './helpers/wallet'; -import RpcClient from '@btc-helpers/rpc'; -enableFetchLogging(); // enable if you want to record requests to network.txt file +// enableFetchLogging(); // enable if you want to record requests to network.txt file // set globalThis.fetch and globalThis.fetchMock to mocked version -// createFetchMock(vi).enableMocks(); +createFetchMock(vi).enableMocks(); describe('deposit devenv', () => { test('btc tx, broadcast — raw fetch', async () => { @@ -140,6 +138,10 @@ describe('deposit devenv', () => { const dev = new SbtcApiClientDevenv(); + fetchMock.mockResponse( + `{"okay":true,"result":"0x020000002103b6ad657d5428873633f6c3c948b4102bd697c1c8449425c1be1ff71992f98b74"}` + ); + const pub = await dev.fetchSignersPublicKey(); expect(pub).toBe('f1934e22bddf0dff972cf91404ab0d1cb9d4797e07c310d47283b9100d762937'); @@ -220,30 +222,30 @@ describe('deposit testnet', () => { const tnet = new SbtcApiClientTestnet(); - // fetchMock.mockResponse( - // `{"okay":true,"result":"0x0200000021024ea6e657117bc8168254b8943e55a65997c71b3994e1e2915002a9da0c22ee1e"}` - // ); + fetchMock.mockResponse( + `{"okay":true,"result":"0x0200000021024ea6e657117bc8168254b8943e55a65997c71b3994e1e2915002a9da0c22ee1e"}` + ); const pub = await tnet.fetchSignersPublicKey(); expect(pub).toBe('4ea6e657117bc8168254b8943e55a65997c71b3994e1e2915002a9da0c22ee1e'); const signerAddress = await tnet.fetchSignersAddress(); expect(signerAddress).toBe('bcrt1p534swhsspmeepqu8gcg9ehu95ny74kch6rlu4er3zml0saxds0cqwpn73n'); - // fetchMock.mockOnce( - // `[{"txid":"2095d57185bdfca2b07456c60e3c7b853f51660fcb071d386cbbffe7e7630ea3","vout":0,"scriptPubKey":"00148ae4a48cb0c3b7874460a6f5287d9dd512a18246","status":{"confirmed":true,"block_height":76156,"block_hash":"0e48c180d554333816fca68c5de7c87cf44e3e2f87c503368d7a0d5dc744e1b5","block_time":1733510080},"value":50000000}]`, - // ); + fetchMock.mockOnce( + `[{"txid":"5a4968eb88da4a62aca8cbae6d9d29cd91ba30d5cca843072f3023186aab5dae","vout":1,"scriptPubKey":"00148ae4a48cb0c3b7874460a6f5287d9dd512a18246","status":{"confirmed":true,"block_height":77518,"block_hash":"6e9934b83908e999f22dd651b3d77df7315d4f079846ddc8adb7d844325d180f","block_time":1733529138},"value":14998677}]` + ); const utxos = await tnet.fetchUtxos(bitcoinAccount.wpkh.address); expect(utxos.length).toBeGreaterThan(0); - // fetchMock.mockOnce( - // `[{"txid":"68f0a31be2d80c52599cbc0b88d07b4e1ca1d749daebaedbb06bdecbd7afbce0","vout":0,"scriptPubKey":"5120a46b075e100ef390838746105cdf85a4c9eadb17d0ffcae47116fef874cd83f0","status":{"confirmed":true,"block_height":77308,"block_hash":"0e48c180d554333816fca68c5de7c87cf44e3e2f87c503368d7a0d5dc744e1b5","block_time":1733510080},"value":225673939}]`, - // ); + fetchMock.mockOnce( + `[{"txid":"68f0a31be2d80c52599cbc0b88d07b4e1ca1d749daebaedbb06bdecbd7afbce0","vout":0,"scriptPubKey":"5120a46b075e100ef390838746105cdf85a4c9eadb17d0ffcae47116fef874cd83f0","status":{"confirmed":true,"block_height":77308,"block_hash":"6e9934b83908e999f22dd651b3d77df7315d4f079846ddc8adb7d844325d180f","block_time":1733529139},"value":225673939}]` + ); const utxosSigner = await tnet.fetchUtxos(signerAddress); expect(utxosSigner.length).toBeGreaterThan(0); - // fetchMock.mockResponse( - // `"02000000018759eeec0f4e35663081ca2df21897d6003da0d0eb16d5be02dd58e3001ddd5a010000006a473044022004bd0273ce1349c2d85c476bf5060922ee92287f7a4bc697635bcf204015ccad02206c0d1afe2f9079cfa8cfd26d59395732157f83f1e9f2dbea1af6c8dda0bc696501210254ec0be893c64ca843baaaac650f7a278c5078f2f115d7d8a751f176f4460eb5ffffffff0280f0fa02000000001600148ae4a48cb0c3b7874460a6f5287d9dd512a182461870b3ee010000001976a9145f111ba7d289989af165d4d1f75863a61268c30788ac00000000"`, - // ); + fetchMock.mockOnce( + `0200000001ac02e32e0c9ac8d375cd590556564b5725169f224a7e997c385c0a6bfa51a4a90100000000ffffffff02404b4c00000000002251203a1a17c591190f4cd7a3b59320fb5ef8f05b4b9058e113074efae0ebbe4df22f95dce400000000001600148ae4a48cb0c3b7874460a6f5287d9dd512a1824600000000` + ); expect(await utxos[0].tx).toBeTypeOf('string'); // full tx hexes can be fetched // Tx building @@ -266,12 +268,14 @@ describe('deposit testnet', () => { tx.sign(bitcoinAccount.privateKey); tx.finalize(); - // fetchMock.mockOnce( - // "58830aaa68af737b772b7db155d70005ae7ae0e212673232ca8100e0337660cd" - // ); + fetchMock.mockOnce(`"8d88c3878d172acd1fccf1763479b27d3287b67a14ef7ec5d36dc6335fd531fd"`); const txid = await tnet.broadcastTx(tx); - const notify = await tnet.notifySbtcBridge({ txid, depositScript, reclaimScript }); + fetchMock.mockOnce( + `{"bitcoinTxid":"8d88c3878d172acd1fccf1763479b27d3287b67a14ef7ec5d36dc6335fd531fd","bitcoinTxOutputIndex":0,"recipient":"051a6d78de7b0625dfbfc16c3a8a5735f6dc3dc3f2ce","amount":0,"lastUpdateHeight":201059,"lastUpdateBlockHash":"083222f99686f9bd63859e2af6497df020fdb0eca9609ed41d82a9bdb1b31254","status":"pending","statusMessage":"Just received deposit","parameters":{"maxFee":80000,"lockTime":6000},"reclaimScript":"027017b2","depositScript":"1e0000000000013880051a6d78de7b0625dfbfc16c3a8a5735f6dc3dc3f2ce75204ea6e657117bc8168254b8943e55a65997c71b3994e1e2915002a9da0c22ee1eac"}` + ); + + const notify = await tnet.notifySbtc({ txid, depositScript, reclaimScript }); expect(notify.status).toBe('pending'); expect(notify.depositScript).toBe(depositScript); expect(notify.reclaimScript).toBe(reclaimScript); From 0e4c3aa52d72e096211a77ed1e95f6fbbe95e0e4 Mon Sep 17 00:00:00 2001 From: janniks Date: Thu, 12 Dec 2024 09:51:54 -0500 Subject: [PATCH 44/49] fix: update the broadcast headers --- packages/sbtc/package.json | 2 +- packages/sbtc/src/api.ts | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/packages/sbtc/package.json b/packages/sbtc/package.json index 0b7573232..d82f8a285 100644 --- a/packages/sbtc/package.json +++ b/packages/sbtc/package.json @@ -1,6 +1,6 @@ { "name": "sbtc", - "version": "0.2.4", + "version": "0.2.5", "description": "Library for sBTC.", "license": "MIT", "author": "Hiro Systems PBC (https://hiro.so)", diff --git a/packages/sbtc/src/api.ts b/packages/sbtc/src/api.ts index c00227721..ffcd814e4 100644 --- a/packages/sbtc/src/api.ts +++ b/packages/sbtc/src/api.ts @@ -102,6 +102,7 @@ export class SbtcApiClient { async broadcastTx(tx: btc.Transaction): Promise { return await fetch(`${this.config.btcApiUrl}/tx`, { method: 'POST', + headers: { 'Content-Type': 'text/plain' }, body: tx.hex, }).then(res => res.json() as Promise); } From a84863fa3935123d4895f665a6c9f484bd083de6 Mon Sep 17 00:00:00 2001 From: janniks Date: Fri, 13 Dec 2024 16:27:10 -0500 Subject: [PATCH 45/49] fix: implement reclaim and update defaults --- package-lock.json | 2 +- packages/internal/src/apiMockingHelpers.ts | 2 +- packages/sbtc/package.json | 2 +- packages/sbtc/src/api.ts | 8 +- packages/sbtc/src/transactions/deposit.ts | 205 +++++++++++++++++++-- packages/sbtc/tests/api.test.ts | 6 + packages/sbtc/tests/deposit.test.ts | 135 +++++++++++++- 7 files changed, 334 insertions(+), 26 deletions(-) diff --git a/package-lock.json b/package-lock.json index 9432fb308..31a2d73ac 100644 --- a/package-lock.json +++ b/package-lock.json @@ -23724,7 +23724,7 @@ } }, "packages/sbtc": { - "version": "0.1.9", + "version": "0.2.6", "license": "MIT", "dependencies": { "@btc-helpers/rpc": "^2.0.0", diff --git a/packages/internal/src/apiMockingHelpers.ts b/packages/internal/src/apiMockingHelpers.ts index 6f667c894..191217102 100644 --- a/packages/internal/src/apiMockingHelpers.ts +++ b/packages/internal/src/apiMockingHelpers.ts @@ -198,7 +198,7 @@ export function enableFetchLogging() { .json() .catch(() => r.clone().text()); const url = input instanceof Request ? input.url : input; - const log = `'${url}': \`${JSON.stringify(response)}\`,`; + const log = `'${url}': \`${r.headers.get('content-type')?.includes('application/json') ? JSON.stringify(response) : response}\`,`; fs.appendFileSync('network.txt', `${log}\n`); return r; }; diff --git a/packages/sbtc/package.json b/packages/sbtc/package.json index d82f8a285..c45608a75 100644 --- a/packages/sbtc/package.json +++ b/packages/sbtc/package.json @@ -1,6 +1,6 @@ { "name": "sbtc", - "version": "0.2.5", + "version": "0.2.6", "description": "Library for sBTC.", "license": "MIT", "author": "Hiro Systems PBC (https://hiro.so)", diff --git a/packages/sbtc/src/api.ts b/packages/sbtc/src/api.ts index ffcd814e4..454764c52 100644 --- a/packages/sbtc/src/api.ts +++ b/packages/sbtc/src/api.ts @@ -86,7 +86,13 @@ export class SbtcApiClient { } async fetchTxHex(txid: string): Promise { - return fetch(`${this.config.btcApiUrl}/tx/${txid}/hex`).then(res => res.text()); + return fetch(`${this.config.btcApiUrl}/tx/${txid}/hex`, { + headers: { + Accept: 'text/plain', + 'Content-Type': 'text/plain', + 'Accept-Encoding': 'identity', + }, + }).then(res => res.text()); } async fetchFeeRates(): Promise { diff --git a/packages/sbtc/src/transactions/deposit.ts b/packages/sbtc/src/transactions/deposit.ts index 7cdc0e705..2ab4ac219 100644 --- a/packages/sbtc/src/transactions/deposit.ts +++ b/packages/sbtc/src/transactions/deposit.ts @@ -1,4 +1,5 @@ import * as btc from '@scure/btc-signer'; +import { P2TROut } from '@scure/btc-signer/payment'; import { bytesToHex, hexToBytes } from '@stacks/common'; import * as P from 'micro-packed'; import { UtxoWithTx } from '../api'; @@ -12,7 +13,11 @@ import { stacksAddressBytes, } from '../utils'; -const concat = P.utils.concatBytes; +/** Taken from [bip-0341.mediawiki](https://github.com/bitcoin/bips/blob/master/bip-0341.mediawiki#user-content-Constructing_and_spending_Taproot_outputs) and [sbtc](https://github.com/stacks-network/sbtc/blob/a3a927f759871440962d8f8066108e5b0af696a0/sbtc/src/lib.rs#L28) */ +export const UNSPENDABLE_PUB = new Uint8Array([ + 0x50, 0x92, 0x9b, 0x74, 0xc1, 0xa0, 0x49, 0x54, 0xb7, 0x8b, 0x4b, 0x60, 0x35, 0xe9, 0x7a, 0x5e, + 0x07, 0x8a, 0x5a, 0x0f, 0x28, 0xec, 0x96, 0xd5, 0x47, 0xbf, 0xee, 0x9a, 0xce, 0x80, 0x3a, 0xc0, +]); export function buildSbtcDepositScript(opts: { maxSignerFee: number; @@ -23,36 +28,50 @@ export function buildSbtcDepositScript(opts: { const recipientBytes = stacksAddressBytes(opts.stacksAddress); const signersPublicKeyBytes = hexToBytes(opts.signersPublicKey); + if (signersPublicKeyBytes.length !== 32) { + throw new Error('Signers public key must be 32 bytes (schnorr)'); + } + return btc.Script.encode([ - concat(maxSignerFeeBytes, recipientBytes), + P.utils.concatBytes(maxSignerFeeBytes, recipientBytes), 'DROP', signersPublicKeyBytes, 'CHECKSIG', ]); } -export function buildSbtcReclaimScript(opts: { lockTime: number }) { +export function buildSbtcReclaimScript(opts: { + reclaimLockTime: number; + reclaimPublicKey: string; +}) { + const reclaimLockTime = + opts.reclaimLockTime <= 16 + ? opts.reclaimLockTime // number if can be encoded as a OP_ + : btc.ScriptNum().encode(BigInt(opts.reclaimLockTime)); + const publicKeyBytes = hexToBytes(opts.reclaimPublicKey); + + if (publicKeyBytes.length !== 32) throw new Error('Public key must be 32 bytes (schnorr)'); + return btc.Script.encode([ - btc.ScriptNum().encode(BigInt(opts.lockTime)), - 'CHECKSEQUENCEVERIFY', // sbtc-bridge code does twice with additional optional data before + reclaimLockTime, + 'CHECKSEQUENCEVERIFY', + 'DROP', + publicKeyBytes, + 'CHECKSIG', ]); } -export function buildSbtcDepositTr(opts: { +function _buildSbtcDepositTr_Opts(opts: { network: BitcoinNetwork; stacksAddress: string; signersPublicKey: string; maxSignerFee: number; - lockTime: number; + reclaimLockTime: number; + reclaimPublicKey: string; }) { const deposit = buildSbtcDepositScript(opts); const reclaim = buildSbtcReclaimScript(opts); - const UNSPENDABLE_PUB = new Uint8Array([ - 0x50, 0x92, 0x9b, 0x74, 0xc1, 0xa0, 0x49, 0x54, 0xb7, 0x8b, 0x4b, 0x60, 0x35, 0xe9, 0x7a, 0x5e, - 0x07, 0x8a, 0x5a, 0x0f, 0x28, 0xec, 0x96, 0xd5, 0x47, 0xbf, 0xee, 0x9a, 0xce, 0x80, 0x3a, 0xc0, - ]); - return { depositScript: bytesToHex(deposit), reclaimScript: bytesToHex(reclaim), @@ -66,26 +85,169 @@ export function buildSbtcDepositTr(opts: { }; } +// function _buildSbtcDepositTr_Raw(opts: { +// network: BitcoinNetwork; +// depositScript: string; +// reclaimScript: string; +// }) { +// return { +// depositScript: opts.depositScript, +// reclaimScript: opts.reclaimScript, + +// trOut: btc.p2tr( +// UNSPENDABLE_PUB, +// [{ script: hexToBytes(opts.depositScript) }, { script: hexToBytes(opts.reclaimScript) }], +// opts.network, +// true // allow custom scripts +// ), +// }; +// } + +export function buildSbtcDepositTr(opts: // | { +// network: BitcoinNetwork; +// depositScript: string; +// reclaimScript: string; +// } +{ + network: BitcoinNetwork; + stacksAddress: string; + signersPublicKey: string; + maxSignerFee: number; + reclaimLockTime: number; + reclaimPublicKey: string; +}): { + depositScript: string; + reclaimScript: string; + trOut: P2TROut; +} { + // if ('depositScript' in opts) return _buildSbtcDepositTr_Raw(opts); // disable raw mode for now, since we need additional stuff anyway + return _buildSbtcDepositTr_Opts(opts); +} + +// todo: fix types to expose this +// export function buildSbtcReclaimInput(opts: { +// network: BitcoinNetwork; +// amountSats: number | bigint; +// stacksAddress: string; +// signersPublicKey: string; +// maxSignerFee: number; +// lockTime: number; +// publicKey: string; + +// txid: string; +// vout: number; +// }) { +// const reclaimScript = buildSbtcReclaimScript(opts); + +// return {}; +// } + +export function buildSbtcReclaimTx({ + network = REGTEST, + amountSats, + bitcoinAddress, + stacksAddress, + signersPublicKey, + maxSignerFee, + reclaimLockTime = 144, + reclaimPublicKey, + txid, + vout = 0, + feeRate, +}: { + network?: BitcoinNetwork; + amountSats: number | bigint; + bitcoinAddress: string; + + /** The deposit recipient Stacks address (needed to reconstruct the deposit tx) */ + stacksAddress: string; + /** The signers public key (aggregated schnorr; needed to reconstruct the deposit tx) */ + signersPublicKey: string; + /** The max signer fee (needed to reconstruct the deposit tx) */ + maxSignerFee: number; + /** The lock time (needed to reconstruct the deposit tx), defaults to 144 */ + reclaimLockTime?: number; + /** The reclaim public key (schnorr; to reconstruct the deposit tx AND sign the reclaim tx) */ + reclaimPublicKey: string; + + // disable raw mode for now, since we need additional stuff anyway + // depositScript: string; + // reclaimScript: string; + + txid: string; + vout?: number; + + /** Fee rate in sat/vbyte for the reclaim tx */ + feeRate: number; +}) { + const tx = new btc.Transaction({ allowUnknownInputs: true }); + if (tx.version < 2) throw new Error('Transaction version must be >= 2'); + + const deposit = buildSbtcDepositTr({ + network, + stacksAddress, + signersPublicKey, + maxSignerFee, + reclaimLockTime, + reclaimPublicKey, + }); + + if (deposit.trOut.tapLeafScript?.length !== 2) throw new Error('Failed to build deposit taproot'); + + const reclaimTapLeaf = deposit.trOut.tapLeafScript[1]; // const [reclaimMeta, reclaimBytes] = deposit.trOut.tapLeafScript[1]; + + if (!reclaimTapLeaf[0] || !reclaimTapLeaf[1]) throw new Error('Failed to build reclaim taproot'); + + tx.addInput({ + txid, + index: vout, + witnessUtxo: { + script: deposit.trOut.script, + amount: BigInt(amountSats), + }, + sequence: reclaimLockTime, + tapLeafScript: [reclaimTapLeaf], + }); + + tx.addOutputAddress(bitcoinAddress, BigInt(amountSats), network); + + // hardcoded `tx.vsize` for this tx structure + // we don't need additional inputs, since we're only spending one well-funded input (deposit) + const VSIZE = 126; + + const fee = BigInt(Math.ceil(VSIZE * feeRate)); + if (fee > BigInt(amountSats)) throw new Error('Fee is higher than reclaim amount'); + + tx.updateOutput(0, { amount: BigInt(amountSats) - fee }); + + return tx; +} + export function buildSbtcDepositAddress({ network = REGTEST, stacksAddress, signersPublicKey, maxSignerFee, - reclaimLockTime, + reclaimLockTime = 144, + reclaimPublicKey, }: { network: BitcoinNetwork; stacksAddress: string; /** Aggregated (schnorr) public key of all signers */ signersPublicKey: string; maxSignerFee: number; - reclaimLockTime: number; + /** The lock time (needed to reconstruct the deposit tx), defaults to 144 */ + reclaimLockTime?: number; + /** The reclaim public key (schnorr; to reconstruct the deposit tx AND sign the reclaim tx) */ + reclaimPublicKey: string; }) { const tr = buildSbtcDepositTr({ network, stacksAddress, signersPublicKey, maxSignerFee, - lockTime: reclaimLockTime, + reclaimLockTime, + reclaimPublicKey, }); if (!tr.trOut.address) throw new Error('Failed to create build taproot output'); @@ -102,23 +264,24 @@ export function buildSbtcDepositTx({ signersPublicKey, maxSignerFee, reclaimLockTime, + reclaimPublicKey, }: { network: BitcoinNetwork; - amountSats: number; + amountSats: number | bigint; stacksAddress: string; /** Aggregated (schnorr) public key of all signers */ signersPublicKey: string; maxSignerFee: number; reclaimLockTime: number; + reclaimPublicKey: string; }) { - // todo: check opts, e.g. pub key length to be schnorr - const deposit = buildSbtcDepositAddress({ network, stacksAddress, signersPublicKey, maxSignerFee, reclaimLockTime, + reclaimPublicKey, }); const tx = new btc.Transaction(); @@ -137,8 +300,9 @@ export async function sbtcDepositHelper({ utxos, utxoToSpendable = DEFAULT_UTXO_TO_SPENDABLE, paymentPublicKey, + reclaimPublicKey, maxSignerFee = 80_000, - reclaimLockTime = 6_000, + reclaimLockTime = 144, }: { /** Bitcoin network, defaults to REGTEST */ network?: BitcoinNetwork; @@ -151,6 +315,8 @@ export async function sbtcDepositHelper({ stacksAddress: string; /** Bitcoin change address */ bitcoinChangeAddress: string; + /** Reclaim public key (schnorr) */ + reclaimPublicKey: string; /** Fee rate in sat/vbyte */ feeRate: number; /** UTXOs to use for the transaction */ @@ -191,6 +357,7 @@ export async function sbtcDepositHelper({ signersPublicKey, maxSignerFee, reclaimLockTime, + reclaimPublicKey, }); // We separate this part, since wallets could handle it themselves diff --git a/packages/sbtc/tests/api.test.ts b/packages/sbtc/tests/api.test.ts index d8f5d3254..a78fe6ffa 100644 --- a/packages/sbtc/tests/api.test.ts +++ b/packages/sbtc/tests/api.test.ts @@ -3,6 +3,7 @@ import { describe, expect, test, vi } from 'vitest'; import createFetchMock from 'vitest-fetch-mock'; import { REGTEST, SbtcApiClientDevenv, SbtcApiClientTestnet } from '../src'; import { WALLET_00, getBitcoinAccount, getStacksAccount } from './helpers/wallet'; +import { bytesToHex } from '@stacks/common'; const dev = new SbtcApiClientDevenv(); const tnet = new SbtcApiClientTestnet(); @@ -11,6 +12,11 @@ const tnet = new SbtcApiClientTestnet(); createFetchMock(vi).enableMocks(); +test('script', async () => { + const wallet = await getBitcoinAccount(WALLET_00); + console.log(bytesToHex(wallet.privateKey)); +}); + describe('testnet:', () => { test('fetch utxos', async () => { fetchMock.mockOnce( diff --git a/packages/sbtc/tests/deposit.test.ts b/packages/sbtc/tests/deposit.test.ts index 383662eed..5c3a6b1c2 100644 --- a/packages/sbtc/tests/deposit.test.ts +++ b/packages/sbtc/tests/deposit.test.ts @@ -1,9 +1,23 @@ import * as btc from '@scure/btc-signer'; -import { hexToBytes } from '@stacks/common'; +import { bytesToHex, hexToBytes, isInstance } from '@stacks/common'; import { describe, expect, test, vi } from 'vitest'; import createFetchMock from 'vitest-fetch-mock'; -import { SbtcApiClientDevenv, SbtcApiClientTestnet, sbtcDepositHelper } from '../src'; +import { enableFetchLogging } from '@stacks/internal'; +import { + DEFAULT_UTXO_TO_SPENDABLE, + REGTEST, + SbtcApiClientDevenv, + SbtcApiClientTestnet, + TESTNET, + VSIZE_INPUT_P2WPKH, + buildSbtcReclaimTx, + dustMinimum, + paymentInfo, + sbtcDepositHelper, +} from '../src'; import { WALLET_00, getBitcoinAccount, getStacksAccount } from './helpers/wallet'; +import { hex } from '@scure/base'; +import * as P from 'micro-packed'; // enableFetchLogging(); // enable if you want to record requests to network.txt file @@ -254,7 +268,7 @@ describe('deposit testnet', () => { depositScript, reclaimScript, } = await sbtcDepositHelper({ - stacksAddress: stacksAccount.address, + stacksAddress: stacksAccount.address + '.contract-address', amountSats: 5_000_000, signersPublicKey: pub, @@ -265,6 +279,24 @@ describe('deposit testnet', () => { bitcoinChangeAddress: bitcoinAccount.wpkh.address, }); + const psbt = tx.toPSBT(); + + // @ts-ignore + BigInt.prototype.toJSON = function () { + return this.toString(); + }; + const txPsbt = btc.Transaction.fromPSBT(psbt); + const json = JSON.stringify(txPsbt, null, 2); + + function parseScript(bytes: Uint8Array) { + return btc.Script.decode(bytes).map(i => (isInstance(i, Uint8Array) ? hex.encode(i) : i)); + } + + const script = parseScript(txPsbt.getOutput(0).script!); + console.log(script); + + console.log(json); + tx.sign(bitcoinAccount.privateKey); tx.finalize(); @@ -280,6 +312,103 @@ describe('deposit testnet', () => { expect(notify.depositScript).toBe(depositScript); expect(notify.reclaimScript).toBe(reclaimScript); }); + + test('send funds to address (stacks testnet btc regtest)', async () => { + const priv = 'bfbd81098fcabdd0904f1d7ed1fc5db6123341ac166a61c24d115bfb665c6ba5'; + const address = btc.getAddress('wpkh', hexToBytes(priv), REGTEST)!; + const recipient = 'bcrt1q3tj2fr9scwmcw3rq5m6jslva65f2rqjxfrjz47'; + const feeRate = 1; + const amount = 4539558n; + + const tnet = new SbtcApiClientTestnet(); + const utxos = (await tnet.fetchUtxos(address)).sort( + (a, b) => (a.status?.block_height ?? 0) - (b.status?.block_height ?? 0) + ); + + const tx = new btc.Transaction(); + tx.addOutputAddress(recipient, amount, REGTEST); + + const pay = await paymentInfo({ + tx, + feeRate, + utxos, + utxoToSpendable: DEFAULT_UTXO_TO_SPENDABLE, + }); + + for (const input of pay.inputs) tx.addInput(input); + + const changeAfterAdditionalOutput = + pay.changeSats - BigInt(Math.ceil(VSIZE_INPUT_P2WPKH * feeRate)); + if (changeAfterAdditionalOutput > dustMinimum(VSIZE_INPUT_P2WPKH, feeRate)) { + tx.addOutputAddress(address, changeAfterAdditionalOutput, REGTEST); + } + + tx.sign(hexToBytes(priv)); + tx.finalize(); + + console.log('tx', tx.hex); + const txid = await tnet.broadcastTx(tx); + console.log('txid', txid); + }); + + test('btc tx, deposit to wrong signers, reclaim', async () => { + const bitcoinAccount = await getBitcoinAccount(WALLET_00); // wpkh bcrt1q3tj2fr9scwmcw3rq5m6jslva65f2rqjxfrjz47 (manually funded on devenv via bridge) + const stacksAccount = await getStacksAccount(WALLET_00); + + const tnet = new SbtcApiClientTestnet(); + + fetchMock.mockOnce( + `[{"txid":"b9f6fe6021ba347454902b1b9796e73882ebdf336675be3f08da895d48ab7a48","vout":1,"scriptPubKey":"00148ae4a48cb0c3b7874460a6f5287d9dd512a18246","status":{"confirmed":true,"block_height":80168,"block_hash":"49b7a5b26fca06dc42bb36f1c5db51bac2ff89640a686ed322b1c3d4b0537e9f","block_time":1734123925},"value":4456642}]` + ); + + const utxos = (await tnet.fetchUtxos(bitcoinAccount.wpkh.address)) + .filter(u => u.status?.block_height ?? 0 > 80168 - 100) + .sort((a, b) => (a.status?.block_height ?? 0) - (b.status?.block_height ?? 0)); + + fetchMock.mockOnce( + `0200000001df18462593a0c582bc7bddbed0b25cba5fb0a37b57b408b6f8ff74d55810df5d0100000000ffffffff024a4e0000000000002251202a7e0f8616c84cb643587c7b0650b30b438c6f258885319a93bb70cc8aae5618c2004400000000001600148ae4a48cb0c3b7874460a6f5287d9dd512a1824600000000` + ); + + const deposit = await sbtcDepositHelper({ + stacksAddress: stacksAccount.address + '.contract-address', + amountSats: 20_042, + + maxSignerFee: 20_000, + reclaimLockTime: 3, + reclaimPublicKey: bytesToHex(bitcoinAccount.publicKey).slice(2), + + signersPublicKey: '14c515722f2b61f9bc8bfbcd48422988533007602c74f3145616817f27302237', + bitcoinChangeAddress: bitcoinAccount.wpkh.address, + + feeRate: 1, + utxos, + }); + + deposit.transaction.sign(bitcoinAccount.privateKey); + deposit.transaction.finalize(); + + fetchMock.mockOnce(`"250a95549f6bd2066a6eb25370f8856029d9be11db0ef6eddedeea7bc2d223ad"`); + + const txid = await tnet.broadcastTx(deposit.transaction); + + const reclaimTx = buildSbtcReclaimTx({ + amountSats: 20_042, + bitcoinAddress: bitcoinAccount.wpkh.address, + stacksAddress: stacksAccount.address + '.contract-address', + signersPublicKey: '14c515722f2b61f9bc8bfbcd48422988533007602c74f3145616817f27302237', + maxSignerFee: 20_000, + reclaimLockTime: 3, + reclaimPublicKey: bytesToHex(bitcoinAccount.publicKey).slice(2), + txid, + feeRate: 1, + }); + reclaimTx.sign(bitcoinAccount.privateKey); + reclaimTx.finalize(); + + fetchMock.mockOnce(`"48c06d251235e9ce96c0c7c507772b11e688bb55f9d411d87f089bf0a25b0401"`); + + await tnet.broadcastTx(reclaimTx); + }); }); test('btc tx — compare to cli', async () => { From cadb2a092937986782fa6e9772a1f54eb46f9ec8 Mon Sep 17 00:00:00 2001 From: janniks Date: Fri, 13 Dec 2024 16:55:04 -0500 Subject: [PATCH 46/49] feat: switch to mainnet sbtc --- packages/sbtc/README.md | 35 ++--- packages/sbtc/package.json | 2 +- packages/sbtc/src/api.ts | 169 ++-------------------- packages/sbtc/src/transactions/deposit.ts | 10 +- packages/sbtc/tests/deposit.test.ts | 9 +- packages/sbtc/tests/helpers/wallet.ts | 15 +- 6 files changed, 56 insertions(+), 184 deletions(-) diff --git a/packages/sbtc/README.md b/packages/sbtc/README.md index bbd02baeb..80e97cf75 100644 --- a/packages/sbtc/README.md +++ b/packages/sbtc/README.md @@ -1,11 +1,7 @@ -# `sbtc` 0.2.x (regtest/testnet-release) - -⚠︎ **Warning:** Some API instances are not fully deployed yet on Testnet. +# `sbtc` 0.3.x (mainnet-pre-release) A helper package for interacting with sBTC from JavaScript/TypeScript. -> **Note:** This package currently targets the Stacks Testnet (on top of Bitcoin Regtest). - - [Installation](#installation) - [Overview](#overview) - [sBTC](#sbtc) @@ -17,10 +13,10 @@ A helper package for interacting with sBTC from JavaScript/TypeScript. - [`buildSbtcDepositAddress`](#buildsbtcdepositaddress) - [`buildSbtcDepositTx`](#buildsbtcdeposittx) - [`sbtcDepositHelper`](#sbtcdeposithelper) - - [`SbtcApiClientTestnet` / `SbtcApiClientDevenv`](#sbtcapiclienttestnet--sbtcapiclientdevenv) + - [`SbtcApiClientMainnet` / `SbtcApiClientTestnet` / `SbtcApiClientDevenv`](#sbtcapiclientmainnet--sbtcapiclienttestnet--sbtcapiclientdevenv) - [API](#api) - [`sbtcDepositHelper`](#sbtcdeposithelper-1) - - [`SbtcApiClientTestnet` / `SbtcApiClientDevenv`](#sbtcapiclienttestnet--sbtcapiclientdevenv-1) + - [`SbtcApiClientMainnet` / `SbtcApiClientTestnet` / `SbtcApiClientDevenv`](#sbtcapiclientmainnet--sbtcapiclienttestnet--sbtcapiclientdevenv-1) ## Installation @@ -81,8 +77,9 @@ The package exports high-level functions for building addresses and transactions Additionally, there are two API helpers, which make it easier to get all the data needed to create the above transactions: -- [`SbtcApiClientTestnet`](#devenvhelper--testnethelper) — a client for communicating with the different pieces of the testnet deployment of sBTC -- [`SbtcApiClientDevenv`](#devenvhelper--testnethelper) — a client for developing against a [local deployment of sBTC](https://github.com/stacks-network/sbtc/blob/0ff9070ffdfde4a8c0fec025de5a182e2aedca2d/Makefile#L169-L173) +- [`SbtcApiClientMainnet`](#sbtcapiclientmainnet-sbtcapiclienttestnet-sbtcapiclientdevenv) — a client for communicating with the different pieces of the sBTC deployment +- [`SbtcApiClientTestnet`](#sbtcapiclientmainnet-sbtcapiclienttestnet-sbtcapiclientdevenv) — a client for communicating with the different pieces of the sBTC deployment on Testnet +- [`SbtcApiClientDevenv`](#sbtcapiclientmainnet-sbtcapiclienttestnet-sbtcapiclientdevenv) — a client for developing against a [local deployment of sBTC](https://github.com/stacks-network/sbtc/blob/0ff9070ffdfde4a8c0fec025de5a182e2aedca2d/Makefile#L169-L173) While the final adjustments are still being made in the pre-release phase, this package may change default URLs and contract addresses on every minor release. @@ -90,6 +87,7 @@ While the final adjustments are still being made in the pre-release phase, this | ------- | ----------------------------- | ------------- | | 0.1.x | Developer release (hackathon) | | | 0.2.x | Regtest/Testnet release | Deposit only | +| 0.3.x | Mainnet pre-release | Deposit only | --- @@ -202,12 +200,13 @@ console.log('res', res.status, res.statusMessage); > **Note:** Here `SbtcApiClientTestnet` can be replaced with `SbtcApiClientDevenv` to interact with the local deployment of the sBTC contract. -### `SbtcApiClientTestnet` / `SbtcApiClientDevenv` +### `SbtcApiClientMainnet` / `SbtcApiClientTestnet` / `SbtcApiClientDevenv` ```ts -import { SbtcApiClientTestnet, SbtcApiClientDevenv } from 'sbtc'; +import { SbtcApiClientMainnet, SbtcApiClientTestnet, SbtcApiClientDevenv } from 'sbtc'; -const client = new SbtcApiClientTestnet(); +const client = new SbtcApiClientMainnet(); +// const client = new SbtcApiClientTestnet(); // const client = new SbtcApiClientDevenv(); const pub = await client.fetchSignersPublicKey(); // fetches the aggregated public key of the signers @@ -235,14 +234,16 @@ const sbtcBalance = await client.fetchSbtcBalance(STX_ADDRESS); // fetch the sBT | `bitcoinChangeAddress` | Bitcoin change address | `string` | — | | `feeRate` | Fee rate in sat/vbyte | `number` | — | | `utxos` | UTXOs to "fund" the transaction | `UtxoWithTx[]` | — | +| `reclaimPublicKey` | Public key (schnorr, x-only) for reclaiming failed deposits | `string` | — | | | | | | -| `paymentPublicKey` | Optional payment public key (currently only used for default utxoToSpendable.sh implementation) | `string` hex | — | +| `reclaimLockTime` | Optional reclaim lock time | `number` | `144` | +| `maxSignerFee` | Optional maximum fee to pay to signers for the sBTC mint | `number` | `80_000` | +| `network` | Optional Bitcoin network | `BitcoinNetwork` | `MAINNET` | | `utxoToSpendable` | Optional function to convert p2wpk and p2sh utxos to spendable inputs | `Function` | Best effort default implementation to make utxos spendable | -| `maxSignerFee` | Optional maximum fee to pay for the deposit transaction | `number` | `80_000` | -| `reclaimLockTime` | Optional reclaim lock time | `number` | `6_000` | -| `network` | Optional Bitcoin network | `BitcoinNetwork` | `REGTEST` | +| | | | | +| `paymentPublicKey` | Optional payment public key (currently only used for default utxoToSpendable.sh implementation) | `string` hex | — | -### `SbtcApiClientTestnet` / `SbtcApiClientDevenv` +### `SbtcApiClientMainnet` / `SbtcApiClientTestnet` / `SbtcApiClientDevenv` | Parameter | Description | Type | | -------------- | ------------------------------------------------- | -------- | diff --git a/packages/sbtc/package.json b/packages/sbtc/package.json index c45608a75..e35002d88 100644 --- a/packages/sbtc/package.json +++ b/packages/sbtc/package.json @@ -1,6 +1,6 @@ { "name": "sbtc", - "version": "0.2.6", + "version": "0.3.0", "description": "Library for sBTC.", "license": "MIT", "author": "Hiro Systems PBC (https://hiro.so)", diff --git a/packages/sbtc/src/api.ts b/packages/sbtc/src/api.ts index 454764c52..44e4815c9 100644 --- a/packages/sbtc/src/api.ts +++ b/packages/sbtc/src/api.ts @@ -66,7 +66,6 @@ export interface BaseClientConfig { btcApiUrl: string; stxApiUrl: string; sbtcApiUrl: string; - // sbtcBridgeUrl: string; } export class SbtcApiClient { @@ -140,30 +139,6 @@ export class SbtcApiClient { }).then(res => res.json())) as SbtcApiNotifyResponse; } - /** Proxies the Emily `/deposit` request via the bridge */ - // async notifySbtcBridge({ - // depositScript, - // reclaimScript, - // vout = 0, - // ...tx - // }: { - // depositScript: string; - // reclaimScript: string; - // /** Optional, output index (defaults to `0`) */ - // vout?: number; - // } & ({ txid: string } | { transaction: { id: string } })) { - // return (await fetch(`${this.config.sbtcBridgeUrl}/api/emilyDeposit`, { - // method: 'POST', - // body: JSON.stringify({ - // bitcoinTxid: 'txid' in tx ? tx.txid : tx.transaction.id, - // bitcoinTxOutputIndex: vout, - // depositScript, - // reclaimScript, - // url: this.config.sbtcApiUrl, - // }), - // }).then(res => res.json())) as SbtcApiNotifyResponse; - // } - async fetchSignersPublicKey(contractAddress?: string): Promise { const res = (await fetchCallReadOnlyFunction({ contractAddress: contractAddress ?? this.config.sbtcContract, @@ -253,7 +228,22 @@ export class SbtcApiClient { // todo: add async fetchDeposits('pending' | 'confirmed') -/** todo */ +export class SbtcApiClientMainnet extends SbtcApiClient { + constructor(config?: Partial) { + super( + Object.assign( + { + btcApiUrl: 'https://mempool.space/api', + stxApiUrl: 'https://api.hiro.so', + sbtcApiUrl: 'https://sbtc-emily.com', + sbtcContract: 'SM3VDXK3WZZSA84XXFKAFAF15NNZX32CTSG82JFQ4', + }, + config + ) + ); + } +} + export class SbtcApiClientTestnet extends SbtcApiClient { constructor(config?: Partial) { super( @@ -262,7 +252,6 @@ export class SbtcApiClientTestnet extends SbtcApiClient { btcApiUrl: 'https://beta.sbtc-mempool.tech/api/proxy', stxApiUrl: 'https://api.testnet.hiro.so', sbtcApiUrl: 'https://beta.sbtc-emily.com', - // sbtcBridgeUrl: 'https://staging.beta.sbtc.tech', /** ⚠︎ Attention: This contract address might still change over the course of the sBTC contract on Testnet */ sbtcContract: 'SNGWPN3XDAQE673MXYXF81016M50NHF5X5PWWM70', }, @@ -280,7 +269,6 @@ export class SbtcApiClientDevenv extends SbtcApiClient { btcApiUrl: 'http://localhost:3010/api/proxy', stxApiUrl: 'http://localhost:3999', sbtcApiUrl: 'http://localhost:3031', - // sbtcBridgeUrl: 'http://localhost:3010', sbtcContract: 'SN3R84XZYA63QS28932XQF3G1J8R9PC3W76P9CSQS', }, config @@ -289,131 +277,6 @@ export class SbtcApiClientDevenv extends SbtcApiClient { } } -// export class TestnetHelper extends SbtcApiClient { -// constructor(config?: Partial) { -// super( -// Object.assign( -// { -// bitcoinElectrsApiUrl: 'https://blockstream.info/testnet/api', -// stacksApiUrl: 'https://stacks-node-api.testnet.stacks.co', -// }, -// config -// ) -// ); -// } - -// async getSbtcPegAddress(contractAddress = SBTC_FT_ADDRESS_TESTNET): Promise { -// const publicKey = ( -// (await this.fetchCallReadOnly({ -// contractAddress, -// functionName: 'get-bitcoin-wallet-public-key', -// })) as SomeCV -// ).value.buffer; - -// const tr = btc.p2tr( -// publicKey.length === 33 ? publicKey.subarray(1) : publicKey, // strip y byte -// undefined, -// TESTNET -// ); -// return tr.address!; -// } - -// async getBitcoinAccount(mnemonic: string, idx: number = 0) { -// return await getBitcoinAccount(TESTNET, mnemonic, idx); -// } - -// async getStacksAccount(mnemonic: string, idx: number = 0) { -// return await getStacksAccount(TransactionVersion.Testnet, mnemonic, idx); -// } -// } - -// export class DevEnvHelper extends SbtcApiClient { -// btcRpc: RpcClient & RpcCallSpec; - -// constructor(config?: Partial) { -// super( -// Object.assign( -// { -// bitcoinElectrsApiUrl: 'http://127.0.0.1:3002', -// stacksApiUrl: 'http://127.0.0.1:3999', -// }, -// config -// ) -// ); - -// const bitcoinCoreRpcUrl = config?.bitcoinCoreRpcUrl ?? 'http://devnet:devnet@127.0.0.1:18433'; -// this.btcRpc = new RpcClient(bitcoinCoreRpcUrl).Typed; -// } - -// async getSbtcPegAddress(): Promise { -// const pegAccount = await this.getBitcoinAccount(WALLET_00); -// return pegAccount.tr.address; -// } - -// async getBitcoinAccount(mnemonic: string, idx: number = 0) { -// return await getBitcoinAccount(REGTEST, mnemonic, idx); -// } - -// async getStacksAccount(mnemonic: string, idx: number = 0) { -// return await getStacksAccount(TransactionVersion.Testnet, mnemonic, idx); -// } -// } - -// // == WALLET =================================================================== - -// export const WALLET_00 = -// 'twice kind fence tip hidden tilt action fragile skin nothing glory cousin green tomorrow spring wrist shed math olympic multiply hip blue scout claw'; -// export const WALLET_01 = -// 'sell invite acquire kitten bamboo drastic jelly vivid peace spawn twice guilt pave pen trash pretty park cube fragile unaware remain midnight betray rebuild'; -// export const WALLET_02 = -// 'hold excess usual excess ring elephant install account glad dry fragile donkey gaze humble truck breeze nation gasp vacuum limb head keep delay hospital'; - -// export async function getBitcoinAccount( -// network: BitcoinNetwork, -// mnemonic: string, -// idx: number = 0 -// ) { -// const seed = await bip39.mnemonicToSeed(mnemonic); -// const hdkey = HDKey.fromMasterSeed(seed, network.bip32); - -// const path = `m/84'/${network.bip84.coin}'/${idx}'/0/0`; -// const privateKey = hdkey.derive(path).privateKey!; -// const publicKey = hdkey.derive(path).publicKey!; - -// const trPath = `m/86'/${network.bip84.coin}'/${idx}'/0/0`; -// const trPrivateKey = hdkey.derive(trPath).privateKey!; -// const trPublicKey = hdkey.derive(trPath).publicKey!; // not sure if this should be used, but this is what the CLI returns - -// return { -// privateKey, -// publicKey, -// wpkh: { address: btc.getAddress('wpkh', privateKey, network)! }, -// tr: { -// address: btc.getAddress('tr', trPrivateKey, network)!, -// publicKey: trPublicKey, -// }, -// }; -// } - -// export async function getStacksAccount( -// transactionVersion: TransactionVersion, -// mnemonic: string, -// idx: number = 0 -// ) { -// const rootPrivateKey = await bip39.mnemonicToSeed(mnemonic); -// const rootNode = HDKey.fromMasterSeed(rootPrivateKey); - -// const childKey = rootNode.derive(`m/44'/5757'/0'/0`).deriveChild(idx); -// const stxPrivateKey = bytesToHex(compressPrivateKey(childKey.privateKey!)); - -// return { -// /** Alias for `privateKey` @deprecated use `.privateKey` instead */ -// stxPrivateKey, -// privateKey: stxPrivateKey, -// address: getAddressFromPrivateKey(stxPrivateKey, transactionVersion), -// }; -// } - export function sleep(ms: number) { return new Promise(resolve => setTimeout(resolve, ms)); } diff --git a/packages/sbtc/src/transactions/deposit.ts b/packages/sbtc/src/transactions/deposit.ts index 2ab4ac219..aefa01574 100644 --- a/packages/sbtc/src/transactions/deposit.ts +++ b/packages/sbtc/src/transactions/deposit.ts @@ -3,7 +3,7 @@ import { P2TROut } from '@scure/btc-signer/payment'; import { bytesToHex, hexToBytes } from '@stacks/common'; import * as P from 'micro-packed'; import { UtxoWithTx } from '../api'; -import { BitcoinNetwork, REGTEST, VSIZE_INPUT_P2WPKH } from '../constants'; +import { BitcoinNetwork, MAINNET, VSIZE_INPUT_P2WPKH } from '../constants'; import { DEFAULT_UTXO_TO_SPENDABLE, SpendableByScriptTypes, @@ -143,7 +143,7 @@ export function buildSbtcDepositTr(opts: // | { // } export function buildSbtcReclaimTx({ - network = REGTEST, + network = MAINNET, amountSats, bitcoinAddress, stacksAddress, @@ -224,7 +224,7 @@ export function buildSbtcReclaimTx({ } export function buildSbtcDepositAddress({ - network = REGTEST, + network = MAINNET, stacksAddress, signersPublicKey, maxSignerFee, @@ -258,7 +258,7 @@ export function buildSbtcDepositAddress({ } export function buildSbtcDepositTx({ - network = REGTEST, + network = MAINNET, amountSats, stacksAddress, signersPublicKey, @@ -291,7 +291,7 @@ export function buildSbtcDepositTx({ } export async function sbtcDepositHelper({ - network = REGTEST, + network = MAINNET, amountSats, stacksAddress, bitcoinChangeAddress, diff --git a/packages/sbtc/tests/deposit.test.ts b/packages/sbtc/tests/deposit.test.ts index 5c3a6b1c2..95cf3f394 100644 --- a/packages/sbtc/tests/deposit.test.ts +++ b/packages/sbtc/tests/deposit.test.ts @@ -18,6 +18,7 @@ import { import { WALLET_00, getBitcoinAccount, getStacksAccount } from './helpers/wallet'; import { hex } from '@scure/base'; import * as P from 'micro-packed'; +import { STACKS_TESTNET } from '@stacks/network'; // enableFetchLogging(); // enable if you want to record requests to network.txt file @@ -352,8 +353,8 @@ describe('deposit testnet', () => { }); test('btc tx, deposit to wrong signers, reclaim', async () => { - const bitcoinAccount = await getBitcoinAccount(WALLET_00); // wpkh bcrt1q3tj2fr9scwmcw3rq5m6jslva65f2rqjxfrjz47 (manually funded on devenv via bridge) - const stacksAccount = await getStacksAccount(WALLET_00); + const bitcoinAccount = await getBitcoinAccount(WALLET_00, 0, REGTEST); // wpkh bcrt1q3tj2fr9scwmcw3rq5m6jslva65f2rqjxfrjz47 (manually funded on devenv via bridge) + const stacksAccount = await getStacksAccount(WALLET_00, 0, STACKS_TESTNET); const tnet = new SbtcApiClientTestnet(); @@ -370,6 +371,8 @@ describe('deposit testnet', () => { ); const deposit = await sbtcDepositHelper({ + network: REGTEST, + stacksAddress: stacksAccount.address + '.contract-address', amountSats: 20_042, @@ -392,6 +395,8 @@ describe('deposit testnet', () => { const txid = await tnet.broadcastTx(deposit.transaction); const reclaimTx = buildSbtcReclaimTx({ + network: REGTEST, + amountSats: 20_042, bitcoinAddress: bitcoinAccount.wpkh.address, stacksAddress: stacksAccount.address + '.contract-address', diff --git a/packages/sbtc/tests/helpers/wallet.ts b/packages/sbtc/tests/helpers/wallet.ts index 89ed8b2ad..f84aa9435 100644 --- a/packages/sbtc/tests/helpers/wallet.ts +++ b/packages/sbtc/tests/helpers/wallet.ts @@ -2,10 +2,11 @@ import { ProjectivePoint } from '@noble/secp256k1'; import { HDKey } from '@scure/bip32'; import * as bip39 from '@scure/bip39'; import * as btc from '@scure/btc-signer'; -import { REGTEST } from '../../src'; +import { MAINNET, REGTEST } from '../../src'; import { bytesToHex } from '@stacks/common'; import { compressPrivateKey, privateKeyToAddress } from '@stacks/transactions'; import { STACKS_TESTNET } from '../../../network/src'; +import { STACKS_MAINNET } from '@stacks/network'; export function schnorrPublicKey(privateKey: Uint8Array) { return ProjectivePoint.fromPrivateKey(privateKey).toRawBytes(true).slice(1); @@ -22,9 +23,7 @@ export const WALLET_01 = export const WALLET_02 = 'hold excess usual excess ring elephant install account glad dry fragile donkey gaze humble truck breeze nation gasp vacuum limb head keep delay hospital'; -export async function getBitcoinAccount(mnemonic: string, idx: number = 0) { - const network = REGTEST; - +export async function getBitcoinAccount(mnemonic: string, idx: number = 0, network = MAINNET) { const seed = await bip39.mnemonicToSeed(mnemonic); const hdkey = HDKey.fromMasterSeed(seed, network.bip32); @@ -47,7 +46,11 @@ export async function getBitcoinAccount(mnemonic: string, idx: number = 0) { }; } -export async function getStacksAccount(mnemonic: string, idx: number = 0) { +export async function getStacksAccount( + mnemonic: string, + idx: number = 0, + network = STACKS_MAINNET +) { const rootPrivateKey = await bip39.mnemonicToSeed(mnemonic); const rootNode = HDKey.fromMasterSeed(rootPrivateKey); @@ -58,6 +61,6 @@ export async function getStacksAccount(mnemonic: string, idx: number = 0) { /** Alias for `privateKey` @deprecated use `.privateKey` instead */ stxPrivateKey, privateKey: stxPrivateKey, - address: privateKeyToAddress(stxPrivateKey, STACKS_TESTNET), + address: privateKeyToAddress(stxPrivateKey, network), }; } From 36a2065368f9852b382c15a4e5e852d0c949845a Mon Sep 17 00:00:00 2001 From: janniks Date: Tue, 17 Dec 2024 17:57:12 +0100 Subject: [PATCH 47/49] fix: update defaults --- packages/sbtc/package.json | 2 +- packages/sbtc/src/api.ts | 23 +++++++++++------ packages/sbtc/src/transactions/deposit.ts | 30 +++++++++++++---------- packages/sbtc/tests/helpers/wallet.ts | 5 ++-- 4 files changed, 36 insertions(+), 24 deletions(-) diff --git a/packages/sbtc/package.json b/packages/sbtc/package.json index e35002d88..4aaafecab 100644 --- a/packages/sbtc/package.json +++ b/packages/sbtc/package.json @@ -1,6 +1,6 @@ { "name": "sbtc", - "version": "0.3.0", + "version": "0.3.1", "description": "Library for sBTC.", "license": "MIT", "author": "Hiro Systems PBC (https://hiro.so)", diff --git a/packages/sbtc/src/api.ts b/packages/sbtc/src/api.ts index 44e4815c9..b123c4760 100644 --- a/packages/sbtc/src/api.ts +++ b/packages/sbtc/src/api.ts @@ -73,7 +73,12 @@ export class SbtcApiClient { async fetchUtxos(address: string): Promise { return ( - fetch(`${this.config.btcApiUrl}/address/${address}/utxo`) + fetch(`${this.config.btcApiUrl}/address/${address}/utxo`, { + headers: { + Accept: 'application/json', + 'Content-Type': 'application/json', + }, + }) .then(res => res.json()) // .then((utxos: MempoolApiUtxo[]) => // utxos.sort((a, b) => a.status.block_height - b.status.block_height) @@ -95,7 +100,7 @@ export class SbtcApiClient { } async fetchFeeRates(): Promise { - return fetch(`${this.config.btcApiUrl}/fees/recommended`).then(res => res.json()); + return fetch(`${this.config.btcApiUrl}/v1/fees/recommended`).then(res => res.json()); } async fetchFeeRate(target: 'low' | 'medium' | 'high'): Promise { @@ -107,9 +112,15 @@ export class SbtcApiClient { async broadcastTx(tx: btc.Transaction): Promise { return await fetch(`${this.config.btcApiUrl}/tx`, { method: 'POST', - headers: { 'Content-Type': 'text/plain' }, + headers: { Accept: 'text/plain', 'Content-Type': 'text/plain' }, body: tx.hex, - }).then(res => res.json() as Promise); + }).then(res => { + try { + return res.text() as Promise; + } catch (e) { + return res.json() as Promise; // the proxy might need a fallback decode + } + }); } async notifySbtc({ @@ -146,9 +157,7 @@ export class SbtcApiClient { functionName: 'get-current-aggregate-pubkey', functionArgs: [], senderAddress: STACKS_DEVNET.bootAddress, // zero address - client: { - baseUrl: this.config.stxApiUrl, - }, + client: { baseUrl: this.config.stxApiUrl }, })) as BufferCV; return res.value.slice(2); diff --git a/packages/sbtc/src/transactions/deposit.ts b/packages/sbtc/src/transactions/deposit.ts index aefa01574..c3bbe4179 100644 --- a/packages/sbtc/src/transactions/deposit.ts +++ b/packages/sbtc/src/transactions/deposit.ts @@ -13,6 +13,9 @@ import { stacksAddressBytes, } from '../utils'; +export const DEFAULT_RECLAIM_LOCK_TIME = 12; +export const DEFAULT_MAX_SIGNER_FEE = 80_000; + /** Taken from [bip-0341.mediawiki](https://github.com/bitcoin/bips/blob/master/bip-0341.mediawiki#user-content-Constructing_and_spending_Taproot_outputs) and [sbtc](https://github.com/stacks-network/sbtc/blob/a3a927f759871440962d8f8066108e5b0af696a0/sbtc/src/lib.rs#L28) */ export const UNSPENDABLE_PUB = new Uint8Array([ 0x50, 0x92, 0x9b, 0x74, 0xc1, 0xa0, 0x49, 0x54, 0xb7, 0x8b, 0x4b, 0x60, 0x35, 0xe9, 0x7a, 0x5e, @@ -148,8 +151,8 @@ export function buildSbtcReclaimTx({ bitcoinAddress, stacksAddress, signersPublicKey, - maxSignerFee, - reclaimLockTime = 144, + maxSignerFee = DEFAULT_MAX_SIGNER_FEE, + reclaimLockTime = DEFAULT_RECLAIM_LOCK_TIME, reclaimPublicKey, txid, vout = 0, @@ -163,9 +166,9 @@ export function buildSbtcReclaimTx({ stacksAddress: string; /** The signers public key (aggregated schnorr; needed to reconstruct the deposit tx) */ signersPublicKey: string; - /** The max signer fee (needed to reconstruct the deposit tx) */ - maxSignerFee: number; - /** The lock time (needed to reconstruct the deposit tx), defaults to 144 */ + /** The max signer fee (needed to reconstruct the deposit tx), defaults to 80_000 */ + maxSignerFee?: number; + /** The lock time (needed to reconstruct the deposit tx), defaults to 12 */ reclaimLockTime?: number; /** The reclaim public key (schnorr; to reconstruct the deposit tx AND sign the reclaim tx) */ reclaimPublicKey: string; @@ -180,8 +183,8 @@ export function buildSbtcReclaimTx({ /** Fee rate in sat/vbyte for the reclaim tx */ feeRate: number; }) { - const tx = new btc.Transaction({ allowUnknownInputs: true }); - if (tx.version < 2) throw new Error('Transaction version must be >= 2'); + const tx = new btc.Transaction({ allowUnknownInputs: true, allowUnknownOutputs: true }); + if (tx.version !== 2) throw new Error('Transaction version must be == 2'); const deposit = buildSbtcDepositTr({ network, @@ -227,16 +230,17 @@ export function buildSbtcDepositAddress({ network = MAINNET, stacksAddress, signersPublicKey, - maxSignerFee, - reclaimLockTime = 144, + maxSignerFee = DEFAULT_MAX_SIGNER_FEE, + reclaimLockTime = DEFAULT_RECLAIM_LOCK_TIME, reclaimPublicKey, }: { network: BitcoinNetwork; stacksAddress: string; /** Aggregated (schnorr) public key of all signers */ signersPublicKey: string; - maxSignerFee: number; - /** The lock time (needed to reconstruct the deposit tx), defaults to 144 */ + /** The max signer fee (needed to reconstruct the deposit tx), defaults to 80_000 */ + maxSignerFee?: number; + /** The lock time (needed to reconstruct the deposit tx), defaults to 12 */ reclaimLockTime?: number; /** The reclaim public key (schnorr; to reconstruct the deposit tx AND sign the reclaim tx) */ reclaimPublicKey: string; @@ -301,8 +305,8 @@ export async function sbtcDepositHelper({ utxoToSpendable = DEFAULT_UTXO_TO_SPENDABLE, paymentPublicKey, reclaimPublicKey, - maxSignerFee = 80_000, - reclaimLockTime = 144, + maxSignerFee = DEFAULT_MAX_SIGNER_FEE, + reclaimLockTime = DEFAULT_RECLAIM_LOCK_TIME, }: { /** Bitcoin network, defaults to REGTEST */ network?: BitcoinNetwork; diff --git a/packages/sbtc/tests/helpers/wallet.ts b/packages/sbtc/tests/helpers/wallet.ts index f84aa9435..515dcbc00 100644 --- a/packages/sbtc/tests/helpers/wallet.ts +++ b/packages/sbtc/tests/helpers/wallet.ts @@ -2,11 +2,10 @@ import { ProjectivePoint } from '@noble/secp256k1'; import { HDKey } from '@scure/bip32'; import * as bip39 from '@scure/bip39'; import * as btc from '@scure/btc-signer'; -import { MAINNET, REGTEST } from '../../src'; import { bytesToHex } from '@stacks/common'; -import { compressPrivateKey, privateKeyToAddress } from '@stacks/transactions'; -import { STACKS_TESTNET } from '../../../network/src'; import { STACKS_MAINNET } from '@stacks/network'; +import { compressPrivateKey, privateKeyToAddress } from '@stacks/transactions'; +import { MAINNET } from '../../src'; export function schnorrPublicKey(privateKey: Uint8Array) { return ProjectivePoint.fromPrivateKey(privateKey).toRawBytes(true).slice(1); From a7d37da6e46a3034bc6e0cde4526786a3bfd1573 Mon Sep 17 00:00:00 2001 From: janniks Date: Tue, 11 Feb 2025 15:26:59 +0800 Subject: [PATCH 48/49] fix: add transactionhex to create deposit --- package-lock.json | 2 +- packages/sbtc/README.md | 82 ++++++++++++++++++++++++-------------- packages/sbtc/package.json | 2 +- packages/sbtc/src/api.ts | 6 ++- 4 files changed, 59 insertions(+), 33 deletions(-) diff --git a/package-lock.json b/package-lock.json index 31a2d73ac..c9d5faa90 100644 --- a/package-lock.json +++ b/package-lock.json @@ -23724,7 +23724,7 @@ } }, "packages/sbtc": { - "version": "0.2.6", + "version": "0.3.1", "license": "MIT", "dependencies": { "@btc-helpers/rpc": "^2.0.0", diff --git a/packages/sbtc/README.md b/packages/sbtc/README.md index 80e97cf75..3b7c6e851 100644 --- a/packages/sbtc/README.md +++ b/packages/sbtc/README.md @@ -42,7 +42,7 @@ npm install sbtc - **Deposit Script**: Identifies which _Stacks address_ the sBTC will be minted to and what the _maximum fee_ (in satoshis) the signers may take in exchange for minting. - **Reclaim Script**: Allows the sender to reclaim their funds if the transaction is not processed by the signers. - **Sign and Broadcast the Transaction:** - - Sign the transaction with the sender’s private key. + - Sign the transaction with the sender's private key. - Broadcast the transaction to the Bitcoin network (Bitcoin Regtest for Stacks Testnet). - **Notify the sBTC API (Emily):** - Inform the API about the transaction by submitting its details. @@ -67,7 +67,7 @@ The package exports high-level functions for building addresses and transactions **With wallets:** - [`buildSbtcDepositAddress`](#buildsbtcdepositaddress) — build a deposit address and metadata (enough for most use-cases) -- [`buildSbtcDepositTx`](#buildsbtcdepositaddress) — build a deposit transaction and metadata +- [`buildSbtcDepositTx`](#buildsbtcdeposittx) — build a deposit transaction and metadata **Without wallets:** @@ -75,10 +75,10 @@ The package exports high-level functions for building addresses and transactions **HTTP Clients:** -Additionally, there are two API helpers, which make it easier to get all the data needed to create the above transactions: +Additionally, there are three API helpers, which make it easier to get all the data needed to create the above transactions: -- [`SbtcApiClientMainnet`](#sbtcapiclientmainnet-sbtcapiclienttestnet-sbtcapiclientdevenv) — a client for communicating with the different pieces of the sBTC deployment -- [`SbtcApiClientTestnet`](#sbtcapiclientmainnet-sbtcapiclienttestnet-sbtcapiclientdevenv) — a client for communicating with the different pieces of the sBTC deployment on Testnet +- [`SbtcApiClientMainnet`](#sbtcapiclientmainnet-sbtcapiclienttestnet-sbtcapiclientdevenv) — a client for communicating with the sBTC deployment on Mainnet +- [`SbtcApiClientTestnet`](#sbtcapiclientmainnet-sbtcapiclienttestnet-sbtcapiclientdevenv) — a client for communicating with the sBTC deployment on Testnet - [`SbtcApiClientDevenv`](#sbtcapiclientmainnet-sbtcapiclienttestnet-sbtcapiclientdevenv) — a client for developing against a [local deployment of sBTC](https://github.com/stacks-network/sbtc/blob/0ff9070ffdfde4a8c0fec025de5a182e2aedca2d/Makefile#L169-L173) While the final adjustments are still being made in the pre-release phase, this package may change default URLs and contract addresses on every minor release. @@ -109,8 +109,9 @@ const deposit = buildSbtcDepositAddress({ // OPTIONAL DEFAULTS // maxSignerFee: 80_000, // optional: fee to pay for the deposit transaction (taken from the signers from the sats) - // reclaimLockTime: 6_000, // optional: lock time for the reclaim script - // network: REGTEST, // optional: which bitcoin network to use + // reclaimLockTime: 12, // optional: lock time for the reclaim script + // network: MAINNET, // optional: which bitcoin network to use + // reclaimPublicKey: YOUR_RECLAIM_PUBLIC_KEY, // required: public key for reclaiming failed deposits }); // `deposit.address` is the deposit address (send funds here, aka the deposit address as an output) @@ -137,13 +138,14 @@ import { buildSbtcDepositTx } from 'sbtc'; // 1. BUILD THE DEPOSIT TRANSACTION AND METADATA const deposit = buildSbtcDepositTx({ amountSats: DEPOSIT_AMOUNT, // the amount in sats/sBTC to deposit; <=maxSignerFee is taken from this amount + stacksAddress: TARGET_STX_ADDRESS, + signersPublicKey: await client.fetchSignersPublicKey(), + reclaimPublicKey: YOUR_RECLAIM_PUBLIC_KEY, - // same options as `buildSbtcDepositAddress` - network, - stacksAddress, - signersPublicKey, - maxSignerFee, - reclaimLockTime, + // OPTIONAL DEFAULTS + // maxSignerFee: 80_000, + // reclaimLockTime: 12, + // network: MAINNET, }); // `deposit.transaction` has one output, which is the combined taproot of the deposit and reclaim scripts @@ -173,13 +175,18 @@ const client = new SbtcApiClientTestnet(); const deposit = await sbtcDepositHelper({ stacksAddress: TARGET_STX_ADDRESS, // where to send/mint the sBTC amountSats: 5_000_000, // (maximum) amount of sBTC to deposit + bitcoinChangeAddress: YOUR_BTC_ADDRESS, // where to send change + reclaimPublicKey: YOUR_RECLAIM_PUBLIC_KEY, // public key for reclaiming failed deposits - signersPublicKey: pub, // the aggregated public key of the signers - + signersPublicKey: await client.fetchSignersPublicKey(), // the aggregated public key of the signers feeRate: await client.fetchFeeRate('medium'), utxos: await client.fetchUtxos(YOUR_BTC_ADDRESS), - bitcoinChangeAddress: YOUR_BTC_ADDRESS, + // OPTIONAL DEFAULTS + // network: MAINNET, + // maxSignerFee: 80_000, + // reclaimLockTime: 12, + // paymentPublicKey: YOUR_PAYMENT_PUBLIC_KEY, // only used for default utxoToSpendable.sh implementation }); // 2. SIGN THE TRANSACTION @@ -198,8 +205,6 @@ const res = await client.notifySbtc(deposit); console.log('res', res.status, res.statusMessage); ``` -> **Note:** Here `SbtcApiClientTestnet` can be replaced with `SbtcApiClientDevenv` to interact with the local deployment of the sBTC contract. - ### `SbtcApiClientMainnet` / `SbtcApiClientTestnet` / `SbtcApiClientDevenv` ```ts @@ -209,17 +214,28 @@ const client = new SbtcApiClientMainnet(); // const client = new SbtcApiClientTestnet(); // const client = new SbtcApiClientDevenv(); +// Bitcoin-related methods const pub = await client.fetchSignersPublicKey(); // fetches the aggregated public key of the signers const address = await client.fetchSignersAddress(); // fetches the p2tr address of the aggregated public key of the signers - const feeRate = await client.fetchFeeRate('low'); // or 'medium', 'high' const unspents = await client.fetchUtxos(BTC_ADDRESS); const hex = await client.fetchTxHex(TXID); +const btcBalance = await client.fetchBalance(BTC_ADDRESS); // in satoshis +// Transaction-related methods await client.broadcastTx(DEPOSIT_BTC_TX); // broadcast a deposit BTC transaction -await client.notifySbtc(DEPOSIT_BTC_TX); // notify the sBTC API about the deposit (otherwise it won't be processed) - -const sbtcBalance = await client.fetchSbtcBalance(STX_ADDRESS); // fetch the sBTC balance of an Stacks address +await client.notifySbtc(DEPOSIT_BTC_TX); // notify the sBTC API about the deposit +const deposit = await client.fetchDeposit(TXID); // fetch deposit status by txid +const deposit2 = await client.fetchDeposit({ txid: TXID, vout: 0 }); // fetch deposit status by txid and output index + +// Stacks-related methods +const sbtcBalance = await client.fetchSbtcBalance(STX_ADDRESS); // fetch the sBTC balance of a Stacks address +const result = await client.fetchCallReadOnly({ + contractAddress: CONTRACT_ADDRESS, + functionName: FUNCTION_NAME, + args: [], // optional clarity values + sender: SENDER_ADDRESS, // optional, defaults to zero address +}); ``` ## API @@ -236,7 +252,7 @@ const sbtcBalance = await client.fetchSbtcBalance(STX_ADDRESS); // fetch the sBT | `utxos` | UTXOs to "fund" the transaction | `UtxoWithTx[]` | — | | `reclaimPublicKey` | Public key (schnorr, x-only) for reclaiming failed deposits | `string` | — | | | | | | -| `reclaimLockTime` | Optional reclaim lock time | `number` | `144` | +| `reclaimLockTime` | Optional reclaim lock time | `number` | `12` | | `maxSignerFee` | Optional maximum fee to pay to signers for the sBTC mint | `number` | `80_000` | | `network` | Optional Bitcoin network | `BitcoinNetwork` | `MAINNET` | | `utxoToSpendable` | Optional function to convert p2wpk and p2sh utxos to spendable inputs | `Function` | Best effort default implementation to make utxos spendable | @@ -245,9 +261,17 @@ const sbtcBalance = await client.fetchSbtcBalance(STX_ADDRESS); // fetch the sBT ### `SbtcApiClientMainnet` / `SbtcApiClientTestnet` / `SbtcApiClientDevenv` -| Parameter | Description | Type | -| -------------- | ------------------------------------------------- | -------- | -| `sbtcContract` | The multisig address of the initial sBTC contract | `string` | -| `sbtcApiUrl` | The base URL of the sBTC API (Emily) | `string` | -| `btcApiUrl` | The base URL of the Bitcoin mempool/electrs API | `string` | -| `stxApiUrl` | The base URL of the Stacks API | `string` | +| Parameter | Description | Type | Default | +| -------------- | ------------------------------------------------- | -------- | ---------------------------------------------------- | +| `sbtcContract` | The multisig address of the initial sBTC contract | `string` | Mainnet: `SM3VDXK3WZZSA84XXFKAFAF15NNZX32CTSG82JFQ4` | +| | | | Testnet: `SNGWPN3XDAQE673MXYXF81016M50NHF5X5PWWM70` | +| | | | Devenv: `SN3R84XZYA63QS28932XQF3G1J8R9PC3W76P9CSQS` | +| `sbtcApiUrl` | The base URL of the sBTC API (Emily) | `string` | Mainnet: `https://sbtc-emily.com` | +| | | | Testnet: `https://beta.sbtc-emily.com` | +| | | | Devenv: `http://localhost:3031` | +| `btcApiUrl` | The base URL of the Bitcoin mempool/electrs API | `string` | Mainnet: `https://mempool.space/api` | +| | | | Testnet: `https://beta.sbtc-mempool.tech/api/proxy` | +| | | | Devenv: `http://localhost:3010/api/proxy` | +| `stxApiUrl` | The base URL of the Stacks API | `string` | Mainnet: `https://api.hiro.so` | +| | | | Testnet: `https://api.testnet.hiro.so` | +| | | | Devenv: `http://localhost:3999` | diff --git a/packages/sbtc/package.json b/packages/sbtc/package.json index 4aaafecab..8e327d88e 100644 --- a/packages/sbtc/package.json +++ b/packages/sbtc/package.json @@ -1,6 +1,6 @@ { "name": "sbtc", - "version": "0.3.1", + "version": "0.3.2", "description": "Library for sBTC.", "license": "MIT", "author": "Hiro Systems PBC (https://hiro.so)", diff --git a/packages/sbtc/src/api.ts b/packages/sbtc/src/api.ts index b123c4760..80ee556f9 100644 --- a/packages/sbtc/src/api.ts +++ b/packages/sbtc/src/api.ts @@ -133,7 +133,8 @@ export class SbtcApiClient { reclaimScript: string; /** Optional, output index (defaults to `0`) */ vout?: number; - } & ({ txid: string } | { transaction: { id: string } })) { + transaction: btc.Transaction; + }) { return (await fetch(`${this.config.sbtcApiUrl}/deposit`, { method: 'POST', headers: { @@ -142,10 +143,11 @@ export class SbtcApiClient { 'Content-Type': 'application/json', }, body: JSON.stringify({ - bitcoinTxid: 'txid' in tx ? tx.txid : tx.transaction.id, + bitcoinTxid: tx.transaction.id, bitcoinTxOutputIndex: vout, depositScript, reclaimScript, + transactionHex: tx.transaction.hex, }), }).then(res => res.json())) as SbtcApiNotifyResponse; } From 8f7dc65ba5d50bcffb124f50343b65a6568aca8a Mon Sep 17 00:00:00 2001 From: janniks Date: Tue, 11 Feb 2025 16:28:48 +0800 Subject: [PATCH 49/49] fix: allow transaction hex in notify call --- packages/sbtc/README.md | 29 ++++++++++++----------- packages/sbtc/src/api.ts | 14 +++++++---- packages/sbtc/src/transactions/deposit.ts | 2 +- 3 files changed, 26 insertions(+), 19 deletions(-) diff --git a/packages/sbtc/README.md b/packages/sbtc/README.md index 3b7c6e851..d3c21d790 100644 --- a/packages/sbtc/README.md +++ b/packages/sbtc/README.md @@ -104,14 +104,14 @@ const client = new SbtcApiClientTestnet(); // 1. BUILD THE DEPOSIT ADDRESS AND METADATA const deposit = buildSbtcDepositAddress({ - stacksAddress: TARGET_STX_ADDRESS, - signersPublicKey: await client.fetchSignersPublicKey(), + stacksAddress: TARGET_STX_ADDRESS, // the address to send/mint the sBTC to + signersPublicKey: await client.fetchSignersPublicKey(), // the aggregated public key of the signers + reclaimPublicKey: YOUR_RECLAIM_PUBLIC_KEY, // public key for reclaiming failed deposits // OPTIONAL DEFAULTS // maxSignerFee: 80_000, // optional: fee to pay for the deposit transaction (taken from the signers from the sats) - // reclaimLockTime: 12, // optional: lock time for the reclaim script + // reclaimLockTime: 950, // optional: lock time for the reclaim script // network: MAINNET, // optional: which bitcoin network to use - // reclaimPublicKey: YOUR_RECLAIM_PUBLIC_KEY, // required: public key for reclaiming failed deposits }); // `deposit.address` is the deposit address (send funds here, aka the deposit address as an output) @@ -119,11 +119,12 @@ const deposit = buildSbtcDepositAddress({ // 2. DEPOSIT USING YOUR FAVORITE WALLET (TYPICALLY ALSO BROADCASTED BY THE WALLET) const txid = await WalletProvider.sendTransfer({ recipient: deposit.address, - amount: 100_000, // the amount to deposit; <=maxSignerFee is taken from this amount + amount: 100_000, // the amount to deposit; <=maxSignerFee is taken from this amount by the signers as a fee }); +const transaction = await client.fetchTxHex(txid); // 3. NOTIFY THE SIGNERS -await client.notifySbtc({ txid, ...deposit }); +await client.notifySbtc({ transaction, ...deposit }); ``` ### `buildSbtcDepositTx` @@ -138,14 +139,14 @@ import { buildSbtcDepositTx } from 'sbtc'; // 1. BUILD THE DEPOSIT TRANSACTION AND METADATA const deposit = buildSbtcDepositTx({ amountSats: DEPOSIT_AMOUNT, // the amount in sats/sBTC to deposit; <=maxSignerFee is taken from this amount - stacksAddress: TARGET_STX_ADDRESS, - signersPublicKey: await client.fetchSignersPublicKey(), - reclaimPublicKey: YOUR_RECLAIM_PUBLIC_KEY, + stacksAddress: TARGET_STX_ADDRESS, // the address to send/mint the sBTC to + signersPublicKey: await client.fetchSignersPublicKey(), // the aggregated public key of the signers + reclaimPublicKey: YOUR_RECLAIM_PUBLIC_KEY, // public key for reclaiming failed deposits // OPTIONAL DEFAULTS - // maxSignerFee: 80_000, - // reclaimLockTime: 12, - // network: MAINNET, + // maxSignerFee: 80_000, // optional: fee to pay for the deposit transaction (taken from the signers from the sats) + // reclaimLockTime: 950, // optional: lock time for the reclaim script + // network: MAINNET, // optional: which bitcoin network to use }); // `deposit.transaction` has one output, which is the combined taproot of the deposit and reclaim scripts @@ -185,7 +186,7 @@ const deposit = await sbtcDepositHelper({ // OPTIONAL DEFAULTS // network: MAINNET, // maxSignerFee: 80_000, - // reclaimLockTime: 12, + // reclaimLockTime: 950, // paymentPublicKey: YOUR_PAYMENT_PUBLIC_KEY, // only used for default utxoToSpendable.sh implementation }); @@ -252,7 +253,7 @@ const result = await client.fetchCallReadOnly({ | `utxos` | UTXOs to "fund" the transaction | `UtxoWithTx[]` | — | | `reclaimPublicKey` | Public key (schnorr, x-only) for reclaiming failed deposits | `string` | — | | | | | | -| `reclaimLockTime` | Optional reclaim lock time | `number` | `12` | +| `reclaimLockTime` | Optional reclaim lock time | `number` | `950` | | `maxSignerFee` | Optional maximum fee to pay to signers for the sBTC mint | `number` | `80_000` | | `network` | Optional Bitcoin network | `BitcoinNetwork` | `MAINNET` | | `utxoToSpendable` | Optional function to convert p2wpk and p2sh utxos to spendable inputs | `Function` | Best effort default implementation to make utxos spendable | diff --git a/packages/sbtc/src/api.ts b/packages/sbtc/src/api.ts index 80ee556f9..34796c74a 100644 --- a/packages/sbtc/src/api.ts +++ b/packages/sbtc/src/api.ts @@ -11,6 +11,7 @@ import { } from '@stacks/transactions'; import { REGTEST } from './constants'; import { wrapLazyProxy } from './utils'; +import { hexToBytes } from '@stacks/common'; /** todo */ // https://blockstream.info/api/address/1KFHE7w8BhaENAswwryaoccDb6qcT6DbYY/utxo @@ -127,14 +128,19 @@ export class SbtcApiClient { depositScript, reclaimScript, vout = 0, - ...tx + transaction, }: { depositScript: string; reclaimScript: string; /** Optional, output index (defaults to `0`) */ vout?: number; - transaction: btc.Transaction; + transaction: btc.Transaction | string; }) { + const tx = + typeof transaction === 'string' + ? btc.Transaction.fromRaw(hexToBytes(transaction)) + : transaction; + return (await fetch(`${this.config.sbtcApiUrl}/deposit`, { method: 'POST', headers: { @@ -143,11 +149,11 @@ export class SbtcApiClient { 'Content-Type': 'application/json', }, body: JSON.stringify({ - bitcoinTxid: tx.transaction.id, + bitcoinTxid: tx.id, bitcoinTxOutputIndex: vout, depositScript, reclaimScript, - transactionHex: tx.transaction.hex, + transactionHex: tx.hex, }), }).then(res => res.json())) as SbtcApiNotifyResponse; } diff --git a/packages/sbtc/src/transactions/deposit.ts b/packages/sbtc/src/transactions/deposit.ts index c3bbe4179..0f2ef7554 100644 --- a/packages/sbtc/src/transactions/deposit.ts +++ b/packages/sbtc/src/transactions/deposit.ts @@ -13,7 +13,7 @@ import { stacksAddressBytes, } from '../utils'; -export const DEFAULT_RECLAIM_LOCK_TIME = 12; +export const DEFAULT_RECLAIM_LOCK_TIME = 950; export const DEFAULT_MAX_SIGNER_FEE = 80_000; /** Taken from [bip-0341.mediawiki](https://github.com/bitcoin/bips/blob/master/bip-0341.mediawiki#user-content-Constructing_and_spending_Taproot_outputs) and [sbtc](https://github.com/stacks-network/sbtc/blob/a3a927f759871440962d8f8066108e5b0af696a0/sbtc/src/lib.rs#L28) */