diff --git a/.eslintignore b/.eslintignore deleted file mode 100644 index 849ddff..0000000 --- a/.eslintignore +++ /dev/null @@ -1 +0,0 @@ -dist/ diff --git a/.eslintrc.json b/.eslintrc.json deleted file mode 100644 index 5c57d75..0000000 --- a/.eslintrc.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "extends": "./node_modules/gts/", - "overrides": [ - { - "files": ["*.test.ts"], - "rules": { - "@typescript-eslint/no-explicit-any": 0 - } - } - ] -} diff --git a/.husky/commit-msg b/.husky/commit-msg index 7fed485..72e16c6 100755 --- a/.husky/commit-msg +++ b/.husky/commit-msg @@ -1,4 +1 @@ -#!/bin/sh -. "$(dirname "$0")/_/husky.sh" - -npx --no -- commitlint --edit +npx --no -- commitlint --edit diff --git a/.husky/pre-commit b/.husky/pre-commit index d1096ab..e37998f 100755 --- a/.husky/pre-commit +++ b/.husky/pre-commit @@ -1,4 +1 @@ -#!/bin/sh -. "$(dirname "$0")/_/husky.sh" - npm run test diff --git a/.prettierrc.js b/.prettierrc.js deleted file mode 100644 index ff15483..0000000 --- a/.prettierrc.js +++ /dev/null @@ -1,3 +0,0 @@ -module.exports = { - ...require('gts/.prettierrc.json') -} diff --git a/.prettierrc.json b/.prettierrc.json new file mode 100644 index 0000000..ecdf3e0 --- /dev/null +++ b/.prettierrc.json @@ -0,0 +1,8 @@ +{ + "$schema": "https://json.schemastore.org/prettierrc", + "semi": false, + "tabWidth": 2, + "singleQuote": true, + "printWidth": 100, + "trailingComma": "none" +} diff --git a/CHANGELOG.md b/CHANGELOG.md index 64e364c..ddbe518 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,31 @@ # Changelog +## [2.5.0] - 2025-08-08 + +### Added + +- **API Methods** + + Added `address` option for the `api.getDelegate()` method + Added the `api.getPeer()` method + +- **WebSocket** + + Added: + - `onMessage(MessageType, handler)` + - `onChatMessage(handler)` + - `onRichMessage(handler)` + - `onSignalMessage(handler)` + +### Fixed + +- Fixed subscribing to multiple addresses + +### Changed + +- Updated dependencies +- Updated auto generated API types + ## [2.4.0] - 2024-05-30 ### Fixed @@ -28,12 +54,12 @@ const transformed = transformTransactionQuery({ fromHeight: 7585271, and: { - toHeight: 7586280, + toHeight: 7586280 }, or: { - senderId: 'U18132012621449491414', - }, - }); + senderId: 'U18132012621449491414' + } + }) /** * { @@ -42,7 +68,7 @@ * or:senderId: 'U18132012621449491414' * } */ - console.log(transformed); + console.log(transformed) ``` ### Fixed @@ -57,12 +83,12 @@ const blocks = await api.getTransactions({ fromHeight: 7585271, and: { - toHeight: 7586280, + toHeight: 7586280 }, or: { - senderId: 'U18132012621449491414', - }, - }); + senderId: 'U18132012621449491414' + } + }) ``` ## [2.2.0] - 2023-12-01 @@ -72,20 +98,18 @@ - Export validator utils: ```ts - function isPassphrase(passphrase: unknown): passphrase is string; - function isAdmAddress(address: unknown): address is AdamantAddress; - function isAdmPublicKey(publicKey: unknown): publicKey is string; - function isAdmVoteForPublicKey(publicKey: unknown): publicKey is string; - function isAdmVoteForAddress(address: unknown): boolean; - function isAdmVoteForDelegateName( - delegateName: unknown - ): delegateName is string; + function isPassphrase(passphrase: unknown): passphrase is string + function isAdmAddress(address: unknown): address is AdamantAddress + function isAdmPublicKey(publicKey: unknown): publicKey is string + function isAdmVoteForPublicKey(publicKey: unknown): publicKey is string + function isAdmVoteForAddress(address: unknown): boolean + function isAdmVoteForDelegateName(delegateName: unknown): delegateName is string function validateMessage( message: string, messageType: MessageType = MessageType.Chat - ): {success: false; error: string} | {success: true}; - function isDelegateName(name: unknown): name is string; - function admToSats(amount: number): number; + ): { success: false; error: string } | { success: true } + function isDelegateName(name: unknown): name is string + function admToSats(amount: number): number ``` ## [2.1.0] - 2023-11-17 @@ -97,11 +121,11 @@ ```js const socket = new WebSocketClient({ /* ... */ - }); + }) - api.initSocket(socket); + api.initSocket(socket) // instead of - api.socket = socket; + api.socket = socket ``` - Improved the `encodeMessage()` and `decodeMessage()` functions to accept public keys as Uint8Array or Buffer @@ -131,7 +155,7 @@ For example, you can now use `'log'` instead of `LogLevel.Log` in TypeScript: ```ts - const api = new AdamantApi({/* ... */ logLevel: 'log'}); + const api = new AdamantApi({ /* ... */ logLevel: 'log' }) ``` - TypeScript: Added missing declaration modules to npm that led to the error: @@ -164,16 +188,16 @@ ```js // before - const block = await api.get('blocks/get', {id}); + const block = await api.get('blocks/get', { id }) // after - const block = await api.getBlock(id); + const block = await api.getBlock(id) ``` and `post()` method: ```js - await api.post('transactions/process', {transaction}); + await api.post('transactions/process', { transaction }) ``` - **getTransactionId()** method @@ -181,8 +205,8 @@ Pass signed transaction with signature to get a transaction id as a string: ```js - import {getTransactionId} from 'adamant-api'; - const id = getTransactionId(signedTransaction); + import { getTransactionId } from 'adamant-api' + const id = getTransactionId(signedTransaction) ``` _See [documentation](https://github.com/Adamant-im/adamant-api-jsclient/wiki/Calculating-transaction-id) for more information._ @@ -204,13 +228,13 @@ Now you will create new instances of `adamant-api` using keyword `new`: ```js - import {AdamantApi} from 'adamant-api'; + import { AdamantApi } from 'adamant-api' const api = new AdamantApi({ nodes: [ /* ... */ - ], - }); + ] + }) ``` - **Socket Initialization** @@ -225,50 +249,47 @@ admAddress: 'U1234..', onNewMessage(transaction) { // ... - }, - }); + } + }) // after - api.initSocket({admAddress: 'U1234..'}); + api.initSocket({ admAddress: 'U1234..' }) api.socket.on((transaction: AnyTransaction) => { // ... - }); + }) ``` Or specify `socket` option when initializing API: ```ts // socket.ts - import {WebSocketClient, TransactionType} from 'adamant-api'; + import { WebSocketClient, TransactionType } from 'adamant-api' - const socket = new WebSocketClient({admAddress: 'U1234..'}); + const socket = new WebSocketClient({ admAddress: 'U1234..' }) - socket.on( - [TransactionType.CHAT_MESSAGE, TransactionType.SEND], - transaction => { - // handle chat messages and transfer tokens transactions - } - ); + socket.on([TransactionType.CHAT_MESSAGE, TransactionType.SEND], (transaction) => { + // handle chat messages and transfer tokens transactions + }) - socket.on(TransactionType.VOTE, transaction => { + socket.on(TransactionType.VOTE, (transaction) => { // handle vote for delegate transaction - }); + }) - export {socket}; + export { socket } ``` ```ts // api.ts - import {AdamantApi} from 'adamant-api'; - import {socket} from './socket'; + import { AdamantApi } from 'adamant-api' + import { socket } from './socket' export const api = new AdamantApi({ socket, nodes: [ /* ... */ - ], - }); + ] + }) ``` ### Removed diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 6187678..4c766bc 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -92,15 +92,12 @@ Then, copy `dist/generated.ts` to `adamant-api-jsclient` at `src/api/generated.t ## Project Structure - **`src`**: contains the source code - - **`api`**: contains group of methods and methods for the API. - - **`genearated.ts`**: contains auto-generated types for API. - **`coins`**: contains group of utils for coins. - **`helpers`**: contains utilities shared across the entire codebase. - - **`tests`**: contains tests for the helpers directory. ## Contributing Tests diff --git a/README.md b/README.md index e1451c0..92482ad 100644 --- a/README.md +++ b/README.md @@ -39,17 +39,17 @@ Initialize the library: const { AdamantApi } = require('adamant-api') const nodes = [ - "http://localhost:36666", - "https://endless.adamant.im", - "https://clown.adamant.im", - "http://23.226.231.225:36666", - "http://88.198.156.44:36666", - "https://lake.adamant.im" -]; + 'http://localhost:36666', + 'https://endless.adamant.im', + 'https://clown.adamant.im', + 'http://23.226.231.225:36666', + 'http://88.198.156.44:36666', + 'https://lake.adamant.im' +] const api = new AdamantApi({ - nodes, -}); + nodes +}) ``` Request example: diff --git a/commitlint.config.js b/commitlint.config.js index 84dcb12..a4f4369 100644 --- a/commitlint.config.js +++ b/commitlint.config.js @@ -1,3 +1,3 @@ module.exports = { - extends: ['@commitlint/config-conventional'], -}; + extends: ['@commitlint/config-conventional'] +} diff --git a/eslint.config.mjs b/eslint.config.mjs new file mode 100644 index 0000000..a93d8a9 --- /dev/null +++ b/eslint.config.mjs @@ -0,0 +1,31 @@ +import js from '@eslint/js' +import globals from 'globals' +import tseslint from 'typescript-eslint' +import json from '@eslint/json' +import { defineConfig, globalIgnores } from 'eslint/config' + +export default defineConfig([ + globalIgnores(['dist/', 'package-lock.json']), + { + files: ['**/*.{js,mjs,cjs,ts,mts,cts}'], + plugins: { js }, + extends: ['js/recommended'] + }, + { + files: ['**/*.{js,mjs,cjs,ts,mts,cts}'], + languageOptions: { globals: globals.node } + }, + tseslint.configs.recommended, + { + files: ['**/*.json'], + plugins: { json }, + language: 'json/json', + extends: ['json/recommended'] + }, + { + files: ['**/*.json5'], + plugins: { json }, + language: 'json/json5', + extends: ['json/recommended'] + } +]) diff --git a/examples/basic/index.ts b/examples/basic/index.ts index ba49ff1..ccaeaff 100644 --- a/examples/basic/index.ts +++ b/examples/basic/index.ts @@ -1,16 +1,16 @@ -import {AdamantApi} from 'adamant-api'; +import { AdamantApi } from 'adamant-api' const nodes = [ 'https://endless.adamant.im', 'https://clown.adamant.im', 'http://23.226.231.225:36666', 'http://88.198.156.44:36666', - 'https://lake.adamant.im', -]; + 'https://lake.adamant.im' +] const api = new AdamantApi({ - nodes, -}); + nodes +}) /** * Make sure we are using active node with least ping @@ -22,14 +22,14 @@ api.onReady(async () => { * const response = await api.get('peers/version'); * ``` */ - const response = await api.getNodeVersion(); + const response = await api.getNodeVersion() if (!response.success) { - console.log(`Something bad happened: ${response.errorMessage}`); - return; + console.log(`Something bad happened: ${response.errorMessage}`) + return } - const {version} = response; + const { version } = response - console.log(`Connected node is using ADAMANT v${version}`); -}); + console.log(`Connected node is using ADAMANT v${version}`) +}) diff --git a/examples/getId/index.ts b/examples/getId/index.ts index 6374bdb..0e74a5a 100644 --- a/examples/getId/index.ts +++ b/examples/getId/index.ts @@ -1,4 +1,4 @@ -import {getTransactionId} from 'adamant-api'; +import { getTransactionId } from 'adamant-api' const id = getTransactionId({ type: 8, @@ -8,16 +8,15 @@ const id = getTransactionId({ chat: { message: '7189aba904138dd1d53948ed1e5b1d18a11ba1910834', own_message: '8b717d0a9142e697cafd342c8f79f042c47a9e712e8a61b6', - type: 1, - }, + type: 1 + } }, recipientId: 'U12605277787100066317', senderId: 'U8084717991279447871', - senderPublicKey: - '09c93f2667728c62d2279bbb8df34c3856088290167f557c33594dc212da054a', + senderPublicKey: '09c93f2667728c62d2279bbb8df34c3856088290167f557c33594dc212da054a', signature: - '304a4cb7e11651d576e2c4dffb4100bef5385981807f18c3267c863daf60bd277706e6790157beacf5100c77b6798c4725f2f4e070ca78496ff53a4c2e437f02', -}); + '304a4cb7e11651d576e2c4dffb4100bef5385981807f18c3267c863daf60bd277706e6790157beacf5100c77b6798c4725f2f4e070ca78496ff53a4c2e437f02' +}) // Transaction id: 5505818610983968576 -console.log(`Transaction id: ${id}`); +console.log(`Transaction id: ${id}`) diff --git a/examples/socket/index.ts b/examples/socket/index.ts index fcedf4c..2f2184b 100644 --- a/examples/socket/index.ts +++ b/examples/socket/index.ts @@ -3,47 +3,45 @@ import { TransactionType, decodeMessage, WebSocketClient, - ChatMessageTransaction, -} from 'adamant-api'; + ChatMessageTransaction +} from 'adamant-api' const nodes = [ 'https://endless.adamant.im', 'https://clown.adamant.im', 'http://23.226.231.225:36666', 'http://88.198.156.44:36666', - 'https://lake.adamant.im', -]; + 'https://lake.adamant.im' +] /** * ADM address to subscribe to notifications */ -const admAddress = process.env.ADAMANT_ADDRESS as `U${string}`; +const admAddress = process.env.ADAMANT_ADDRESS as `U${string}` /** * Pass phrase to decode messages */ -const passphrase = process.env.PASSPHRASE!; +const passphrase = process.env.PASSPHRASE! -const socket = new WebSocketClient({admAddress}); +const socket = new WebSocketClient({ admAddress }) function onChatTransaction(transaction: ChatMessageTransaction) { - const {chat} = transaction.asset; + const { chat } = transaction.asset const decoded = decodeMessage( chat.message, transaction.senderPublicKey, passphrase, chat.own_message - ); + ) - console.log( - `Got a new message from ${transaction.senderId}:\n "${decoded}"` - ); + console.log(`Got a new message from ${transaction.senderId}:\n "${decoded}"`) } /** * Handle chat messages only */ -socket.on(TransactionType.CHAT_MESSAGE, onChatTransaction); +socket.on(TransactionType.CHAT_MESSAGE, onChatTransaction) // or @@ -54,16 +52,16 @@ socket.on(TransactionType.CHAT_MESSAGE, onChatTransaction); // }); setTimeout(() => { - console.log('the handler has been removed'); + console.log('the handler has been removed') /** * Remove the handler from all types */ - socket.off(onChatTransaction); -}, 60 * 1000); + socket.off(onChatTransaction) +}, 60 * 1000) const api = new AdamantApi({ nodes, - socket, -}); + socket +}) -export default api; +export default api diff --git a/jest.config.js b/jest.config.js index 3745fc2..e5fbf09 100644 --- a/jest.config.js +++ b/jest.config.js @@ -1,5 +1,5 @@ /** @type {import('ts-jest').JestConfigWithTsJest} */ module.exports = { preset: 'ts-jest', - testEnvironment: 'node', -}; + testEnvironment: 'node' +} diff --git a/package.json b/package.json index 61502ee..181469b 100644 --- a/package.json +++ b/package.json @@ -46,8 +46,8 @@ ], "scripts": { "test": "jest", - "lint": "gts lint", - "prepare": "husky install", + "lint": "npx eslint", + "prepare": "husky", "clean": "gts clean", "compile": "tsc", "fix": "gts fix", @@ -56,40 +56,44 @@ }, "dependencies": { "@liskhq/lisk-cryptography": "4.1.0", - "axios": "^1.7.2", - "bignumber.js": "^9.1.2", + "axios": "^1.11.0", + "bignumber.js": "^9.3.1", "bip39": "^3.1.0", - "bitcoinjs-lib": "^6.1.5", + "bitcoinjs-lib": "^6.1.7", "bytebuffer": "^5.0.1", "coininfo": "^5.2.1", - "ecpair": "^2.1.0", + "ecpair": "^3.0.0", "ed2curve": "^0.3.0", "ethereumjs-util": "^7.1.5", "hdkey": "^2.1.0", - "pbkdf2": "^3.1.2", + "pbkdf2": "^3.1.3", "socket.io-client": "^4.7.5", "sodium-browserify-tweetnacl": "^0.2.6", - "tiny-secp256k1": "^2.2.3", + "tiny-secp256k1": "^2.2.4", "tweetnacl": "^1.0.3" }, "devDependencies": { - "@commitlint/cli": "^19.3.0", - "@commitlint/config-conventional": "^19.2.2", + "@commitlint/cli": "^19.8.1", + "@commitlint/config-conventional": "^19.8.1", + "@eslint/js": "^9.32.0", + "@eslint/json": "^0.13.1", + "@eslint/markdown": "^7.1.0", "@types/bytebuffer": "^5.0.49", - "@types/hdkey": "^2.0.3", "@types/ed2curve": "^0.2.4", - "@types/jest": "^29.5.12", - "@types/node": "20.12.13", + "@types/hdkey": "^2.1.0", + "@types/jest": "^30.0.0", + "@types/node": "24.1.0", "@types/pbkdf2": "^3.1.2", - "eslint": "^8.54.0", + "eslint": "^9.32.0", "eslint-config-google": "^0.14.0", - "eslint-plugin-jest": "^28.5.0", - "husky": "^9.0.11", - "jest": "^29.7.0", - "prettier": "^3.2.5", - "ts-jest": "^29.1.4", - "gts": "^5.3.0", - "typescript": "~5.1.0" + "eslint-plugin-jest": "^29.0.1", + "globals": "^16.3.0", + "husky": "^9.1.7", + "jest": "^30.0.5", + "prettier": "^3.6.2", + "ts-jest": "^29.4.0", + "typescript": "~5.8.3", + "typescript-eslint": "^8.38.0" }, "publishConfig": { "access": "public" diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index ef1d3a7..b35a18d 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -1,952 +1,565 @@ -lockfileVersion: '6.0' +lockfileVersion: '9.0' settings: autoInstallPeers: true excludeLinksFromLockfile: false -dependencies: - '@liskhq/lisk-cryptography': - specifier: 4.1.0 - version: 4.1.0 - axios: - specifier: ^1.7.2 - version: 1.7.2 - bignumber.js: - specifier: ^9.1.2 - version: 9.1.2 - bip39: - specifier: ^3.1.0 - version: 3.1.0 - bitcoinjs-lib: - specifier: ^6.1.5 - version: 6.1.5 - bytebuffer: - specifier: ^5.0.1 - version: 5.0.1 - coininfo: - specifier: ^5.2.1 - version: 5.2.1 - ecpair: - specifier: ^2.1.0 - version: 2.1.0 - ed2curve: - specifier: ^0.3.0 - version: 0.3.0 - ethereumjs-util: - specifier: ^7.1.5 - version: 7.1.5 - hdkey: - specifier: ^2.1.0 - version: 2.1.0 - pbkdf2: - specifier: ^3.1.2 - version: 3.1.2 - socket.io-client: - specifier: ^4.7.5 - version: 4.7.5 - sodium-browserify-tweetnacl: - specifier: ^0.2.6 - version: 0.2.6 - tiny-secp256k1: - specifier: ^2.2.3 - version: 2.2.3 - tweetnacl: - specifier: ^1.0.3 - version: 1.0.3 - -devDependencies: - '@commitlint/cli': - specifier: ^19.3.0 - version: 19.3.0(@types/node@20.12.13)(typescript@5.1.6) - '@commitlint/config-conventional': - specifier: ^19.2.2 - version: 19.2.2 - '@types/bytebuffer': - specifier: ^5.0.49 - version: 5.0.49 - '@types/ed2curve': - specifier: ^0.2.4 - version: 0.2.4 - '@types/hdkey': - specifier: ^2.0.3 - version: 2.0.3 - '@types/jest': - specifier: ^29.5.12 - version: 29.5.12 - '@types/node': - specifier: 20.12.13 - version: 20.12.13 - '@types/pbkdf2': - specifier: ^3.1.2 - version: 3.1.2 - eslint: - specifier: ^8.54.0 - version: 8.54.0 - eslint-config-google: - specifier: ^0.14.0 - version: 0.14.0(eslint@8.54.0) - eslint-plugin-jest: - specifier: ^28.5.0 - version: 28.5.0(eslint@8.54.0)(jest@29.7.0)(typescript@5.1.6) - gts: - specifier: ^5.3.0 - version: 5.3.0(typescript@5.1.6) - husky: - specifier: ^9.0.11 - version: 9.0.11 - jest: - specifier: ^29.7.0 - version: 29.7.0(@types/node@20.12.13) - prettier: - specifier: ^3.2.5 - version: 3.2.5 - ts-jest: - specifier: ^29.1.4 - version: 29.1.4(@babel/core@7.23.0)(jest@29.7.0)(typescript@5.1.6) - typescript: - specifier: ~5.1.0 - version: 5.1.6 +importers: + + .: + dependencies: + '@liskhq/lisk-cryptography': + specifier: 4.1.0 + version: 4.1.0 + axios: + specifier: ^1.11.0 + version: 1.11.0 + bignumber.js: + specifier: ^9.3.1 + version: 9.3.1 + bip39: + specifier: ^3.1.0 + version: 3.1.0 + bitcoinjs-lib: + specifier: ^6.1.7 + version: 6.1.7 + bytebuffer: + specifier: ^5.0.1 + version: 5.0.1 + coininfo: + specifier: ^5.2.1 + version: 5.2.1 + ecpair: + specifier: ^3.0.0 + version: 3.0.0(typescript@5.8.3) + ed2curve: + specifier: ^0.3.0 + version: 0.3.0 + ethereumjs-util: + specifier: ^7.1.5 + version: 7.1.5 + hdkey: + specifier: ^2.1.0 + version: 2.1.0 + pbkdf2: + specifier: ^3.1.3 + version: 3.1.3 + socket.io-client: + specifier: ^4.7.5 + version: 4.8.1 + sodium-browserify-tweetnacl: + specifier: ^0.2.6 + version: 0.2.6 + tiny-secp256k1: + specifier: ^2.2.4 + version: 2.2.4 + tweetnacl: + specifier: ^1.0.3 + version: 1.0.3 + devDependencies: + '@commitlint/cli': + specifier: ^19.8.1 + version: 19.8.1(@types/node@24.1.0)(typescript@5.8.3) + '@commitlint/config-conventional': + specifier: ^19.8.1 + version: 19.8.1 + '@eslint/js': + specifier: ^9.32.0 + version: 9.32.0 + '@eslint/json': + specifier: ^0.13.1 + version: 0.13.1 + '@eslint/markdown': + specifier: ^7.1.0 + version: 7.1.0 + '@types/bytebuffer': + specifier: ^5.0.49 + version: 5.0.49 + '@types/ed2curve': + specifier: ^0.2.4 + version: 0.2.4 + '@types/hdkey': + specifier: ^2.1.0 + version: 2.1.0 + '@types/jest': + specifier: ^30.0.0 + version: 30.0.0 + '@types/node': + specifier: 24.1.0 + version: 24.1.0 + '@types/pbkdf2': + specifier: ^3.1.2 + version: 3.1.2 + eslint: + specifier: ^9.32.0 + version: 9.32.0(jiti@2.4.2) + eslint-config-google: + specifier: ^0.14.0 + version: 0.14.0(eslint@9.32.0(jiti@2.4.2)) + eslint-plugin-jest: + specifier: ^29.0.1 + version: 29.0.1(@typescript-eslint/eslint-plugin@8.38.0(@typescript-eslint/parser@8.38.0(eslint@9.32.0(jiti@2.4.2))(typescript@5.8.3))(eslint@9.32.0(jiti@2.4.2))(typescript@5.8.3))(eslint@9.32.0(jiti@2.4.2))(jest@30.0.5(@types/node@24.1.0))(typescript@5.8.3) + globals: + specifier: ^16.3.0 + version: 16.3.0 + husky: + specifier: ^9.1.7 + version: 9.1.7 + jest: + specifier: ^30.0.5 + version: 30.0.5(@types/node@24.1.0) + prettier: + specifier: ^3.6.2 + version: 3.6.2 + ts-jest: + specifier: ^29.4.0 + version: 29.4.0(@babel/core@7.28.0)(@jest/transform@30.0.5)(@jest/types@30.0.5)(babel-jest@30.0.5(@babel/core@7.28.0))(jest-util@30.0.5)(jest@30.0.5(@types/node@24.1.0))(typescript@5.8.3) + typescript: + specifier: ~5.8.3 + version: 5.8.3 + typescript-eslint: + specifier: ^8.38.0 + version: 8.38.0(eslint@9.32.0(jiti@2.4.2))(typescript@5.8.3) packages: - /@aashutoshrathi/word-wrap@1.2.6: - resolution: {integrity: sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA==} - engines: {node: '>=0.10.0'} - dev: true - - /@ampproject/remapping@2.2.1: - resolution: {integrity: sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg==} + '@ampproject/remapping@2.3.0': + resolution: {integrity: sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==} engines: {node: '>=6.0.0'} - dependencies: - '@jridgewell/gen-mapping': 0.3.3 - '@jridgewell/trace-mapping': 0.3.19 - dev: true - - /@babel/code-frame@7.22.13: - resolution: {integrity: sha512-XktuhWlJ5g+3TJXc5upd9Ks1HutSArik6jf2eAjYFyIOf4ej3RN+184cZbzDvbPnuTJIUhPKKJE3cIsYTiAT3w==} - engines: {node: '>=6.9.0'} - dependencies: - '@babel/highlight': 7.22.20 - chalk: 2.4.2 - dev: true - - /@babel/compat-data@7.22.20: - resolution: {integrity: sha512-BQYjKbpXjoXwFW5jGqiizJQQT/aC7pFm9Ok1OWssonuguICi264lbgMzRp2ZMmRSlfkX6DsWDDcsrctK8Rwfiw==} - engines: {node: '>=6.9.0'} - dev: true - /@babel/core@7.23.0: - resolution: {integrity: sha512-97z/ju/Jy1rZmDxybphrBuI+jtJjFVoz7Mr9yUQVVVi+DNZE333uFQeMOqcCIy1x3WYBIbWftUSLmbNXNT7qFQ==} + '@babel/code-frame@7.27.1': + resolution: {integrity: sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg==} engines: {node: '>=6.9.0'} - dependencies: - '@ampproject/remapping': 2.2.1 - '@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/core@7.23.0) - '@babel/helpers': 7.23.1 - '@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.3.4 - gensync: 1.0.0-beta.2 - json5: 2.2.3 - semver: 6.3.1 - transitivePeerDependencies: - - supports-color - dev: true - /@babel/generator@7.23.0: - resolution: {integrity: sha512-lN85QRR+5IbYrMWM6Y4pE/noaQtg4pNiqeNGX60eqOfo6gtEj6uw/JagelB8vVztSd7R6M5n1+PQkDbHbBRU4g==} + '@babel/compat-data@7.28.0': + resolution: {integrity: sha512-60X7qkglvrap8mn1lh2ebxXdZYtUcpd7gsmy9kLaBJ4i/WdY8PqTSdxyA8qraikqKQK5C1KRBKXqznrVapyNaw==} engines: {node: '>=6.9.0'} - dependencies: - '@babel/types': 7.23.0 - '@jridgewell/gen-mapping': 0.3.3 - '@jridgewell/trace-mapping': 0.3.19 - jsesc: 2.5.2 - dev: true - /@babel/helper-compilation-targets@7.22.15: - resolution: {integrity: sha512-y6EEzULok0Qvz8yyLkCvVX+02ic+By2UdOhylwUOvOn9dvYc9mKICJuuU1n1XBI02YWsNsnrY1kc6DVbjcXbtw==} + '@babel/core@7.28.0': + resolution: {integrity: sha512-UlLAnTPrFdNGoFtbSXwcGFQBtQZJCNjaN6hQNP3UPvuNXT1i82N26KL3dZeIpNalWywr9IuQuncaAfUaS1g6sQ==} engines: {node: '>=6.9.0'} - dependencies: - '@babel/compat-data': 7.22.20 - '@babel/helper-validator-option': 7.22.15 - browserslist: 4.22.1 - lru-cache: 5.1.1 - semver: 6.3.1 - dev: true - /@babel/helper-environment-visitor@7.22.20: - resolution: {integrity: sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA==} + '@babel/generator@7.28.0': + resolution: {integrity: sha512-lJjzvrbEeWrhB4P3QBsH7tey117PjLZnDbLiQEKjQ/fNJTjuq4HSqgFA+UNSwZT8D7dxxbnuSBMsa1lrWzKlQg==} engines: {node: '>=6.9.0'} - dev: true - /@babel/helper-function-name@7.23.0: - resolution: {integrity: sha512-OErEqsrxjZTJciZ4Oo+eoZqeW9UIiOcuYKRJA4ZAgV9myA+pOXhhmpfNCKjEH/auVfEYVFJ6y1Tc4r0eIApqiw==} + '@babel/helper-compilation-targets@7.27.2': + resolution: {integrity: sha512-2+1thGUUWWjLTYTHZWK1n8Yga0ijBz1XAhUXcKy81rd5g6yh7hGqMp45v7cadSbEHc9G3OTv45SyneRN3ps4DQ==} engines: {node: '>=6.9.0'} - dependencies: - '@babel/template': 7.22.15 - '@babel/types': 7.23.0 - dev: true - /@babel/helper-hoist-variables@7.22.5: - resolution: {integrity: sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==} + '@babel/helper-globals@7.28.0': + resolution: {integrity: sha512-+W6cISkXFa1jXsDEdYA8HeevQT/FULhxzR99pxphltZcVaugps53THCeiWA8SguxxpSp3gKPiuYfSWopkLQ4hw==} engines: {node: '>=6.9.0'} - dependencies: - '@babel/types': 7.23.0 - dev: true - /@babel/helper-module-imports@7.22.15: - resolution: {integrity: sha512-0pYVBnDKZO2fnSPCrgM/6WMc7eS20Fbok+0r88fp+YtWVLZrp4CkafFGIp+W0VKw4a22sgebPT99y+FDNMdP4w==} + '@babel/helper-module-imports@7.27.1': + resolution: {integrity: sha512-0gSFWUPNXNopqtIPQvlD5WgXYI5GY2kP2cCvoT8kczjbfcfuIljTbcWrulD1CIPIX2gt1wghbDy08yE1p+/r3w==} engines: {node: '>=6.9.0'} - dependencies: - '@babel/types': 7.23.0 - dev: true - /@babel/helper-module-transforms@7.23.0(@babel/core@7.23.0): - resolution: {integrity: sha512-WhDWw1tdrlT0gMgUJSlX0IQvoO1eN279zrAUbVB+KpV2c3Tylz8+GnKOLllCS6Z/iZQEyVYxhZVUdPTqs2YYPw==} + '@babel/helper-module-transforms@7.27.3': + resolution: {integrity: sha512-dSOvYwvyLsWBeIRyOeHXp5vPj5l1I011r52FM1+r1jCERv+aFXYk4whgQccYEGYxK2H3ZAIA8nuPkQ0HaUo3qg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 - dependencies: - '@babel/core': 7.23.0 - '@babel/helper-environment-visitor': 7.22.20 - '@babel/helper-module-imports': 7.22.15 - '@babel/helper-simple-access': 7.22.5 - '@babel/helper-split-export-declaration': 7.22.6 - '@babel/helper-validator-identifier': 7.22.20 - dev: true - - /@babel/helper-plugin-utils@7.22.5: - resolution: {integrity: sha512-uLls06UVKgFG9QD4OeFYLEGteMIAa5kpTPcFL28yuCIIzsf6ZyKZMllKVOCZFhiZ5ptnwX4mtKdWCBE/uT4amg==} - engines: {node: '>=6.9.0'} - dev: true - - /@babel/helper-simple-access@7.22.5: - resolution: {integrity: sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w==} - engines: {node: '>=6.9.0'} - dependencies: - '@babel/types': 7.23.0 - dev: true - - /@babel/helper-split-export-declaration@7.22.6: - resolution: {integrity: sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g==} - engines: {node: '>=6.9.0'} - dependencies: - '@babel/types': 7.23.0 - dev: true - /@babel/helper-string-parser@7.22.5: - resolution: {integrity: sha512-mM4COjgZox8U+JcXQwPijIZLElkgEpO5rsERVDJTc2qfCDfERyob6k5WegS14SX18IIjv+XD+GrqNumY5JRCDw==} + '@babel/helper-plugin-utils@7.27.1': + resolution: {integrity: sha512-1gn1Up5YXka3YYAHGKpbideQ5Yjf1tDa9qYcgysz+cNCXukyLl6DjPXhD3VRwSb8c0J9tA4b2+rHEZtc6R0tlw==} engines: {node: '>=6.9.0'} - dev: true - /@babel/helper-validator-identifier@7.22.20: - resolution: {integrity: sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==} + '@babel/helper-string-parser@7.27.1': + resolution: {integrity: sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==} engines: {node: '>=6.9.0'} - dev: true - /@babel/helper-validator-option@7.22.15: - resolution: {integrity: sha512-bMn7RmyFjY/mdECUbgn9eoSY4vqvacUnS9i9vGAGttgFWesO6B4CYWA7XlpbWgBt71iv/hfbPlynohStqnu5hA==} + '@babel/helper-validator-identifier@7.27.1': + resolution: {integrity: sha512-D2hP9eA+Sqx1kBZgzxZh0y1trbuU+JoDkiEwqhQ36nodYqJwyEIhPSdMNd7lOm/4io72luTPWH20Yda0xOuUow==} engines: {node: '>=6.9.0'} - dev: true - /@babel/helpers@7.23.1: - resolution: {integrity: sha512-chNpneuK18yW5Oxsr+t553UZzzAs3aZnFm4bxhebsNTeshrC95yA7l5yl7GBAG+JG1rF0F7zzD2EixK9mWSDoA==} + '@babel/helper-validator-option@7.27.1': + resolution: {integrity: sha512-YvjJow9FxbhFFKDSuFnVCe2WxXk1zWc22fFePVNEaWJEu8IrZVlda6N0uHwzZrUM1il7NC9Mlp4MaJYbYd9JSg==} engines: {node: '>=6.9.0'} - dependencies: - '@babel/template': 7.22.15 - '@babel/traverse': 7.23.0 - '@babel/types': 7.23.0 - transitivePeerDependencies: - - supports-color - dev: true - /@babel/highlight@7.22.20: - resolution: {integrity: sha512-dkdMCN3py0+ksCgYmGG8jKeGA/8Tk+gJwSYYlFGxG5lmhfKNoAy004YpLxpS1W2J8m/EK2Ew+yOs9pVRwO89mg==} + '@babel/helpers@7.27.6': + resolution: {integrity: sha512-muE8Tt8M22638HU31A3CgfSUciwz1fhATfoVai05aPXGor//CdWDCbnlY1yvBPo07njuVOCNGCSp/GTt12lIug==} engines: {node: '>=6.9.0'} - dependencies: - '@babel/helper-validator-identifier': 7.22.20 - chalk: 2.4.2 - js-tokens: 4.0.0 - dev: true - /@babel/parser@7.23.0: - resolution: {integrity: sha512-vvPKKdMemU85V9WE/l5wZEmImpCtLqbnTvqDS2U1fJ96KrxoW7KrXhNsNCblQlg8Ck4b85yxdTyelsMUgFUXiw==} + '@babel/parser@7.28.0': + resolution: {integrity: sha512-jVZGvOxOuNSsuQuLRTh13nU0AogFlw32w/MT+LV6D3sP5WdbW61E77RnkbaO2dUvmPAYrBDJXGn5gGS6tH4j8g==} engines: {node: '>=6.0.0'} hasBin: true - dependencies: - '@babel/types': 7.23.0 - dev: true - /@babel/plugin-syntax-async-generators@7.8.4(@babel/core@7.23.0): + '@babel/plugin-syntax-async-generators@7.8.4': resolution: {integrity: sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==} peerDependencies: '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.23.0 - '@babel/helper-plugin-utils': 7.22.5 - dev: true - /@babel/plugin-syntax-bigint@7.8.3(@babel/core@7.23.0): + '@babel/plugin-syntax-bigint@7.8.3': resolution: {integrity: sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==} peerDependencies: '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.23.0 - '@babel/helper-plugin-utils': 7.22.5 - dev: true - /@babel/plugin-syntax-class-properties@7.12.13(@babel/core@7.23.0): + '@babel/plugin-syntax-class-properties@7.12.13': resolution: {integrity: sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==} peerDependencies: '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.23.0 - '@babel/helper-plugin-utils': 7.22.5 - dev: true - /@babel/plugin-syntax-import-meta@7.10.4(@babel/core@7.23.0): + '@babel/plugin-syntax-class-static-block@7.14.5': + resolution: {integrity: sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-import-attributes@7.27.1': + resolution: {integrity: sha512-oFT0FrKHgF53f4vOsZGi2Hh3I35PfSmVs4IBFLFj4dnafP+hIWDLg3VyKmUHfLoLHlyxY4C7DGtmHuJgn+IGww==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-import-meta@7.10.4': resolution: {integrity: sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==} peerDependencies: '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.23.0 - '@babel/helper-plugin-utils': 7.22.5 - dev: true - /@babel/plugin-syntax-json-strings@7.8.3(@babel/core@7.23.0): + '@babel/plugin-syntax-json-strings@7.8.3': resolution: {integrity: sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==} peerDependencies: '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.23.0 - '@babel/helper-plugin-utils': 7.22.5 - dev: true - /@babel/plugin-syntax-jsx@7.22.5(@babel/core@7.23.0): - resolution: {integrity: sha512-gvyP4hZrgrs/wWMaocvxZ44Hw0b3W8Pe+cMxc8V1ULQ07oh8VNbIRaoD1LRZVTvD+0nieDKjfgKg89sD7rrKrg==} + '@babel/plugin-syntax-jsx@7.27.1': + resolution: {integrity: sha512-y8YTNIeKoyhGd9O0Jiyzyyqk8gdjnumGTQPsz0xOZOQ2RmkVJeZ1vmmfIvFEKqucBG6axJGBZDE/7iI5suUI/w==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.23.0 - '@babel/helper-plugin-utils': 7.22.5 - dev: true - /@babel/plugin-syntax-logical-assignment-operators@7.10.4(@babel/core@7.23.0): + '@babel/plugin-syntax-logical-assignment-operators@7.10.4': resolution: {integrity: sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==} peerDependencies: '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.23.0 - '@babel/helper-plugin-utils': 7.22.5 - dev: true - /@babel/plugin-syntax-nullish-coalescing-operator@7.8.3(@babel/core@7.23.0): + '@babel/plugin-syntax-nullish-coalescing-operator@7.8.3': resolution: {integrity: sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==} peerDependencies: '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.23.0 - '@babel/helper-plugin-utils': 7.22.5 - dev: true - /@babel/plugin-syntax-numeric-separator@7.10.4(@babel/core@7.23.0): + '@babel/plugin-syntax-numeric-separator@7.10.4': resolution: {integrity: sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==} peerDependencies: '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.23.0 - '@babel/helper-plugin-utils': 7.22.5 - dev: true - /@babel/plugin-syntax-object-rest-spread@7.8.3(@babel/core@7.23.0): + '@babel/plugin-syntax-object-rest-spread@7.8.3': resolution: {integrity: sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==} peerDependencies: '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.23.0 - '@babel/helper-plugin-utils': 7.22.5 - dev: true - /@babel/plugin-syntax-optional-catch-binding@7.8.3(@babel/core@7.23.0): + '@babel/plugin-syntax-optional-catch-binding@7.8.3': resolution: {integrity: sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==} peerDependencies: '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.23.0 - '@babel/helper-plugin-utils': 7.22.5 - dev: true - /@babel/plugin-syntax-optional-chaining@7.8.3(@babel/core@7.23.0): + '@babel/plugin-syntax-optional-chaining@7.8.3': resolution: {integrity: sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==} peerDependencies: '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.23.0 - '@babel/helper-plugin-utils': 7.22.5 - dev: true - /@babel/plugin-syntax-top-level-await@7.14.5(@babel/core@7.23.0): + '@babel/plugin-syntax-private-property-in-object@7.14.5': + resolution: {integrity: sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-top-level-await@7.14.5': resolution: {integrity: sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.23.0 - '@babel/helper-plugin-utils': 7.22.5 - dev: true - /@babel/plugin-syntax-typescript@7.22.5(@babel/core@7.23.0): - resolution: {integrity: sha512-1mS2o03i7t1c6VzH6fdQ3OA8tcEIxwG18zIPRp+UY1Ihv6W+XZzBCVxExF9upussPXJ0xE9XRHwMoNs1ep/nRQ==} + '@babel/plugin-syntax-typescript@7.27.1': + resolution: {integrity: sha512-xfYCBMxveHrRMnAWl1ZlPXOZjzkN82THFvLhQhFXFt81Z5HnN+EtUkZhv/zcKpmT3fzmWZB0ywiBrbC3vogbwQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.23.0 - '@babel/helper-plugin-utils': 7.22.5 - dev: true - /@babel/template@7.22.15: - resolution: {integrity: sha512-QPErUVm4uyJa60rkI73qneDacvdvzxshT3kksGqlGWYdOTIUOwJ7RDUL8sGqslY1uXWSL6xMFKEXDS3ox2uF0w==} + '@babel/template@7.27.2': + resolution: {integrity: sha512-LPDZ85aEJyYSd18/DkjNh4/y1ntkE5KwUHWTiqgRxruuZL2F1yuHligVHLvcHY2vMHXttKFpJn6LwfI7cw7ODw==} engines: {node: '>=6.9.0'} - dependencies: - '@babel/code-frame': 7.22.13 - '@babel/parser': 7.23.0 - '@babel/types': 7.23.0 - dev: true - /@babel/traverse@7.23.0: - resolution: {integrity: sha512-t/QaEvyIoIkwzpiZ7aoSKK8kObQYeF7T2v+dazAYCb8SXtp58zEVkWW7zAnju8FNKNdr4ScAOEDmMItbyOmEYw==} + '@babel/traverse@7.28.0': + resolution: {integrity: sha512-mGe7UK5wWyh0bKRfupsUchrQGqvDbZDbKJw+kcRGSmdHVYrv+ltd0pnpDTVpiTqnaBru9iEvA8pz8W46v0Amwg==} engines: {node: '>=6.9.0'} - dependencies: - '@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.23.0 - '@babel/types': 7.23.0 - debug: 4.3.4 - globals: 11.12.0 - transitivePeerDependencies: - - supports-color - dev: true - /@babel/types@7.23.0: - resolution: {integrity: sha512-0oIyUfKoI3mSqMvsxBdclDwxXKXAUA8v/apZbc+iSyARYou1o8ZGDxbUYyLFoW2arqS2jDGqJuZvv1d/io1axg==} + '@babel/types@7.28.1': + resolution: {integrity: sha512-x0LvFTekgSX+83TI28Y9wYPUfzrnl2aT5+5QLnO6v7mSJYtEEevuDRN0F0uSHRk1G1IWZC43o00Y0xDDrpBGPQ==} engines: {node: '>=6.9.0'} - dependencies: - '@babel/helper-string-parser': 7.22.5 - '@babel/helper-validator-identifier': 7.22.20 - to-fast-properties: 2.0.0 - dev: true - /@bcoe/v8-coverage@0.2.3: + '@bcoe/v8-coverage@0.2.3': resolution: {integrity: sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==} - dev: true - /@commitlint/cli@19.3.0(@types/node@20.12.13)(typescript@5.1.6): - resolution: {integrity: sha512-LgYWOwuDR7BSTQ9OLZ12m7F/qhNY+NpAyPBgo4YNMkACE7lGuUnuQq1yi9hz1KA4+3VqpOYl8H1rY/LYK43v7g==} + '@commitlint/cli@19.8.1': + resolution: {integrity: sha512-LXUdNIkspyxrlV6VDHWBmCZRtkEVRpBKxi2Gtw3J54cGWhLCTouVD/Q6ZSaSvd2YaDObWK8mDjrz3TIKtaQMAA==} engines: {node: '>=v18'} hasBin: true - dependencies: - '@commitlint/format': 19.3.0 - '@commitlint/lint': 19.2.2 - '@commitlint/load': 19.2.0(@types/node@20.12.13)(typescript@5.1.6) - '@commitlint/read': 19.2.1 - '@commitlint/types': 19.0.3 - execa: 8.0.1 - yargs: 17.7.2 - transitivePeerDependencies: - - '@types/node' - - typescript - dev: true - /@commitlint/config-conventional@19.2.2: - resolution: {integrity: sha512-mLXjsxUVLYEGgzbxbxicGPggDuyWNkf25Ht23owXIH+zV2pv1eJuzLK3t1gDY5Gp6pxdE60jZnWUY5cvgL3ufw==} + '@commitlint/config-conventional@19.8.1': + resolution: {integrity: sha512-/AZHJL6F6B/G959CsMAzrPKKZjeEiAVifRyEwXxcT6qtqbPwGw+iQxmNS+Bu+i09OCtdNRW6pNpBvgPrtMr9EQ==} engines: {node: '>=v18'} - dependencies: - '@commitlint/types': 19.0.3 - conventional-changelog-conventionalcommits: 7.0.2 - dev: true - /@commitlint/config-validator@19.0.3: - resolution: {integrity: sha512-2D3r4PKjoo59zBc2auodrSCaUnCSALCx54yveOFwwP/i2kfEAQrygwOleFWswLqK0UL/F9r07MFi5ev2ohyM4Q==} + '@commitlint/config-validator@19.8.1': + resolution: {integrity: sha512-0jvJ4u+eqGPBIzzSdqKNX1rvdbSU1lPNYlfQQRIFnBgLy26BtC0cFnr7c/AyuzExMxWsMOte6MkTi9I3SQ3iGQ==} engines: {node: '>=v18'} - dependencies: - '@commitlint/types': 19.0.3 - ajv: 8.12.0 - dev: true - /@commitlint/ensure@19.0.3: - resolution: {integrity: sha512-SZEpa/VvBLoT+EFZVb91YWbmaZ/9rPH3ESrINOl0HD2kMYsjvl0tF7nMHh0EpTcv4+gTtZBAe1y/SS6/OhfZzQ==} + '@commitlint/ensure@19.8.1': + resolution: {integrity: sha512-mXDnlJdvDzSObafjYrOSvZBwkD01cqB4gbnnFuVyNpGUM5ijwU/r/6uqUmBXAAOKRfyEjpkGVZxaDsCVnHAgyw==} engines: {node: '>=v18'} - dependencies: - '@commitlint/types': 19.0.3 - lodash.camelcase: 4.3.0 - lodash.kebabcase: 4.1.1 - lodash.snakecase: 4.1.1 - lodash.startcase: 4.4.0 - lodash.upperfirst: 4.3.1 - dev: true - /@commitlint/execute-rule@19.0.0: - resolution: {integrity: sha512-mtsdpY1qyWgAO/iOK0L6gSGeR7GFcdW7tIjcNFxcWkfLDF5qVbPHKuGATFqRMsxcO8OUKNj0+3WOHB7EHm4Jdw==} + '@commitlint/execute-rule@19.8.1': + resolution: {integrity: sha512-YfJyIqIKWI64Mgvn/sE7FXvVMQER/Cd+s3hZke6cI1xgNT/f6ZAz5heND0QtffH+KbcqAwXDEE1/5niYayYaQA==} engines: {node: '>=v18'} - dev: true - /@commitlint/format@19.3.0: - resolution: {integrity: sha512-luguk5/aF68HiF4H23ACAfk8qS8AHxl4LLN5oxPc24H+2+JRPsNr1OS3Gaea0CrH7PKhArBMKBz5RX9sA5NtTg==} + '@commitlint/format@19.8.1': + resolution: {integrity: sha512-kSJj34Rp10ItP+Eh9oCItiuN/HwGQMXBnIRk69jdOwEW9llW9FlyqcWYbHPSGofmjsqeoxa38UaEA5tsbm2JWw==} engines: {node: '>=v18'} - dependencies: - '@commitlint/types': 19.0.3 - chalk: 5.3.0 - dev: true - /@commitlint/is-ignored@19.2.2: - resolution: {integrity: sha512-eNX54oXMVxncORywF4ZPFtJoBm3Tvp111tg1xf4zWXGfhBPKpfKG6R+G3G4v5CPlRROXpAOpQ3HMhA9n1Tck1g==} + '@commitlint/is-ignored@19.8.1': + resolution: {integrity: sha512-AceOhEhekBUQ5dzrVhDDsbMaY5LqtN8s1mqSnT2Kz1ERvVZkNihrs3Sfk1Je/rxRNbXYFzKZSHaPsEJJDJV8dg==} engines: {node: '>=v18'} - dependencies: - '@commitlint/types': 19.0.3 - semver: 7.6.2 - dev: true - /@commitlint/lint@19.2.2: - resolution: {integrity: sha512-xrzMmz4JqwGyKQKTpFzlN0dx0TAiT7Ran1fqEBgEmEj+PU98crOFtysJgY+QdeSagx6EDRigQIXJVnfrI0ratA==} + '@commitlint/lint@19.8.1': + resolution: {integrity: sha512-52PFbsl+1EvMuokZXLRlOsdcLHf10isTPlWwoY1FQIidTsTvjKXVXYb7AvtpWkDzRO2ZsqIgPK7bI98x8LRUEw==} engines: {node: '>=v18'} - dependencies: - '@commitlint/is-ignored': 19.2.2 - '@commitlint/parse': 19.0.3 - '@commitlint/rules': 19.0.3 - '@commitlint/types': 19.0.3 - dev: true - /@commitlint/load@19.2.0(@types/node@20.12.13)(typescript@5.1.6): - resolution: {integrity: sha512-XvxxLJTKqZojCxaBQ7u92qQLFMMZc4+p9qrIq/9kJDy8DOrEa7P1yx7Tjdc2u2JxIalqT4KOGraVgCE7eCYJyQ==} + '@commitlint/load@19.8.1': + resolution: {integrity: sha512-9V99EKG3u7z+FEoe4ikgq7YGRCSukAcvmKQuTtUyiYPnOd9a2/H9Ak1J9nJA1HChRQp9OA/sIKPugGS+FK/k1A==} engines: {node: '>=v18'} - dependencies: - '@commitlint/config-validator': 19.0.3 - '@commitlint/execute-rule': 19.0.0 - '@commitlint/resolve-extends': 19.1.0 - '@commitlint/types': 19.0.3 - chalk: 5.3.0 - cosmiconfig: 9.0.0(typescript@5.1.6) - cosmiconfig-typescript-loader: 5.0.0(@types/node@20.12.13)(cosmiconfig@9.0.0)(typescript@5.1.6) - lodash.isplainobject: 4.0.6 - lodash.merge: 4.6.2 - lodash.uniq: 4.5.0 - transitivePeerDependencies: - - '@types/node' - - typescript - dev: true - /@commitlint/message@19.0.0: - resolution: {integrity: sha512-c9czf6lU+9oF9gVVa2lmKaOARJvt4soRsVmbR7Njwp9FpbBgste5i7l/2l5o8MmbwGh4yE1snfnsy2qyA2r/Fw==} + '@commitlint/message@19.8.1': + resolution: {integrity: sha512-+PMLQvjRXiU+Ae0Wc+p99EoGEutzSXFVwQfa3jRNUZLNW5odZAyseb92OSBTKCu+9gGZiJASt76Cj3dLTtcTdg==} engines: {node: '>=v18'} - dev: true - /@commitlint/parse@19.0.3: - resolution: {integrity: sha512-Il+tNyOb8VDxN3P6XoBBwWJtKKGzHlitEuXA5BP6ir/3loWlsSqDr5aecl6hZcC/spjq4pHqNh0qPlfeWu38QA==} + '@commitlint/parse@19.8.1': + resolution: {integrity: sha512-mmAHYcMBmAgJDKWdkjIGq50X4yB0pSGpxyOODwYmoexxxiUCy5JJT99t1+PEMK7KtsCtzuWYIAXYAiKR+k+/Jw==} engines: {node: '>=v18'} - dependencies: - '@commitlint/types': 19.0.3 - conventional-changelog-angular: 7.0.0 - conventional-commits-parser: 5.0.0 - dev: true - /@commitlint/read@19.2.1: - resolution: {integrity: sha512-qETc4+PL0EUv7Q36lJbPG+NJiBOGg7SSC7B5BsPWOmei+Dyif80ErfWQ0qXoW9oCh7GTpTNRoaVhiI8RbhuaNw==} + '@commitlint/read@19.8.1': + resolution: {integrity: sha512-03Jbjb1MqluaVXKHKRuGhcKWtSgh3Jizqy2lJCRbRrnWpcM06MYm8th59Xcns8EqBYvo0Xqb+2DoZFlga97uXQ==} engines: {node: '>=v18'} - dependencies: - '@commitlint/top-level': 19.0.0 - '@commitlint/types': 19.0.3 - execa: 8.0.1 - git-raw-commits: 4.0.0 - minimist: 1.2.8 - dev: true - /@commitlint/resolve-extends@19.1.0: - resolution: {integrity: sha512-z2riI+8G3CET5CPgXJPlzftH+RiWYLMYv4C9tSLdLXdr6pBNimSKukYP9MS27ejmscqCTVA4almdLh0ODD2KYg==} + '@commitlint/resolve-extends@19.8.1': + resolution: {integrity: sha512-GM0mAhFk49I+T/5UCYns5ayGStkTt4XFFrjjf0L4S26xoMTSkdCf9ZRO8en1kuopC4isDFuEm7ZOm/WRVeElVg==} engines: {node: '>=v18'} - dependencies: - '@commitlint/config-validator': 19.0.3 - '@commitlint/types': 19.0.3 - global-directory: 4.0.1 - import-meta-resolve: 4.1.0 - lodash.mergewith: 4.6.2 - resolve-from: 5.0.0 - dev: true - /@commitlint/rules@19.0.3: - resolution: {integrity: sha512-TspKb9VB6svklxNCKKwxhELn7qhtY1rFF8ls58DcFd0F97XoG07xugPjjbVnLqmMkRjZDbDIwBKt9bddOfLaPw==} + '@commitlint/rules@19.8.1': + resolution: {integrity: sha512-Hnlhd9DyvGiGwjfjfToMi1dsnw1EXKGJNLTcsuGORHz6SS9swRgkBsou33MQ2n51/boIDrbsg4tIBbRpEWK2kw==} engines: {node: '>=v18'} - dependencies: - '@commitlint/ensure': 19.0.3 - '@commitlint/message': 19.0.0 - '@commitlint/to-lines': 19.0.0 - '@commitlint/types': 19.0.3 - execa: 8.0.1 - dev: true - /@commitlint/to-lines@19.0.0: - resolution: {integrity: sha512-vkxWo+VQU5wFhiP9Ub9Sre0FYe019JxFikrALVoD5UGa8/t3yOJEpEhxC5xKiENKKhUkTpEItMTRAjHw2SCpZw==} + '@commitlint/to-lines@19.8.1': + resolution: {integrity: sha512-98Mm5inzbWTKuZQr2aW4SReY6WUukdWXuZhrqf1QdKPZBCCsXuG87c+iP0bwtD6DBnmVVQjgp4whoHRVixyPBg==} engines: {node: '>=v18'} - dev: true - /@commitlint/top-level@19.0.0: - resolution: {integrity: sha512-KKjShd6u1aMGNkCkaX4aG1jOGdn7f8ZI8TR1VEuNqUOjWTOdcDSsmglinglJ18JTjuBX5I1PtjrhQCRcixRVFQ==} + '@commitlint/top-level@19.8.1': + resolution: {integrity: sha512-Ph8IN1IOHPSDhURCSXBz44+CIu+60duFwRsg6HqaISFHQHbmBtxVw4ZrFNIYUzEP7WwrNPxa2/5qJ//NK1FGcw==} engines: {node: '>=v18'} - dependencies: - find-up: 7.0.0 - dev: true - /@commitlint/types@19.0.3: - resolution: {integrity: sha512-tpyc+7i6bPG9mvaBbtKUeghfyZSDgWquIDfMgqYtTbmZ9Y9VzEm2je9EYcQ0aoz5o7NvGS+rcDec93yO08MHYA==} + '@commitlint/types@19.8.1': + resolution: {integrity: sha512-/yCrWGCoA1SVKOks25EGadP9Pnj0oAIHGpl2wH2M2Y46dPM2ueb8wyCVOD7O3WCTkaJ0IkKvzhl1JY7+uCT2Dw==} engines: {node: '>=v18'} - dependencies: - '@types/conventional-commits-parser': 5.0.0 - chalk: 5.3.0 - dev: true - /@eslint-community/eslint-utils@4.4.0(eslint@8.53.0): - resolution: {integrity: sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - peerDependencies: - eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 - dependencies: - eslint: 8.53.0 - eslint-visitor-keys: 3.4.3 - dev: true + '@emnapi/core@1.4.4': + resolution: {integrity: sha512-A9CnAbC6ARNMKcIcrQwq6HeHCjpcBZ5wSx4U01WXCqEKlrzB9F9315WDNHkrs2xbx7YjjSxbUYxuN6EQzpcY2g==} + + '@emnapi/runtime@1.4.4': + resolution: {integrity: sha512-hHyapA4A3gPaDCNfiqyZUStTMqIkKRshqPIuDOXv1hcBnD4U3l8cP0T1HMCfGRxQ6V64TGCcoswChANyOAwbQg==} - /@eslint-community/eslint-utils@4.4.0(eslint@8.54.0): - resolution: {integrity: sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==} + '@emnapi/wasi-threads@1.0.3': + resolution: {integrity: sha512-8K5IFFsQqF9wQNJptGbS6FNKgUTsSRYnTqNCG1vPP8jFdjSv18n2mQfJpkt2Oibo9iBEzcDnDxNwKTzC7svlJw==} + + '@eslint-community/eslint-utils@4.7.0': + resolution: {integrity: sha512-dyybb3AcajC7uha6CvhdVRJqaKyn7w2YKqKyAN37NKYgZT36w+iRb0Dymmc5qEJ549c/S31cMMSFd75bteCpCw==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 - dependencies: - eslint: 8.54.0 - eslint-visitor-keys: 3.4.3 - dev: true - /@eslint-community/regexpp@4.9.1: - resolution: {integrity: sha512-Y27x+MBLjXa+0JWDhykM3+JE+il3kHKAEqabfEWq3SDhZjLYb6/BHL/JKFnH3fe207JaXkyDo685Oc2Glt6ifA==} + '@eslint-community/regexpp@4.12.1': + resolution: {integrity: sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==} engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} - dev: true - /@eslint/eslintrc@2.1.3: - resolution: {integrity: sha512-yZzuIG+jnVu6hNSzFEN07e8BxF3uAzYtQb6uDkaYZLo6oYZDCq454c5kB8zxnzfCYyP4MIuyBn10L0DqwujTmA==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - dependencies: - ajv: 6.12.6 - debug: 4.3.4 - espree: 9.6.1 - globals: 13.22.0 - ignore: 5.2.4 - import-fresh: 3.3.0 - js-yaml: 4.1.0 - minimatch: 3.1.2 - strip-json-comments: 3.1.1 - transitivePeerDependencies: - - supports-color - dev: true + '@eslint/config-array@0.21.0': + resolution: {integrity: sha512-ENIdc4iLu0d93HeYirvKmrzshzofPw6VkZRKQGe9Nv46ZnWUzcF1xV01dcvEg/1wXUR61OmmlSfyeyO7EvjLxQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - /@eslint/js@8.53.0: - resolution: {integrity: sha512-Kn7K8dx/5U6+cT1yEhpX1w4PCSg0M+XyRILPgvwcEBjerFWCwQj5sbr3/VmxqV0JGHCBCzyd6LxypEuehypY1w==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - dev: true + '@eslint/config-helpers@0.3.0': + resolution: {integrity: sha512-ViuymvFmcJi04qdZeDc2whTHryouGcDlaxPqarTD0ZE10ISpxGUVZGZDx4w01upyIynL3iu6IXH2bS1NhclQMw==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - /@eslint/js@8.54.0: - resolution: {integrity: sha512-ut5V+D+fOoWPgGGNj83GGjnntO39xDy6DWxO0wb7Jp3DcMX0TfIqdzHF85VTQkerdyGmuuMD9AKAo5KiNlf/AQ==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - dev: true + '@eslint/core@0.15.1': + resolution: {integrity: sha512-bkOp+iumZCCbt1K1CmWf0R9pM5yKpDv+ZXtvSyQpudrI9kuFLp+bM2WOPXImuD/ceQuaa8f5pj93Y7zyECIGNA==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - /@humanwhocodes/config-array@0.11.13: - resolution: {integrity: sha512-JSBDMiDKSzQVngfRjOdFXgFfklaXI4K9nLF49Auh21lmBWRLIK3+xTErTWD4KU54pb6coM6ESE7Awz/FNU3zgQ==} - engines: {node: '>=10.10.0'} - dependencies: - '@humanwhocodes/object-schema': 2.0.1 - debug: 4.3.4 - minimatch: 3.1.2 - transitivePeerDependencies: - - supports-color - dev: true + '@eslint/eslintrc@3.3.1': + resolution: {integrity: sha512-gtF186CXhIl1p4pJNGZw8Yc6RlshoePRvE0X91oPGb3vZ8pM3qOS9W9NGPat9LziaBV7XrJWGylNQXkGcnM3IQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@eslint/js@9.32.0': + resolution: {integrity: sha512-BBpRFZK3eX6uMLKz8WxFOBIFFcGFJ/g8XuwjTHCqHROSIsopI+ddn/d5Cfh36+7+e5edVS8dbSHnBNhrLEX0zg==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@eslint/json@0.13.1': + resolution: {integrity: sha512-AGzO7cR0QqSEfJdx9jT4SHQ6BJ5K0G8kN7WNGI1Hgy5AVbUhBKfFoN0gNo86j97aqkU57mqFUW9ytMPdEnVARA==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@eslint/markdown@7.1.0': + resolution: {integrity: sha512-Y+X1B1j+/zupKDVJfkKc8uYMjQkGzfnd8lt7vK3y8x9Br6H5dBuhAfFrQ6ff7HAMm/1BwgecyEiRFkYCWPRxmA==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - /@humanwhocodes/module-importer@1.0.1: + '@eslint/object-schema@2.1.6': + resolution: {integrity: sha512-RBMg5FRL0I0gs51M/guSAj5/e14VQ4tpZnQNWwuDT66P14I43ItmPfIZRhO9fUVIPOAQXU47atlywZ/czoqFPA==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@eslint/plugin-kit@0.3.4': + resolution: {integrity: sha512-Ul5l+lHEcw3L5+k8POx6r74mxEYKG5kOb6Xpy2gCRW6zweT6TEhAf8vhxGgjhqrd/VO/Dirhsb+1hNpD1ue9hw==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@humanfs/core@0.19.1': + resolution: {integrity: sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA==} + engines: {node: '>=18.18.0'} + + '@humanfs/node@0.16.6': + resolution: {integrity: sha512-YuI2ZHQL78Q5HbhDiBA1X4LmYdXCKCMQIfw0pw7piHJwyREFebJUvrQN4cMssyES6x+vfUbx1CIpaQUKYdQZOw==} + engines: {node: '>=18.18.0'} + + '@humanwhocodes/module-importer@1.0.1': resolution: {integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==} engines: {node: '>=12.22'} - dev: true - /@humanwhocodes/object-schema@2.0.1: - resolution: {integrity: sha512-dvuCeX5fC9dXgJn9t+X5atfmgQAzUOWqS1254Gh0m6i8wKd10ebXkfNKiRK+1GWi/yTvvLDHpoxLr0xxxeslWw==} - dev: true + '@humanwhocodes/momoa@3.3.9': + resolution: {integrity: sha512-LHw6Op4bJb3/3KZgOgwflJx5zY9XOy0NU1NuyUFKGdTwHYmP+PbnQGCYQJ8NVNlulLfQish34b0VuUlLYP3AXA==} + engines: {node: '>=18'} + + '@humanwhocodes/retry@0.3.1': + resolution: {integrity: sha512-JBxkERygn7Bv/GbN5Rv8Ul6LVknS+5Bp6RgDC/O8gEBU/yeH5Ui5C/OlWrTb6qct7LjjfT6Re2NxB0ln0yYybA==} + engines: {node: '>=18.18'} + + '@humanwhocodes/retry@0.4.3': + resolution: {integrity: sha512-bV0Tgo9K4hfPCek+aMAn81RppFKv2ySDQeMoSZuvTASywNTnVJCArCZE2FWqpvIatKu7VMRLWlR1EazvVhDyhQ==} + engines: {node: '>=18.18'} + + '@isaacs/cliui@8.0.2': + resolution: {integrity: sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==} + engines: {node: '>=12'} - /@istanbuljs/load-nyc-config@1.1.0: + '@istanbuljs/load-nyc-config@1.1.0': resolution: {integrity: sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==} engines: {node: '>=8'} - dependencies: - camelcase: 5.3.1 - find-up: 4.1.0 - get-package-type: 0.1.0 - js-yaml: 3.14.1 - resolve-from: 5.0.0 - dev: true - /@istanbuljs/schema@0.1.3: + '@istanbuljs/schema@0.1.3': resolution: {integrity: sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==} engines: {node: '>=8'} - dev: true - /@jest/console@29.7.0: - resolution: {integrity: sha512-5Ni4CU7XHQi32IJ398EEP4RrB8eV09sXP2ROqD4bksHrnTree52PsxvX8tpL8LvTZ3pFzXyPbNQReSN41CAhOg==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - dependencies: - '@jest/types': 29.6.3 - '@types/node': 20.12.13 - chalk: 4.1.2 - jest-message-util: 29.7.0 - jest-util: 29.7.0 - slash: 3.0.0 - dev: true + '@jest/console@30.0.5': + resolution: {integrity: sha512-xY6b0XiL0Nav3ReresUarwl2oIz1gTnxGbGpho9/rbUWsLH0f1OD/VT84xs8c7VmH7MChnLb0pag6PhZhAdDiA==} + engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} - /@jest/core@29.7.0: - resolution: {integrity: sha512-n7aeXWKMnGtDA48y8TLWJPJmLmmZ642Ceo78cYWEpiD7FzDgmNDV/GCVRorPABdXLJZ/9wzzgZAlHjXjxDHGsg==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + '@jest/core@30.0.5': + resolution: {integrity: sha512-fKD0OulvRsXF1hmaFgHhVJzczWzA1RXMMo9LTPuFXo9q/alDbME3JIyWYqovWsUBWSoBcsHaGPSLF9rz4l9Qeg==} + engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} peerDependencies: node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 peerDependenciesMeta: node-notifier: optional: true - dependencies: - '@jest/console': 29.7.0 - '@jest/reporters': 29.7.0 - '@jest/test-result': 29.7.0 - '@jest/transform': 29.7.0 - '@jest/types': 29.6.3 - '@types/node': 20.12.13 - ansi-escapes: 4.3.2 - chalk: 4.1.2 - ci-info: 3.8.0 - exit: 0.1.2 - graceful-fs: 4.2.11 - jest-changed-files: 29.7.0 - jest-config: 29.7.0(@types/node@20.12.13) - 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.5 - pretty-format: 29.7.0 - slash: 3.0.0 - strip-ansi: 6.0.1 - transitivePeerDependencies: - - babel-plugin-macros - - supports-color - - ts-node - dev: true - /@jest/environment@29.7.0: - resolution: {integrity: sha512-aQIfHDq33ExsN4jP1NWGXhxgQ/wixs60gDiKO+XVMd8Mn0NWPWgc34ZQDTb2jKaUWQ7MuwoitXAsN2XVXNMpAw==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - dependencies: - '@jest/fake-timers': 29.7.0 - '@jest/types': 29.6.3 - '@types/node': 20.12.13 - jest-mock: 29.7.0 - dev: true + '@jest/diff-sequences@30.0.1': + resolution: {integrity: sha512-n5H8QLDJ47QqbCNn5SuFjCRDrOLEZ0h8vAHCK5RL9Ls7Xa8AQLa/YxAc9UjFqoEDM48muwtBGjtMY5cr0PLDCw==} + engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} - /@jest/expect-utils@29.7.0: - resolution: {integrity: sha512-GlsNBWiFQFCVi9QVSx7f5AgMeLxe9YCCs5PuP2O2LdjDAA8Jh9eX7lA1Jq/xdXw3Wb3hyvlFNfZIfcRetSzYcA==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - dependencies: - jest-get-type: 29.6.3 - dev: true + '@jest/environment@30.0.5': + resolution: {integrity: sha512-aRX7WoaWx1oaOkDQvCWImVQ8XNtdv5sEWgk4gxR6NXb7WBUnL5sRak4WRzIQRZ1VTWPvV4VI4mgGjNL9TeKMYA==} + engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} - /@jest/expect@29.7.0: - resolution: {integrity: sha512-8uMeAMycttpva3P1lBHB8VciS9V0XAr3GymPpipdyQXbBcuhkLQOSe8E/p92RyAdToS6ZD1tFkX+CkhoECE0dQ==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - dependencies: - expect: 29.7.0 - jest-snapshot: 29.7.0 - transitivePeerDependencies: - - supports-color - dev: true - - /@jest/fake-timers@29.7.0: - resolution: {integrity: sha512-q4DH1Ha4TTFPdxLsqDXK1d3+ioSL7yL5oCMJZgDYm6i+6CygW5E5xVr/D1HdsGxjt1ZWSfUAs9OxSB/BNelWrQ==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - dependencies: - '@jest/types': 29.6.3 - '@sinonjs/fake-timers': 10.3.0 - '@types/node': 20.12.13 - jest-message-util: 29.7.0 - jest-mock: 29.7.0 - jest-util: 29.7.0 - dev: true - - /@jest/globals@29.7.0: - resolution: {integrity: sha512-mpiz3dutLbkW2MNFubUGUEVLkTGiqW6yLVTA+JbP6fI6J5iL9Y0Nlg8k95pcF8ctKwCS7WVxteBs29hhfAotzQ==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - dependencies: - '@jest/environment': 29.7.0 - '@jest/expect': 29.7.0 - '@jest/types': 29.6.3 - jest-mock: 29.7.0 - transitivePeerDependencies: - - supports-color - dev: true + '@jest/expect-utils@30.0.4': + resolution: {integrity: sha512-EgXecHDNfANeqOkcak0DxsoVI4qkDUsR7n/Lr2vtmTBjwLPBnnPOF71S11Q8IObWzxm2QgQoY6f9hzrRD3gHRA==} + engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} + + '@jest/expect-utils@30.0.5': + resolution: {integrity: sha512-F3lmTT7CXWYywoVUGTCmom0vXq3HTTkaZyTAzIy+bXSBizB7o5qzlC9VCtq0arOa8GqmNsbg/cE9C6HLn7Szew==} + engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} + + '@jest/expect@30.0.5': + resolution: {integrity: sha512-6udac8KKrtTtC+AXZ2iUN/R7dp7Ydry+Fo6FPFnDG54wjVMnb6vW/XNlf7Xj8UDjAE3aAVAsR4KFyKk3TCXmTA==} + engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} + + '@jest/fake-timers@30.0.5': + resolution: {integrity: sha512-ZO5DHfNV+kgEAeP3gK3XlpJLL4U3Sz6ebl/n68Uwt64qFFs5bv4bfEEjyRGK5uM0C90ewooNgFuKMdkbEoMEXw==} + engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} + + '@jest/get-type@30.0.1': + resolution: {integrity: sha512-AyYdemXCptSRFirI5EPazNxyPwAL0jXt3zceFjaj8NFiKP9pOi0bfXonf6qkf82z2t3QWPeLCWWw4stPBzctLw==} + engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} + + '@jest/globals@30.0.5': + resolution: {integrity: sha512-7oEJT19WW4oe6HR7oLRvHxwlJk2gev0U9px3ufs8sX9PoD1Eza68KF0/tlN7X0dq/WVsBScXQGgCldA1V9Y/jA==} + engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} - /@jest/reporters@29.7.0: - resolution: {integrity: sha512-DApq0KJbJOEzAFYjHADNNxAE3KbhxQB1y5Kplb5Waqw6zVbuWatSnMjE5gs8FUgEPmNsnZA3NCWl9NG0ia04Pg==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + '@jest/pattern@30.0.1': + resolution: {integrity: sha512-gWp7NfQW27LaBQz3TITS8L7ZCQ0TLvtmI//4OwlQRx4rnWxcPNIYjxZpDcN4+UlGxgm3jS5QPz8IPTCkb59wZA==} + engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} + + '@jest/reporters@30.0.5': + resolution: {integrity: sha512-mafft7VBX4jzED1FwGC1o/9QUM2xebzavImZMeqnsklgcyxBto8mV4HzNSzUrryJ+8R9MFOM3HgYuDradWR+4g==} + engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} peerDependencies: node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 peerDependenciesMeta: node-notifier: optional: true - dependencies: - '@bcoe/v8-coverage': 0.2.3 - '@jest/console': 29.7.0 - '@jest/test-result': 29.7.0 - '@jest/transform': 29.7.0 - '@jest/types': 29.6.3 - '@jridgewell/trace-mapping': 0.3.19 - '@types/node': 20.12.13 - chalk: 4.1.2 - collect-v8-coverage: 1.0.2 - exit: 0.1.2 - glob: 7.2.3 - graceful-fs: 4.2.11 - istanbul-lib-coverage: 3.2.0 - istanbul-lib-instrument: 6.0.0 - istanbul-lib-report: 3.0.1 - istanbul-lib-source-maps: 4.0.1 - istanbul-reports: 3.1.6 - jest-message-util: 29.7.0 - jest-util: 29.7.0 - jest-worker: 29.7.0 - slash: 3.0.0 - string-length: 4.0.2 - strip-ansi: 6.0.1 - v8-to-istanbul: 9.1.0 - transitivePeerDependencies: - - supports-color - dev: true - /@jest/schemas@29.6.3: - resolution: {integrity: sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - dependencies: - '@sinclair/typebox': 0.27.8 - dev: true + '@jest/schemas@30.0.1': + resolution: {integrity: sha512-+g/1TKjFuGrf1Hh0QPCv0gISwBxJ+MQSNXmG9zjHy7BmFhtoJ9fdNhWJp3qUKRi93AOZHXtdxZgJ1vAtz6z65w==} + engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} - /@jest/source-map@29.6.3: - resolution: {integrity: sha512-MHjT95QuipcPrpLM+8JMSzFx6eHp5Bm+4XeFDJlwsvVBjmKNiIAvasGK2fxz2WbGRlnvqehFbh07MMa7n3YJnw==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - dependencies: - '@jridgewell/trace-mapping': 0.3.19 - callsites: 3.1.0 - graceful-fs: 4.2.11 - dev: true + '@jest/schemas@30.0.5': + resolution: {integrity: sha512-DmdYgtezMkh3cpU8/1uyXakv3tJRcmcXxBOcO0tbaozPwpmh4YMsnWrQm9ZmZMfa5ocbxzbFk6O4bDPEc/iAnA==} + engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} - /@jest/test-result@29.7.0: - resolution: {integrity: sha512-Fdx+tv6x1zlkJPcWXmMDAG2HBnaR9XPSd5aDWQVsfrZmLVT3lU1cwyxLgRmXR9yrq4NBoEm9BMsfgFzTQAbJYA==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - dependencies: - '@jest/console': 29.7.0 - '@jest/types': 29.6.3 - '@types/istanbul-lib-coverage': 2.0.4 - collect-v8-coverage: 1.0.2 - dev: true + '@jest/snapshot-utils@30.0.5': + resolution: {integrity: sha512-XcCQ5qWHLvi29UUrowgDFvV4t7ETxX91CbDczMnoqXPOIcZOxyNdSjm6kV5XMc8+HkxfRegU/MUmnTbJRzGrUQ==} + engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} - /@jest/test-sequencer@29.7.0: - resolution: {integrity: sha512-GQwJ5WZVrKnOJuiYiAF52UNUJXgTZx1NHjFSEB0qEMmSZKAkdMoIzw/Cj6x6NF4AvV23AUqDpFzQkN/eYCYTxw==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - dependencies: - '@jest/test-result': 29.7.0 - graceful-fs: 4.2.11 - jest-haste-map: 29.7.0 - slash: 3.0.0 - dev: true + '@jest/source-map@30.0.1': + resolution: {integrity: sha512-MIRWMUUR3sdbP36oyNyhbThLHyJ2eEDClPCiHVbrYAe5g3CHRArIVpBw7cdSB5fr+ofSfIb2Tnsw8iEHL0PYQg==} + engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} - /@jest/transform@29.7.0: - resolution: {integrity: sha512-ok/BTPFzFKVMwO5eOHRrvnBVHdRy9IrsrW1GpMaQ9MCnilNLXQKmAX8s1YXDFaai9xJpac2ySzV0YeRRECr2Vw==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - dependencies: - '@babel/core': 7.23.0 - '@jest/types': 29.6.3 - '@jridgewell/trace-mapping': 0.3.19 - babel-plugin-istanbul: 6.1.1 - chalk: 4.1.2 - convert-source-map: 2.0.0 - fast-json-stable-stringify: 2.1.0 - graceful-fs: 4.2.11 - jest-haste-map: 29.7.0 - jest-regex-util: 29.6.3 - jest-util: 29.7.0 - micromatch: 4.0.5 - pirates: 4.0.6 - slash: 3.0.0 - write-file-atomic: 4.0.2 - transitivePeerDependencies: - - supports-color - dev: true + '@jest/test-result@30.0.5': + resolution: {integrity: sha512-wPyztnK0gbDMQAJZ43tdMro+qblDHH1Ru/ylzUo21TBKqt88ZqnKKK2m30LKmLLoKtR2lxdpCC/P3g1vfKcawQ==} + engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} - /@jest/types@29.6.3: - resolution: {integrity: sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - dependencies: - '@jest/schemas': 29.6.3 - '@types/istanbul-lib-coverage': 2.0.4 - '@types/istanbul-reports': 3.0.2 - '@types/node': 20.12.13 - '@types/yargs': 17.0.26 - chalk: 4.1.2 - dev: true + '@jest/test-sequencer@30.0.5': + resolution: {integrity: sha512-Aea/G1egWoIIozmDD7PBXUOxkekXl7ueGzrsGGi1SbeKgQqCYCIf+wfbflEbf2LiPxL8j2JZGLyrzZagjvW4YQ==} + engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} - /@jridgewell/gen-mapping@0.3.3: - resolution: {integrity: sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==} - engines: {node: '>=6.0.0'} - dependencies: - '@jridgewell/set-array': 1.1.2 - '@jridgewell/sourcemap-codec': 1.4.15 - '@jridgewell/trace-mapping': 0.3.19 - dev: true + '@jest/transform@30.0.5': + resolution: {integrity: sha512-Vk8amLQCmuZyy6GbBht1Jfo9RSdBtg7Lks+B0PecnjI8J+PCLQPGh7uI8Q/2wwpW2gLdiAfiHNsmekKlywULqg==} + engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} - /@jridgewell/resolve-uri@3.1.1: - resolution: {integrity: sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==} - engines: {node: '>=6.0.0'} - dev: true + '@jest/types@30.0.1': + resolution: {integrity: sha512-HGwoYRVF0QSKJu1ZQX0o5ZrUrrhj0aOOFA8hXrumD7SIzjouevhawbTjmXdwOmURdGluU9DM/XvGm3NyFoiQjw==} + engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} + + '@jest/types@30.0.5': + resolution: {integrity: sha512-aREYa3aku9SSnea4aX6bhKn4bgv3AXkgijoQgbYV3yvbiGt6z+MQ85+6mIhx9DsKW2BuB/cLR/A+tcMThx+KLQ==} + engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} - /@jridgewell/set-array@1.1.2: - resolution: {integrity: sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==} + '@jridgewell/gen-mapping@0.3.12': + resolution: {integrity: sha512-OuLGC46TjB5BbN1dH8JULVVZY4WTdkF7tV9Ys6wLL1rubZnCMstOhNHueU5bLCrnRuDhKPDM4g6sw4Bel5Gzqg==} + + '@jridgewell/resolve-uri@3.1.2': + resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==} engines: {node: '>=6.0.0'} - dev: true - /@jridgewell/sourcemap-codec@1.4.15: - resolution: {integrity: sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==} - dev: true + '@jridgewell/sourcemap-codec@1.5.4': + resolution: {integrity: sha512-VT2+G1VQs/9oz078bLrYbecdZKs912zQlkelYpuf+SXF+QvZDYJlbx/LSx+meSAwdDFnF8FVXW92AVjjkVmgFw==} - /@jridgewell/trace-mapping@0.3.19: - resolution: {integrity: sha512-kf37QtfW+Hwx/buWGMPcR60iF9ziHa6r/CZJIHbmcm4+0qrXiVdxegAH0F6yddEVQ7zdkjcGCgCzUu+BcbhQxw==} - dependencies: - '@jridgewell/resolve-uri': 3.1.1 - '@jridgewell/sourcemap-codec': 1.4.15 - dev: true + '@jridgewell/trace-mapping@0.3.29': + resolution: {integrity: sha512-uw6guiW/gcAGPDhLmd77/6lW8QLeiV5RUTsAX46Db6oLhGaVj4lhnPwb184s1bkc8kdVg/+h988dro8GRDpmYQ==} - /@liskhq/lisk-cryptography@4.1.0: + '@liskhq/lisk-cryptography@4.1.0': resolution: {integrity: sha512-5//E14nlqyvOE21uwB8zCCYe0JmeEVCQ6gg/TjboKYEct/OX0GkK5gyb6tqJr8ApaQxRaL5WqPt2VOwxf564VA==} engines: {node: '>=18.12.0 <=18', npm: '>=8.1.0'} peerDependencies: @@ -957,1476 +570,3855 @@ packages: optional: true sodium-native: optional: true - dependencies: - '@liskhq/lisk-passphrase': 4.1.0 - buffer-reverse: 1.0.1 - hash-wasm: 4.9.0 - tweetnacl: 1.0.3 - dev: false - /@liskhq/lisk-passphrase@4.1.0: + '@liskhq/lisk-passphrase@4.1.0': resolution: {integrity: sha512-1VdpEp+OGiyCF0Fjtgcc+SLlHeIflzya49GzIXcXjFNf19VgkUu/eIDM8XHxSdj/5KzpL+yD07OYCh+LdoAkfA==} engines: {node: '>=18.12.0 <=18', npm: '>=8.1.0'} - dependencies: - bip39: 3.0.3 - dev: false - /@noble/hashes@1.3.2: - resolution: {integrity: sha512-MVC8EAQp7MvEcm30KWENFjgR+Mkmf+D189XJTkFIlwohU5hcBbn1ZkKq7KVTi2Hme3PMGF390DaL52beVrIihQ==} - engines: {node: '>= 16'} - dev: false + '@napi-rs/wasm-runtime@0.2.12': + resolution: {integrity: sha512-ZVWUcfwY4E/yPitQJl481FjFo3K22D6qF0DuFH6Y/nbnE11GY5uguDxZMGXPQ8WQ0128MXQD7TnfHyK4oWoIJQ==} + + '@noble/hashes@1.8.0': + resolution: {integrity: sha512-jCs9ldd7NwzpgXDIf6P3+NrHh9/sD6CQdxHyjQI+h/6rDNo88ypBxxz45UDuZHz9r3tNz7N/VInSVoVdtXEI4A==} + engines: {node: ^14.21.3 || >=16} - /@nodelib/fs.scandir@2.1.5: + '@nodelib/fs.scandir@2.1.5': resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} engines: {node: '>= 8'} - dependencies: - '@nodelib/fs.stat': 2.0.5 - run-parallel: 1.2.0 - dev: true - /@nodelib/fs.stat@2.0.5: + '@nodelib/fs.stat@2.0.5': resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==} engines: {node: '>= 8'} - dev: true - /@nodelib/fs.walk@1.2.8: + '@nodelib/fs.walk@1.2.8': resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} engines: {node: '>= 8'} - dependencies: - '@nodelib/fs.scandir': 2.1.5 - fastq: 1.15.0 - dev: true - /@pkgr/core@0.1.1: - resolution: {integrity: sha512-cq8o4cWH0ibXh9VGi5P20Tu9XF/0fFXl9EUinr9QfTM7a7p0oTA4iJRCQWppXR1Pg8dSM0UCItCkPwsk9qWWYA==} + '@pkgjs/parseargs@0.11.0': + resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==} + engines: {node: '>=14'} + + '@pkgr/core@0.2.7': + resolution: {integrity: sha512-YLT9Zo3oNPJoBjBc4q8G2mjU4tqIbf5CEOORbUUr48dCD9q3umJ3IPlVqOqDakPfd2HuwccBaqlGhN4Gmr5OWg==} engines: {node: ^12.20.0 || ^14.18.0 || >=16.0.0} - dev: true - /@sinclair/typebox@0.27.8: - resolution: {integrity: sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==} - dev: true + '@sinclair/typebox@0.34.38': + resolution: {integrity: sha512-HpkxMmc2XmZKhvaKIZZThlHmx1L0I/V1hWK1NubtlFnr6ZqdiOpV72TKudZUNQjZNsyDBay72qFEhEvb+bcwcA==} - /@sinonjs/commons@3.0.0: - resolution: {integrity: sha512-jXBtWAF4vmdNmZgD5FoKsVLv3rPgDnLgPbU84LIJ3otV44vJlDRokVng5v8NFJdCf/da9legHcKaRuZs4L7faA==} - dependencies: - type-detect: 4.0.8 - dev: true + '@sinonjs/commons@3.0.1': + resolution: {integrity: sha512-K3mCHKQ9sVh8o1C9cxkwxaOmXoAMlDxC1mYyHrjqOWEcBjYr76t96zL2zlj5dUGZ3HSw240X1qgH3Mjf1yJWpQ==} - /@sinonjs/fake-timers@10.3.0: - resolution: {integrity: sha512-V4BG07kuYSUkTCSBHG8G8TNhM+F19jXFWnQtzj+we8DrkpSBCee9Z3Ms8yiGer/dlmhe35/Xdgyo3/0rQKg7YA==} - dependencies: - '@sinonjs/commons': 3.0.0 - dev: true + '@sinonjs/fake-timers@13.0.5': + resolution: {integrity: sha512-36/hTbH2uaWuGVERyC6da9YwGWnzUZXuPro/F2LfsdOsLnCojz/iSH8MxUt/FD2S5XBSVPhmArFUXcpCQ2Hkiw==} - /@socket.io/component-emitter@3.1.0: - resolution: {integrity: sha512-+9jVqKhRSpsc591z5vX+X5Yyw+he/HCB4iQ/RYxw35CEPaY1gnsNE43nf9n9AaYjAQrTiI/mOwKUKdUs9vf7Xg==} - dev: false + '@socket.io/component-emitter@3.1.2': + resolution: {integrity: sha512-9BCxFwvbGg/RsZK9tjXd8s4UcwR0MWeFQ1XEKIQVVvAGJyINdrqKMcTRyLoK8Rse1GjzLV9cwjWV1olXRWEXVA==} - /@types/babel__core@7.20.2: - resolution: {integrity: sha512-pNpr1T1xLUc2l3xJKuPtsEky3ybxN3m4fJkknfIpTCTfIZCDW57oAg+EfCgIIp2rvCe0Wn++/FfodDS4YXxBwA==} - dependencies: - '@babel/parser': 7.23.0 - '@babel/types': 7.23.0 - '@types/babel__generator': 7.6.5 - '@types/babel__template': 7.4.2 - '@types/babel__traverse': 7.20.2 - dev: true + '@tybys/wasm-util@0.10.0': + resolution: {integrity: sha512-VyyPYFlOMNylG45GoAe0xDoLwWuowvf92F9kySqzYh8vmYm7D2u4iUJKa1tOUpS70Ku13ASrOkS4ScXFsTaCNQ==} - /@types/babel__generator@7.6.5: - resolution: {integrity: sha512-h9yIuWbJKdOPLJTbmSpPzkF67e659PbQDba7ifWm5BJ8xTv+sDmS7rFmywkWOvXedGTivCdeGSIIX8WLcRTz8w==} - dependencies: - '@babel/types': 7.23.0 - dev: true + '@types/babel__core@7.20.5': + resolution: {integrity: sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==} - /@types/babel__template@7.4.2: - resolution: {integrity: sha512-/AVzPICMhMOMYoSx9MoKpGDKdBRsIXMNByh1PXSZoa+v6ZoLa8xxtsT/uLQ/NJm0XVAWl/BvId4MlDeXJaeIZQ==} - dependencies: - '@babel/parser': 7.23.0 - '@babel/types': 7.23.0 - dev: true + '@types/babel__generator@7.27.0': + resolution: {integrity: sha512-ufFd2Xi92OAVPYsy+P4n7/U7e68fex0+Ee8gSG9KX7eo084CWiQ4sdxktvdl0bOPupXtVJPY19zk6EwWqUQ8lg==} - /@types/babel__traverse@7.20.2: - resolution: {integrity: sha512-ojlGK1Hsfce93J0+kn3H5R73elidKUaZonirN33GSmgTUMpzI/MIFfSpF3haANe3G1bEBS9/9/QEqwTzwqFsKw==} - dependencies: - '@babel/types': 7.23.0 - dev: true + '@types/babel__template@7.4.4': + resolution: {integrity: sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==} - /@types/bn.js@5.1.2: - resolution: {integrity: sha512-dkpZu0szUtn9UXTmw+e0AJFd4D2XAxDnsCLdc05SfqpqzPEBft8eQr8uaFitfo/dUUOZERaLec2hHMG87A4Dxg==} - dependencies: - '@types/node': 20.12.13 - dev: false + '@types/babel__traverse@7.20.7': + resolution: {integrity: sha512-dkO5fhS7+/oos4ciWxyEyjWe48zmG6wbCheo/G2ZnHx4fs3EU6YC6UM8rk56gAjNJ9P3MTH2jo5jb92/K6wbng==} + + '@types/bn.js@5.2.0': + resolution: {integrity: sha512-DLbJ1BPqxvQhIGbeu8VbUC1DiAiahHtAYvA0ZEAa4P31F7IaArc8z3C3BRQdWX4mtLQuABG4yzp76ZrS02Ui1Q==} - /@types/bytebuffer@5.0.49: + '@types/bytebuffer@5.0.49': resolution: {integrity: sha512-lV4YLiolMdD4upDmr4vnfiwV/FN9Jg33eNTSFMkHqyMKqTIAn5TmFTYsARwXwUXeFU7yzRpECmWV1SOhIvdkRQ==} - dependencies: - '@types/long': 3.0.32 - '@types/node': 20.12.13 - dev: true - /@types/conventional-commits-parser@5.0.0: - resolution: {integrity: sha512-loB369iXNmAZglwWATL+WRe+CRMmmBPtpolYzIebFaX4YA3x+BEfLqhUAV9WanycKI3TG1IMr5bMJDajDKLlUQ==} - dependencies: - '@types/node': 20.12.13 - dev: true + '@types/conventional-commits-parser@5.0.1': + resolution: {integrity: sha512-7uz5EHdzz2TqoMfV7ee61Egf5y6NkcO4FB/1iCCQnbeiI1F3xzv3vK5dBCXUCLQgGYS+mUeigK1iKQzvED+QnQ==} + + '@types/debug@4.1.12': + resolution: {integrity: sha512-vIChWdVG3LG1SMxEvI/AK+FWJthlrqlTu7fbrlywTkkaONwk/UAGaULXRlf8vkzFBLVm0zkMdCquhL5aOjhXPQ==} - /@types/ed2curve@0.2.4: + '@types/ed2curve@0.2.4': resolution: {integrity: sha512-1m9IX8qypOa0K1NfdMsMxB3gjhKyXbr5Yl9FzzwWQjLSDFGLkvRvSfla1NYqzIt72ocIALMXsF+twRlzr1ov/g==} - dependencies: - tweetnacl: 1.0.3 - dev: true - /@types/graceful-fs@4.1.7: - resolution: {integrity: sha512-MhzcwU8aUygZroVwL2jeYk6JisJrPl/oov/gsgGCue9mkgl9wjGbzReYQClxiUgFDnib9FuHqTndccKeZKxTRw==} - dependencies: - '@types/node': 20.12.13 - dev: true + '@types/estree@1.0.8': + resolution: {integrity: sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==} - /@types/hdkey@2.0.3: - resolution: {integrity: sha512-U5W3b+f3KqCC7tge4WjV5MDzzYTcwbnufyL7RwEmxH2EyxtbfaQVlS8z6PZDp8XET304EEVhLWG76rF5ygUKHQ==} - dependencies: - '@types/node': 20.12.13 - dev: true + '@types/hdkey@2.1.0': + resolution: {integrity: sha512-Mlwd/7y2JRPOoMP5snMKn+/Vvc5ThSDXnSl+EHgHxoE4wDDOFxUT/w75DmRaaI/3JpC5CMkFlO4fkpWGAk7qyA==} - /@types/istanbul-lib-coverage@2.0.4: - resolution: {integrity: sha512-z/QT1XN4K4KYuslS23k62yDIDLwLFkzxOuMplDtObz0+y7VqJCaO2o+SPwHCvLFZh7xazvvoor2tA/hPz9ee7g==} - dev: true + '@types/istanbul-lib-coverage@2.0.6': + resolution: {integrity: sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w==} - /@types/istanbul-lib-report@3.0.1: - resolution: {integrity: sha512-gPQuzaPR5h/djlAv2apEG1HVOyj1IUs7GpfMZixU0/0KXT3pm64ylHuMUI1/Akh+sq/iikxg6Z2j+fcMDXaaTQ==} - dependencies: - '@types/istanbul-lib-coverage': 2.0.4 - dev: true + '@types/istanbul-lib-report@3.0.3': + resolution: {integrity: sha512-NQn7AHQnk/RSLOxrBbGyJM/aVQ+pjj5HCgasFxc0K/KhoATfQ/47AyUl15I2yBUpihjmas+a+VJBOqecrFH+uA==} - /@types/istanbul-reports@3.0.2: - resolution: {integrity: sha512-kv43F9eb3Lhj+lr/Hn6OcLCs/sSM8bt+fIaP11rCYngfV6NVjzWXJ17owQtDQTL9tQ8WSLUrGsSJ6rJz0F1w1A==} - dependencies: - '@types/istanbul-lib-report': 3.0.1 - dev: true + '@types/istanbul-reports@3.0.4': + resolution: {integrity: sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ==} - /@types/jest@29.5.12: - resolution: {integrity: sha512-eDC8bTvT/QhYdxJAulQikueigY5AsdBRH2yDKW3yveW7svY3+DzN84/2NUgkw10RTiJbWqZrTtoGVdYlvFJdLw==} - dependencies: - expect: 29.7.0 - pretty-format: 29.7.0 - dev: true + '@types/jest@30.0.0': + resolution: {integrity: sha512-XTYugzhuwqWjws0CVz8QpM36+T+Dz5mTEBKhNs/esGLnCIlGdRy+Dq78NRjd7ls7r8BC8ZRMOrKlkO1hU0JOwA==} - /@types/json-schema@7.0.13: - resolution: {integrity: sha512-RbSSoHliUbnXj3ny0CNFOoxrIDV6SUGyStHsvDqosw6CkdPV8TtWGlfecuK4ToyMEAql6pzNxgCFKanovUzlgQ==} - dev: true + '@types/json-schema@7.0.15': + resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==} - /@types/long@3.0.32: + '@types/long@3.0.32': resolution: {integrity: sha512-ZXyOOm83p7X8p3s0IYM3VeueNmHpkk/yMlP8CLeOnEcu6hIwPH7YjZBvhQkR0ZFS2DqZAxKtJ/M5fcuv3OU5BA==} - dev: true - /@types/minimist@1.2.3: - resolution: {integrity: sha512-ZYFzrvyWUNhaPomn80dsMNgMeXxNWZBdkuG/hWlUvXvbdUH8ZERNBGXnU87McuGcWDsyzX2aChCv/SVN348k3A==} - dev: true + '@types/mdast@4.0.4': + resolution: {integrity: sha512-kGaNbPh1k7AFzgpud/gMdvIm5xuECykRR+JnWKQno9TAXVa6WIVCGTPvYGekIDL4uwCZQSYbUxNBSb1aUo79oA==} - /@types/node@11.11.6: - resolution: {integrity: sha512-Exw4yUWMBXM3X+8oqzJNRqZSwUAaS4+7NdvHqQuFi/d+synz++xmX3QIf+BFqneW8N31R8Ky+sikfZUXq07ggQ==} - dev: false + '@types/ms@2.1.0': + resolution: {integrity: sha512-GsCCIZDE/p3i96vtEqx+7dBUGXrc7zeSK3wwPHIaRThS+9OhWIXRqzs4d6k1SVU8g91DrNRWxWUGhp5KXQb2VA==} - /@types/node@20.12.13: - resolution: {integrity: sha512-gBGeanV41c1L171rR7wjbMiEpEI/l5XFQdLLfhr/REwpgDy/4U8y89+i8kRiLzDyZdOkXh+cRaTetUnCYutoXA==} - dependencies: - undici-types: 5.26.5 + '@types/node@11.11.6': + resolution: {integrity: sha512-Exw4yUWMBXM3X+8oqzJNRqZSwUAaS4+7NdvHqQuFi/d+synz++xmX3QIf+BFqneW8N31R8Ky+sikfZUXq07ggQ==} - /@types/normalize-package-data@2.4.2: - resolution: {integrity: sha512-lqa4UEhhv/2sjjIQgjX8B+RBjj47eo0mzGasklVJ78UKGQY1r0VpB9XHDaZZO9qzEFDdy4MrXLuEaSmPrPSe/A==} - dev: true + '@types/node@24.1.0': + resolution: {integrity: sha512-ut5FthK5moxFKH2T1CUOC6ctR67rQRvvHdFLCD2Ql6KXmMuCrjsSsRI9UsLCm9M18BMwClv4pn327UvB7eeO1w==} - /@types/pbkdf2@3.1.2: + '@types/pbkdf2@3.1.2': resolution: {integrity: sha512-uRwJqmiXmh9++aSu1VNEn3iIxWOhd8AHXNSdlaLfdAAdSTY9jYVeGWnzejM3dvrkbqE3/hyQkQQ29IFATEGlew==} - dependencies: - '@types/node': 20.12.13 - /@types/secp256k1@4.0.4: - resolution: {integrity: sha512-oN0PFsYxDZnX/qSJ5S5OwaEDTYfekhvaM5vqui2bu1AA39pKofmgL104Q29KiOXizXS2yLjSzc5YdTyMKdcy4A==} - dependencies: - '@types/node': 20.12.13 - dev: false + '@types/secp256k1@4.0.6': + resolution: {integrity: sha512-hHxJU6PAEUn0TP4S/ZOzuTUvJWuZ6eIKeNKb5RBpODvSl6hp1Wrw4s7ATY50rklRCScUDpHzVA/DQdSjJ3UoYQ==} - /@types/semver@7.5.3: - resolution: {integrity: sha512-OxepLK9EuNEIPxWNME+C6WwbRAOOI2o2BaQEGzz5Lu2e4Z5eDnEo+/aVEDMIXywoJitJ7xWd641wrGLZdtwRyw==} - dev: true + '@types/stack-utils@2.0.3': + resolution: {integrity: sha512-9aEbYZ3TbYMznPdcdr3SmIrLXwC/AKZXQeCf9Pgao5CKb8CyHuEX5jzWPTkvregvhRJHcpRO6BFoGW9ycaOkYw==} - /@types/stack-utils@2.0.1: - resolution: {integrity: sha512-Hl219/BT5fLAaz6NDkSuhzasy49dwQS/DSdu4MdggFB8zcXv7vflBI3xp7FEmkmdDkBUI2bPUNeMttp2knYdxw==} - dev: true + '@types/unist@3.0.3': + resolution: {integrity: sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q==} - /@types/yargs-parser@21.0.1: - resolution: {integrity: sha512-axdPBuLuEJt0c4yI5OZssC19K2Mq1uKdrfZBzuxLvaztgqUtFYZUNw7lETExPYJR9jdEoIg4mb7RQKRQzOkeGQ==} - dev: true + '@types/yargs-parser@21.0.3': + resolution: {integrity: sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ==} - /@types/yargs@17.0.26: - resolution: {integrity: sha512-Y3vDy2X6zw/ZCumcwLpdhM5L7jmyGpmBCTYMHDLqT2IKVMYRRLdv6ZakA+wxhra6Z/3bwhNbNl9bDGXaFU+6rw==} - dependencies: - '@types/yargs-parser': 21.0.1 - dev: true + '@types/yargs@17.0.33': + resolution: {integrity: sha512-WpxBCKWPLr4xSsHgz511rFJAM+wS28w2zEO1QDNY5zM/S8ok70NNfztH0xwhqKyaK0OHCbN98LDAZuy1ctxDkA==} - /@typescript-eslint/eslint-plugin@5.62.0(@typescript-eslint/parser@5.62.0)(eslint@8.53.0)(typescript@5.1.6): - resolution: {integrity: sha512-TiZzBSJja/LbhNPvk6yc0JrX9XqhQ0hdh6M2svYfsHGejaKFIAGd9MQ+ERIMzLGlN/kZoYIgdxFV0PuljTKXag==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + '@typescript-eslint/eslint-plugin@8.38.0': + resolution: {integrity: sha512-CPoznzpuAnIOl4nhj4tRr4gIPj5AfKgkiJmGQDaq+fQnRJTYlcBjbX3wbciGmpoPf8DREufuPRe1tNMZnGdanA==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: - '@typescript-eslint/parser': ^5.0.0 - eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 - typescript: '*' + '@typescript-eslint/parser': ^8.38.0 + eslint: ^8.57.0 || ^9.0.0 + typescript: '>=4.8.4 <5.9.0' + + '@typescript-eslint/parser@8.38.0': + resolution: {integrity: sha512-Zhy8HCvBUEfBECzIl1PKqF4p11+d0aUJS1GeUiuqK9WmOug8YCmC4h4bjyBvMyAMI9sbRczmrYL5lKg/YMbrcQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + eslint: ^8.57.0 || ^9.0.0 + typescript: '>=4.8.4 <5.9.0' + + '@typescript-eslint/project-service@8.37.0': + resolution: {integrity: sha512-BIUXYsbkl5A1aJDdYJCBAo8rCEbAvdquQ8AnLb6z5Lp1u3x5PNgSSx9A/zqYc++Xnr/0DVpls8iQ2cJs/izTXA==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + typescript: '>=4.8.4 <5.9.0' + + '@typescript-eslint/project-service@8.38.0': + resolution: {integrity: sha512-dbK7Jvqcb8c9QfH01YB6pORpqX1mn5gDZc9n63Ak/+jD67oWXn3Gs0M6vddAN+eDXBCS5EmNWzbSxsn9SzFWWg==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + typescript: '>=4.8.4 <5.9.0' + + '@typescript-eslint/scope-manager@8.37.0': + resolution: {integrity: sha512-0vGq0yiU1gbjKob2q691ybTg9JX6ShiVXAAfm2jGf3q0hdP6/BruaFjL/ManAR/lj05AvYCH+5bbVo0VtzmjOA==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@typescript-eslint/scope-manager@8.38.0': + resolution: {integrity: sha512-WJw3AVlFFcdT9Ri1xs/lg8LwDqgekWXWhH3iAF+1ZM+QPd7oxQ6jvtW/JPwzAScxitILUIFs0/AnQ/UWHzbATQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@typescript-eslint/tsconfig-utils@8.37.0': + resolution: {integrity: sha512-1/YHvAVTimMM9mmlPvTec9NP4bobA1RkDbMydxG8omqwJJLEW/Iy2C4adsAESIXU3WGLXFHSZUU+C9EoFWl4Zg==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + typescript: '>=4.8.4 <5.9.0' + + '@typescript-eslint/tsconfig-utils@8.38.0': + resolution: {integrity: sha512-Lum9RtSE3EroKk/bYns+sPOodqb2Fv50XOl/gMviMKNvanETUuUcC9ObRbzrJ4VSd2JalPqgSAavwrPiPvnAiQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + typescript: '>=4.8.4 <5.9.0' + + '@typescript-eslint/type-utils@8.38.0': + resolution: {integrity: sha512-c7jAvGEZVf0ao2z+nnz8BUaHZD09Agbh+DY7qvBQqLiz8uJzRgVPj5YvOh8I8uEiH8oIUGIfHzMwUcGVco/SJg==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + eslint: ^8.57.0 || ^9.0.0 + typescript: '>=4.8.4 <5.9.0' + + '@typescript-eslint/types@8.37.0': + resolution: {integrity: sha512-ax0nv7PUF9NOVPs+lmQ7yIE7IQmAf8LGcXbMvHX5Gm+YJUYNAl340XkGnrimxZ0elXyoQJuN5sbg6C4evKA4SQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@typescript-eslint/types@8.38.0': + resolution: {integrity: sha512-wzkUfX3plUqij4YwWaJyqhiPE5UCRVlFpKn1oCRn2O1bJ592XxWJj8ROQ3JD5MYXLORW84063z3tZTb/cs4Tyw==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@typescript-eslint/typescript-estree@8.37.0': + resolution: {integrity: sha512-zuWDMDuzMRbQOM+bHyU4/slw27bAUEcKSKKs3hcv2aNnc/tvE/h7w60dwVw8vnal2Pub6RT1T7BI8tFZ1fE+yg==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + typescript: '>=4.8.4 <5.9.0' + + '@typescript-eslint/typescript-estree@8.38.0': + resolution: {integrity: sha512-fooELKcAKzxux6fA6pxOflpNS0jc+nOQEEOipXFNjSlBS6fqrJOVY/whSn70SScHrcJ2LDsxWrneFoWYSVfqhQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + typescript: '>=4.8.4 <5.9.0' + + '@typescript-eslint/utils@8.37.0': + resolution: {integrity: sha512-TSFvkIW6gGjN2p6zbXo20FzCABbyUAuq6tBvNRGsKdsSQ6a7rnV6ADfZ7f4iI3lIiXc4F4WWvtUfDw9CJ9pO5A==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + eslint: ^8.57.0 || ^9.0.0 + typescript: '>=4.8.4 <5.9.0' + + '@typescript-eslint/utils@8.38.0': + resolution: {integrity: sha512-hHcMA86Hgt+ijJlrD8fX0j1j8w4C92zue/8LOPAFioIno+W0+L7KqE8QZKCcPGc/92Vs9x36w/4MPTJhqXdyvg==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + eslint: ^8.57.0 || ^9.0.0 + typescript: '>=4.8.4 <5.9.0' + + '@typescript-eslint/visitor-keys@8.37.0': + resolution: {integrity: sha512-YzfhzcTnZVPiLfP/oeKtDp2evwvHLMe0LOy7oe+hb9KKIumLNohYS9Hgp1ifwpu42YWxhZE8yieggz6JpqO/1w==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@typescript-eslint/visitor-keys@8.38.0': + resolution: {integrity: sha512-pWrTcoFNWuwHlA9CvlfSsGWs14JxfN1TH25zM5L7o0pRLhsoZkDnTsXfQRJBEWJoV5DL0jf+Z+sxiud+K0mq1g==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@ungap/structured-clone@1.3.0': + resolution: {integrity: sha512-WmoN8qaIAo7WTYWbAZuG8PYEhn5fkz7dZrqTBZ7dtt//lL2Gwms1IcnQ5yHqjDfX8Ft5j4YzDM23f87zBfDe9g==} + + '@unrs/resolver-binding-android-arm-eabi@1.11.1': + resolution: {integrity: sha512-ppLRUgHVaGRWUx0R0Ut06Mjo9gBaBkg3v/8AxusGLhsIotbBLuRk51rAzqLC8gq6NyyAojEXglNjzf6R948DNw==} + cpu: [arm] + os: [android] + + '@unrs/resolver-binding-android-arm64@1.11.1': + resolution: {integrity: sha512-lCxkVtb4wp1v+EoN+HjIG9cIIzPkX5OtM03pQYkG+U5O/wL53LC4QbIeazgiKqluGeVEeBlZahHalCaBvU1a2g==} + cpu: [arm64] + os: [android] + + '@unrs/resolver-binding-darwin-arm64@1.11.1': + resolution: {integrity: sha512-gPVA1UjRu1Y/IsB/dQEsp2V1pm44Of6+LWvbLc9SDk1c2KhhDRDBUkQCYVWe6f26uJb3fOK8saWMgtX8IrMk3g==} + cpu: [arm64] + os: [darwin] + + '@unrs/resolver-binding-darwin-x64@1.11.1': + resolution: {integrity: sha512-cFzP7rWKd3lZaCsDze07QX1SC24lO8mPty9vdP+YVa3MGdVgPmFc59317b2ioXtgCMKGiCLxJ4HQs62oz6GfRQ==} + cpu: [x64] + os: [darwin] + + '@unrs/resolver-binding-freebsd-x64@1.11.1': + resolution: {integrity: sha512-fqtGgak3zX4DCB6PFpsH5+Kmt/8CIi4Bry4rb1ho6Av2QHTREM+47y282Uqiu3ZRF5IQioJQ5qWRV6jduA+iGw==} + cpu: [x64] + os: [freebsd] + + '@unrs/resolver-binding-linux-arm-gnueabihf@1.11.1': + resolution: {integrity: sha512-u92mvlcYtp9MRKmP+ZvMmtPN34+/3lMHlyMj7wXJDeXxuM0Vgzz0+PPJNsro1m3IZPYChIkn944wW8TYgGKFHw==} + cpu: [arm] + os: [linux] + + '@unrs/resolver-binding-linux-arm-musleabihf@1.11.1': + resolution: {integrity: sha512-cINaoY2z7LVCrfHkIcmvj7osTOtm6VVT16b5oQdS4beibX2SYBwgYLmqhBjA1t51CarSaBuX5YNsWLjsqfW5Cw==} + cpu: [arm] + os: [linux] + + '@unrs/resolver-binding-linux-arm64-gnu@1.11.1': + resolution: {integrity: sha512-34gw7PjDGB9JgePJEmhEqBhWvCiiWCuXsL9hYphDF7crW7UgI05gyBAi6MF58uGcMOiOqSJ2ybEeCvHcq0BCmQ==} + cpu: [arm64] + os: [linux] + + '@unrs/resolver-binding-linux-arm64-musl@1.11.1': + resolution: {integrity: sha512-RyMIx6Uf53hhOtJDIamSbTskA99sPHS96wxVE/bJtePJJtpdKGXO1wY90oRdXuYOGOTuqjT8ACccMc4K6QmT3w==} + cpu: [arm64] + os: [linux] + + '@unrs/resolver-binding-linux-ppc64-gnu@1.11.1': + resolution: {integrity: sha512-D8Vae74A4/a+mZH0FbOkFJL9DSK2R6TFPC9M+jCWYia/q2einCubX10pecpDiTmkJVUH+y8K3BZClycD8nCShA==} + cpu: [ppc64] + os: [linux] + + '@unrs/resolver-binding-linux-riscv64-gnu@1.11.1': + resolution: {integrity: sha512-frxL4OrzOWVVsOc96+V3aqTIQl1O2TjgExV4EKgRY09AJ9leZpEg8Ak9phadbuX0BA4k8U5qtvMSQQGGmaJqcQ==} + cpu: [riscv64] + os: [linux] + + '@unrs/resolver-binding-linux-riscv64-musl@1.11.1': + resolution: {integrity: sha512-mJ5vuDaIZ+l/acv01sHoXfpnyrNKOk/3aDoEdLO/Xtn9HuZlDD6jKxHlkN8ZhWyLJsRBxfv9GYM2utQ1SChKew==} + cpu: [riscv64] + os: [linux] + + '@unrs/resolver-binding-linux-s390x-gnu@1.11.1': + resolution: {integrity: sha512-kELo8ebBVtb9sA7rMe1Cph4QHreByhaZ2QEADd9NzIQsYNQpt9UkM9iqr2lhGr5afh885d/cB5QeTXSbZHTYPg==} + cpu: [s390x] + os: [linux] + + '@unrs/resolver-binding-linux-x64-gnu@1.11.1': + resolution: {integrity: sha512-C3ZAHugKgovV5YvAMsxhq0gtXuwESUKc5MhEtjBpLoHPLYM+iuwSj3lflFwK3DPm68660rZ7G8BMcwSro7hD5w==} + cpu: [x64] + os: [linux] + + '@unrs/resolver-binding-linux-x64-musl@1.11.1': + resolution: {integrity: sha512-rV0YSoyhK2nZ4vEswT/QwqzqQXw5I6CjoaYMOX0TqBlWhojUf8P94mvI7nuJTeaCkkds3QE4+zS8Ko+GdXuZtA==} + cpu: [x64] + os: [linux] + + '@unrs/resolver-binding-wasm32-wasi@1.11.1': + resolution: {integrity: sha512-5u4RkfxJm+Ng7IWgkzi3qrFOvLvQYnPBmjmZQ8+szTK/b31fQCnleNl1GgEt7nIsZRIf5PLhPwT0WM+q45x/UQ==} + engines: {node: '>=14.0.0'} + cpu: [wasm32] + + '@unrs/resolver-binding-win32-arm64-msvc@1.11.1': + resolution: {integrity: sha512-nRcz5Il4ln0kMhfL8S3hLkxI85BXs3o8EYoattsJNdsX4YUU89iOkVn7g0VHSRxFuVMdM4Q1jEpIId1Ihim/Uw==} + cpu: [arm64] + os: [win32] + + '@unrs/resolver-binding-win32-ia32-msvc@1.11.1': + resolution: {integrity: sha512-DCEI6t5i1NmAZp6pFonpD5m7i6aFrpofcp4LA2i8IIq60Jyo28hamKBxNrZcyOwVOZkgsRp9O2sXWBWP8MnvIQ==} + cpu: [ia32] + os: [win32] + + '@unrs/resolver-binding-win32-x64-msvc@1.11.1': + resolution: {integrity: sha512-lrW200hZdbfRtztbygyaq/6jP6AKE8qQN2KvPcJ+x7wiD038YtnYtZ82IMNJ69GJibV7bwL3y9FgK+5w/pYt6g==} + cpu: [x64] + os: [win32] + + JSONStream@1.3.5: + resolution: {integrity: sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ==} + hasBin: true + + acorn-jsx@5.3.2: + resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} + peerDependencies: + acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 + + acorn@8.15.0: + resolution: {integrity: sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==} + engines: {node: '>=0.4.0'} + hasBin: true + + ajv@6.12.6: + resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==} + + ajv@8.17.1: + resolution: {integrity: sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==} + + ansi-escapes@4.3.2: + resolution: {integrity: sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==} + engines: {node: '>=8'} + + ansi-regex@5.0.1: + resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} + engines: {node: '>=8'} + + ansi-regex@6.1.0: + resolution: {integrity: sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==} + engines: {node: '>=12'} + + ansi-styles@4.3.0: + resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} + engines: {node: '>=8'} + + ansi-styles@5.2.0: + resolution: {integrity: sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==} + engines: {node: '>=10'} + + ansi-styles@6.2.1: + resolution: {integrity: sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==} + engines: {node: '>=12'} + + anymatch@3.1.3: + resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==} + engines: {node: '>= 8'} + + argparse@1.0.10: + resolution: {integrity: sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==} + + argparse@2.0.1: + resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} + + array-ify@1.0.0: + resolution: {integrity: sha512-c5AMf34bKdvPhQ7tBGhqkgKNUzMr4WUs+WDtC2ZUGOUncbxKMTvqxYctiseW3+L4bA8ec+GcZ6/A/FW4m8ukng==} + + async@3.2.6: + resolution: {integrity: sha512-htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0Ti6C2AA==} + + asynckit@0.4.0: + resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==} + + available-typed-arrays@1.0.7: + resolution: {integrity: sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==} + engines: {node: '>= 0.4'} + + axios@1.11.0: + resolution: {integrity: sha512-1Lx3WLFQWm3ooKDYZD1eXmoGO9fxYQjrycfHFC8P0sCfQVXyROp0p9PFWBehewBOdCwHc+f/b8I0fMto5eSfwA==} + + babel-jest@30.0.5: + resolution: {integrity: sha512-mRijnKimhGDMsizTvBTWotwNpzrkHr+VvZUQBof2AufXKB8NXrL1W69TG20EvOz7aevx6FTJIaBuBkYxS8zolg==} + engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} + peerDependencies: + '@babel/core': ^7.11.0 + + babel-plugin-istanbul@7.0.0: + resolution: {integrity: sha512-C5OzENSx/A+gt7t4VH1I2XsflxyPUmXRFPKBxt33xncdOmq7oROVM3bZv9Ysjjkv8OJYDMa+tKuKMvqU/H3xdw==} + engines: {node: '>=12'} + + babel-plugin-jest-hoist@30.0.1: + resolution: {integrity: sha512-zTPME3pI50NsFW8ZBaVIOeAxzEY7XHlmWeXXu9srI+9kNfzCUTy8MFan46xOGZY8NZThMqq+e3qZUKsvXbasnQ==} + engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} + + babel-preset-current-node-syntax@1.1.0: + resolution: {integrity: sha512-ldYss8SbBlWva1bs28q78Ju5Zq1F+8BrqBZZ0VFhLBvhh6lCpC2o3gDJi/5DRLs9FgYZCnmPYIVFU4lRXCkyUw==} + peerDependencies: + '@babel/core': ^7.0.0 + + babel-preset-jest@30.0.1: + resolution: {integrity: sha512-+YHejD5iTWI46cZmcc/YtX4gaKBtdqCHCVfuVinizVpbmyjO3zYmeuyFdfA8duRqQZfgCAMlsfmkVbJ+e2MAJw==} + engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} + peerDependencies: + '@babel/core': ^7.11.0 + + balanced-match@1.0.2: + resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} + + base-x@3.0.11: + resolution: {integrity: sha512-xz7wQ8xDhdyP7tQxwdteLYeFfS68tSMNCZ/Y37WJ4bhGfKPpqEIlmIyueQHqOyoPhE6xNUqjzRr8ra0eF9VRvA==} + + base-x@4.0.1: + resolution: {integrity: sha512-uAZ8x6r6S3aUM9rbHGVOIsR15U/ZSc82b3ymnCPsT45Gk1DDvhDPdIgB5MrhirZWt+5K0EEPQH985kNqZgNPFw==} + + base-x@5.0.1: + resolution: {integrity: sha512-M7uio8Zt++eg3jPj+rHMfCC+IuygQHHCOU+IYsVtik6FWjuYpVt/+MRKcgsAMHh8mMFAwnB+Bs+mTrFiXjMzKg==} + + bech32@2.0.0: + resolution: {integrity: sha512-LcknSilhIGatDAsY1ak2I8VtGaHNhgMSYVxFrGLXv+xLHytaKZKcaUJJUE7qmBr7h33o5YQwP55pMI0xmkpJwg==} + + bignumber.js@9.3.1: + resolution: {integrity: sha512-Ko0uX15oIUS7wJ3Rb30Fs6SkVbLmPBAKdlm7q9+ak9bbIeFf0MwuBsQV6z7+X768/cHsfg+WlysDWJcmthjsjQ==} + + bip174@2.1.1: + resolution: {integrity: sha512-mdFV5+/v0XyNYXjBS6CQPLo9ekCx4gtKZFnJm5PMto7Fs9hTTDpkkzOB7/FtluRI6JbUUAu+snTYfJRgHLZbZQ==} + engines: {node: '>=8.0.0'} + + bip39@3.0.3: + resolution: {integrity: sha512-P0dKrz4g0V0BjXfx7d9QNkJ/Txcz/k+hM9TnjqjUaXtuOfAvxXSw2rJw8DX0e3ZPwnK/IgDxoRqf0bvoVCqbMg==} + + bip39@3.1.0: + resolution: {integrity: sha512-c9kiwdk45Do5GL0vJMe7tS95VjCii65mYAH7DfWl3uW8AVzXKQVUm64i3hzVybBDMp9r7j9iNxR85+ul8MdN/A==} + + bitcoinjs-lib@6.1.7: + resolution: {integrity: sha512-tlf/r2DGMbF7ky1MgUqXHzypYHakkEnm0SZP23CJKIqNY/5uNAnMbFhMJdhjrL/7anfb/U8+AlpdjPWjPnAalg==} + engines: {node: '>=8.0.0'} + + blakejs@1.2.1: + resolution: {integrity: sha512-QXUSXI3QVc/gJME0dBpXrag1kbzOqCjCX8/b54ntNyW6sjtoqxqRk3LTmXzaJoh71zMsDCjM+47jS7XiwN/+fQ==} + + bn.js@4.12.2: + resolution: {integrity: sha512-n4DSx829VRTRByMRGdjQ9iqsN0Bh4OolPsFnaZBLcbi8iXcB+kJ9s7EnRt4wILZNV3kPLHkRVfOc/HvhC3ovDw==} + + bn.js@5.2.2: + resolution: {integrity: sha512-v2YAxEmKaBLahNwE1mjp4WON6huMNeuDvagFZW+ASCuA/ku0bXR9hSMw0XpiqMoA3+rmnyck/tPRSFQkoC9Cuw==} + + brace-expansion@1.1.12: + resolution: {integrity: sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==} + + brace-expansion@2.0.2: + resolution: {integrity: sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==} + + braces@3.0.3: + resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==} + engines: {node: '>=8'} + + brorand@1.1.0: + resolution: {integrity: sha512-cKV8tMCEpQs4hK/ik71d6LrPOnpkpGBR0wzxqr68g2m/LB2GxVYQroAjMJZRVM1Y4BCjCKc3vAamxSzOY2RP+w==} + + browserify-aes@1.2.0: + resolution: {integrity: sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==} + + browserslist@4.25.1: + resolution: {integrity: sha512-KGj0KoOMXLpSNkkEI6Z6mShmQy0bc1I+T7K9N81k4WWMrfz+6fQ6es80B/YLAeRoKvjYE1YSHHOW1qe9xIVzHw==} + engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} + hasBin: true + + bs-logger@0.2.6: + resolution: {integrity: sha512-pd8DCoxmbgc7hyPKOvxtqNcjYoOsABPQdcCUjGp3d42VR2CX1ORhk2A87oqqu5R1kk+76nsxZupkmyd+MVtCog==} + engines: {node: '>= 6'} + + bs58@4.0.1: + resolution: {integrity: sha512-Ok3Wdf5vOIlBrgCvTq96gBkJw+JUEzdBgyaza5HLtPm7yTHkjRy8+JzNyHF7BHa0bNWOQIp3m5YF0nnFcOIKLw==} + + bs58@5.0.0: + resolution: {integrity: sha512-r+ihvQJvahgYT50JD05dyJNKlmmSlMoOGwn1lCcEzanPglg7TxYjioQUYehQ9mAR/+hOSd2jRc/Z2y5UxBymvQ==} + + bs58@6.0.0: + resolution: {integrity: sha512-PD0wEnEYg6ijszw/u8s+iI3H17cTymlrwkKhDhPZq+Sokl3AU4htyBFTjAeNAlCCmg0f53g6ih3jATyCKftTfw==} + + bs58check@2.1.2: + resolution: {integrity: sha512-0TS1jicxdU09dwJMNZtVAfzPi6Q6QeN0pM1Fkzrjn+XYHvzMKPU3pHVpva+769iNVSfIYWf7LJ6WR+BuuMf8cA==} + + bs58check@3.0.1: + resolution: {integrity: sha512-hjuuJvoWEybo7Hn/0xOrczQKKEKD63WguEjlhLExYs2wUBcebDC1jDNK17eEAD2lYfw82d5ASC1d7K3SWszjaQ==} + + bs58check@4.0.0: + resolution: {integrity: sha512-FsGDOnFg9aVI9erdriULkd/JjEWONV/lQE5aYziB5PoBsXRind56lh8doIZIc9X4HoxT5x4bLjMWN1/NB8Zp5g==} + + bser@2.1.1: + resolution: {integrity: sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==} + + buffer-from@1.1.2: + resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==} + + buffer-reverse@1.0.1: + resolution: {integrity: sha512-M87YIUBsZ6N924W57vDwT/aOu8hw7ZgdByz6ijksLjmHJELBASmYTTlNHRgjE+pTsT9oJXGaDSgqqwfdHotDUg==} + + buffer-xor@1.0.3: + resolution: {integrity: sha512-571s0T7nZWK6vB67HI5dyUF7wXiNcfaPPPTl6zYCNApANjIvYJTg7hlud/+cJpdAhS7dVzqMLmfhfHR3rAcOjQ==} + + bytebuffer@5.0.1: + resolution: {integrity: sha512-IuzSdmADppkZ6DlpycMkm8l9zeEq16fWtLvunEwFiYciR/BHo4E8/xs5piFquG+Za8OWmMqHF8zuRviz2LHvRQ==} + engines: {node: '>=0.8'} + + call-bind-apply-helpers@1.0.2: + resolution: {integrity: sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==} + engines: {node: '>= 0.4'} + + call-bind@1.0.8: + resolution: {integrity: sha512-oKlSFMcMwpUg2ednkhQ454wfWiU/ul3CkJe/PEHcTKuiX6RpbehUiFMXu13HalGZxfUwCQzZG747YXBn1im9ww==} + engines: {node: '>= 0.4'} + + call-bound@1.0.4: + resolution: {integrity: sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==} + engines: {node: '>= 0.4'} + + callsites@3.1.0: + resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} + engines: {node: '>=6'} + + camelcase@5.3.1: + resolution: {integrity: sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==} + engines: {node: '>=6'} + + camelcase@6.3.0: + resolution: {integrity: sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==} + engines: {node: '>=10'} + + caniuse-lite@1.0.30001727: + resolution: {integrity: sha512-pB68nIHmbN6L/4C6MH1DokyR3bYqFwjaSs/sWDHGj4CTcFtQUQMuJftVwWkXq7mNWOybD3KhUv3oWHoGxgP14Q==} + + ccount@2.0.1: + resolution: {integrity: sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==} + + chalk@4.1.2: + resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} + engines: {node: '>=10'} + + chalk@5.4.1: + resolution: {integrity: sha512-zgVZuo2WcZgfUEmsn6eO3kINexW8RAE4maiQ8QNs8CtpPCSyMiYsULR3HQYkm3w8FIA3SberyMJMSldGsW+U3w==} + engines: {node: ^12.17.0 || ^14.13 || >=16.0.0} + + char-regex@1.0.2: + resolution: {integrity: sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==} + engines: {node: '>=10'} + + character-entities@2.0.2: + resolution: {integrity: sha512-shx7oQ0Awen/BRIdkjkvz54PnEEI/EjwXDSIZp86/KKdbafHh1Df/RYGBhn4hbe2+uKC9FnT5UCEdyPz3ai9hQ==} + + chloride-test@1.2.4: + resolution: {integrity: sha512-9vhoi1qXSBPn6//ZxIgSe3M2QhKHzIPZQzmrZgmPADsqW0Jxpe3db1e7aGSRUMXbxAQ04SfypdT8dGaSvIvKDw==} + + ci-info@4.3.0: + resolution: {integrity: sha512-l+2bNRMiQgcfILUi33labAZYIWlH1kWDp+ecNo5iisRKrbm0xcRyCww71/YU0Fkw0mAFpz9bJayXPjey6vkmaQ==} + engines: {node: '>=8'} + + cipher-base@1.0.6: + resolution: {integrity: sha512-3Ek9H3X6pj5TgenXYtNWdaBon1tgYCaebd+XPg0keyjEbEfkD4KkmAxkQ/i1vYvxdcT5nscLBfq9VJRmCBcFSw==} + engines: {node: '>= 0.10'} + + cjs-module-lexer@2.1.0: + resolution: {integrity: sha512-UX0OwmYRYQQetfrLEZeewIFFI+wSTofC+pMBLNuH3RUuu/xzG1oz84UCEDOSoQlN3fZ4+AzmV50ZYvGqkMh9yA==} + + cliui@8.0.1: + resolution: {integrity: sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==} + engines: {node: '>=12'} + + co@4.6.0: + resolution: {integrity: sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==} + engines: {iojs: '>= 1.0.0', node: '>= 0.12.0'} + + coininfo@5.2.1: + resolution: {integrity: sha512-mqSQIhAMgeiySzS0Ei33qno0oN/JQt9X3I6J1zx4eIYUnObGPuoLOrpssoqU84ZQoIpJGt3mQdEd2dL3sZJADw==} + + collect-v8-coverage@1.0.2: + resolution: {integrity: sha512-lHl4d5/ONEbLlJvaJNtsF/Lz+WvB07u2ycqTYbdrq7UypDXailES4valYb2eWiJFxZlVmpGekfqoxQhzyFdT4Q==} + + color-convert@2.0.1: + resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} + engines: {node: '>=7.0.0'} + + color-name@1.1.4: + resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} + + combined-stream@1.0.8: + resolution: {integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==} + engines: {node: '>= 0.8'} + + compare-func@2.0.0: + resolution: {integrity: sha512-zHig5N+tPWARooBnb0Zx1MFcdfpyJrfTJ3Y5L+IFvUm8rM74hHz66z0gw0x4tijh5CorKkKUCnW82R2vmpeCRA==} + + concat-map@0.0.1: + resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} + + conventional-changelog-angular@7.0.0: + resolution: {integrity: sha512-ROjNchA9LgfNMTTFSIWPzebCwOGFdgkEq45EnvvrmSLvCtAw0HSmrCs7/ty+wAeYUZyNay0YMUNYFTRL72PkBQ==} + engines: {node: '>=16'} + + conventional-changelog-conventionalcommits@7.0.2: + resolution: {integrity: sha512-NKXYmMR/Hr1DevQegFB4MwfM5Vv0m4UIxKZTTYuD98lpTknaZlSRrDOG4X7wIXpGkfsYxZTghUN+Qq+T0YQI7w==} + engines: {node: '>=16'} + + conventional-commits-parser@5.0.0: + resolution: {integrity: sha512-ZPMl0ZJbw74iS9LuX9YIAiW8pfM5p3yh2o/NbXHbkFuZzY5jvdi5jFycEOkmBW5H5I7nA+D6f3UcsCLP2vvSEA==} + engines: {node: '>=16'} + hasBin: true + + convert-source-map@2.0.0: + resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==} + + cosmiconfig-typescript-loader@6.1.0: + resolution: {integrity: sha512-tJ1w35ZRUiM5FeTzT7DtYWAFFv37ZLqSRkGi2oeCK1gPhvaWjkAtfXvLmvE1pRfxxp9aQo6ba/Pvg1dKj05D4g==} + engines: {node: '>=v18'} + peerDependencies: + '@types/node': '*' + cosmiconfig: '>=9' + typescript: '>=5' + + cosmiconfig@9.0.0: + resolution: {integrity: sha512-itvL5h8RETACmOTFc4UfIyB2RfEHi71Ax6E/PivVxq9NseKbOWpeyHEOIbmAw1rs8Ak0VursQNww7lf7YtUwzg==} + engines: {node: '>=14'} + peerDependencies: + typescript: '>=4.9.5' + peerDependenciesMeta: + typescript: + optional: true + + create-hash@1.1.3: + resolution: {integrity: sha512-snRpch/kwQhcdlnZKYanNF1m0RDlrCdSKQaH87w1FCFPVPNCQ/Il9QJKAX2jVBZddRdaHBMC+zXa9Gw9tmkNUA==} + + create-hash@1.2.0: + resolution: {integrity: sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==} + + create-hmac@1.1.7: + resolution: {integrity: sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==} + + cross-spawn@7.0.6: + resolution: {integrity: sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==} + engines: {node: '>= 8'} + + dargs@8.1.0: + resolution: {integrity: sha512-wAV9QHOsNbwnWdNW2FYvE1P56wtgSbM+3SZcdGiWQILwVjACCXDCI3Ai8QlCjMDB8YK5zySiXZYBiwGmNY3lnw==} + engines: {node: '>=12'} + + debug@4.3.7: + resolution: {integrity: sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==} + engines: {node: '>=6.0'} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + + debug@4.4.1: + resolution: {integrity: sha512-KcKCqiftBJcZr++7ykoDIEwSa3XWowTfNPo92BYxjXiyYEVrUQh2aLyhxBCwww+heortUFxEJYcRzosstTEBYQ==} + engines: {node: '>=6.0'} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + + decode-named-character-reference@1.2.0: + resolution: {integrity: sha512-c6fcElNV6ShtZXmsgNgFFV5tVX2PaV4g+MOAkb8eXHvn6sryJBrZa9r0zV6+dtTyoCKxtDy5tyQ5ZwQuidtd+Q==} + + dedent@1.6.0: + resolution: {integrity: sha512-F1Z+5UCFpmQUzJa11agbyPVMbpgT/qA3/SKyJ1jyBgm7dUcUEa8v9JwDkerSQXfakBwFljIxhOJqGkjUwZ9FSA==} + peerDependencies: + babel-plugin-macros: ^3.1.0 + peerDependenciesMeta: + babel-plugin-macros: + optional: true + + deep-is@0.1.4: + resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==} + + deepmerge@4.3.1: + resolution: {integrity: sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==} + engines: {node: '>=0.10.0'} + + define-data-property@1.1.4: + resolution: {integrity: sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==} + engines: {node: '>= 0.4'} + + delayed-stream@1.0.0: + resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==} + engines: {node: '>=0.4.0'} + + dequal@2.0.3: + resolution: {integrity: sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==} + engines: {node: '>=6'} + + detect-newline@3.1.0: + resolution: {integrity: sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==} + engines: {node: '>=8'} + + devlop@1.1.0: + resolution: {integrity: sha512-RWmIqhcFf1lRYBvNmr7qTNuyCt/7/ns2jbpp1+PalgE/rDQcBT0fioSMUpJ93irlUhC5hrg4cYqe6U+0ImW0rA==} + + dot-prop@5.3.0: + resolution: {integrity: sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==} + engines: {node: '>=8'} + + dunder-proto@1.0.1: + resolution: {integrity: sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==} + engines: {node: '>= 0.4'} + + eastasianwidth@0.2.0: + resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==} + + ecpair@3.0.0: + resolution: {integrity: sha512-kf4JxjsRQoD4EBzpYjGAcR0t9i/4oAeRPtyCpKvSwyotgkc6oA4E4M0/e+kep7cXe+mgxAvoeh/jdgH9h5+Wxw==} + engines: {node: '>=20.0.0'} + + ed2curve@0.1.4: + resolution: {integrity: sha512-hDZWhCHZ1wu4P2g2RVsM2MjDmmJzhvcsXr5qHUSBJZXvuhJSunhbVsWoBXdIe0/yTa3RV4UaWpOmFmrVsKr0wA==} + + ed2curve@0.3.0: + resolution: {integrity: sha512-8w2fmmq3hv9rCrcI7g9hms2pMunQr1JINfcjwR9tAyZqhtyaMN991lF/ZfHfr5tzZQ8c7y7aBgZbjfbd0fjFwQ==} + + ejs@3.1.10: + resolution: {integrity: sha512-UeJmFfOrAQS8OJWPZ4qtgHyWExa088/MtK5UEyoJGFH67cDEXkZSviOiKRCZ4Xij0zxI3JECgYs3oKx+AizQBA==} + engines: {node: '>=0.10.0'} + hasBin: true + + electron-to-chromium@1.5.186: + resolution: {integrity: sha512-lur7L4BFklgepaJxj4DqPk7vKbTEl0pajNlg2QjE5shefmlmBLm2HvQ7PMf1R/GvlevT/581cop33/quQcfX3A==} + + elliptic@6.6.1: + resolution: {integrity: sha512-RaddvvMatK2LJHqFJ+YA4WysVN5Ita9E35botqIYspQ4TkRAlCicdzKOjlyv/1Za5RyTNn7di//eEV0uTAfe3g==} + + emittery@0.13.1: + resolution: {integrity: sha512-DeWwawk6r5yR9jFgnDKYt4sLS0LmHJJi3ZOnb5/JdbYwj3nW+FxQnHIjhBKz8YLC7oRNPVM9NQ47I3CVx34eqQ==} + engines: {node: '>=12'} + + emoji-regex@8.0.0: + resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} + + emoji-regex@9.2.2: + resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==} + + engine.io-client@6.6.3: + resolution: {integrity: sha512-T0iLjnyNWahNyv/lcjS2y4oE358tVS/SYQNxYXGAJ9/GLgH4VCvOQ/mhTjqU88mLZCQgiG8RIegFHYCdVC+j5w==} + + engine.io-parser@5.2.3: + resolution: {integrity: sha512-HqD3yTBfnBxIrbnM1DoD6Pcq8NECnh8d4As1Qgh0z5Gg3jRRIqijury0CL3ghu/edArpUYiYqQiDUQBIs4np3Q==} + engines: {node: '>=10.0.0'} + + env-paths@2.2.1: + resolution: {integrity: sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==} + engines: {node: '>=6'} + + error-ex@1.3.2: + resolution: {integrity: sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==} + + es-define-property@1.0.1: + resolution: {integrity: sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==} + engines: {node: '>= 0.4'} + + es-errors@1.3.0: + resolution: {integrity: sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==} + engines: {node: '>= 0.4'} + + es-object-atoms@1.1.1: + resolution: {integrity: sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==} + engines: {node: '>= 0.4'} + + es-set-tostringtag@2.1.0: + resolution: {integrity: sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==} + engines: {node: '>= 0.4'} + + escalade@3.2.0: + resolution: {integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==} + engines: {node: '>=6'} + + escape-string-regexp@2.0.0: + resolution: {integrity: sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==} + engines: {node: '>=8'} + + escape-string-regexp@4.0.0: + resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} + engines: {node: '>=10'} + + escape-string-regexp@5.0.0: + resolution: {integrity: sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==} + engines: {node: '>=12'} + + eslint-config-google@0.14.0: + resolution: {integrity: sha512-WsbX4WbjuMvTdeVL6+J3rK1RGhCTqjsFjX7UMSMgZiyxxaNLkoJENbrGExzERFeoTpGw3F3FypTiWAP9ZXzkEw==} + engines: {node: '>=0.10.0'} + peerDependencies: + eslint: '>=5.16.0' + + eslint-plugin-jest@29.0.1: + resolution: {integrity: sha512-EE44T0OSMCeXhDrrdsbKAhprobKkPtJTbQz5yEktysNpHeDZTAL1SfDTNKmcFfJkY6yrQLtTKZALrD3j/Gpmiw==} + engines: {node: ^20.12.0 || ^22.0.0 || >=24.0.0} + peerDependencies: + '@typescript-eslint/eslint-plugin': ^8.0.0 + eslint: ^8.57.0 || ^9.0.0 + jest: '*' + peerDependenciesMeta: + '@typescript-eslint/eslint-plugin': + optional: true + jest: + optional: true + + eslint-scope@8.4.0: + resolution: {integrity: sha512-sNXOfKCn74rt8RICKMvJS7XKV/Xk9kA7DyJr8mJik3S7Cwgy3qlkkmyS2uQB3jiJg6VNdZd/pDBJu0nvG2NlTg==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + eslint-visitor-keys@3.4.3: + resolution: {integrity: sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + + eslint-visitor-keys@4.2.1: + resolution: {integrity: sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + eslint@9.32.0: + resolution: {integrity: sha512-LSehfdpgMeWcTZkWZVIJl+tkZ2nuSkyyB9C27MZqFWXuph7DvaowgcTvKqxvpLW1JZIk8PN7hFY3Rj9LQ7m7lg==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + hasBin: true + peerDependencies: + jiti: '*' + peerDependenciesMeta: + jiti: + optional: true + + espree@10.4.0: + resolution: {integrity: sha512-j6PAQ2uUr79PZhBjP5C5fhl8e39FmRnOjsD5lGnWrFU8i2G776tBK7+nP8KuQUTTyAZUwfQqXAgrVH5MbH9CYQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + esprima@4.0.1: + resolution: {integrity: sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==} + engines: {node: '>=4'} + hasBin: true + + esquery@1.6.0: + resolution: {integrity: sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==} + engines: {node: '>=0.10'} + + esrecurse@4.3.0: + resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==} + engines: {node: '>=4.0'} + + estraverse@5.3.0: + resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==} + engines: {node: '>=4.0'} + + esutils@2.0.3: + resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} + engines: {node: '>=0.10.0'} + + ethereum-cryptography@0.1.3: + resolution: {integrity: sha512-w8/4x1SGGzc+tO97TASLja6SLd3fRIK2tLVcV2Gx4IB21hE19atll5Cq9o3d0ZmAYC/8aw0ipieTSiekAea4SQ==} + + ethereumjs-util@7.1.5: + resolution: {integrity: sha512-SDl5kKrQAudFBUe5OJM9Ac6WmMyYmXX/6sTmLZ3ffG2eY6ZIGBes3pEDxNN6V72WyOw4CPD5RomKdsa8DAAwLg==} + engines: {node: '>=10.0.0'} + + evp_bytestokey@1.0.3: + resolution: {integrity: sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==} + + execa@5.1.1: + resolution: {integrity: sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==} + engines: {node: '>=10'} + + exit-x@0.2.2: + resolution: {integrity: sha512-+I6B/IkJc1o/2tiURyz/ivu/O0nKNEArIUB5O7zBrlDVJr22SCLH3xTeEry428LvFhRzIA1g8izguxJ/gbNcVQ==} + engines: {node: '>= 0.8.0'} + + expect@30.0.4: + resolution: {integrity: sha512-dDLGjnP2cKbEppxVICxI/Uf4YemmGMPNy0QytCbfafbpYk9AFQsxb8Uyrxii0RPK7FWgLGlSem+07WirwS3cFQ==} + engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} + + expect@30.0.5: + resolution: {integrity: sha512-P0te2pt+hHI5qLJkIR+iMvS+lYUZml8rKKsohVHAGY+uClp9XVbdyYNJOIjSRpHVp8s8YqxJCiHUkSYZGr8rtQ==} + engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} + + fast-deep-equal@3.1.3: + resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} + + fast-glob@3.3.3: + resolution: {integrity: sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==} + engines: {node: '>=8.6.0'} + + fast-json-stable-stringify@2.1.0: + resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==} + + fast-levenshtein@2.0.6: + resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==} + + fast-uri@3.0.6: + resolution: {integrity: sha512-Atfo14OibSv5wAp4VWNsFYE1AchQRTv9cBGWET4pZWHzYshFSS9NQI6I57rdKn9croWVMbYFbLhJ+yJvmZIIHw==} + + fastq@1.19.1: + resolution: {integrity: sha512-GwLTyxkCXjXbxqIhTsMI2Nui8huMPtnxg7krajPJAjnEG/iiOS7i+zCtWGZR9G0NBKbXKh6X9m9UIsYX/N6vvQ==} + + fault@2.0.1: + resolution: {integrity: sha512-WtySTkS4OKev5JtpHXnib4Gxiurzh5NCGvWrFaZ34m6JehfTUhKZvn9njTfw48t6JumVQOmrKqpmGcdwxnhqBQ==} + + fb-watchman@2.0.2: + resolution: {integrity: sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA==} + + file-entry-cache@8.0.0: + resolution: {integrity: sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==} + engines: {node: '>=16.0.0'} + + filelist@1.0.4: + resolution: {integrity: sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==} + + fill-range@7.1.1: + resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==} + engines: {node: '>=8'} + + find-up@4.1.0: + resolution: {integrity: sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==} + engines: {node: '>=8'} + + find-up@5.0.0: + resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==} + engines: {node: '>=10'} + + find-up@7.0.0: + resolution: {integrity: sha512-YyZM99iHrqLKjmt4LJDj58KI+fYyufRLBSYcqycxf//KpBk9FoewoGX0450m9nB44qrZnovzC2oeP5hUibxc/g==} + engines: {node: '>=18'} + + flat-cache@4.0.1: + resolution: {integrity: sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==} + engines: {node: '>=16'} + + flatted@3.3.3: + resolution: {integrity: sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg==} + + follow-redirects@1.15.9: + resolution: {integrity: sha512-gew4GsXizNgdoRyqmyfMHyAmXsZDk6mHkSxZFCzW9gwlbtOW44CDtYavM+y+72qD/Vq2l550kMF52DT8fOLJqQ==} + engines: {node: '>=4.0'} + peerDependencies: + debug: '*' + peerDependenciesMeta: + debug: + optional: true + + for-each@0.3.5: + resolution: {integrity: sha512-dKx12eRCVIzqCxFGplyFKJMPvLEWgmNtUrpTiJIR5u97zEhRG8ySrtboPHZXx7daLxQVrl643cTzbab2tkQjxg==} + engines: {node: '>= 0.4'} + + foreground-child@3.3.1: + resolution: {integrity: sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw==} + engines: {node: '>=14'} + + form-data@4.0.4: + resolution: {integrity: sha512-KrGhL9Q4zjj0kiUt5OO4Mr/A/jlI2jDYs5eHBpYHPcBEVSiipAvn2Ko2HnPe20rmcuuvMHNdZFp+4IlGTMF0Ow==} + engines: {node: '>= 6'} + + format@0.2.2: + resolution: {integrity: sha512-wzsgA6WOq+09wrU1tsJ09udeR/YZRaeArL9e1wPbFg3GG2yDnC2ldKpxs4xunpFF9DgqCqOIra3bc1HWrJ37Ww==} + engines: {node: '>=0.4.x'} + + fs.realpath@1.0.0: + resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} + + fsevents@2.3.3: + resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} + engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} + os: [darwin] + + function-bind@1.1.2: + resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==} + + gensync@1.0.0-beta.2: + resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==} + engines: {node: '>=6.9.0'} + + get-caller-file@2.0.5: + resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==} + engines: {node: 6.* || 8.* || >= 10.*} + + get-intrinsic@1.3.0: + resolution: {integrity: sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==} + engines: {node: '>= 0.4'} + + get-package-type@0.1.0: + resolution: {integrity: sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==} + engines: {node: '>=8.0.0'} + + get-proto@1.0.1: + resolution: {integrity: sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==} + engines: {node: '>= 0.4'} + + get-stream@6.0.1: + resolution: {integrity: sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==} + engines: {node: '>=10'} + + git-raw-commits@4.0.0: + resolution: {integrity: sha512-ICsMM1Wk8xSGMowkOmPrzo2Fgmfo4bMHLNX6ytHjajRJUqvHOw/TFapQ+QG75c3X/tTDDhOSRPGC52dDbNM8FQ==} + engines: {node: '>=16'} + hasBin: true + + github-slugger@2.0.0: + resolution: {integrity: sha512-IaOQ9puYtjrkq7Y0Ygl9KDZnrf/aiUJYUpVf89y8kyaxbRG7Y1SrX/jaumrv81vc61+kiMempujsM3Yw7w5qcw==} + + glob-parent@5.1.2: + resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} + engines: {node: '>= 6'} + + glob-parent@6.0.2: + resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==} + engines: {node: '>=10.13.0'} + + glob@10.4.5: + resolution: {integrity: sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==} + hasBin: true + + glob@7.2.3: + resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==} + deprecated: Glob versions prior to v9 are no longer supported + + global-directory@4.0.1: + resolution: {integrity: sha512-wHTUcDUoZ1H5/0iVqEudYW4/kAlN5cZ3j/bXn0Dpbizl9iaUVeWSHqiOjsgk6OW2bkLclbBjzewBz6weQ1zA2Q==} + engines: {node: '>=18'} + + globals@14.0.0: + resolution: {integrity: sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==} + engines: {node: '>=18'} + + globals@16.3.0: + resolution: {integrity: sha512-bqWEnJ1Nt3neqx2q5SFfGS8r/ahumIakg3HcwtNlrVlwXIeNumWn/c7Pn/wKzGhf6SaW6H6uWXLqC30STCMchQ==} + engines: {node: '>=18'} + + gopd@1.2.0: + resolution: {integrity: sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==} + engines: {node: '>= 0.4'} + + graceful-fs@4.2.11: + resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} + + graphemer@1.4.0: + resolution: {integrity: sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==} + + has-flag@4.0.0: + resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} + engines: {node: '>=8'} + + has-property-descriptors@1.0.2: + resolution: {integrity: sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==} + + has-symbols@1.1.0: + resolution: {integrity: sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==} + engines: {node: '>= 0.4'} + + has-tostringtag@1.0.2: + resolution: {integrity: sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==} + engines: {node: '>= 0.4'} + + hash-base@2.0.2: + resolution: {integrity: sha512-0TROgQ1/SxE6KmxWSvXHvRj90/Xo1JvZShofnYF+f6ZsGtR4eES7WfrQzPalmyagfKZCXpVnitiRebZulWsbiw==} + + hash-base@3.1.0: + resolution: {integrity: sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA==} + engines: {node: '>=4'} + + hash-wasm@4.9.0: + resolution: {integrity: sha512-7SW7ejyfnRxuOc7ptQHSf4LDoZaWOivfzqw+5rpcQku0nHfmicPKE51ra9BiRLAmT8+gGLestr1XroUkqdjL6w==} + + hash.js@1.1.7: + resolution: {integrity: sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==} + + hasown@2.0.2: + resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==} + engines: {node: '>= 0.4'} + + hdkey@2.1.0: + resolution: {integrity: sha512-i9Wzi0Dy49bNS4tXXeGeu0vIcn86xXdPQUpEYg+SO1YiO8HtomjmmRMaRyqL0r59QfcD4PfVbSF3qmsWFwAemA==} + + hmac-drbg@1.0.1: + resolution: {integrity: sha512-Tti3gMqLdZfhOQY1Mzf/AanLiqh1WTiJgEj26ZuYQ9fbkLomzGchCws4FyrSd4VkpBfiNhaE1On+lOz894jvXg==} + + html-escaper@2.0.2: + resolution: {integrity: sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==} + + human-signals@2.1.0: + resolution: {integrity: sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==} + engines: {node: '>=10.17.0'} + + husky@9.1.7: + resolution: {integrity: sha512-5gs5ytaNjBrh5Ow3zrvdUUY+0VxIuWVL4i9irt6friV+BqdCfmV11CQTWMiBYWHbXhco+J1kHfTOUkePhCDvMA==} + engines: {node: '>=18'} + hasBin: true + + ignore@5.3.2: + resolution: {integrity: sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==} + engines: {node: '>= 4'} + + ignore@7.0.5: + resolution: {integrity: sha512-Hs59xBNfUIunMFgWAbGX5cq6893IbWg4KnrjbYwX3tx0ztorVgTDA6B2sxf8ejHJ4wz8BqGUMYlnzNBer5NvGg==} + engines: {node: '>= 4'} + + import-fresh@3.3.1: + resolution: {integrity: sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==} + engines: {node: '>=6'} + + import-local@3.2.0: + resolution: {integrity: sha512-2SPlun1JUPWoM6t3F0dw0FkCF/jWY8kttcY4f599GLTSjh2OCuuhdTkJQsEcZzBqbXZGKMK2OqW1oZsjtf/gQA==} + engines: {node: '>=8'} + hasBin: true + + import-meta-resolve@4.1.0: + resolution: {integrity: sha512-I6fiaX09Xivtk+THaMfAwnA3MVA5Big1WHF1Dfx9hFuvNIWpXnorlkzhcQf6ehrqQiiZECRt1poOAkPmer3ruw==} + + imurmurhash@0.1.4: + resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==} + engines: {node: '>=0.8.19'} + + inflight@1.0.6: + resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==} + deprecated: This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful. + + inherits@2.0.4: + resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} + + ini@4.1.1: + resolution: {integrity: sha512-QQnnxNyfvmHFIsj7gkPcYymR8Jdw/o7mp5ZFihxn6h8Ci6fh3Dx4E1gPjpQEpIuPo9XVNY/ZUwh4BPMjGyL01g==} + engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + + is-arrayish@0.2.1: + resolution: {integrity: sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==} + + is-callable@1.2.7: + resolution: {integrity: sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==} + engines: {node: '>= 0.4'} + + is-extglob@2.1.1: + resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} + engines: {node: '>=0.10.0'} + + is-fullwidth-code-point@3.0.0: + resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} + engines: {node: '>=8'} + + is-generator-fn@2.1.0: + resolution: {integrity: sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==} + engines: {node: '>=6'} + + is-glob@4.0.3: + resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} + engines: {node: '>=0.10.0'} + + is-number@7.0.0: + resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} + engines: {node: '>=0.12.0'} + + is-obj@2.0.0: + resolution: {integrity: sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==} + engines: {node: '>=8'} + + is-stream@2.0.1: + resolution: {integrity: sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==} + engines: {node: '>=8'} + + is-text-path@2.0.0: + resolution: {integrity: sha512-+oDTluR6WEjdXEJMnC2z6A4FRwFoYuvShVVEGsS7ewc0UTi2QtAKMDJuL4BDEVt+5T7MjFo12RP8ghOM75oKJw==} + engines: {node: '>=8'} + + is-typed-array@1.1.15: + resolution: {integrity: sha512-p3EcsicXjit7SaskXHs1hA91QxgTw46Fv6EFKKGS5DRFLD8yKnohjF3hxoju94b/OcMZoQukzpPpBE9uLVKzgQ==} + engines: {node: '>= 0.4'} + + isarray@2.0.5: + resolution: {integrity: sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==} + + isexe@2.0.0: + resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} + + istanbul-lib-coverage@3.2.2: + resolution: {integrity: sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg==} + engines: {node: '>=8'} + + istanbul-lib-instrument@6.0.3: + resolution: {integrity: sha512-Vtgk7L/R2JHyyGW07spoFlB8/lpjiOLTjMdms6AFMraYt3BaJauod/NGrfnVG/y4Ix1JEuMRPDPEj2ua+zz1/Q==} + engines: {node: '>=10'} + + istanbul-lib-report@3.0.1: + resolution: {integrity: sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==} + engines: {node: '>=10'} + + istanbul-lib-source-maps@5.0.6: + resolution: {integrity: sha512-yg2d+Em4KizZC5niWhQaIomgf5WlL4vOOjZ5xGCmF8SnPE/mDWWXgvRExdcpCgh9lLRRa1/fSYp2ymmbJ1pI+A==} + engines: {node: '>=10'} + + istanbul-reports@3.1.7: + resolution: {integrity: sha512-BewmUXImeuRk2YY0PVbxgKAysvhRPUQE0h5QRM++nVWyubKGV0l8qQ5op8+B2DOmwSe63Jivj0BjkPQVf8fP5g==} + engines: {node: '>=8'} + + jackspeak@3.4.3: + resolution: {integrity: sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==} + + jake@10.9.2: + resolution: {integrity: sha512-2P4SQ0HrLQ+fw6llpLnOaGAvN2Zu6778SJMrCUwns4fOoG9ayrTiZk3VV8sCPkVZF8ab0zksVpS8FDY5pRCNBA==} + engines: {node: '>=10'} + hasBin: true + + jest-changed-files@30.0.5: + resolution: {integrity: sha512-bGl2Ntdx0eAwXuGpdLdVYVr5YQHnSZlQ0y9HVDu565lCUAe9sj6JOtBbMmBBikGIegne9piDDIOeiLVoqTkz4A==} + engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} + + jest-circus@30.0.5: + resolution: {integrity: sha512-h/sjXEs4GS+NFFfqBDYT7y5Msfxh04EwWLhQi0F8kuWpe+J/7tICSlswU8qvBqumR3kFgHbfu7vU6qruWWBPug==} + engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} + + jest-cli@30.0.5: + resolution: {integrity: sha512-Sa45PGMkBZzF94HMrlX4kUyPOwUpdZasaliKN3mifvDmkhLYqLLg8HQTzn6gq7vJGahFYMQjXgyJWfYImKZzOw==} + engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} + hasBin: true + peerDependencies: + node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 + peerDependenciesMeta: + node-notifier: + optional: true + + jest-config@30.0.5: + resolution: {integrity: sha512-aIVh+JNOOpzUgzUnPn5FLtyVnqc3TQHVMupYtyeURSb//iLColiMIR8TxCIDKyx9ZgjKnXGucuW68hCxgbrwmA==} + engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} + peerDependencies: + '@types/node': '*' + esbuild-register: '>=3.4.0' + ts-node: '>=9.0.0' + peerDependenciesMeta: + '@types/node': + optional: true + esbuild-register: + optional: true + ts-node: + optional: true + + jest-diff@30.0.4: + resolution: {integrity: sha512-TSjceIf6797jyd+R64NXqicttROD+Qf98fex7CowmlSn7f8+En0da1Dglwr1AXxDtVizoxXYZBlUQwNhoOXkNw==} + engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} + + jest-diff@30.0.5: + resolution: {integrity: sha512-1UIqE9PoEKaHcIKvq2vbibrCog4Y8G0zmOxgQUVEiTqwR5hJVMCoDsN1vFvI5JvwD37hjueZ1C4l2FyGnfpE0A==} + engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} + + jest-docblock@30.0.1: + resolution: {integrity: sha512-/vF78qn3DYphAaIc3jy4gA7XSAz167n9Bm/wn/1XhTLW7tTBIzXtCJpb/vcmc73NIIeeohCbdL94JasyXUZsGA==} + engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} + + jest-each@30.0.5: + resolution: {integrity: sha512-dKjRsx1uZ96TVyejD3/aAWcNKy6ajMaN531CwWIsrazIqIoXI9TnnpPlkrEYku/8rkS3dh2rbH+kMOyiEIv0xQ==} + engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} + + jest-environment-node@30.0.5: + resolution: {integrity: sha512-ppYizXdLMSvciGsRsMEnv/5EFpvOdXBaXRBzFUDPWrsfmog4kYrOGWXarLllz6AXan6ZAA/kYokgDWuos1IKDA==} + engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} + + jest-haste-map@30.0.5: + resolution: {integrity: sha512-dkmlWNlsTSR0nH3nRfW5BKbqHefLZv0/6LCccG0xFCTWcJu8TuEwG+5Cm75iBfjVoockmO6J35o5gxtFSn5xeg==} + engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} + + jest-leak-detector@30.0.5: + resolution: {integrity: sha512-3Uxr5uP8jmHMcsOtYMRB/zf1gXN3yUIc+iPorhNETG54gErFIiUhLvyY/OggYpSMOEYqsmRxmuU4ZOoX5jpRFg==} + engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} + + jest-matcher-utils@30.0.4: + resolution: {integrity: sha512-ubCewJ54YzeAZ2JeHHGVoU+eDIpQFsfPQs0xURPWoNiO42LGJ+QGgfSf+hFIRplkZDkhH5MOvuxHKXRTUU3dUQ==} + engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} + + jest-matcher-utils@30.0.5: + resolution: {integrity: sha512-uQgGWt7GOrRLP1P7IwNWwK1WAQbq+m//ZY0yXygyfWp0rJlksMSLQAA4wYQC3b6wl3zfnchyTx+k3HZ5aPtCbQ==} + engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} + + jest-message-util@30.0.2: + resolution: {integrity: sha512-vXywcxmr0SsKXF/bAD7t7nMamRvPuJkras00gqYeB1V0WllxZrbZ0paRr3XqpFU2sYYjD0qAaG2fRyn/CGZ0aw==} + engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} + + jest-message-util@30.0.5: + resolution: {integrity: sha512-NAiDOhsK3V7RU0Aa/HnrQo+E4JlbarbmI3q6Pi4KcxicdtjV82gcIUrejOtczChtVQR4kddu1E1EJlW6EN9IyA==} + engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} + + jest-mock@30.0.2: + resolution: {integrity: sha512-PnZOHmqup/9cT/y+pXIVbbi8ID6U1XHRmbvR7MvUy4SLqhCbwpkmXhLbsWbGewHrV5x/1bF7YDjs+x24/QSvFA==} + engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} + + jest-mock@30.0.5: + resolution: {integrity: sha512-Od7TyasAAQX/6S+QCbN6vZoWOMwlTtzzGuxJku1GhGanAjz9y+QsQkpScDmETvdc9aSXyJ/Op4rhpMYBWW91wQ==} + engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} + + jest-pnp-resolver@1.2.3: + resolution: {integrity: sha512-+3NpwQEnRoIBtx4fyhblQDPgJI0H1IEIkX7ShLUjPGA7TtUTvI1oiKi3SR4oBR0hQhQR80l4WAe5RrXBwWMA8w==} + engines: {node: '>=6'} + peerDependencies: + jest-resolve: '*' + peerDependenciesMeta: + jest-resolve: + optional: true + + jest-regex-util@30.0.1: + resolution: {integrity: sha512-jHEQgBXAgc+Gh4g0p3bCevgRCVRkB4VB70zhoAE48gxeSr1hfUOsM/C2WoJgVL7Eyg//hudYENbm3Ne+/dRVVA==} + engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} + + jest-resolve-dependencies@30.0.5: + resolution: {integrity: sha512-/xMvBR4MpwkrHW4ikZIWRttBBRZgWK4d6xt3xW1iRDSKt4tXzYkMkyPfBnSCgv96cpkrctfXs6gexeqMYqdEpw==} + engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} + + jest-resolve@30.0.5: + resolution: {integrity: sha512-d+DjBQ1tIhdz91B79mywH5yYu76bZuE96sSbxj8MkjWVx5WNdt1deEFRONVL4UkKLSrAbMkdhb24XN691yDRHg==} + engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} + + jest-runner@30.0.5: + resolution: {integrity: sha512-JcCOucZmgp+YuGgLAXHNy7ualBx4wYSgJVWrYMRBnb79j9PD0Jxh0EHvR5Cx/r0Ce+ZBC4hCdz2AzFFLl9hCiw==} + engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} + + jest-runtime@30.0.5: + resolution: {integrity: sha512-7oySNDkqpe4xpX5PPiJTe5vEa+Ak/NnNz2bGYZrA1ftG3RL3EFlHaUkA1Cjx+R8IhK0Vg43RML5mJedGTPNz3A==} + engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} + + jest-snapshot@30.0.5: + resolution: {integrity: sha512-T00dWU/Ek3LqTp4+DcW6PraVxjk28WY5Ua/s+3zUKSERZSNyxTqhDXCWKG5p2HAJ+crVQ3WJ2P9YVHpj1tkW+g==} + engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} + + jest-util@30.0.2: + resolution: {integrity: sha512-8IyqfKS4MqprBuUpZNlFB5l+WFehc8bfCe1HSZFHzft2mOuND8Cvi9r1musli+u6F3TqanCZ/Ik4H4pXUolZIg==} + engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} + + jest-util@30.0.5: + resolution: {integrity: sha512-pvyPWssDZR0FlfMxCBoc0tvM8iUEskaRFALUtGQYzVEAqisAztmy+R8LnU14KT4XA0H/a5HMVTXat1jLne010g==} + engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} + + jest-validate@30.0.5: + resolution: {integrity: sha512-ouTm6VFHaS2boyl+k4u+Qip4TSH7Uld5tyD8psQ8abGgt2uYYB8VwVfAHWHjHc0NWmGGbwO5h0sCPOGHHevefw==} + engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} + + jest-watcher@30.0.5: + resolution: {integrity: sha512-z9slj/0vOwBDBjN3L4z4ZYaA+pG56d6p3kTUhFRYGvXbXMWhXmb/FIxREZCD06DYUwDKKnj2T80+Pb71CQ0KEg==} + engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} + + jest-worker@30.0.5: + resolution: {integrity: sha512-ojRXsWzEP16NdUuBw/4H/zkZdHOa7MMYCk4E430l+8fELeLg/mqmMlRhjL7UNZvQrDmnovWZV4DxX03fZF48fQ==} + engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} + + jest@30.0.5: + resolution: {integrity: sha512-y2mfcJywuTUkvLm2Lp1/pFX8kTgMO5yyQGq/Sk/n2mN7XWYp4JsCZ/QXW34M8YScgk8bPZlREH04f6blPnoHnQ==} + engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} + hasBin: true + peerDependencies: + node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 + peerDependenciesMeta: + node-notifier: + optional: true + + jiti@2.4.2: + resolution: {integrity: sha512-rg9zJN+G4n2nfJl5MW3BMygZX56zKPNVEYYqq7adpmMh4Jn2QNEwhvQlFy6jPVdcod7txZtKHWnyZiA3a0zP7A==} + hasBin: true + + js-tokens@4.0.0: + resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} + + js-yaml@3.14.1: + resolution: {integrity: sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==} + hasBin: true + + js-yaml@4.1.0: + resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==} + hasBin: true + + jsesc@3.1.0: + resolution: {integrity: sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==} + engines: {node: '>=6'} + hasBin: true + + json-buffer@2.0.11: + resolution: {integrity: sha512-Wu4/hxSZX7Krzjor+sZHWaRau6Be4WQHlrkl3v8cmxRBBewF2TotlgHUedKQJyFiUyFxnK/ZlRYnR9UNVZ7pkg==} + + json-buffer@3.0.1: + resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==} + + json-parse-even-better-errors@2.3.1: + resolution: {integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==} + + json-schema-traverse@0.4.1: + resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==} + + json-schema-traverse@1.0.0: + resolution: {integrity: sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==} + + json-stable-stringify-without-jsonify@1.0.1: + resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==} + + json5@2.2.3: + resolution: {integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==} + engines: {node: '>=6'} + hasBin: true + + jsonparse@1.3.1: + resolution: {integrity: sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg==} + engines: {'0': node >= 0.2.0} + + keccak@3.0.4: + resolution: {integrity: sha512-3vKuW0jV8J3XNTzvfyicFR5qvxrSAGl7KIhvgOu5cmWwM7tZRj3fMbj/pfIf4be7aznbc+prBWGjywox/g2Y6Q==} + engines: {node: '>=10.0.0'} + + keyv@4.5.4: + resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==} + + leven@3.1.0: + resolution: {integrity: sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==} + engines: {node: '>=6'} + + levn@0.4.1: + resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==} + engines: {node: '>= 0.8.0'} + + lines-and-columns@1.2.4: + resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} + + locate-path@5.0.0: + resolution: {integrity: sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==} + engines: {node: '>=8'} + + locate-path@6.0.0: + resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==} + engines: {node: '>=10'} + + locate-path@7.2.0: + resolution: {integrity: sha512-gvVijfZvn7R+2qyPX8mAuKcFGDf6Nc61GdvGafQsHL0sBIxfKzA+usWn4GFC/bk+QdwPUD4kWFJLhElipq+0VA==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + + lodash.camelcase@4.3.0: + resolution: {integrity: sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==} + + lodash.isplainobject@4.0.6: + resolution: {integrity: sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==} + + lodash.kebabcase@4.1.1: + resolution: {integrity: sha512-N8XRTIMMqqDgSy4VLKPnJ/+hpGZN+PHQiJnSenYqPaVV/NCqEogTnAdZLQiGKhxX+JCs8waWq2t1XHWKOmlY8g==} + + lodash.memoize@4.1.2: + resolution: {integrity: sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==} + + lodash.merge@4.6.2: + resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==} + + lodash.mergewith@4.6.2: + resolution: {integrity: sha512-GK3g5RPZWTRSeLSpgP8Xhra+pnjBC56q9FZYe1d5RN3TJ35dbkGy3YqBSMbyCrlbi+CM9Z3Jk5yTL7RCsqboyQ==} + + lodash.snakecase@4.1.1: + resolution: {integrity: sha512-QZ1d4xoBHYUeuouhEq3lk3Uq7ldgyFXGBhg04+oRLnIz8o9T65Eh+8YdroUwn846zchkA9yDsDl5CVVaV2nqYw==} + + lodash.startcase@4.4.0: + resolution: {integrity: sha512-+WKqsK294HMSc2jEbNgpHpd0JfIBhp7rEV4aqXWqFr6AlXov+SlcgB1Fv01y2kGe3Gc8nMW7VA0SrGuSkRfIEg==} + + lodash.uniq@4.5.0: + resolution: {integrity: sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ==} + + lodash.upperfirst@4.3.1: + resolution: {integrity: sha512-sReKOYJIJf74dhJONhU4e0/shzi1trVbSWDOhKYE5XV2O+H7Sb2Dihwuc7xWxVl+DgFPyTqIN3zMfT9cq5iWDg==} + + long@3.2.0: + resolution: {integrity: sha512-ZYvPPOMqUwPoDsbJaR10iQJYnMuZhRTvHYl62ErLIEX7RgFlziSBUUvrt3OVfc47QlHHpzPZYP17g3Fv7oeJkg==} + engines: {node: '>=0.6'} + + longest-streak@3.1.0: + resolution: {integrity: sha512-9Ri+o0JYgehTaVBBDoMqIl8GXtbWg711O3srftcHhZ0dqnETqLaoIK0x17fUw9rFSlK/0NlsKe0Ahhyl5pXE2g==} + + lru-cache@10.4.3: + resolution: {integrity: sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==} + + lru-cache@5.1.1: + resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==} + + make-dir@4.0.0: + resolution: {integrity: sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==} + engines: {node: '>=10'} + + make-error@1.3.6: + resolution: {integrity: sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==} + + makeerror@1.0.12: + resolution: {integrity: sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==} + + markdown-table@3.0.4: + resolution: {integrity: sha512-wiYz4+JrLyb/DqW2hkFJxP7Vd7JuTDm77fvbM8VfEQdmSMqcImWeeRbHwZjBjIFki/VaMK2BhFi7oUUZeM5bqw==} + + math-intrinsics@1.1.0: + resolution: {integrity: sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==} + engines: {node: '>= 0.4'} + + md5.js@1.3.5: + resolution: {integrity: sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==} + + mdast-util-find-and-replace@3.0.2: + resolution: {integrity: sha512-Tmd1Vg/m3Xz43afeNxDIhWRtFZgM2VLyaf4vSTYwudTyeuTneoL3qtWMA5jeLyz/O1vDJmmV4QuScFCA2tBPwg==} + + mdast-util-from-markdown@2.0.2: + resolution: {integrity: sha512-uZhTV/8NBuw0WHkPTrCqDOl0zVe1BIng5ZtHoDk49ME1qqcjYmmLmOf0gELgcRMxN4w2iuIeVso5/6QymSrgmA==} + + mdast-util-frontmatter@2.0.1: + resolution: {integrity: sha512-LRqI9+wdgC25P0URIJY9vwocIzCcksduHQ9OF2joxQoyTNVduwLAFUzjoopuRJbJAReaKrNQKAZKL3uCMugWJA==} + + mdast-util-gfm-autolink-literal@2.0.1: + resolution: {integrity: sha512-5HVP2MKaP6L+G6YaxPNjuL0BPrq9orG3TsrZ9YXbA3vDw/ACI4MEsnoDpn6ZNm7GnZgtAcONJyPhOP8tNJQavQ==} + + mdast-util-gfm-footnote@2.1.0: + resolution: {integrity: sha512-sqpDWlsHn7Ac9GNZQMeUzPQSMzR6Wv0WKRNvQRg0KqHh02fpTz69Qc1QSseNX29bhz1ROIyNyxExfawVKTm1GQ==} + + mdast-util-gfm-strikethrough@2.0.0: + resolution: {integrity: sha512-mKKb915TF+OC5ptj5bJ7WFRPdYtuHv0yTRxK2tJvi+BDqbkiG7h7u/9SI89nRAYcmap2xHQL9D+QG/6wSrTtXg==} + + mdast-util-gfm-table@2.0.0: + resolution: {integrity: sha512-78UEvebzz/rJIxLvE7ZtDd/vIQ0RHv+3Mh5DR96p7cS7HsBhYIICDBCu8csTNWNO6tBWfqXPWekRuj2FNOGOZg==} + + mdast-util-gfm-task-list-item@2.0.0: + resolution: {integrity: sha512-IrtvNvjxC1o06taBAVJznEnkiHxLFTzgonUdy8hzFVeDun0uTjxxrRGVaNFqkU1wJR3RBPEfsxmU6jDWPofrTQ==} + + mdast-util-gfm@3.1.0: + resolution: {integrity: sha512-0ulfdQOM3ysHhCJ1p06l0b0VKlhU0wuQs3thxZQagjcjPrlFRqY215uZGHHJan9GEAXd9MbfPjFJz+qMkVR6zQ==} + + mdast-util-phrasing@4.1.0: + resolution: {integrity: sha512-TqICwyvJJpBwvGAMZjj4J2n0X8QWp21b9l0o7eXyVJ25YNWYbJDVIyD1bZXE6WtV6RmKJVYmQAKWa0zWOABz2w==} + + mdast-util-to-markdown@2.1.2: + resolution: {integrity: sha512-xj68wMTvGXVOKonmog6LwyJKrYXZPvlwabaryTjLh9LuvovB/KAH+kvi8Gjj+7rJjsFi23nkUxRQv1KqSroMqA==} + + mdast-util-to-string@4.0.0: + resolution: {integrity: sha512-0H44vDimn51F0YwvxSJSm0eCDOJTRlmN0R1yBh4HLj9wiV1Dn0QoXGbvFAWj2hSItVTlCmBF1hqKlIyUBVFLPg==} + + meow@12.1.1: + resolution: {integrity: sha512-BhXM0Au22RwUneMPwSCnyhTOizdWoIEPU9sp0Aqa1PnDMR5Wv2FGXYDjuzJEIX+Eo2Rb8xuYe5jrnm5QowQFkw==} + engines: {node: '>=16.10'} + + merge-stream@2.0.0: + resolution: {integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==} + + merge2@1.4.1: + resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} + engines: {node: '>= 8'} + + micromark-core-commonmark@2.0.3: + resolution: {integrity: sha512-RDBrHEMSxVFLg6xvnXmb1Ayr2WzLAWjeSATAoxwKYJV94TeNavgoIdA0a9ytzDSVzBy2YKFK+emCPOEibLeCrg==} + + micromark-extension-frontmatter@2.0.0: + resolution: {integrity: sha512-C4AkuM3dA58cgZha7zVnuVxBhDsbttIMiytjgsM2XbHAB2faRVaHRle40558FBN+DJcrLNCoqG5mlrpdU4cRtg==} + + micromark-extension-gfm-autolink-literal@2.1.0: + resolution: {integrity: sha512-oOg7knzhicgQ3t4QCjCWgTmfNhvQbDDnJeVu9v81r7NltNCVmhPy1fJRX27pISafdjL+SVc4d3l48Gb6pbRypw==} + + micromark-extension-gfm-footnote@2.1.0: + resolution: {integrity: sha512-/yPhxI1ntnDNsiHtzLKYnE3vf9JZ6cAisqVDauhp4CEHxlb4uoOTxOCJ+9s51bIB8U1N1FJ1RXOKTIlD5B/gqw==} + + micromark-extension-gfm-strikethrough@2.1.0: + resolution: {integrity: sha512-ADVjpOOkjz1hhkZLlBiYA9cR2Anf8F4HqZUO6e5eDcPQd0Txw5fxLzzxnEkSkfnD0wziSGiv7sYhk/ktvbf1uw==} + + micromark-extension-gfm-table@2.1.1: + resolution: {integrity: sha512-t2OU/dXXioARrC6yWfJ4hqB7rct14e8f7m0cbI5hUmDyyIlwv5vEtooptH8INkbLzOatzKuVbQmAYcbWoyz6Dg==} + + micromark-extension-gfm-tagfilter@2.0.0: + resolution: {integrity: sha512-xHlTOmuCSotIA8TW1mDIM6X2O1SiX5P9IuDtqGonFhEK0qgRI4yeC6vMxEV2dgyr2TiD+2PQ10o+cOhdVAcwfg==} + + micromark-extension-gfm-task-list-item@2.1.0: + resolution: {integrity: sha512-qIBZhqxqI6fjLDYFTBIa4eivDMnP+OZqsNwmQ3xNLE4Cxwc+zfQEfbs6tzAo2Hjq+bh6q5F+Z8/cksrLFYWQQw==} + + micromark-extension-gfm@3.0.0: + resolution: {integrity: sha512-vsKArQsicm7t0z2GugkCKtZehqUm31oeGBV/KVSorWSy8ZlNAv7ytjFhvaryUiCUJYqs+NoE6AFhpQvBTM6Q4w==} + + micromark-factory-destination@2.0.1: + resolution: {integrity: sha512-Xe6rDdJlkmbFRExpTOmRj9N3MaWmbAgdpSrBQvCFqhezUn4AHqJHbaEnfbVYYiexVSs//tqOdY/DxhjdCiJnIA==} + + micromark-factory-label@2.0.1: + resolution: {integrity: sha512-VFMekyQExqIW7xIChcXn4ok29YE3rnuyveW3wZQWWqF4Nv9Wk5rgJ99KzPvHjkmPXF93FXIbBp6YdW3t71/7Vg==} + + micromark-factory-space@2.0.1: + resolution: {integrity: sha512-zRkxjtBxxLd2Sc0d+fbnEunsTj46SWXgXciZmHq0kDYGnck/ZSGj9/wULTV95uoeYiK5hRXP2mJ98Uo4cq/LQg==} + + micromark-factory-title@2.0.1: + resolution: {integrity: sha512-5bZ+3CjhAd9eChYTHsjy6TGxpOFSKgKKJPJxr293jTbfry2KDoWkhBb6TcPVB4NmzaPhMs1Frm9AZH7OD4Cjzw==} + + micromark-factory-whitespace@2.0.1: + resolution: {integrity: sha512-Ob0nuZ3PKt/n0hORHyvoD9uZhr+Za8sFoP+OnMcnWK5lngSzALgQYKMr9RJVOWLqQYuyn6ulqGWSXdwf6F80lQ==} + + micromark-util-character@2.1.1: + resolution: {integrity: sha512-wv8tdUTJ3thSFFFJKtpYKOYiGP2+v96Hvk4Tu8KpCAsTMs6yi+nVmGh1syvSCsaxz45J6Jbw+9DD6g97+NV67Q==} + + micromark-util-chunked@2.0.1: + resolution: {integrity: sha512-QUNFEOPELfmvv+4xiNg2sRYeS/P84pTW0TCgP5zc9FpXetHY0ab7SxKyAQCNCc1eK0459uoLI1y5oO5Vc1dbhA==} + + micromark-util-classify-character@2.0.1: + resolution: {integrity: sha512-K0kHzM6afW/MbeWYWLjoHQv1sgg2Q9EccHEDzSkxiP/EaagNzCm7T/WMKZ3rjMbvIpvBiZgwR3dKMygtA4mG1Q==} + + micromark-util-combine-extensions@2.0.1: + resolution: {integrity: sha512-OnAnH8Ujmy59JcyZw8JSbK9cGpdVY44NKgSM7E9Eh7DiLS2E9RNQf0dONaGDzEG9yjEl5hcqeIsj4hfRkLH/Bg==} + + micromark-util-decode-numeric-character-reference@2.0.2: + resolution: {integrity: sha512-ccUbYk6CwVdkmCQMyr64dXz42EfHGkPQlBj5p7YVGzq8I7CtjXZJrubAYezf7Rp+bjPseiROqe7G6foFd+lEuw==} + + micromark-util-decode-string@2.0.1: + resolution: {integrity: sha512-nDV/77Fj6eH1ynwscYTOsbK7rR//Uj0bZXBwJZRfaLEJ1iGBR6kIfNmlNqaqJf649EP0F3NWNdeJi03elllNUQ==} + + micromark-util-encode@2.0.1: + resolution: {integrity: sha512-c3cVx2y4KqUnwopcO9b/SCdo2O67LwJJ/UyqGfbigahfegL9myoEFoDYZgkT7f36T0bLrM9hZTAaAyH+PCAXjw==} + + micromark-util-html-tag-name@2.0.1: + resolution: {integrity: sha512-2cNEiYDhCWKI+Gs9T0Tiysk136SnR13hhO8yW6BGNyhOC4qYFnwF1nKfD3HFAIXA5c45RrIG1ub11GiXeYd1xA==} + + micromark-util-normalize-identifier@2.0.1: + resolution: {integrity: sha512-sxPqmo70LyARJs0w2UclACPUUEqltCkJ6PhKdMIDuJ3gSf/Q+/GIe3WKl0Ijb/GyH9lOpUkRAO2wp0GVkLvS9Q==} + + micromark-util-resolve-all@2.0.1: + resolution: {integrity: sha512-VdQyxFWFT2/FGJgwQnJYbe1jjQoNTS4RjglmSjTUlpUMa95Htx9NHeYW4rGDJzbjvCsl9eLjMQwGeElsqmzcHg==} + + micromark-util-sanitize-uri@2.0.1: + resolution: {integrity: sha512-9N9IomZ/YuGGZZmQec1MbgxtlgougxTodVwDzzEouPKo3qFWvymFHWcnDi2vzV1ff6kas9ucW+o3yzJK9YB1AQ==} + + micromark-util-subtokenize@2.1.0: + resolution: {integrity: sha512-XQLu552iSctvnEcgXw6+Sx75GflAPNED1qx7eBJ+wydBb2KCbRZe+NwvIEEMM83uml1+2WSXpBAcp9IUCgCYWA==} + + micromark-util-symbol@2.0.1: + resolution: {integrity: sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q==} + + micromark-util-types@2.0.2: + resolution: {integrity: sha512-Yw0ECSpJoViF1qTU4DC6NwtC4aWGt1EkzaQB8KPPyCRR8z9TWeV0HbEFGTO+ZY1wB22zmxnJqhPyTpOVCpeHTA==} + + micromark@4.0.2: + resolution: {integrity: sha512-zpe98Q6kvavpCr1NPVSCMebCKfD7CA2NqZ+rykeNhONIJBpc1tFKt9hucLGwha3jNTNI8lHpctWJWoimVF4PfA==} + + micromatch@4.0.8: + resolution: {integrity: sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==} + engines: {node: '>=8.6'} + + mime-db@1.52.0: + resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==} + engines: {node: '>= 0.6'} + + mime-types@2.1.35: + resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==} + engines: {node: '>= 0.6'} + + mimic-fn@2.1.0: + resolution: {integrity: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==} + engines: {node: '>=6'} + + minimalistic-assert@1.0.1: + resolution: {integrity: sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==} + + minimalistic-crypto-utils@1.0.1: + resolution: {integrity: sha512-JIYlbt6g8i5jKfJ3xz7rF0LXmv2TkDxBLUkiBeZ7bAx4GnnNMr8xFpGnOxn6GhTEHx3SjRrZEoU+j04prX1ktg==} + + minimatch@3.1.2: + resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} + + minimatch@5.1.6: + resolution: {integrity: sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==} + engines: {node: '>=10'} + + minimatch@9.0.5: + resolution: {integrity: sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==} + engines: {node: '>=16 || 14 >=14.17'} + + minimist@1.2.8: + resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==} + + minipass@7.1.2: + resolution: {integrity: sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==} + engines: {node: '>=16 || 14 >=14.17'} + + ms@2.1.3: + resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} + + napi-postinstall@0.3.0: + resolution: {integrity: sha512-M7NqKyhODKV1gRLdkwE7pDsZP2/SC2a2vHkOYh9MCpKMbWVfyVfUw5MaH83Fv6XMjxr5jryUp3IDDL9rlxsTeA==} + engines: {node: ^12.20.0 || ^14.18.0 || >=16.0.0} + hasBin: true + + natural-compare@1.4.0: + resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} + + node-addon-api@2.0.2: + resolution: {integrity: sha512-Ntyt4AIXyaLIuMHF6IOoTakB3K+RWxwtsHNRxllEoA6vPwP9o4866g6YWDLUdnucilZhmkxiHwHr11gAENw+QA==} + + node-addon-api@5.1.0: + resolution: {integrity: sha512-eh0GgfEkpnoWDq+VY8OyvYhFEzBk6jIYbRKdIlyTiAXIVJ8PyBaKb0rp7oDtoddbdoHWhq8wwr+XZ81F1rpNdA==} + + node-gyp-build@4.8.4: + resolution: {integrity: sha512-LA4ZjwlnUblHVgq0oBF3Jl/6h/Nvs5fzBLwdEF4nuxnFdsfajde4WfxtJr3CaiH+F6ewcIB/q4jQ4UzPyid+CQ==} + hasBin: true + + node-int64@0.4.0: + resolution: {integrity: sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==} + + node-releases@2.0.19: + resolution: {integrity: sha512-xxOWJsBKtzAq7DY0J+DTzuz58K8e7sJbdgwkbMWQe8UYB6ekmsQ45q0M/tJDsGaZmbC+l7n57UV8Hl5tHxO9uw==} + + normalize-path@3.0.0: + resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} + engines: {node: '>=0.10.0'} + + npm-run-path@4.0.1: + resolution: {integrity: sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==} + engines: {node: '>=8'} + + once@1.4.0: + resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} + + onetime@5.1.2: + resolution: {integrity: sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==} + engines: {node: '>=6'} + + optionator@0.9.4: + resolution: {integrity: sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==} + engines: {node: '>= 0.8.0'} + + p-limit@2.3.0: + resolution: {integrity: sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==} + engines: {node: '>=6'} + + p-limit@3.1.0: + resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==} + engines: {node: '>=10'} + + p-limit@4.0.0: + resolution: {integrity: sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + + p-locate@4.1.0: + resolution: {integrity: sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==} + engines: {node: '>=8'} + + p-locate@5.0.0: + resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==} + engines: {node: '>=10'} + + p-locate@6.0.0: + resolution: {integrity: sha512-wPrq66Llhl7/4AGC6I+cqxT07LhXvWL08LNXz1fENOw0Ap4sRZZ/gZpTTJ5jpurzzzfS2W/Ge9BY3LgLjCShcw==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + + p-try@2.2.0: + resolution: {integrity: sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==} + engines: {node: '>=6'} + + package-json-from-dist@1.0.1: + resolution: {integrity: sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==} + + parent-module@1.0.1: + resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} + engines: {node: '>=6'} + + parse-json@5.2.0: + resolution: {integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==} + engines: {node: '>=8'} + + path-exists@4.0.0: + resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} + engines: {node: '>=8'} + + path-exists@5.0.0: + resolution: {integrity: sha512-RjhtfwJOxzcFmNOi6ltcbcu4Iu+FL3zEj83dk4kAS+fVpTxXLO1b38RvJgT/0QwvV/L3aY9TAnyv0EOqW4GoMQ==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + + path-is-absolute@1.0.1: + resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==} + engines: {node: '>=0.10.0'} + + path-key@3.1.1: + resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} + engines: {node: '>=8'} + + path-scurry@1.11.1: + resolution: {integrity: sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==} + engines: {node: '>=16 || 14 >=14.18'} + + pbkdf2@3.1.3: + resolution: {integrity: sha512-wfRLBZ0feWRhCIkoMB6ete7czJcnNnqRpcoWQBLqatqXXmelSRqfdDK4F3u9T2s2cXas/hQJcryI/4lAL+XTlA==} + engines: {node: '>=0.12'} + + picocolors@1.1.1: + resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==} + + picomatch@2.3.1: + resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} + engines: {node: '>=8.6'} + + picomatch@4.0.3: + resolution: {integrity: sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==} + engines: {node: '>=12'} + + pirates@4.0.7: + resolution: {integrity: sha512-TfySrs/5nm8fQJDcBDuUng3VOUKsd7S+zqvbOTiGXHfxX4wK31ard+hoNuvkicM/2YFzlpDgABOevKSsB4G/FA==} + engines: {node: '>= 6'} + + pkg-dir@4.2.0: + resolution: {integrity: sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==} + engines: {node: '>=8'} + + possible-typed-array-names@1.1.0: + resolution: {integrity: sha512-/+5VFTchJDoVj3bhoqi6UeymcD00DAwb1nJwamzPvHEszJ4FpF6SNNbUbOS8yI56qHzdV8eK0qEfOSiodkTdxg==} + engines: {node: '>= 0.4'} + + prelude-ls@1.2.1: + resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} + engines: {node: '>= 0.8.0'} + + prettier@3.6.2: + resolution: {integrity: sha512-I7AIg5boAr5R0FFtJ6rCfD+LFsWHp81dolrFD8S79U9tb8Az2nGrJncnMSnys+bpQJfRUzqs9hnA81OAA3hCuQ==} + engines: {node: '>=14'} + hasBin: true + + pretty-format@30.0.2: + resolution: {integrity: sha512-yC5/EBSOrTtqhCKfLHqoUIAXVRZnukHPwWBJWR7h84Q3Be1DRQZLncwcfLoPA5RPQ65qfiCMqgYwdUuQ//eVpg==} + engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} + + pretty-format@30.0.5: + resolution: {integrity: sha512-D1tKtYvByrBkFLe2wHJl2bwMJIiT8rW+XA+TiataH79/FszLQMrpGEvzUVkzPau7OCO0Qnrhpe87PqtOAIB8Yw==} + engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} + + proxy-from-env@1.1.0: + resolution: {integrity: sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==} + + punycode@2.3.1: + resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} + engines: {node: '>=6'} + + pure-rand@7.0.1: + resolution: {integrity: sha512-oTUZM/NAZS8p7ANR3SHh30kXB+zK2r2BPcEn/awJIbOvq82WoMN4p62AWWp3Hhw50G0xMsw1mhIBLqHw64EcNQ==} + + queue-microtask@1.2.3: + resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} + + randombytes@2.1.0: + resolution: {integrity: sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==} + + react-is@18.3.1: + resolution: {integrity: sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==} + + readable-stream@3.6.2: + resolution: {integrity: sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==} + engines: {node: '>= 6'} + + require-directory@2.1.1: + resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==} + engines: {node: '>=0.10.0'} + + require-from-string@2.0.2: + resolution: {integrity: sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==} + engines: {node: '>=0.10.0'} + + resolve-cwd@3.0.0: + resolution: {integrity: sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==} + engines: {node: '>=8'} + + resolve-from@4.0.0: + resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} + engines: {node: '>=4'} + + resolve-from@5.0.0: + resolution: {integrity: sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==} + engines: {node: '>=8'} + + reusify@1.1.0: + resolution: {integrity: sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==} + engines: {iojs: '>=1.0.0', node: '>=0.10.0'} + + ripemd160@2.0.1: + resolution: {integrity: sha512-J7f4wutN8mdbV08MJnXibYpCOPHR+yzy+iQ/AsjMv2j8cLavQ8VGagDFUwwTAdF8FmRKVeNpbTTEwNHCW1g94w==} + + ripemd160@2.0.2: + resolution: {integrity: sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==} + + rlp@2.2.7: + resolution: {integrity: sha512-d5gdPmgQ0Z+AklL2NVXr/IoSjNZFfTVvQWzL/AM2AOcSzYP2xjlb0AC8YyCLc41MSNf6P6QVtjgPdmVtzb+4lQ==} + hasBin: true + + run-parallel@1.2.0: + resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} + + safe-buffer@5.2.1: + resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} + + scrypt-js@3.0.1: + resolution: {integrity: sha512-cdwTTnqPu0Hyvf5in5asVdZocVDTNRmR7XEcJuIzMjJeSHybHl7vpB66AzwTaIg6CLSbtjcxc8fqcySfnTkccA==} + + secp256k1@4.0.4: + resolution: {integrity: sha512-6JfvwvjUOn8F/jUoBY2Q1v5WY5XS+rj8qSe0v8Y4ezH4InLgTEeOOPQsRll9OV429Pvo6BCHGavIyJfr3TAhsw==} + engines: {node: '>=18.0.0'} + + semver@6.3.1: + resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} + hasBin: true + + semver@7.7.2: + resolution: {integrity: sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==} + engines: {node: '>=10'} + hasBin: true + + set-function-length@1.2.2: + resolution: {integrity: sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==} + engines: {node: '>= 0.4'} + + setimmediate@1.0.5: + resolution: {integrity: sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==} + + sha.js@2.4.12: + resolution: {integrity: sha512-8LzC5+bvI45BjpfXU8V5fdU2mfeKiQe1D1gIMn7XUlF3OTUrpdJpPPH4EMAnF0DsHHdSZqCdSss5qCmJKuiO3w==} + engines: {node: '>= 0.10'} + hasBin: true + + shebang-command@2.0.0: + resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} + engines: {node: '>=8'} + + shebang-regex@3.0.0: + resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} + engines: {node: '>=8'} + + signal-exit@3.0.7: + resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==} + + signal-exit@4.1.0: + resolution: {integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==} + engines: {node: '>=14'} + + slash@3.0.0: + resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==} + engines: {node: '>=8'} + + socket.io-client@4.8.1: + resolution: {integrity: sha512-hJVXfu3E28NmzGk8o1sHhN3om52tRvwYeidbj7xKy2eIIse5IoKX3USlS6Tqt3BHAtflLIkCQBkzVrEEfWUyYQ==} + engines: {node: '>=10.0.0'} + + socket.io-parser@4.2.4: + resolution: {integrity: sha512-/GbIKmo8ioc+NIWIhwdecY0ge+qVBSMdgxGygevmdHj24bsfgtCmcUUcQ5ZzcylGFHsN3k4HB4Cgkl96KVnuew==} + engines: {node: '>=10.0.0'} + + sodium-browserify-tweetnacl@0.2.6: + resolution: {integrity: sha512-ZnEI26hdluilpYY28Xc4rc1ALfmEp2TWihkJX6Mdtw0z9RfHfpZJU7P8DoKbN1HcBdU9aJmguFZs7igE8nLJPg==} + + source-map-support@0.5.13: + resolution: {integrity: sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w==} + + source-map@0.6.1: + resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==} + engines: {node: '>=0.10.0'} + + split2@4.2.0: + resolution: {integrity: sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg==} + engines: {node: '>= 10.x'} + + sprintf-js@1.0.3: + resolution: {integrity: sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==} + + stack-utils@2.0.6: + resolution: {integrity: sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==} + engines: {node: '>=10'} + + string-length@4.0.2: + resolution: {integrity: sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ==} + engines: {node: '>=10'} + + string-width@4.2.3: + resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} + engines: {node: '>=8'} + + string-width@5.1.2: + resolution: {integrity: sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==} + engines: {node: '>=12'} + + string_decoder@1.3.0: + resolution: {integrity: sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==} + + strip-ansi@6.0.1: + resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} + engines: {node: '>=8'} + + strip-ansi@7.1.0: + resolution: {integrity: sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==} + engines: {node: '>=12'} + + strip-bom@4.0.0: + resolution: {integrity: sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==} + engines: {node: '>=8'} + + strip-final-newline@2.0.0: + resolution: {integrity: sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==} + engines: {node: '>=6'} + + strip-json-comments@3.1.1: + resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} + engines: {node: '>=8'} + + supports-color@7.2.0: + resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} + engines: {node: '>=8'} + + supports-color@8.1.1: + resolution: {integrity: sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==} + engines: {node: '>=10'} + + synckit@0.11.8: + resolution: {integrity: sha512-+XZ+r1XGIJGeQk3VvXhT6xx/VpbHsRzsTkGgF6E5RX9TTXD0118l87puaEBZ566FhqblC6U0d4XnubznJDm30A==} + engines: {node: ^14.18.0 || >=16.0.0} + + test-exclude@6.0.0: + resolution: {integrity: sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==} + engines: {node: '>=8'} + + text-extensions@2.4.0: + resolution: {integrity: sha512-te/NtwBwfiNRLf9Ijqx3T0nlqZiQ2XrrtBvu+cLL8ZRrGkO0NHTug8MYFKyoSrv/sHTaSKfilUkizV6XhxMJ3g==} + engines: {node: '>=8'} + + through@2.3.8: + resolution: {integrity: sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==} + + tiny-secp256k1@2.2.4: + resolution: {integrity: sha512-FoDTcToPqZE454Q04hH9o2EhxWsm7pOSpicyHkgTwKhdKWdsTUuqfP5MLq3g+VjAtl2vSx6JpXGdwA2qpYkI0Q==} + engines: {node: '>=14.0.0'} + + tinyexec@1.0.1: + resolution: {integrity: sha512-5uC6DDlmeqiOwCPmK9jMSdOuZTh8bU39Ys6yidB+UTt5hfZUPGAypSgFRiEp+jbi9qH40BLDvy85jIU88wKSqw==} + + tmpl@1.0.5: + resolution: {integrity: sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==} + + to-buffer@1.2.1: + resolution: {integrity: sha512-tB82LpAIWjhLYbqjx3X4zEeHN6M8CiuOEy2JY8SEQVdYRe3CCHOFaqrBW1doLDrfpWhplcW7BL+bO3/6S3pcDQ==} + engines: {node: '>= 0.4'} + + to-regex-range@5.0.1: + resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} + engines: {node: '>=8.0'} + + ts-api-utils@2.1.0: + resolution: {integrity: sha512-CUgTZL1irw8u29bzrOD/nH85jqyc74D6SshFgujOIA7osm2Rz7dYH77agkx7H4FBNxDq7Cjf+IjaX/8zwFW+ZQ==} + engines: {node: '>=18.12'} + peerDependencies: + typescript: '>=4.8.4' + + ts-jest@29.4.0: + resolution: {integrity: sha512-d423TJMnJGu80/eSgfQ5w/R+0zFJvdtTxwtF9KzFFunOpSeD+79lHJQIiAhluJoyGRbvj9NZJsl9WjCUo0ND7Q==} + engines: {node: ^14.15.0 || ^16.10.0 || ^18.0.0 || >=20.0.0} + hasBin: true + peerDependencies: + '@babel/core': '>=7.0.0-beta.0 <8' + '@jest/transform': ^29.0.0 || ^30.0.0 + '@jest/types': ^29.0.0 || ^30.0.0 + babel-jest: ^29.0.0 || ^30.0.0 + esbuild: '*' + jest: ^29.0.0 || ^30.0.0 + jest-util: ^29.0.0 || ^30.0.0 + typescript: '>=4.3 <6' + peerDependenciesMeta: + '@babel/core': + optional: true + '@jest/transform': + optional: true + '@jest/types': + optional: true + babel-jest: + optional: true + esbuild: + optional: true + jest-util: + optional: true + + tslib@2.8.1: + resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==} + + tweetnacl-auth@0.3.1: + resolution: {integrity: sha512-9/c8c6qRMTfWuv54ETFhihgYoofi0M9HUovMSGJ1rLRUj6O5A0vuCg2L/qKfvmcjLVhaTgAJCLy2EqCLJK2QLw==} + + tweetnacl@0.14.5: + resolution: {integrity: sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA==} + + tweetnacl@1.0.3: + resolution: {integrity: sha512-6rt+RN7aOi1nGMyC4Xa5DdYiukl2UWCbcJft7YhxReBGQD7OAM8Pbxw6YMo4r2diNEA8FEmu32YOn9rhaiE5yw==} + + type-check@0.4.0: + resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==} + engines: {node: '>= 0.8.0'} + + type-detect@4.0.8: + resolution: {integrity: sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==} + engines: {node: '>=4'} + + type-fest@0.21.3: + resolution: {integrity: sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==} + engines: {node: '>=10'} + + type-fest@4.41.0: + resolution: {integrity: sha512-TeTSQ6H5YHvpqVwBRcnLDCBnDOHWYu7IvGbHT6N8AOymcr9PJGjc1GTtiWZTYg0NCgYwvnYWEkVChQAr9bjfwA==} + engines: {node: '>=16'} + + typed-array-buffer@1.0.3: + resolution: {integrity: sha512-nAYYwfY3qnzX30IkA6AQZjVbtK6duGontcQm1WSG1MD94YLqK0515GNApXkoxKOWMusVssAHWLh9SeaoefYFGw==} + engines: {node: '>= 0.4'} + + typeforce@1.18.0: + resolution: {integrity: sha512-7uc1O8h1M1g0rArakJdf0uLRSSgFcYexrVoKo+bzJd32gd4gDy2L/Z+8/FjPnU9ydY3pEnVPtr9FyscYY60K1g==} + + typescript-eslint@8.38.0: + resolution: {integrity: sha512-FsZlrYK6bPDGoLeZRuvx2v6qrM03I0U0SnfCLPs/XCCPCFD80xU9Pg09H/K+XFa68uJuZo7l/Xhs+eDRg2l3hg==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + eslint: ^8.57.0 || ^9.0.0 + typescript: '>=4.8.4 <5.9.0' + + typescript@5.8.3: + resolution: {integrity: sha512-p1diW6TqL9L07nNxvRMM7hMMw4c5XOo/1ibL4aAIGmSAt9slTE1Xgw5KWuof2uTOvCg9BY7ZRi+GaF+7sfgPeQ==} + engines: {node: '>=14.17'} + hasBin: true + + uint8array-tools@0.0.7: + resolution: {integrity: sha512-vrrNZJiusLWoFWBqz5Y5KMCgP9W9hnjZHzZiZRT8oNAkq3d5Z5Oe76jAvVVSRh4U8GGR90N2X1dWtrhvx6L8UQ==} + engines: {node: '>=14.0.0'} + + uint8array-tools@0.0.8: + resolution: {integrity: sha512-xS6+s8e0Xbx++5/0L+yyexukU7pz//Yg6IHg3BKhXotg1JcYtgxVcUctQ0HxLByiJzpAkNFawz1Nz5Xadzo82g==} + engines: {node: '>=14.0.0'} + + undici-types@7.8.0: + resolution: {integrity: sha512-9UJ2xGDvQ43tYyVMpuHlsgApydB8ZKfVYTsLDhXkFL/6gfkp+U8xTGdh8pMJv1SpZna0zxG1DwsKZsreLbXBxw==} + + unicorn-magic@0.1.0: + resolution: {integrity: sha512-lRfVq8fE8gz6QMBuDM6a+LO3IAzTi05H6gCVaUpir2E1Rwpo4ZUog45KpNXKC/Mn3Yb9UDuHumeFTo9iV/D9FQ==} + engines: {node: '>=18'} + + unist-util-is@6.0.0: + resolution: {integrity: sha512-2qCTHimwdxLfz+YzdGfkqNlH0tLi9xjTnHddPmJwtIG9MGsdbutfTc4P+haPD7l7Cjxf/WZj+we5qfVPvvxfYw==} + + unist-util-stringify-position@4.0.0: + resolution: {integrity: sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==} + + unist-util-visit-parents@6.0.1: + resolution: {integrity: sha512-L/PqWzfTP9lzzEa6CKs0k2nARxTdZduw3zyh8d2NVBnsyvHjSX4TWse388YrrQKbvI8w20fGjGlhgT96WwKykw==} + + unist-util-visit@5.0.0: + resolution: {integrity: sha512-MR04uvD+07cwl/yhVuVWAtw+3GOR/knlL55Nd/wAdblk27GCVt3lqpTivy/tkJcZoNPzTwS1Y+KMojlLDhoTzg==} + + unrs-resolver@1.11.1: + resolution: {integrity: sha512-bSjt9pjaEBnNiGgc9rUiHGKv5l4/TGzDmYw3RhnkJGtLhbnnA/5qJj7x3dNDCRx/PJxu774LlH8lCOlB4hEfKg==} + + update-browserslist-db@1.1.3: + resolution: {integrity: sha512-UxhIZQ+QInVdunkDAaiazvvT/+fXL5Osr0JZlJulepYu6Jd7qJtDZjlur0emRlT71EN3ScPoE7gvsuIKKNavKw==} + hasBin: true + peerDependencies: + browserslist: '>= 4.21.0' + + uri-js@4.4.1: + resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} + + util-deprecate@1.0.2: + resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} + + v8-to-istanbul@9.3.0: + resolution: {integrity: sha512-kiGUalWN+rgBJ/1OHZsBtU4rXZOfj/7rKQxULKlIzwzQSvMJUUNgPwJEEh7gU6xEVxC0ahoOBvN2YI8GH6FNgA==} + engines: {node: '>=10.12.0'} + + valibot@0.37.0: + resolution: {integrity: sha512-FQz52I8RXgFgOHym3XHYSREbNtkgSjF9prvMFH1nBsRyfL6SfCzoT1GuSDTlbsuPubM7/6Kbw0ZMQb8A+V+VsQ==} + peerDependencies: + typescript: '>=5' peerDependenciesMeta: typescript: optional: true + + varuint-bitcoin@1.1.2: + resolution: {integrity: sha512-4EVb+w4rx+YfVM32HQX42AbbT7/1f5zwAYhIujKXKk8NQK+JfRVl3pqT3hjNn/L+RstigmGGKVwHA/P0wgITZw==} + + walker@1.0.8: + resolution: {integrity: sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==} + + which-typed-array@1.1.19: + resolution: {integrity: sha512-rEvr90Bck4WZt9HHFC4DJMsjvu7x+r6bImz0/BrbWb7A2djJ8hnZMrWnHo9F8ssv0OMErasDhftrfROTyqSDrw==} + engines: {node: '>= 0.4'} + + which@2.0.2: + resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} + engines: {node: '>= 8'} + hasBin: true + + wif@5.0.0: + resolution: {integrity: sha512-iFzrC/9ne740qFbNjTZ2FciSRJlHIXoxqk/Y5EnE08QOXu1WjJyCCswwDTYbohAOEnlCtLaAAQBhyaLRFh2hMA==} + + word-wrap@1.2.5: + resolution: {integrity: sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==} + engines: {node: '>=0.10.0'} + + wrap-ansi@7.0.0: + resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==} + engines: {node: '>=10'} + + wrap-ansi@8.1.0: + resolution: {integrity: sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==} + engines: {node: '>=12'} + + wrappy@1.0.2: + resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} + + write-file-atomic@5.0.1: + resolution: {integrity: sha512-+QU2zd6OTD8XWIJCbffaiQeH9U73qIqafo1x6V1snCWYGJf6cVE0cDR4D8xRzcEnfI21IFrUPzPGtcPf8AC+Rw==} + engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + + ws@8.17.1: + resolution: {integrity: sha512-6XQFvXTkbfUOZOKKILFG1PDK2NDQs4azKQl26T0YS5CxqWLgXajbPZ+h4gZekJyRqFU8pvnbAbbs/3TgRPy+GQ==} + engines: {node: '>=10.0.0'} + peerDependencies: + bufferutil: ^4.0.1 + utf-8-validate: '>=5.0.2' + peerDependenciesMeta: + bufferutil: + optional: true + utf-8-validate: + optional: true + + xmlhttprequest-ssl@2.1.2: + resolution: {integrity: sha512-TEU+nJVUUnA4CYJFLvK5X9AOeH4KvDvhIfm0vV1GaQRtchnG0hgK5p8hw/xjv8cunWYCsiPCSDzObPyhEwq3KQ==} + engines: {node: '>=0.4.0'} + + y18n@5.0.8: + resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==} + engines: {node: '>=10'} + + yallist@3.1.1: + resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==} + + yargs-parser@21.1.1: + resolution: {integrity: sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==} + engines: {node: '>=12'} + + yargs@17.7.2: + resolution: {integrity: sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==} + engines: {node: '>=12'} + + yocto-queue@0.1.0: + resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} + engines: {node: '>=10'} + + yocto-queue@1.2.1: + resolution: {integrity: sha512-AyeEbWOu/TAXdxlV9wmGcR0+yh2j3vYPGOECcIj2S7MkrLyC7ne+oye2BKTItt0ii2PHk4cDy+95+LshzbXnGg==} + engines: {node: '>=12.20'} + + zwitch@2.0.4: + resolution: {integrity: sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A==} + +snapshots: + + '@ampproject/remapping@2.3.0': + dependencies: + '@jridgewell/gen-mapping': 0.3.12 + '@jridgewell/trace-mapping': 0.3.29 + + '@babel/code-frame@7.27.1': + dependencies: + '@babel/helper-validator-identifier': 7.27.1 + js-tokens: 4.0.0 + picocolors: 1.1.1 + + '@babel/compat-data@7.28.0': {} + + '@babel/core@7.28.0': + dependencies: + '@ampproject/remapping': 2.3.0 + '@babel/code-frame': 7.27.1 + '@babel/generator': 7.28.0 + '@babel/helper-compilation-targets': 7.27.2 + '@babel/helper-module-transforms': 7.27.3(@babel/core@7.28.0) + '@babel/helpers': 7.27.6 + '@babel/parser': 7.28.0 + '@babel/template': 7.27.2 + '@babel/traverse': 7.28.0 + '@babel/types': 7.28.1 + convert-source-map: 2.0.0 + debug: 4.4.1 + gensync: 1.0.0-beta.2 + json5: 2.2.3 + semver: 6.3.1 + transitivePeerDependencies: + - supports-color + + '@babel/generator@7.28.0': + dependencies: + '@babel/parser': 7.28.0 + '@babel/types': 7.28.1 + '@jridgewell/gen-mapping': 0.3.12 + '@jridgewell/trace-mapping': 0.3.29 + jsesc: 3.1.0 + + '@babel/helper-compilation-targets@7.27.2': + dependencies: + '@babel/compat-data': 7.28.0 + '@babel/helper-validator-option': 7.27.1 + browserslist: 4.25.1 + lru-cache: 5.1.1 + semver: 6.3.1 + + '@babel/helper-globals@7.28.0': {} + + '@babel/helper-module-imports@7.27.1': + dependencies: + '@babel/traverse': 7.28.0 + '@babel/types': 7.28.1 + transitivePeerDependencies: + - supports-color + + '@babel/helper-module-transforms@7.27.3(@babel/core@7.28.0)': + dependencies: + '@babel/core': 7.28.0 + '@babel/helper-module-imports': 7.27.1 + '@babel/helper-validator-identifier': 7.27.1 + '@babel/traverse': 7.28.0 + transitivePeerDependencies: + - supports-color + + '@babel/helper-plugin-utils@7.27.1': {} + + '@babel/helper-string-parser@7.27.1': {} + + '@babel/helper-validator-identifier@7.27.1': {} + + '@babel/helper-validator-option@7.27.1': {} + + '@babel/helpers@7.27.6': + dependencies: + '@babel/template': 7.27.2 + '@babel/types': 7.28.1 + + '@babel/parser@7.28.0': + dependencies: + '@babel/types': 7.28.1 + + '@babel/plugin-syntax-async-generators@7.8.4(@babel/core@7.28.0)': + dependencies: + '@babel/core': 7.28.0 + '@babel/helper-plugin-utils': 7.27.1 + + '@babel/plugin-syntax-bigint@7.8.3(@babel/core@7.28.0)': + dependencies: + '@babel/core': 7.28.0 + '@babel/helper-plugin-utils': 7.27.1 + + '@babel/plugin-syntax-class-properties@7.12.13(@babel/core@7.28.0)': + dependencies: + '@babel/core': 7.28.0 + '@babel/helper-plugin-utils': 7.27.1 + + '@babel/plugin-syntax-class-static-block@7.14.5(@babel/core@7.28.0)': + dependencies: + '@babel/core': 7.28.0 + '@babel/helper-plugin-utils': 7.27.1 + + '@babel/plugin-syntax-import-attributes@7.27.1(@babel/core@7.28.0)': + dependencies: + '@babel/core': 7.28.0 + '@babel/helper-plugin-utils': 7.27.1 + + '@babel/plugin-syntax-import-meta@7.10.4(@babel/core@7.28.0)': + dependencies: + '@babel/core': 7.28.0 + '@babel/helper-plugin-utils': 7.27.1 + + '@babel/plugin-syntax-json-strings@7.8.3(@babel/core@7.28.0)': + dependencies: + '@babel/core': 7.28.0 + '@babel/helper-plugin-utils': 7.27.1 + + '@babel/plugin-syntax-jsx@7.27.1(@babel/core@7.28.0)': + dependencies: + '@babel/core': 7.28.0 + '@babel/helper-plugin-utils': 7.27.1 + + '@babel/plugin-syntax-logical-assignment-operators@7.10.4(@babel/core@7.28.0)': + dependencies: + '@babel/core': 7.28.0 + '@babel/helper-plugin-utils': 7.27.1 + + '@babel/plugin-syntax-nullish-coalescing-operator@7.8.3(@babel/core@7.28.0)': + dependencies: + '@babel/core': 7.28.0 + '@babel/helper-plugin-utils': 7.27.1 + + '@babel/plugin-syntax-numeric-separator@7.10.4(@babel/core@7.28.0)': + dependencies: + '@babel/core': 7.28.0 + '@babel/helper-plugin-utils': 7.27.1 + + '@babel/plugin-syntax-object-rest-spread@7.8.3(@babel/core@7.28.0)': + dependencies: + '@babel/core': 7.28.0 + '@babel/helper-plugin-utils': 7.27.1 + + '@babel/plugin-syntax-optional-catch-binding@7.8.3(@babel/core@7.28.0)': + dependencies: + '@babel/core': 7.28.0 + '@babel/helper-plugin-utils': 7.27.1 + + '@babel/plugin-syntax-optional-chaining@7.8.3(@babel/core@7.28.0)': + dependencies: + '@babel/core': 7.28.0 + '@babel/helper-plugin-utils': 7.27.1 + + '@babel/plugin-syntax-private-property-in-object@7.14.5(@babel/core@7.28.0)': + dependencies: + '@babel/core': 7.28.0 + '@babel/helper-plugin-utils': 7.27.1 + + '@babel/plugin-syntax-top-level-await@7.14.5(@babel/core@7.28.0)': + dependencies: + '@babel/core': 7.28.0 + '@babel/helper-plugin-utils': 7.27.1 + + '@babel/plugin-syntax-typescript@7.27.1(@babel/core@7.28.0)': + dependencies: + '@babel/core': 7.28.0 + '@babel/helper-plugin-utils': 7.27.1 + + '@babel/template@7.27.2': + dependencies: + '@babel/code-frame': 7.27.1 + '@babel/parser': 7.28.0 + '@babel/types': 7.28.1 + + '@babel/traverse@7.28.0': + dependencies: + '@babel/code-frame': 7.27.1 + '@babel/generator': 7.28.0 + '@babel/helper-globals': 7.28.0 + '@babel/parser': 7.28.0 + '@babel/template': 7.27.2 + '@babel/types': 7.28.1 + debug: 4.4.1 + transitivePeerDependencies: + - supports-color + + '@babel/types@7.28.1': + dependencies: + '@babel/helper-string-parser': 7.27.1 + '@babel/helper-validator-identifier': 7.27.1 + + '@bcoe/v8-coverage@0.2.3': {} + + '@commitlint/cli@19.8.1(@types/node@24.1.0)(typescript@5.8.3)': + dependencies: + '@commitlint/format': 19.8.1 + '@commitlint/lint': 19.8.1 + '@commitlint/load': 19.8.1(@types/node@24.1.0)(typescript@5.8.3) + '@commitlint/read': 19.8.1 + '@commitlint/types': 19.8.1 + tinyexec: 1.0.1 + yargs: 17.7.2 + transitivePeerDependencies: + - '@types/node' + - typescript + + '@commitlint/config-conventional@19.8.1': + dependencies: + '@commitlint/types': 19.8.1 + conventional-changelog-conventionalcommits: 7.0.2 + + '@commitlint/config-validator@19.8.1': + dependencies: + '@commitlint/types': 19.8.1 + ajv: 8.17.1 + + '@commitlint/ensure@19.8.1': + dependencies: + '@commitlint/types': 19.8.1 + lodash.camelcase: 4.3.0 + lodash.kebabcase: 4.1.1 + lodash.snakecase: 4.1.1 + lodash.startcase: 4.4.0 + lodash.upperfirst: 4.3.1 + + '@commitlint/execute-rule@19.8.1': {} + + '@commitlint/format@19.8.1': + dependencies: + '@commitlint/types': 19.8.1 + chalk: 5.4.1 + + '@commitlint/is-ignored@19.8.1': + dependencies: + '@commitlint/types': 19.8.1 + semver: 7.7.2 + + '@commitlint/lint@19.8.1': + dependencies: + '@commitlint/is-ignored': 19.8.1 + '@commitlint/parse': 19.8.1 + '@commitlint/rules': 19.8.1 + '@commitlint/types': 19.8.1 + + '@commitlint/load@19.8.1(@types/node@24.1.0)(typescript@5.8.3)': + dependencies: + '@commitlint/config-validator': 19.8.1 + '@commitlint/execute-rule': 19.8.1 + '@commitlint/resolve-extends': 19.8.1 + '@commitlint/types': 19.8.1 + chalk: 5.4.1 + cosmiconfig: 9.0.0(typescript@5.8.3) + cosmiconfig-typescript-loader: 6.1.0(@types/node@24.1.0)(cosmiconfig@9.0.0(typescript@5.8.3))(typescript@5.8.3) + lodash.isplainobject: 4.0.6 + lodash.merge: 4.6.2 + lodash.uniq: 4.5.0 + transitivePeerDependencies: + - '@types/node' + - typescript + + '@commitlint/message@19.8.1': {} + + '@commitlint/parse@19.8.1': + dependencies: + '@commitlint/types': 19.8.1 + conventional-changelog-angular: 7.0.0 + conventional-commits-parser: 5.0.0 + + '@commitlint/read@19.8.1': + dependencies: + '@commitlint/top-level': 19.8.1 + '@commitlint/types': 19.8.1 + git-raw-commits: 4.0.0 + minimist: 1.2.8 + tinyexec: 1.0.1 + + '@commitlint/resolve-extends@19.8.1': + dependencies: + '@commitlint/config-validator': 19.8.1 + '@commitlint/types': 19.8.1 + global-directory: 4.0.1 + import-meta-resolve: 4.1.0 + lodash.mergewith: 4.6.2 + resolve-from: 5.0.0 + + '@commitlint/rules@19.8.1': + dependencies: + '@commitlint/ensure': 19.8.1 + '@commitlint/message': 19.8.1 + '@commitlint/to-lines': 19.8.1 + '@commitlint/types': 19.8.1 + + '@commitlint/to-lines@19.8.1': {} + + '@commitlint/top-level@19.8.1': + dependencies: + find-up: 7.0.0 + + '@commitlint/types@19.8.1': + dependencies: + '@types/conventional-commits-parser': 5.0.1 + chalk: 5.4.1 + + '@emnapi/core@1.4.4': + dependencies: + '@emnapi/wasi-threads': 1.0.3 + tslib: 2.8.1 + optional: true + + '@emnapi/runtime@1.4.4': + dependencies: + tslib: 2.8.1 + optional: true + + '@emnapi/wasi-threads@1.0.3': + dependencies: + tslib: 2.8.1 + optional: true + + '@eslint-community/eslint-utils@4.7.0(eslint@9.32.0(jiti@2.4.2))': + dependencies: + eslint: 9.32.0(jiti@2.4.2) + eslint-visitor-keys: 3.4.3 + + '@eslint-community/regexpp@4.12.1': {} + + '@eslint/config-array@0.21.0': + dependencies: + '@eslint/object-schema': 2.1.6 + debug: 4.4.1 + minimatch: 3.1.2 + transitivePeerDependencies: + - supports-color + + '@eslint/config-helpers@0.3.0': {} + + '@eslint/core@0.15.1': + dependencies: + '@types/json-schema': 7.0.15 + + '@eslint/eslintrc@3.3.1': + dependencies: + ajv: 6.12.6 + debug: 4.4.1 + espree: 10.4.0 + globals: 14.0.0 + ignore: 5.3.2 + import-fresh: 3.3.1 + js-yaml: 4.1.0 + minimatch: 3.1.2 + strip-json-comments: 3.1.1 + transitivePeerDependencies: + - supports-color + + '@eslint/js@9.32.0': {} + + '@eslint/json@0.13.1': + dependencies: + '@eslint/core': 0.15.1 + '@eslint/plugin-kit': 0.3.4 + '@humanwhocodes/momoa': 3.3.9 + natural-compare: 1.4.0 + + '@eslint/markdown@7.1.0': + dependencies: + '@eslint/core': 0.15.1 + '@eslint/plugin-kit': 0.3.4 + github-slugger: 2.0.0 + mdast-util-from-markdown: 2.0.2 + mdast-util-frontmatter: 2.0.1 + mdast-util-gfm: 3.1.0 + micromark-extension-frontmatter: 2.0.0 + micromark-extension-gfm: 3.0.0 + transitivePeerDependencies: + - supports-color + + '@eslint/object-schema@2.1.6': {} + + '@eslint/plugin-kit@0.3.4': + dependencies: + '@eslint/core': 0.15.1 + levn: 0.4.1 + + '@humanfs/core@0.19.1': {} + + '@humanfs/node@0.16.6': + dependencies: + '@humanfs/core': 0.19.1 + '@humanwhocodes/retry': 0.3.1 + + '@humanwhocodes/module-importer@1.0.1': {} + + '@humanwhocodes/momoa@3.3.9': {} + + '@humanwhocodes/retry@0.3.1': {} + + '@humanwhocodes/retry@0.4.3': {} + + '@isaacs/cliui@8.0.2': + dependencies: + string-width: 5.1.2 + string-width-cjs: string-width@4.2.3 + strip-ansi: 7.1.0 + strip-ansi-cjs: strip-ansi@6.0.1 + wrap-ansi: 8.1.0 + wrap-ansi-cjs: wrap-ansi@7.0.0 + + '@istanbuljs/load-nyc-config@1.1.0': + dependencies: + camelcase: 5.3.1 + find-up: 4.1.0 + get-package-type: 0.1.0 + js-yaml: 3.14.1 + resolve-from: 5.0.0 + + '@istanbuljs/schema@0.1.3': {} + + '@jest/console@30.0.5': + dependencies: + '@jest/types': 30.0.5 + '@types/node': 24.1.0 + chalk: 4.1.2 + jest-message-util: 30.0.5 + jest-util: 30.0.5 + slash: 3.0.0 + + '@jest/core@30.0.5': + dependencies: + '@jest/console': 30.0.5 + '@jest/pattern': 30.0.1 + '@jest/reporters': 30.0.5 + '@jest/test-result': 30.0.5 + '@jest/transform': 30.0.5 + '@jest/types': 30.0.5 + '@types/node': 24.1.0 + ansi-escapes: 4.3.2 + chalk: 4.1.2 + ci-info: 4.3.0 + exit-x: 0.2.2 + graceful-fs: 4.2.11 + jest-changed-files: 30.0.5 + jest-config: 30.0.5(@types/node@24.1.0) + jest-haste-map: 30.0.5 + jest-message-util: 30.0.5 + jest-regex-util: 30.0.1 + jest-resolve: 30.0.5 + jest-resolve-dependencies: 30.0.5 + jest-runner: 30.0.5 + jest-runtime: 30.0.5 + jest-snapshot: 30.0.5 + jest-util: 30.0.5 + jest-validate: 30.0.5 + jest-watcher: 30.0.5 + micromatch: 4.0.8 + pretty-format: 30.0.5 + slash: 3.0.0 + transitivePeerDependencies: + - babel-plugin-macros + - esbuild-register + - supports-color + - ts-node + + '@jest/diff-sequences@30.0.1': {} + + '@jest/environment@30.0.5': + dependencies: + '@jest/fake-timers': 30.0.5 + '@jest/types': 30.0.5 + '@types/node': 24.1.0 + jest-mock: 30.0.5 + + '@jest/expect-utils@30.0.4': + dependencies: + '@jest/get-type': 30.0.1 + + '@jest/expect-utils@30.0.5': + dependencies: + '@jest/get-type': 30.0.1 + + '@jest/expect@30.0.5': + dependencies: + expect: 30.0.5 + jest-snapshot: 30.0.5 + transitivePeerDependencies: + - supports-color + + '@jest/fake-timers@30.0.5': + dependencies: + '@jest/types': 30.0.5 + '@sinonjs/fake-timers': 13.0.5 + '@types/node': 24.1.0 + jest-message-util: 30.0.5 + jest-mock: 30.0.5 + jest-util: 30.0.5 + + '@jest/get-type@30.0.1': {} + + '@jest/globals@30.0.5': + dependencies: + '@jest/environment': 30.0.5 + '@jest/expect': 30.0.5 + '@jest/types': 30.0.5 + jest-mock: 30.0.5 + transitivePeerDependencies: + - supports-color + + '@jest/pattern@30.0.1': + dependencies: + '@types/node': 24.1.0 + jest-regex-util: 30.0.1 + + '@jest/reporters@30.0.5': + dependencies: + '@bcoe/v8-coverage': 0.2.3 + '@jest/console': 30.0.5 + '@jest/test-result': 30.0.5 + '@jest/transform': 30.0.5 + '@jest/types': 30.0.5 + '@jridgewell/trace-mapping': 0.3.29 + '@types/node': 24.1.0 + chalk: 4.1.2 + collect-v8-coverage: 1.0.2 + exit-x: 0.2.2 + glob: 10.4.5 + graceful-fs: 4.2.11 + istanbul-lib-coverage: 3.2.2 + istanbul-lib-instrument: 6.0.3 + istanbul-lib-report: 3.0.1 + istanbul-lib-source-maps: 5.0.6 + istanbul-reports: 3.1.7 + jest-message-util: 30.0.5 + jest-util: 30.0.5 + jest-worker: 30.0.5 + slash: 3.0.0 + string-length: 4.0.2 + v8-to-istanbul: 9.3.0 + transitivePeerDependencies: + - supports-color + + '@jest/schemas@30.0.1': + dependencies: + '@sinclair/typebox': 0.34.38 + + '@jest/schemas@30.0.5': + dependencies: + '@sinclair/typebox': 0.34.38 + + '@jest/snapshot-utils@30.0.5': + dependencies: + '@jest/types': 30.0.5 + chalk: 4.1.2 + graceful-fs: 4.2.11 + natural-compare: 1.4.0 + + '@jest/source-map@30.0.1': + dependencies: + '@jridgewell/trace-mapping': 0.3.29 + callsites: 3.1.0 + graceful-fs: 4.2.11 + + '@jest/test-result@30.0.5': + dependencies: + '@jest/console': 30.0.5 + '@jest/types': 30.0.5 + '@types/istanbul-lib-coverage': 2.0.6 + collect-v8-coverage: 1.0.2 + + '@jest/test-sequencer@30.0.5': + dependencies: + '@jest/test-result': 30.0.5 + graceful-fs: 4.2.11 + jest-haste-map: 30.0.5 + slash: 3.0.0 + + '@jest/transform@30.0.5': + dependencies: + '@babel/core': 7.28.0 + '@jest/types': 30.0.5 + '@jridgewell/trace-mapping': 0.3.29 + babel-plugin-istanbul: 7.0.0 + chalk: 4.1.2 + convert-source-map: 2.0.0 + fast-json-stable-stringify: 2.1.0 + graceful-fs: 4.2.11 + jest-haste-map: 30.0.5 + jest-regex-util: 30.0.1 + jest-util: 30.0.5 + micromatch: 4.0.8 + pirates: 4.0.7 + slash: 3.0.0 + write-file-atomic: 5.0.1 + transitivePeerDependencies: + - supports-color + + '@jest/types@30.0.1': + dependencies: + '@jest/pattern': 30.0.1 + '@jest/schemas': 30.0.1 + '@types/istanbul-lib-coverage': 2.0.6 + '@types/istanbul-reports': 3.0.4 + '@types/node': 24.1.0 + '@types/yargs': 17.0.33 + chalk: 4.1.2 + + '@jest/types@30.0.5': + dependencies: + '@jest/pattern': 30.0.1 + '@jest/schemas': 30.0.5 + '@types/istanbul-lib-coverage': 2.0.6 + '@types/istanbul-reports': 3.0.4 + '@types/node': 24.1.0 + '@types/yargs': 17.0.33 + chalk: 4.1.2 + + '@jridgewell/gen-mapping@0.3.12': + dependencies: + '@jridgewell/sourcemap-codec': 1.5.4 + '@jridgewell/trace-mapping': 0.3.29 + + '@jridgewell/resolve-uri@3.1.2': {} + + '@jridgewell/sourcemap-codec@1.5.4': {} + + '@jridgewell/trace-mapping@0.3.29': + dependencies: + '@jridgewell/resolve-uri': 3.1.2 + '@jridgewell/sourcemap-codec': 1.5.4 + + '@liskhq/lisk-cryptography@4.1.0': + dependencies: + '@liskhq/lisk-passphrase': 4.1.0 + buffer-reverse: 1.0.1 + hash-wasm: 4.9.0 + tweetnacl: 1.0.3 + + '@liskhq/lisk-passphrase@4.1.0': + dependencies: + bip39: 3.0.3 + + '@napi-rs/wasm-runtime@0.2.12': + dependencies: + '@emnapi/core': 1.4.4 + '@emnapi/runtime': 1.4.4 + '@tybys/wasm-util': 0.10.0 + optional: true + + '@noble/hashes@1.8.0': {} + + '@nodelib/fs.scandir@2.1.5': + dependencies: + '@nodelib/fs.stat': 2.0.5 + run-parallel: 1.2.0 + + '@nodelib/fs.stat@2.0.5': {} + + '@nodelib/fs.walk@1.2.8': + dependencies: + '@nodelib/fs.scandir': 2.1.5 + fastq: 1.19.1 + + '@pkgjs/parseargs@0.11.0': + optional: true + + '@pkgr/core@0.2.7': {} + + '@sinclair/typebox@0.34.38': {} + + '@sinonjs/commons@3.0.1': + dependencies: + type-detect: 4.0.8 + + '@sinonjs/fake-timers@13.0.5': + dependencies: + '@sinonjs/commons': 3.0.1 + + '@socket.io/component-emitter@3.1.2': {} + + '@tybys/wasm-util@0.10.0': + dependencies: + tslib: 2.8.1 + optional: true + + '@types/babel__core@7.20.5': + dependencies: + '@babel/parser': 7.28.0 + '@babel/types': 7.28.1 + '@types/babel__generator': 7.27.0 + '@types/babel__template': 7.4.4 + '@types/babel__traverse': 7.20.7 + + '@types/babel__generator@7.27.0': + dependencies: + '@babel/types': 7.28.1 + + '@types/babel__template@7.4.4': + dependencies: + '@babel/parser': 7.28.0 + '@babel/types': 7.28.1 + + '@types/babel__traverse@7.20.7': + dependencies: + '@babel/types': 7.28.1 + + '@types/bn.js@5.2.0': + dependencies: + '@types/node': 24.1.0 + + '@types/bytebuffer@5.0.49': + dependencies: + '@types/long': 3.0.32 + '@types/node': 24.1.0 + + '@types/conventional-commits-parser@5.0.1': + dependencies: + '@types/node': 24.1.0 + + '@types/debug@4.1.12': + dependencies: + '@types/ms': 2.1.0 + + '@types/ed2curve@0.2.4': + dependencies: + tweetnacl: 1.0.3 + + '@types/estree@1.0.8': {} + + '@types/hdkey@2.1.0': + dependencies: + '@types/node': 24.1.0 + + '@types/istanbul-lib-coverage@2.0.6': {} + + '@types/istanbul-lib-report@3.0.3': + dependencies: + '@types/istanbul-lib-coverage': 2.0.6 + + '@types/istanbul-reports@3.0.4': + dependencies: + '@types/istanbul-lib-report': 3.0.3 + + '@types/jest@30.0.0': + dependencies: + expect: 30.0.4 + pretty-format: 30.0.2 + + '@types/json-schema@7.0.15': {} + + '@types/long@3.0.32': {} + + '@types/mdast@4.0.4': + dependencies: + '@types/unist': 3.0.3 + + '@types/ms@2.1.0': {} + + '@types/node@11.11.6': {} + + '@types/node@24.1.0': dependencies: - '@eslint-community/regexpp': 4.9.1 - '@typescript-eslint/parser': 5.62.0(eslint@8.54.0)(typescript@5.1.6) - '@typescript-eslint/scope-manager': 5.62.0 - '@typescript-eslint/type-utils': 5.62.0(eslint@8.53.0)(typescript@5.1.6) - '@typescript-eslint/utils': 5.62.0(eslint@8.53.0)(typescript@5.1.6) - debug: 4.3.4 - eslint: 8.53.0 + undici-types: 7.8.0 + + '@types/pbkdf2@3.1.2': + dependencies: + '@types/node': 24.1.0 + + '@types/secp256k1@4.0.6': + dependencies: + '@types/node': 24.1.0 + + '@types/stack-utils@2.0.3': {} + + '@types/unist@3.0.3': {} + + '@types/yargs-parser@21.0.3': {} + + '@types/yargs@17.0.33': + dependencies: + '@types/yargs-parser': 21.0.3 + + '@typescript-eslint/eslint-plugin@8.38.0(@typescript-eslint/parser@8.38.0(eslint@9.32.0(jiti@2.4.2))(typescript@5.8.3))(eslint@9.32.0(jiti@2.4.2))(typescript@5.8.3)': + dependencies: + '@eslint-community/regexpp': 4.12.1 + '@typescript-eslint/parser': 8.38.0(eslint@9.32.0(jiti@2.4.2))(typescript@5.8.3) + '@typescript-eslint/scope-manager': 8.38.0 + '@typescript-eslint/type-utils': 8.38.0(eslint@9.32.0(jiti@2.4.2))(typescript@5.8.3) + '@typescript-eslint/utils': 8.38.0(eslint@9.32.0(jiti@2.4.2))(typescript@5.8.3) + '@typescript-eslint/visitor-keys': 8.38.0 + eslint: 9.32.0(jiti@2.4.2) graphemer: 1.4.0 - ignore: 5.2.4 - natural-compare-lite: 1.4.0 - semver: 7.5.4 - tsutils: 3.21.0(typescript@5.1.6) - typescript: 5.1.6 + ignore: 7.0.5 + natural-compare: 1.4.0 + ts-api-utils: 2.1.0(typescript@5.8.3) + typescript: 5.8.3 transitivePeerDependencies: - supports-color - dev: true - /@typescript-eslint/parser@5.62.0(eslint@8.54.0)(typescript@5.1.6): - resolution: {integrity: sha512-VlJEV0fOQ7BExOsHYAGrgbEiZoi8D+Bl2+f6V2RrXerRSylnp+ZBHmPvaIa8cz0Ajx7WO7Z5RqfgYg7ED1nRhA==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - peerDependencies: - eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 - typescript: '*' - peerDependenciesMeta: - typescript: - optional: true + '@typescript-eslint/parser@8.38.0(eslint@9.32.0(jiti@2.4.2))(typescript@5.8.3)': dependencies: - '@typescript-eslint/scope-manager': 5.62.0 - '@typescript-eslint/types': 5.62.0 - '@typescript-eslint/typescript-estree': 5.62.0(typescript@5.1.6) - debug: 4.3.4 - eslint: 8.54.0 - typescript: 5.1.6 + '@typescript-eslint/scope-manager': 8.38.0 + '@typescript-eslint/types': 8.38.0 + '@typescript-eslint/typescript-estree': 8.38.0(typescript@5.8.3) + '@typescript-eslint/visitor-keys': 8.38.0 + debug: 4.4.1 + eslint: 9.32.0(jiti@2.4.2) + typescript: 5.8.3 transitivePeerDependencies: - supports-color - dev: true - /@typescript-eslint/scope-manager@5.62.0: - resolution: {integrity: sha512-VXuvVvZeQCQb5Zgf4HAxc04q5j+WrNAtNh9OwCsCgpKqESMTu3tF/jhZ3xG6T4NZwWl65Bg8KuS2uEvhSfLl0w==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + '@typescript-eslint/project-service@8.37.0(typescript@5.8.3)': dependencies: - '@typescript-eslint/types': 5.62.0 - '@typescript-eslint/visitor-keys': 5.62.0 - dev: true + '@typescript-eslint/tsconfig-utils': 8.37.0(typescript@5.8.3) + '@typescript-eslint/types': 8.37.0 + debug: 4.4.1 + typescript: 5.8.3 + transitivePeerDependencies: + - supports-color - /@typescript-eslint/scope-manager@7.11.0: - resolution: {integrity: sha512-27tGdVEiutD4POirLZX4YzT180vevUURJl4wJGmm6TrQoiYwuxTIY98PBp6L2oN+JQxzE0URvYlzJaBHIekXAw==} - engines: {node: ^18.18.0 || >=20.0.0} + '@typescript-eslint/project-service@8.38.0(typescript@5.8.3)': dependencies: - '@typescript-eslint/types': 7.11.0 - '@typescript-eslint/visitor-keys': 7.11.0 - dev: true + '@typescript-eslint/tsconfig-utils': 8.38.0(typescript@5.8.3) + '@typescript-eslint/types': 8.38.0 + debug: 4.4.1 + typescript: 5.8.3 + transitivePeerDependencies: + - supports-color - /@typescript-eslint/type-utils@5.62.0(eslint@8.53.0)(typescript@5.1.6): - resolution: {integrity: sha512-xsSQreu+VnfbqQpW5vnCJdq1Z3Q0U31qiWmRhr98ONQmcp/yhiPJFPq8MXiJVLiksmOKSjIldZzkebzHuCGzew==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - peerDependencies: - eslint: '*' - typescript: '*' - peerDependenciesMeta: - typescript: - optional: true + '@typescript-eslint/scope-manager@8.37.0': + dependencies: + '@typescript-eslint/types': 8.37.0 + '@typescript-eslint/visitor-keys': 8.37.0 + + '@typescript-eslint/scope-manager@8.38.0': + dependencies: + '@typescript-eslint/types': 8.38.0 + '@typescript-eslint/visitor-keys': 8.38.0 + + '@typescript-eslint/tsconfig-utils@8.37.0(typescript@5.8.3)': + dependencies: + typescript: 5.8.3 + + '@typescript-eslint/tsconfig-utils@8.38.0(typescript@5.8.3)': + dependencies: + typescript: 5.8.3 + + '@typescript-eslint/type-utils@8.38.0(eslint@9.32.0(jiti@2.4.2))(typescript@5.8.3)': dependencies: - '@typescript-eslint/typescript-estree': 5.62.0(typescript@5.1.6) - '@typescript-eslint/utils': 5.62.0(eslint@8.53.0)(typescript@5.1.6) - debug: 4.3.4 - eslint: 8.53.0 - tsutils: 3.21.0(typescript@5.1.6) - typescript: 5.1.6 + '@typescript-eslint/types': 8.38.0 + '@typescript-eslint/typescript-estree': 8.38.0(typescript@5.8.3) + '@typescript-eslint/utils': 8.38.0(eslint@9.32.0(jiti@2.4.2))(typescript@5.8.3) + debug: 4.4.1 + eslint: 9.32.0(jiti@2.4.2) + ts-api-utils: 2.1.0(typescript@5.8.3) + typescript: 5.8.3 transitivePeerDependencies: - supports-color - dev: true - /@typescript-eslint/types@5.62.0: - resolution: {integrity: sha512-87NVngcbVXUahrRTqIK27gD2t5Cu1yuCXxbLcFtCzZGlfyVWWh8mLHkoxzjsB6DDNnvdL+fW8MiwPEJyGJQDgQ==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - dev: true + '@typescript-eslint/types@8.37.0': {} - /@typescript-eslint/types@7.11.0: - resolution: {integrity: sha512-MPEsDRZTyCiXkD4vd3zywDCifi7tatc4K37KqTprCvaXptP7Xlpdw0NR2hRJTetG5TxbWDB79Ys4kLmHliEo/w==} - engines: {node: ^18.18.0 || >=20.0.0} - dev: true + '@typescript-eslint/types@8.38.0': {} - /@typescript-eslint/typescript-estree@5.62.0(typescript@5.1.6): - resolution: {integrity: sha512-CmcQ6uY7b9y694lKdRB8FEel7JbU/40iSAPomu++SjLMntB+2Leay2LO6i8VnJk58MtE9/nQSFIH6jpyRWyYzA==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - peerDependencies: - typescript: '*' - peerDependenciesMeta: - typescript: - optional: true + '@typescript-eslint/typescript-estree@8.37.0(typescript@5.8.3)': dependencies: - '@typescript-eslint/types': 5.62.0 - '@typescript-eslint/visitor-keys': 5.62.0 - debug: 4.3.4 - globby: 11.1.0 + '@typescript-eslint/project-service': 8.37.0(typescript@5.8.3) + '@typescript-eslint/tsconfig-utils': 8.37.0(typescript@5.8.3) + '@typescript-eslint/types': 8.37.0 + '@typescript-eslint/visitor-keys': 8.37.0 + debug: 4.4.1 + fast-glob: 3.3.3 is-glob: 4.0.3 - semver: 7.5.4 - tsutils: 3.21.0(typescript@5.1.6) - typescript: 5.1.6 + minimatch: 9.0.5 + semver: 7.7.2 + ts-api-utils: 2.1.0(typescript@5.8.3) + typescript: 5.8.3 transitivePeerDependencies: - supports-color - dev: true - /@typescript-eslint/typescript-estree@7.11.0(typescript@5.1.6): - resolution: {integrity: sha512-cxkhZ2C/iyi3/6U9EPc5y+a6csqHItndvN/CzbNXTNrsC3/ASoYQZEt9uMaEp+xFNjasqQyszp5TumAVKKvJeQ==} - engines: {node: ^18.18.0 || >=20.0.0} - peerDependencies: - typescript: '*' - peerDependenciesMeta: - typescript: - optional: true + '@typescript-eslint/typescript-estree@8.38.0(typescript@5.8.3)': dependencies: - '@typescript-eslint/types': 7.11.0 - '@typescript-eslint/visitor-keys': 7.11.0 - debug: 4.3.4 - globby: 11.1.0 + '@typescript-eslint/project-service': 8.38.0(typescript@5.8.3) + '@typescript-eslint/tsconfig-utils': 8.38.0(typescript@5.8.3) + '@typescript-eslint/types': 8.38.0 + '@typescript-eslint/visitor-keys': 8.38.0 + debug: 4.4.1 + fast-glob: 3.3.3 is-glob: 4.0.3 - minimatch: 9.0.4 - semver: 7.6.2 - ts-api-utils: 1.3.0(typescript@5.1.6) - typescript: 5.1.6 + minimatch: 9.0.5 + semver: 7.7.2 + ts-api-utils: 2.1.0(typescript@5.8.3) + typescript: 5.8.3 transitivePeerDependencies: - supports-color - dev: true - /@typescript-eslint/utils@5.62.0(eslint@8.53.0)(typescript@5.1.6): - resolution: {integrity: sha512-n8oxjeb5aIbPFEtmQxQYOLI0i9n5ySBEY/ZEHHZqKQSFnxio1rv6dthascc9dLuwrL0RC5mPCxB7vnAVGAYWAQ==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - peerDependencies: - eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 - dependencies: - '@eslint-community/eslint-utils': 4.4.0(eslint@8.53.0) - '@types/json-schema': 7.0.13 - '@types/semver': 7.5.3 - '@typescript-eslint/scope-manager': 5.62.0 - '@typescript-eslint/types': 5.62.0 - '@typescript-eslint/typescript-estree': 5.62.0(typescript@5.1.6) - eslint: 8.53.0 - eslint-scope: 5.1.1 - semver: 7.5.4 + '@typescript-eslint/utils@8.37.0(eslint@9.32.0(jiti@2.4.2))(typescript@5.8.3)': + dependencies: + '@eslint-community/eslint-utils': 4.7.0(eslint@9.32.0(jiti@2.4.2)) + '@typescript-eslint/scope-manager': 8.37.0 + '@typescript-eslint/types': 8.37.0 + '@typescript-eslint/typescript-estree': 8.37.0(typescript@5.8.3) + eslint: 9.32.0(jiti@2.4.2) + typescript: 5.8.3 transitivePeerDependencies: - supports-color - - typescript - dev: true - /@typescript-eslint/utils@7.11.0(eslint@8.54.0)(typescript@5.1.6): - resolution: {integrity: sha512-xlAWwPleNRHwF37AhrZurOxA1wyXowW4PqVXZVUNCLjB48CqdPJoJWkrpH2nij9Q3Lb7rtWindtoXwxjxlKKCA==} - engines: {node: ^18.18.0 || >=20.0.0} - peerDependencies: - eslint: ^8.56.0 + '@typescript-eslint/utils@8.38.0(eslint@9.32.0(jiti@2.4.2))(typescript@5.8.3)': dependencies: - '@eslint-community/eslint-utils': 4.4.0(eslint@8.54.0) - '@typescript-eslint/scope-manager': 7.11.0 - '@typescript-eslint/types': 7.11.0 - '@typescript-eslint/typescript-estree': 7.11.0(typescript@5.1.6) - eslint: 8.54.0 + '@eslint-community/eslint-utils': 4.7.0(eslint@9.32.0(jiti@2.4.2)) + '@typescript-eslint/scope-manager': 8.38.0 + '@typescript-eslint/types': 8.38.0 + '@typescript-eslint/typescript-estree': 8.38.0(typescript@5.8.3) + eslint: 9.32.0(jiti@2.4.2) + typescript: 5.8.3 transitivePeerDependencies: - supports-color - - typescript - dev: true - /@typescript-eslint/visitor-keys@5.62.0: - resolution: {integrity: sha512-07ny+LHRzQXepkGg6w0mFY41fVUNBrL2Roj/++7V1txKugfjm/Ci/qSND03r2RhlJhJYMcTn9AhhSSqQp0Ysyw==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + '@typescript-eslint/visitor-keys@8.37.0': dependencies: - '@typescript-eslint/types': 5.62.0 - eslint-visitor-keys: 3.4.3 - dev: true + '@typescript-eslint/types': 8.37.0 + eslint-visitor-keys: 4.2.1 - /@typescript-eslint/visitor-keys@7.11.0: - resolution: {integrity: sha512-7syYk4MzjxTEk0g/w3iqtgxnFQspDJfn6QKD36xMuuhTzjcxY7F8EmBLnALjVyaOF1/bVocu3bS/2/F7rXrveQ==} - engines: {node: ^18.18.0 || >=20.0.0} + '@typescript-eslint/visitor-keys@8.38.0': dependencies: - '@typescript-eslint/types': 7.11.0 - eslint-visitor-keys: 3.4.3 - dev: true + '@typescript-eslint/types': 8.38.0 + eslint-visitor-keys: 4.2.1 - /@ungap/structured-clone@1.2.0: - resolution: {integrity: sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==} - dev: true + '@ungap/structured-clone@1.3.0': {} - /JSONStream@1.3.5: - resolution: {integrity: sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ==} - hasBin: true + '@unrs/resolver-binding-android-arm-eabi@1.11.1': + optional: true + + '@unrs/resolver-binding-android-arm64@1.11.1': + optional: true + + '@unrs/resolver-binding-darwin-arm64@1.11.1': + optional: true + + '@unrs/resolver-binding-darwin-x64@1.11.1': + optional: true + + '@unrs/resolver-binding-freebsd-x64@1.11.1': + optional: true + + '@unrs/resolver-binding-linux-arm-gnueabihf@1.11.1': + optional: true + + '@unrs/resolver-binding-linux-arm-musleabihf@1.11.1': + optional: true + + '@unrs/resolver-binding-linux-arm64-gnu@1.11.1': + optional: true + + '@unrs/resolver-binding-linux-arm64-musl@1.11.1': + optional: true + + '@unrs/resolver-binding-linux-ppc64-gnu@1.11.1': + optional: true + + '@unrs/resolver-binding-linux-riscv64-gnu@1.11.1': + optional: true + + '@unrs/resolver-binding-linux-riscv64-musl@1.11.1': + optional: true + + '@unrs/resolver-binding-linux-s390x-gnu@1.11.1': + optional: true + + '@unrs/resolver-binding-linux-x64-gnu@1.11.1': + optional: true + + '@unrs/resolver-binding-linux-x64-musl@1.11.1': + optional: true + + '@unrs/resolver-binding-wasm32-wasi@1.11.1': + dependencies: + '@napi-rs/wasm-runtime': 0.2.12 + optional: true + + '@unrs/resolver-binding-win32-arm64-msvc@1.11.1': + optional: true + + '@unrs/resolver-binding-win32-ia32-msvc@1.11.1': + optional: true + + '@unrs/resolver-binding-win32-x64-msvc@1.11.1': + optional: true + + JSONStream@1.3.5: dependencies: jsonparse: 1.3.1 through: 2.3.8 - dev: true - /acorn-jsx@5.3.2(acorn@8.10.0): - resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} - peerDependencies: - acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 + acorn-jsx@5.3.2(acorn@8.15.0): dependencies: - acorn: 8.10.0 - dev: true + acorn: 8.15.0 - /acorn@8.10.0: - resolution: {integrity: sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw==} - engines: {node: '>=0.4.0'} - hasBin: true - dev: true + acorn@8.15.0: {} - /ajv@6.12.6: - resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==} + ajv@6.12.6: dependencies: fast-deep-equal: 3.1.3 fast-json-stable-stringify: 2.1.0 json-schema-traverse: 0.4.1 uri-js: 4.4.1 - dev: true - /ajv@8.12.0: - resolution: {integrity: sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==} + ajv@8.17.1: dependencies: fast-deep-equal: 3.1.3 + fast-uri: 3.0.6 json-schema-traverse: 1.0.0 require-from-string: 2.0.2 - uri-js: 4.4.1 - dev: true - /ansi-escapes@4.3.2: - resolution: {integrity: sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==} - engines: {node: '>=8'} + ansi-escapes@4.3.2: dependencies: type-fest: 0.21.3 - dev: true - /ansi-regex@5.0.1: - resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} - engines: {node: '>=8'} - dev: true + ansi-regex@5.0.1: {} - /ansi-styles@3.2.1: - resolution: {integrity: sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==} - engines: {node: '>=4'} - dependencies: - color-convert: 1.9.3 - dev: true + ansi-regex@6.1.0: {} - /ansi-styles@4.3.0: - resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} - engines: {node: '>=8'} + ansi-styles@4.3.0: dependencies: color-convert: 2.0.1 - dev: true - /ansi-styles@5.2.0: - resolution: {integrity: sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==} - engines: {node: '>=10'} - dev: true + ansi-styles@5.2.0: {} - /anymatch@3.1.3: - resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==} - engines: {node: '>= 8'} + ansi-styles@6.2.1: {} + + anymatch@3.1.3: dependencies: normalize-path: 3.0.0 picomatch: 2.3.1 - dev: true - /argparse@1.0.10: - resolution: {integrity: sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==} + argparse@1.0.10: dependencies: sprintf-js: 1.0.3 - dev: true - /argparse@2.0.1: - resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} - dev: true + argparse@2.0.1: {} - /array-ify@1.0.0: - resolution: {integrity: sha512-c5AMf34bKdvPhQ7tBGhqkgKNUzMr4WUs+WDtC2ZUGOUncbxKMTvqxYctiseW3+L4bA8ec+GcZ6/A/FW4m8ukng==} - dev: true + array-ify@1.0.0: {} - /array-union@2.1.0: - resolution: {integrity: sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==} - engines: {node: '>=8'} - dev: true + async@3.2.6: {} - /arrify@1.0.1: - resolution: {integrity: sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA==} - engines: {node: '>=0.10.0'} - dev: true + asynckit@0.4.0: {} - /asynckit@0.4.0: - resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==} - dev: false + available-typed-arrays@1.0.7: + dependencies: + possible-typed-array-names: 1.1.0 - /axios@1.7.2: - resolution: {integrity: sha512-2A8QhOMrbomlDuiLeK9XibIBzuHeRcqqNOHp0Cyp5EoJ1IFDh+XZH3A6BkXtv0K4gFGCI0Y4BM7B1wOEi0Rmgw==} + axios@1.11.0: dependencies: - follow-redirects: 1.15.6 - form-data: 4.0.0 + follow-redirects: 1.15.9 + form-data: 4.0.4 proxy-from-env: 1.1.0 transitivePeerDependencies: - debug - dev: false - /babel-jest@29.7.0(@babel/core@7.23.0): - resolution: {integrity: sha512-BrvGY3xZSwEcCzKvKsCi2GgHqDqsYkOP4/by5xCgIwGXQxIEh+8ew3gmrE1y7XRR6LHZIj6yLYnUi/mm2KXKBg==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - peerDependencies: - '@babel/core': ^7.8.0 + babel-jest@30.0.5(@babel/core@7.28.0): dependencies: - '@babel/core': 7.23.0 - '@jest/transform': 29.7.0 - '@types/babel__core': 7.20.2 - babel-plugin-istanbul: 6.1.1 - babel-preset-jest: 29.6.3(@babel/core@7.23.0) + '@babel/core': 7.28.0 + '@jest/transform': 30.0.5 + '@types/babel__core': 7.20.5 + babel-plugin-istanbul: 7.0.0 + babel-preset-jest: 30.0.1(@babel/core@7.28.0) chalk: 4.1.2 graceful-fs: 4.2.11 slash: 3.0.0 transitivePeerDependencies: - supports-color - dev: true - /babel-plugin-istanbul@6.1.1: - resolution: {integrity: sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==} - engines: {node: '>=8'} + babel-plugin-istanbul@7.0.0: dependencies: - '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-plugin-utils': 7.27.1 '@istanbuljs/load-nyc-config': 1.1.0 '@istanbuljs/schema': 0.1.3 - istanbul-lib-instrument: 5.2.1 + istanbul-lib-instrument: 6.0.3 test-exclude: 6.0.0 transitivePeerDependencies: - supports-color - dev: true - /babel-plugin-jest-hoist@29.6.3: - resolution: {integrity: sha512-ESAc/RJvGTFEzRwOTT4+lNDk/GNHMkKbNzsvT0qKRfDyyYTskxB5rnU2njIDYVxXCBHHEI1c0YwHob3WaYujOg==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + babel-plugin-jest-hoist@30.0.1: dependencies: - '@babel/template': 7.22.15 - '@babel/types': 7.23.0 - '@types/babel__core': 7.20.2 - '@types/babel__traverse': 7.20.2 - dev: true + '@babel/template': 7.27.2 + '@babel/types': 7.28.1 + '@types/babel__core': 7.20.5 - /babel-preset-current-node-syntax@1.0.1(@babel/core@7.23.0): - resolution: {integrity: sha512-M7LQ0bxarkxQoN+vz5aJPsLBn77n8QgTFmo8WK0/44auK2xlCXrYcUxHFxgU7qW5Yzw/CjmLRK2uJzaCd7LvqQ==} - peerDependencies: - '@babel/core': ^7.0.0 + babel-preset-current-node-syntax@1.1.0(@babel/core@7.28.0): dependencies: - '@babel/core': 7.23.0 - '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.23.0) - '@babel/plugin-syntax-bigint': 7.8.3(@babel/core@7.23.0) - '@babel/plugin-syntax-class-properties': 7.12.13(@babel/core@7.23.0) - '@babel/plugin-syntax-import-meta': 7.10.4(@babel/core@7.23.0) - '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.23.0) - '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.23.0) - '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.23.0) - '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.23.0) - '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.23.0) - '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.23.0) - '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.23.0) - '@babel/plugin-syntax-top-level-await': 7.14.5(@babel/core@7.23.0) - dev: true - - /babel-preset-jest@29.6.3(@babel/core@7.23.0): - resolution: {integrity: sha512-0B3bhxR6snWXJZtR/RliHTDPRgn1sNHOR0yVtq/IiQFyuOVjFS+wuio/R4gSNkyYmKmJB4wGZv2NZanmKmTnNA==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - peerDependencies: - '@babel/core': ^7.0.0 + '@babel/core': 7.28.0 + '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.28.0) + '@babel/plugin-syntax-bigint': 7.8.3(@babel/core@7.28.0) + '@babel/plugin-syntax-class-properties': 7.12.13(@babel/core@7.28.0) + '@babel/plugin-syntax-class-static-block': 7.14.5(@babel/core@7.28.0) + '@babel/plugin-syntax-import-attributes': 7.27.1(@babel/core@7.28.0) + '@babel/plugin-syntax-import-meta': 7.10.4(@babel/core@7.28.0) + '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.28.0) + '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.28.0) + '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.28.0) + '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.28.0) + '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.28.0) + '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.28.0) + '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.28.0) + '@babel/plugin-syntax-private-property-in-object': 7.14.5(@babel/core@7.28.0) + '@babel/plugin-syntax-top-level-await': 7.14.5(@babel/core@7.28.0) + + babel-preset-jest@30.0.1(@babel/core@7.28.0): dependencies: - '@babel/core': 7.23.0 - babel-plugin-jest-hoist: 29.6.3 - babel-preset-current-node-syntax: 1.0.1(@babel/core@7.23.0) - dev: true + '@babel/core': 7.28.0 + babel-plugin-jest-hoist: 30.0.1 + babel-preset-current-node-syntax: 1.1.0(@babel/core@7.28.0) - /balanced-match@1.0.2: - resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} - dev: true + balanced-match@1.0.2: {} - /base-x@3.0.9: - resolution: {integrity: sha512-H7JU6iBHTal1gp56aKoaa//YUxEaAOUiydvrV/pILqIHXTtqxSkATOnDA2u+jZ/61sD+L/412+7kzXRtWukhpQ==} + base-x@3.0.11: dependencies: safe-buffer: 5.2.1 - dev: false - /base-x@4.0.0: - resolution: {integrity: sha512-FuwxlW4H5kh37X/oW59pwTzzTKRzfrrQwhmyspRM7swOEZcHtDZSCt45U6oKgtuFE+WYPblePMVIPR4RZrh/hw==} - dev: false + base-x@4.0.1: {} - /bech32@2.0.0: - resolution: {integrity: sha512-LcknSilhIGatDAsY1ak2I8VtGaHNhgMSYVxFrGLXv+xLHytaKZKcaUJJUE7qmBr7h33o5YQwP55pMI0xmkpJwg==} - dev: false + base-x@5.0.1: {} - /bignumber.js@9.1.2: - resolution: {integrity: sha512-2/mKyZH9K85bzOEfhXDBFZTGd1CTs+5IHpeFQo9luiBG7hghdC851Pj2WAhb6E3R6b9tZj/XKhbg4fum+Kepug==} - dev: false + bech32@2.0.0: {} - /bip174@2.1.1: - resolution: {integrity: sha512-mdFV5+/v0XyNYXjBS6CQPLo9ekCx4gtKZFnJm5PMto7Fs9hTTDpkkzOB7/FtluRI6JbUUAu+snTYfJRgHLZbZQ==} - engines: {node: '>=8.0.0'} - dev: false + bignumber.js@9.3.1: {} - /bip39@3.0.3: - resolution: {integrity: sha512-P0dKrz4g0V0BjXfx7d9QNkJ/Txcz/k+hM9TnjqjUaXtuOfAvxXSw2rJw8DX0e3ZPwnK/IgDxoRqf0bvoVCqbMg==} + bip174@2.1.1: {} + + bip39@3.0.3: dependencies: '@types/node': 11.11.6 create-hash: 1.2.0 - pbkdf2: 3.1.2 + pbkdf2: 3.1.3 randombytes: 2.1.0 - dev: false - /bip39@3.1.0: - resolution: {integrity: sha512-c9kiwdk45Do5GL0vJMe7tS95VjCii65mYAH7DfWl3uW8AVzXKQVUm64i3hzVybBDMp9r7j9iNxR85+ul8MdN/A==} + bip39@3.1.0: dependencies: - '@noble/hashes': 1.3.2 - dev: false + '@noble/hashes': 1.8.0 - /bitcoinjs-lib@6.1.5: - resolution: {integrity: sha512-yuf6xs9QX/E8LWE2aMJPNd0IxGofwfuVOiYdNUESkc+2bHHVKjhJd8qewqapeoolh9fihzHGoDCB5Vkr57RZCQ==} - engines: {node: '>=8.0.0'} + bitcoinjs-lib@6.1.7: dependencies: - '@noble/hashes': 1.3.2 + '@noble/hashes': 1.8.0 bech32: 2.0.0 bip174: 2.1.1 bs58check: 3.0.1 typeforce: 1.18.0 varuint-bitcoin: 1.1.2 - dev: false - /blakejs@1.2.1: - resolution: {integrity: sha512-QXUSXI3QVc/gJME0dBpXrag1kbzOqCjCX8/b54ntNyW6sjtoqxqRk3LTmXzaJoh71zMsDCjM+47jS7XiwN/+fQ==} - dev: false + blakejs@1.2.1: {} - /bn.js@4.12.0: - resolution: {integrity: sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==} - dev: false + bn.js@4.12.2: {} - /bn.js@5.2.1: - resolution: {integrity: sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==} - dev: false + bn.js@5.2.2: {} - /brace-expansion@1.1.11: - resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} + brace-expansion@1.1.12: dependencies: balanced-match: 1.0.2 concat-map: 0.0.1 - dev: true - /brace-expansion@2.0.1: - resolution: {integrity: sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==} + brace-expansion@2.0.2: dependencies: balanced-match: 1.0.2 - dev: true - /braces@3.0.2: - resolution: {integrity: sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==} - engines: {node: '>=8'} + braces@3.0.3: dependencies: - fill-range: 7.0.1 - dev: true + fill-range: 7.1.1 - /brorand@1.1.0: - resolution: {integrity: sha512-cKV8tMCEpQs4hK/ik71d6LrPOnpkpGBR0wzxqr68g2m/LB2GxVYQroAjMJZRVM1Y4BCjCKc3vAamxSzOY2RP+w==} - dev: false + brorand@1.1.0: {} - /browserify-aes@1.2.0: - resolution: {integrity: sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==} + browserify-aes@1.2.0: dependencies: buffer-xor: 1.0.3 - cipher-base: 1.0.4 + cipher-base: 1.0.6 create-hash: 1.2.0 evp_bytestokey: 1.0.3 inherits: 2.0.4 safe-buffer: 5.2.1 - dev: false - /browserslist@4.22.1: - resolution: {integrity: sha512-FEVc202+2iuClEhZhrWy6ZiAcRLvNMyYcxZ8raemul1DYVOVdFsbqckWLdsixQZCpJlwe77Z3UTalE7jsjnKfQ==} - engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} - hasBin: true + browserslist@4.25.1: dependencies: - caniuse-lite: 1.0.30001542 - electron-to-chromium: 1.4.537 - node-releases: 2.0.13 - update-browserslist-db: 1.0.13(browserslist@4.22.1) - dev: true + caniuse-lite: 1.0.30001727 + electron-to-chromium: 1.5.186 + node-releases: 2.0.19 + update-browserslist-db: 1.1.3(browserslist@4.25.1) - /bs-logger@0.2.6: - resolution: {integrity: sha512-pd8DCoxmbgc7hyPKOvxtqNcjYoOsABPQdcCUjGp3d42VR2CX1ORhk2A87oqqu5R1kk+76nsxZupkmyd+MVtCog==} - engines: {node: '>= 6'} + bs-logger@0.2.6: dependencies: fast-json-stable-stringify: 2.1.0 - dev: true - /bs58@4.0.1: - resolution: {integrity: sha512-Ok3Wdf5vOIlBrgCvTq96gBkJw+JUEzdBgyaza5HLtPm7yTHkjRy8+JzNyHF7BHa0bNWOQIp3m5YF0nnFcOIKLw==} + bs58@4.0.1: dependencies: - base-x: 3.0.9 - dev: false + base-x: 3.0.11 - /bs58@5.0.0: - resolution: {integrity: sha512-r+ihvQJvahgYT50JD05dyJNKlmmSlMoOGwn1lCcEzanPglg7TxYjioQUYehQ9mAR/+hOSd2jRc/Z2y5UxBymvQ==} + bs58@5.0.0: dependencies: - base-x: 4.0.0 - dev: false + base-x: 4.0.1 - /bs58check@2.1.2: - resolution: {integrity: sha512-0TS1jicxdU09dwJMNZtVAfzPi6Q6QeN0pM1Fkzrjn+XYHvzMKPU3pHVpva+769iNVSfIYWf7LJ6WR+BuuMf8cA==} + bs58@6.0.0: + dependencies: + base-x: 5.0.1 + + bs58check@2.1.2: dependencies: bs58: 4.0.1 create-hash: 1.2.0 safe-buffer: 5.2.1 - dev: false - /bs58check@3.0.1: - resolution: {integrity: sha512-hjuuJvoWEybo7Hn/0xOrczQKKEKD63WguEjlhLExYs2wUBcebDC1jDNK17eEAD2lYfw82d5ASC1d7K3SWszjaQ==} + bs58check@3.0.1: dependencies: - '@noble/hashes': 1.3.2 + '@noble/hashes': 1.8.0 bs58: 5.0.0 - dev: false - /bser@2.1.1: - resolution: {integrity: sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==} + bs58check@4.0.0: + dependencies: + '@noble/hashes': 1.8.0 + bs58: 6.0.0 + + bser@2.1.1: dependencies: node-int64: 0.4.0 - dev: true - /buffer-from@1.1.2: - resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==} - dev: true + buffer-from@1.1.2: {} - /buffer-reverse@1.0.1: - resolution: {integrity: sha512-M87YIUBsZ6N924W57vDwT/aOu8hw7ZgdByz6ijksLjmHJELBASmYTTlNHRgjE+pTsT9oJXGaDSgqqwfdHotDUg==} - dev: false + buffer-reverse@1.0.1: {} - /buffer-xor@1.0.3: - resolution: {integrity: sha512-571s0T7nZWK6vB67HI5dyUF7wXiNcfaPPPTl6zYCNApANjIvYJTg7hlud/+cJpdAhS7dVzqMLmfhfHR3rAcOjQ==} - dev: false + buffer-xor@1.0.3: {} - /bytebuffer@5.0.1: - resolution: {integrity: sha512-IuzSdmADppkZ6DlpycMkm8l9zeEq16fWtLvunEwFiYciR/BHo4E8/xs5piFquG+Za8OWmMqHF8zuRviz2LHvRQ==} - engines: {node: '>=0.8'} + bytebuffer@5.0.1: dependencies: long: 3.2.0 - dev: false - /callsites@3.1.0: - resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} - engines: {node: '>=6'} - dev: true + call-bind-apply-helpers@1.0.2: + dependencies: + es-errors: 1.3.0 + function-bind: 1.1.2 - /camelcase-keys@6.2.2: - resolution: {integrity: sha512-YrwaA0vEKazPBkn0ipTiMpSajYDSe+KjQfrjhcBMxJt/znbvlHd8Pw/Vamaz5EB4Wfhs3SUR3Z9mwRu/P3s3Yg==} - engines: {node: '>=8'} + call-bind@1.0.8: dependencies: - camelcase: 5.3.1 - map-obj: 4.3.0 - quick-lru: 4.0.1 - dev: true + call-bind-apply-helpers: 1.0.2 + es-define-property: 1.0.1 + get-intrinsic: 1.3.0 + set-function-length: 1.2.2 - /camelcase@5.3.1: - resolution: {integrity: sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==} - engines: {node: '>=6'} - dev: true + call-bound@1.0.4: + dependencies: + call-bind-apply-helpers: 1.0.2 + get-intrinsic: 1.3.0 - /camelcase@6.3.0: - resolution: {integrity: sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==} - engines: {node: '>=10'} - dev: true + callsites@3.1.0: {} - /caniuse-lite@1.0.30001542: - resolution: {integrity: sha512-UrtAXVcj1mvPBFQ4sKd38daP8dEcXXr5sQe6QNNinaPd0iA/cxg9/l3VrSdL73jgw5sKyuQ6jNgiKO12W3SsVA==} - dev: true + camelcase@5.3.1: {} - /chalk@2.4.2: - resolution: {integrity: sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==} - engines: {node: '>=4'} - dependencies: - ansi-styles: 3.2.1 - escape-string-regexp: 1.0.5 - supports-color: 5.5.0 - dev: true + camelcase@6.3.0: {} - /chalk@4.1.2: - resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} - engines: {node: '>=10'} + caniuse-lite@1.0.30001727: {} + + ccount@2.0.1: {} + + chalk@4.1.2: dependencies: ansi-styles: 4.3.0 supports-color: 7.2.0 - dev: true - /chalk@5.3.0: - resolution: {integrity: sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==} - engines: {node: ^12.17.0 || ^14.13 || >=16.0.0} - dev: true + chalk@5.4.1: {} - /char-regex@1.0.2: - resolution: {integrity: sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==} - engines: {node: '>=10'} - dev: true + char-regex@1.0.2: {} - /chardet@0.7.0: - resolution: {integrity: sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==} - dev: true + character-entities@2.0.2: {} - /chloride-test@1.2.4: - resolution: {integrity: sha512-9vhoi1qXSBPn6//ZxIgSe3M2QhKHzIPZQzmrZgmPADsqW0Jxpe3db1e7aGSRUMXbxAQ04SfypdT8dGaSvIvKDw==} + chloride-test@1.2.4: dependencies: json-buffer: 2.0.11 - dev: false - /ci-info@3.8.0: - resolution: {integrity: sha512-eXTggHWSooYhq49F2opQhuHWgzucfF2YgODK4e1566GQs5BIfP30B0oenwBJHfWxAs2fyPB1s7Mg949zLf61Yw==} - engines: {node: '>=8'} - dev: true + ci-info@4.3.0: {} - /cipher-base@1.0.4: - resolution: {integrity: sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==} + cipher-base@1.0.6: dependencies: inherits: 2.0.4 safe-buffer: 5.2.1 - dev: false - - /cjs-module-lexer@1.2.3: - resolution: {integrity: sha512-0TNiGstbQmCFwt4akjjBg5pLRTSyj/PkWQ1ZoO2zntmg9yLqSRxwEa4iCfQLGjqhiqBfOJa7W/E8wfGrTDmlZQ==} - dev: true - - /cli-cursor@3.1.0: - resolution: {integrity: sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==} - engines: {node: '>=8'} - dependencies: - restore-cursor: 3.1.0 - dev: true - /cli-width@3.0.0: - resolution: {integrity: sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw==} - engines: {node: '>= 10'} - dev: true + cjs-module-lexer@2.1.0: {} - /cliui@8.0.1: - resolution: {integrity: sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==} - engines: {node: '>=12'} + cliui@8.0.1: dependencies: string-width: 4.2.3 strip-ansi: 6.0.1 wrap-ansi: 7.0.0 - dev: true - /co@4.6.0: - resolution: {integrity: sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==} - engines: {iojs: '>= 1.0.0', node: '>= 0.12.0'} - dev: true + co@4.6.0: {} - /coininfo@5.2.1: - resolution: {integrity: sha512-mqSQIhAMgeiySzS0Ei33qno0oN/JQt9X3I6J1zx4eIYUnObGPuoLOrpssoqU84ZQoIpJGt3mQdEd2dL3sZJADw==} + coininfo@5.2.1: dependencies: safe-buffer: 5.2.1 - dev: false - - /collect-v8-coverage@1.0.2: - resolution: {integrity: sha512-lHl4d5/ONEbLlJvaJNtsF/Lz+WvB07u2ycqTYbdrq7UypDXailES4valYb2eWiJFxZlVmpGekfqoxQhzyFdT4Q==} - dev: true - /color-convert@1.9.3: - resolution: {integrity: sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==} - dependencies: - color-name: 1.1.3 - dev: true + collect-v8-coverage@1.0.2: {} - /color-convert@2.0.1: - resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} - engines: {node: '>=7.0.0'} + color-convert@2.0.1: dependencies: color-name: 1.1.4 - dev: true - /color-name@1.1.3: - resolution: {integrity: sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==} - dev: true - - /color-name@1.1.4: - resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} - dev: true + color-name@1.1.4: {} - /combined-stream@1.0.8: - resolution: {integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==} - engines: {node: '>= 0.8'} + combined-stream@1.0.8: dependencies: delayed-stream: 1.0.0 - dev: false - /compare-func@2.0.0: - resolution: {integrity: sha512-zHig5N+tPWARooBnb0Zx1MFcdfpyJrfTJ3Y5L+IFvUm8rM74hHz66z0gw0x4tijh5CorKkKUCnW82R2vmpeCRA==} + compare-func@2.0.0: dependencies: array-ify: 1.0.0 dot-prop: 5.3.0 - dev: true - /concat-map@0.0.1: - resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} - dev: true + concat-map@0.0.1: {} - /conventional-changelog-angular@7.0.0: - resolution: {integrity: sha512-ROjNchA9LgfNMTTFSIWPzebCwOGFdgkEq45EnvvrmSLvCtAw0HSmrCs7/ty+wAeYUZyNay0YMUNYFTRL72PkBQ==} - engines: {node: '>=16'} + conventional-changelog-angular@7.0.0: dependencies: compare-func: 2.0.0 - dev: true - /conventional-changelog-conventionalcommits@7.0.2: - resolution: {integrity: sha512-NKXYmMR/Hr1DevQegFB4MwfM5Vv0m4UIxKZTTYuD98lpTknaZlSRrDOG4X7wIXpGkfsYxZTghUN+Qq+T0YQI7w==} - engines: {node: '>=16'} + conventional-changelog-conventionalcommits@7.0.2: dependencies: compare-func: 2.0.0 - dev: true - /conventional-commits-parser@5.0.0: - resolution: {integrity: sha512-ZPMl0ZJbw74iS9LuX9YIAiW8pfM5p3yh2o/NbXHbkFuZzY5jvdi5jFycEOkmBW5H5I7nA+D6f3UcsCLP2vvSEA==} - engines: {node: '>=16'} - hasBin: true + conventional-commits-parser@5.0.0: dependencies: JSONStream: 1.3.5 is-text-path: 2.0.0 meow: 12.1.1 split2: 4.2.0 - dev: true - - /convert-source-map@1.9.0: - resolution: {integrity: sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==} - dev: true - /convert-source-map@2.0.0: - resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==} - dev: true + convert-source-map@2.0.0: {} - /cosmiconfig-typescript-loader@5.0.0(@types/node@20.12.13)(cosmiconfig@9.0.0)(typescript@5.1.6): - resolution: {integrity: sha512-+8cK7jRAReYkMwMiG+bxhcNKiHJDM6bR9FD/nGBXOWdMLuYawjF5cGrtLilJ+LGd3ZjCXnJjR5DkfWPoIVlqJA==} - engines: {node: '>=v16'} - peerDependencies: - '@types/node': '*' - cosmiconfig: '>=8.2' - typescript: '>=4' + cosmiconfig-typescript-loader@6.1.0(@types/node@24.1.0)(cosmiconfig@9.0.0(typescript@5.8.3))(typescript@5.8.3): dependencies: - '@types/node': 20.12.13 - cosmiconfig: 9.0.0(typescript@5.1.6) - jiti: 1.21.0 - typescript: 5.1.6 - dev: true + '@types/node': 24.1.0 + cosmiconfig: 9.0.0(typescript@5.8.3) + jiti: 2.4.2 + typescript: 5.8.3 - /cosmiconfig@9.0.0(typescript@5.1.6): - resolution: {integrity: sha512-itvL5h8RETACmOTFc4UfIyB2RfEHi71Ax6E/PivVxq9NseKbOWpeyHEOIbmAw1rs8Ak0VursQNww7lf7YtUwzg==} - engines: {node: '>=14'} - peerDependencies: - typescript: '>=4.9.5' - peerDependenciesMeta: - typescript: - optional: true + cosmiconfig@9.0.0(typescript@5.8.3): dependencies: env-paths: 2.2.1 - import-fresh: 3.3.0 + import-fresh: 3.3.1 js-yaml: 4.1.0 parse-json: 5.2.0 - typescript: 5.1.6 - dev: true + optionalDependencies: + typescript: 5.8.3 - /create-hash@1.2.0: - resolution: {integrity: sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==} + create-hash@1.1.3: dependencies: - cipher-base: 1.0.4 + cipher-base: 1.0.6 inherits: 2.0.4 - md5.js: 1.3.5 - ripemd160: 2.0.2 - sha.js: 2.4.11 - dev: false + ripemd160: 2.0.1 + sha.js: 2.4.12 - /create-hmac@1.1.7: - resolution: {integrity: sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==} + create-hash@1.2.0: dependencies: - cipher-base: 1.0.4 - create-hash: 1.2.0 + cipher-base: 1.0.6 inherits: 2.0.4 + md5.js: 1.3.5 ripemd160: 2.0.2 - safe-buffer: 5.2.1 - sha.js: 2.4.11 - dev: false + sha.js: 2.4.12 - /create-jest@29.7.0(@types/node@20.12.13): - resolution: {integrity: sha512-Adz2bdH0Vq3F53KEMJOoftQFutWCukm6J24wbPWRO4k1kMY7gS7ds/uoJkNuV8wDCtWWnuwGcJwpWcih+zEW1Q==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - hasBin: true + create-hmac@1.1.7: dependencies: - '@jest/types': 29.6.3 - chalk: 4.1.2 - exit: 0.1.2 - graceful-fs: 4.2.11 - jest-config: 29.7.0(@types/node@20.12.13) - jest-util: 29.7.0 - prompts: 2.4.2 - transitivePeerDependencies: - - '@types/node' - - babel-plugin-macros - - supports-color - - ts-node - dev: true + cipher-base: 1.0.6 + create-hash: 1.1.3 + inherits: 2.0.4 + ripemd160: 2.0.1 + safe-buffer: 5.2.1 + sha.js: 2.4.12 - /cross-spawn@7.0.3: - resolution: {integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==} - engines: {node: '>= 8'} + cross-spawn@7.0.6: dependencies: path-key: 3.1.1 shebang-command: 2.0.0 which: 2.0.2 - dev: true - /dargs@8.1.0: - resolution: {integrity: sha512-wAV9QHOsNbwnWdNW2FYvE1P56wtgSbM+3SZcdGiWQILwVjACCXDCI3Ai8QlCjMDB8YK5zySiXZYBiwGmNY3lnw==} - engines: {node: '>=12'} - dev: true + dargs@8.1.0: {} - /debug@4.3.4: - resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==} - engines: {node: '>=6.0'} - peerDependencies: - supports-color: '*' - peerDependenciesMeta: - supports-color: - optional: true + debug@4.3.7: dependencies: - ms: 2.1.2 + ms: 2.1.3 - /decamelize-keys@1.1.1: - resolution: {integrity: sha512-WiPxgEirIV0/eIOMcnFBA3/IJZAZqKnwAwWyvvdi4lsr1WCN22nhdf/3db3DoZcUjTV2SqfzIwNyp6y2xs3nmg==} - engines: {node: '>=0.10.0'} + debug@4.4.1: dependencies: - decamelize: 1.2.0 - map-obj: 1.0.1 - dev: true + ms: 2.1.3 - /decamelize@1.2.0: - resolution: {integrity: sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==} - engines: {node: '>=0.10.0'} - dev: true + decode-named-character-reference@1.2.0: + dependencies: + character-entities: 2.0.2 - /dedent@1.5.1: - resolution: {integrity: sha512-+LxW+KLWxu3HW3M2w2ympwtqPrqYRzU8fqi6Fhd18fBALe15blJPI/I4+UHveMVG6lJqB4JNd4UG0S5cnVHwIg==} - peerDependencies: - babel-plugin-macros: ^3.1.0 - peerDependenciesMeta: - babel-plugin-macros: - optional: true - dev: true + dedent@1.6.0: {} - /deep-is@0.1.4: - resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==} - dev: true + deep-is@0.1.4: {} - /deepmerge@4.3.1: - resolution: {integrity: sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==} - engines: {node: '>=0.10.0'} - dev: true + deepmerge@4.3.1: {} - /delayed-stream@1.0.0: - resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==} - engines: {node: '>=0.4.0'} - dev: false + define-data-property@1.1.4: + dependencies: + es-define-property: 1.0.1 + es-errors: 1.3.0 + gopd: 1.2.0 - /detect-newline@3.1.0: - resolution: {integrity: sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==} - engines: {node: '>=8'} - dev: true + delayed-stream@1.0.0: {} - /diff-sequences@29.6.3: - resolution: {integrity: sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - dev: true + dequal@2.0.3: {} - /dir-glob@3.0.1: - resolution: {integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==} - engines: {node: '>=8'} - dependencies: - path-type: 4.0.0 - dev: true + detect-newline@3.1.0: {} - /doctrine@3.0.0: - resolution: {integrity: sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==} - engines: {node: '>=6.0.0'} + devlop@1.1.0: dependencies: - esutils: 2.0.3 - dev: true + dequal: 2.0.3 - /dot-prop@5.3.0: - resolution: {integrity: sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==} - engines: {node: '>=8'} + dot-prop@5.3.0: dependencies: is-obj: 2.0.0 - dev: true - /ecpair@2.1.0: - resolution: {integrity: sha512-cL/mh3MtJutFOvFc27GPZE2pWL3a3k4YvzUWEOvilnfZVlH3Jwgx/7d6tlD7/75tNk8TG2m+7Kgtz0SI1tWcqw==} - engines: {node: '>=8.0.0'} + dunder-proto@1.0.1: dependencies: - randombytes: 2.1.0 - typeforce: 1.18.0 - wif: 2.0.6 - dev: false + call-bind-apply-helpers: 1.0.2 + es-errors: 1.3.0 + gopd: 1.2.0 - /ed2curve@0.1.4: - resolution: {integrity: sha512-hDZWhCHZ1wu4P2g2RVsM2MjDmmJzhvcsXr5qHUSBJZXvuhJSunhbVsWoBXdIe0/yTa3RV4UaWpOmFmrVsKr0wA==} + eastasianwidth@0.2.0: {} + + ecpair@3.0.0(typescript@5.8.3): + dependencies: + uint8array-tools: 0.0.8 + valibot: 0.37.0(typescript@5.8.3) + wif: 5.0.0 + transitivePeerDependencies: + - typescript + + ed2curve@0.1.4: dependencies: tweetnacl: 0.14.5 - dev: false - /ed2curve@0.3.0: - resolution: {integrity: sha512-8w2fmmq3hv9rCrcI7g9hms2pMunQr1JINfcjwR9tAyZqhtyaMN991lF/ZfHfr5tzZQ8c7y7aBgZbjfbd0fjFwQ==} + ed2curve@0.3.0: dependencies: tweetnacl: 1.0.3 - dev: false - /electron-to-chromium@1.4.537: - resolution: {integrity: sha512-W1+g9qs9hviII0HAwOdehGYkr+zt7KKdmCcJcjH0mYg6oL8+ioT3Skjmt7BLoAQqXhjf40AXd+HlR4oAWMlXjA==} - dev: true + ejs@3.1.10: + dependencies: + jake: 10.9.2 + + electron-to-chromium@1.5.186: {} - /elliptic@6.5.4: - resolution: {integrity: sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ==} + elliptic@6.6.1: dependencies: - bn.js: 4.12.0 + bn.js: 4.12.2 brorand: 1.1.0 hash.js: 1.1.7 hmac-drbg: 1.0.1 inherits: 2.0.4 minimalistic-assert: 1.0.1 minimalistic-crypto-utils: 1.0.1 - dev: false - /emittery@0.13.1: - resolution: {integrity: sha512-DeWwawk6r5yR9jFgnDKYt4sLS0LmHJJi3ZOnb5/JdbYwj3nW+FxQnHIjhBKz8YLC7oRNPVM9NQ47I3CVx34eqQ==} - engines: {node: '>=12'} - dev: true + emittery@0.13.1: {} - /emoji-regex@8.0.0: - resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} - dev: true + emoji-regex@8.0.0: {} - /engine.io-client@6.5.2: - resolution: {integrity: sha512-CQZqbrpEYnrpGqC07a9dJDz4gePZUgTPMU3NKJPSeQOyw27Tst4Pl3FemKoFGAlHzgZmKjoRmiJvbWfhCXUlIg==} + emoji-regex@9.2.2: {} + + engine.io-client@6.6.3: dependencies: - '@socket.io/component-emitter': 3.1.0 - debug: 4.3.4 - engine.io-parser: 5.2.1 - ws: 8.11.0 - xmlhttprequest-ssl: 2.0.0 + '@socket.io/component-emitter': 3.1.2 + debug: 4.3.7 + engine.io-parser: 5.2.3 + ws: 8.17.1 + xmlhttprequest-ssl: 2.1.2 transitivePeerDependencies: - bufferutil - supports-color - utf-8-validate - dev: false - /engine.io-parser@5.2.1: - resolution: {integrity: sha512-9JktcM3u18nU9N2Lz3bWeBgxVgOKpw7yhRaoxQA3FUDZzzw+9WlA6p4G4u0RixNkg14fH7EfEc/RhpurtiROTQ==} - engines: {node: '>=10.0.0'} - dev: false + engine.io-parser@5.2.3: {} - /env-paths@2.2.1: - resolution: {integrity: sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==} - engines: {node: '>=6'} - dev: true + env-paths@2.2.1: {} - /error-ex@1.3.2: - resolution: {integrity: sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==} + error-ex@1.3.2: dependencies: is-arrayish: 0.2.1 - dev: true - - /escalade@3.1.1: - resolution: {integrity: sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==} - engines: {node: '>=6'} - dev: true - - /escape-string-regexp@1.0.5: - resolution: {integrity: sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==} - engines: {node: '>=0.8.0'} - dev: true - - /escape-string-regexp@2.0.0: - resolution: {integrity: sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==} - engines: {node: '>=8'} - dev: true - - /escape-string-regexp@4.0.0: - resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} - engines: {node: '>=10'} - dev: true - - /eslint-config-google@0.14.0(eslint@8.54.0): - resolution: {integrity: sha512-WsbX4WbjuMvTdeVL6+J3rK1RGhCTqjsFjX7UMSMgZiyxxaNLkoJENbrGExzERFeoTpGw3F3FypTiWAP9ZXzkEw==} - engines: {node: '>=0.10.0'} - peerDependencies: - eslint: '>=5.16.0' - dependencies: - eslint: 8.54.0 - dev: true - - /eslint-config-prettier@9.1.0(eslint@8.53.0): - resolution: {integrity: sha512-NSWl5BFQWEPi1j4TjVNItzYV7dZXZ+wP6I6ZhrBGpChQhZRUaElihE9uRRkcbRnNb76UMKDF3r+WTmNcGPKsqw==} - hasBin: true - peerDependencies: - eslint: '>=7.0.0' - dependencies: - eslint: 8.53.0 - dev: true - - /eslint-plugin-es@3.0.1(eslint@8.53.0): - resolution: {integrity: sha512-GUmAsJaN4Fc7Gbtl8uOBlayo2DqhwWvEzykMHSCZHU3XdJ+NSzzZcVhXh3VxX5icqQ+oQdIEawXX8xkR3mIFmQ==} - engines: {node: '>=8.10.0'} - peerDependencies: - eslint: '>=4.19.1' - dependencies: - eslint: 8.53.0 - eslint-utils: 2.1.0 - regexpp: 3.2.0 - dev: true - - /eslint-plugin-jest@28.5.0(eslint@8.54.0)(jest@29.7.0)(typescript@5.1.6): - resolution: {integrity: sha512-6np6DGdmNq/eBbA7HOUNV8fkfL86PYwBfwyb8n23FXgJNTR8+ot3smRHjza9LGsBBZRypK3qyF79vMjohIL8eQ==} - engines: {node: ^16.10.0 || ^18.12.0 || >=20.0.0} - peerDependencies: - '@typescript-eslint/eslint-plugin': ^6.0.0 || ^7.0.0 - eslint: ^7.0.0 || ^8.0.0 || ^9.0.0 - jest: '*' - peerDependenciesMeta: - '@typescript-eslint/eslint-plugin': - optional: true - jest: - optional: true - dependencies: - '@typescript-eslint/utils': 7.11.0(eslint@8.54.0)(typescript@5.1.6) - eslint: 8.54.0 - jest: 29.7.0(@types/node@20.12.13) - transitivePeerDependencies: - - supports-color - - typescript - dev: true - - /eslint-plugin-node@11.1.0(eslint@8.53.0): - resolution: {integrity: sha512-oUwtPJ1W0SKD0Tr+wqu92c5xuCeQqB3hSCHasn/ZgjFdA9iDGNkNf2Zi9ztY7X+hNuMib23LNGRm6+uN+KLE3g==} - engines: {node: '>=8.10.0'} - peerDependencies: - eslint: '>=5.16.0' - dependencies: - eslint: 8.53.0 - eslint-plugin-es: 3.0.1(eslint@8.53.0) - eslint-utils: 2.1.0 - ignore: 5.2.4 - minimatch: 3.1.2 - resolve: 1.22.6 - semver: 6.3.1 - dev: true - /eslint-plugin-prettier@5.1.3(eslint-config-prettier@9.1.0)(eslint@8.53.0)(prettier@3.1.1): - resolution: {integrity: sha512-C9GCVAs4Eq7ZC/XFQHITLiHJxQngdtraXaM+LoUFoFp/lHNl2Zn8f3WQbe9HvTBBQ9YnKFB0/2Ajdqwo5D1EAw==} - engines: {node: ^14.18.0 || >=16.0.0} - peerDependencies: - '@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 - dependencies: - eslint: 8.53.0 - eslint-config-prettier: 9.1.0(eslint@8.53.0) - prettier: 3.1.1 - prettier-linter-helpers: 1.0.0 - synckit: 0.8.8 - dev: true + es-define-property@1.0.1: {} - /eslint-scope@5.1.1: - resolution: {integrity: sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==} - engines: {node: '>=8.0.0'} - dependencies: - esrecurse: 4.3.0 - estraverse: 4.3.0 - dev: true + es-errors@1.3.0: {} - /eslint-scope@7.2.2: - resolution: {integrity: sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + es-object-atoms@1.1.1: dependencies: - esrecurse: 4.3.0 - estraverse: 5.3.0 - dev: true + es-errors: 1.3.0 - /eslint-utils@2.1.0: - resolution: {integrity: sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==} - engines: {node: '>=6'} + es-set-tostringtag@2.1.0: dependencies: - eslint-visitor-keys: 1.3.0 - dev: true - - /eslint-visitor-keys@1.3.0: - resolution: {integrity: sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==} - engines: {node: '>=4'} - dev: true - - /eslint-visitor-keys@3.4.3: - resolution: {integrity: sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - dev: true + es-errors: 1.3.0 + get-intrinsic: 1.3.0 + has-tostringtag: 1.0.2 + hasown: 2.0.2 - /eslint@8.53.0: - resolution: {integrity: sha512-N4VuiPjXDUa4xVeV/GC/RV3hQW9Nw+Y463lkWaKKXKYMvmRiRDAtfpuPFLN+E1/6ZhyR8J2ig+eVREnYgUsiag==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - hasBin: true - dependencies: - '@eslint-community/eslint-utils': 4.4.0(eslint@8.53.0) - '@eslint-community/regexpp': 4.9.1 - '@eslint/eslintrc': 2.1.3 - '@eslint/js': 8.53.0 - '@humanwhocodes/config-array': 0.11.13 - '@humanwhocodes/module-importer': 1.0.1 - '@nodelib/fs.walk': 1.2.8 - '@ungap/structured-clone': 1.2.0 - ajv: 6.12.6 - chalk: 4.1.2 - cross-spawn: 7.0.3 - debug: 4.3.4 - 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.5.0 - esutils: 2.0.3 - fast-deep-equal: 3.1.3 - file-entry-cache: 6.0.1 - find-up: 5.0.0 - glob-parent: 6.0.2 - globals: 13.22.0 - graphemer: 1.4.0 - ignore: 5.2.4 - imurmurhash: 0.1.4 - is-glob: 4.0.3 - 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 + escalade@3.2.0: {} + + escape-string-regexp@2.0.0: {} + + escape-string-regexp@4.0.0: {} + + escape-string-regexp@5.0.0: {} + + eslint-config-google@0.14.0(eslint@9.32.0(jiti@2.4.2)): + dependencies: + eslint: 9.32.0(jiti@2.4.2) + + eslint-plugin-jest@29.0.1(@typescript-eslint/eslint-plugin@8.38.0(@typescript-eslint/parser@8.38.0(eslint@9.32.0(jiti@2.4.2))(typescript@5.8.3))(eslint@9.32.0(jiti@2.4.2))(typescript@5.8.3))(eslint@9.32.0(jiti@2.4.2))(jest@30.0.5(@types/node@24.1.0))(typescript@5.8.3): + dependencies: + '@typescript-eslint/utils': 8.37.0(eslint@9.32.0(jiti@2.4.2))(typescript@5.8.3) + eslint: 9.32.0(jiti@2.4.2) + optionalDependencies: + '@typescript-eslint/eslint-plugin': 8.38.0(@typescript-eslint/parser@8.38.0(eslint@9.32.0(jiti@2.4.2))(typescript@5.8.3))(eslint@9.32.0(jiti@2.4.2))(typescript@5.8.3) + jest: 30.0.5(@types/node@24.1.0) transitivePeerDependencies: - supports-color - dev: true + - typescript - /eslint@8.54.0: - resolution: {integrity: sha512-NY0DfAkM8BIZDVl6PgSa1ttZbx3xHgJzSNJKYcQglem6CppHyMhRIQkBVSSMaSRnLhig3jsDbEzOjwCVt4AmmA==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - hasBin: true + eslint-scope@8.4.0: + dependencies: + esrecurse: 4.3.0 + estraverse: 5.3.0 + + eslint-visitor-keys@3.4.3: {} + + eslint-visitor-keys@4.2.1: {} + + eslint@9.32.0(jiti@2.4.2): dependencies: - '@eslint-community/eslint-utils': 4.4.0(eslint@8.54.0) - '@eslint-community/regexpp': 4.9.1 - '@eslint/eslintrc': 2.1.3 - '@eslint/js': 8.54.0 - '@humanwhocodes/config-array': 0.11.13 + '@eslint-community/eslint-utils': 4.7.0(eslint@9.32.0(jiti@2.4.2)) + '@eslint-community/regexpp': 4.12.1 + '@eslint/config-array': 0.21.0 + '@eslint/config-helpers': 0.3.0 + '@eslint/core': 0.15.1 + '@eslint/eslintrc': 3.3.1 + '@eslint/js': 9.32.0 + '@eslint/plugin-kit': 0.3.4 + '@humanfs/node': 0.16.6 '@humanwhocodes/module-importer': 1.0.1 - '@nodelib/fs.walk': 1.2.8 - '@ungap/structured-clone': 1.2.0 + '@humanwhocodes/retry': 0.4.3 + '@types/estree': 1.0.8 + '@types/json-schema': 7.0.15 ajv: 6.12.6 chalk: 4.1.2 - cross-spawn: 7.0.3 - debug: 4.3.4 - doctrine: 3.0.0 + cross-spawn: 7.0.6 + debug: 4.4.1 escape-string-regexp: 4.0.0 - eslint-scope: 7.2.2 - eslint-visitor-keys: 3.4.3 - espree: 9.6.1 - esquery: 1.5.0 + eslint-scope: 8.4.0 + eslint-visitor-keys: 4.2.1 + espree: 10.4.0 + esquery: 1.6.0 esutils: 2.0.3 fast-deep-equal: 3.1.3 - file-entry-cache: 6.0.1 + file-entry-cache: 8.0.0 find-up: 5.0.0 glob-parent: 6.0.2 - globals: 13.22.0 - graphemer: 1.4.0 - ignore: 5.2.4 + ignore: 5.3.2 imurmurhash: 0.1.4 is-glob: 4.0.3 - 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 + optionator: 0.9.4 + optionalDependencies: + jiti: 2.4.2 transitivePeerDependencies: - supports-color - dev: true - /espree@9.6.1: - resolution: {integrity: sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + espree@10.4.0: dependencies: - acorn: 8.10.0 - acorn-jsx: 5.3.2(acorn@8.10.0) - eslint-visitor-keys: 3.4.3 - dev: true + acorn: 8.15.0 + acorn-jsx: 5.3.2(acorn@8.15.0) + eslint-visitor-keys: 4.2.1 - /esprima@4.0.1: - resolution: {integrity: sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==} - engines: {node: '>=4'} - hasBin: true - dev: true + esprima@4.0.1: {} - /esquery@1.5.0: - resolution: {integrity: sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==} - engines: {node: '>=0.10'} + esquery@1.6.0: dependencies: estraverse: 5.3.0 - dev: true - /esrecurse@4.3.0: - resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==} - engines: {node: '>=4.0'} + esrecurse@4.3.0: dependencies: estraverse: 5.3.0 - dev: true - /estraverse@4.3.0: - resolution: {integrity: sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==} - engines: {node: '>=4.0'} - dev: true - - /estraverse@5.3.0: - resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==} - engines: {node: '>=4.0'} - dev: true + estraverse@5.3.0: {} - /esutils@2.0.3: - resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} - engines: {node: '>=0.10.0'} - dev: true + esutils@2.0.3: {} - /ethereum-cryptography@0.1.3: - resolution: {integrity: sha512-w8/4x1SGGzc+tO97TASLja6SLd3fRIK2tLVcV2Gx4IB21hE19atll5Cq9o3d0ZmAYC/8aw0ipieTSiekAea4SQ==} + ethereum-cryptography@0.1.3: dependencies: '@types/pbkdf2': 3.1.2 - '@types/secp256k1': 4.0.4 + '@types/secp256k1': 4.0.6 blakejs: 1.2.1 browserify-aes: 1.2.0 bs58check: 2.1.2 @@ -2434,37 +4426,29 @@ packages: create-hmac: 1.1.7 hash.js: 1.1.7 keccak: 3.0.4 - pbkdf2: 3.1.2 + pbkdf2: 3.1.3 randombytes: 2.1.0 safe-buffer: 5.2.1 scrypt-js: 3.0.1 - secp256k1: 4.0.3 + secp256k1: 4.0.4 setimmediate: 1.0.5 - dev: false - /ethereumjs-util@7.1.5: - resolution: {integrity: sha512-SDl5kKrQAudFBUe5OJM9Ac6WmMyYmXX/6sTmLZ3ffG2eY6ZIGBes3pEDxNN6V72WyOw4CPD5RomKdsa8DAAwLg==} - engines: {node: '>=10.0.0'} + ethereumjs-util@7.1.5: dependencies: - '@types/bn.js': 5.1.2 - bn.js: 5.2.1 + '@types/bn.js': 5.2.0 + bn.js: 5.2.2 create-hash: 1.2.0 ethereum-cryptography: 0.1.3 rlp: 2.2.7 - dev: false - /evp_bytestokey@1.0.3: - resolution: {integrity: sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==} + evp_bytestokey@1.0.3: dependencies: md5.js: 1.3.5 safe-buffer: 5.2.1 - dev: false - /execa@5.1.1: - resolution: {integrity: sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==} - engines: {node: '>=10'} + execa@5.1.1: dependencies: - cross-spawn: 7.0.3 + cross-spawn: 7.0.6 get-stream: 6.0.1 human-signals: 2.1.0 is-stream: 2.0.1 @@ -2473,232 +4457,170 @@ packages: onetime: 5.1.2 signal-exit: 3.0.7 strip-final-newline: 2.0.0 - dev: true - - /execa@8.0.1: - resolution: {integrity: sha512-VyhnebXciFV2DESc+p6B+y0LjSm0krU4OgJN44qFAhBY0TJ+1V61tYD2+wHusZ6F9n5K+vl8k0sTy7PEfV4qpg==} - engines: {node: '>=16.17'} - dependencies: - cross-spawn: 7.0.3 - get-stream: 8.0.1 - human-signals: 5.0.0 - is-stream: 3.0.0 - merge-stream: 2.0.0 - npm-run-path: 5.1.0 - onetime: 6.0.0 - signal-exit: 4.1.0 - strip-final-newline: 3.0.0 - dev: true - /exit@0.1.2: - resolution: {integrity: sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ==} - engines: {node: '>= 0.8.0'} - dev: true + exit-x@0.2.2: {} - /expect@29.7.0: - resolution: {integrity: sha512-2Zks0hf1VLFYI1kbh0I5jP3KHHyCHpkfyHBzsSXRFgl/Bg9mWYfMW8oD+PdMPlEwy5HNsR9JutYy6pMeOh61nw==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + expect@30.0.4: 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 - dev: true + '@jest/expect-utils': 30.0.4 + '@jest/get-type': 30.0.1 + jest-matcher-utils: 30.0.4 + jest-message-util: 30.0.2 + jest-mock: 30.0.2 + jest-util: 30.0.2 - /external-editor@3.1.0: - resolution: {integrity: sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==} - engines: {node: '>=4'} + expect@30.0.5: dependencies: - chardet: 0.7.0 - iconv-lite: 0.4.24 - tmp: 0.0.33 - dev: true - - /fast-deep-equal@3.1.3: - resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} - dev: true + '@jest/expect-utils': 30.0.5 + '@jest/get-type': 30.0.1 + jest-matcher-utils: 30.0.5 + jest-message-util: 30.0.5 + jest-mock: 30.0.5 + jest-util: 30.0.5 - /fast-diff@1.3.0: - resolution: {integrity: sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw==} - dev: true + fast-deep-equal@3.1.3: {} - /fast-glob@3.3.1: - resolution: {integrity: sha512-kNFPyjhh5cKjrUltxs+wFx+ZkbRaxxmZ+X0ZU31SOsxCEtP9VPgtq2teZw1DebupL5GmDaNQ6yKMMVcM41iqDg==} - engines: {node: '>=8.6.0'} + fast-glob@3.3.3: dependencies: '@nodelib/fs.stat': 2.0.5 '@nodelib/fs.walk': 1.2.8 glob-parent: 5.1.2 merge2: 1.4.1 - micromatch: 4.0.5 - dev: true + micromatch: 4.0.8 - /fast-json-stable-stringify@2.1.0: - resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==} - dev: true + fast-json-stable-stringify@2.1.0: {} - /fast-levenshtein@2.0.6: - resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==} - dev: true + fast-levenshtein@2.0.6: {} + + fast-uri@3.0.6: {} - /fastq@1.15.0: - resolution: {integrity: sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==} + fastq@1.19.1: dependencies: - reusify: 1.0.4 - dev: true + reusify: 1.1.0 - /fb-watchman@2.0.2: - resolution: {integrity: sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA==} + fault@2.0.1: + dependencies: + format: 0.2.2 + + fb-watchman@2.0.2: dependencies: bser: 2.1.1 - dev: true - /figures@3.2.0: - resolution: {integrity: sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==} - engines: {node: '>=8'} + file-entry-cache@8.0.0: dependencies: - escape-string-regexp: 1.0.5 - dev: true + flat-cache: 4.0.1 - /file-entry-cache@6.0.1: - resolution: {integrity: sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==} - engines: {node: ^10.12.0 || >=12.0.0} + filelist@1.0.4: dependencies: - flat-cache: 3.1.0 - dev: true + minimatch: 5.1.6 - /fill-range@7.0.1: - resolution: {integrity: sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==} - engines: {node: '>=8'} + fill-range@7.1.1: dependencies: to-regex-range: 5.0.1 - dev: true - /find-up@4.1.0: - resolution: {integrity: sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==} - engines: {node: '>=8'} + find-up@4.1.0: dependencies: locate-path: 5.0.0 path-exists: 4.0.0 - dev: true - /find-up@5.0.0: - resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==} - engines: {node: '>=10'} + find-up@5.0.0: dependencies: locate-path: 6.0.0 path-exists: 4.0.0 - dev: true - /find-up@7.0.0: - resolution: {integrity: sha512-YyZM99iHrqLKjmt4LJDj58KI+fYyufRLBSYcqycxf//KpBk9FoewoGX0450m9nB44qrZnovzC2oeP5hUibxc/g==} - engines: {node: '>=18'} + find-up@7.0.0: dependencies: locate-path: 7.2.0 path-exists: 5.0.0 unicorn-magic: 0.1.0 - dev: true - /flat-cache@3.1.0: - resolution: {integrity: sha512-OHx4Qwrrt0E4jEIcI5/Xb+f+QmJYNj2rrK8wiIdQOIrB9WrrJL8cjZvXdXuBTkkEwEqLycb5BeZDV1o2i9bTew==} - engines: {node: '>=12.0.0'} + flat-cache@4.0.1: dependencies: - flatted: 3.2.9 - keyv: 4.5.3 - rimraf: 3.0.2 - dev: true + flatted: 3.3.3 + keyv: 4.5.4 - /flatted@3.2.9: - resolution: {integrity: sha512-36yxDn5H7OFZQla0/jFJmbIKTdZAQHngCedGxiMmpNfEZM0sdEeT+WczLQrjK6D7o2aiyLYDnkw0R3JK0Qv1RQ==} - dev: true + flatted@3.3.3: {} - /follow-redirects@1.15.6: - resolution: {integrity: sha512-wWN62YITEaOpSK584EZXJafH1AGpO8RVgElfkuXbTOrPX4fIfOyEpW/CsiNd8JdYrAoOvafRTOEnvsO++qCqFA==} - engines: {node: '>=4.0'} - peerDependencies: - debug: '*' - peerDependenciesMeta: - debug: - optional: true - dev: false + follow-redirects@1.15.9: {} - /form-data@4.0.0: - resolution: {integrity: sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==} - engines: {node: '>= 6'} + for-each@0.3.5: + dependencies: + is-callable: 1.2.7 + + foreground-child@3.3.1: + dependencies: + cross-spawn: 7.0.6 + signal-exit: 4.1.0 + + form-data@4.0.4: dependencies: asynckit: 0.4.0 combined-stream: 1.0.8 + es-set-tostringtag: 2.1.0 + hasown: 2.0.2 mime-types: 2.1.35 - dev: false - /fs.realpath@1.0.0: - resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} - dev: true + format@0.2.2: {} - /fsevents@2.3.3: - resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} - engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} - os: [darwin] - requiresBuild: true - dev: true + fs.realpath@1.0.0: {} + + fsevents@2.3.3: optional: true - /function-bind@1.1.1: - resolution: {integrity: sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==} - dev: true + function-bind@1.1.2: {} - /gensync@1.0.0-beta.2: - resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==} - engines: {node: '>=6.9.0'} - dev: true + gensync@1.0.0-beta.2: {} - /get-caller-file@2.0.5: - resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==} - engines: {node: 6.* || 8.* || >= 10.*} - dev: true + get-caller-file@2.0.5: {} - /get-package-type@0.1.0: - resolution: {integrity: sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==} - engines: {node: '>=8.0.0'} - dev: true + get-intrinsic@1.3.0: + dependencies: + call-bind-apply-helpers: 1.0.2 + es-define-property: 1.0.1 + es-errors: 1.3.0 + es-object-atoms: 1.1.1 + function-bind: 1.1.2 + get-proto: 1.0.1 + gopd: 1.2.0 + has-symbols: 1.1.0 + hasown: 2.0.2 + math-intrinsics: 1.1.0 - /get-stream@6.0.1: - resolution: {integrity: sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==} - engines: {node: '>=10'} - dev: true + get-package-type@0.1.0: {} - /get-stream@8.0.1: - resolution: {integrity: sha512-VaUJspBffn/LMCJVoMvSAdmscJyS1auj5Zulnn5UoYcY531UWmdwhRWkcGKnGU93m5HSXP9LP2usOryrBtQowA==} - engines: {node: '>=16'} - dev: true + get-proto@1.0.1: + dependencies: + dunder-proto: 1.0.1 + es-object-atoms: 1.1.1 - /git-raw-commits@4.0.0: - resolution: {integrity: sha512-ICsMM1Wk8xSGMowkOmPrzo2Fgmfo4bMHLNX6ytHjajRJUqvHOw/TFapQ+QG75c3X/tTDDhOSRPGC52dDbNM8FQ==} - engines: {node: '>=16'} - hasBin: true + get-stream@6.0.1: {} + + git-raw-commits@4.0.0: dependencies: dargs: 8.1.0 meow: 12.1.1 split2: 4.2.0 - dev: true - /glob-parent@5.1.2: - resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} - engines: {node: '>= 6'} + github-slugger@2.0.0: {} + + glob-parent@5.1.2: dependencies: is-glob: 4.0.3 - dev: true - /glob-parent@6.0.2: - resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==} - engines: {node: '>=10.13.0'} + glob-parent@6.0.2: dependencies: is-glob: 4.0.3 - dev: true - /glob@7.2.3: - resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==} + glob@10.4.5: + dependencies: + foreground-child: 3.3.1 + jackspeak: 3.4.3 + minimatch: 9.0.5 + minipass: 7.1.2 + package-json-from-dist: 1.0.1 + path-scurry: 1.11.1 + + glob@7.2.3: dependencies: fs.realpath: 1.0.0 inflight: 1.0.6 @@ -2706,2161 +4628,1539 @@ packages: minimatch: 3.1.2 once: 1.4.0 path-is-absolute: 1.0.1 - dev: true - /global-directory@4.0.1: - resolution: {integrity: sha512-wHTUcDUoZ1H5/0iVqEudYW4/kAlN5cZ3j/bXn0Dpbizl9iaUVeWSHqiOjsgk6OW2bkLclbBjzewBz6weQ1zA2Q==} - engines: {node: '>=18'} + global-directory@4.0.1: dependencies: ini: 4.1.1 - dev: true - /globals@11.12.0: - resolution: {integrity: sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==} - engines: {node: '>=4'} - dev: true + globals@14.0.0: {} - /globals@13.22.0: - resolution: {integrity: sha512-H1Ddc/PbZHTDVJSnj8kWptIRSD6AM3pK+mKytuIVF4uoBV7rshFlhhvA58ceJ5wp3Er58w6zj7bykMpYXt3ETw==} - engines: {node: '>=8'} - dependencies: - type-fest: 0.20.2 - dev: true + globals@16.3.0: {} - /globby@11.1.0: - resolution: {integrity: sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==} - engines: {node: '>=10'} - dependencies: - array-union: 2.1.0 - dir-glob: 3.0.1 - fast-glob: 3.3.1 - ignore: 5.2.4 - merge2: 1.4.1 - slash: 3.0.0 - dev: true + gopd@1.2.0: {} - /graceful-fs@4.2.11: - resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} - dev: true + graceful-fs@4.2.11: {} - /graphemer@1.4.0: - resolution: {integrity: sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==} - dev: true + graphemer@1.4.0: {} - /gts@5.3.0(typescript@5.1.6): - resolution: {integrity: sha512-/V0nbaWLBv8g0v2kol5M7Vf+kHXk19Ew5sa3wQJXeUaccesXg7AFo7eEInoIpR+aIJ3QDjoYt4zHYeFr8w8rng==} - engines: {node: '>=14'} - hasBin: true - peerDependencies: - typescript: '>=3' - dependencies: - '@typescript-eslint/eslint-plugin': 5.62.0(@typescript-eslint/parser@5.62.0)(eslint@8.53.0)(typescript@5.1.6) - '@typescript-eslint/parser': 5.62.0(eslint@8.54.0)(typescript@5.1.6) - chalk: 4.1.2 - eslint: 8.53.0 - eslint-config-prettier: 9.1.0(eslint@8.53.0) - eslint-plugin-node: 11.1.0(eslint@8.53.0) - eslint-plugin-prettier: 5.1.3(eslint-config-prettier@9.1.0)(eslint@8.53.0)(prettier@3.1.1) - execa: 5.1.1 - inquirer: 7.3.3 - json5: 2.2.3 - meow: 9.0.0 - ncp: 2.0.0 - prettier: 3.1.1 - rimraf: 3.0.2 - typescript: 5.1.6 - write-file-atomic: 4.0.2 - transitivePeerDependencies: - - '@types/eslint' - - supports-color - dev: true + has-flag@4.0.0: {} - /hard-rejection@2.1.0: - resolution: {integrity: sha512-VIZB+ibDhx7ObhAe7OVtoEbuP4h/MuOTHJ+J8h/eBXotJYl0fBgR72xDFCKgIh22OJZIOVNxBMWuhAr10r8HdA==} - engines: {node: '>=6'} - dev: true + has-property-descriptors@1.0.2: + dependencies: + es-define-property: 1.0.1 - /has-flag@3.0.0: - resolution: {integrity: sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==} - engines: {node: '>=4'} - dev: true + has-symbols@1.1.0: {} - /has-flag@4.0.0: - resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} - engines: {node: '>=8'} - dev: true + has-tostringtag@1.0.2: + dependencies: + has-symbols: 1.1.0 - /has@1.0.3: - resolution: {integrity: sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==} - engines: {node: '>= 0.4.0'} + hash-base@2.0.2: dependencies: - function-bind: 1.1.1 - dev: true + inherits: 2.0.4 - /hash-base@3.1.0: - resolution: {integrity: sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA==} - engines: {node: '>=4'} + hash-base@3.1.0: dependencies: inherits: 2.0.4 readable-stream: 3.6.2 safe-buffer: 5.2.1 - dev: false - /hash-wasm@4.9.0: - resolution: {integrity: sha512-7SW7ejyfnRxuOc7ptQHSf4LDoZaWOivfzqw+5rpcQku0nHfmicPKE51ra9BiRLAmT8+gGLestr1XroUkqdjL6w==} - dev: false + hash-wasm@4.9.0: {} - /hash.js@1.1.7: - resolution: {integrity: sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==} + hash.js@1.1.7: dependencies: inherits: 2.0.4 minimalistic-assert: 1.0.1 - dev: false - /hdkey@2.1.0: - resolution: {integrity: sha512-i9Wzi0Dy49bNS4tXXeGeu0vIcn86xXdPQUpEYg+SO1YiO8HtomjmmRMaRyqL0r59QfcD4PfVbSF3qmsWFwAemA==} + hasown@2.0.2: + dependencies: + function-bind: 1.1.2 + + hdkey@2.1.0: dependencies: bs58check: 2.1.2 ripemd160: 2.0.2 safe-buffer: 5.2.1 - secp256k1: 4.0.3 - dev: false + secp256k1: 4.0.4 - /hmac-drbg@1.0.1: - resolution: {integrity: sha512-Tti3gMqLdZfhOQY1Mzf/AanLiqh1WTiJgEj26ZuYQ9fbkLomzGchCws4FyrSd4VkpBfiNhaE1On+lOz894jvXg==} + hmac-drbg@1.0.1: dependencies: hash.js: 1.1.7 minimalistic-assert: 1.0.1 minimalistic-crypto-utils: 1.0.1 - dev: false - - /hosted-git-info@2.8.9: - resolution: {integrity: sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==} - dev: true - - /hosted-git-info@4.1.0: - resolution: {integrity: sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==} - engines: {node: '>=10'} - dependencies: - lru-cache: 6.0.0 - dev: true - - /html-escaper@2.0.2: - resolution: {integrity: sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==} - dev: true - /human-signals@2.1.0: - resolution: {integrity: sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==} - engines: {node: '>=10.17.0'} - dev: true + html-escaper@2.0.2: {} - /human-signals@5.0.0: - resolution: {integrity: sha512-AXcZb6vzzrFAUE61HnN4mpLqd/cSIwNQjtNWR0euPm6y0iqx3G4gOXaIDdtdDwZmhwe82LA6+zinmW4UBWVePQ==} - engines: {node: '>=16.17.0'} - dev: true + human-signals@2.1.0: {} - /husky@9.0.11: - resolution: {integrity: sha512-AB6lFlbwwyIqMdHYhwPe+kjOC3Oc5P3nThEoW/AaO2BX3vJDjWPFxYLxokUZOo6RNX20He3AaT8sESs9NJcmEw==} - engines: {node: '>=18'} - hasBin: true - dev: true + husky@9.1.7: {} - /iconv-lite@0.4.24: - resolution: {integrity: sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==} - engines: {node: '>=0.10.0'} - dependencies: - safer-buffer: 2.1.2 - dev: true + ignore@5.3.2: {} - /ignore@5.2.4: - resolution: {integrity: sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==} - engines: {node: '>= 4'} - dev: true + ignore@7.0.5: {} - /import-fresh@3.3.0: - resolution: {integrity: sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==} - engines: {node: '>=6'} + import-fresh@3.3.1: dependencies: parent-module: 1.0.1 resolve-from: 4.0.0 - dev: true - /import-local@3.1.0: - resolution: {integrity: sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg==} - engines: {node: '>=8'} - hasBin: true + import-local@3.2.0: dependencies: pkg-dir: 4.2.0 resolve-cwd: 3.0.0 - dev: true - - /import-meta-resolve@4.1.0: - resolution: {integrity: sha512-I6fiaX09Xivtk+THaMfAwnA3MVA5Big1WHF1Dfx9hFuvNIWpXnorlkzhcQf6ehrqQiiZECRt1poOAkPmer3ruw==} - dev: true - /imurmurhash@0.1.4: - resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==} - engines: {node: '>=0.8.19'} - dev: true + import-meta-resolve@4.1.0: {} - /indent-string@4.0.0: - resolution: {integrity: sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==} - engines: {node: '>=8'} - dev: true + imurmurhash@0.1.4: {} - /inflight@1.0.6: - resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==} + inflight@1.0.6: dependencies: once: 1.4.0 wrappy: 1.0.2 - dev: true - /inherits@2.0.4: - resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} - - /ini@4.1.1: - resolution: {integrity: sha512-QQnnxNyfvmHFIsj7gkPcYymR8Jdw/o7mp5ZFihxn6h8Ci6fh3Dx4E1gPjpQEpIuPo9XVNY/ZUwh4BPMjGyL01g==} - engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} - dev: true + inherits@2.0.4: {} - /inquirer@7.3.3: - resolution: {integrity: sha512-JG3eIAj5V9CwcGvuOmoo6LB9kbAYT8HXffUl6memuszlwDC/qvFAJw49XJ5NROSFNPxp3iQg1GqkFhaY/CR0IA==} - engines: {node: '>=8.0.0'} - dependencies: - ansi-escapes: 4.3.2 - chalk: 4.1.2 - cli-cursor: 3.1.0 - cli-width: 3.0.0 - external-editor: 3.1.0 - figures: 3.2.0 - lodash: 4.17.21 - mute-stream: 0.0.8 - run-async: 2.4.1 - rxjs: 6.6.7 - string-width: 4.2.3 - strip-ansi: 6.0.1 - through: 2.3.8 - dev: true + ini@4.1.1: {} - /is-arrayish@0.2.1: - resolution: {integrity: sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==} - dev: true + is-arrayish@0.2.1: {} - /is-core-module@2.13.0: - resolution: {integrity: sha512-Z7dk6Qo8pOCp3l4tsX2C5ZVas4V+UxwQodwZhLopL91TX8UyyHEXafPcyoeeWuLrwzHcr3igO78wNLwHJHsMCQ==} - dependencies: - has: 1.0.3 - dev: true + is-callable@1.2.7: {} - /is-extglob@2.1.1: - resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} - engines: {node: '>=0.10.0'} - dev: true + is-extglob@2.1.1: {} - /is-fullwidth-code-point@3.0.0: - resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} - engines: {node: '>=8'} - dev: true + is-fullwidth-code-point@3.0.0: {} - /is-generator-fn@2.1.0: - resolution: {integrity: sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==} - engines: {node: '>=6'} - dev: true + is-generator-fn@2.1.0: {} - /is-glob@4.0.3: - resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} - engines: {node: '>=0.10.0'} + is-glob@4.0.3: dependencies: is-extglob: 2.1.1 - dev: true - - /is-number@7.0.0: - resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} - engines: {node: '>=0.12.0'} - dev: true - - /is-obj@2.0.0: - resolution: {integrity: sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==} - engines: {node: '>=8'} - dev: true - - /is-path-inside@3.0.3: - resolution: {integrity: sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==} - engines: {node: '>=8'} - dev: true - /is-plain-obj@1.1.0: - resolution: {integrity: sha512-yvkRyxmFKEOQ4pNXCmJG5AEQNlXJS5LaONXo5/cLdTZdWvsZ1ioJEonLGAosKlMWE8lwUy/bJzMjcw8az73+Fg==} - engines: {node: '>=0.10.0'} - dev: true + is-number@7.0.0: {} - /is-stream@2.0.1: - resolution: {integrity: sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==} - engines: {node: '>=8'} - dev: true + is-obj@2.0.0: {} - /is-stream@3.0.0: - resolution: {integrity: sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - dev: true + is-stream@2.0.1: {} - /is-text-path@2.0.0: - resolution: {integrity: sha512-+oDTluR6WEjdXEJMnC2z6A4FRwFoYuvShVVEGsS7ewc0UTi2QtAKMDJuL4BDEVt+5T7MjFo12RP8ghOM75oKJw==} - engines: {node: '>=8'} + is-text-path@2.0.0: dependencies: text-extensions: 2.4.0 - dev: true - /isexe@2.0.0: - resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} - dev: true + is-typed-array@1.1.15: + dependencies: + which-typed-array: 1.1.19 - /istanbul-lib-coverage@3.2.0: - resolution: {integrity: sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw==} - engines: {node: '>=8'} - dev: true + isarray@2.0.5: {} - /istanbul-lib-instrument@5.2.1: - resolution: {integrity: sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg==} - engines: {node: '>=8'} - dependencies: - '@babel/core': 7.23.0 - '@babel/parser': 7.23.0 - '@istanbuljs/schema': 0.1.3 - istanbul-lib-coverage: 3.2.0 - semver: 6.3.1 - transitivePeerDependencies: - - supports-color - dev: true + isexe@2.0.0: {} - /istanbul-lib-instrument@6.0.0: - resolution: {integrity: sha512-x58orMzEVfzPUKqlbLd1hXCnySCxKdDKa6Rjg97CwuLLRI4g3FHTdnExu1OqffVFay6zeMW+T6/DowFLndWnIw==} - engines: {node: '>=10'} + istanbul-lib-coverage@3.2.2: {} + + istanbul-lib-instrument@6.0.3: dependencies: - '@babel/core': 7.23.0 - '@babel/parser': 7.23.0 + '@babel/core': 7.28.0 + '@babel/parser': 7.28.0 '@istanbuljs/schema': 0.1.3 - istanbul-lib-coverage: 3.2.0 - semver: 7.5.4 + istanbul-lib-coverage: 3.2.2 + semver: 7.7.2 transitivePeerDependencies: - supports-color - dev: true - /istanbul-lib-report@3.0.1: - resolution: {integrity: sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==} - engines: {node: '>=10'} + istanbul-lib-report@3.0.1: dependencies: - istanbul-lib-coverage: 3.2.0 + istanbul-lib-coverage: 3.2.2 make-dir: 4.0.0 supports-color: 7.2.0 - dev: true - /istanbul-lib-source-maps@4.0.1: - resolution: {integrity: sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==} - engines: {node: '>=10'} + istanbul-lib-source-maps@5.0.6: dependencies: - debug: 4.3.4 - istanbul-lib-coverage: 3.2.0 - source-map: 0.6.1 + '@jridgewell/trace-mapping': 0.3.29 + debug: 4.4.1 + istanbul-lib-coverage: 3.2.2 transitivePeerDependencies: - supports-color - dev: true - /istanbul-reports@3.1.6: - resolution: {integrity: sha512-TLgnMkKg3iTDsQ9PbPTdpfAK2DzjF9mqUG7RMgcQl8oFjad8ob4laGxv5XV5U9MAfx8D6tSJiUyuAwzLicaxlg==} - engines: {node: '>=8'} + istanbul-reports@3.1.7: dependencies: html-escaper: 2.0.2 istanbul-lib-report: 3.0.1 - dev: true - /jest-changed-files@29.7.0: - resolution: {integrity: sha512-fEArFiwf1BpQ+4bXSprcDc3/x4HSzL4al2tozwVpDFpsxALjLYdyiIK4e5Vz66GQJIbXJ82+35PtysofptNX2w==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + jackspeak@3.4.3: + dependencies: + '@isaacs/cliui': 8.0.2 + optionalDependencies: + '@pkgjs/parseargs': 0.11.0 + + jake@10.9.2: + dependencies: + async: 3.2.6 + chalk: 4.1.2 + filelist: 1.0.4 + minimatch: 3.1.2 + + jest-changed-files@30.0.5: dependencies: execa: 5.1.1 - jest-util: 29.7.0 + jest-util: 30.0.5 p-limit: 3.1.0 - dev: true - /jest-circus@29.7.0: - resolution: {integrity: sha512-3E1nCMgipcTkCocFwM90XXQab9bS+GMsjdpmPrlelaxwD93Ad8iVEjX/vvHPdLPnFf+L40u+5+iutRdA1N9myw==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + jest-circus@30.0.5: dependencies: - '@jest/environment': 29.7.0 - '@jest/expect': 29.7.0 - '@jest/test-result': 29.7.0 - '@jest/types': 29.6.3 - '@types/node': 20.12.13 + '@jest/environment': 30.0.5 + '@jest/expect': 30.0.5 + '@jest/test-result': 30.0.5 + '@jest/types': 30.0.5 + '@types/node': 24.1.0 chalk: 4.1.2 co: 4.6.0 - dedent: 1.5.1 + dedent: 1.6.0 is-generator-fn: 2.1.0 - jest-each: 29.7.0 - jest-matcher-utils: 29.7.0 - jest-message-util: 29.7.0 - jest-runtime: 29.7.0 - jest-snapshot: 29.7.0 - jest-util: 29.7.0 + jest-each: 30.0.5 + jest-matcher-utils: 30.0.5 + jest-message-util: 30.0.5 + jest-runtime: 30.0.5 + jest-snapshot: 30.0.5 + jest-util: 30.0.5 p-limit: 3.1.0 - pretty-format: 29.7.0 - pure-rand: 6.0.4 + pretty-format: 30.0.5 + pure-rand: 7.0.1 slash: 3.0.0 stack-utils: 2.0.6 transitivePeerDependencies: - babel-plugin-macros - supports-color - dev: true - /jest-cli@29.7.0(@types/node@20.12.13): - resolution: {integrity: sha512-OVVobw2IubN/GSYsxETi+gOe7Ka59EFMR/twOU3Jb2GnKKeMGJB5SGUUrEz3SFVmJASUdZUzy83sLNNQ2gZslg==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - hasBin: true - peerDependencies: - node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 - peerDependenciesMeta: - node-notifier: - optional: true + jest-cli@30.0.5(@types/node@24.1.0): dependencies: - '@jest/core': 29.7.0 - '@jest/test-result': 29.7.0 - '@jest/types': 29.6.3 + '@jest/core': 30.0.5 + '@jest/test-result': 30.0.5 + '@jest/types': 30.0.5 chalk: 4.1.2 - create-jest: 29.7.0(@types/node@20.12.13) - exit: 0.1.2 - import-local: 3.1.0 - jest-config: 29.7.0(@types/node@20.12.13) - jest-util: 29.7.0 - jest-validate: 29.7.0 + exit-x: 0.2.2 + import-local: 3.2.0 + jest-config: 30.0.5(@types/node@24.1.0) + jest-util: 30.0.5 + jest-validate: 30.0.5 yargs: 17.7.2 transitivePeerDependencies: - '@types/node' - babel-plugin-macros + - esbuild-register - supports-color - ts-node - dev: true - /jest-config@29.7.0(@types/node@20.12.13): - resolution: {integrity: sha512-uXbpfeQ7R6TZBqI3/TxCU4q4ttk3u0PJeC+E0zbfSoSjq6bJ7buBPxzQPL0ifrkY4DNu4JUdk0ImlBUYi840eQ==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - peerDependencies: - '@types/node': '*' - ts-node: '>=9.0.0' - peerDependenciesMeta: - '@types/node': - optional: true - ts-node: - optional: true + jest-config@30.0.5(@types/node@24.1.0): dependencies: - '@babel/core': 7.23.0 - '@jest/test-sequencer': 29.7.0 - '@jest/types': 29.6.3 - '@types/node': 20.12.13 - babel-jest: 29.7.0(@babel/core@7.23.0) + '@babel/core': 7.28.0 + '@jest/get-type': 30.0.1 + '@jest/pattern': 30.0.1 + '@jest/test-sequencer': 30.0.5 + '@jest/types': 30.0.5 + babel-jest: 30.0.5(@babel/core@7.28.0) chalk: 4.1.2 - ci-info: 3.8.0 + ci-info: 4.3.0 deepmerge: 4.3.1 - glob: 7.2.3 + glob: 10.4.5 graceful-fs: 4.2.11 - jest-circus: 29.7.0 - jest-environment-node: 29.7.0 - jest-get-type: 29.6.3 - jest-regex-util: 29.6.3 - jest-resolve: 29.7.0 - jest-runner: 29.7.0 - jest-util: 29.7.0 - jest-validate: 29.7.0 - micromatch: 4.0.5 + jest-circus: 30.0.5 + jest-docblock: 30.0.1 + jest-environment-node: 30.0.5 + jest-regex-util: 30.0.1 + jest-resolve: 30.0.5 + jest-runner: 30.0.5 + jest-util: 30.0.5 + jest-validate: 30.0.5 + micromatch: 4.0.8 parse-json: 5.2.0 - pretty-format: 29.7.0 + pretty-format: 30.0.5 slash: 3.0.0 strip-json-comments: 3.1.1 + optionalDependencies: + '@types/node': 24.1.0 transitivePeerDependencies: - babel-plugin-macros - supports-color - dev: true - /jest-diff@29.7.0: - resolution: {integrity: sha512-LMIgiIrhigmPrs03JHpxUh2yISK3vLFPkAodPeo0+BuF7wA2FoQbkEg1u8gBYBThncu7e1oEDUfIXVuTqLRUjw==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + jest-diff@30.0.4: + dependencies: + '@jest/diff-sequences': 30.0.1 + '@jest/get-type': 30.0.1 + chalk: 4.1.2 + pretty-format: 30.0.2 + + jest-diff@30.0.5: dependencies: + '@jest/diff-sequences': 30.0.1 + '@jest/get-type': 30.0.1 chalk: 4.1.2 - diff-sequences: 29.6.3 - jest-get-type: 29.6.3 - pretty-format: 29.7.0 - dev: true + pretty-format: 30.0.5 - /jest-docblock@29.7.0: - resolution: {integrity: sha512-q617Auw3A612guyaFgsbFeYpNP5t2aoUNLwBUbc/0kD1R4t9ixDbyFTHd1nok4epoVFpr7PmeWHrhvuV3XaJ4g==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + jest-docblock@30.0.1: dependencies: detect-newline: 3.1.0 - dev: true - /jest-each@29.7.0: - resolution: {integrity: sha512-gns+Er14+ZrEoC5fhOfYCY1LOHHr0TI+rQUHZS8Ttw2l7gl+80eHc/gFf2Ktkw0+SIACDTeWvpFcv3B04VembQ==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + jest-each@30.0.5: dependencies: - '@jest/types': 29.6.3 + '@jest/get-type': 30.0.1 + '@jest/types': 30.0.5 chalk: 4.1.2 - jest-get-type: 29.6.3 - jest-util: 29.7.0 - pretty-format: 29.7.0 - dev: true - - /jest-environment-node@29.7.0: - resolution: {integrity: sha512-DOSwCRqXirTOyheM+4d5YZOrWcdu0LNZ87ewUoywbcb2XR4wKgqiG8vNeYwhjFMbEkfju7wx2GYH0P2gevGvFw==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - dependencies: - '@jest/environment': 29.7.0 - '@jest/fake-timers': 29.7.0 - '@jest/types': 29.6.3 - '@types/node': 20.12.13 - jest-mock: 29.7.0 - jest-util: 29.7.0 - dev: true - - /jest-get-type@29.6.3: - resolution: {integrity: sha512-zrteXnqYxfQh7l5FHyL38jL39di8H8rHoecLH3JNxH3BwOrBsNeabdap5e0I23lD4HHI8W5VFBZqG4Eaq5LNcw==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - dev: true - - /jest-haste-map@29.7.0: - resolution: {integrity: sha512-fP8u2pyfqx0K1rGn1R9pyE0/KTn+G7PxktWidOBTqFPLYX0b9ksaMFkhK5vrS3DVun09pckLdlx90QthlW7AmA==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - dependencies: - '@jest/types': 29.6.3 - '@types/graceful-fs': 4.1.7 - '@types/node': 20.12.13 + jest-util: 30.0.5 + pretty-format: 30.0.5 + + jest-environment-node@30.0.5: + dependencies: + '@jest/environment': 30.0.5 + '@jest/fake-timers': 30.0.5 + '@jest/types': 30.0.5 + '@types/node': 24.1.0 + jest-mock: 30.0.5 + jest-util: 30.0.5 + jest-validate: 30.0.5 + + jest-haste-map@30.0.5: + dependencies: + '@jest/types': 30.0.5 + '@types/node': 24.1.0 anymatch: 3.1.3 fb-watchman: 2.0.2 graceful-fs: 4.2.11 - jest-regex-util: 29.6.3 - jest-util: 29.7.0 - jest-worker: 29.7.0 - micromatch: 4.0.5 + jest-regex-util: 30.0.1 + jest-util: 30.0.5 + jest-worker: 30.0.5 + micromatch: 4.0.8 walker: 1.0.8 optionalDependencies: fsevents: 2.3.3 - dev: true - /jest-leak-detector@29.7.0: - resolution: {integrity: sha512-kYA8IJcSYtST2BY9I+SMC32nDpBT3J2NvWJx8+JCuCdl/CR1I4EKUJROiP8XtCcxqgTTBGJNdbB1A8XRKbTetw==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + jest-leak-detector@30.0.5: + dependencies: + '@jest/get-type': 30.0.1 + pretty-format: 30.0.5 + + jest-matcher-utils@30.0.4: + dependencies: + '@jest/get-type': 30.0.1 + chalk: 4.1.2 + jest-diff: 30.0.4 + pretty-format: 30.0.2 + + jest-matcher-utils@30.0.5: + dependencies: + '@jest/get-type': 30.0.1 + chalk: 4.1.2 + jest-diff: 30.0.5 + pretty-format: 30.0.5 + + jest-message-util@30.0.2: dependencies: - jest-get-type: 29.6.3 - pretty-format: 29.7.0 - dev: true + '@babel/code-frame': 7.27.1 + '@jest/types': 30.0.1 + '@types/stack-utils': 2.0.3 + chalk: 4.1.2 + graceful-fs: 4.2.11 + micromatch: 4.0.8 + pretty-format: 30.0.2 + slash: 3.0.0 + stack-utils: 2.0.6 - /jest-matcher-utils@29.7.0: - resolution: {integrity: sha512-sBkD+Xi9DtcChsI3L3u0+N0opgPYnCRPtGcQYrgXmR+hmt/fYfWAL0xRXYU8eWOdfuLgBe0YCW3AFtnRLagq/g==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + jest-message-util@30.0.5: dependencies: - chalk: 4.1.2 - jest-diff: 29.7.0 - jest-get-type: 29.6.3 - pretty-format: 29.7.0 - dev: true - - /jest-message-util@29.7.0: - resolution: {integrity: sha512-GBEV4GRADeP+qtB2+6u61stea8mGcOT4mCtrYISZwfu9/ISHFJ/5zOMXYbpBE9RsS5+Gb63DW4FgmnKJ79Kf6w==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - dependencies: - '@babel/code-frame': 7.22.13 - '@jest/types': 29.6.3 - '@types/stack-utils': 2.0.1 + '@babel/code-frame': 7.27.1 + '@jest/types': 30.0.5 + '@types/stack-utils': 2.0.3 chalk: 4.1.2 graceful-fs: 4.2.11 - micromatch: 4.0.5 - pretty-format: 29.7.0 + micromatch: 4.0.8 + pretty-format: 30.0.5 slash: 3.0.0 stack-utils: 2.0.6 - dev: true - /jest-mock@29.7.0: - resolution: {integrity: sha512-ITOMZn+UkYS4ZFh83xYAOzWStloNzJFO2s8DWrE4lhtGD+AorgnbkiKERe4wQVBydIGPx059g6riW5Btp6Llnw==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + jest-mock@30.0.2: dependencies: - '@jest/types': 29.6.3 - '@types/node': 20.12.13 - jest-util: 29.7.0 - dev: true + '@jest/types': 30.0.1 + '@types/node': 24.1.0 + jest-util: 30.0.2 - /jest-pnp-resolver@1.2.3(jest-resolve@29.7.0): - resolution: {integrity: sha512-+3NpwQEnRoIBtx4fyhblQDPgJI0H1IEIkX7ShLUjPGA7TtUTvI1oiKi3SR4oBR0hQhQR80l4WAe5RrXBwWMA8w==} - engines: {node: '>=6'} - peerDependencies: - jest-resolve: '*' - peerDependenciesMeta: - jest-resolve: - optional: true + jest-mock@30.0.5: dependencies: - jest-resolve: 29.7.0 - dev: true + '@jest/types': 30.0.5 + '@types/node': 24.1.0 + jest-util: 30.0.5 + + jest-pnp-resolver@1.2.3(jest-resolve@30.0.5): + optionalDependencies: + jest-resolve: 30.0.5 - /jest-regex-util@29.6.3: - resolution: {integrity: sha512-KJJBsRCyyLNWCNBOvZyRDnAIfUiRJ8v+hOBQYGn8gDyF3UegwiP4gwRR3/SDa42g1YbVycTidUF3rKjyLFDWbg==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - dev: true + jest-regex-util@30.0.1: {} - /jest-resolve-dependencies@29.7.0: - resolution: {integrity: sha512-un0zD/6qxJ+S0et7WxeI3H5XSe9lTBBR7bOHCHXkKR6luG5mwDDlIzVQ0V5cZCuoTgEdcdwzTghYkTWfubi+nA==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + jest-resolve-dependencies@30.0.5: dependencies: - jest-regex-util: 29.6.3 - jest-snapshot: 29.7.0 + jest-regex-util: 30.0.1 + jest-snapshot: 30.0.5 transitivePeerDependencies: - supports-color - dev: true - /jest-resolve@29.7.0: - resolution: {integrity: sha512-IOVhZSrg+UvVAshDSDtHyFCCBUl/Q3AAJv8iZ6ZjnZ74xzvwuzLXid9IIIPgTnY62SJjfuupMKZsZQRsCvxEgA==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + jest-resolve@30.0.5: dependencies: chalk: 4.1.2 graceful-fs: 4.2.11 - jest-haste-map: 29.7.0 - jest-pnp-resolver: 1.2.3(jest-resolve@29.7.0) - jest-util: 29.7.0 - jest-validate: 29.7.0 - resolve: 1.22.6 - resolve.exports: 2.0.2 + jest-haste-map: 30.0.5 + jest-pnp-resolver: 1.2.3(jest-resolve@30.0.5) + jest-util: 30.0.5 + jest-validate: 30.0.5 slash: 3.0.0 - dev: true - - /jest-runner@29.7.0: - resolution: {integrity: sha512-fsc4N6cPCAahybGBfTRcq5wFR6fpLznMg47sY5aDpsoejOcVYFb07AHuSnR0liMcPTgBsA3ZJL6kFOjPdoNipQ==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - dependencies: - '@jest/console': 29.7.0 - '@jest/environment': 29.7.0 - '@jest/test-result': 29.7.0 - '@jest/transform': 29.7.0 - '@jest/types': 29.6.3 - '@types/node': 20.12.13 + unrs-resolver: 1.11.1 + + jest-runner@30.0.5: + dependencies: + '@jest/console': 30.0.5 + '@jest/environment': 30.0.5 + '@jest/test-result': 30.0.5 + '@jest/transform': 30.0.5 + '@jest/types': 30.0.5 + '@types/node': 24.1.0 chalk: 4.1.2 emittery: 0.13.1 + exit-x: 0.2.2 graceful-fs: 4.2.11 - jest-docblock: 29.7.0 - jest-environment-node: 29.7.0 - jest-haste-map: 29.7.0 - jest-leak-detector: 29.7.0 - jest-message-util: 29.7.0 - jest-resolve: 29.7.0 - jest-runtime: 29.7.0 - jest-util: 29.7.0 - jest-watcher: 29.7.0 - jest-worker: 29.7.0 + jest-docblock: 30.0.1 + jest-environment-node: 30.0.5 + jest-haste-map: 30.0.5 + jest-leak-detector: 30.0.5 + jest-message-util: 30.0.5 + jest-resolve: 30.0.5 + jest-runtime: 30.0.5 + jest-util: 30.0.5 + jest-watcher: 30.0.5 + jest-worker: 30.0.5 p-limit: 3.1.0 source-map-support: 0.5.13 transitivePeerDependencies: - supports-color - dev: true - - /jest-runtime@29.7.0: - resolution: {integrity: sha512-gUnLjgwdGqW7B4LvOIkbKs9WGbn+QLqRQQ9juC6HndeDiezIwhDP+mhMwHWCEcfQ5RUXa6OPnFF8BJh5xegwwQ==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - dependencies: - '@jest/environment': 29.7.0 - '@jest/fake-timers': 29.7.0 - '@jest/globals': 29.7.0 - '@jest/source-map': 29.6.3 - '@jest/test-result': 29.7.0 - '@jest/transform': 29.7.0 - '@jest/types': 29.6.3 - '@types/node': 20.12.13 + + jest-runtime@30.0.5: + dependencies: + '@jest/environment': 30.0.5 + '@jest/fake-timers': 30.0.5 + '@jest/globals': 30.0.5 + '@jest/source-map': 30.0.1 + '@jest/test-result': 30.0.5 + '@jest/transform': 30.0.5 + '@jest/types': 30.0.5 + '@types/node': 24.1.0 chalk: 4.1.2 - cjs-module-lexer: 1.2.3 + cjs-module-lexer: 2.1.0 collect-v8-coverage: 1.0.2 - glob: 7.2.3 + glob: 10.4.5 graceful-fs: 4.2.11 - jest-haste-map: 29.7.0 - jest-message-util: 29.7.0 - jest-mock: 29.7.0 - jest-regex-util: 29.6.3 - jest-resolve: 29.7.0 - jest-snapshot: 29.7.0 - jest-util: 29.7.0 + jest-haste-map: 30.0.5 + jest-message-util: 30.0.5 + jest-mock: 30.0.5 + jest-regex-util: 30.0.1 + jest-resolve: 30.0.5 + jest-snapshot: 30.0.5 + jest-util: 30.0.5 slash: 3.0.0 strip-bom: 4.0.0 transitivePeerDependencies: - supports-color - dev: true - - /jest-snapshot@29.7.0: - resolution: {integrity: sha512-Rm0BMWtxBcioHr1/OX5YCP8Uov4riHvKPknOGs804Zg9JGZgmIBkbtlxJC/7Z4msKYVbIJtfU+tKb8xlYNfdkw==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - dependencies: - '@babel/core': 7.23.0 - '@babel/generator': 7.23.0 - '@babel/plugin-syntax-jsx': 7.22.5(@babel/core@7.23.0) - '@babel/plugin-syntax-typescript': 7.22.5(@babel/core@7.23.0) - '@babel/types': 7.23.0 - '@jest/expect-utils': 29.7.0 - '@jest/transform': 29.7.0 - '@jest/types': 29.6.3 - babel-preset-current-node-syntax: 1.0.1(@babel/core@7.23.0) + + jest-snapshot@30.0.5: + dependencies: + '@babel/core': 7.28.0 + '@babel/generator': 7.28.0 + '@babel/plugin-syntax-jsx': 7.27.1(@babel/core@7.28.0) + '@babel/plugin-syntax-typescript': 7.27.1(@babel/core@7.28.0) + '@babel/types': 7.28.1 + '@jest/expect-utils': 30.0.5 + '@jest/get-type': 30.0.1 + '@jest/snapshot-utils': 30.0.5 + '@jest/transform': 30.0.5 + '@jest/types': 30.0.5 + babel-preset-current-node-syntax: 1.1.0(@babel/core@7.28.0) chalk: 4.1.2 - expect: 29.7.0 + expect: 30.0.5 graceful-fs: 4.2.11 - jest-diff: 29.7.0 - jest-get-type: 29.6.3 - jest-matcher-utils: 29.7.0 - jest-message-util: 29.7.0 - jest-util: 29.7.0 - natural-compare: 1.4.0 - pretty-format: 29.7.0 - semver: 7.5.4 + jest-diff: 30.0.5 + jest-matcher-utils: 30.0.5 + jest-message-util: 30.0.5 + jest-util: 30.0.5 + pretty-format: 30.0.5 + semver: 7.7.2 + synckit: 0.11.8 transitivePeerDependencies: - supports-color - dev: true - /jest-util@29.7.0: - resolution: {integrity: sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + jest-util@30.0.2: dependencies: - '@jest/types': 29.6.3 - '@types/node': 20.12.13 + '@jest/types': 30.0.1 + '@types/node': 24.1.0 chalk: 4.1.2 - ci-info: 3.8.0 + ci-info: 4.3.0 graceful-fs: 4.2.11 - picomatch: 2.3.1 - dev: true + picomatch: 4.0.3 + + jest-util@30.0.5: + dependencies: + '@jest/types': 30.0.5 + '@types/node': 24.1.0 + chalk: 4.1.2 + ci-info: 4.3.0 + graceful-fs: 4.2.11 + picomatch: 4.0.3 - /jest-validate@29.7.0: - resolution: {integrity: sha512-ZB7wHqaRGVw/9hST/OuFUReG7M8vKeq0/J2egIGLdvjHCmYqGARhzXmtgi+gVeZ5uXFF219aOc3Ls2yLg27tkw==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + jest-validate@30.0.5: dependencies: - '@jest/types': 29.6.3 + '@jest/get-type': 30.0.1 + '@jest/types': 30.0.5 camelcase: 6.3.0 chalk: 4.1.2 - jest-get-type: 29.6.3 leven: 3.1.0 - pretty-format: 29.7.0 - dev: true + pretty-format: 30.0.5 - /jest-watcher@29.7.0: - resolution: {integrity: sha512-49Fg7WXkU3Vl2h6LbLtMQ/HyB6rXSIX7SqvBLQmssRBGN9I0PNvPmAmCWSOY6SOvrjhI/F7/bGAv9RtnsPA03g==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + jest-watcher@30.0.5: dependencies: - '@jest/test-result': 29.7.0 - '@jest/types': 29.6.3 - '@types/node': 20.12.13 + '@jest/test-result': 30.0.5 + '@jest/types': 30.0.5 + '@types/node': 24.1.0 ansi-escapes: 4.3.2 chalk: 4.1.2 emittery: 0.13.1 - jest-util: 29.7.0 + jest-util: 30.0.5 string-length: 4.0.2 - dev: true - /jest-worker@29.7.0: - resolution: {integrity: sha512-eIz2msL/EzL9UFTFFx7jBTkeZfku0yUAyZZZmJ93H2TYEiroIx2PQjEXcwYtYl8zXCxb+PAmA2hLIt/6ZEkPHw==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + jest-worker@30.0.5: dependencies: - '@types/node': 20.12.13 - jest-util: 29.7.0 + '@types/node': 24.1.0 + '@ungap/structured-clone': 1.3.0 + jest-util: 30.0.5 merge-stream: 2.0.0 supports-color: 8.1.1 - dev: true - /jest@29.7.0(@types/node@20.12.13): - resolution: {integrity: sha512-NIy3oAFp9shda19hy4HK0HRTWKtPJmGdnvywu01nOqNC2vZg+Z+fvJDxpMQA88eb2I9EcafcdjYgsDthnYTvGw==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - hasBin: true - peerDependencies: - node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 - peerDependenciesMeta: - node-notifier: - optional: true + jest@30.0.5(@types/node@24.1.0): dependencies: - '@jest/core': 29.7.0 - '@jest/types': 29.6.3 - import-local: 3.1.0 - jest-cli: 29.7.0(@types/node@20.12.13) + '@jest/core': 30.0.5 + '@jest/types': 30.0.5 + import-local: 3.2.0 + jest-cli: 30.0.5(@types/node@24.1.0) transitivePeerDependencies: - '@types/node' - babel-plugin-macros + - esbuild-register - supports-color - ts-node - dev: true - /jiti@1.21.0: - resolution: {integrity: sha512-gFqAIbuKyyso/3G2qhiO2OM6shY6EPP/R0+mkDbyspxKazh8BXDC5FiFsUjlczgdNz/vfra0da2y+aHrusLG/Q==} - hasBin: true - dev: true + jiti@2.4.2: {} - /js-tokens@4.0.0: - resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} - dev: true + js-tokens@4.0.0: {} - /js-yaml@3.14.1: - resolution: {integrity: sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==} - hasBin: true + js-yaml@3.14.1: dependencies: argparse: 1.0.10 esprima: 4.0.1 - dev: true - /js-yaml@4.1.0: - resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==} - hasBin: true + js-yaml@4.1.0: dependencies: argparse: 2.0.1 - dev: true - /jsesc@2.5.2: - resolution: {integrity: sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==} - engines: {node: '>=4'} - hasBin: true - dev: true + jsesc@3.1.0: {} - /json-buffer@2.0.11: - resolution: {integrity: sha512-Wu4/hxSZX7Krzjor+sZHWaRau6Be4WQHlrkl3v8cmxRBBewF2TotlgHUedKQJyFiUyFxnK/ZlRYnR9UNVZ7pkg==} - dev: false + json-buffer@2.0.11: {} - /json-buffer@3.0.1: - resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==} - dev: true + json-buffer@3.0.1: {} - /json-parse-even-better-errors@2.3.1: - resolution: {integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==} - dev: true + json-parse-even-better-errors@2.3.1: {} - /json-schema-traverse@0.4.1: - resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==} - dev: true + json-schema-traverse@0.4.1: {} - /json-schema-traverse@1.0.0: - resolution: {integrity: sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==} - dev: true + json-schema-traverse@1.0.0: {} - /json-stable-stringify-without-jsonify@1.0.1: - resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==} - dev: true + json-stable-stringify-without-jsonify@1.0.1: {} - /json5@2.2.3: - resolution: {integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==} - engines: {node: '>=6'} - hasBin: true - dev: true + json5@2.2.3: {} - /jsonparse@1.3.1: - resolution: {integrity: sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg==} - engines: {'0': node >= 0.2.0} - dev: true + jsonparse@1.3.1: {} - /keccak@3.0.4: - resolution: {integrity: sha512-3vKuW0jV8J3XNTzvfyicFR5qvxrSAGl7KIhvgOu5cmWwM7tZRj3fMbj/pfIf4be7aznbc+prBWGjywox/g2Y6Q==} - engines: {node: '>=10.0.0'} - requiresBuild: true + keccak@3.0.4: dependencies: node-addon-api: 2.0.2 - node-gyp-build: 4.6.1 + node-gyp-build: 4.8.4 readable-stream: 3.6.2 - dev: false - /keyv@4.5.3: - resolution: {integrity: sha512-QCiSav9WaX1PgETJ+SpNnx2PRRapJ/oRSXM4VO5OGYGSjrxbKPVFVhB3l2OCbLCk329N8qyAtsJjSjvVBWzEug==} + keyv@4.5.4: dependencies: json-buffer: 3.0.1 - dev: true - - /kind-of@6.0.3: - resolution: {integrity: sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==} - engines: {node: '>=0.10.0'} - dev: true - /kleur@3.0.3: - resolution: {integrity: sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==} - engines: {node: '>=6'} - dev: true - - /leven@3.1.0: - resolution: {integrity: sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==} - engines: {node: '>=6'} - dev: true + leven@3.1.0: {} - /levn@0.4.1: - resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==} - engines: {node: '>= 0.8.0'} + levn@0.4.1: dependencies: prelude-ls: 1.2.1 type-check: 0.4.0 - dev: true - /lines-and-columns@1.2.4: - resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} - dev: true + lines-and-columns@1.2.4: {} - /locate-path@5.0.0: - resolution: {integrity: sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==} - engines: {node: '>=8'} + locate-path@5.0.0: dependencies: p-locate: 4.1.0 - dev: true - /locate-path@6.0.0: - resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==} - engines: {node: '>=10'} + locate-path@6.0.0: dependencies: p-locate: 5.0.0 - dev: true - /locate-path@7.2.0: - resolution: {integrity: sha512-gvVijfZvn7R+2qyPX8mAuKcFGDf6Nc61GdvGafQsHL0sBIxfKzA+usWn4GFC/bk+QdwPUD4kWFJLhElipq+0VA==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + locate-path@7.2.0: dependencies: p-locate: 6.0.0 - dev: true - /lodash.camelcase@4.3.0: - resolution: {integrity: sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==} - dev: true + lodash.camelcase@4.3.0: {} - /lodash.isplainobject@4.0.6: - resolution: {integrity: sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==} - dev: true + lodash.isplainobject@4.0.6: {} - /lodash.kebabcase@4.1.1: - resolution: {integrity: sha512-N8XRTIMMqqDgSy4VLKPnJ/+hpGZN+PHQiJnSenYqPaVV/NCqEogTnAdZLQiGKhxX+JCs8waWq2t1XHWKOmlY8g==} - dev: true + lodash.kebabcase@4.1.1: {} - /lodash.memoize@4.1.2: - resolution: {integrity: sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==} - dev: true + lodash.memoize@4.1.2: {} - /lodash.merge@4.6.2: - resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==} - dev: true + lodash.merge@4.6.2: {} - /lodash.mergewith@4.6.2: - resolution: {integrity: sha512-GK3g5RPZWTRSeLSpgP8Xhra+pnjBC56q9FZYe1d5RN3TJ35dbkGy3YqBSMbyCrlbi+CM9Z3Jk5yTL7RCsqboyQ==} - dev: true + lodash.mergewith@4.6.2: {} - /lodash.snakecase@4.1.1: - resolution: {integrity: sha512-QZ1d4xoBHYUeuouhEq3lk3Uq7ldgyFXGBhg04+oRLnIz8o9T65Eh+8YdroUwn846zchkA9yDsDl5CVVaV2nqYw==} - dev: true + lodash.snakecase@4.1.1: {} - /lodash.startcase@4.4.0: - resolution: {integrity: sha512-+WKqsK294HMSc2jEbNgpHpd0JfIBhp7rEV4aqXWqFr6AlXov+SlcgB1Fv01y2kGe3Gc8nMW7VA0SrGuSkRfIEg==} - dev: true + lodash.startcase@4.4.0: {} - /lodash.uniq@4.5.0: - resolution: {integrity: sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ==} - dev: true + lodash.uniq@4.5.0: {} - /lodash.upperfirst@4.3.1: - resolution: {integrity: sha512-sReKOYJIJf74dhJONhU4e0/shzi1trVbSWDOhKYE5XV2O+H7Sb2Dihwuc7xWxVl+DgFPyTqIN3zMfT9cq5iWDg==} - dev: true + lodash.upperfirst@4.3.1: {} - /lodash@4.17.21: - resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==} - dev: true + long@3.2.0: {} - /long@3.2.0: - resolution: {integrity: sha512-ZYvPPOMqUwPoDsbJaR10iQJYnMuZhRTvHYl62ErLIEX7RgFlziSBUUvrt3OVfc47QlHHpzPZYP17g3Fv7oeJkg==} - engines: {node: '>=0.6'} - dev: false + longest-streak@3.1.0: {} - /lru-cache@5.1.1: - resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==} - dependencies: - yallist: 3.1.1 - dev: true + lru-cache@10.4.3: {} - /lru-cache@6.0.0: - resolution: {integrity: sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==} - engines: {node: '>=10'} + lru-cache@5.1.1: dependencies: - yallist: 4.0.0 - dev: true + yallist: 3.1.1 - /make-dir@4.0.0: - resolution: {integrity: sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==} - engines: {node: '>=10'} + make-dir@4.0.0: dependencies: - semver: 7.5.4 - dev: true + semver: 7.7.2 - /make-error@1.3.6: - resolution: {integrity: sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==} - dev: true + make-error@1.3.6: {} - /makeerror@1.0.12: - resolution: {integrity: sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==} + makeerror@1.0.12: dependencies: tmpl: 1.0.5 - dev: true - /map-obj@1.0.1: - resolution: {integrity: sha512-7N/q3lyZ+LVCp7PzuxrJr4KMbBE2hW7BT7YNia330OFxIf4d3r5zVpicP2650l7CPN6RM9zOJRl3NGpqSiw3Eg==} - engines: {node: '>=0.10.0'} - dev: true + markdown-table@3.0.4: {} - /map-obj@4.3.0: - resolution: {integrity: sha512-hdN1wVrZbb29eBGiGjJbeP8JbKjq1urkHJ/LIP/NY48MZ1QVXUsQBV1G1zvYFHn1XE06cwjBsOI2K3Ulnj1YXQ==} - engines: {node: '>=8'} - dev: true + math-intrinsics@1.1.0: {} - /md5.js@1.3.5: - resolution: {integrity: sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==} + md5.js@1.3.5: dependencies: hash-base: 3.1.0 inherits: 2.0.4 safe-buffer: 5.2.1 - dev: false - /meow@12.1.1: - resolution: {integrity: sha512-BhXM0Au22RwUneMPwSCnyhTOizdWoIEPU9sp0Aqa1PnDMR5Wv2FGXYDjuzJEIX+Eo2Rb8xuYe5jrnm5QowQFkw==} - engines: {node: '>=16.10'} - dev: true + mdast-util-find-and-replace@3.0.2: + dependencies: + '@types/mdast': 4.0.4 + escape-string-regexp: 5.0.0 + unist-util-is: 6.0.0 + unist-util-visit-parents: 6.0.1 + + mdast-util-from-markdown@2.0.2: + dependencies: + '@types/mdast': 4.0.4 + '@types/unist': 3.0.3 + decode-named-character-reference: 1.2.0 + devlop: 1.1.0 + mdast-util-to-string: 4.0.0 + micromark: 4.0.2 + micromark-util-decode-numeric-character-reference: 2.0.2 + micromark-util-decode-string: 2.0.1 + micromark-util-normalize-identifier: 2.0.1 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 + unist-util-stringify-position: 4.0.0 + transitivePeerDependencies: + - supports-color - /meow@9.0.0: - resolution: {integrity: sha512-+obSblOQmRhcyBt62furQqRAQpNyWXo8BuQ5bN7dG8wmwQ+vwHKp/rCFD4CrTP8CsDQD1sjoZ94K417XEUk8IQ==} - engines: {node: '>=10'} + mdast-util-frontmatter@2.0.1: dependencies: - '@types/minimist': 1.2.3 - camelcase-keys: 6.2.2 - decamelize: 1.2.0 - decamelize-keys: 1.1.1 - hard-rejection: 2.1.0 - minimist-options: 4.1.0 - normalize-package-data: 3.0.3 - read-pkg-up: 7.0.1 - redent: 3.0.0 - trim-newlines: 3.0.1 - type-fest: 0.18.1 - yargs-parser: 20.2.9 - dev: true - - /merge-stream@2.0.0: - resolution: {integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==} - dev: true + '@types/mdast': 4.0.4 + devlop: 1.1.0 + escape-string-regexp: 5.0.0 + mdast-util-from-markdown: 2.0.2 + mdast-util-to-markdown: 2.1.2 + micromark-extension-frontmatter: 2.0.0 + transitivePeerDependencies: + - supports-color - /merge2@1.4.1: - resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} - engines: {node: '>= 8'} - dev: true + mdast-util-gfm-autolink-literal@2.0.1: + dependencies: + '@types/mdast': 4.0.4 + ccount: 2.0.1 + devlop: 1.1.0 + mdast-util-find-and-replace: 3.0.2 + micromark-util-character: 2.1.1 - /micromatch@4.0.5: - resolution: {integrity: sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==} - engines: {node: '>=8.6'} + mdast-util-gfm-footnote@2.1.0: dependencies: - braces: 3.0.2 - picomatch: 2.3.1 - dev: true + '@types/mdast': 4.0.4 + devlop: 1.1.0 + mdast-util-from-markdown: 2.0.2 + mdast-util-to-markdown: 2.1.2 + micromark-util-normalize-identifier: 2.0.1 + transitivePeerDependencies: + - supports-color - /mime-db@1.52.0: - resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==} - engines: {node: '>= 0.6'} - dev: false + mdast-util-gfm-strikethrough@2.0.0: + dependencies: + '@types/mdast': 4.0.4 + mdast-util-from-markdown: 2.0.2 + mdast-util-to-markdown: 2.1.2 + transitivePeerDependencies: + - supports-color - /mime-types@2.1.35: - resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==} - engines: {node: '>= 0.6'} + mdast-util-gfm-table@2.0.0: dependencies: - mime-db: 1.52.0 - dev: false + '@types/mdast': 4.0.4 + devlop: 1.1.0 + markdown-table: 3.0.4 + mdast-util-from-markdown: 2.0.2 + mdast-util-to-markdown: 2.1.2 + transitivePeerDependencies: + - supports-color - /mimic-fn@2.1.0: - resolution: {integrity: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==} - engines: {node: '>=6'} - dev: true + mdast-util-gfm-task-list-item@2.0.0: + dependencies: + '@types/mdast': 4.0.4 + devlop: 1.1.0 + mdast-util-from-markdown: 2.0.2 + mdast-util-to-markdown: 2.1.2 + transitivePeerDependencies: + - supports-color - /mimic-fn@4.0.0: - resolution: {integrity: sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==} - engines: {node: '>=12'} - dev: true + mdast-util-gfm@3.1.0: + dependencies: + mdast-util-from-markdown: 2.0.2 + mdast-util-gfm-autolink-literal: 2.0.1 + mdast-util-gfm-footnote: 2.1.0 + mdast-util-gfm-strikethrough: 2.0.0 + mdast-util-gfm-table: 2.0.0 + mdast-util-gfm-task-list-item: 2.0.0 + mdast-util-to-markdown: 2.1.2 + transitivePeerDependencies: + - supports-color - /min-indent@1.0.1: - resolution: {integrity: sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==} - engines: {node: '>=4'} - dev: true + mdast-util-phrasing@4.1.0: + dependencies: + '@types/mdast': 4.0.4 + unist-util-is: 6.0.0 - /minimalistic-assert@1.0.1: - resolution: {integrity: sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==} - dev: false + mdast-util-to-markdown@2.1.2: + dependencies: + '@types/mdast': 4.0.4 + '@types/unist': 3.0.3 + longest-streak: 3.1.0 + mdast-util-phrasing: 4.1.0 + mdast-util-to-string: 4.0.0 + micromark-util-classify-character: 2.0.1 + micromark-util-decode-string: 2.0.1 + unist-util-visit: 5.0.0 + zwitch: 2.0.4 - /minimalistic-crypto-utils@1.0.1: - resolution: {integrity: sha512-JIYlbt6g8i5jKfJ3xz7rF0LXmv2TkDxBLUkiBeZ7bAx4GnnNMr8xFpGnOxn6GhTEHx3SjRrZEoU+j04prX1ktg==} - dev: false + mdast-util-to-string@4.0.0: + dependencies: + '@types/mdast': 4.0.4 - /minimatch@3.1.2: - resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} + meow@12.1.1: {} + + merge-stream@2.0.0: {} + + merge2@1.4.1: {} + + micromark-core-commonmark@2.0.3: dependencies: - brace-expansion: 1.1.11 - dev: true + decode-named-character-reference: 1.2.0 + devlop: 1.1.0 + micromark-factory-destination: 2.0.1 + micromark-factory-label: 2.0.1 + micromark-factory-space: 2.0.1 + micromark-factory-title: 2.0.1 + micromark-factory-whitespace: 2.0.1 + micromark-util-character: 2.1.1 + micromark-util-chunked: 2.0.1 + micromark-util-classify-character: 2.0.1 + micromark-util-html-tag-name: 2.0.1 + micromark-util-normalize-identifier: 2.0.1 + micromark-util-resolve-all: 2.0.1 + micromark-util-subtokenize: 2.1.0 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 - /minimatch@9.0.4: - resolution: {integrity: sha512-KqWh+VchfxcMNRAJjj2tnsSJdNbHsVgnkBhTNrW7AjVo6OvLtxw8zfT9oLw1JSohlFzJ8jCoTgaoXvJ+kHt6fw==} - engines: {node: '>=16 || 14 >=14.17'} + micromark-extension-frontmatter@2.0.0: dependencies: - brace-expansion: 2.0.1 - dev: true + fault: 2.0.1 + micromark-util-character: 2.1.1 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 - /minimist-options@4.1.0: - resolution: {integrity: sha512-Q4r8ghd80yhO/0j1O3B2BjweX3fiHg9cdOwjJd2J76Q135c+NDxGCqdYKQ1SKBuFfgWbAUzBfvYjPUEeNgqN1A==} - engines: {node: '>= 6'} + micromark-extension-gfm-autolink-literal@2.1.0: dependencies: - arrify: 1.0.1 - is-plain-obj: 1.1.0 - kind-of: 6.0.3 - dev: true + micromark-util-character: 2.1.1 + micromark-util-sanitize-uri: 2.0.1 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 - /minimist@1.2.8: - resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==} - dev: true + micromark-extension-gfm-footnote@2.1.0: + dependencies: + devlop: 1.1.0 + micromark-core-commonmark: 2.0.3 + micromark-factory-space: 2.0.1 + micromark-util-character: 2.1.1 + micromark-util-normalize-identifier: 2.0.1 + micromark-util-sanitize-uri: 2.0.1 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 - /ms@2.1.2: - resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==} + micromark-extension-gfm-strikethrough@2.1.0: + dependencies: + devlop: 1.1.0 + micromark-util-chunked: 2.0.1 + micromark-util-classify-character: 2.0.1 + micromark-util-resolve-all: 2.0.1 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 - /mute-stream@0.0.8: - resolution: {integrity: sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==} - dev: true + micromark-extension-gfm-table@2.1.1: + dependencies: + devlop: 1.1.0 + micromark-factory-space: 2.0.1 + micromark-util-character: 2.1.1 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 - /natural-compare-lite@1.4.0: - resolution: {integrity: sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g==} - dev: true + micromark-extension-gfm-tagfilter@2.0.0: + dependencies: + micromark-util-types: 2.0.2 - /natural-compare@1.4.0: - resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} - dev: true + micromark-extension-gfm-task-list-item@2.1.0: + dependencies: + devlop: 1.1.0 + micromark-factory-space: 2.0.1 + micromark-util-character: 2.1.1 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 - /ncp@2.0.0: - resolution: {integrity: sha512-zIdGUrPRFTUELUvr3Gmc7KZ2Sw/h1PiVM0Af/oHB6zgnV1ikqSfRk+TOufi79aHYCW3NiOXmr1BP5nWbzojLaA==} - hasBin: true - dev: true + micromark-extension-gfm@3.0.0: + dependencies: + micromark-extension-gfm-autolink-literal: 2.1.0 + micromark-extension-gfm-footnote: 2.1.0 + micromark-extension-gfm-strikethrough: 2.1.0 + micromark-extension-gfm-table: 2.1.1 + micromark-extension-gfm-tagfilter: 2.0.0 + micromark-extension-gfm-task-list-item: 2.1.0 + micromark-util-combine-extensions: 2.0.1 + micromark-util-types: 2.0.2 - /node-addon-api@2.0.2: - resolution: {integrity: sha512-Ntyt4AIXyaLIuMHF6IOoTakB3K+RWxwtsHNRxllEoA6vPwP9o4866g6YWDLUdnucilZhmkxiHwHr11gAENw+QA==} - dev: false + micromark-factory-destination@2.0.1: + dependencies: + micromark-util-character: 2.1.1 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 - /node-gyp-build@4.6.1: - resolution: {integrity: sha512-24vnklJmyRS8ViBNI8KbtK/r/DmXQMRiOMXTNz2nrTnAYUwjmEEbnnpB/+kt+yWRv73bPsSPRFddrcIbAxSiMQ==} - hasBin: true - dev: false + micromark-factory-label@2.0.1: + dependencies: + devlop: 1.1.0 + micromark-util-character: 2.1.1 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 - /node-int64@0.4.0: - resolution: {integrity: sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==} - dev: true + micromark-factory-space@2.0.1: + dependencies: + micromark-util-character: 2.1.1 + micromark-util-types: 2.0.2 - /node-releases@2.0.13: - resolution: {integrity: sha512-uYr7J37ae/ORWdZeQ1xxMJe3NtdmqMC/JZK+geofDrkLUApKRHPd18/TxtBOJ4A0/+uUIliorNrfYV6s1b02eQ==} - dev: true + micromark-factory-title@2.0.1: + dependencies: + micromark-factory-space: 2.0.1 + micromark-util-character: 2.1.1 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 - /normalize-package-data@2.5.0: - resolution: {integrity: sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==} + micromark-factory-whitespace@2.0.1: dependencies: - hosted-git-info: 2.8.9 - resolve: 1.22.6 - semver: 5.7.2 - validate-npm-package-license: 3.0.4 - dev: true + micromark-factory-space: 2.0.1 + micromark-util-character: 2.1.1 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 - /normalize-package-data@3.0.3: - resolution: {integrity: sha512-p2W1sgqij3zMMyRC067Dg16bfzVH+w7hyegmpIvZ4JNjqtGOVAIvLmjBx3yP7YTe9vKJgkoNOPjwQGogDoMXFA==} - engines: {node: '>=10'} + micromark-util-character@2.1.1: dependencies: - hosted-git-info: 4.1.0 - is-core-module: 2.13.0 - semver: 7.5.4 - validate-npm-package-license: 3.0.4 - dev: true + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 - /normalize-path@3.0.0: - resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} - engines: {node: '>=0.10.0'} - dev: true + micromark-util-chunked@2.0.1: + dependencies: + micromark-util-symbol: 2.0.1 - /npm-run-path@4.0.1: - resolution: {integrity: sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==} - engines: {node: '>=8'} + micromark-util-classify-character@2.0.1: dependencies: - path-key: 3.1.1 - dev: true + micromark-util-character: 2.1.1 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 - /npm-run-path@5.1.0: - resolution: {integrity: sha512-sJOdmRGrY2sjNTRMbSvluQqg+8X7ZK61yvzBEIDhz4f8z1TZFYABsqjjCBd/0PUNE9M6QDgHJXQkGUEm7Q+l9Q==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + micromark-util-combine-extensions@2.0.1: dependencies: - path-key: 4.0.0 - dev: true + micromark-util-chunked: 2.0.1 + micromark-util-types: 2.0.2 - /once@1.4.0: - resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} + micromark-util-decode-numeric-character-reference@2.0.2: dependencies: - wrappy: 1.0.2 - dev: true + micromark-util-symbol: 2.0.1 - /onetime@5.1.2: - resolution: {integrity: sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==} - engines: {node: '>=6'} + micromark-util-decode-string@2.0.1: dependencies: - mimic-fn: 2.1.0 - dev: true + decode-named-character-reference: 1.2.0 + micromark-util-character: 2.1.1 + micromark-util-decode-numeric-character-reference: 2.0.2 + micromark-util-symbol: 2.0.1 - /onetime@6.0.0: - resolution: {integrity: sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==} - engines: {node: '>=12'} + micromark-util-encode@2.0.1: {} + + micromark-util-html-tag-name@2.0.1: {} + + micromark-util-normalize-identifier@2.0.1: dependencies: - mimic-fn: 4.0.0 - dev: true + micromark-util-symbol: 2.0.1 - /optionator@0.9.3: - resolution: {integrity: sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==} - engines: {node: '>= 0.8.0'} + micromark-util-resolve-all@2.0.1: + dependencies: + micromark-util-types: 2.0.2 + + micromark-util-sanitize-uri@2.0.1: + dependencies: + micromark-util-character: 2.1.1 + micromark-util-encode: 2.0.1 + micromark-util-symbol: 2.0.1 + + micromark-util-subtokenize@2.1.0: + dependencies: + devlop: 1.1.0 + micromark-util-chunked: 2.0.1 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 + + micromark-util-symbol@2.0.1: {} + + micromark-util-types@2.0.2: {} + + micromark@4.0.2: + dependencies: + '@types/debug': 4.1.12 + debug: 4.4.1 + decode-named-character-reference: 1.2.0 + devlop: 1.1.0 + micromark-core-commonmark: 2.0.3 + micromark-factory-space: 2.0.1 + micromark-util-character: 2.1.1 + micromark-util-chunked: 2.0.1 + micromark-util-combine-extensions: 2.0.1 + micromark-util-decode-numeric-character-reference: 2.0.2 + micromark-util-encode: 2.0.1 + micromark-util-normalize-identifier: 2.0.1 + micromark-util-resolve-all: 2.0.1 + micromark-util-sanitize-uri: 2.0.1 + micromark-util-subtokenize: 2.1.0 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 + transitivePeerDependencies: + - supports-color + + micromatch@4.0.8: + dependencies: + braces: 3.0.3 + picomatch: 2.3.1 + + mime-db@1.52.0: {} + + mime-types@2.1.35: + dependencies: + mime-db: 1.52.0 + + mimic-fn@2.1.0: {} + + minimalistic-assert@1.0.1: {} + + minimalistic-crypto-utils@1.0.1: {} + + minimatch@3.1.2: + dependencies: + brace-expansion: 1.1.12 + + minimatch@5.1.6: + dependencies: + brace-expansion: 2.0.2 + + minimatch@9.0.5: + dependencies: + brace-expansion: 2.0.2 + + minimist@1.2.8: {} + + minipass@7.1.2: {} + + ms@2.1.3: {} + + napi-postinstall@0.3.0: {} + + natural-compare@1.4.0: {} + + node-addon-api@2.0.2: {} + + node-addon-api@5.1.0: {} + + node-gyp-build@4.8.4: {} + + node-int64@0.4.0: {} + + node-releases@2.0.19: {} + + normalize-path@3.0.0: {} + + npm-run-path@4.0.1: + dependencies: + path-key: 3.1.1 + + once@1.4.0: + dependencies: + wrappy: 1.0.2 + + onetime@5.1.2: + dependencies: + mimic-fn: 2.1.0 + + optionator@0.9.4: dependencies: - '@aashutoshrathi/word-wrap': 1.2.6 deep-is: 0.1.4 fast-levenshtein: 2.0.6 levn: 0.4.1 prelude-ls: 1.2.1 type-check: 0.4.0 - dev: true + word-wrap: 1.2.5 - /os-tmpdir@1.0.2: - resolution: {integrity: sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==} - engines: {node: '>=0.10.0'} - dev: true - - /p-limit@2.3.0: - resolution: {integrity: sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==} - engines: {node: '>=6'} + p-limit@2.3.0: dependencies: p-try: 2.2.0 - dev: true - /p-limit@3.1.0: - resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==} - engines: {node: '>=10'} + p-limit@3.1.0: dependencies: yocto-queue: 0.1.0 - dev: true - /p-limit@4.0.0: - resolution: {integrity: sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + p-limit@4.0.0: dependencies: - yocto-queue: 1.0.0 - dev: true + yocto-queue: 1.2.1 - /p-locate@4.1.0: - resolution: {integrity: sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==} - engines: {node: '>=8'} + p-locate@4.1.0: dependencies: p-limit: 2.3.0 - dev: true - /p-locate@5.0.0: - resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==} - engines: {node: '>=10'} + p-locate@5.0.0: dependencies: p-limit: 3.1.0 - dev: true - /p-locate@6.0.0: - resolution: {integrity: sha512-wPrq66Llhl7/4AGC6I+cqxT07LhXvWL08LNXz1fENOw0Ap4sRZZ/gZpTTJ5jpurzzzfS2W/Ge9BY3LgLjCShcw==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + p-locate@6.0.0: dependencies: p-limit: 4.0.0 - dev: true - /p-try@2.2.0: - resolution: {integrity: sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==} - engines: {node: '>=6'} - dev: true + p-try@2.2.0: {} - /parent-module@1.0.1: - resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} - engines: {node: '>=6'} + package-json-from-dist@1.0.1: {} + + parent-module@1.0.1: dependencies: callsites: 3.1.0 - dev: true - /parse-json@5.2.0: - resolution: {integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==} - engines: {node: '>=8'} + parse-json@5.2.0: dependencies: - '@babel/code-frame': 7.22.13 + '@babel/code-frame': 7.27.1 error-ex: 1.3.2 json-parse-even-better-errors: 2.3.1 lines-and-columns: 1.2.4 - dev: true - - /path-exists@4.0.0: - resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} - engines: {node: '>=8'} - dev: true - /path-exists@5.0.0: - resolution: {integrity: sha512-RjhtfwJOxzcFmNOi6ltcbcu4Iu+FL3zEj83dk4kAS+fVpTxXLO1b38RvJgT/0QwvV/L3aY9TAnyv0EOqW4GoMQ==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - dev: true - - /path-is-absolute@1.0.1: - resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==} - engines: {node: '>=0.10.0'} - dev: true + path-exists@4.0.0: {} - /path-key@3.1.1: - resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} - engines: {node: '>=8'} - dev: true + path-exists@5.0.0: {} - /path-key@4.0.0: - resolution: {integrity: sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==} - engines: {node: '>=12'} - dev: true + path-is-absolute@1.0.1: {} - /path-parse@1.0.7: - resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} - dev: true + path-key@3.1.1: {} - /path-type@4.0.0: - resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==} - engines: {node: '>=8'} - dev: true + path-scurry@1.11.1: + dependencies: + lru-cache: 10.4.3 + minipass: 7.1.2 - /pbkdf2@3.1.2: - resolution: {integrity: sha512-iuh7L6jA7JEGu2WxDwtQP1ddOpaJNC4KlDEFfdQajSGgGPNi4OyDc2R7QnbY2bR9QjBVGwgvTdNJZoE7RaxUMA==} - engines: {node: '>=0.12'} + pbkdf2@3.1.3: dependencies: - create-hash: 1.2.0 + create-hash: 1.1.3 create-hmac: 1.1.7 - ripemd160: 2.0.2 + ripemd160: 2.0.1 safe-buffer: 5.2.1 - sha.js: 2.4.11 - dev: false + sha.js: 2.4.12 + to-buffer: 1.2.1 - /picocolors@1.0.0: - resolution: {integrity: sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==} - dev: true + picocolors@1.1.1: {} - /picomatch@2.3.1: - resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} - engines: {node: '>=8.6'} - dev: true + picomatch@2.3.1: {} + + picomatch@4.0.3: {} - /pirates@4.0.6: - resolution: {integrity: sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==} - engines: {node: '>= 6'} - dev: true + pirates@4.0.7: {} - /pkg-dir@4.2.0: - resolution: {integrity: sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==} - engines: {node: '>=8'} + pkg-dir@4.2.0: dependencies: find-up: 4.1.0 - dev: true - - /prelude-ls@1.2.1: - resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} - engines: {node: '>= 0.8.0'} - dev: true - /prettier-linter-helpers@1.0.0: - resolution: {integrity: sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w==} - engines: {node: '>=6.0.0'} - dependencies: - fast-diff: 1.3.0 - dev: true + possible-typed-array-names@1.1.0: {} - /prettier@3.1.1: - resolution: {integrity: sha512-22UbSzg8luF4UuZtzgiUOfcGM8s4tjBv6dJRT7j275NXsy2jb4aJa4NNveul5x4eqlF1wuhuR2RElK71RvmVaw==} - engines: {node: '>=14'} - hasBin: true - dev: true + prelude-ls@1.2.1: {} - /prettier@3.2.5: - resolution: {integrity: sha512-3/GWa9aOC0YeD7LUfvOG2NiDyhOWRvt1k+rcKhOuYnMY24iiCphgneUfJDyFXd6rZCAnuLBv6UeAULtrhT/F4A==} - engines: {node: '>=14'} - hasBin: true - dev: true + prettier@3.6.2: {} - /pretty-format@29.7.0: - resolution: {integrity: sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + pretty-format@30.0.2: dependencies: - '@jest/schemas': 29.6.3 + '@jest/schemas': 30.0.1 ansi-styles: 5.2.0 - react-is: 18.2.0 - dev: true + react-is: 18.3.1 - /prompts@2.4.2: - resolution: {integrity: sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==} - engines: {node: '>= 6'} + pretty-format@30.0.5: dependencies: - kleur: 3.0.3 - sisteransi: 1.0.5 - dev: true - - /proxy-from-env@1.1.0: - resolution: {integrity: sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==} - dev: false + '@jest/schemas': 30.0.5 + ansi-styles: 5.2.0 + react-is: 18.3.1 - /punycode@2.3.0: - resolution: {integrity: sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==} - engines: {node: '>=6'} - dev: true + proxy-from-env@1.1.0: {} - /pure-rand@6.0.4: - resolution: {integrity: sha512-LA0Y9kxMYv47GIPJy6MI84fqTd2HmYZI83W/kM/SkKfDlajnZYfmXFTxkbY+xSBPkLJxltMa9hIkmdc29eguMA==} - dev: true + punycode@2.3.1: {} - /queue-microtask@1.2.3: - resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} - dev: true + pure-rand@7.0.1: {} - /quick-lru@4.0.1: - resolution: {integrity: sha512-ARhCpm70fzdcvNQfPoy49IaanKkTlRWF2JMzqhcJbhSFRZv7nPTvZJdcY7301IPmvW+/p0RgIWnQDLJxifsQ7g==} - engines: {node: '>=8'} - dev: true + queue-microtask@1.2.3: {} - /randombytes@2.1.0: - resolution: {integrity: sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==} + randombytes@2.1.0: dependencies: safe-buffer: 5.2.1 - dev: false - - /react-is@18.2.0: - resolution: {integrity: sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==} - dev: true - - /read-pkg-up@7.0.1: - resolution: {integrity: sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==} - engines: {node: '>=8'} - dependencies: - find-up: 4.1.0 - read-pkg: 5.2.0 - type-fest: 0.8.1 - dev: true - /read-pkg@5.2.0: - resolution: {integrity: sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==} - engines: {node: '>=8'} - dependencies: - '@types/normalize-package-data': 2.4.2 - normalize-package-data: 2.5.0 - parse-json: 5.2.0 - type-fest: 0.6.0 - dev: true + react-is@18.3.1: {} - /readable-stream@3.6.2: - resolution: {integrity: sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==} - engines: {node: '>= 6'} + readable-stream@3.6.2: dependencies: inherits: 2.0.4 string_decoder: 1.3.0 util-deprecate: 1.0.2 - dev: false - - /redent@3.0.0: - resolution: {integrity: sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==} - engines: {node: '>=8'} - dependencies: - indent-string: 4.0.0 - strip-indent: 3.0.0 - dev: true - - /regexpp@3.2.0: - resolution: {integrity: sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==} - engines: {node: '>=8'} - dev: true - /require-directory@2.1.1: - resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==} - engines: {node: '>=0.10.0'} - dev: true + require-directory@2.1.1: {} - /require-from-string@2.0.2: - resolution: {integrity: sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==} - engines: {node: '>=0.10.0'} - dev: true + require-from-string@2.0.2: {} - /resolve-cwd@3.0.0: - resolution: {integrity: sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==} - engines: {node: '>=8'} + resolve-cwd@3.0.0: dependencies: resolve-from: 5.0.0 - dev: true - - /resolve-from@4.0.0: - resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} - engines: {node: '>=4'} - dev: true - - /resolve-from@5.0.0: - resolution: {integrity: sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==} - engines: {node: '>=8'} - dev: true - - /resolve.exports@2.0.2: - resolution: {integrity: sha512-X2UW6Nw3n/aMgDVy+0rSqgHlv39WZAlZrXCdnbyEiKm17DSqHX4MmQMaST3FbeWR5FTuRcUwYAziZajji0Y7mg==} - engines: {node: '>=10'} - dev: true - /resolve@1.22.6: - resolution: {integrity: sha512-njhxM7mV12JfufShqGy3Rz8j11RPdLy4xi15UurGJeoHLfJpVXKdh3ueuOqbYUcDZnffr6X739JBo5LzyahEsw==} - hasBin: true - dependencies: - is-core-module: 2.13.0 - path-parse: 1.0.7 - supports-preserve-symlinks-flag: 1.0.0 - dev: true + resolve-from@4.0.0: {} - /restore-cursor@3.1.0: - resolution: {integrity: sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==} - engines: {node: '>=8'} - dependencies: - onetime: 5.1.2 - signal-exit: 3.0.7 - dev: true + resolve-from@5.0.0: {} - /reusify@1.0.4: - resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==} - engines: {iojs: '>=1.0.0', node: '>=0.10.0'} - dev: true + reusify@1.1.0: {} - /rimraf@3.0.2: - resolution: {integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==} - hasBin: true + ripemd160@2.0.1: dependencies: - glob: 7.2.3 - dev: true + hash-base: 2.0.2 + inherits: 2.0.4 - /ripemd160@2.0.2: - resolution: {integrity: sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==} + ripemd160@2.0.2: dependencies: hash-base: 3.1.0 inherits: 2.0.4 - dev: false - /rlp@2.2.7: - resolution: {integrity: sha512-d5gdPmgQ0Z+AklL2NVXr/IoSjNZFfTVvQWzL/AM2AOcSzYP2xjlb0AC8YyCLc41MSNf6P6QVtjgPdmVtzb+4lQ==} - hasBin: true + rlp@2.2.7: dependencies: - bn.js: 5.2.1 - dev: false - - /run-async@2.4.1: - resolution: {integrity: sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==} - engines: {node: '>=0.12.0'} - dev: true + bn.js: 5.2.2 - /run-parallel@1.2.0: - resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} + run-parallel@1.2.0: dependencies: queue-microtask: 1.2.3 - dev: true - - /rxjs@6.6.7: - resolution: {integrity: sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==} - engines: {npm: '>=2.0.0'} - dependencies: - tslib: 1.14.1 - dev: true - - /safe-buffer@5.2.1: - resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} - dev: false - /safer-buffer@2.1.2: - resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} - dev: true + safe-buffer@5.2.1: {} - /scrypt-js@3.0.1: - resolution: {integrity: sha512-cdwTTnqPu0Hyvf5in5asVdZocVDTNRmR7XEcJuIzMjJeSHybHl7vpB66AzwTaIg6CLSbtjcxc8fqcySfnTkccA==} - dev: false + scrypt-js@3.0.1: {} - /secp256k1@4.0.3: - resolution: {integrity: sha512-NLZVf+ROMxwtEj3Xa562qgv2BK5e2WNmXPiOdVIPLgs6lyTzMvBq0aWTYMI5XCP9jZMVKOcqZLw/Wc4vDkuxhA==} - engines: {node: '>=10.0.0'} - requiresBuild: true + secp256k1@4.0.4: dependencies: - elliptic: 6.5.4 - node-addon-api: 2.0.2 - node-gyp-build: 4.6.1 - dev: false + elliptic: 6.6.1 + node-addon-api: 5.1.0 + node-gyp-build: 4.8.4 - /semver@5.7.2: - resolution: {integrity: sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==} - hasBin: true - dev: true + semver@6.3.1: {} - /semver@6.3.1: - resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} - hasBin: true - dev: true + semver@7.7.2: {} - /semver@7.5.4: - resolution: {integrity: sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==} - engines: {node: '>=10'} - hasBin: true + set-function-length@1.2.2: dependencies: - lru-cache: 6.0.0 - dev: true - - /semver@7.6.2: - resolution: {integrity: sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==} - engines: {node: '>=10'} - hasBin: true - dev: true + define-data-property: 1.1.4 + es-errors: 1.3.0 + function-bind: 1.1.2 + get-intrinsic: 1.3.0 + gopd: 1.2.0 + has-property-descriptors: 1.0.2 - /setimmediate@1.0.5: - resolution: {integrity: sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==} - dev: false + setimmediate@1.0.5: {} - /sha.js@2.4.11: - resolution: {integrity: sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==} - hasBin: true + sha.js@2.4.12: dependencies: inherits: 2.0.4 safe-buffer: 5.2.1 - dev: false + to-buffer: 1.2.1 - /shebang-command@2.0.0: - resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} - engines: {node: '>=8'} + shebang-command@2.0.0: dependencies: shebang-regex: 3.0.0 - dev: true - /shebang-regex@3.0.0: - resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} - engines: {node: '>=8'} - dev: true - - /signal-exit@3.0.7: - resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==} - dev: true + shebang-regex@3.0.0: {} - /signal-exit@4.1.0: - resolution: {integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==} - engines: {node: '>=14'} - dev: true + signal-exit@3.0.7: {} - /sisteransi@1.0.5: - resolution: {integrity: sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==} - dev: true + signal-exit@4.1.0: {} - /slash@3.0.0: - resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==} - engines: {node: '>=8'} - dev: true + slash@3.0.0: {} - /socket.io-client@4.7.5: - resolution: {integrity: sha512-sJ/tqHOCe7Z50JCBCXrsY3I2k03iOiUe+tj1OmKeD2lXPiGH/RUCdTZFoqVyN7l1MnpIzPrGtLcijffmeouNlQ==} - engines: {node: '>=10.0.0'} + socket.io-client@4.8.1: dependencies: - '@socket.io/component-emitter': 3.1.0 - debug: 4.3.4 - engine.io-client: 6.5.2 + '@socket.io/component-emitter': 3.1.2 + debug: 4.3.7 + engine.io-client: 6.6.3 socket.io-parser: 4.2.4 transitivePeerDependencies: - bufferutil - supports-color - utf-8-validate - dev: false - /socket.io-parser@4.2.4: - resolution: {integrity: sha512-/GbIKmo8ioc+NIWIhwdecY0ge+qVBSMdgxGygevmdHj24bsfgtCmcUUcQ5ZzcylGFHsN3k4HB4Cgkl96KVnuew==} - engines: {node: '>=10.0.0'} + socket.io-parser@4.2.4: dependencies: - '@socket.io/component-emitter': 3.1.0 - debug: 4.3.4 + '@socket.io/component-emitter': 3.1.2 + debug: 4.3.7 transitivePeerDependencies: - supports-color - dev: false - /sodium-browserify-tweetnacl@0.2.6: - resolution: {integrity: sha512-ZnEI26hdluilpYY28Xc4rc1ALfmEp2TWihkJX6Mdtw0z9RfHfpZJU7P8DoKbN1HcBdU9aJmguFZs7igE8nLJPg==} + sodium-browserify-tweetnacl@0.2.6: dependencies: chloride-test: 1.2.4 ed2curve: 0.1.4 - sha.js: 2.4.11 + sha.js: 2.4.12 tweetnacl: 1.0.3 tweetnacl-auth: 0.3.1 - dev: false - /source-map-support@0.5.13: - resolution: {integrity: sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w==} + source-map-support@0.5.13: dependencies: buffer-from: 1.1.2 source-map: 0.6.1 - dev: true - - /source-map@0.6.1: - resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==} - engines: {node: '>=0.10.0'} - dev: true - - /spdx-correct@3.2.0: - resolution: {integrity: sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==} - dependencies: - spdx-expression-parse: 3.0.1 - spdx-license-ids: 3.0.15 - dev: true - - /spdx-exceptions@2.3.0: - resolution: {integrity: sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==} - dev: true - - /spdx-expression-parse@3.0.1: - resolution: {integrity: sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==} - dependencies: - spdx-exceptions: 2.3.0 - spdx-license-ids: 3.0.15 - dev: true - /spdx-license-ids@3.0.15: - resolution: {integrity: sha512-lpT8hSQp9jAKp9mhtBU4Xjon8LPGBvLIuBiSVhMEtmLecTh2mO0tlqrAMp47tBXzMr13NJMQ2lf7RpQGLJ3HsQ==} - dev: true + source-map@0.6.1: {} - /split2@4.2.0: - resolution: {integrity: sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg==} - engines: {node: '>= 10.x'} - dev: true + split2@4.2.0: {} - /sprintf-js@1.0.3: - resolution: {integrity: sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==} - dev: true + sprintf-js@1.0.3: {} - /stack-utils@2.0.6: - resolution: {integrity: sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==} - engines: {node: '>=10'} + stack-utils@2.0.6: dependencies: escape-string-regexp: 2.0.0 - dev: true - /string-length@4.0.2: - resolution: {integrity: sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ==} - engines: {node: '>=10'} + string-length@4.0.2: dependencies: char-regex: 1.0.2 strip-ansi: 6.0.1 - dev: true - /string-width@4.2.3: - resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} - engines: {node: '>=8'} + string-width@4.2.3: dependencies: emoji-regex: 8.0.0 is-fullwidth-code-point: 3.0.0 strip-ansi: 6.0.1 - dev: true - /string_decoder@1.3.0: - resolution: {integrity: sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==} + string-width@5.1.2: + dependencies: + eastasianwidth: 0.2.0 + emoji-regex: 9.2.2 + strip-ansi: 7.1.0 + + string_decoder@1.3.0: dependencies: safe-buffer: 5.2.1 - dev: false - /strip-ansi@6.0.1: - resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} - engines: {node: '>=8'} + strip-ansi@6.0.1: dependencies: ansi-regex: 5.0.1 - dev: true - - /strip-bom@4.0.0: - resolution: {integrity: sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==} - engines: {node: '>=8'} - dev: true - - /strip-final-newline@2.0.0: - resolution: {integrity: sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==} - engines: {node: '>=6'} - dev: true - - /strip-final-newline@3.0.0: - resolution: {integrity: sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==} - engines: {node: '>=12'} - dev: true - /strip-indent@3.0.0: - resolution: {integrity: sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==} - engines: {node: '>=8'} + strip-ansi@7.1.0: dependencies: - min-indent: 1.0.1 - dev: true + ansi-regex: 6.1.0 - /strip-json-comments@3.1.1: - resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} - engines: {node: '>=8'} - dev: true + strip-bom@4.0.0: {} - /supports-color@5.5.0: - resolution: {integrity: sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==} - engines: {node: '>=4'} - dependencies: - has-flag: 3.0.0 - dev: true + strip-final-newline@2.0.0: {} - /supports-color@7.2.0: - resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} - engines: {node: '>=8'} + strip-json-comments@3.1.1: {} + + supports-color@7.2.0: dependencies: has-flag: 4.0.0 - dev: true - /supports-color@8.1.1: - resolution: {integrity: sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==} - engines: {node: '>=10'} + supports-color@8.1.1: dependencies: has-flag: 4.0.0 - dev: true - - /supports-preserve-symlinks-flag@1.0.0: - resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} - engines: {node: '>= 0.4'} - dev: true - /synckit@0.8.8: - resolution: {integrity: sha512-HwOKAP7Wc5aRGYdKH+dw0PRRpbO841v2DENBtjnR5HFWoiNByAl7vrx3p0G/rCyYXQsrxqtX48TImFtPcIHSpQ==} - engines: {node: ^14.18.0 || >=16.0.0} + synckit@0.11.8: dependencies: - '@pkgr/core': 0.1.1 - tslib: 2.6.2 - dev: true + '@pkgr/core': 0.2.7 - /test-exclude@6.0.0: - resolution: {integrity: sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==} - engines: {node: '>=8'} + test-exclude@6.0.0: dependencies: '@istanbuljs/schema': 0.1.3 glob: 7.2.3 minimatch: 3.1.2 - dev: true - - /text-extensions@2.4.0: - resolution: {integrity: sha512-te/NtwBwfiNRLf9Ijqx3T0nlqZiQ2XrrtBvu+cLL8ZRrGkO0NHTug8MYFKyoSrv/sHTaSKfilUkizV6XhxMJ3g==} - engines: {node: '>=8'} - dev: true - /text-table@0.2.0: - resolution: {integrity: sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==} - dev: true + text-extensions@2.4.0: {} - /through@2.3.8: - resolution: {integrity: sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==} - dev: true + through@2.3.8: {} - /tiny-secp256k1@2.2.3: - resolution: {integrity: sha512-SGcL07SxcPN2nGKHTCvRMkQLYPSoeFcvArUSCYtjVARiFAWU44cCIqYS0mYAU6nY7XfvwURuTIGo2Omt3ZQr0Q==} - engines: {node: '>=14.0.0'} + tiny-secp256k1@2.2.4: dependencies: uint8array-tools: 0.0.7 - dev: false - /tmp@0.0.33: - resolution: {integrity: sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==} - engines: {node: '>=0.6.0'} - dependencies: - os-tmpdir: 1.0.2 - dev: true + tinyexec@1.0.1: {} - /tmpl@1.0.5: - resolution: {integrity: sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==} - dev: true + tmpl@1.0.5: {} - /to-fast-properties@2.0.0: - resolution: {integrity: sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==} - engines: {node: '>=4'} - dev: true + to-buffer@1.2.1: + dependencies: + isarray: 2.0.5 + safe-buffer: 5.2.1 + typed-array-buffer: 1.0.3 - /to-regex-range@5.0.1: - resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} - engines: {node: '>=8.0'} + to-regex-range@5.0.1: dependencies: is-number: 7.0.0 - dev: true - - /trim-newlines@3.0.1: - resolution: {integrity: sha512-c1PTsA3tYrIsLGkJkzHF+w9F2EyxfXGo4UyJc4pFL++FMjnq0HJS69T3M7d//gKrFKwy429bouPescbjecU+Zw==} - engines: {node: '>=8'} - dev: true - /ts-api-utils@1.3.0(typescript@5.1.6): - resolution: {integrity: sha512-UQMIo7pb8WRomKR1/+MFVLTroIvDVtMX3K6OUir8ynLyzB8Jeriont2bTAtmNPa1ekAgN7YPDyf6V+ygrdU+eQ==} - engines: {node: '>=16'} - peerDependencies: - typescript: '>=4.2.0' + ts-api-utils@2.1.0(typescript@5.8.3): dependencies: - typescript: 5.1.6 - dev: true + typescript: 5.8.3 - /ts-jest@29.1.4(@babel/core@7.23.0)(jest@29.7.0)(typescript@5.1.6): - resolution: {integrity: sha512-YiHwDhSvCiItoAgsKtoLFCuakDzDsJ1DLDnSouTaTmdOcOwIkSzbLXduaQ6M5DRVhuZC/NYaaZ/mtHbWMv/S6Q==} - engines: {node: ^14.15.0 || ^16.10.0 || ^18.0.0 || >=20.0.0} - hasBin: true - peerDependencies: - '@babel/core': '>=7.0.0-beta.0 <8' - '@jest/transform': ^29.0.0 - '@jest/types': ^29.0.0 - babel-jest: ^29.0.0 - esbuild: '*' - jest: ^29.0.0 - typescript: '>=4.3 <6' - peerDependenciesMeta: - '@babel/core': - optional: true - '@jest/transform': - optional: true - '@jest/types': - optional: true - babel-jest: - optional: true - esbuild: - optional: true + ts-jest@29.4.0(@babel/core@7.28.0)(@jest/transform@30.0.5)(@jest/types@30.0.5)(babel-jest@30.0.5(@babel/core@7.28.0))(jest-util@30.0.5)(jest@30.0.5(@types/node@24.1.0))(typescript@5.8.3): dependencies: - '@babel/core': 7.23.0 bs-logger: 0.2.6 + ejs: 3.1.10 fast-json-stable-stringify: 2.1.0 - jest: 29.7.0(@types/node@20.12.13) - jest-util: 29.7.0 + jest: 30.0.5(@types/node@24.1.0) json5: 2.2.3 lodash.memoize: 4.1.2 make-error: 1.3.6 - semver: 7.5.4 - typescript: 5.1.6 + semver: 7.7.2 + type-fest: 4.41.0 + typescript: 5.8.3 yargs-parser: 21.1.1 - dev: true - - /tslib@1.14.1: - resolution: {integrity: sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==} - dev: true - - /tslib@2.6.2: - resolution: {integrity: sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==} - dev: true + optionalDependencies: + '@babel/core': 7.28.0 + '@jest/transform': 30.0.5 + '@jest/types': 30.0.5 + babel-jest: 30.0.5(@babel/core@7.28.0) + jest-util: 30.0.5 - /tsutils@3.21.0(typescript@5.1.6): - resolution: {integrity: sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==} - 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' - dependencies: - tslib: 1.14.1 - typescript: 5.1.6 - dev: true + tslib@2.8.1: + optional: true - /tweetnacl-auth@0.3.1: - resolution: {integrity: sha512-9/c8c6qRMTfWuv54ETFhihgYoofi0M9HUovMSGJ1rLRUj6O5A0vuCg2L/qKfvmcjLVhaTgAJCLy2EqCLJK2QLw==} + tweetnacl-auth@0.3.1: dependencies: tweetnacl: 0.14.5 - dev: false - /tweetnacl@0.14.5: - resolution: {integrity: sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA==} - dev: false + tweetnacl@0.14.5: {} - /tweetnacl@1.0.3: - resolution: {integrity: sha512-6rt+RN7aOi1nGMyC4Xa5DdYiukl2UWCbcJft7YhxReBGQD7OAM8Pbxw6YMo4r2diNEA8FEmu32YOn9rhaiE5yw==} + tweetnacl@1.0.3: {} - /type-check@0.4.0: - resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==} - engines: {node: '>= 0.8.0'} + type-check@0.4.0: dependencies: prelude-ls: 1.2.1 - dev: true - /type-detect@4.0.8: - resolution: {integrity: sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==} - engines: {node: '>=4'} - dev: true + type-detect@4.0.8: {} - /type-fest@0.18.1: - resolution: {integrity: sha512-OIAYXk8+ISY+qTOwkHtKqzAuxchoMiD9Udx+FSGQDuiRR+PJKJHc2NJAXlbhkGwTt/4/nKZxELY1w3ReWOL8mw==} - engines: {node: '>=10'} - dev: true + type-fest@0.21.3: {} - /type-fest@0.20.2: - resolution: {integrity: sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==} - engines: {node: '>=10'} - dev: true + type-fest@4.41.0: {} - /type-fest@0.21.3: - resolution: {integrity: sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==} - engines: {node: '>=10'} - dev: true + typed-array-buffer@1.0.3: + dependencies: + call-bound: 1.0.4 + es-errors: 1.3.0 + is-typed-array: 1.1.15 - /type-fest@0.6.0: - resolution: {integrity: sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==} - engines: {node: '>=8'} - dev: true + typeforce@1.18.0: {} - /type-fest@0.8.1: - resolution: {integrity: sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==} - engines: {node: '>=8'} - dev: true + typescript-eslint@8.38.0(eslint@9.32.0(jiti@2.4.2))(typescript@5.8.3): + dependencies: + '@typescript-eslint/eslint-plugin': 8.38.0(@typescript-eslint/parser@8.38.0(eslint@9.32.0(jiti@2.4.2))(typescript@5.8.3))(eslint@9.32.0(jiti@2.4.2))(typescript@5.8.3) + '@typescript-eslint/parser': 8.38.0(eslint@9.32.0(jiti@2.4.2))(typescript@5.8.3) + '@typescript-eslint/typescript-estree': 8.38.0(typescript@5.8.3) + '@typescript-eslint/utils': 8.38.0(eslint@9.32.0(jiti@2.4.2))(typescript@5.8.3) + eslint: 9.32.0(jiti@2.4.2) + typescript: 5.8.3 + transitivePeerDependencies: + - supports-color - /typeforce@1.18.0: - resolution: {integrity: sha512-7uc1O8h1M1g0rArakJdf0uLRSSgFcYexrVoKo+bzJd32gd4gDy2L/Z+8/FjPnU9ydY3pEnVPtr9FyscYY60K1g==} - dev: false + typescript@5.8.3: {} - /typescript@5.1.6: - resolution: {integrity: sha512-zaWCozRZ6DLEWAWFrVDz1H6FVXzUSfTy5FUMWsQlU8Ym5JP9eO4xkTIROFCQvhQf61z6O/G6ugw3SgAnvvm+HA==} - engines: {node: '>=14.17'} - hasBin: true - dev: true + uint8array-tools@0.0.7: {} - /uint8array-tools@0.0.7: - resolution: {integrity: sha512-vrrNZJiusLWoFWBqz5Y5KMCgP9W9hnjZHzZiZRT8oNAkq3d5Z5Oe76jAvVVSRh4U8GGR90N2X1dWtrhvx6L8UQ==} - engines: {node: '>=14.0.0'} - dev: false + uint8array-tools@0.0.8: {} - /undici-types@5.26.5: - resolution: {integrity: sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==} + undici-types@7.8.0: {} - /unicorn-magic@0.1.0: - resolution: {integrity: sha512-lRfVq8fE8gz6QMBuDM6a+LO3IAzTi05H6gCVaUpir2E1Rwpo4ZUog45KpNXKC/Mn3Yb9UDuHumeFTo9iV/D9FQ==} - engines: {node: '>=18'} - dev: true + unicorn-magic@0.1.0: {} - /update-browserslist-db@1.0.13(browserslist@4.22.1): - resolution: {integrity: sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg==} - hasBin: true - peerDependencies: - browserslist: '>= 4.21.0' + unist-util-is@6.0.0: dependencies: - browserslist: 4.22.1 - escalade: 3.1.1 - picocolors: 1.0.0 - dev: true + '@types/unist': 3.0.3 - /uri-js@4.4.1: - resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} + unist-util-stringify-position@4.0.0: dependencies: - punycode: 2.3.0 - dev: true + '@types/unist': 3.0.3 - /util-deprecate@1.0.2: - resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} - dev: false + unist-util-visit-parents@6.0.1: + dependencies: + '@types/unist': 3.0.3 + unist-util-is: 6.0.0 - /v8-to-istanbul@9.1.0: - resolution: {integrity: sha512-6z3GW9x8G1gd+JIIgQQQxXuiJtCXeAjp6RaPEPLv62mH3iPHPxV6W3robxtCzNErRo6ZwTmzWhsbNvjyEBKzKA==} - engines: {node: '>=10.12.0'} + unist-util-visit@5.0.0: dependencies: - '@jridgewell/trace-mapping': 0.3.19 - '@types/istanbul-lib-coverage': 2.0.4 - convert-source-map: 1.9.0 - dev: true + '@types/unist': 3.0.3 + unist-util-is: 6.0.0 + unist-util-visit-parents: 6.0.1 - /validate-npm-package-license@3.0.4: - resolution: {integrity: sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==} + unrs-resolver@1.11.1: dependencies: - spdx-correct: 3.2.0 - spdx-expression-parse: 3.0.1 - dev: true + napi-postinstall: 0.3.0 + optionalDependencies: + '@unrs/resolver-binding-android-arm-eabi': 1.11.1 + '@unrs/resolver-binding-android-arm64': 1.11.1 + '@unrs/resolver-binding-darwin-arm64': 1.11.1 + '@unrs/resolver-binding-darwin-x64': 1.11.1 + '@unrs/resolver-binding-freebsd-x64': 1.11.1 + '@unrs/resolver-binding-linux-arm-gnueabihf': 1.11.1 + '@unrs/resolver-binding-linux-arm-musleabihf': 1.11.1 + '@unrs/resolver-binding-linux-arm64-gnu': 1.11.1 + '@unrs/resolver-binding-linux-arm64-musl': 1.11.1 + '@unrs/resolver-binding-linux-ppc64-gnu': 1.11.1 + '@unrs/resolver-binding-linux-riscv64-gnu': 1.11.1 + '@unrs/resolver-binding-linux-riscv64-musl': 1.11.1 + '@unrs/resolver-binding-linux-s390x-gnu': 1.11.1 + '@unrs/resolver-binding-linux-x64-gnu': 1.11.1 + '@unrs/resolver-binding-linux-x64-musl': 1.11.1 + '@unrs/resolver-binding-wasm32-wasi': 1.11.1 + '@unrs/resolver-binding-win32-arm64-msvc': 1.11.1 + '@unrs/resolver-binding-win32-ia32-msvc': 1.11.1 + '@unrs/resolver-binding-win32-x64-msvc': 1.11.1 + + update-browserslist-db@1.1.3(browserslist@4.25.1): + dependencies: + browserslist: 4.25.1 + escalade: 3.2.0 + picocolors: 1.1.1 + + uri-js@4.4.1: + dependencies: + punycode: 2.3.1 + + util-deprecate@1.0.2: {} + + v8-to-istanbul@9.3.0: + dependencies: + '@jridgewell/trace-mapping': 0.3.29 + '@types/istanbul-lib-coverage': 2.0.6 + convert-source-map: 2.0.0 - /varuint-bitcoin@1.1.2: - resolution: {integrity: sha512-4EVb+w4rx+YfVM32HQX42AbbT7/1f5zwAYhIujKXKk8NQK+JfRVl3pqT3hjNn/L+RstigmGGKVwHA/P0wgITZw==} + valibot@0.37.0(typescript@5.8.3): + optionalDependencies: + typescript: 5.8.3 + + varuint-bitcoin@1.1.2: dependencies: safe-buffer: 5.2.1 - dev: false - /walker@1.0.8: - resolution: {integrity: sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==} + walker@1.0.8: dependencies: makeerror: 1.0.12 - dev: true - /which@2.0.2: - resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} - engines: {node: '>= 8'} - hasBin: true + which-typed-array@1.1.19: + dependencies: + available-typed-arrays: 1.0.7 + call-bind: 1.0.8 + call-bound: 1.0.4 + for-each: 0.3.5 + get-proto: 1.0.1 + gopd: 1.2.0 + has-tostringtag: 1.0.2 + + which@2.0.2: dependencies: isexe: 2.0.0 - dev: true - /wif@2.0.6: - resolution: {integrity: sha512-HIanZn1zmduSF+BQhkE+YXIbEiH0xPr1012QbFEGB0xsKqJii0/SqJjyn8dFv6y36kOznMgMB+LGcbZTJ1xACQ==} + wif@5.0.0: dependencies: - bs58check: 2.1.2 - dev: false + bs58check: 4.0.0 - /wrap-ansi@7.0.0: - resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==} - engines: {node: '>=10'} + word-wrap@1.2.5: {} + + wrap-ansi@7.0.0: dependencies: ansi-styles: 4.3.0 string-width: 4.2.3 strip-ansi: 6.0.1 - dev: true - /wrappy@1.0.2: - resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} - dev: true - - /write-file-atomic@4.0.2: - resolution: {integrity: sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg==} - engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} + wrap-ansi@8.1.0: dependencies: - imurmurhash: 0.1.4 - signal-exit: 3.0.7 - dev: true + ansi-styles: 6.2.1 + string-width: 5.1.2 + strip-ansi: 7.1.0 - /ws@8.11.0: - resolution: {integrity: sha512-HPG3wQd9sNQoT9xHyNCXoDUa+Xw/VevmY9FoHyQ+g+rrMn4j6FB4np7Z0OhdTgjx6MgQLK7jwSy1YecU1+4Asg==} - engines: {node: '>=10.0.0'} - peerDependencies: - bufferutil: ^4.0.1 - utf-8-validate: ^5.0.2 - peerDependenciesMeta: - bufferutil: - optional: true - utf-8-validate: - optional: true - dev: false + wrappy@1.0.2: {} - /xmlhttprequest-ssl@2.0.0: - resolution: {integrity: sha512-QKxVRxiRACQcVuQEYFsI1hhkrMlrXHPegbbd1yn9UHOmRxY+si12nQYzri3vbzt8VdTTRviqcKxcyllFas5z2A==} - engines: {node: '>=0.4.0'} - dev: false + write-file-atomic@5.0.1: + dependencies: + imurmurhash: 0.1.4 + signal-exit: 4.1.0 - /y18n@5.0.8: - resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==} - engines: {node: '>=10'} - dev: true + ws@8.17.1: {} - /yallist@3.1.1: - resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==} - dev: true + xmlhttprequest-ssl@2.1.2: {} - /yallist@4.0.0: - resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==} - dev: true + y18n@5.0.8: {} - /yargs-parser@20.2.9: - resolution: {integrity: sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==} - engines: {node: '>=10'} - dev: true + yallist@3.1.1: {} - /yargs-parser@21.1.1: - resolution: {integrity: sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==} - engines: {node: '>=12'} - dev: true + yargs-parser@21.1.1: {} - /yargs@17.7.2: - resolution: {integrity: sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==} - engines: {node: '>=12'} + yargs@17.7.2: dependencies: cliui: 8.0.1 - escalade: 3.1.1 + escalade: 3.2.0 get-caller-file: 2.0.5 require-directory: 2.1.1 string-width: 4.2.3 y18n: 5.0.8 yargs-parser: 21.1.1 - dev: true - /yocto-queue@0.1.0: - resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} - engines: {node: '>=10'} - dev: true + yocto-queue@0.1.0: {} - /yocto-queue@1.0.0: - resolution: {integrity: sha512-9bnSc/HEW2uRy67wc+T8UwauLuPJVn28jb+GtJY16iiKWyvmYJRXVT4UamsAEGQfPohgr2q4Tq0sQbQlxTfi1g==} - engines: {node: '>=12.20'} - dev: true + yocto-queue@1.2.1: {} + + zwitch@2.0.4: {} diff --git a/src/api/generated.ts b/src/api/generated.ts index 4bebb47..427f962 100644 --- a/src/api/generated.ts +++ b/src/api/generated.ts @@ -1,5 +1,6 @@ /* eslint-disable */ /* tslint:disable */ +// @ts-nocheck /* * --------------------------------------------------------------- * ## THIS FILE WAS GENERATED VIA SWAGGER-TYPESCRIPT-API ## @@ -11,134 +12,133 @@ /** @example {"account":{"address":"U777355171330060015","unconfirmedBalance":"4509718944753","balance":"4509718944753","publicKey":"a9407418dafb3c8aeee28f3263fd55bae0f528a5697a9df0e77e6568b19dfe34","unconfirmedSignature":0,"secondSignature":0,"secondPublicKey":null,"multisignatures":[],"u_multisignatures":[]},"success":true,"nodeTimestamp":58030181} */ export interface GetAccountInfoResponseDto { - account: AccountDto; - success: boolean; - nodeTimestamp: number; + account: AccountDto + success: boolean + nodeTimestamp: number } /** @example {"balance":"4509718944753","unconfirmedBalance":"4509718944753","success":true,"nodeTimestamp":58043820} */ export interface GetAccountBalanceResponseDto { /** @format int64 */ - balance: string; + balance: string /** @format int64 */ - unconfirmedBalance: string; - success: boolean; - nodeTimestamp: number; + unconfirmedBalance: string + success: boolean + nodeTimestamp: number } /** @example {"publicKey":"a9407418dafb3c8aeee28f3263fd55bae0f528a5697a9df0e77e6568b19dfe34","balance":"4509718944753","unconfirmedBalance":"4509718944753"} */ export interface GetAccountPublicKeyResponseDto { /** 256 bit public key of ADAMANT address in hex format */ - publicKey: PublicKey; - success: boolean; - nodeTimestamp: number; + publicKey: PublicKey + success: boolean + nodeTimestamp: number } /** @example {"publicKey":"a9407418dafb3c8aeee28f3263fd55bae0f528a5697a9df0e77e6568b19dfe34","balance":"4509718944753","unconfirmedBalance":"4509718944753"} */ export interface CreateNewAccountRequestBody { /** 256 bit public key of ADAMANT address in hex format */ - publicKey: PublicKey; - success: boolean; - nodeTimestamp: number; + publicKey: PublicKey + success: boolean + nodeTimestamp: number } /** @example {"account":{"address":"U4697606961271319613","unconfirmedBalance":"0","balance":"0","publicKey":"bee368cc0ce2974adcbcc97e649ac18a031492a579034abed5f77d667001d450","unconfirmedSignature":0,"secondSignature":0,"secondPublicKey":null,"multisignatures":null,"u_multisignatures":null},"success":true,"nodeTimestamp":63205623} */ export interface CreateNewAccountResponseDto { - account: AccountDto; - success: boolean; - nodeTimestamp: number; + account: AccountDto + success: boolean + nodeTimestamp: number } export interface GetBlockInfoResponseDto { - block: BlockInfoDto; - success: boolean; - nodeTimestamp: number; + block: BlockInfoDto + success: boolean + nodeTimestamp: number } export interface GetBlocksResponseDto { - blocks: BlockInfoDto[]; - success: boolean; - nodeTimestamp: number; + blocks: BlockInfoDto[] + success: boolean + nodeTimestamp: number } export interface GetChatRoomsResponseDto { chats: { - lastTransaction?: TokenTransferTransaction | ChatMessageTransaction; - participants?: ChatParticipant[]; - }[]; - success: boolean; - nodeTimestamp: number; + lastTransaction?: TokenTransferTransaction | ChatMessageTransaction + participants?: ChatParticipant[] + }[] + success: boolean + nodeTimestamp: number } export interface GetChatMessagesResponseDto { - messages: (TokenTransferTransaction | ChatMessageTransaction)[]; - participants: ChatParticipant[]; - success: boolean; - nodeTimestamp: number; + messages: (TokenTransferTransaction | ChatMessageTransaction)[] + participants: ChatParticipant[] + success: boolean + nodeTimestamp: number } export interface GetChatTransactionsResponseDto { - transactions: ChatMessageTransaction[]; - /** Number in string format */ - count: string; - success: boolean; - nodeTimestamp: number; + transactions: ChatMessageTransaction[] + count: number + success: boolean + nodeTimestamp: number } export interface CreateNewChatMessageRequestBody { - transaction: RegisterChatMessageTransaction; + transaction: RegisterChatMessageTransaction } /** @example {"success":true,"nodeTimestamp":63205623,"transactionId":"2515012750420367858"} */ export interface CreateNewChatMessageResponseDto { - success: boolean; - nodeTimestamp: number; - transactionId: string; + success: boolean + nodeTimestamp: number + transactionId: string } export interface GetDelegatesResponseDto { - delegates: DelegateDto[]; + delegates: DelegateDto[] /** @example 254 */ - totalCount: number; + totalCount: number /** @example true */ - success: boolean; + success: boolean /** @example 61762271 */ - nodeTimestamp: number; + nodeTimestamp: number } export interface GetDelegateResponseDto { - delegate: DelegateDto; + delegate: DelegateDto /** @example true */ - success: boolean; + success: boolean /** @example 61762271 */ - nodeTimestamp: number; + nodeTimestamp: number } -export type RegisterDelegateRequestBody = RegisterNewDelegateTransaction; +export type RegisterDelegateRequestBody = RegisterNewDelegateTransaction export interface RegisterDelegateResponseDto { - transaction: RegisterDelegateTransactionDto; + transaction: RegisterDelegateTransactionDto /** @example true */ - success: boolean; + success: boolean /** @example 61762271 */ - nodeTimestamp: number; + nodeTimestamp: number } export interface SearchDelegateResponseDto { - delegates: SearchDelegateDto[]; + delegates: SearchDelegateDto[] /** @example true */ - success: boolean; + success: boolean /** @example 61762271 */ - nodeTimestamp: number; + nodeTimestamp: number } export interface GetDelegatesCountResponseDto { /** @example 255 */ - count: number; + count: number /** @example true */ - success: boolean; + success: boolean /** @example 61762271 */ - nodeTimestamp: number; + nodeTimestamp: number } export interface GetDelegateStatsResponseDto { @@ -146,21 +146,21 @@ export interface GetDelegateStatsResponseDto { * Total sum of fees forged by delegate * @example "586039475511" */ - fees: string; + fees: string /** * Total sum of rewards made by delegate * @example "3943485000000" */ - rewards: string; + rewards: string /** * Total sum of forged tokens * @example "4529524475511" */ - forged: string; + forged: string /** @example true */ - success: boolean; + success: boolean /** @example 61762271 */ - nodeTimestamp: number; + nodeTimestamp: number } export interface GetNextForgersResponseDto { @@ -168,384 +168,387 @@ export interface GetNextForgersResponseDto { * Array of next forgers public keys * @example ["677c6db63548c99674fed0571da522a6a9569d0c1da9669734a3625645519641","150d638714f65845b50f1ff58f3da2c2baa3a1dc8bf59a9884c10da5a8e951c6"] */ - delegates: string[]; + delegates: string[] /** * Current slot number * @example 11610423 */ - currentSlot: number; + currentSlot: number /** * Current blockchain height * @example 10146268 */ - currentBlock: number; + currentBlock: number /** * Current block slot number * @example 11610422 */ - currentBlockSlot: number; + currentBlockSlot: number /** @example true */ - success: boolean; + success: boolean /** @example 61762271 */ - nodeTimestamp: number; + nodeTimestamp: number } export interface GetVotersResponseDto { - accounts: VoterDto[]; + accounts: VoterDto[] /** @example true */ - success: boolean; + success: boolean /** @example 61762271 */ - nodeTimestamp: number; + nodeTimestamp: number } export interface GetAccountVotesResponseDto { /** List of delegates account voted for. */ - delegates: DelegateDto[]; + delegates: DelegateDto[] /** @example true */ - success: boolean; + success: boolean /** @example 61762271 */ - nodeTimestamp: number; + nodeTimestamp: number } -export type RegisterVotesRequestBody = RegisterVoteForDelegateTransaction; +export type RegisterVotesRequestBody = RegisterVoteForDelegateTransaction export interface RegisterVotesResponseDto { - transaction: RegisterVotesTransactionDto; + transaction: RegisterVotesTransactionDto /** @example true */ - success: boolean; + success: boolean /** @example 61762271 */ - nodeTimestamp: number; + nodeTimestamp: number } export interface GetPeersResponseDto { - peers: PeerDto[]; - success: boolean; - nodeTimestamp: number; + peers: PeerDto[] + success: boolean + nodeTimestamp: number +} + +export interface GetPeerInfoResponseDto { + peer: PeerDto + success: boolean + nodeTimestamp: number } /** @example {"loaded":true,"now":10144343,"blocksCount":0,"success":true,"nodeTimestamp":58052355} */ export interface GetLoadingStatusResponseDto { - loaded: boolean; - now: number; - blocksCount: number; - success: boolean; - nodeTimestamp: number; + loaded: boolean + now: number + blocksCount: number + success: boolean + nodeTimestamp: number } /** @example {"success":true,"nodeTimestamp":58052355,"syncing":false,"blocks":0,"height":10146332,"broadhash":"09f2f5614cf7209979dc1df2dd92d16aade904dae6c9b68bccaeb234647b3c18","consensus":94.32} */ export interface GetSyncStatusResponseDto { - success: boolean; - nodeTimestamp: number; - syncing: boolean; - blocks: number; - height: number; - broadhash: string; - consensus: number; + success: boolean + nodeTimestamp: number + syncing: boolean + blocks: number + height: number + broadhash: string + consensus: number } /** @example {"success":true} */ export interface GetPingStatusResponseDto { - success: boolean; + success: boolean } export type GetNodeVersionResponseDto = NodeVersion & { /** @example true */ - success: boolean; + success: boolean /** @example 58052984 */ - nodeTimestamp: number; -}; + nodeTimestamp: number +} /** @example {"success":true,"nodeTimestamp":58052355,"broadhash":"e1aedd2818679c174e3f6e31891c34f4069927f33f145e1b81fe5d978733e794"} */ export interface GetBroadhashResponseDto { - success: boolean; - nodeTimestamp: number; + success: boolean + nodeTimestamp: number /** Broadhash is established as an aggregated rolling hash of the past five blocks present in the database */ - broadhash: string; + broadhash: string } /** @example {"success":true,"nodeTimestamp":58646306,"epoch":"2017-09-02T17:00:00.000Z"} */ export interface GetEpochResponseDto { - success: boolean; - nodeTimestamp: number; + success: boolean + nodeTimestamp: number /** Time when blockchain epoch starts. Value `2017-09-02T17:00:00.000Z` is for mainnet. */ - epoch: string; + epoch: string } /** @example {"success":true,"nodeTimestamp":58646306,"height":10145318} */ export interface GetHeightResponseDto { - success: boolean; - nodeTimestamp: number; + success: boolean + nodeTimestamp: number /** Current node height. */ - height: number; + height: number } /** @example {"success":true,"nodeTimestamp":58646306,"fee":50000000} */ export interface GetTokenTransferFeeResponseDto { - success: boolean; - nodeTimestamp: number; + success: boolean + nodeTimestamp: number /** Current fee value for `type 0` (token transfer) transactions. Integer amount of 1/10^8 ADM tokens (1 ADM = 100000000). */ - fee: number; + fee: number } export interface GetTransactionTypesFeesResponseDto { /** @example true */ - success: boolean; + success: boolean /** @example 58646306 */ - nodeTimestamp: number; - fees: TransactionTypesFeesDto; + nodeTimestamp: number + fees: TransactionTypesFeesDto } /** @example {"success":true,"nodeTimestamp":58646306,"nethash":"bd330166898377fb28743ceef5e43a5d9d0a3efd9b3451fb7bc53530bb0a6d64"} */ export interface GetNethashResponseDto { - success: boolean; - nodeTimestamp: number; + success: boolean + nodeTimestamp: number /** The `nethash` describes e.g. the Mainnet or the Testnet, that the node is connecting to. */ - nethash: string; + nethash: string } /** @example {"success":true,"nodeTimestamp":58646306,"milestone":1} */ export interface GetMilestoneResponseDto { - success: boolean; - nodeTimestamp: number; + success: boolean + nodeTimestamp: number /** Current slot height, which determines reward a delegate will get for forging a block. */ - milestone: number; + milestone: number } /** @example {"success":true,"nodeTimestamp":58646306,"reward":45000000} */ export interface GetRewardResponseDto { - success: boolean; - nodeTimestamp: number; + success: boolean + nodeTimestamp: number /** The reward a delegate will get for forging a block. Integer amount of 1/10^8 ADM tokens (1 ADM = 100000000). Depends on the slot height. */ - reward: number; + reward: number } /** @example {"success":true,"nodeTimestamp":58646306,"supply":10198038140000000} */ export interface GetTokensTotalSupplyResponseDto { - success: boolean; - nodeTimestamp: number; + success: boolean + nodeTimestamp: number /** Total current supply of ADM tokens in the network. Integer amount of 1/10^8 ADM tokens (1 ADM = 100000000). Total supply increases with every new forged block. */ - supply: number; + supply: number } export type GetNetworkInfoResponseDto = NetworkStatus & { - success: boolean; - nodeTimestamp: number; -}; + success: boolean + nodeTimestamp: number +} export interface GetNodeStatusResponseDto { /** @example true */ - success: boolean; + success: boolean /** @example 58052984 */ - nodeTimestamp: number; - network: NetworkStatus; - version: NodeVersion; - wsClient: WsClient; + nodeTimestamp: number + /** @example {"loaded":true,"now":4819,"syncing":true,"consensus":0,"blocks":15145334,"blocksCount":0} */ + loader: { + loaded: boolean + now: number + syncing: boolean + consensus: number + blocks: number + blocksCount: number + } + network: NetworkStatus + version: NodeVersion + wsClient: WsClient } export interface GetKVSResponseDto { - transactions: KVSTransaction[]; - /** - * Integer in string format - * @example "1" - */ - count: string; + transactions: KVSTransaction[] + /** @example 1 */ + count: number /** @example true */ - success: boolean; + success: boolean /** @example 63647706 */ - nodeTimestamp: number; + nodeTimestamp: number } export interface SetKVSRequestBody { - transaction: RegisterKVSTransaction; + transaction: RegisterKVSTransaction } /** @example {"success":true,"nodeTimestamp":63410860,"transactionId":"3888802408802922744"} */ export interface SetKVSResponseDto { - success: boolean; - nodeTimestamp: number; - transactionId: string; + success: boolean + nodeTimestamp: number + transactionId: string } export interface GetTransactionsResponseDto { - transactions: AnyTransaction[]; - /** - * Integer in string format - * @example "1" - */ - count: string; + transactions: AnyTransaction[] + /** @example 1 */ + count: number /** @example true */ - success: boolean; + success: boolean /** @example 63647706 */ - nodeTimestamp: number; + nodeTimestamp: number } export interface GetTransactionByIdResponseDto { - transaction: AnyTransaction; + transaction: AnyTransaction /** @example true */ - success: boolean; + success: boolean /** @example 63647706 */ - nodeTimestamp: number; + nodeTimestamp: number } /** @example {"success":true,"nodeTimestamp":59979539,"confirmed":256953,"unconfirmed":44,"queued":4,"multisignature":0} */ export interface GetTransactionsCountResponseDto { - success: boolean; - nodeTimestamp: number; - confirmed: number; - unconfirmed: number; - queued: number; - multisignature: number; + success: boolean + nodeTimestamp: number + confirmed: number + unconfirmed: number + queued: number + multisignature: number } export interface GetQueuedTransactionsResponseDto { - transactions: QueuedTransaction[]; - /** - * Integer in string format - * @example "1" - */ - count: string; + transactions: QueuedTransaction[] + /** @example 1 */ + count: number /** @example true */ - success: boolean; + success: boolean /** @example 63647706 */ - nodeTimestamp: number; + nodeTimestamp: number } export interface GetQueuedTransactionByIdResponseDto { - transaction: QueuedTransaction; + transaction: QueuedTransaction /** @example true */ - success: boolean; + success: boolean /** @example 63647706 */ - nodeTimestamp: number; + nodeTimestamp: number } export interface GetUnconfirmedTransactionsResponseDto { - transactions: QueuedTransaction[]; - /** - * Integer in string format - * @example "1" - */ - count: string; + transactions: QueuedTransaction[] + /** @example 1 */ + count: number /** @example true */ - success: boolean; + success: boolean /** @example 63647706 */ - nodeTimestamp: number; + nodeTimestamp: number } export interface GetUnconfirmedTransactionByIdResponseDto { - transaction: QueuedTransaction; + transaction: QueuedTransaction /** @example true */ - success: boolean; + success: boolean /** @example 63647706 */ - nodeTimestamp: number; + nodeTimestamp: number } export interface TransferTokenRequestBody { - transaction: RegisterTokenTransferTransaction; + transaction: RegisterTokenTransferTransaction } export interface TransferTokenResponseDto { /** @example "6146865104403680934" */ - transactionId: string; + transactionId: string /** @example true */ - success: boolean; + success: boolean /** @example 63647706 */ - nodeTimestamp: number; + nodeTimestamp: number } export interface RegisterTransactionRequestBody { - transaction: RegisterAnyTransaction; + transaction: RegisterAnyTransaction } export interface RegisterTransactionResponseDto { /** @example "6146865104403680934" */ - transactionId: string; + transactionId: string /** @example true */ - success: boolean; + success: boolean /** @example 63647706 */ - nodeTimestamp: number; + nodeTimestamp: number } /** * 256 bit public key of ADAMANT address in hex format * @example "ef5e78a3d02e6d82f4ac0c5b8923c1b86185bd17c27c9ac027c20ec62db79a84" */ -export type PublicKey = string; +export type PublicKey = string export interface AccountDto { - address: string; + address: string /** @format int64 */ - unconfirmedBalance: string; + unconfirmedBalance: string /** @format int64 */ - balance: string; + balance: string /** 256 bit public key of ADAMANT address in hex format */ - publicKey: PublicKey; - unconfirmedSignature: number; - secondSignature: number; - secondPublicKey: string | null; + publicKey: PublicKey + unconfirmedSignature: number + secondSignature: number + secondPublicKey: string | null /** @example [] */ - multisignatures: string[]; + multisignatures: string[] /** @example [] */ - u_multisignatures: string[]; + u_multisignatures: string[] } /** @example {"id":"11114690216332606721","version":0,"timestamp":61741820,"height":10873829,"previousBlock":"11483763337863654141","numberOfTransactions":1,"totalAmount":10000000,"totalFee":50000000,"reward":45000000,"payloadLength":117,"payloadHash":"f7c0fa338a3a848119cad999d8035ab3fcb3d274a4555e141ebeb86205e41345","generatorPublicKey":"134a5de88c7da1ec71e75b5250d24168c6c6e3965ff16bd71497bd015d40ea6a","generatorId":"U3238410389688281135","blockSignature":"18607b15417a6b0a56b4c74cacd713ad7a10df16ec3ab45a697fa72b6f811f9213d895b7e0fbca71cf74323d60148d0991668e5368386408f4d841496ed2280d","confirmations":1093,"totalForged":"95000000"} */ export interface BlockInfoDto { /** @format int64 */ - id: string; - version: number; - timestamp: number; - height: number; + id: string + version: number + timestamp: number + height: number /** @format int64 */ - previousBlock: string; - numberOfTransactions: number; - totalAmount: number; - totalFee: number; - reward: number; - payloadLength: number; - payloadHash: string; - generatorId: string; - blockSignature: string; - confirmations: number; + previousBlock: string + numberOfTransactions: number + totalAmount: number + totalFee: number + reward: number + payloadLength: number + payloadHash: string + generatorId: string + blockSignature: string + confirmations: number /** @format int64 */ - totalForged: string; + totalForged: string } export interface BaseTransaction { - id: string; - height: number; - blockId: string; + id: string + height: number + blockId: string /** * Type of transaction. See [Transaction Types](https://github.com/Adamant-im/adamant/wiki/Transaction-Types). * @min 0 * @max 9 * @example 0 */ - type: number; - block_timestamp: number; - timestamp: number; - senderPublicKey: string; - senderId: string; - recipientId: string; - recipientPublicKey: string; + type: number + block_timestamp: number + timestamp: number + senderPublicKey: string + senderId: string + recipientId: string + recipientPublicKey: string /** * Amount to transfer, 8 decimal points (100000000 equals to 1 ADM). For non-transfer transactions must be `0` * @format int64 */ - amount: number; + amount: number /** Fee for operation. Depends on [Transaction Type](https://github.com/Adamant-im/adamant/wiki/Transaction-Types) */ - fee: number; - signature: string; - signatures: string[]; - confirmations: number; + fee: number + signature: string + signatures: string[] + confirmations: number /** @example {} */ - asset: object; + asset: object } /** * An empty object * @example {} */ -export type TokenTransferAsset = object; +export type TokenTransferAsset = object /** @example {"id":16682447412632443000,"height":10527806,"blockId":2635215585577611300,"type":0,"block_timestamp":59979295,"timestamp":59979276,"senderPublicKey":"632816f2c44a08f282e85532443d73286cadc6d9820d5d25c9d50d8e01c668e0","senderId":"U17362714543155685887","recipientId":"U17819800352812315500","recipientPublicKey":"28994b2cd075fd442e6ce78fa8c07966ed122932ff07411fed3c918e495586e2","amount":100000000,"fee":50000000,"signature":"1db7e9111eaca790b73d51c32572739c46fcba3962aff55ca47ecf9a8c9fcb82c323de39ed60bc87d81a1245d43b5351b9dd44ad70128d78536250168b64c408","signatures":[],"confirmations":18431929,"asset":{}} */ export type TokenTransferTransaction = BaseTransaction & { @@ -553,21 +556,21 @@ export type TokenTransferTransaction = BaseTransaction & { * Always equal to `0` * @example 0 */ - type: 0; + type: 0 /** An empty object */ - asset: TokenTransferAsset; -}; + asset: TokenTransferAsset +} /** @example {"chat":{"message":"748e4e9cffc969dfa4c1d7b9b708cb171c9e","own_message":"96904970891b838c9a3ab1b9a6f31ec194ec94ffaa95d0cd","type":1}} */ export interface ChatMessageAsset { chat: { /** Encrypted message */ - message: string; + message: string /** Nonce */ - own_message: string; + own_message: string /** Type of chat message (1 - Basic Encrypted Message, 2 - Rich Content Message, 3 - Signal Message). See details https://github.com/Adamant-im/adamant/wiki/Message-Types */ - type: 1 | 2 | 3; - }; + type: 1 | 2 | 3 + } } /** @example {"id":17242227802580636000,"height":7583081,"blockId":10363608465961390000,"type":8,"block_timestamp":64874935,"timestamp":64874929,"senderPublicKey":"b34d48d8d70b3a91f766df34789abf0cad62da7207e171d997508a460217c5d3","senderId":"U13267906643444995032","recipientId":"U9203183357885757380","recipientPublicKey":"741d3d1f52e609eef981e9ab370ec1e7c3ff70cafad94691937a2bb6d84bbff2","amount":0,"fee":100000,"signature":"8803346cf43457aba3480311ee489706ec66493fa043c4d1732682eb86e88d96f36a7e87c1d0d00dd3963f75e763e5554df402ee0aa79bd59bd55185a6e49a03","signatures":[],"confirmations":23229462,"asset":{"chat":{"message":"2f045f1d4a5198843999e2948b0cc78806","own_message":"a7cd3fa21e543dcc9f0564387d83c4d862137a2da37f29d4","type":1}}} */ @@ -576,31 +579,31 @@ export type ChatMessageTransaction = BaseTransaction & { * Always equal to `8` * @example 8 */ - type: 8; - asset: ChatMessageAsset; -}; + type: 8 + asset: ChatMessageAsset +} /** * ADAMANT address * @example "U8916295525136600565" */ -export type AdamantAddress = string; +export type AdamantAddress = string export interface ChatParticipant { /** ADAMANT address */ - address: AdamantAddress; + address: AdamantAddress /** 256 bit public key of ADAMANT address in hex format */ - publicKey: PublicKey; + publicKey: PublicKey } /** @example {"type":0,"amount":0,"senderId":"U14236667426471084862","senderPublicKey":"8cd9631f9f634a361ea3b85cbd0df882633e39e7d26d7bc615bbcf75e41524ef","signature":"b3982d603be8f0246fa663e9f012bf28b198cd28f82473db1eb4a342d890f7a2a2c1845db8d256bb5bce1e64a9425822a91e10bf960a2e0b55e20b4841e4ae0b","timestamp":63228852} */ export interface RegisterTransactionBase { - type: number; - amount: number; - senderId: string; - senderPublicKey: string; - signature: string; - timestamp: number; + type: number + amount: number + senderId: string + senderPublicKey: string + signature: string + timestamp: number } export type RegisterChatMessageTransaction = RegisterTransactionBase & { @@ -608,35 +611,35 @@ export type RegisterChatMessageTransaction = RegisterTransactionBase & { * Always equal to `8` * @example 8 */ - type: 8; - recipientId: string; - asset: ChatMessageAsset; -}; + type: 8 + recipientId: string + asset: ChatMessageAsset +} /** @example {"username":"galaxy","address":"U17457189553820283321","publicKey":"7e26562594685ba12c0bb99ae80692947828afb71962d54634795d78b3ea7023","vote":"248994436803629","votesWeight":"83910064952101","producedblocks":269879,"missedblocks":567,"rate":10,"rank":10,"approval":0.76,"productivity":99.79} */ export interface DelegateDto { /** Unique delegate's nickname */ - username: string; + username: string /** Delegate address */ - address: string; + address: string /** Delegate Public Key */ - publicKey: string; + publicKey: string /** Vote weight (obsolete, not used) */ - vote: string; + vote: string /** Vote weight (Fair Delegate System) */ - votesWeight: string; + votesWeight: string /** Count of produced blocks */ - producedlocks?: number; + producedlocks?: number /** Count of missed blocks */ - missedblocks: number; + missedblocks: number /** Current position in the Delegates List */ - rate: number; + rate: number /** Current position in the Delegates List */ - rank: number; + rank: number /** Share of votes of all votes in the system */ - approval: number; + approval: number /** Productivity / Uptime of a delegate. If `0`, delegate is not active now */ - productivity: number; + productivity: number } /** @example {"type":2,"amount":0,"senderId":"U3031563782805250428","senderPublicKey":"a339974effc141f302bd3589c603bdc9468dd66bcc424b60025b36999eb69ca3","signature":"c2e4a3ef7f0d363611a2b22b96feff269f1a0cbb61741a2ce55756bb9324826092fd9bff6348145e3cc384c097f101a493b9136da5236292ecf8b1ed6657dd01","timestamp":166805250,"asset":{"delegate":{"username":"kpeo","publicKey":"a339974effc141f302bd3589c603bdc9468dd66bcc424b60025b36999eb69ca3"}}} */ @@ -645,215 +648,222 @@ export type RegisterNewDelegateTransaction = RegisterTransactionBase & { * Should be always equal to `2` * @example 2 */ - type: 2; + type: 2 asset: { delegate: { - username: string; + username: string /** 256 bit public key of ADAMANT address in hex format */ - publicKey: PublicKey; - }; - }; -}; + publicKey: PublicKey + } + } +} export interface QueuedTransaction { /** @example "U14236667426471084862" */ - recipientId: string; + recipientId: string /** @example 0 */ - amount: number; + amount: number /** * See [Transaction Types](https://github.com/Adamant-im/adamant/wiki/Transaction-Types) * @min 0 * @max 9 * @example 3 */ - type: number; + type: number /** @example "U14236667426471084862" */ - senderId: string; + senderId: string /** @example "8cd9631f9f634a361ea3b85cbd0df882633e39e7d26d7bc615bbcf75e41524ef" */ - senderPublicKey: string; + senderPublicKey: string /** @example 63394407 */ - timestamp?: number; + timestamp?: number /** @example "7f4f5d240fc66da1cbdb3fe291d6fcec006848236355aebe346fcd1e3ba500caeac1ed0af6f3d7f912a889a1bbedc1d7bab17b6ebd36386b81df78189ddf7c07" */ - signature: string; + signature: string /** @example "13616514419605573351" */ - id: string; + id: string /** @example 5000000000 */ - fee: number; + fee: number /** @example 1 */ - relays: number; + relays: number /** * Date and time in ISO 8601 format * @example "2019-09-06T10:33:28.054Z" */ - receivedAt: string; + receivedAt: string + blockId: null + height: null + confirmations: 0 } /** @example {"delegate":{"address":"U3031563782805250428","username":"kpeo","publicKey":"a339974effc141f302bd3589c603bdc9468dd66bcc424b60025b36999eb69ca3"}} */ export interface RegisterDelegateAsset { delegate: { /** ADAMANT address */ - address: AdamantAddress; - username: string; + address: AdamantAddress + username: string /** 256 bit public key of ADAMANT address in hex format */ - publicKey: PublicKey; - }; + publicKey: PublicKey + } } export type RegisterDelegateTransactionDto = QueuedTransaction & { - asset: RegisterDelegateAsset; + asset: RegisterDelegateAsset /** * Always equal to `2` * @example 2 */ - type: 2; + type: 2 /** * Always equal to `300000000000` * @example 300000000000 */ - fee?: 300000000000; -}; + fee?: 300000000000 +} export type SearchDelegateDto = DelegateDto & { /** * Number of accounts who voted for delegate * @example 12 */ - voters_cnt: number; + voters_cnt: number /** * Epoch timestamp of when delegate was registered * @example 45523238 */ - register_timestamp: number; -}; + register_timestamp: number +} /** @example {"username":"leg","address":"U12609717384103730908","publicKey":"559418798f67a81b7f893aa8eab1218b9838a6b0bcd2bc8968c6d490ae0d5d77","balance":"506697"} */ export interface VoterDto { /** Voter's delegate username. `null` if address is not a delegate. */ - username: string | null; + username: string | null /** Voter's ADAMANT address */ - address: string; + address: string /** Voter's ADAMANT public key */ - publicKey: string; + publicKey: string /** ADM balance of voter's ADAMANT wallet. Integer amount of 1/10^8 ADM tokens (1 ADM = 100000000) */ - balance: string; + balance: string } /** @example {"votes":["-c0c580c3fb89409f32181fef58935f286f0c1bbf61bd727084ed915b3a4bc95b","ac903ab58135cd5f0613a929d876953214d224034b73c33e63bc153d669447f4"]} */ export interface VoteForDelegateAsset { - votes: string[]; + votes: string[] } export type RegisterVoteForDelegateTransaction = RegisterTransactionBase & { - asset: VoteForDelegateAsset; + asset: VoteForDelegateAsset /** * ADAMANT address of account who votes. Same as `senderId` * @example "U14236667426471084862" */ - recipientId: string; + recipientId: string /** * Should be always equal to `3` * @example 3 */ - type: 3; + type: 3 /** * ADAMANT address of account who votes. Same as `recipientId` * @example "U14236667426471084862" */ - senderId: string; -}; + senderId: string +} export type RegisterVotesTransactionDto = QueuedTransaction & { - asset: VoteForDelegateAsset; + asset: VoteForDelegateAsset /** * Always equal to `3` * @example 3 */ - type: 3; + type: 3 /** @example true */ - success: boolean; + success: boolean /** @example 61762271 */ - nodeTimestamp: number; -}; + nodeTimestamp: number +} -/** @example {"ip":"194.32.79.175","port":36666,"state":2,"os":"linux4.15.0-36-generic","version":"0.4.0","broadhash":"3dfdf6c7bbaf7537eac9c70432f7ba1cae835b9b15e4ecd97e147616dde67e62","height":10146365,"clock":null,"updated":1562424199553,"nonce":"jxXV6g0sHJhmDubq"} */ +/** @example {"ip":"194.32.79.175","port":36666,"state":2,"os":"linux4.15.0-36-generic","version":"0.4.0","broadhash":"3dfdf6c7bbaf7537eac9c70432f7ba1cae835b9b15e4ecd97e147616dde67e62","height":10146365,"clock":null,"updated":1562424199553,"nonce":"jxXV6g0sHJhmDubq","isBroadcastingViaSocket":false,"syncProtocol":"ws"} */ export interface PeerDto { /** IPv4 address of node */ - ip: string; + ip: string /** Port number of ADAMANT node. `36666` for mainnet or `36667` for testnet */ - port: string; + port: string /** State of the peer. Available values: Connected (2), Disconnected, Banned */ - state: number; + state: number /** Node's operating system */ - os: string; + os: string /** ADAMANT node software version */ - version: string; + version: string /** Broadhash on the peer node. Broadhash is established as an aggregated rolling hash of the past five blocks present in the database. */ - broadhash: string; + broadhash: string /** Current node's blockchain height */ - height: number; - clock: string | null; + height: number + clock: string | null /** Unix timestamp based in ms, when peer updated */ - updated: number; + updated: number /** Unique Identifier for the peer. Random string. */ - nonce: string; + nonce: string + /** Indicates whether the node can send transactions to the peer over WebSocket. */ + isBroadcastingViaSocket: boolean + /** Indicates the protocol used to subscribe to the peer: 'http' if using HTTP only, or 'ws' if using WebSocket, which also allows receiving transactions via both WebSocket and HTTP. */ + syncProtocol: 'http' | 'ws' } /** @example {"build":"","commit":"b07aaf9580dffb5cc95cc65f303f6f1e5fca7d9c","version":"0.5.2"} */ export interface NodeVersion { - build: string; - commit: string; - version: string; + build: string + commit: string + version: string } /** @example {"send":50000000,"vote":5000000000,"delegate":300000000000,"old_chat_message":500000,"chat_message":100000,"state_store":100000,"profile_update":5000000,"avatar_upload":10000000} */ export interface TransactionTypesFeesDto { /** Token transfer, type 0 */ - send: number; + send: number /** Voting for delegate, type 3 */ - vote: number; + vote: number /** Registration of a new delegate, type 2 */ - delegate: number; + delegate: number /** Sending a message (not used for now) */ - old_chat_message: number; + old_chat_message: number /** Sending a message, type 8 */ - chat_message: number; + chat_message: number /** Storing data in KVS, type 9 */ - state_store: number; - profile_update: number; - avatar_upload: number; + state_store: number + profile_update: number + avatar_upload: number } /** @example {"broadhash":"4a28272c915f74d118120bb47db547a18a7512e1d48092c48be86939a6d45b89","epoch":"2017-09-02T17:00:00.000Z","height":10145334,"fee":50000000,"milestone":1,"nethash":"bd330166898377fb28743ceef5e43a5d9d0a3efd9b3451fb7bc53530bb0a6d64","reward":45000000,"supply":10198040075000000} */ export interface NetworkStatus { /** Broadhash is established as an aggregated rolling hash of the past five blocks present in the database */ - broadhash: string; + broadhash: string /** Time when blockchain epoch starts. Value `2017-09-02T17:00:00.000Z` is for mainnet. */ - epoch: string; - height: number; - fee: number; + epoch: string + height: number + fee: number /** Current slot height, which determines reward a delegate will get for forging a block. */ - milestone: number; + milestone: number /** The `nethash` describes e.g. the Mainnet or the Testnet, that the node is connecting to. */ - nethash: string; + nethash: string /** The reward a delegate will get for forging a block. Integer amount of 1/10^8 ADM tokens (1 ADM = 100000000). */ - reward: number; + reward: number /** Total current supply of ADM tokens in the network. Integer amount of 1/10^8 ADM tokens (1 ADM = 100000000). */ - supply: number; + supply: number } /** @example {"enabled":true,"port":36668} */ export interface WsClient { - enabled: boolean; - port: number; + enabled: boolean + port: number } /** @example {"state":{"key":"eth:address","value":"0x2391EEaEc07B927D2BA4Fa5cB3cE4b490Fa6fffC","type":0}} */ export interface KVSTransactionAsset { state: { - key: string; - value: string; - type: 0; - }; + key: string + value: string + type: 0 + } } /** @example {"id":11325216963059857000,"height":3377231,"blockId":14121859709526400000,"type":9,"block_timestamp":23943500,"timestamp":23943500,"senderPublicKey":"ac903ab58135cd5f0613a929d876953214d224034b73c33e63bc153d669447f4","senderId":"U5517006347330072401","recipientId":null,"recipientPublicKey":null,"amount":0,"fee":100000,"signature":"4c3bcca1f6c921cef7ce07f4e641f668c5c0660bb6432335d5e2117c7a4d8378b352e7fa4fac3126bd7228f5b9ac5d57100bb161da02f7efc16df9f7e602b10d","signatures":[],"confirmations":7856415,"asset":{"state":{"key":"eth:address","value":"0x2391EEaEc07B927D2BA4Fa5cB3cE4b490Fa6fffC","type":0}}} */ @@ -862,22 +872,22 @@ export type KVSTransaction = BaseTransaction & { * Always equal to `9` * @example 9 */ - type: 9; + type: 9 /** There is no recipient for this type of transaction */ - recipientId?: string | null; + recipientId?: string | null /** There is no recipient for this type of transaction */ - recipientPublicKey?: string | null; - asset: KVSTransactionAsset; -}; + recipientPublicKey?: string | null + asset: KVSTransactionAsset +} export type RegisterKVSTransaction = RegisterTransactionBase & { /** * Should be always equal to `9` (Store in KVS transaction type) * @example 9 */ - type: 9; - asset: KVSTransactionAsset; -}; + type: 9 + asset: KVSTransactionAsset +} /** @example {"id":14674137414602658000,"height":31536741,"blockId":15921349202793791000,"type":2,"block_timestamp":166805152,"timestamp":166805152,"senderPublicKey":"a339974effc141f302bd3589c603bdc9468dd66bcc424b60025b36999eb69ca3","senderId":"U3031563782805250428","recipientId":null,"recipientPublicKey":null,"amount":0,"fee":300000000000,"relays":1,"signature":"1833a86e24d57ad6dbd30c47924500a03096fd06076fafe5bca4f23ab4629268f3b1a58a1ce275356bc0b79f64a11b8abe9bec6c3d55202d6393327f9278910b","signatures":[],"confirmations":427,"asset":{"delegate":{"username":"kpeo","publicKey":"a339974effc141f302bd3589c603bdc9468dd66bcc424b60025b36999eb69ca3","address":"U3031563782805250428"}}} */ export type RegisterDelegateTransaction = BaseTransaction & { @@ -885,48 +895,48 @@ export type RegisterDelegateTransaction = BaseTransaction & { * Always equal to `2` * @example 2 */ - type: 2; + type: 2 /** There is no recipient for this type of transaction */ - recipientId?: string | null; + recipientId?: string | null /** There is no recipient for this type of transaction */ - recipientPublicKey?: string | null; - asset: RegisterDelegateAsset; -}; + recipientPublicKey?: string | null + asset: RegisterDelegateAsset +} /** @example {"id":9888167852341778000,"height":10488572,"blockId":16481510969712464000,"type":3,"block_timestamp":59782601,"timestamp":59782601,"senderPublicKey":"9560562121cdc41112a0b288101079346d9c67f5bbff1f4d5a29483258c9477a","senderId":"U9221911598904803004","recipientId":"U9221911598904803004","recipientPublicKey":"9560562121cdc41112a0b288101079346d9c67f5bbff1f4d5a29483258c9477a","amount":0,"fee":5000000000,"signature":"fe199a4a5790186c1c482c6f5c0de5b7baa0a66e4b97abcb96f47e197880ea8333dc57e1b497e32eabdb157ac834dbd85d58d7c550e8aabe208af79026279c04","signatures":[],"confirmations":745088,"asset":{"votes":["-c0c580c3fb89409f32181fef58935f286f0c1bbf61bd727084ed915b3a4bc95b"]},"votes":{"added":[],"deleted":["c0c580c3fb89409f32181fef58935f286f0c1bbf61bd727084ed915b3a4bc95b"]}} */ export type VoteForDelegateTransaction = BaseTransaction & { votes: { /** List of Upvoted delegates */ - added?: string[]; + added?: string[] /** List of Downvoted delegates */ - deleted?: string[]; - }; + deleted?: string[] + } /** * Always equal to `3` * @example 3 */ - type: 3; - asset: VoteForDelegateAsset; -}; + type: 3 + asset: VoteForDelegateAsset +} export type AnyTransaction = | TokenTransferTransaction | RegisterDelegateTransaction | VoteForDelegateTransaction | ChatMessageTransaction - | KVSTransaction; + | KVSTransaction export type RegisterTokenTransferTransaction = RegisterTransactionBase & { /** Can be `type 0 — Token transfer` or `type 8 — Chat/Message`. */ - type: 0 | 8; - recipientId: string; + type: 0 | 8 + recipientId: string /** Amount of token to transfer */ - amount: number; -}; + amount: number +} export type RegisterAnyTransaction = | RegisterVoteForDelegateTransaction | RegisterTokenTransferTransaction | RegisterKVSTransaction | RegisterChatMessageTransaction - | RegisterNewDelegateTransaction; + | RegisterNewDelegateTransaction diff --git a/src/api/index.ts b/src/api/index.ts index a42d21a..2fdb8ec 100644 --- a/src/api/index.ts +++ b/src/api/index.ts @@ -1,11 +1,6 @@ -import axios, {AxiosError} from 'axios'; -import {NodeManager, NodeManagerOptions} from '../helpers/healthCheck'; -import { - Logger, - type CustomLogger, - type LogLevel, - type LogLevelName, -} from '../helpers/logger'; +import axios, { AxiosError } from 'axios' +import { NodeManager, NodeManagerOptions } from '../helpers/healthCheck' +import { Logger, type CustomLogger, type LogLevel, type LogLevelName } from '../helpers/logger' import { AdamantApiResult, admToSats, @@ -19,9 +14,9 @@ import { isIntegerAmount, isMessageType, isPassphrase, - validateMessage, -} from '../helpers/validator'; -import {DEFAULT_GET_REQUEST_RETRIES, MessageType} from '../helpers/constants'; + validateMessage +} from '../helpers/validator' +import { DEFAULT_GET_REQUEST_RETRIES, MessageType } from '../helpers/constants' import type { DelegateDto, @@ -47,6 +42,7 @@ import type { GetNextForgersResponseDto, GetNodeStatusResponseDto, GetNodeVersionResponseDto, + GetPeerInfoResponseDto, GetPeersResponseDto, GetPingStatusResponseDto, GetQueuedTransactionsResponseDto, @@ -61,123 +57,111 @@ import type { GetUnconfirmedTransactionByIdResponseDto, GetUnconfirmedTransactionsResponseDto, GetVotersResponseDto, - SearchDelegateResponseDto, -} from './generated'; -import { - createAddressFromPublicKey, - createKeypairFromPassphrase, -} from '../helpers/keys'; + SearchDelegateResponseDto +} from './generated' +import { createAddressFromPublicKey, createKeypairFromPassphrase } from '../helpers/keys' import { createChatTransaction, createDelegateTransaction, createSendTransaction, - createVoteTransaction, -} from '../helpers/transactions'; -import {encodeMessage} from '../helpers/encryptor'; -import { - type VoteDirection, - transformTransactionQuery, - parseVote, - isVoteDirection, -} from './utils'; + createVoteTransaction +} from '../helpers/transactions' +import { encodeMessage } from '../helpers/encryptor' +import { type VoteDirection, transformTransactionQuery, parseVote, isVoteDirection } from './utils' -export type AdamantAddress = `U${string}`; +export type AdamantAddress = `U${string}` export interface UsernameObject { - username: string; + username: string } export interface PublicKeyObject { - publicKey: string; + publicKey: string } export interface AddressObject { - address: string; + address: string } /** * Object that contains either `address` or `publicKey` field */ -export type AddressOrPublicKeyObject = AddressObject | PublicKeyObject; - -/** - * Object that contains either `username` or `publicKey` field - */ -export type UsernameOrPublicKeyObject = UsernameObject | PublicKeyObject; +export type AddressOrPublicKeyObject = AddressObject | PublicKeyObject export type TransactionQuery = Partial & { - or?: Partial; - and?: Partial; -}; + or?: Partial + and?: Partial +} export interface GetBlocksOptions { - limit?: number; - offset?: number; - generatorPublicKey?: string; - height?: number; + limit?: number + offset?: number + generatorPublicKey?: string + height?: number } export interface GetDelegatesOptions { - limit?: number; - offset?: number; + limit?: number + offset?: number } export interface TransactionQueryParameters { - blockId?: number; - fromHeight?: number; - toHeight?: number; - minAmount?: number; - maxAmount?: number; - senderId?: string; - recipientId?: string; - inId?: string; - limit?: number; - offset?: number; - orderBy?: string; + returnUnconfirmed?: 1 | 0 + blockId?: number + fromHeight?: number + toHeight?: number + minAmount?: number + maxAmount?: number + senderId?: string + recipientId?: string + inId?: string + limit?: number + offset?: number + orderBy?: string } // parameters that available for /api/chatrooms export interface ChatroomsOptions extends TransactionQueryParameters { - type?: number; - withoutDirectTransfers?: boolean; + type?: number + includeDirectTransfers?: boolean } // parameters that available for /api/transactions export interface TransactionsOptions extends TransactionQueryParameters { - senderIds?: string[]; - recipientIds?: string[]; - senderPublicKey?: string; - senderPublicKeys?: string[]; - recipientPublicKey?: string; - recipientPublicKeys?: string[]; - type?: number; - types?: number[]; - returnAsset?: 1 | 0; + senderIds?: string[] + recipientIds?: string[] + senderPublicKey?: string + senderPublicKeys?: string[] + recipientPublicKey?: string + recipientPublicKeys?: string[] + type?: number + types?: number[] + returnAsset?: 1 | 0 } export interface AdamantApiOptions extends NodeManagerOptions { - nodes: string[]; + nodes: string[] - maxRetries?: number; - timeout?: number; + maxRetries?: number + timeout?: number - logger?: CustomLogger; - logLevel?: LogLevel | LogLevelName; + logger?: CustomLogger + logLevel?: LogLevel | LogLevelName } const publicKeysCache: { - [address: string]: string; -} = {}; + [address: string]: string +} = {} export class AdamantApi extends NodeManager { - maxRetries: number; + maxRetries: number constructor(options: AdamantApiOptions) { - const customLogger = new Logger(options.logLevel, options.logger); + const customLogger = new Logger(options.logLevel, options.logger) - super(customLogger, options); + super(customLogger, options) - this.maxRetries = options.maxRetries ?? DEFAULT_GET_REQUEST_RETRIES; + this.maxRetries = options.maxRetries ?? DEFAULT_GET_REQUEST_RETRIES } private async request( @@ -186,9 +170,9 @@ export class AdamantApi extends NodeManager { data: unknown, retryNo = 1 ): Promise> { - const {logger, maxRetries} = this; + const { logger, maxRetries } = this - const url = `${this.node}/api/${endpoint}`; + const url = `${this.node}/api/${endpoint}` try { const response = await axios>({ @@ -196,47 +180,45 @@ export class AdamantApi extends NodeManager { url, ...(method === 'POST' ? { - data, + data } : { - params: data, - }), - }); + params: data + }) + }) - return response.data; + return response.data } catch (error) { if (error instanceof AxiosError) { - const {response} = error; + const { response } = error const nodeStatus = response?.status ? `Request to ${url} failed with ${response.status} status code` - : `Node ${url} hasn't returned its status`; + : `Node ${url} hasn't returned its status` const logMessage = `[ADAMANT js-api] Get-request: ${nodeStatus}, ${error}${ - response?.data ? '. Message: ' + response.data.toString().trim() : '' - }.`; + response?.data ? '. Message: ' + JSON.stringify(response.data) : '' + }.` if (retryNo <= maxRetries) { - logger.log( - `${logMessage} Try ${retryNo} of ${maxRetries}. Retrying…` - ); + logger.log(`${logMessage} Try ${retryNo} of ${maxRetries}. Retrying…`) - await this.updateNodes(); - return this.request(method, endpoint, data, retryNo + 1); + await this.updateNodes() + return this.request(method, endpoint, data, retryNo + 1) } - logger.warn(`${logMessage} No more attempts, returning error.`); + logger.warn(`${logMessage} No more attempts, returning error.`) return { success: false, - errorMessage: `${error}`, - }; + errorMessage: `${error}` + } } return { success: false, - errorMessage: `${error}`, - }; + errorMessage: `${error}` + } } } @@ -246,7 +228,7 @@ export class AdamantApi extends NodeManager { * @details `endpoint` should be in `'accounts/getPublicKey'` format, excluding `'/api/'` */ async get(endpoint: string, params?: unknown) { - return this.request('GET', endpoint, params); + return this.request('GET', endpoint, params) } /** @@ -255,36 +237,33 @@ export class AdamantApi extends NodeManager { * @details `endpoint` should be in `'accounts/getPublicKey'` format, excluding `'/api/'` */ async post(endpoint: string, options: unknown) { - return this.request('POST', endpoint, options); + return this.request('POST', endpoint, options) } /** * Get account Public Key */ async getPublicKey(address: AdamantAddress) { - const cached = publicKeysCache[address]; + const cached = publicKeysCache[address] if (cached) { - return cached; + return cached } - const response = await this.get( - 'accounts/getPublicKey', - { - address, - } - ); + const response = await this.get('accounts/getPublicKey', { + address + }) if (response.success) { - const {publicKey} = response; + const { publicKey } = response - publicKeysCache[address] = publicKey; - return publicKey; + publicKeysCache[address] = publicKey + return publicKey } this.logger.warn( `[ADAMANT js-api] Failed to get public key for ${address}. ${response.errorMessage}.` - ); - return ''; + ) + return '' } /** @@ -294,23 +273,23 @@ export class AdamantApi extends NodeManager { */ async newDelegate(passphrase: string, username: string) { if (!isPassphrase(passphrase)) { - return badParameter('passphrase'); + return badParameter('passphrase') } if (!isDelegateName(username)) { - return badParameter('username'); + return badParameter('username') } - const keyPair = createKeypairFromPassphrase(passphrase); + const keyPair = createKeypairFromPassphrase(passphrase) const data = { keyPair, - username, - }; + username + } - const transaction = createDelegateTransaction(data); + const transaction = createDelegateTransaction(data) - return this.post('delegates', transaction); + return this.post('delegates', transaction) } /** @@ -325,133 +304,128 @@ export class AdamantApi extends NodeManager { isAmountInADM?: boolean ) { if (!isPassphrase(passphrase)) { - return badParameter('passphrase'); + return badParameter('passphrase') } - let address: AdamantAddress; - let publicKey = ''; + let address: AdamantAddress + let publicKey = '' if (!isAdmAddress(addressOrPublicKey)) { if (!isAdmPublicKey(addressOrPublicKey)) { - return badParameter('addressOrPublicKey', addressOrPublicKey); + return badParameter('addressOrPublicKey', addressOrPublicKey) } - publicKey = addressOrPublicKey; + publicKey = addressOrPublicKey try { - address = createAddressFromPublicKey(publicKey); - } catch (error) { - return badParameter('addressOrPublicKey', addressOrPublicKey); + address = createAddressFromPublicKey(publicKey) + } catch { + return badParameter('addressOrPublicKey', addressOrPublicKey) } } else { - address = addressOrPublicKey; + address = addressOrPublicKey } if (!isMessageType(type)) { - return badParameter('type', type); + return badParameter('type', type) } - const result = validateMessage(message, type); + const result = validateMessage(message, type) if (!result.success) { - return badParameter('message', message, result.error); + return badParameter('message', message, result.error) } - let amountInSat: number | undefined; + let amountInSat: number | undefined if (amount) { - amountInSat = amount; + amountInSat = amount if (isAmountInADM) { - amountInSat = admToSats(amount); + amountInSat = admToSats(amount) } if (!isIntegerAmount(amountInSat)) { - return badParameter('amount', amount); + return badParameter('amount', amount) } } if (!publicKey) { - publicKey = await this.getPublicKey(address); + publicKey = await this.getPublicKey(address) } if (!publicKey) { return { success: false, - errorMessage: `Unable to get public key for ${addressOrPublicKey}. It is necessary for sending an encrypted message. Account may be uninitialized (https://medium.com/adamant-im/chats-and-uninitialized-accounts-in-adamant-5035438e2fcd), or network error`, - }; + errorMessage: `Unable to get public key for ${addressOrPublicKey}. It is necessary for sending an encrypted message. Account may be uninitialized (https://medium.com/adamant-im/chats-and-uninitialized-accounts-in-adamant-5035438e2fcd), or network error` + } } - const keyPair = createKeypairFromPassphrase(passphrase); - const encryptedMessage = encodeMessage(message, keyPair, publicKey); + const keyPair = createKeypairFromPassphrase(passphrase) + const encryptedMessage = encodeMessage(message, keyPair, publicKey) const data = { ...encryptedMessage, keyPair, recipientId: address, message_type: type, - amount: amountInSat, - }; + amount: amountInSat + } - const transaction = createChatTransaction(data); + const transaction = createChatTransaction(data) return this.post('transactions/process', { - transaction, - }); + transaction + }) } /** * Send tokens to an account */ - sendTokens( - passphrase: string, - addressOrPublicKey: string, - amount: number, - isAmountInADM = true - ) { + sendTokens(passphrase: string, addressOrPublicKey: string, amount: number, isAmountInADM = true) { if (!isPassphrase(passphrase)) { - return badParameter('passphrase'); + return badParameter('passphrase') } - let address: AdamantAddress; + let address: AdamantAddress if (isAdmAddress(addressOrPublicKey)) { - address = addressOrPublicKey; + address = addressOrPublicKey } else { if (!isAdmPublicKey(addressOrPublicKey)) { - return badParameter('addressOrPublicKey', addressOrPublicKey); + return badParameter('addressOrPublicKey', addressOrPublicKey) } try { - address = createAddressFromPublicKey(addressOrPublicKey); - } catch (error) { - return badParameter('addressOrPublicKey', addressOrPublicKey); + address = createAddressFromPublicKey(addressOrPublicKey) + } catch { + return badParameter('addressOrPublicKey', addressOrPublicKey) } } - let amountInSat = amount; + let amountInSat = amount if (isAmountInADM) { - amountInSat = admToSats(amount); + amountInSat = admToSats(amount) } if (!isIntegerAmount(amountInSat)) { - return badParameter('amount', amount); + return badParameter('amount', amount) } - const keyPair = createKeypairFromPassphrase(passphrase); + const keyPair = createKeypairFromPassphrase(passphrase) const data = { keyPair, recipientId: address, - amount: amountInSat, - }; + amount: amountInSat + } - const transaction = createSendTransaction(data); + const transaction = createSendTransaction(data) return this.post('transactions/process', { - transaction, - }); + transaction + }) } /** @@ -475,85 +449,77 @@ export class AdamantApi extends NodeManager { */ async voteForDelegate(passphrase: string, votes: string[]) { if (!isPassphrase(passphrase)) { - return badParameter('passphrase'); + return badParameter('passphrase') } - const keyPair = createKeypairFromPassphrase(passphrase); + const keyPair = createKeypairFromPassphrase(passphrase) const uniqueVotes: { - [publicKey: string]: VoteDirection; - } = {}; + [publicKey: string]: VoteDirection + } = {} - let delegates: DelegateDto[] = []; + let delegates: DelegateDto[] = [] for (const vote of votes) { - const [name, direction] = parseVote(vote); + const [name, direction] = parseVote(vote) - const cachedPublicKey = publicKeysCache[name]; + const cachedPublicKey = publicKeysCache[name] if (cachedPublicKey) { - uniqueVotes[cachedPublicKey] = direction; - continue; + uniqueVotes[cachedPublicKey] = direction + continue } if (!isVoteDirection(direction)) { - return badParameter('votes', vote, 'the vote should have direction'); + return badParameter('votes', vote, 'the vote should have direction') } if (isAdmVoteForAddress(vote)) { if (!delegates.length) { - const response = await this.getDelegates(); + const response = await this.getDelegates() if (!response.success) { this.logger.warn( `[ADAMANT js-api] Failed to get list of delegates. ${response.errorMessage}.` - ); + ) - return badParameter( - 'votes', - vote, - 'unable to retrieve the delegates list' - ); + return badParameter('votes', vote, 'unable to retrieve the delegates list') } - ({delegates} = response); + ;({ delegates } = response) } - const delegate = delegates.find(delegate => delegate.address === name); + const delegate = delegates.find((delegate) => delegate.address === name) if (!delegate) { - return badParameter('votes', vote, 'the address is not a delegate'); + return badParameter('votes', vote, 'the address is not a delegate') } - const {publicKey} = delegate; + const { publicKey } = delegate - publicKeysCache[name] = publicKey; - uniqueVotes[publicKey] = direction; + publicKeysCache[name] = publicKey + uniqueVotes[publicKey] = direction - continue; + continue } if (isAdmVoteForDelegateName(vote)) { - const response = await this.getDelegate({username: name}); + const response = await this.getDelegate({ username: name }) if (!response.success) { this.logger.warn( `[ADAMANT js-api] Failed to get public key for ${vote}. ${response.errorMessage}.` - ); + ) - return badParameter( - 'votes', - name, - "unable to retrieve the delegate's public key" - ); + return badParameter('votes', name, "unable to retrieve the delegate's public key") } - const {publicKey} = response.delegate; + const { publicKey } = response.delegate - publicKeysCache[name] = publicKey; - uniqueVotes[publicKey] = direction; + publicKeysCache[name] = publicKey + uniqueVotes[publicKey] = direction - continue; + continue } if (!isAdmVoteForPublicKey(vote)) { @@ -561,22 +527,20 @@ export class AdamantApi extends NodeManager { 'votes', name, "the vote doesn't look like public key, address or delegate name" - ); + ) } - uniqueVotes[name] = direction; + uniqueVotes[name] = direction } const data = { keyPair, - votes: Object.keys(uniqueVotes).map( - name => `${uniqueVotes[name]}${name}` - ), - }; + votes: Object.keys(uniqueVotes).map((name) => `${uniqueVotes[name]}${name}`) + } - const transaction = createVoteTransaction(data); + const transaction = createVoteTransaction(data) - return this.post('accounts/delegates', transaction); + return this.post('accounts/delegates', transaction) } /** @@ -585,7 +549,7 @@ export class AdamantApi extends NodeManager { async getAccountInfo( options: AddressOrPublicKeyObject ): Promise> { - return this.get('accounts', options); + return this.get('accounts', options) } /** @@ -593,35 +557,32 @@ export class AdamantApi extends NodeManager { */ async getAccountBalance(address: string) { return this.get('accounts/getBalance', { - address, - }); + address + }) } /** * Get block information by ID */ async getBlock(id: string) { - return this.get('blocks/get', {id}); + return this.get('blocks/get', { id }) } /** * Get list of blocks */ async getBlocks(options?: GetBlocksOptions) { - return this.get('blocks', options); + return this.get('blocks', options) } /** * Get list of Chats */ - async getChats( - address: string, - options?: TransactionQuery - ) { + async getChats(address: string, options?: TransactionQuery) { return this.get( `chatrooms/${address}`, transformTransactionQuery(options) - ); + ) } /** @@ -635,21 +596,21 @@ export class AdamantApi extends NodeManager { return this.get( `chatrooms/${address1}/${address2}`, transformTransactionQuery(query) - ); + ) } /** * Retrieves list of registered ADAMANT delegates */ async getDelegates(options?: GetDelegatesOptions) { - return this.get('delegates', options); + return this.get('delegates', options) } /** * Get delegate info by `username` or `publicKey` */ - async getDelegate(options: UsernameOrPublicKeyObject) { - return this.get('delegates/get', options); + async getDelegate(options: AddressObject | UsernameObject | PublicKeyObject) { + return this.get('delegates/get', options) } /** @@ -658,24 +619,23 @@ export class AdamantApi extends NodeManager { * @param q - username */ async searchDelegates(q: string) { - return this.get('delegates/search', {q}); + return this.get('delegates/search', { q }) } /** * Get total count of delegates */ async getDelegatesCount() { - return this.get('delegates/count'); + return this.get('delegates/count') } /** * Get forging activity of a delegate */ async getDelegateStats(generatorPublicKey: string) { - return this.get( - 'delegates/forging/getForgedByAccount', - {generatorPublicKey} - ); + return this.get('delegates/forging/getForgedByAccount', { + generatorPublicKey + }) } /** @@ -685,8 +645,8 @@ export class AdamantApi extends NodeManager { */ async getNextForgers(limit?: number) { return this.get('delegates/getNextForgers', { - limit, - }); + limit + }) } /** @@ -695,7 +655,7 @@ export class AdamantApi extends NodeManager { * @param publicKey representing delegate's publicKey */ async getVoters(publicKey: string) { - return this.get('delegates/voters', {publicKey}); + return this.get('delegates/voters', { publicKey }) } /** @@ -705,64 +665,71 @@ export class AdamantApi extends NodeManager { */ async getVoteData(address: string) { return this.get('accounts/delegates', { - address, - }); + address + }) } /** * Gets list of connected peer nodes */ async getPeers() { - return this.get('peers'); + return this.get('peers') + } + + /** + * Finds and returns the known peer of the node + */ + async getPeer(params: { ip: string; port: number }) { + return this.get('peer', params) } /** * Gets loading status */ async getLoadingStatus() { - return this.get('loader/status'); + return this.get('loader/status') } /** * Gets information on node's sync process with other peers */ async getSyncStatus() { - return this.get('loader/status/sync'); + return this.get('loader/status/sync') } /** * Checks if the connected node is alive */ async getPingStatus() { - return this.get('loader/status/ping'); + return this.get('loader/status/ping') } /** * Gets node's software information */ async getNodeVersion() { - return this.get('peers/version'); + return this.get('peers/version') } /** * Broadhash is established as an aggregated rolling hash of the past five blocks present in the database. */ async getBroadhash() { - return this.get('blocks/getBroadhash'); + return this.get('blocks/getBroadhash') } /** * Returns time when blockchain epoch starts. Value `2017-09-02T17:00:00.000Z` is for mainnet. */ async getEpoch() { - return this.get('blocks/getEpoch'); + return this.get('blocks/getEpoch') } /** * Returns current node's blockchain height */ async getHeight() { - return this.get('blocks/getHeight'); + return this.get('blocks/getHeight') } /** @@ -770,28 +737,28 @@ export class AdamantApi extends NodeManager { * Integer amount of 1/10^8 ADM tokens (1 ADM = 100000000). */ async getFee() { - return this.get('blocks/getFee'); + return this.get('blocks/getFee') } /** * Returns current fee values for different transaction types */ async getFees() { - return this.get('blocks/getFees'); + return this.get('blocks/getFees') } /** * The nethash describes e.g. the Mainnet or the Testnet, that the node is connecting to. */ async getNethash() { - return this.get('blocks/getNethash'); + return this.get('blocks/getNethash') } /** * Return current slot height, which determines reward a delegate will get for forging a block. */ async getMilestone() { - return this.get('blocks/getMilestone'); + return this.get('blocks/getMilestone') } /** @@ -799,7 +766,7 @@ export class AdamantApi extends NodeManager { * Integer amount of 1/10^8 ADM tokens (1 ADM = 100000000). Depends on the slot height. */ async getReward() { - return this.get('blocks/getReward'); + return this.get('blocks/getReward') } /** @@ -807,44 +774,38 @@ export class AdamantApi extends NodeManager { * Total supply increases with every new forged block. */ async getSupply() { - return this.get('blocks/getSupply'); + return this.get('blocks/getSupply') } /** * Returns blockchain network information in a single request */ async getStatus() { - return this.get('blocks/getStatus'); + return this.get('blocks/getStatus') } /** * Returns both ADAMANT blockchain network information and Node information in a single request. */ async getNodeStatus() { - return this.get('node/status'); + return this.get('node/status') } /** * Returns list of transactions */ async getTransactions(options?: TransactionQuery) { - return this.get( - 'transactions', - transformTransactionQuery(options) - ); + return this.get('transactions', transformTransactionQuery(options)) } /** * Get transaction by ID */ - async getTransaction( - id: string, - options?: TransactionQuery - ) { + async getTransaction(id: string, options?: TransactionQuery) { return this.get('transactions/get', { id, - ...transformTransactionQuery(options), - }); + ...transformTransactionQuery(options) + }) } /** @@ -853,45 +814,39 @@ export class AdamantApi extends NodeManager { * @nav Transactions */ async getTransactionsCount() { - return this.get('transactions/count'); + return this.get('transactions/count') } /** * Get queued transactions count */ async getQueuedTransactions() { - return this.get('transactions/queued'); + return this.get('transactions/queued') } /** * Get queued transaction by ID */ async getQueuedTransaction(id: string) { - return this.get( - 'transactions/queued/get', - {id} - ); + return this.get('transactions/queued/get', { id }) } /** * Get unconfirmed transactions */ async getUnconfirmedTransactions() { - return this.get( - 'transactions/unconfirmed' - ); + return this.get('transactions/unconfirmed') } /** * Get unconfirmed transaction by ID */ async getUnconfirmedTransaction(id: string) { - return this.get( - 'transactions/unconfirmed/get', - {id} - ); + return this.get('transactions/unconfirmed/get', { + id + }) } } -export * from './generated'; -export * from './utils'; +export * from './generated' +export * from './utils' diff --git a/src/api/tests/utils.test.ts b/src/api/tests/utils.test.ts index ce0f0fa..b7842be 100644 --- a/src/api/tests/utils.test.ts +++ b/src/api/tests/utils.test.ts @@ -1,16 +1,15 @@ -import {transformTransactionQuery} from '../utils'; +import { transformTransactionQuery } from '../utils' describe('transformTransactionQuery', () => { it('should transform `or` and `and` object properties', () => { const transformed = transformTransactionQuery({ or: { maxAmount: 50000000, - senderPublicKey: - '801846655523f5e21f2d454b2f98f70aaf5d3887c806463100a1764a4e7c1457', + senderPublicKey: '801846655523f5e21f2d454b2f98f70aaf5d3887c806463100a1764a4e7c1457', senderPublicKeys: [ '801846655523f5e21f2d454b2f98f70aaf5d3887c806463100a1764a4e7c1457', - '4ef885053c630041f57493343d7f6023107c5dc8b8148147e732c93', - ], + '4ef885053c630041f57493343d7f6023107c5dc8b8148147e732c93' + ] }, and: { blockId: '7917597195203393333', @@ -21,27 +20,25 @@ describe('transformTransactionQuery', () => { senderIds: ['U18132012621449491414', 'U15881344309699504778'], recipientId: 'U15423595369615486571', recipientIds: ['U18132012621449491414', 'U15881344309699504778'], - recipientPublicKey: - '801846655523f5e21f2d454b2f98f70aaf5d3887c806463100a1764a4e7c1457', + recipientPublicKey: '801846655523f5e21f2d454b2f98f70aaf5d3887c806463100a1764a4e7c1457', recipientPublicKeys: [ '801846655523f5e21f2d454b2f98f70aaf5d3887c806463100a1764a4e7c1457', - '4ef885053c630041f57493343d7f6023107c5dc8b8148147e732c93', + '4ef885053c630041f57493343d7f6023107c5dc8b8148147e732c93' ], inId: 'U100739400829575109', type: 2, types: [9, 0], key: 'eth:address', - keyIds: ['eth:address', 'doge:address', 'dash:address'], - }, - }); + keyIds: ['eth:address', 'doge:address', 'dash:address'] + } + }) expect(transformed).toStrictEqual({ 'or:maxAmount': 50000000, - 'or:senderPublicKey': - '801846655523f5e21f2d454b2f98f70aaf5d3887c806463100a1764a4e7c1457', + 'or:senderPublicKey': '801846655523f5e21f2d454b2f98f70aaf5d3887c806463100a1764a4e7c1457', 'or:senderPublicKeys': [ '801846655523f5e21f2d454b2f98f70aaf5d3887c806463100a1764a4e7c1457', - '4ef885053c630041f57493343d7f6023107c5dc8b8148147e732c93', + '4ef885053c630041f57493343d7f6023107c5dc8b8148147e732c93' ], 'and:blockId': '7917597195203393333', 'and:fromHeight': 10336065, @@ -51,19 +48,18 @@ describe('transformTransactionQuery', () => { 'and:senderIds': ['U18132012621449491414', 'U15881344309699504778'], 'and:recipientId': 'U15423595369615486571', 'and:recipientIds': ['U18132012621449491414', 'U15881344309699504778'], - 'and:recipientPublicKey': - '801846655523f5e21f2d454b2f98f70aaf5d3887c806463100a1764a4e7c1457', + 'and:recipientPublicKey': '801846655523f5e21f2d454b2f98f70aaf5d3887c806463100a1764a4e7c1457', 'and:recipientPublicKeys': [ '801846655523f5e21f2d454b2f98f70aaf5d3887c806463100a1764a4e7c1457', - '4ef885053c630041f57493343d7f6023107c5dc8b8148147e732c93', + '4ef885053c630041f57493343d7f6023107c5dc8b8148147e732c93' ], 'and:inId': 'U100739400829575109', 'and:type': 2, 'and:types': [9, 0], 'and:key': 'eth:address', - 'and:keyIds': ['eth:address', 'doge:address', 'dash:address'], - }); - }); + 'and:keyIds': ['eth:address', 'doge:address', 'dash:address'] + }) + }) it('should NOT transform object properties other than `or` and `and`', () => { const transformed = transformTransactionQuery({ @@ -71,19 +67,19 @@ describe('transformTransactionQuery', () => { senderId: 'U15423595369615486571', senderIds: ['U18132012621449491414', 'U15881344309699504778'], and: { - maxAmount: 6000, + maxAmount: 6000 }, or: { - recipientIds: ['U18132012621449491414', 'U15881344309699504778'], - }, - }); + recipientIds: ['U18132012621449491414', 'U15881344309699504778'] + } + }) expect(transformed).toStrictEqual({ minAmount: 5000, senderId: 'U15423595369615486571', senderIds: ['U18132012621449491414', 'U15881344309699504778'], 'and:maxAmount': 6000, - 'or:recipientIds': ['U18132012621449491414', 'U15881344309699504778'], - }); - }); -}); + 'or:recipientIds': ['U18132012621449491414', 'U15881344309699504778'] + }) + }) +}) diff --git a/src/api/utils.ts b/src/api/utils.ts index f7c41ef..af552f8 100644 --- a/src/api/utils.ts +++ b/src/api/utils.ts @@ -1,50 +1,45 @@ -import {hasOwnProperty} from '../helpers/utils'; -import {TransactionQuery} from '.'; +import { hasOwnProperty } from '../helpers/utils' +import { TransactionQuery } from '.' -const VOTE_DIRECTIONS = ['+', '-'] as const; +const VOTE_DIRECTIONS = ['+', '-'] as const -export type VoteDirection = (typeof VOTE_DIRECTIONS)[number]; +export type VoteDirection = (typeof VOTE_DIRECTIONS)[number] -export const isVoteDirection = ( - direction: unknown -): direction is VoteDirection => - typeof direction === 'string' && - VOTE_DIRECTIONS.includes(direction as VoteDirection); +export const isVoteDirection = (direction: unknown): direction is VoteDirection => + typeof direction === 'string' && VOTE_DIRECTIONS.includes(direction as VoteDirection) export const parseVote = (vote: string): [string, VoteDirection] => { - const name = vote.slice(1); - const direction = vote.charAt(0); + const name = vote.slice(1) + const direction = vote.charAt(0) - return [name, direction as VoteDirection]; -}; + return [name, direction as VoteDirection] +} -export const transformTransactionQuery = ( - obj?: TransactionQuery -) => { +export const transformTransactionQuery = (obj?: TransactionQuery) => { if (!obj) { - return {}; + return {} } const transformed: Record = { - ...obj, - }; + ...obj + } for (const topLevelProp in obj) { if (hasOwnProperty(obj, topLevelProp)) { if (topLevelProp === 'or' || topLevelProp === 'and') { - const subProps = obj[topLevelProp]; + const subProps = obj[topLevelProp] for (const subProp in subProps) { if (hasOwnProperty(subProps, subProp)) { - const newKey = `${topLevelProp}:${subProp}`; - transformed[newKey] = subProps[subProp]; + const newKey = `${topLevelProp}:${subProp}` + transformed[newKey] = subProps[subProp] } } - delete transformed[topLevelProp]; + delete transformed[topLevelProp] } } } - return transformed; -}; + return transformed +} diff --git a/src/coins/btc.ts b/src/coins/btc.ts index 15dbb5b..94a7e25 100644 --- a/src/coins/btc.ts +++ b/src/coins/btc.ts @@ -1,31 +1,32 @@ -import * as bitcoin from 'bitcoinjs-lib'; -import {ECPairFactory} from 'ecpair'; -import * as tinysecp from 'tiny-secp256k1'; +import * as bitcoin from 'bitcoinjs-lib' +import { ECPairFactory } from 'ecpair' +import * as tinysecp from 'tiny-secp256k1' -import coininfo from 'coininfo'; +import coininfo from 'coininfo' -const RE_BTC_ADDRESS = /^(bc1|[13])[a-km-zA-HJ-NP-Z02-9]{25,39}$/; +const RE_BTC_ADDRESS = /^(bc1|[13])[a-km-zA-HJ-NP-Z02-9]{25,39}$/ -const network = coininfo.bitcoin.main.toBitcoinJS(); +const network = coininfo.bitcoin.main.toBitcoinJS() export const btc = { keys: (passphrase: string) => { - const pwHash = bitcoin.crypto.sha256(Buffer.from(passphrase)); + const pwHash = bitcoin.crypto.sha256(Buffer.from(passphrase)) - const ECPairAPI = ECPairFactory(tinysecp); - const keyPair = ECPairAPI.fromPrivateKey(pwHash, {network}); + const ECPairAPI = ECPairFactory(tinysecp) + const keyPair = ECPairAPI.fromPrivateKey(pwHash, { network }) + + const publicKey = Buffer.from(keyPair.publicKey) + const privateKey = keyPair.privateKey ? Buffer.from(keyPair.privateKey) : undefined return { network, keyPair, - address: bitcoin.payments.p2pkh({pubkey: keyPair.publicKey, network}) - .address, + address: bitcoin.payments.p2pkh({ pubkey: publicKey, network }).address, // BTC private key is a regular 256-bit key - privateKey: keyPair.privateKey?.toString('hex'), // regular 256-bit (32 bytes, 64 characters) private key - privateKeyWIF: keyPair.toWIF(), // Wallet Import Format (52 base58 characters) - }; + privateKey: privateKey?.toString('hex'), // regular 256-bit (32 bytes, 64 characters) private key + privateKeyWIF: keyPair.toWIF() // Wallet Import Format (52 base58 characters) + } }, - isValidAddress: (address: string) => - typeof address === 'string' && RE_BTC_ADDRESS.test(address), -}; + isValidAddress: (address: string) => typeof address === 'string' && RE_BTC_ADDRESS.test(address) +} diff --git a/src/coins/dash.ts b/src/coins/dash.ts index 3c6b47d..aa34b61 100644 --- a/src/coins/dash.ts +++ b/src/coins/dash.ts @@ -1,30 +1,32 @@ -import * as bitcoin from 'bitcoinjs-lib'; -import {ECPairFactory} from 'ecpair'; -import * as tinysecp from 'tiny-secp256k1'; +import * as bitcoin from 'bitcoinjs-lib' +import { ECPairFactory } from 'ecpair' +import * as tinysecp from 'tiny-secp256k1' -import coininfo from 'coininfo'; +import coininfo from 'coininfo' -const RE_DASH_ADDRESS = /^[7X][1-9A-HJ-NP-Za-km-z]{33,}$/; +const RE_DASH_ADDRESS = /^[7X][1-9A-HJ-NP-Za-km-z]{33,}$/ -const network = coininfo.dash.main.toBitcoinJS(); +const network = coininfo.dash.main.toBitcoinJS() +network.bech32 = '' export const dash = { keys: (passphrase: string) => { - const pwHash = bitcoin.crypto.sha256(Buffer.from(passphrase)); + const pwHash = bitcoin.crypto.sha256(Buffer.from(passphrase)) - const ECPairAPI = ECPairFactory(tinysecp); - const keyPair = ECPairAPI.fromPrivateKey(pwHash, {network}); + const ECPairAPI = ECPairFactory(tinysecp) + const keyPair = ECPairAPI.fromPrivateKey(pwHash, { network }) + + const publicKey = Buffer.from(keyPair.publicKey) + const privateKey = keyPair.privateKey ? Buffer.from(keyPair.privateKey) : undefined return { network, keyPair, - address: bitcoin.payments.p2pkh({pubkey: keyPair.publicKey, network}) - .address, + address: bitcoin.payments.p2pkh({ pubkey: publicKey, network }).address, // DASH private key is a regular 256-bit key - privateKey: keyPair.privateKey?.toString('hex'), // regular 256-bit (32 bytes, 64 characters) private key - privateKeyWIF: keyPair.toWIF(), // Wallet Import Format (52 base58 characters) - }; + privateKey: privateKey?.toString('hex'), // regular 256-bit (32 bytes, 64 characters) private key + privateKeyWIF: keyPair.toWIF() // Wallet Import Format (52 base58 characters) + } }, - isValidAddress: (address: string) => - typeof address === 'string' && RE_DASH_ADDRESS.test(address), -}; + isValidAddress: (address: string) => typeof address === 'string' && RE_DASH_ADDRESS.test(address) +} diff --git a/src/coins/doge.ts b/src/coins/doge.ts index a7045b0..df8d025 100644 --- a/src/coins/doge.ts +++ b/src/coins/doge.ts @@ -1,30 +1,32 @@ -import * as bitcoin from 'bitcoinjs-lib'; -import {ECPairFactory} from 'ecpair'; -import * as tinysecp from 'tiny-secp256k1'; +import * as bitcoin from 'bitcoinjs-lib' +import { ECPairFactory } from 'ecpair' +import * as tinysecp from 'tiny-secp256k1' -import coininfo from 'coininfo'; +import coininfo from 'coininfo' -const RE_DOGE_ADDRESS = /^[A|D|9][A-Z0-9]([0-9a-zA-Z]{9,})$/; +const RE_DOGE_ADDRESS = /^[A|D|9][A-Z0-9]([0-9a-zA-Z]{9,})$/ -const network = coininfo.dogecoin.main.toBitcoinJS(); +const network = coininfo.dogecoin.main.toBitcoinJS() +network.bech32 = '' export const doge = { keys: (passphrase: string) => { - const pwHash = bitcoin.crypto.sha256(Buffer.from(passphrase)); + const pwHash = bitcoin.crypto.sha256(Buffer.from(passphrase)) - const ECPairAPI = ECPairFactory(tinysecp); - const keyPair = ECPairAPI.fromPrivateKey(pwHash, {network}); + const ECPairAPI = ECPairFactory(tinysecp) + const keyPair = ECPairAPI.fromPrivateKey(pwHash, { network }) + + const publicKey = Buffer.from(keyPair.publicKey) + const privateKey = keyPair.privateKey ? Buffer.from(keyPair.privateKey) : undefined return { network, keyPair, - address: bitcoin.payments.p2pkh({pubkey: keyPair.publicKey, network}) - .address, + address: bitcoin.payments.p2pkh({ pubkey: publicKey, network }).address, // DOGE private key is a regular 256-bit key - privateKey: keyPair.privateKey?.toString('hex'), // regular 256-bit (32 bytes, 64 characters) private key - privateKeyWIF: keyPair.toWIF(), // Wallet Import Format (52 base58 characters) - }; + privateKey: privateKey?.toString('hex'), // regular 256-bit (32 bytes, 64 characters) private key + privateKeyWIF: keyPair.toWIF() // Wallet Import Format (52 base58 characters) + } }, - isValidAddress: (address: string) => - typeof address === 'string' && RE_DOGE_ADDRESS.test(address), -}; + isValidAddress: (address: string) => typeof address === 'string' && RE_DOGE_ADDRESS.test(address) +} diff --git a/src/coins/eth.ts b/src/coins/eth.ts index 75fefa4..ecede0e 100644 --- a/src/coins/eth.ts +++ b/src/coins/eth.ts @@ -1,19 +1,21 @@ -import {mnemonicToSeedSync} from 'bip39'; -import hdkey from 'hdkey'; -import {bufferToHex, privateToAddress} from 'ethereumjs-util'; +import { mnemonicToSeedSync } from 'bip39' +import hdkey from 'hdkey' +import { bufferToHex, privateToAddress } from 'ethereumjs-util' -const HD_KEY_PATH = "m/44'/60'/3'/1/0"; +const HD_KEY_PATH = "m/44'/60'/3'/1/0" export const eth = { keys: (passphrase: string) => { - const seed = mnemonicToSeedSync(passphrase); - const privateKey = hdkey - .fromMasterSeed(seed) - .derive(HD_KEY_PATH).privateKey; + const seed = mnemonicToSeedSync(passphrase) + const privateKey = hdkey.fromMasterSeed(seed).derive(HD_KEY_PATH).privateKey + + if (privateKey === null) { + throw 'Invalid passphrase' + } return { address: bufferToHex(privateToAddress(privateKey)), - privateKey: bufferToHex(privateKey), - }; - }, -}; + privateKey: bufferToHex(privateKey) + } + } +} diff --git a/src/coins/index.ts b/src/coins/index.ts index 4e63994..ef1cd33 100644 --- a/src/coins/index.ts +++ b/src/coins/index.ts @@ -1,5 +1,5 @@ -export * from './btc'; -export * from './dash'; -export * from './doge'; -export * from './eth'; -export * from './lsk'; +export * from './btc' +export * from './dash' +export * from './doge' +export * from './eth' +export * from './lsk' diff --git a/src/coins/lsk.ts b/src/coins/lsk.ts index b9e9c75..1f0bb25 100644 --- a/src/coins/lsk.ts +++ b/src/coins/lsk.ts @@ -1,21 +1,21 @@ -import {address as cryptography} from '@liskhq/lisk-cryptography'; -import sodium from 'sodium-browserify-tweetnacl'; -import pbkdf2 from 'pbkdf2'; -import {bytesToHex} from '../helpers/encryptor'; +import { address as cryptography } from '@liskhq/lisk-cryptography' +import sodium from 'sodium-browserify-tweetnacl' +import pbkdf2 from 'pbkdf2' +import { bytesToHex } from '../helpers/encryptor' const LiskHashSettings = { SALT: 'adm', ITERATIONS: 2048, KEYLEN: 32, - DIGEST: 'sha256', -}; + DIGEST: 'sha256' +} const network = { name: 'Lisk', port: 8000, wsPort: 8001, - unit: 'LSK', -}; + unit: 'LSK' +} export const lsk = { keys: (passphrase: string) => { @@ -25,16 +25,12 @@ export const lsk = { LiskHashSettings.ITERATIONS, LiskHashSettings.KEYLEN, LiskHashSettings.DIGEST - ); - const keyPair = sodium.crypto_sign_seed_keypair(liskSeed); - const address = cryptography.getLisk32AddressFromPublicKey( - keyPair.publicKey - ); - const addressHexBinary = cryptography.getAddressFromPublicKey( - keyPair.publicKey - ); - const addressHex = bytesToHex(addressHexBinary); - const privateKey = keyPair.secretKey.toString('hex'); + ) + const keyPair = sodium.crypto_sign_seed_keypair(liskSeed) + const address = cryptography.getLisk32AddressFromPublicKey(keyPair.publicKey) + const addressHexBinary = cryptography.getAddressFromPublicKey(keyPair.publicKey) + const addressHex = bytesToHex(addressHexBinary) + const privateKey = keyPair.secretKey.toString('hex') return { network, @@ -42,7 +38,7 @@ export const lsk = { address, addressHexBinary, addressHex, - privateKey, - }; - }, -}; + privateKey + } + } +} diff --git a/src/coins/tests/btc.test.ts b/src/coins/tests/btc.test.ts index 14736d9..405568b 100644 --- a/src/coins/tests/btc.test.ts +++ b/src/coins/tests/btc.test.ts @@ -1,19 +1,18 @@ -import {btc} from '../btc'; -import {passphrase} from './mock/passphrase'; +import { btc } from '../btc' +import { passphrase } from './mock/passphrase' describe('btc.keys()', () => { test('should create keys with bitcoin network and address/privateKey for the passphrase', () => { - const keys = btc.keys(passphrase); + const keys = btc.keys(passphrase) expect(keys).toMatchObject({ address: '13rK42XbSJV9BdvKQvDJeH3n45zNBbXsUV', - privateKey: - '0c9c84722d74ae5c5ba52f74285807ef08085a66aa7b23377fa8cdd51f1ecff3', + privateKey: '0c9c84722d74ae5c5ba52f74285807ef08085a66aa7b23377fa8cdd51f1ecff3', privateKeyWIF: 'KweE3oRFhusodiwEsXjEH9rBR1HUfkZsHjHZHPzvKtXRjroArofw', network: { name: 'Bitcoin', - unit: 'BTC', - }, - }); - }); -}); + unit: 'BTC' + } + }) + }) +}) diff --git a/src/coins/tests/dash.test.ts b/src/coins/tests/dash.test.ts index 26b81e3..a78a923 100644 --- a/src/coins/tests/dash.test.ts +++ b/src/coins/tests/dash.test.ts @@ -1,19 +1,18 @@ -import {dash} from '../dash'; -import {passphrase} from './mock/passphrase'; +import { dash } from '../dash' +import { passphrase } from './mock/passphrase' describe('dash.keys()', () => { test('should create keys with dash network and address/privateKey for the passphrase', () => { - const keys = dash.keys(passphrase); + const keys = dash.keys(passphrase) expect(keys).toMatchObject({ address: 'XdY9tHBVQ1hjLaWuGoXXVojZtRa4GfEdNP', - privateKey: - '0c9c84722d74ae5c5ba52f74285807ef08085a66aa7b23377fa8cdd51f1ecff3', + privateKey: '0c9c84722d74ae5c5ba52f74285807ef08085a66aa7b23377fa8cdd51f1ecff3', privateKeyWIF: 'XBi9W4od1bWFh3wcuHj6nP3CL2Z47ZB7fJdTovL7eFoX91tC1QD4', network: { name: 'Dash', - unit: 'DASH', - }, - }); - }); -}); + unit: 'DASH' + } + }) + }) +}) diff --git a/src/coins/tests/doge.test.ts b/src/coins/tests/doge.test.ts index 445e353..905e9c6 100644 --- a/src/coins/tests/doge.test.ts +++ b/src/coins/tests/doge.test.ts @@ -1,19 +1,18 @@ -import {doge} from '../doge'; -import {passphrase} from './mock/passphrase'; +import { doge } from '../doge' +import { passphrase } from './mock/passphrase' describe('doge.keys()', () => { test('should create keys with doge network and address/privateKey for the passphrase', () => { - const keys = doge.keys(passphrase); + const keys = doge.keys(passphrase) expect(keys).toMatchObject({ address: 'D7zQbHUEjiPRie6v9WCsC3DNwDifUdbFdd', - privateKey: - '0c9c84722d74ae5c5ba52f74285807ef08085a66aa7b23377fa8cdd51f1ecff3', + privateKey: '0c9c84722d74ae5c5ba52f74285807ef08085a66aa7b23377fa8cdd51f1ecff3', privateKeyWIF: 'QP39CeEExXMvsFLHToa2ANgnt3K3iJhgAyyU52Pm4F8nBniweSFq', network: { name: 'Dogecoin', - unit: 'DOGE', - }, - }); - }); -}); + unit: 'DOGE' + } + }) + }) +}) diff --git a/src/coins/tests/eth.test.ts b/src/coins/tests/eth.test.ts index 663bcc6..da7d7c0 100644 --- a/src/coins/tests/eth.test.ts +++ b/src/coins/tests/eth.test.ts @@ -1,14 +1,13 @@ -import {eth} from '../eth'; -import {passphrase} from './mock/passphrase'; +import { eth } from '../eth' +import { passphrase } from './mock/passphrase' describe('eth.keys()', () => { test('should create address and privateKey for the passphrase', () => { - const keys = eth.keys(passphrase); + const keys = eth.keys(passphrase) expect(keys).toMatchObject({ address: '0x6c892b27f6deb1c81ed0122b23193c5802464c2c', - privateKey: - '0x2a3d59f8cab3c8b90d2e841c85872d0a78c75ac8d0b74186f856b3e954121277', - }); - }); -}); + privateKey: '0x2a3d59f8cab3c8b90d2e841c85872d0a78c75ac8d0b74186f856b3e954121277' + }) + }) +}) diff --git a/src/coins/tests/lsk.test.ts b/src/coins/tests/lsk.test.ts index b2ddca1..e91a6a9 100644 --- a/src/coins/tests/lsk.test.ts +++ b/src/coins/tests/lsk.test.ts @@ -1,9 +1,9 @@ -import {lsk} from '../lsk'; -import {passphrase} from './mock/passphrase'; +import { lsk } from '../lsk' +import { passphrase } from './mock/passphrase' describe('eth.keys()', () => { test('should create address and privateKey for the passphrase', () => { - const keys = lsk.keys(passphrase); + const keys = lsk.keys(passphrase) expect(keys).toMatchObject({ address: 'lsk53o76hxv9kkc4cq7239gbgtgjhq6uswgt5aqxc', @@ -12,8 +12,8 @@ describe('eth.keys()', () => { 'b0ec632b3ceb31dd2f1cfa8d3c16086f0d14c1344a126d0136bca3bf00d4fc1dddf501ed87c5d950241622ca678a7a96f59e63aa1a0ef89d4a6bbf096ba00471', network: { name: 'Lisk', - unit: 'LSK', - }, - }); - }); -}); + unit: 'LSK' + } + }) + }) +}) diff --git a/src/coins/tests/mock/passphrase.ts b/src/coins/tests/mock/passphrase.ts index 657b41d..22ec957 100644 --- a/src/coins/tests/mock/passphrase.ts +++ b/src/coins/tests/mock/passphrase.ts @@ -1,2 +1 @@ -export const passphrase = - 'learn arch equip tenant cause can brief brisk rich betray arrest damage'; +export const passphrase = 'learn arch equip tenant cause can brief brisk rich betray arrest damage' diff --git a/src/helpers/bignumber.ts b/src/helpers/bignumber.ts index dee176e..5b32c58 100644 --- a/src/helpers/bignumber.ts +++ b/src/helpers/bignumber.ts @@ -1,148 +1,134 @@ -import BigNumber from 'bignumber.js'; +import BigNumber from 'bignumber.js' -type Endian = 1 | -1 | 'big' | 'little'; +type Endian = 1 | -1 | 'big' | 'little' interface TransformBufferOptions { - endian?: Endian; - size?: number | 'auto'; + endian?: Endian + size?: number | 'auto' } type EndianMap = { - [K in Endian]: 'big' | 'little'; -}; + [K in Endian]: 'big' | 'little' +} const endianMap: EndianMap = { 1: 'big', '-1': 'little', big: 'big', - little: 'little', -}; + little: 'little' +} export const fromBuffer = (buf: Buffer, opts: TransformBufferOptions = {}) => { - const endian = resolveEndian(opts); + const endian = resolveEndian(opts) - const size = resolveSize(opts, buf.length); + const size = resolveSize(opts, buf.length) - validateBufferLength(buf, size); + validateBufferLength(buf, size) - const hex = bufferToHexArray(buf, size, endian); + const hex = bufferToHexArray(buf, size, endian) - return new BigNumber(hex.join(''), 16); -}; + return new BigNumber(hex.join(''), 16) +} -export const toBuffer = ( - bignumber: BigNumber, - opts: TransformBufferOptions | 'mpint' = {} -) => { +export const toBuffer = (bignumber: BigNumber, opts: TransformBufferOptions | 'mpint' = {}) => { if (typeof opts === 'string') { - return toMpintBuffer(bignumber); + return toMpintBuffer(bignumber) } - const endian = resolveEndian(opts); - const hex = bignumberToHex(bignumber); + const endian = resolveEndian(opts) + const hex = bignumberToHex(bignumber) - const size = resolveSize(opts, hex.length / 2); + const size = resolveSize(opts, hex.length / 2) - return hexToBuffer(hex, size, endian); -}; + return hexToBuffer(hex, size, endian) +} export function resolveEndian(opts: TransformBufferOptions): Endian { if (!opts.endian) { - return 'big'; + return 'big' } - return endianMap[opts.endian]; + return endianMap[opts.endian] } -export function resolveSize( - opts: TransformBufferOptions, - defaultSize: number -): number { - return opts.size === 'auto' ? Math.ceil(defaultSize) : opts.size || 1; +export function resolveSize(opts: TransformBufferOptions, defaultSize: number): number { + return opts.size === 'auto' ? Math.ceil(defaultSize) : opts.size || 1 } export function validateBufferLength(buf: Buffer, size: number) { if (buf.length % size !== 0) { - throw new RangeError( - `Buffer length (${buf.length}) must be a multiple of size (${size})` - ); + throw new RangeError(`Buffer length (${buf.length}) must be a multiple of size (${size})`) } } -export function bufferToHexArray( - buf: Buffer, - size: number, - endian: Endian -): string[] { - const hex: string[] = []; +export function bufferToHexArray(buf: Buffer, size: number, endian: Endian): string[] { + const hex: string[] = [] for (let i = 0; i < buf.length; i += size) { - const chunk: string[] = []; + const chunk: string[] = [] for (let j = 0; j < size; j++) { - const chunkIndex = endian === 'big' ? j : size - j - 1; - chunk.push(buf[i + chunkIndex].toString(16).padStart(2, '0')); + const chunkIndex = endian === 'big' ? j : size - j - 1 + chunk.push(buf[i + chunkIndex].toString(16).padStart(2, '0')) } - hex.push(chunk.join('')); + hex.push(chunk.join('')) } - return hex; + return hex } export function bignumberToHex(bignumber: BigNumber): string { - const hex = bignumber.toString(16); + const hex = bignumber.toString(16) if (hex.charAt(0) === '-') { - throw new Error('Converting negative numbers to Buffers not supported yet'); + throw new Error('Converting negative numbers to Buffers not supported yet') } - return hex; + return hex } export function hexToBuffer(hex: string, size: number, endian: Endian): Buffer { - const len = Math.ceil(hex.length / (2 * size)) * size; - const buf = Buffer.alloc(len); + const len = Math.ceil(hex.length / (2 * size)) * size + const buf = Buffer.alloc(len) while (hex.length < 2 * len) { - hex = '0' + hex; + hex = '0' + hex } - const hx = hex - .split(new RegExp('(.{' + 2 * size + '})')) - .filter(s => s.length > 0); + const hx = hex.split(new RegExp('(.{' + 2 * size + '})')).filter((s) => s.length > 0) hx.forEach((chunk, i) => { for (let j = 0; j < size; j++) { - const ix = i * size + (endian === 'big' ? j : size - j - 1); - buf[ix] = parseInt(chunk.slice(j * 2, j * 2 + 2), 16); + const ix = i * size + (endian === 'big' ? j : size - j - 1) + buf[ix] = parseInt(chunk.slice(j * 2, j * 2 + 2), 16) } - }); + }) - return buf; + return buf } function toMpintBuffer(bignumber: BigNumber): Buffer { - const buf = toBuffer(bignumber.abs(), {size: 1, endian: 'big'}); + const buf = toBuffer(bignumber.abs(), { size: 1, endian: 'big' }) - let len = buf.length === 1 && buf[0] === 0 ? 0 : buf.length; + let len = buf.length === 1 && buf[0] === 0 ? 0 : buf.length - if (buf[0] & 0x80) len++; + if (buf[0] & 0x80) len++ - const ret = Buffer.alloc(4 + len); - if (len > 0) buf.copy(ret, 4 + (buf[0] & 0x80 ? 1 : 0)); - if (buf[0] & 0x80) ret[4] = 0; + const ret = Buffer.alloc(4 + len) + if (len > 0) buf.copy(ret, 4 + (buf[0] & 0x80 ? 1 : 0)) + if (buf[0] & 0x80) ret[4] = 0 - ret[0] = len & (0xff << 24); - ret[1] = len & (0xff << 16); - ret[2] = len & (0xff << 8); - ret[3] = len & (0xff << 0); + ret[0] = len & (0xff << 24) + ret[1] = len & (0xff << 16) + ret[2] = len & (0xff << 8) + ret[3] = len & (0xff << 0) // Two's compliment for negative integers - const isNeg = bignumber.lt(0); + const isNeg = bignumber.lt(0) if (isNeg) { for (let i = 4; i < ret.length; i++) { - ret[i] = 0xff - ret[i]; + ret[i] = 0xff - ret[i] } } - ret[4] = (ret[4] & 0x7f) | (isNeg ? 0x80 : 0); - if (isNeg) ret[ret.length - 1]++; + ret[4] = (ret[4] & 0x7f) | (isNeg ? 0x80 : 0) + if (isNeg) ret[ret.length - 1]++ - return ret; + return ret } diff --git a/src/helpers/constants.ts b/src/helpers/constants.ts index b64394a..9bdb3b3 100644 --- a/src/helpers/constants.ts +++ b/src/helpers/constants.ts @@ -8,10 +8,10 @@ export enum TransactionType { IN_TRANSFER, OUT_TRANSFER, CHAT_MESSAGE, - STATE, + STATE } -export type MessageTypes = 1 | 2 | 3; +export type MessageTypes = 1 | 2 | 3 /** * Message type @@ -21,19 +21,19 @@ export type MessageTypes = 1 | 2 | 3; export enum MessageType { Chat = 1, Rich = 2, - Signal = 3, + Signal = 3 } -export const MAX_VOTES_PER_TRANSACTION = 33; +export const MAX_VOTES_PER_TRANSACTION = 33 /** * 4 seconds */ -export const HEALTH_CHECK_TIMEOUT = 4000; +export const HEALTH_CHECK_TIMEOUT = 4000 -export const DEFAULT_GET_REQUEST_RETRIES = 3; +export const DEFAULT_GET_REQUEST_RETRIES = 3 -export const SAT = 100_000_000; +export const SAT = 100_000_000 export const fees = { send: 50000000, @@ -46,5 +46,5 @@ export const fees = { chat_message: 100000, profile_update: 5000000, avatar_upload: 10000000, - state_store: 100000, -}; + state_store: 100000 +} diff --git a/src/helpers/encryptor.ts b/src/helpers/encryptor.ts index 044bf7a..c48c018 100644 --- a/src/helpers/encryptor.ts +++ b/src/helpers/encryptor.ts @@ -1,39 +1,39 @@ -import sodium from 'sodium-browserify-tweetnacl'; -import nacl from 'tweetnacl'; -import ed2curve from 'ed2curve'; -import {KeyPair, createKeypairFromPassphrase} from './keys'; +import sodium from 'sodium-browserify-tweetnacl' +import nacl from 'tweetnacl' +import ed2curve from 'ed2curve' +import { KeyPair, createKeypairFromPassphrase } from './keys' export const bytesToHex = (bytes: Uint8Array) => { - let hex = ''; + let hex = '' for (const byte of bytes) { - hex += (byte >>> 4).toString(16); - hex += (byte & 0xf).toString(16); + hex += (byte >>> 4).toString(16) + hex += (byte & 0xf).toString(16) } - return hex; -}; + return hex +} export const hexToBytes = (hex: string) => { - const bytes: number[] = []; + const bytes: number[] = [] for (let c = 0; c < hex.length; c += 2) { - bytes.push(parseInt(hex.slice(c, c + 2), 16)); + bytes.push(parseInt(hex.slice(c, c + 2), 16)) } - return Uint8Array.from(bytes); -}; + return Uint8Array.from(bytes) +} export const utf8ArrayToStr = (array: Uint8Array) => { - const len = array.length; - let out = ''; - let i = 0; - let c: number; - let char2: number; - let char3: number; + const len = array.length + let out = '' + let i = 0 + let c: number + let char2: number + let char3: number while (i < len) { - c = array[i++]; + c = array[i++] switch (c >> 4) { case 0: case 1: @@ -44,58 +44,58 @@ export const utf8ArrayToStr = (array: Uint8Array) => { case 6: case 7: // 0xxxxxxx - out += String.fromCharCode(c); - break; + out += String.fromCharCode(c) + break case 12: case 13: // 110x xxxx 10xx xxxx - char2 = array[i++]; - out += String.fromCharCode(((c & 0x1f) << 6) | (char2 & 0x3f)); - break; + char2 = array[i++] + out += String.fromCharCode(((c & 0x1f) << 6) | (char2 & 0x3f)) + break case 14: // 1110 xxxx 10xx xxxx 10xx xxxx - char2 = array[i++]; - char3 = array[i++]; + char2 = array[i++] + char3 = array[i++] out += String.fromCharCode( ((c & 0x0f) << 12) | ((char2 & 0x3f) << 6) | ((char3 & 0x3f) << 0) - ); - break; + ) + break } } - return out; -}; + return out +} export const encodeMessage = ( msg: string, keypair: KeyPair, recipientPublicKey: Uint8Array | string ) => { - const nonce = Buffer.allocUnsafe(24); - sodium.randombytes(nonce); + const nonce = Buffer.allocUnsafe(24) + sodium.randombytes(nonce) - const plainText = Buffer.from(msg.toString()); - const DHSecretKey = ed2curve.convertSecretKey(keypair.privateKey); + const plainText = Buffer.from(msg.toString()) + const DHSecretKey = ed2curve.convertSecretKey(keypair.privateKey) - let publicKey = recipientPublicKey; + let publicKey = recipientPublicKey if (typeof publicKey === 'string') { - publicKey = hexToBytes(publicKey); + publicKey = hexToBytes(publicKey) } - const DHPublicKey = ed2curve.convertPublicKey(publicKey); + const DHPublicKey = ed2curve.convertPublicKey(publicKey) if (!DHPublicKey) { - throw new Error('encodeMessage: invalid key'); + throw new Error('encodeMessage: invalid key') } - const encrypted = nacl.box(plainText, nonce, DHPublicKey, DHSecretKey); + const encrypted = nacl.box(plainText, nonce, DHPublicKey, DHSecretKey) return { message: bytesToHex(encrypted), - own_message: bytesToHex(nonce), - }; -}; + own_message: bytesToHex(nonce) + } +} export const decodeMessage = ( message: string, @@ -106,42 +106,35 @@ export const decodeMessage = ( const keypair = typeof keyPairOrPassphrase === 'string' ? createKeypairFromPassphrase(keyPairOrPassphrase) - : keyPairOrPassphrase; + : keyPairOrPassphrase const publicKey = - typeof senderPublicKey === 'string' - ? hexToBytes(senderPublicKey) - : senderPublicKey; + typeof senderPublicKey === 'string' ? hexToBytes(senderPublicKey) : senderPublicKey if (typeof message !== 'string') { - throw new Error('decodeMessage message should be a string'); + throw new Error('decodeMessage message should be a string') } if (typeof nonce !== 'string') { - throw new Error('decodeMessage: nonce should be a string'); + throw new Error('decodeMessage: nonce should be a string') } if (!(publicKey instanceof Uint8Array)) { throw new Error( 'decodeMessage: senderPublicKey should be a string or an instance of Uint8Array' - ); + ) } - const DHPublicKey = ed2curve.convertPublicKey(publicKey); + const DHPublicKey = ed2curve.convertPublicKey(publicKey) if (!DHPublicKey) { - throw new Error('decodeMessage: invalid key'); + throw new Error('decodeMessage: invalid key') } - const {privateKey} = keypair; - const DHSecretKey = ed2curve.convertSecretKey(privateKey); + const { privateKey } = keypair + const DHSecretKey = ed2curve.convertSecretKey(privateKey) - const decrypted = nacl.box.open( - hexToBytes(message), - hexToBytes(nonce), - DHPublicKey, - DHSecretKey - ); + const decrypted = nacl.box.open(hexToBytes(message), hexToBytes(nonce), DHPublicKey, DHSecretKey) - return decrypted ? utf8ArrayToStr(decrypted) : ''; -}; + return decrypted ? utf8ArrayToStr(decrypted) : '' +} diff --git a/src/helpers/healthCheck.ts b/src/helpers/healthCheck.ts index badb15a..757bf7e 100644 --- a/src/helpers/healthCheck.ts +++ b/src/helpers/healthCheck.ts @@ -1,263 +1,258 @@ -import axios from 'axios'; -import {HEALTH_CHECK_TIMEOUT} from './constants'; -import {Logger} from './logger'; -import {unixTimestamp} from './time'; -import {parseUrl} from './url'; +import axios from 'axios' +import { HEALTH_CHECK_TIMEOUT } from './constants' +import { Logger } from './logger' +import { unixTimestamp } from './time' +import { parseUrl } from './url' -import {GetNodeStatusResponseDto} from '../api/generated'; -import {AdamantApiResult, getRandomIntInclusive} from './validator'; -import {WebSocketClient, WsOptions} from './wsClient'; +import { GetNodeStatusResponseDto } from '../api/generated' +import { AdamantApiResult, getRandomIntInclusive } from './validator' +import { WebSocketClient, WsOptions } from './wsClient' export interface NodeManagerOptions { - nodes: string[]; - timeout?: number; - socket?: WebSocketClient; - checkHealthAtStartup?: boolean; + nodes: string[] + timeout?: number + socket?: WebSocketClient + checkHealthAtStartup?: boolean } export interface ActiveNode { - node: string; - ping: number; - baseURL: string; - ip?: string; - isHttps: boolean; - height: number; - heightEpsilon: number; - socketSupport: boolean; - wsPort: number; - outOfSync?: boolean; + node: string + ping: number + baseURL: string + ip?: string + isHttps: boolean + height: number + heightEpsilon: number + socketSupport: boolean + wsPort: number + outOfSync?: boolean } -const CHECK_NODES_INTERVAL = 60 * 5 * 1000; // Update active nodes every 5 minutes -const HEIGHT_EPSILON = 5; // Used to group nodes by height and choose synced +const CHECK_NODES_INTERVAL = 60 * 5 * 1000 // Update active nodes every 5 minutes +const HEIGHT_EPSILON = 5 // Used to group nodes by height and choose synced export class NodeManager { - options: NodeManagerOptions; + options: NodeManagerOptions - public node: string; - public socket?: WebSocketClient; + public node: string + public socket?: WebSocketClient - protected logger: Logger; + protected logger: Logger - private onReadyCallback?: () => void; + private onReadyCallback?: () => void - private initialized = false; - private isCheckingNodes = false; + private initialized = false + private isCheckingNodes = false constructor(logger: Logger, options: NodeManagerOptions) { this.options = { timeout: HEALTH_CHECK_TIMEOUT, checkHealthAtStartup: true, - ...options, - }; + ...options + } - const {socket, nodes, checkHealthAtStartup} = this.options; + const { socket, nodes, checkHealthAtStartup } = this.options - this.logger = logger; - this.socket = socket; + this.logger = logger + this.socket = socket - this.node = nodes[0]; + this.node = nodes[0] if (checkHealthAtStartup) { - this.updateNodes(true); + this.updateNodes(true).catch((error) => { + this.logger.warn(`[ADAMANT js-api] Failed to update nodes at startup: ${error}`) + }) - setInterval(() => this.updateNodes(true), CHECK_NODES_INTERVAL); + setInterval(() => this.updateNodes(true), CHECK_NODES_INTERVAL) } else { - this.ready(); + this.ready() } } public onReady(callback: () => void) { - this.onReadyCallback = callback; + this.onReadyCallback = callback } public initSocket(options: WebSocketClient | WsOptions) { if (options instanceof WebSocketClient) { - this.socket = options; + this.socket = options } else { - this.socket = new WebSocketClient({logger: this.logger, ...options}); + this.socket = new WebSocketClient({ logger: this.logger, ...options }) } } private ready() { if (this.onReadyCallback) { - this.onReadyCallback(); + this.onReadyCallback() } - this.initialized = true; + this.initialized = true } async updateNodes(isPlannedUpdate = false) { if (this.isCheckingNodes) { - return; + return } - this.isCheckingNodes = true; + this.isCheckingNodes = true if (!isPlannedUpdate) { - this.logger.warn( - '[ADAMANT js-api] Health check: Forcing to update active nodes…' - ); + this.logger.warn('[ADAMANT js-api] Health check: Forcing to update active nodes…') } - const activeNodes = await this.checkNodes(); + const activeNodes = await this.checkNodes() - await this.chooseNode(activeNodes, !isPlannedUpdate); + await this.chooseNode(activeNodes, !isPlannedUpdate) if (!this.initialized) { - this.ready(); + this.ready() } - this.isCheckingNodes = false; + this.isCheckingNodes = false } async chooseNode(activeNodes: ActiveNode[], forceChangeActiveNode?: boolean) { - const {logger, socket} = this; + const { logger, socket } = this - const {length: activeNodesCount} = activeNodes; + const { length: activeNodesCount } = activeNodes if (!activeNodesCount) { - const totalNodesCount = this.options.nodes.length; + const totalNodesCount = this.options.nodes.length logger.error( `[ADAMANT js-api] Health check: All of ${totalNodesCount} nodes are unavailable. Check internet connection and nodes list in config.` - ); - return; + ) + return } - let outOfSyncCount = 0; + let outOfSyncCount = 0 if (activeNodesCount === 1) { - this.node = activeNodes[0].node; + this.node = activeNodes[0].node } else if (activeNodesCount === 2) { - const [h0, h1] = activeNodes; + const [h0, h1] = activeNodes - this.node = h0.height > h1.height ? h0.node : h1.node; + this.node = h0.height > h1.height ? h0.node : h1.node // Mark node outOfSync if needed if (h0.heightEpsilon > h1.heightEpsilon) { - activeNodes[1].outOfSync = true; - outOfSyncCount += 1; + activeNodes[1].outOfSync = true + outOfSyncCount += 1 } else if (h0.heightEpsilon < h1.heightEpsilon) { - activeNodes[0].outOfSync = true; - outOfSyncCount += 1; + activeNodes[0].outOfSync = true + outOfSyncCount += 1 } } else { // Removing lodash: const groups = _.groupBy(liveNodes, n => n.heightEpsilon); const groups = activeNodes.reduce( - (grouped: {[heightEpsilon: number]: ActiveNode[]}, node) => { - const {heightEpsilon} = node; + (grouped: { [heightEpsilon: number]: ActiveNode[] }, node) => { + const { heightEpsilon } = node if (!grouped[heightEpsilon]) { - grouped[heightEpsilon] = []; + grouped[heightEpsilon] = [] } - grouped[heightEpsilon].push(node); + grouped[heightEpsilon].push(node) - return grouped; + return grouped }, {} - ); + ) - let biggestGroup: ActiveNode[] = []; - let biggestGroupSize = 0; + let biggestGroup: ActiveNode[] = [] + let biggestGroupSize = 0 for (const key in groups) { if (Object.prototype.hasOwnProperty.call(groups, key)) { - const group = groups[key]; + const group = groups[key] if (groups[key].length > biggestGroupSize) { - biggestGroup = group; - biggestGroupSize = group.length; + biggestGroup = group + biggestGroupSize = group.length } } } // All the nodes from the biggestGroup list are considered to be in sync, all the others are not for (const node of activeNodes) { - node.outOfSync = !biggestGroup.includes(node); + node.outOfSync = !biggestGroup.includes(node) } - outOfSyncCount = activeNodes.length - biggestGroup.length; + outOfSyncCount = activeNodes.length - biggestGroup.length - biggestGroup.sort((a, b) => a.ping - b.ping); + biggestGroup.sort((a, b) => a.ping - b.ping) - if ( - forceChangeActiveNode && - biggestGroup.length > 1 && - this.node === biggestGroup[0].node - ) { + if (forceChangeActiveNode && biggestGroup.length > 1 && this.node === biggestGroup[0].node) { // Use random node from which are synced - const randomIndex = getRandomIntInclusive(1, biggestGroup.length - 1); - this.node = biggestGroup[randomIndex].node; + const randomIndex = getRandomIntInclusive(1, biggestGroup.length - 1) + this.node = biggestGroup[randomIndex].node } else { // Use node with minimum ping among synced - this.node = biggestGroup[0].node; + this.node = biggestGroup[0].node } } - socket?.reviseConnection(activeNodes); + socket?.reviseConnection(activeNodes) - const {nodes} = this.options; + const { nodes } = this.options - const unavailableCount = nodes.length - activeNodesCount; - const supportedCount = activeNodesCount - outOfSyncCount; + const unavailableCount = nodes.length - activeNodesCount + const supportedCount = activeNodesCount - outOfSyncCount - let nodesInfoString = ''; + let nodesInfoString = '' if (unavailableCount) { - nodesInfoString += `, ${unavailableCount} nodes didn't respond`; + nodesInfoString += `, ${unavailableCount} nodes didn't respond` } if (outOfSyncCount) { - nodesInfoString += `, ${outOfSyncCount} nodes are not synced`; + nodesInfoString += `, ${outOfSyncCount} nodes are not synced` } this.logger.log( `[ADAMANT js-api] Health check: Found ${supportedCount} supported and synced nodes${nodesInfoString}. Active node is ${this.node}.` - ); + ) } async checkNode(node: string) { try { - const {timeout} = this.options; + const { timeout } = this.options - const response = await axios.get< - AdamantApiResult - >(`${node}/api/node/status`, { - timeout, - }); + const response = await axios.get>( + `${node}/api/node/status`, + { + timeout + } + ) - return response.data; - } catch (error) { - return {success: false} as {success: false}; + return response.data + } catch { + return { success: false } as { success: false } } } async checkNodes() { - const {nodes} = this.options; + const { nodes } = this.options - const activeNodes: ActiveNode[] = []; + const activeNodes: ActiveNode[] = [] for (const node of nodes) { - const start = unixTimestamp(); + const start = unixTimestamp() - const response = await this.checkNode(node); + const response = await this.checkNode(node) - const ping = unixTimestamp() - start; + const ping = unixTimestamp() - start if (!response.success) { - this.logger.log( - `[ADAMANT js-api] Health check: Node ${node} hasn't returned its status` - ); - continue; + this.logger.log(`[ADAMANT js-api] Health check: Node ${node} hasn't returned its status`) + continue } - const {wsClient, network} = response; + const { wsClient, network } = response - const socketSupport = wsClient.enabled; - const wsPort = wsClient.port; + const socketSupport = wsClient.enabled + const wsPort = wsClient.port - const {height} = network; + const { height } = network activeNodes.push({ ...(await parseUrl(node)), @@ -266,10 +261,10 @@ export class NodeManager { height, heightEpsilon: Math.round(height / HEIGHT_EPSILON), socketSupport, - wsPort, - }); + wsPort + }) } - return activeNodes; + return activeNodes } } diff --git a/src/helpers/keys.ts b/src/helpers/keys.ts index b0bca35..d55e023 100644 --- a/src/helpers/keys.ts +++ b/src/helpers/keys.ts @@ -1,56 +1,51 @@ -import sodium from 'sodium-browserify-tweetnacl'; -import crypto from 'crypto'; -import {mnemonicToSeedSync, generateMnemonic} from 'bip39'; +import sodium from 'sodium-browserify-tweetnacl' +import crypto from 'crypto' +import { mnemonicToSeedSync, generateMnemonic } from 'bip39' -import * as bignum from './bignumber'; -import type {AdamantAddress} from '../api'; +import * as bignum from './bignumber' +import type { AdamantAddress } from '../api' export interface KeyPair { - publicKey: Buffer; - privateKey: Buffer; + publicKey: Buffer + privateKey: Buffer } -export const createNewPassphrase = () => generateMnemonic(); +export const createNewPassphrase = () => generateMnemonic() export const makeKeypairFromHash = (hash: Buffer): KeyPair => { - const keypair = sodium.crypto_sign_seed_keypair(hash); + const keypair = sodium.crypto_sign_seed_keypair(hash) return { publicKey: keypair.publicKey, - privateKey: keypair.secretKey, - }; -}; + privateKey: keypair.secretKey + } +} export const createHashFromPassphrase = (passphrase: string) => - crypto - .createHash('sha256') - .update(mnemonicToSeedSync(passphrase).toString('hex'), 'hex') - .digest(); + crypto.createHash('sha256').update(mnemonicToSeedSync(passphrase).toString('hex'), 'hex').digest() export const createKeypairFromPassphrase = (passphrase: string) => { - const hash = createHashFromPassphrase(passphrase); + const hash = createHashFromPassphrase(passphrase) - return makeKeypairFromHash(hash); -}; + return makeKeypairFromHash(hash) +} -export const createAddressFromPublicKey = ( - publicKey: Buffer | string -): AdamantAddress => { - const hash = crypto.createHash('sha256'); +export const createAddressFromPublicKey = (publicKey: Buffer | string): AdamantAddress => { + const hash = crypto.createHash('sha256') if (typeof publicKey === 'string') { - hash.update(publicKey, 'hex'); + hash.update(publicKey, 'hex') } else { - hash.update(publicKey); + hash.update(publicKey) } - const publicKeyBuffer = hash.digest(); + const publicKeyBuffer = hash.digest() - const temp = Buffer.alloc(8); + const temp = Buffer.alloc(8) for (let i = 0; i < 8; i++) { - temp[i] = publicKeyBuffer[7 - i]; + temp[i] = publicKeyBuffer[7 - i] } - return `U${bignum.fromBuffer(temp)}`; -}; + return `U${bignum.fromBuffer(temp)}` +} diff --git a/src/helpers/logger.ts b/src/helpers/logger.ts index 3ded924..3b65e8a 100644 --- a/src/helpers/logger.ts +++ b/src/helpers/logger.ts @@ -2,51 +2,45 @@ export enum LogLevel { Error, Warn, Info, - Log, + Log } -export type CustomLogger = Record< - 'error' | 'warn' | 'info' | 'log', - (str: string) => void ->; +export type CustomLogger = Record<'error' | 'warn' | 'info' | 'log', (str: string) => void> -export const logLevels = ['error', 'warn', 'info', 'log'] as const; +export const logLevels = ['error', 'warn', 'info', 'log'] as const -export type LogLevelName = (typeof logLevels)[number]; +export type LogLevelName = (typeof logLevels)[number] export class Logger { - logger: CustomLogger; - level: LogLevel; - - constructor( - level: LogLevel | LogLevelName = LogLevel.Log, - logger: CustomLogger = console - ) { - this.level = typeof level === 'number' ? level : logLevels.indexOf(level); - this.logger = logger; + logger: CustomLogger + level: LogLevel + + constructor(level: LogLevel | LogLevelName = LogLevel.Log, logger: CustomLogger = console) { + this.level = typeof level === 'number' ? level : logLevels.indexOf(level) + this.logger = logger } error(message: string) { if (this.level >= LogLevel.Error) { - this.logger.error(message); + this.logger.error(message) } } warn(message: string) { if (this.level >= LogLevel.Warn) { - this.logger.warn(message); + this.logger.warn(message) } } info(message: string) { if (this.level >= LogLevel.Info) { - this.logger.info(message); + this.logger.info(message) } } log(message: string) { if (this.level >= LogLevel.Log) { - this.logger.log(message); + this.logger.log(message) } } } diff --git a/src/helpers/tests/keys.test.ts b/src/helpers/tests/keys.test.ts index 2d52952..2541d0e 100644 --- a/src/helpers/tests/keys.test.ts +++ b/src/helpers/tests/keys.test.ts @@ -1,48 +1,47 @@ -import * as keys from '../keys'; -import {mocked} from './mock-data/address'; +import * as keys from '../keys' +import { mocked } from './mock-data/address' describe('createNewPassphrase', () => { test('should return string that contains more than 11 words', () => { - const passphrase = keys.createNewPassphrase(); + const passphrase = keys.createNewPassphrase() - expect(typeof passphrase).toBe('string'); - expect(passphrase.split(' ').length).toBeGreaterThanOrEqual(12); - }); -}); + expect(typeof passphrase).toBe('string') + expect(passphrase.split(' ').length).toBeGreaterThanOrEqual(12) + }) +}) describe('makeKeypairFromHash', () => { test('should create keypair with exact publicKey/privateKey values from hash', () => { - const keypair = keys.makeKeypairFromHash(mocked.hash); + const keypair = keys.makeKeypairFromHash(mocked.hash) - expect(keypair.publicKey).toStrictEqual(mocked.publicKey); - expect(keypair.privateKey).toStrictEqual(mocked.privateKey); - }); -}); + expect(keypair.publicKey).toStrictEqual(mocked.publicKey) + expect(keypair.privateKey).toStrictEqual(mocked.privateKey) + }) +}) describe('createHashFromPassphrase', () => { test('should create exact hash from the pass phrase', () => { - const passphrase = - 'wrap track hamster grocery casual talk theory half artist toast art essence'; + const passphrase = 'wrap track hamster grocery casual talk theory half artist toast art essence' - const hash = keys.createHashFromPassphrase(passphrase); + const hash = keys.createHashFromPassphrase(passphrase) - expect(hash).toStrictEqual(mocked.hash); - }); -}); + expect(hash).toStrictEqual(mocked.hash) + }) +}) describe('createKeypairFromPassphrase', () => { test('should create keypair with exact publicKey/privateKey values from pass phrase', () => { - const keypair = keys.createKeypairFromPassphrase(mocked.passphrase); + const keypair = keys.createKeypairFromPassphrase(mocked.passphrase) - expect(keypair.publicKey).toStrictEqual(mocked.publicKey); - expect(keypair.privateKey).toStrictEqual(mocked.privateKey); - }); -}); + expect(keypair.publicKey).toStrictEqual(mocked.publicKey) + expect(keypair.privateKey).toStrictEqual(mocked.privateKey) + }) +}) describe('createAddressFromPublicKey', () => { test('should return a string which matches the address pattern', () => { - const address = keys.createAddressFromPublicKey(mocked.publicKey); + const address = keys.createAddressFromPublicKey(mocked.publicKey) - expect(address).toBe(mocked.address); - }); -}); + expect(address).toBe(mocked.address) + }) +}) diff --git a/src/helpers/tests/logger.test.ts b/src/helpers/tests/logger.test.ts index 6f98778..3d4a45f 100644 --- a/src/helpers/tests/logger.test.ts +++ b/src/helpers/tests/logger.test.ts @@ -1,217 +1,217 @@ -import {Logger, LogLevel} from '../logger'; +import { Logger, LogLevel } from '../logger' const mockLogger = { log() {}, error() {}, warn() {}, - info() {}, -}; + info() {} +} describe('logger: log', () => { - const logLevel = LogLevel.Log; + const logLevel = LogLevel.Log - test('should log log level', done => { + test('should log log level', (done) => { const logger = new Logger(logLevel, { ...mockLogger, log(str) { - expect(str).toBe('log'); - done(); - }, - }); + expect(str).toBe('log') + done() + } + }) - logger.log('log'); - }); + logger.log('log') + }) - test('should log info level', done => { + test('should log info level', (done) => { const logger = new Logger(logLevel, { ...mockLogger, info(str) { - expect(str).toBe('info'); - done(); - }, - }); + expect(str).toBe('info') + done() + } + }) - logger.info('info'); - }); + logger.info('info') + }) - test('should log warn level', done => { + test('should log warn level', (done) => { const logger = new Logger(logLevel, { ...mockLogger, warn(str) { - expect(str).toBe('warn'); - done(); - }, - }); + expect(str).toBe('warn') + done() + } + }) - logger.warn('warn'); - }); + logger.warn('warn') + }) - test('should log error level', done => { + test('should log error level', (done) => { const logger = new Logger(logLevel, { ...mockLogger, error(str) { - expect(str).toBe('error'); - done(); - }, - }); + expect(str).toBe('error') + done() + } + }) - logger.error('error'); - }); -}); + logger.error('error') + }) +}) describe('logger: info', () => { - const logLevel = LogLevel.Info; + const logLevel = LogLevel.Info - test('should not log log level', done => { + test('should not log log level', (done) => { const logger = new Logger(logLevel, { ...mockLogger, log() { - done('Log level has been called'); - }, - }); + done('Log level has been called') + } + }) - logger.log('log'); - done(); - }); + logger.log('log') + done() + }) - test('should log info level', done => { + test('should log info level', (done) => { const logger = new Logger(logLevel, { ...mockLogger, info(str) { - expect(str).toBe('info'); - done(); - }, - }); + expect(str).toBe('info') + done() + } + }) - logger.info('info'); - }); + logger.info('info') + }) - test('should log warn level', done => { + test('should log warn level', (done) => { const logger = new Logger(logLevel, { ...mockLogger, warn(str) { - expect(str).toBe('warn'); - done(); - }, - }); + expect(str).toBe('warn') + done() + } + }) - logger.warn('warn'); - }); + logger.warn('warn') + }) - test('should log error level', done => { + test('should log error level', (done) => { const logger = new Logger(logLevel, { ...mockLogger, error(str) { - expect(str).toBe('error'); - done(); - }, - }); + expect(str).toBe('error') + done() + } + }) - logger.error('error'); - }); -}); + logger.error('error') + }) +}) describe('logger: warn', () => { - const logLevel = LogLevel.Warn; + const logLevel = LogLevel.Warn - test('should not log log level', done => { + test('should not log log level', (done) => { const logger = new Logger(logLevel, { ...mockLogger, log() { - done('Log level has been called'); - }, - }); + done('Log level has been called') + } + }) - logger.log('log'); - done(); - }); + logger.log('log') + done() + }) - test('should not log info level', done => { + test('should not log info level', (done) => { const logger = new Logger(logLevel, { ...mockLogger, info() { - done('Info level has been called'); - }, - }); + done('Info level has been called') + } + }) - logger.info('info'); - done(); - }); + logger.info('info') + done() + }) - test('should log warn level', done => { + test('should log warn level', (done) => { const logger = new Logger(logLevel, { ...mockLogger, warn(str) { - expect(str).toBe('warn'); - done(); - }, - }); + expect(str).toBe('warn') + done() + } + }) - logger.warn('warn'); - }); + logger.warn('warn') + }) - test('should log error level', done => { + test('should log error level', (done) => { const logger = new Logger(logLevel, { ...mockLogger, error(str) { - expect(str).toBe('error'); - done(); - }, - }); + expect(str).toBe('error') + done() + } + }) - logger.error('error'); - }); -}); + logger.error('error') + }) +}) describe('logger: error', () => { - const logLevel = LogLevel.Error; + const logLevel = LogLevel.Error - test('should not log log level', done => { + test('should not log log level', (done) => { const logger = new Logger(logLevel, { ...mockLogger, error(str) { - expect(str).toBe('error'); - done(); - }, - }); + expect(str).toBe('error') + done() + } + }) - logger.log('log'); - done(); - }); + logger.log('log') + done() + }) - test('should not log info level', done => { + test('should not log info level', (done) => { const logger = new Logger(logLevel, { ...mockLogger, info() { - done('Info level has been called'); - }, - }); + done('Info level has been called') + } + }) - logger.info('info'); - done(); - }); + logger.info('info') + done() + }) - test('should not log warn level', done => { + test('should not log warn level', (done) => { const logger = new Logger(logLevel, { ...mockLogger, warn() { - done('Warn level has been called'); - }, - }); + done('Warn level has been called') + } + }) - logger.warn('warn'); - done(); - }); + logger.warn('warn') + done() + }) - test('should log error level', done => { + test('should log error level', (done) => { const logger = new Logger(logLevel, { ...mockLogger, error(str) { - expect(str).toBe('error'); - done(); - }, - }); - - logger.error('error'); - }); -}); + expect(str).toBe('error') + done() + } + }) + + logger.error('error') + }) +}) diff --git a/src/helpers/tests/mock-data/address.ts b/src/helpers/tests/mock-data/address.ts index c707366..9b7d669 100644 --- a/src/helpers/tests/mock-data/address.ts +++ b/src/helpers/tests/mock-data/address.ts @@ -1,19 +1,12 @@ export const mocked = { address: 'U6687642817984673870' as const, - passphrase: - 'wrap track hamster grocery casual talk theory half artist toast art essence', - publicKey: Buffer.from( - '7db9b51bc75fed7b8e631e2efaad38305b12c6b3d3d9f6af3498fdcb7b35c284', - 'hex' - ), + passphrase: 'wrap track hamster grocery casual talk theory half artist toast art essence', + publicKey: Buffer.from('7db9b51bc75fed7b8e631e2efaad38305b12c6b3d3d9f6af3498fdcb7b35c284', 'hex'), privateKey: Buffer.from( '24a26e6cd6283528f6e2637dcf834434176cf8696647bd4aa6223f349882dc967db9b51bc75fed7b8e631e2efaad38305b12c6b3d3d9f6af3498fdcb7b35c284', 'hex' ), - hash: Buffer.from( - '24a26e6cd6283528f6e2637dcf834434176cf8696647bd4aa6223f349882dc96', - 'hex' - ), + hash: Buffer.from('24a26e6cd6283528f6e2637dcf834434176cf8696647bd4aa6223f349882dc96', 'hex'), recipientId: 'U1234567890123456789' as const, - amount: 99999999999, -}; + amount: 99999999999 +} diff --git a/src/helpers/tests/time.test.ts b/src/helpers/tests/time.test.ts index c723f41..3bc30b7 100644 --- a/src/helpers/tests/time.test.ts +++ b/src/helpers/tests/time.test.ts @@ -1,7 +1,7 @@ -import {getEpochTime, EPOCH_TIME} from '../time'; +import { getEpochTime, EPOCH_TIME } from '../time' describe('getTime', () => { test('should return 0 for epoch time', () => { - expect(getEpochTime(EPOCH_TIME.getTime())).toBe(0); - }); -}); + expect(getEpochTime(EPOCH_TIME.getTime())).toBe(0) + }) +}) diff --git a/src/helpers/tests/transactions.test.ts b/src/helpers/tests/transactions.test.ts index 5a77879..ee2776c 100644 --- a/src/helpers/tests/transactions.test.ts +++ b/src/helpers/tests/transactions.test.ts @@ -1,41 +1,41 @@ -import {TransactionType} from '../constants'; +import { TransactionType } from '../constants' import { createChatTransaction, createDelegateTransaction, createSendTransaction, createStateTransaction, - createVoteTransaction, -} from '../transactions/index'; -import {mocked} from './mock-data/address'; + createVoteTransaction +} from '../transactions/index' +import { mocked } from './mock-data/address' beforeAll(() => { - jest.useFakeTimers(); - jest.setSystemTime(new Date('2021-02-18')); -}); + jest.useFakeTimers() + jest.setSystemTime(new Date('2021-02-18')) +}) /** * Expected timestamp accross all the created transactions. */ -const timestamp = 109234800; +const timestamp = 109234800 const keyPair = { publicKey: mocked.publicKey, - privateKey: mocked.privateKey, -}; + privateKey: mocked.privateKey +} -const {address: senderId} = mocked; -const senderPublicKey = mocked.publicKey.toString('hex'); +const { address: senderId } = mocked +const senderPublicKey = mocked.publicKey.toString('hex') describe('createSendTransaction', () => { - const type = TransactionType.SEND; + const type = TransactionType.SEND - const {recipientId, amount} = mocked; + const { recipientId, amount } = mocked test('should create simple send transaction', () => { - const transaction = createSendTransaction({recipientId, amount, keyPair}); + const transaction = createSendTransaction({ recipientId, amount, keyPair }) const expectedSignature = - 'd15cf87edecf808454ac0b7f4d80fc07b72dabe43f7e8ee721f4a208831b18278c9635deb1217610c720c8800daf45b2e4d2dd8ae817111a57b67017424f9502'; + 'd15cf87edecf808454ac0b7f4d80fc07b72dabe43f7e8ee721f4a208831b18278c9635deb1217610c720c8800daf45b2e4d2dd8ae817111a57b67017424f9502' expect(transaction).toStrictEqual({ type, @@ -45,24 +45,24 @@ describe('createSendTransaction', () => { senderPublicKey, timestamp, asset: {}, - signature: expectedSignature, - }); - }); -}); + signature: expectedSignature + }) + }) +}) describe('createVoteTransaction', () => { - const type = TransactionType.VOTE; + const type = TransactionType.VOTE test('should create simple vote transaction', () => { const votes = [ '+b3d0c0b99f64d0960324089eb678e90d8bcbb3dd8c73ee748e026f8b9a5b5468', - '-9ef1f6212ae871716cfa2d04e3dc5339e8fe75f89818be21ee1d75004983e2a8', - ]; + '-9ef1f6212ae871716cfa2d04e3dc5339e8fe75f89818be21ee1d75004983e2a8' + ] - const transaction = createVoteTransaction({keyPair, votes}); + const transaction = createVoteTransaction({ keyPair, votes }) const expectedSignature = - '53101dc124c0be5d6cafc2116a661884594499ea3fae37c09f4a6514ee4a60523113420e62a5ff001394461f5b72f5fa288cfe314fc05adedf2d367f3d2bd901'; + '53101dc124c0be5d6cafc2116a661884594499ea3fae37c09f4a6514ee4a60523113420e62a5ff001394461f5b72f5fa288cfe314fc05adedf2d367f3d2bd901' expect(transaction).toStrictEqual({ type, @@ -71,28 +71,28 @@ describe('createVoteTransaction', () => { senderPublicKey, senderId, asset: { - votes, + votes }, recipientId: senderId, - signature: expectedSignature, - }); - }); -}); + signature: expectedSignature + }) + }) +}) describe('createDelegateTransaction', () => { - const type = TransactionType.DELEGATE; - const username = 'admtest'; + const type = TransactionType.DELEGATE + const username = 'admtest' test('should create simple delegate transaction', () => { const data = { keyPair, - username, - }; + username + } - const transaction = createDelegateTransaction(data); + const transaction = createDelegateTransaction(data) const expectedSignature = - '602ead104c66005c2812a5e96e98506771f8ac5e2f21f002e7acb05a5ee0a3db478f2fec993e6997322dfa85cc6dde6286835e12f5211de84bfc1d3add424e00'; + '602ead104c66005c2812a5e96e98506771f8ac5e2f21f002e7acb05a5ee0a3db478f2fec993e6997322dfa85cc6dde6286835e12f5211de84bfc1d3add424e00' expect(transaction).toStrictEqual({ type, @@ -104,19 +104,19 @@ describe('createDelegateTransaction', () => { asset: { delegate: { username, - publicKey: senderPublicKey, - }, + publicKey: senderPublicKey + } }, - signature: expectedSignature, - }); - }); -}); + signature: expectedSignature + }) + }) +}) describe('Create chat transaction', () => { - const type = TransactionType.CHAT_MESSAGE; + const type = TransactionType.CHAT_MESSAGE test('should create simple chat transaction', () => { - const {recipientId, amount} = mocked; + const { recipientId, amount } = mocked const data = { keyPair, @@ -124,13 +124,13 @@ describe('Create chat transaction', () => { recipientId, message: 'f96383619244c7e06f39f592b55cc551acc72710', own_message: 'd0801b9a647fd1469883f918ec616241c79d6f6f7914ddb0', - message_type: 1, - }; + message_type: 1 + } - const transaction = createChatTransaction(data); + const transaction = createChatTransaction(data) const expectedSignature = - 'd720eb7cc1a1ac863a21b02d2537b283bfa056d81761ca133d07253d4d0bd479c321b8cd766bf20d4f5b2de27f7aae8783449f28a8c8ffbf9a9109fe73500f00'; + 'd720eb7cc1a1ac863a21b02d2537b283bfa056d81761ca133d07253d4d0bd479c321b8cd766bf20d4f5b2de27f7aae8783449f28a8c8ffbf9a9109fe73500f00' expect(transaction).toStrictEqual({ type, @@ -143,27 +143,27 @@ describe('Create chat transaction', () => { chat: { message: data.message, own_message: data.own_message, - type: data.message_type, - }, + type: data.message_type + } }, - signature: expectedSignature, - }); - }); -}); + signature: expectedSignature + }) + }) +}) describe('Create state transaction', () => { - const type = TransactionType.STATE; + const type = TransactionType.STATE test('should create simple state transaction', () => { const data = { key: 'key', - value: 'value', - }; + value: 'value' + } - const transaction = createStateTransaction({...data, keyPair}); + const transaction = createStateTransaction({ ...data, keyPair }) const expectedSignature = - '8d1bf8673b83eef10324414b0793ee26942e9379a9c38b1578a7c4df68cd922dd8a007bd6c03b5a0b6e28b0ecc4be8154fb72435d783a54dc35ac4614d095a09'; + '8d1bf8673b83eef10324414b0793ee26942e9379a9c38b1578a7c4df68cd922dd8a007bd6c03b5a0b6e28b0ecc4be8154fb72435d783a54dc35ac4614d095a09' expect(transaction).toStrictEqual({ type, @@ -176,10 +176,10 @@ describe('Create state transaction', () => { state: { key: data.key, value: data.value, - type: 0, - }, + type: 0 + } }, - signature: expectedSignature, - }); - }); -}); + signature: expectedSignature + }) + }) +}) diff --git a/src/helpers/tests/validator.test.ts b/src/helpers/tests/validator.test.ts index d1b2a92..774b2ec 100644 --- a/src/helpers/tests/validator.test.ts +++ b/src/helpers/tests/validator.test.ts @@ -1,399 +1,364 @@ -import {MessageType} from '../constants'; -import * as validator from '../validator'; +import { MessageType } from '../constants' +import * as validator from '../validator' describe('isNumeric', () => { test('should return false for a number', () => { - expect(validator.isNumeric(3)).toBe(false); - }); + expect(validator.isNumeric(3)).toBe(false) + }) test('should return false for Infinity', () => { - expect(validator.isNumeric(Infinity)).toBe(false); - }); + expect(validator.isNumeric(Infinity)).toBe(false) + }) test('should return false for an object', () => { - expect(validator.isNumeric({})).toBe(false); - }); + expect(validator.isNumeric({})).toBe(false) + }) test('should return false for undefined', () => { - expect(validator.isNumeric(undefined)).toBe(false); - }); + expect(validator.isNumeric(undefined)).toBe(false) + }) test('should return false for NaN', () => { - expect(validator.isNumeric(NaN)).toBe(false); - }); + expect(validator.isNumeric(NaN)).toBe(false) + }) test('should return false for `n3.14`', () => { - expect(validator.isNumeric('n3.14')).toBe(false); - }); + expect(validator.isNumeric('n3.14')).toBe(false) + }) test('should return true for `3,14`', () => { - expect(validator.isNumeric('3,14')).toBe(true); - }); + expect(validator.isNumeric('3,14')).toBe(true) + }) test('should return true for `3.14`', () => { - expect(validator.isNumeric('3.14')).toBe(true); - }); + expect(validator.isNumeric('3.14')).toBe(true) + }) test('should return true for ` 3.14`', () => { - expect(validator.isNumeric(' 3.14')).toBe(true); - }); -}); + expect(validator.isNumeric(' 3.14')).toBe(true) + }) +}) describe('isPassphrase', () => { test('should return false for a number', () => { - expect(validator.isPassphrase(3)).toBe(false); - }); + expect(validator.isPassphrase(3)).toBe(false) + }) test('should return false for an object', () => { - expect(validator.isPassphrase({})).toBe(false); - }); + expect(validator.isPassphrase({})).toBe(false) + }) test('should return false for undefined', () => { - expect(validator.isPassphrase(undefined)).toBe(false); - }); + expect(validator.isPassphrase(undefined)).toBe(false) + }) test('should return false for NaN', () => { - expect(validator.isPassphrase(NaN)).toBe(false); - }); + expect(validator.isPassphrase(NaN)).toBe(false) + }) test('should return false for a too short string', () => { - expect(validator.isPassphrase('short')).toBe(false); - }); + expect(validator.isPassphrase('short')).toBe(false) + }) test('should return true for a 12 word string', () => { - expect(validator.isPassphrase('word '.repeat(12))).toBe(true); - }); -}); + expect(validator.isPassphrase('word '.repeat(12))).toBe(true) + }) +}) describe('isAdmAddress', () => { test('should return false for a number', () => { - expect(validator.isAdmAddress(3)).toBe(false); - }); + expect(validator.isAdmAddress(3)).toBe(false) + }) test('should return false for an object', () => { - expect(validator.isAdmAddress({})).toBe(false); - }); + expect(validator.isAdmAddress({})).toBe(false) + }) test('should return false for undefined', () => { - expect(validator.isAdmAddress(undefined)).toBe(false); - }); + expect(validator.isAdmAddress(undefined)).toBe(false) + }) test('should return false for NaN', () => { - expect(validator.isAdmAddress(NaN)).toBe(false); - }); + expect(validator.isAdmAddress(NaN)).toBe(false) + }) test('should return false for U123', () => { - expect(validator.isAdmAddress('U123')).toBe(false); - }); + expect(validator.isAdmAddress('U123')).toBe(false) + }) test('should return false for ` U123456`', () => { - expect(validator.isAdmAddress(' U123456')).toBe(false); - }); + expect(validator.isAdmAddress(' U123456')).toBe(false) + }) test('should return false for `U123213N123`', () => { - expect(validator.isAdmAddress('U123213N123')).toBe(false); - }); + expect(validator.isAdmAddress('U123213N123')).toBe(false) + }) test('should return true for U123456', () => { - expect(validator.isAdmAddress('U1234506')).toBe(true); - }); + expect(validator.isAdmAddress('U1234506')).toBe(true) + }) test('should return true for U01234561293812931283918239', () => { - expect(validator.isAdmAddress('U01234561293812931283918239')).toBe(true); - }); -}); + expect(validator.isAdmAddress('U01234561293812931283918239')).toBe(true) + }) +}) describe('isAdmPublicKey', () => { test('should return false for a number', () => { - expect(validator.isAdmPublicKey(3)).toBe(false); - }); + expect(validator.isAdmPublicKey(3)).toBe(false) + }) test('should return false for an object', () => { - expect(validator.isAdmPublicKey({})).toBe(false); - }); + expect(validator.isAdmPublicKey({})).toBe(false) + }) test('should return false for undefined', () => { - expect(validator.isAdmPublicKey(undefined)).toBe(false); - }); + expect(validator.isAdmPublicKey(undefined)).toBe(false) + }) test('should return false for NaN', () => { - expect(validator.isAdmPublicKey(NaN)).toBe(false); - }); + expect(validator.isAdmPublicKey(NaN)).toBe(false) + }) test('should return false for a short string', () => { - expect(validator.isAdmPublicKey('0f')).toBe(false); - }); + expect(validator.isAdmPublicKey('0f')).toBe(false) + }) test('should return false for a string that contains `L`', () => { expect( - validator.isAdmPublicKey( - 'Le003f782cd1c1c84a6767a871321af2ecdb3da8d8f6b8d1f13179835b6ec432' - ) - ).toBe(false); - }); + validator.isAdmPublicKey('Le003f782cd1c1c84a6767a871321af2ecdb3da8d8f6b8d1f13179835b6ec432') + ).toBe(false) + }) test('should return true for a public key that starts with a number', () => { expect( - validator.isAdmPublicKey( - '4e003f782cd1c1c84A6767a871321af2ecdb3da8d8f6b8d1f13179835b6ec432' - ) - ).toBe(true); - }); + validator.isAdmPublicKey('4e003f782cd1c1c84A6767a871321af2ecdb3da8d8f6b8d1f13179835b6ec432') + ).toBe(true) + }) test('should return true for a public key that starts with a letter', () => { expect( - validator.isAdmPublicKey( - 'e4003f782cd1c1c84A6767a871321af2ecdb3da8d8f6b8d1f13179835b6ec432' - ) - ).toBe(true); - }); -}); + validator.isAdmPublicKey('e4003f782cd1c1c84A6767a871321af2ecdb3da8d8f6b8d1f13179835b6ec432') + ).toBe(true) + }) +}) describe('isAdmVoteForAddress', () => { test('should return false for a number', () => { - expect(validator.isAdmVoteForAddress(3)).toBe(false); - }); + expect(validator.isAdmVoteForAddress(3)).toBe(false) + }) test('should return false for an object', () => { - expect(validator.isAdmVoteForAddress({})).toBe(false); - }); + expect(validator.isAdmVoteForAddress({})).toBe(false) + }) test('should return false for undefined', () => { - expect(validator.isAdmVoteForAddress(undefined)).toBe(false); - }); + expect(validator.isAdmVoteForAddress(undefined)).toBe(false) + }) test('should return false for NaN', () => { - expect(validator.isAdmVoteForAddress(NaN)).toBe(false); - }); + expect(validator.isAdmVoteForAddress(NaN)).toBe(false) + }) test('should return false for a short string', () => { - expect(validator.isAdmVoteForAddress('0f')).toBe(false); - }); + expect(validator.isAdmVoteForAddress('0f')).toBe(false) + }) test('should return false for a string that starts with `L`', () => { - expect(validator.isAdmVoteForAddress('L01234561293812931283918239')).toBe( - false - ); - }); + expect(validator.isAdmVoteForAddress('L01234561293812931283918239')).toBe(false) + }) test('should return false for an address that starts with a number', () => { - expect(validator.isAdmVoteForAddress('0U1234561293812931283918239')).toBe( - false - ); - }); + expect(validator.isAdmVoteForAddress('0U1234561293812931283918239')).toBe(false) + }) test('should return false for an address that starts with a letter', () => { - expect(validator.isAdmVoteForAddress('U01234561293812931283918239')).toBe( - false - ); - }); + expect(validator.isAdmVoteForAddress('U01234561293812931283918239')).toBe(false) + }) test('should return true for an address with a plus', () => { - expect(validator.isAdmVoteForAddress('+U01234561293812931283918239')).toBe( - true - ); - }); + expect(validator.isAdmVoteForAddress('+U01234561293812931283918239')).toBe(true) + }) test('should return true for an address with a minus', () => { - expect(validator.isAdmVoteForAddress('+U01234561293812931283918239')).toBe( - true - ); - }); -}); + expect(validator.isAdmVoteForAddress('+U01234561293812931283918239')).toBe(true) + }) +}) describe('isAdmVoteForPublicKey', () => { test('should return false for a number', () => { - expect(validator.isAdmVoteForPublicKey(3)).toBe(false); - }); + expect(validator.isAdmVoteForPublicKey(3)).toBe(false) + }) test('should return false for an object', () => { - expect(validator.isAdmVoteForPublicKey({})).toBe(false); - }); + expect(validator.isAdmVoteForPublicKey({})).toBe(false) + }) test('should return false for undefined', () => { - expect(validator.isAdmVoteForPublicKey(undefined)).toBe(false); - }); + expect(validator.isAdmVoteForPublicKey(undefined)).toBe(false) + }) test('should return false for NaN', () => { - expect(validator.isAdmVoteForPublicKey(NaN)).toBe(false); - }); + expect(validator.isAdmVoteForPublicKey(NaN)).toBe(false) + }) test('should return false for a short string', () => { - expect(validator.isAdmVoteForPublicKey('0f')).toBe(false); - }); + expect(validator.isAdmVoteForPublicKey('0f')).toBe(false) + }) test('should return false for a string that starts with `L`', () => { expect( validator.isAdmVoteForPublicKey( '+L4e003f782cd1c1c84A6767a871321af2ecdb3da8d8f6b8d1f13179835b6ec432' ) - ).toBe(false); - }); + ).toBe(false) + }) test('should return false for a public key that starts with a number', () => { expect( validator.isAdmVoteForPublicKey( '4e003f782cd1c1c84A6767a871321af2ecdb3da8d8f6b8d1f13179835b6ec432' ) - ).toBe(false); - }); + ).toBe(false) + }) test('should return false for a public key that starts with a letter', () => { expect( validator.isAdmVoteForPublicKey( 'e4003f782cd1c1c84A6767a871321af2ecdb3da8d8f6b8d1f13179835b6ec432' ) - ).toBe(false); - }); + ).toBe(false) + }) test('should return true for a public key with a plus', () => { expect( validator.isAdmVoteForPublicKey( '+4e003f782cd1c1c84A6767a871321af2ecdb3da8d8f6b8d1f13179835b6ec432' ) - ).toBe(true); - }); + ).toBe(true) + }) test('should return true for a public key with a minus', () => { expect( validator.isAdmVoteForPublicKey( '+4e003f782cd1c1c84A6767a871321af2ecdb3da8d8f6b8d1f13179835b6ec432' ) - ).toBe(true); - }); -}); + ).toBe(true) + }) +}) describe('isAdmVoteForDelegateName', () => { test('should return false for a number', () => { - expect(validator.isAdmVoteForDelegateName(3)).toBe(false); - }); + expect(validator.isAdmVoteForDelegateName(3)).toBe(false) + }) test('should return false for an object', () => { - expect(validator.isAdmVoteForDelegateName({})).toBe(false); - }); + expect(validator.isAdmVoteForDelegateName({})).toBe(false) + }) test('should return false for undefined', () => { - expect(validator.isAdmVoteForDelegateName(undefined)).toBe(false); - }); + expect(validator.isAdmVoteForDelegateName(undefined)).toBe(false) + }) test('should return false for NaN', () => { - expect(validator.isAdmVoteForDelegateName(NaN)).toBe(false); - }); + expect(validator.isAdmVoteForDelegateName(NaN)).toBe(false) + }) test('should return false for a short string', () => { - expect(validator.isAdmVoteForDelegateName('0f')).toBe(false); - }); + expect(validator.isAdmVoteForDelegateName('0f')).toBe(false) + }) test('should return false for a vote without delegate name', () => { - expect(validator.isAdmVoteForDelegateName('+')).toBe(false); - }); + expect(validator.isAdmVoteForDelegateName('+')).toBe(false) + }) test('should return false for a too long delegate name', () => { - expect( - validator.isAdmVoteForDelegateName('+e003f782cd1c1c84A6767a871321af2e') - ).toBe(false); - }); + expect(validator.isAdmVoteForDelegateName('+e003f782cd1c1c84A6767a871321af2e')).toBe(false) + }) test('should return false for a vote that starts with a number', () => { - expect(validator.isAdmVoteForDelegateName('4darksinc')).toBe(false); - }); + expect(validator.isAdmVoteForDelegateName('4darksinc')).toBe(false) + }) test('should return false for a vote that starts with a letter', () => { - expect(validator.isAdmVoteForDelegateName('darksinc')).toBe(false); - }); + expect(validator.isAdmVoteForDelegateName('darksinc')).toBe(false) + }) test('should return true for a delegate name with a plus', () => { - expect(validator.isAdmVoteForDelegateName('+darksinc')).toBe(true); - }); + expect(validator.isAdmVoteForDelegateName('+darksinc')).toBe(true) + }) test('should return true for a delegate name with a minus', () => { - expect(validator.isAdmVoteForDelegateName('+darksinc')).toBe(true); - }); -}); + expect(validator.isAdmVoteForDelegateName('+darksinc')).toBe(true) + }) +}) describe('validateMessage', () => { test('should return false for a number message', () => { - expect(validator.validateMessage(3 as any).success).toBe(false); - }); + /* eslint-disable-next-line @typescript-eslint/no-explicit-any */ + expect(validator.validateMessage(3 as any).success).toBe(false) + }) test('should return false for an object message', () => { - expect(validator.validateMessage({} as any).success).toBe(false); - }); + /* eslint-disable-next-line @typescript-eslint/no-explicit-any */ + expect(validator.validateMessage({} as any).success).toBe(false) + }) test('should return true for an empty string message', () => { - expect(validator.validateMessage('').success).toBe(true); - }); + expect(validator.validateMessage('').success).toBe(true) + }) test('should return false for an empty string rich message', () => { - expect(validator.validateMessage('', MessageType.Rich).success).toBe(false); - }); + expect(validator.validateMessage('', MessageType.Rich).success).toBe(false) + }) test('should return true for an empty string signal message', () => { - expect(validator.validateMessage('', MessageType.Signal).success).toBe( - true - ); - }); + expect(validator.validateMessage('', MessageType.Signal).success).toBe(true) + }) test('should return true for an empty json rich message', () => { - expect(validator.validateMessage('{}', MessageType.Rich).success).toBe( - true - ); - }); + expect(validator.validateMessage('{}', MessageType.Rich).success).toBe(true) + }) test('should return false for an empty json signal message', () => { - expect(validator.validateMessage('{}', MessageType.Signal).success).toBe( - true - ); - }); + expect(validator.validateMessage('{}', MessageType.Signal).success).toBe(true) + }) test('should return true for a json rich message with the given amount', () => { - expect( - validator.validateMessage('{"amount": "0.13"}', MessageType.Rich).success - ).toBe(true); - }); + expect(validator.validateMessage('{"amount": "0.13"}', MessageType.Rich).success).toBe(true) + }) test('should return true for a json signal message with the given amount', () => { - expect( - validator.validateMessage('{"amount": "0.13"}', MessageType.Signal) - .success - ).toBe(true); - }); + expect(validator.validateMessage('{"amount": "0.13"}', MessageType.Signal).success).toBe(true) + }) test('should return false for a json rich message with uppercase coin name', () => { expect( - validator.validateMessage( - '{"amount": "0.13", "type": "ETH_transaction"}', - MessageType.Rich - ).success - ).toBe(false); - }); + validator.validateMessage('{"amount": "0.13", "type": "ETH_transaction"}', MessageType.Rich) + .success + ).toBe(false) + }) test('should return true for a json signal message with uppercase coin name', () => { expect( - validator.validateMessage( - '{"amount": "0.13", "type": "ETH_transaction"}', - MessageType.Signal - ).success - ).toBe(true); - }); + validator.validateMessage('{"amount": "0.13", "type": "ETH_transaction"}', MessageType.Signal) + .success + ).toBe(true) + }) test('should return true for a json rich message with lowercase coin name', () => { expect( - validator.validateMessage( - '{"amount": "0.13", "type": "eth_transaction"}', - MessageType.Rich - ).success - ).toBe(true); - }); + validator.validateMessage('{"amount": "0.13", "type": "eth_transaction"}', MessageType.Rich) + .success + ).toBe(true) + }) test('should return true for a json signal message with lowercase coin name', () => { expect( - validator.validateMessage( - '{"amount": "0.13", "type": "eth_transaction"}', - MessageType.Signal - ).success - ).toBe(true); - }); + validator.validateMessage('{"amount": "0.13", "type": "eth_transaction"}', MessageType.Signal) + .success + ).toBe(true) + }) test('should return true for a push notification signal message', () => { expect( @@ -401,64 +366,60 @@ describe('validateMessage', () => { '{"token": "DeviceToken","provider":"apns","action":"add"}', MessageType.Signal ).success - ).toBe(true); - }); + ).toBe(true) + }) test('should allow a string signal message', () => { - expect( - validator.validateMessage('not a json string', MessageType.Signal).success - ).toBe(true); - }); + expect(validator.validateMessage('not a json string', MessageType.Signal).success).toBe(true) + }) test('should NOT allow a string rich message', () => { - expect( - validator.validateMessage('not a json string', MessageType.Rich).success - ).toBe(false); - }); -}); + expect(validator.validateMessage('not a json string', MessageType.Rich).success).toBe(false) + }) +}) describe('isDelegateName', () => { test('should return false for a number', () => { - expect(validator.isDelegateName(1)).toBe(false); - }); + expect(validator.isDelegateName(1)).toBe(false) + }) test('should return true for valid name', () => { - expect(validator.isDelegateName('validname')).toBe(true); - }); + expect(validator.isDelegateName('validname')).toBe(true) + }) test('should return true for name with numbers', () => { - expect(validator.isDelegateName('name_with1_number')).toBe(true); - }); + expect(validator.isDelegateName('name_with1_number')).toBe(true) + }) test('should return true for name with special characters', () => { - expect(validator.isDelegateName('allow&special!chars')).toBe(true); - }); + expect(validator.isDelegateName('allow&special!chars')).toBe(true) + }) test('should return true for short name (minimum length)', () => { - expect(validator.isDelegateName('short')).toBe(true); - }); + expect(validator.isDelegateName('short')).toBe(true) + }) test('should return true for name with underscores', () => { - expect(validator.isDelegateName('this_is_a_valid_name')).toBe(true); - }); + expect(validator.isDelegateName('this_is_a_valid_name')).toBe(true) + }) test('should return false for an empty string', () => { - expect(validator.isDelegateName('')).toBe(false); - }); + expect(validator.isDelegateName('')).toBe(false) + }) test('should return false for camel case with spaces', () => { - expect(validator.isDelegateName('CamelCase')).toBe(false); - }); + expect(validator.isDelegateName('CamelCase')).toBe(false) + }) test('should return false for long name (exceeds maximum length)', () => { - expect(validator.isDelegateName('name-that-is-way-too-long')).toBe(false); - }); + expect(validator.isDelegateName('name-that-is-way-too-long')).toBe(false) + }) test('should return false for name with invalid characters', () => { - expect(validator.isDelegateName('!invalid$%characters&')).toBe(false); - }); + expect(validator.isDelegateName('!invalid$%characters&')).toBe(false) + }) test('should return false for name with spaces', () => { - expect(validator.isDelegateName('there is space')).toBe(false); - }); -}); + expect(validator.isDelegateName('there is space')).toBe(false) + }) +}) diff --git a/src/helpers/time.ts b/src/helpers/time.ts index 3a3e417..6030ba0 100644 --- a/src/helpers/time.ts +++ b/src/helpers/time.ts @@ -1,10 +1,10 @@ -export const EPOCH_TIME = new Date(Date.UTC(2017, 8, 2, 17, 0, 0, 0)); +export const EPOCH_TIME = new Date(Date.UTC(2017, 8, 2, 17, 0, 0, 0)) export const getEpochTime = (timestamp?: number) => { - const startTimestamp = timestamp ?? Date.now(); - const epochTimestamp = EPOCH_TIME.getTime(); + const startTimestamp = timestamp ?? Date.now() + const epochTimestamp = EPOCH_TIME.getTime() - return Math.floor((startTimestamp - epochTimestamp) / 1000); -}; + return Math.floor((startTimestamp - epochTimestamp) / 1000) +} -export const unixTimestamp = () => new Date().getTime(); +export const unixTimestamp = () => new Date().getTime() diff --git a/src/helpers/transactions/hash.ts b/src/helpers/transactions/hash.ts index ec20048..80104c7 100644 --- a/src/helpers/transactions/hash.ts +++ b/src/helpers/transactions/hash.ts @@ -1,69 +1,69 @@ -import sodium from 'sodium-browserify-tweetnacl'; -import ByteBuffer from 'bytebuffer'; -import crypto from 'crypto'; +import sodium from 'sodium-browserify-tweetnacl' +import ByteBuffer from 'bytebuffer' +import crypto from 'crypto' -import BigNumber from 'bignumber.js'; -import {toBuffer} from '../bignumber'; +import BigNumber from 'bignumber.js' +import { toBuffer } from '../bignumber' -import {MessageType, TransactionType} from '../constants'; -import {KeyPair} from '../keys'; +import { MessageType, TransactionType } from '../constants' +import { KeyPair } from '../keys' export interface BasicTransaction { - timestamp: number; - amount: number; - senderPublicKey: string; - senderId: string; - asset: {}; + timestamp: number + amount: number + senderPublicKey: string + senderId: string + asset: object } export interface SendTransaction extends BasicTransaction { - type: 0; - recipientId: string; - amount: number; - asset: {}; + type: 0 + recipientId: string + amount: number + asset: object } export interface StateTransaction extends BasicTransaction { - type: 9; - recipientId: null; + type: 9 + recipientId: null asset: { state: { - key: string; - value: string; - type: 0; - }; - }; + key: string + value: string + type: 0 + } + } } export interface ChatTransaction extends BasicTransaction { - type: 8; - recipientId: string; - amount: number; + type: 8 + recipientId: string + amount: number asset: { chat: { - message: string; - own_message: string; - type: MessageType; - }; - }; + message: string + own_message: string + type: MessageType + } + } } export interface DelegateTransaction extends BasicTransaction { - type: 2; - recipientId: null; + type: 2 + recipientId: null asset: { delegate: { - username: string; - publicKey: string; - }; - }; + username: string + publicKey: string + } + } } export interface VoteTransaction extends BasicTransaction { - type: 3; + type: 3 asset: { - votes: string[]; - }; + votes: string[] + } } export type SomeTransaction = @@ -71,188 +71,176 @@ export type SomeTransaction = | DelegateTransaction | ChatTransaction | StateTransaction - | SendTransaction; + | SendTransaction export type PossiblySignedTransaction = SomeTransaction & { - signature?: string; -}; + signature?: string +} export type SignedTransaction = SomeTransaction & { - signature: string; -}; - -export function getHash( - trs: PossiblySignedTransaction, - options = {skipSignature: true} -) { - const hash = crypto - .createHash('sha256') - .update(getBytes(trs, options.skipSignature)) - .digest(); - - return hash; + signature: string +} + +export function getHash(trs: PossiblySignedTransaction, options = { skipSignature: true }) { + const hash = crypto.createHash('sha256').update(getBytes(trs, options.skipSignature)).digest() + + return hash } export function getAssetBytes(transaction: PossiblySignedTransaction) { - const {type} = transaction; - const {VOTE, DELEGATE, CHAT_MESSAGE, STATE} = TransactionType; + const { type } = transaction + const { VOTE, DELEGATE, CHAT_MESSAGE, STATE } = TransactionType - let assetBytes = null; + let assetBytes = null if (type === VOTE) { - assetBytes = voteGetBytes(transaction); + assetBytes = voteGetBytes(transaction) } else if (type === DELEGATE) { - assetBytes = delegatesGetBytes(transaction); + assetBytes = delegatesGetBytes(transaction) } else if (type === CHAT_MESSAGE) { - assetBytes = chatGetBytes(transaction); + assetBytes = chatGetBytes(transaction) } else if (type === STATE) { - assetBytes = statesGetBytes(transaction); + assetBytes = statesGetBytes(transaction) } - return {assetBytes, assetSize: assetBytes?.length || 0}; + return { assetBytes, assetSize: assetBytes?.length || 0 } } -export function getBytes( - transaction: PossiblySignedTransaction, - skipSignature = true -) { - const result = getAssetBytes(transaction); +export function getBytes(transaction: PossiblySignedTransaction, skipSignature = true) { + const result = getAssetBytes(transaction) if (!result) { - throw new Error('Not supported transaction type'); + throw new Error('Not supported transaction type') } - const {assetSize, assetBytes} = result; + const { assetSize, assetBytes } = result - const bb = new ByteBuffer(1 + 4 + 32 + 8 + 8 + 64 + 64 + assetSize, true); + const bb = new ByteBuffer(1 + 4 + 32 + 8 + 8 + 64 + 64 + assetSize, true) - bb.writeByte(transaction.type); - bb.writeInt(transaction.timestamp); + bb.writeByte(transaction.type) + bb.writeInt(transaction.timestamp) - const senderPublicKeyBuffer = Buffer.from(transaction.senderPublicKey, 'hex'); + const senderPublicKeyBuffer = Buffer.from(transaction.senderPublicKey, 'hex') for (const buf of senderPublicKeyBuffer) { - bb.writeByte(buf); + bb.writeByte(buf) } if ('recipientId' in transaction && transaction.recipientId) { - const bignum = new BigNumber(transaction.recipientId.slice(1)); - const recipient = toBuffer(bignum, {size: 8}); + const bignum = new BigNumber(transaction.recipientId.slice(1)) + const recipient = toBuffer(bignum, { size: 8 }) for (let i = 0; i < 8; i++) { - bb.writeByte(recipient[i] || 0); + bb.writeByte(recipient[i] || 0) } } else { for (let i = 0; i < 8; i++) { - bb.writeByte(0); + bb.writeByte(0) } } - bb.writeLong(transaction.amount); + bb.writeLong(transaction.amount) if (assetBytes && assetSize > 0) { for (const assetByte of assetBytes) { - bb.writeByte(assetByte); + bb.writeByte(assetByte) } } if (!skipSignature && transaction.signature) { - const signatureBuffer = Buffer.from(transaction.signature, 'hex'); + const signatureBuffer = Buffer.from(transaction.signature, 'hex') for (let i = 0; i < signatureBuffer.length; i++) { - bb.writeByte(signatureBuffer[i]); + bb.writeByte(signatureBuffer[i]) } } - bb.flip(); + bb.flip() - const arrayBuffer = new Uint8Array(bb.toArrayBuffer()); - const buffer: number[] = []; + const arrayBuffer = new Uint8Array(bb.toArrayBuffer()) + const buffer: number[] = [] for (let i = 0; i < arrayBuffer.length; i++) { - buffer[i] = arrayBuffer[i]; + buffer[i] = arrayBuffer[i] } - return Buffer.from(buffer); + return Buffer.from(buffer) } export function signTransaction(trs: SomeTransaction, keypair: KeyPair) { - const hash = getHash(trs); + const hash = getHash(trs) - return sign(hash, keypair).toString('hex'); + return sign(hash, keypair).toString('hex') } export function voteGetBytes(trs: VoteTransaction) { - const {votes} = trs.asset; + const { votes } = trs.asset - return votes ? Buffer.from(votes.join(''), 'utf8') : null; + return votes ? Buffer.from(votes.join(''), 'utf8') : null } export function delegatesGetBytes(trs: DelegateTransaction) { - const {username} = trs.asset.delegate; + const { username } = trs.asset.delegate - return username ? Buffer.from(username, 'utf8') : null; + return username ? Buffer.from(username, 'utf8') : null } export function statesGetBytes(trs: StateTransaction) { - const {value} = trs.asset.state; + const { value } = trs.asset.state if (!value) { - return null; + return null } - let buf = Buffer.from([]); + let buf = Buffer.from([]) - const {key, type} = trs.asset.state; + const { key, type } = trs.asset.state - const stateBuf = Buffer.from(value); + const stateBuf = Buffer.from(value) - buf = Buffer.concat([buf, stateBuf]); + buf = Buffer.concat([buf, stateBuf]) if (key) { - const keyBuf = Buffer.from(key); - buf = Buffer.concat([buf, keyBuf]); + const keyBuf = Buffer.from(key) + buf = Buffer.concat([buf, keyBuf]) } - const bb = new ByteBuffer(4 + 4, true); + const bb = new ByteBuffer(4 + 4, true) - bb.writeInt(type); - bb.flip(); + bb.writeInt(type) + bb.flip() - buf = Buffer.concat([buf, bb.toBuffer()]); + buf = Buffer.concat([buf, bb.toBuffer()]) - return buf; + return buf } export function chatGetBytes(trs: ChatTransaction) { - let buf = Buffer.from([]); + let buf = Buffer.from([]) - const {message} = trs.asset.chat; - const messageBuf = Buffer.from(message, 'hex'); + const { message } = trs.asset.chat + const messageBuf = Buffer.from(message, 'hex') - buf = Buffer.concat([buf, messageBuf]); + buf = Buffer.concat([buf, messageBuf]) - const {own_message: ownMessage} = trs.asset.chat; + const { own_message: ownMessage } = trs.asset.chat if (ownMessage) { - const ownMessageBuf = Buffer.from(ownMessage, 'hex'); - buf = Buffer.concat([buf, ownMessageBuf]); + const ownMessageBuf = Buffer.from(ownMessage, 'hex') + buf = Buffer.concat([buf, ownMessageBuf]) } - const bb = new ByteBuffer(4 + 4, true); + const bb = new ByteBuffer(4 + 4, true) - bb.writeInt(trs.asset.chat.type); - bb.flip(); + bb.writeInt(trs.asset.chat.type) + bb.flip() - buf = Buffer.concat([buf, Buffer.from(bb.toBuffer())]); + buf = Buffer.concat([buf, Buffer.from(bb.toBuffer())]) - return buf; + return buf } export function sign(hash: Buffer, keypair: KeyPair) { - const sign = sodium.crypto_sign_detached( - hash, - Buffer.from(keypair.privateKey) - ); + const sign = sodium.crypto_sign_detached(hash, Buffer.from(keypair.privateKey)) - return sign; + return sign } diff --git a/src/helpers/transactions/id.ts b/src/helpers/transactions/id.ts index aee1c2b..28c0aa2 100644 --- a/src/helpers/transactions/id.ts +++ b/src/helpers/transactions/id.ts @@ -1,17 +1,17 @@ -import {fromBuffer} from '../bignumber'; -import {getHash, type SignedTransaction} from './hash'; +import { fromBuffer } from '../bignumber' +import { getHash, type SignedTransaction } from './hash' export const getTransactionId = (transaction: SignedTransaction) => { if (!transaction.signature) { - throw new Error('Transaction Signature is required'); + throw new Error('Transaction Signature is required') } - const hash = getHash(transaction, {skipSignature: false}); + const hash = getHash(transaction, { skipSignature: false }) - const temp = Buffer.alloc(8); + const temp = Buffer.alloc(8) for (let i = 0; i < 8; i++) { - temp[i] = hash[7 - i]; + temp[i] = hash[7 - i] } - return fromBuffer(temp).toString(); -}; + return fromBuffer(temp).toString() +} diff --git a/src/helpers/transactions/index.ts b/src/helpers/transactions/index.ts index 4f26a72..50367b9 100644 --- a/src/helpers/transactions/index.ts +++ b/src/helpers/transactions/index.ts @@ -1,11 +1,11 @@ -import {signTransaction} from './hash'; +import { signTransaction } from './hash' -import {createAddressFromPublicKey} from '../keys'; -import {getEpochTime} from '../time'; +import { createAddressFromPublicKey } from '../keys' +import { getEpochTime } from '../time' -import {MessageType, TransactionType} from '../constants'; -import type {KeyPair} from '../keys'; -import type {AdamantAddress} from '../../api'; +import { MessageType, TransactionType } from '../constants' +import type { KeyPair } from '../keys' +import type { AdamantAddress } from '../../api' export type AnyTransactionData = ( | SendTransactionData @@ -14,46 +14,46 @@ export type AnyTransactionData = ( | DelegateTransactionData | StateTransactionData ) & { - transactionType: TransactionType; -}; + transactionType: TransactionType +} export interface BasicTransactionData { - keyPair: KeyPair; + keyPair: KeyPair } export interface SendTransactionData extends BasicTransactionData { - recipientId: string; - amount: number; + recipientId: string + amount: number } export interface ChatTransactionData extends BasicTransactionData { - recipientId: AdamantAddress; - message_type: MessageType; - amount?: number; - message: string; - own_message: string; + recipientId: AdamantAddress + message_type: MessageType + amount?: number + message: string + own_message: string } export interface VoteTransactionData extends BasicTransactionData { - votes: string[]; + votes: string[] } export interface DelegateTransactionData extends BasicTransactionData { - username: string; + username: string } export interface StateTransactionData extends BasicTransactionData { - key: string; - value: string; + key: string + value: string } interface BasicTransaction { - type: T; - timestamp: number; - amount: number; - senderPublicKey: string; - senderId: AdamantAddress; - asset: {}; + type: T + timestamp: number + amount: number + senderPublicKey: string + senderId: AdamantAddress + asset: object } export const createBasicTransaction = ( @@ -65,38 +65,38 @@ export const createBasicTransaction = ( amount: 0, senderPublicKey: data.keyPair.publicKey.toString('hex'), senderId: createAddressFromPublicKey(data.keyPair.publicKey), - asset: {}, - }; + asset: {} + } - return transaction; -}; + return transaction +} export const createSendTransaction = (data: SendTransactionData) => { const details = { ...data, - transactionType: TransactionType.SEND, - }; + transactionType: TransactionType.SEND + } const transaction = { ...createBasicTransaction(details), recipientId: details.recipientId, amount: details.amount, - asset: {}, - }; + asset: {} + } - const signature = signTransaction(transaction, details.keyPair); + const signature = signTransaction(transaction, details.keyPair) return { ...transaction, - signature, - }; -}; + signature + } +} export const createStateTransaction = (data: StateTransactionData) => { const details = { ...data, - transactionType: TransactionType.STATE, - }; + transactionType: TransactionType.STATE + } const transaction = { ...createBasicTransaction(details), @@ -105,24 +105,24 @@ export const createStateTransaction = (data: StateTransactionData) => { state: { key: details.key, value: details.value, - type: 0 as const, - }, - }, - }; + type: 0 as const + } + } + } - const signature = signTransaction(transaction, details.keyPair); + const signature = signTransaction(transaction, details.keyPair) return { ...transaction, - signature, - }; -}; + signature + } +} export const createChatTransaction = (data: ChatTransactionData) => { const details = { ...data, - transactionType: TransactionType.CHAT_MESSAGE, - }; + transactionType: TransactionType.CHAT_MESSAGE + } const transaction = { ...createBasicTransaction(details), @@ -132,24 +132,24 @@ export const createChatTransaction = (data: ChatTransactionData) => { chat: { message: data.message, own_message: data.own_message, - type: data.message_type, - }, - }, - }; + type: data.message_type + } + } + } - const signature = signTransaction(transaction, details.keyPair); + const signature = signTransaction(transaction, details.keyPair) return { ...transaction, - signature, - }; -}; + signature + } +} export const createDelegateTransaction = (data: DelegateTransactionData) => { const details = { ...data, - transactionType: TransactionType.DELEGATE, - }; + transactionType: TransactionType.DELEGATE + } const transaction = { ...createBasicTransaction(details), @@ -157,43 +157,42 @@ export const createDelegateTransaction = (data: DelegateTransactionData) => { asset: { delegate: { username: details.username, - publicKey: details.keyPair.publicKey.toString('hex'), - }, - }, - }; + publicKey: details.keyPair.publicKey.toString('hex') + } + } + } - const signature = signTransaction(transaction, details.keyPair); + const signature = signTransaction(transaction, details.keyPair) return { ...transaction, - signature, - }; -}; + signature + } +} export const createVoteTransaction = (data: VoteTransactionData) => { const details = { ...data, - transactionType: TransactionType.VOTE, - }; + transactionType: TransactionType.VOTE + } - const basicTransaction = - createBasicTransaction(details); + const basicTransaction = createBasicTransaction(details) const transaction = { ...basicTransaction, recipientId: basicTransaction.senderId, asset: { - votes: details.votes, - }, - }; + votes: details.votes + } + } - const signature = signTransaction(transaction, details.keyPair); + const signature = signTransaction(transaction, details.keyPair) return { ...transaction, - signature, - }; -}; + signature + } +} -export * from './hash'; -export * from './id'; +export * from './hash' +export * from './id' diff --git a/src/helpers/transactions/tests/id.test.ts b/src/helpers/transactions/tests/id.test.ts index 41e3513..d89d2c1 100644 --- a/src/helpers/transactions/tests/id.test.ts +++ b/src/helpers/transactions/tests/id.test.ts @@ -1,4 +1,4 @@ -import {getTransactionId} from '../id'; +import { getTransactionId } from '../id' describe('getTransactionId', () => { it('should return the same id as a node for message transaction', () => { @@ -10,43 +10,41 @@ describe('getTransactionId', () => { chat: { message: '7189aba904138dd1d53948ed1e5b1d18a11ba1910834', own_message: '8b717d0a9142e697cafd342c8f79f042c47a9e712e8a61b6', - type: 1, - }, + type: 1 + } }, recipientId: 'U12605277787100066317', senderId: 'U8084717991279447871', - senderPublicKey: - '09c93f2667728c62d2279bbb8df34c3856088290167f557c33594dc212da054a', + senderPublicKey: '09c93f2667728c62d2279bbb8df34c3856088290167f557c33594dc212da054a', signature: - '304a4cb7e11651d576e2c4dffb4100bef5385981807f18c3267c863daf60bd277706e6790157beacf5100c77b6798c4725f2f4e070ca78496ff53a4c2e437f02', - }); + '304a4cb7e11651d576e2c4dffb4100bef5385981807f18c3267c863daf60bd277706e6790157beacf5100c77b6798c4725f2f4e070ca78496ff53a4c2e437f02' + }) // https://ahead.adamant.im/api/transactions/get?id=5505818610983968576&returnAsset=1 - expect(id).toBe('5505818610983968576'); - }); + expect(id).toBe('5505818610983968576') + }) it('should return the same id as a node for transfer transaction', () => { const id = getTransactionId({ type: 8, amount: 0, senderId: 'U3716604363012166999', - senderPublicKey: - '1ed651ec1c686c23249dadb2cb656edd5f8e7d35076815d8a81c395c3eed1a85', + senderPublicKey: '1ed651ec1c686c23249dadb2cb656edd5f8e7d35076815d8a81c395c3eed1a85', asset: { chat: { message: 'beeac1b98d27cb2052edaf37e2843838b25fa8eb6cccaa076a2b66db179207ff76a2233822218143fddbcb5d034da27d1a7b088bab2012b16ac9574995dadeaf2783afcaa6b960cdcd680761895b16f004736aea55f1fb46417fd2816da35c00960c2d40e9e5e96ab52d97c5d97fe72d2fca2a6ef5225dd46ad380edfa27de6bd8b0f3f3a6c8166da3bff716db4e42699d116668403da7eb742f640ffc69a7122111e1e0db9bf3f65ae6c3380d3436d7a6', own_message: '1111240165c825cf31164cc05fb6d40b58d72493d8798390', - type: 2, - }, + type: 2 + } }, recipientId: 'U8084717991279447871', timestamp: 194374197, signature: - 'bf9912ab59fe93780433c18e27d3634d8e78112e53379bcac7fc52a46cf90071c147d9dee06497441928afdb6e59501dce679788b3322e97be93178d9f7c7c0d', - }); + 'bf9912ab59fe93780433c18e27d3634d8e78112e53379bcac7fc52a46cf90071c147d9dee06497441928afdb6e59501dce679788b3322e97be93178d9f7c7c0d' + }) // https://ahead.adamant.im/api/transactions/get?id=10707920525275969664&returnAsset=1 - expect(id).toBe('10707920525275969664'); - }); -}); + expect(id).toBe('10707920525275969664') + }) +}) diff --git a/src/helpers/url.ts b/src/helpers/url.ts index 9bb7c22..4dfce99 100644 --- a/src/helpers/url.ts +++ b/src/helpers/url.ts @@ -1,36 +1,35 @@ -import dns from 'dns/promises'; +import dns from 'dns/promises' -const RE_HTTP_URL = /^https?:\/\/(.*)$/; -const RE_IP = - /(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)(\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)){3}/; +const RE_HTTP_URL = /^https?:\/\/(.*)$/ +const RE_IP = /(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)(\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)){3}/ export const parseUrl = async (url: string) => { - const isHttps = url.startsWith('https'); + const isHttps = url.startsWith('https') // base url without port - const [baseURL] = url.replace(RE_HTTP_URL, '$1').split(':'); + const [baseURL] = url.replace(RE_HTTP_URL, '$1').split(':') - const ip = RE_IP.test(baseURL) ? baseURL : await retrieveIP(baseURL); + const ip = RE_IP.test(baseURL) ? baseURL : await retrieveIP(baseURL) return { baseURL, ip, - isHttps, - }; -}; + isHttps + } +} export const retrieveIP = async (url: string) => { try { - const addresses = await dns.resolve4(url); + const addresses = await dns.resolve4(url) if (addresses) { - const [address] = addresses; + const [address] = addresses if (address !== '0.0.0.0') { - return address; + return address } } - } catch (error) { - return; + } catch { + return } -}; +} diff --git a/src/helpers/utils.ts b/src/helpers/utils.ts index 776c6c3..db1737d 100644 --- a/src/helpers/utils.ts +++ b/src/helpers/utils.ts @@ -2,5 +2,5 @@ export const hasOwnProperty = ( obj: T, prop: K ): obj is T & Record => { - return Object.prototype.hasOwnProperty.call(obj, prop); -}; + return Object.prototype.hasOwnProperty.call(obj, prop) +} diff --git a/src/helpers/validator.ts b/src/helpers/validator.ts index 3068126..27ac879 100644 --- a/src/helpers/validator.ts +++ b/src/helpers/validator.ts @@ -1,110 +1,99 @@ -import BigNumber from 'bignumber.js'; -import {MessageType, MessageTypes, SAT} from './constants'; -import type {AdamantAddress} from '../api'; +import BigNumber from 'bignumber.js' +import { MessageType, MessageTypes, SAT } from './constants' +import type { AdamantAddress } from '../api' export const getRandomIntInclusive = (minimum: number, maximum: number) => { - const min = Math.ceil(minimum); - const max = Math.floor(maximum); + const min = Math.ceil(minimum) + const max = Math.floor(maximum) // The maximum is inclusive and the minimum is inclusive - return Math.floor(Math.random() * (max - min + 1) + min); -}; + return Math.floor(Math.random() * (max - min + 1) + min) +} export const isNumeric = (str: unknown): str is string => - typeof str === 'string' && !isNaN(parseFloat(str)); + typeof str === 'string' && !isNaN(parseFloat(str)) export const parseJsonSafe = (json: string) => { try { - const result = JSON.parse(json) as unknown; + const result = JSON.parse(json) as unknown return { result, - success: true, - }; + success: true + } } catch (error) { return { error, - success: false, - }; + success: false + } } -}; +} export const isPassphrase = (passphrase: unknown): passphrase is string => - typeof passphrase === 'string' && passphrase.length > 30; + typeof passphrase === 'string' && passphrase.length > 30 export const isEndpoint = (endpoint: unknown): endpoint is string => - typeof endpoint === 'string' && endpoint.startsWith('/'); + typeof endpoint === 'string' && endpoint.startsWith('/') -const RE_ADM_ADDRESS = /^U([0-9]{6,})$/; +const RE_ADM_ADDRESS = /^U([0-9]{6,})$/ export const isAdmAddress = (address: unknown): address is AdamantAddress => - typeof address === 'string' && RE_ADM_ADDRESS.test(address); + typeof address === 'string' && RE_ADM_ADDRESS.test(address) -const RE_HEX = /^[a-fA-F0-9]+$/; +const RE_HEX = /^[a-fA-F0-9]+$/ export const isAdmPublicKey = (publicKey: unknown): publicKey is string => - typeof publicKey === 'string' && - publicKey.length === 64 && - RE_HEX.test(publicKey); + typeof publicKey === 'string' && publicKey.length === 64 && RE_HEX.test(publicKey) -const RE_ADM_VOTE_FOR_PUBLIC_KEY = /^(\+|-)[a-fA-F0-9]{64}$/; +const RE_ADM_VOTE_FOR_PUBLIC_KEY = /^(\+|-)[a-fA-F0-9]{64}$/ -export const isAdmVoteForPublicKey = ( - publicKey: unknown -): publicKey is string => - typeof publicKey === 'string' && RE_ADM_VOTE_FOR_PUBLIC_KEY.test(publicKey); +export const isAdmVoteForPublicKey = (publicKey: unknown): publicKey is string => + typeof publicKey === 'string' && RE_ADM_VOTE_FOR_PUBLIC_KEY.test(publicKey) -const RE_ADM_VOTE_FOR_ADDRESS = /^(\+|-)U([0-9]{6,})$/; +const RE_ADM_VOTE_FOR_ADDRESS = /^(\+|-)U([0-9]{6,})$/ export const isAdmVoteForAddress = (address: unknown) => - typeof address === 'string' && RE_ADM_VOTE_FOR_ADDRESS.test(address); + typeof address === 'string' && RE_ADM_VOTE_FOR_ADDRESS.test(address) -const RE_ADM_VOTE_FOR_DELEGATE_NAME = /^(\+|-)([a-z0-9!@$&_]{1,20})$/; +const RE_ADM_VOTE_FOR_DELEGATE_NAME = /^(\+|-)([a-z0-9!@$&_]{1,20})$/ -export const isAdmVoteForDelegateName = ( - delegateName: unknown -): delegateName is string => - typeof delegateName === 'string' && - RE_ADM_VOTE_FOR_DELEGATE_NAME.test(delegateName); +export const isAdmVoteForDelegateName = (delegateName: unknown): delegateName is string => + typeof delegateName === 'string' && RE_ADM_VOTE_FOR_DELEGATE_NAME.test(delegateName) -export const isIntegerAmount = (amount: number) => Number.isSafeInteger(amount); +export const isIntegerAmount = (amount: number) => Number.isSafeInteger(amount) -export const isStringAmount = (amount: string) => isNumeric(amount); +export const isStringAmount = (amount: string) => isNumeric(amount) -export const isMessageType = ( - messageType: number -): messageType is MessageTypes => [1, 2, 3].includes(messageType); +export const isMessageType = (messageType: number): messageType is MessageTypes => + [1, 2, 3].includes(messageType) -export const validateMessage = ( - message: string, - messageType: MessageType = MessageType.Chat -) => { +export const validateMessage = (message: string, messageType: MessageType = MessageType.Chat) => { if (typeof message !== 'string') { return { success: false, - error: 'Message should be a string', - }; + error: 'Message should be a string' + } } if ([MessageType.Rich].includes(messageType)) { - const data = parseJsonSafe(message); + const data = parseJsonSafe(message) - const {success, result} = data; + const { success, result } = data if (!success || typeof result !== 'object' || result === null) { return { success: false, - error: "For rich and signal message, 'message' should be a JSON string", - }; + error: "For rich and signal message, 'message' should be a JSON string" + } } if ('type' in result && typeof result.type === 'string') { - const typeInLowerCase = result.type.toLowerCase(); + const typeInLowerCase = result.type.toLowerCase() if (typeInLowerCase.endsWith('_transaction')) { if (typeInLowerCase !== result.type) { return { success: false, - error: "Value '_transaction' must be in lower case", - }; + error: "Value '_transaction' must be in lower case" + } } if ( @@ -113,38 +102,34 @@ export const validateMessage = ( ) { return { success: false, - error: "Field 'amount' must be a string, representing a number", - }; + error: "Field 'amount' must be a string, representing a number" + } } } } } - return {success: true}; -}; + return { success: true } +} -const RE_ADM_DELEGATE_NAME = /^[a-z0-9!@$&_]{1,20}$/; +const RE_ADM_DELEGATE_NAME = /^[a-z0-9!@$&_]{1,20}$/ export const isDelegateName = (name: unknown): name is string => - typeof name === 'string' && RE_ADM_DELEGATE_NAME.test(name); + typeof name === 'string' && RE_ADM_DELEGATE_NAME.test(name) export const admToSats = (amount: number) => - new BigNumber(String(amount)).multipliedBy(SAT).integerValue().toNumber(); + new BigNumber(String(amount)).multipliedBy(SAT).integerValue().toNumber() -export const badParameter = ( - name: string, - value?: unknown, - message?: string -) => ({ +export const badParameter = (name: string, value?: unknown, message?: string) => ({ success: false, error: `Wrong '${name}' parameter${value ? `: ${value}` : ''}${ message ? `. Error: ${message}` : '' - }`, -}); + }` +}) export type AdamantApiResult = - | (Omit & {success: true}) + | (Omit & { success: true }) | { - success: false; - errorMessage: string; - }; + success: false + errorMessage: string + } diff --git a/src/helpers/wsClient.ts b/src/helpers/wsClient.ts index 66a71d9..7247ebe 100644 --- a/src/helpers/wsClient.ts +++ b/src/helpers/wsClient.ts @@ -1,106 +1,111 @@ -import {io, type Socket} from 'socket.io-client'; +import { io, type Socket } from 'socket.io-client' -import type {ActiveNode} from './healthCheck'; -import {Logger} from './logger'; -import {getRandomIntInclusive} from './validator'; -import {TransactionType} from './constants'; +import type { ActiveNode } from './healthCheck' +import { Logger } from './logger' +import { getRandomIntInclusive } from './validator' +import { MessageType, TransactionType } from './constants' import type { AnyTransaction, ChatMessageTransaction, KVSTransaction, RegisterDelegateTransaction, TokenTransferTransaction, - VoteForDelegateTransaction, -} from '../api/generated'; -import type {AdamantAddress} from '../api'; + VoteForDelegateTransaction +} from '../api/generated' +import type { AdamantAddress } from '../api' -export type WsType = 'ws' | 'wss'; +export type WsType = 'ws' | 'wss' export interface WsOptions { /** * ADM address to subscribe to notifications */ - admAddress: AdamantAddress; + admAddress: AdamantAddress | AdamantAddress[] /** * Websocket type: `'wss'` or `'ws'`. `'wss'` is recommended. */ - wsType?: WsType; + wsType?: WsType /** * Must connect to node with minimum ping. Not recommended. Default is `false`. */ - useFastest?: boolean; + useFastest?: boolean - logger?: Logger; + logger?: Logger } -type ErrorHandler = (error: unknown) => void; +type ErrorHandler = (error: unknown) => void type TransactionMap = { - [TransactionType.SEND]: TokenTransferTransaction; - [TransactionType.DELEGATE]: RegisterDelegateTransaction; - [TransactionType.VOTE]: VoteForDelegateTransaction; - [TransactionType.CHAT_MESSAGE]: ChatMessageTransaction; - [TransactionType.STATE]: KVSTransaction; -}; + [TransactionType.SEND]: TokenTransferTransaction + [TransactionType.DELEGATE]: RegisterDelegateTransaction + [TransactionType.VOTE]: VoteForDelegateTransaction + [TransactionType.CHAT_MESSAGE]: ChatMessageTransaction + [TransactionType.STATE]: KVSTransaction +} -type EventType = keyof TransactionMap; +type EventType = keyof TransactionMap -export type TransactionHandler = ( - transaction: T -) => void; +export type TransactionHandler = (transaction: T) => void export type SingleTransactionHandler = | TransactionHandler | TransactionHandler | TransactionHandler | TransactionHandler - | TransactionHandler; + | TransactionHandler -export type AnyTransactionHandler = TransactionHandler; +export type AnyTransactionHandler = TransactionHandler export class WebSocketClient { /** * Web socket client options. */ - public options: WsOptions; + public options: WsOptions /** * Current socket connection */ - private connection?: Socket; + private connection?: Socket /** * List of nodes that are active, synced and support socket. */ - private nodes: ActiveNode[]; + private nodes: ActiveNode[] - private logger: Logger; + private logger: Logger - private errorHandler: ErrorHandler; - private eventHandlers: { - [T in EventType]: TransactionHandler[]; + private errorHandler: ErrorHandler + private transactionHandlers: { + [T in EventType]: TransactionHandler[] } = { [TransactionType.SEND]: [], [TransactionType.DELEGATE]: [], [TransactionType.VOTE]: [], [TransactionType.CHAT_MESSAGE]: [], - [TransactionType.STATE]: [], - }; + [TransactionType.STATE]: [] + } + private messageHandlers: { + [T in MessageType]: TransactionHandler[] + } = { + [MessageType.Chat]: [], + [MessageType.Rich]: [], + [MessageType.Signal]: [] + } constructor(options: WsOptions) { - this.logger = options.logger || new Logger(); + this.logger = options.logger || new Logger() this.options = { wsType: 'ws', - ...options, - }; + ...options + } - this.nodes = []; + this.nodes = [] this.errorHandler = (error: unknown) => { - this.logger.error(`${error}`); - }; + this.logger.error(`${error}`) + } } /** @@ -110,69 +115,81 @@ export class WebSocketClient { */ reviseConnection(nodes: ActiveNode[]) { if (this.connection?.connected) { - return; + return } - const {wsType} = this.options; + const { wsType } = this.options this.nodes = nodes.filter( - node => + (node) => node.socketSupport && !node.outOfSync && // Remove nodes without IP if 'ws' connection type (wsType !== 'ws' || !node.isHttps || node.ip) - ); + ) - this.setConnection(); + this.setConnection() } /** * Chooses node and sets up connection. */ setConnection() { - const {logger} = this; + const { logger } = this - const supportedCount = this.nodes.length; + const supportedCount = this.nodes.length if (!supportedCount) { - logger.warn('[Socket] No supported socket nodes at the moment.'); - return; + logger.warn('[Socket] No supported socket nodes at the moment.') + return } - const node = this.chooseNode(); - logger.log( - `[Socket] Supported nodes: ${supportedCount}. Connecting to ${node}...` - ); + const node = this.chooseNode() + logger.log(`[Socket] Supported nodes: ${supportedCount}. Connecting to ${node}...`) const connection = io(node, { reconnection: false, - timeout: 5000, - }); + timeout: 5000 + }) connection.on('connect', () => { - const {admAddress} = this.options; + const { admAddress } = this.options + + connection.emit('address', admAddress) + + const transactionTypes = notEmptyEvents(this.transactionHandlers) + const messageTypes = notEmptyEvents(this.messageHandlers) + + if (transactionTypes.length !== 0) { + connection.emit('types', transactionTypes) + } + + // not to break any socket.on(TransactionType.CHAT_MESSAGE, ...) handler + if (messageTypes.length !== 0 && !transactionTypes.includes(TransactionType.CHAT_MESSAGE)) { + connection.emit('assetChatTypes', messageTypes) + } - connection.emit('address', admAddress); logger.info( - `[Socket] Connected to ${node} and subscribed to incoming transactions for ${admAddress}` - ); - }); + `[Socket] Connected to ${node} and subscribed to incoming transactions for ${ + Array.isArray(admAddress) ? admAddress.join(', ') : admAddress + }` + ) + }) - connection.on('disconnect', reason => - logger.warn(`[Socket] Disconnected. Reason: ${reason}`) - ); + connection.on('disconnect', (reason) => logger.warn(`[Socket] Disconnected. Reason: ${reason}`)) - connection.on('connect_error', error => - logger.warn(`[Socket] Connection error: ${error}`) - ); + connection.on('connect_error', (error) => logger.warn(`[Socket] Connection error: ${error}`)) connection.on('newTrans', (transaction: AnyTransaction) => { - if (transaction.recipientId !== this.options.admAddress) { - return; + const { admAddress } = this.options + + const addresses = Array.isArray(admAddress) ? admAddress : [admAddress] + if (!addresses.includes(transaction.recipientId as AdamantAddress)) { + return } - this.handle(transaction); - }); + this.handle(transaction).catch((error) => this.errorHandler(error)) + }) - this.connection = connection; + this.connection = connection } /** @@ -188,105 +205,155 @@ export class WebSocketClient { * ``` */ public catch(callback: ErrorHandler) { - this.errorHandler = callback; - return this; + this.errorHandler = callback + return this } /** * Removes the handler from all types. */ public off(handler: SingleTransactionHandler) { - for (const handlers of Object.values(this.eventHandlers)) { - const index = (handlers as SingleTransactionHandler[]).indexOf(handler); + for (const handlers of Object.values(this.transactionHandlers)) { + const index = (handlers as SingleTransactionHandler[]).indexOf(handler) if (index !== -1) { - handlers.splice(index, 1); + handlers.splice(index, 1) } } - return this; + return this } /** * Adds an event listener handler for all transaction types. */ - public on(handler: AnyTransactionHandler): this; + public on(handler: AnyTransactionHandler): this /** * Adds an event listener handler for the specific transaction types. */ public on( types: T | T[], handler: TransactionHandler - ): this; + ): this public on( typesOrHandler: T | T[] | AnyTransactionHandler, handler?: TransactionHandler ) { if (handler === undefined) { if (typeof typesOrHandler === 'function') { - for (const trigger of Object.keys(this.eventHandlers)) { - this.eventHandlers[+trigger as EventType].push(typesOrHandler); + for (const trigger of Object.keys(this.transactionHandlers)) { + this.transactionHandlers[+trigger as EventType].push(typesOrHandler) } } } else { - const triggers = Array.isArray(typesOrHandler) - ? typesOrHandler - : [typesOrHandler]; + const triggers = Array.isArray(typesOrHandler) ? typesOrHandler : [typesOrHandler] for (const trigger of triggers) { - this.eventHandlers[trigger as T].push(handler); + this.transactionHandlers[trigger as T].push(handler) } } - return this; + return this } /** - * Registers an event handler for Chatn Message transactions. + * Registers an event handler for Chat Message transactions. */ - public onMessage(handler: TransactionHandler) { - return this.on(TransactionType.CHAT_MESSAGE, handler); + public onMessage( + messageTypes: T | T[], + handler: TransactionHandler + ): this + /** + * Registers an event handler for specific Chat Message types. + */ + public onMessage( + typesOrHandler: T | T[] | TransactionHandler, + handler?: TransactionHandler + ) { + if (handler === undefined) { + if (typeof typesOrHandler === 'function') { + return this.on(TransactionType.CHAT_MESSAGE, typesOrHandler) + } + } else { + const triggers = Array.isArray(typesOrHandler) ? typesOrHandler : [typesOrHandler] + + for (const trigger of triggers) { + this.messageHandlers[trigger as T].push(handler) + } + } + + return this + } + + /** + * Registers an event handler for Chat Message transactions (type 1). + */ + public onChatMessage(handler: TransactionHandler) { + return this.onMessage(MessageType.Chat, handler) + } + + /** + * Registers an event handler for Rich Message transactions (type 2). + */ + public onRichMessage(handler: TransactionHandler) { + return this.onMessage(MessageType.Rich, handler) + } + + /** + * Registers an event handler for Signal Message transactions (type 3). + */ + public onSignalMessage(handler: TransactionHandler) { + return this.onMessage(MessageType.Signal, handler) } /** * Registers an event handler for Token Transfer transactions. */ public onTransfer(handler: TransactionHandler) { - return this.on(TransactionType.SEND, handler); + return this.on(TransactionType.SEND, handler) } /** * Registers an event handler for Register Delegate transactions. */ - public onNewDelegate( - handler: TransactionHandler - ) { - return this.on(TransactionType.DELEGATE, handler); + public onNewDelegate(handler: TransactionHandler) { + return this.on(TransactionType.DELEGATE, handler) } /** * Registers an event handler for Vote for Delegate transactions. */ - public onVoteForDelegate( - handler: TransactionHandler - ) { - return this.on(TransactionType.VOTE, handler); + public onVoteForDelegate(handler: TransactionHandler) { + return this.on(TransactionType.VOTE, handler) } /** * Registers an event handler for Key-Value Store (KVS) transactions. */ public onKVS(handler: TransactionHandler) { - return this.on(TransactionType.STATE, handler); + return this.on(TransactionType.STATE, handler) } private async handle(transaction: AnyTransaction) { - const handlers = this.eventHandlers[transaction.type as T]; + const transactionHandlers = this.transactionHandlers[transaction.type as T] - for (const handler of handlers) { + for (const handler of transactionHandlers) { try { - await handler(transaction as TransactionMap[T]); + await handler(transaction as TransactionMap[T]) } catch (error) { - this.errorHandler(error); + this.errorHandler(error) + } + } + + if (transaction.type === TransactionType.CHAT_MESSAGE) { + const assetChatType = transaction.asset.chat.type + const messageHandlers = this.messageHandlers[assetChatType] + + for (const handler of messageHandlers) { + try { + await handler(transaction) + } catch (error) { + this.errorHandler(error) + } } } } @@ -297,29 +364,44 @@ export class WebSocketClient { * @returns WebSocket url */ chooseNode(): string { - const {wsType, useFastest} = this.options; + const { wsType, useFastest } = this.options - const node = useFastest ? this.fastestNode() : this.randomNode(); + const node = useFastest ? this.fastestNode() : this.randomNode() - let baseURL: string; + let baseURL: string if (wsType === 'ws') { - const host = node.ip ? node.ip : node.baseURL; + const host = node.ip ? node.ip : node.baseURL - baseURL = `${host}:${node.wsPort}`; + baseURL = `${host}:${node.wsPort}` } else { - baseURL = node.baseURL; // no port if wss + baseURL = node.baseURL // no port if wss } - return `${wsType}://${baseURL}`; + return `${wsType}://${baseURL}` } fastestNode() { - return this.nodes[0]; // They are already sorted by ping + return this.nodes[0] // They are already sorted by ping } randomNode() { - const randomIndex = getRandomIntInclusive(0, this.nodes.length - 1); - return this.nodes[randomIndex]; + const randomIndex = getRandomIntInclusive(0, this.nodes.length - 1) + return this.nodes[randomIndex] + } +} + +function notEmptyEvents(handlers: Record>): number[] { + const events: number[] = [] + + for (const key in handlers) { + if (Object.prototype.hasOwnProperty.call(handlers, key)) { + const array = handlers[key] + if (Array.isArray(array) && array.length !== 0) { + events.push(Number(key)) + } + } } + + return events } diff --git a/src/index.ts b/src/index.ts index 9240054..a6b7196 100644 --- a/src/index.ts +++ b/src/index.ts @@ -1,11 +1,11 @@ -export * from './api/index'; -export * from './coins/index'; -export * from './helpers/transactions/index'; -export * from './helpers/encryptor'; -export * from './helpers/constants'; -export * from './helpers/logger'; -export * from './helpers/wsClient'; -export * from './helpers/keys'; +export * from './api/index' +export * from './coins/index' +export * from './helpers/transactions/index' +export * from './helpers/encryptor' +export * from './helpers/constants' +export * from './helpers/logger' +export * from './helpers/wsClient' +export * from './helpers/keys' export { isPassphrase, isAdmAddress, @@ -15,5 +15,5 @@ export { isAdmVoteForDelegateName, validateMessage, isDelegateName, - admToSats, -} from './helpers/validator'; + admToSats +} from './helpers/validator' diff --git a/tsconfig.json b/tsconfig.json index ff0e728..df6dc66 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -7,7 +7,8 @@ "outDir": "./dist", "rootDir": "./src", "declaration": true, - "esModuleInterop": true + "esModuleInterop": true, + "skipLibCheck": true }, "include": ["src/index.ts", "types/*.d.ts"], "exclude": ["node_modules"] diff --git a/types/coininfo.d.ts b/types/coininfo.d.ts index 79401a2..0e15437 100644 --- a/types/coininfo.d.ts +++ b/types/coininfo.d.ts @@ -1,30 +1,30 @@ declare module 'coininfo' { export interface Network { - messagePrefix: string; - bech32: string; - bip32: Bip32; - pubKeyHash: number; - scriptHash: number; - wif: number; + messagePrefix: string + bech32: string + bip32: Bip32 + pubKeyHash: number + scriptHash: number + wif: number } export interface Bip32 { - public: number; - private: number; + public: number + private: number } export interface CoinInfo { main: { - toBitcoinJS: () => Network; - }; + toBitcoinJS: () => Network + } } export interface Coins { - bitcoin: CoinInfo; - dash: CoinInfo; - dogecoin: CoinInfo; + bitcoin: CoinInfo + dash: CoinInfo + dogecoin: CoinInfo } - const coininfo: Coins; - export default coininfo; + const coininfo: Coins + export default coininfo } diff --git a/types/socket-io-client.d.ts b/types/socket-io-client.d.ts index 957d8fd..2dbd2d9 100644 --- a/types/socket-io-client.d.ts +++ b/types/socket-io-client.d.ts @@ -6,8 +6,8 @@ * * @see https://github.com/socketio/engine.io-parser/issues/136 */ -import {TransformStream as TS} from 'node:stream/web'; +// import {TransformStream as TS} from 'node:stream/web'; -declare global { - type TransformStream = TS; -} +// declare global { +// type TransformStream = TS; +// } diff --git a/types/sodium-browserify-tweetnacl.d.ts b/types/sodium-browserify-tweetnacl.d.ts index f22ade1..b2ad517 100644 --- a/types/sodium-browserify-tweetnacl.d.ts +++ b/types/sodium-browserify-tweetnacl.d.ts @@ -1,17 +1,14 @@ declare module 'sodium-browserify-tweetnacl' { namespace sodium { export function crypto_sign_seed_keypair(seed: Buffer): { - publicKey: Buffer; - secretKey: Buffer; - }; + publicKey: Buffer + secretKey: Buffer + } - export function crypto_sign_detached( - hash: Buffer, - privateKey: Buffer - ): Buffer; + export function crypto_sign_detached(hash: Buffer, privateKey: Buffer): Buffer - export function randombytes(nonce: Buffer): void; + export function randombytes(nonce: Buffer): void } - export = sodium; + export = sodium }