From 6473a5b09840dc3d2c0a3a3bf6a626f506f13a60 Mon Sep 17 00:00:00 2001 From: 95gabor Date: Wed, 17 Sep 2025 17:54:56 +0200 Subject: [PATCH 01/12] refactor(trusted-timestamp): rewrite in typescript --- .eslintrc.json | 36 +- README.md | 22 +- package.json | 13 +- rollup.config.js | 1 + src/index.ts | 4 +- src/trustedTimestamp/TimestampRequest.js | 235 -- src/trustedTimestamp/TimestampRequest.ts | 231 ++ src/trustedTimestamp/TrustedTimestampCheck.js | 31 - src/trustedTimestamp/TrustedTimestampCheck.ts | 28 + ...pCommand.js => TrustedTimestampCommand.ts} | 69 +- src/trustedTimestamp/TrustedTimestampInfo.js | 153 -- src/trustedTimestamp/TrustedTimestampInfo.ts | 160 ++ .../TrustedTimestampRequest.js | 196 -- .../TrustedTimestampRequest.ts | 167 ++ ...pService.js => TrustedTimestampService.ts} | 115 +- .../error/create-timestamp-token.error.ts | 2 +- .../types/timestamp-config.type.ts | 6 + .../types/timestamp-log.type.ts | 13 + .../types/timestamp-provider.type.ts | 26 + .../types/timestamp-request.type.ts | 24 + .../types/timestamp-token.type.ts | 8 +- src/util/TempFileService.js | 32 - src/util/TempFileService.ts | 34 + src/util/child_process_promise.js | 44 - src/util/child_process_promise.ts | 61 + src/util/regexParser.js | 40 - src/util/regexParser.ts | 46 + test/tests/feature/timestamp-service.test.ts | 109 +- .../mocks/TrustedTimestampCommand.mock.js | 29 - .../mocks/TrustedTimestampCommand.mock.ts | 34 + test/{vitest.config.js => vitest.config.ts} | 1 - tsconfig.json | 2 +- yarn.lock | 2063 ++++++----------- 33 files changed, 1686 insertions(+), 2349 deletions(-) delete mode 100644 src/trustedTimestamp/TimestampRequest.js create mode 100644 src/trustedTimestamp/TimestampRequest.ts delete mode 100644 src/trustedTimestamp/TrustedTimestampCheck.js create mode 100644 src/trustedTimestamp/TrustedTimestampCheck.ts rename src/trustedTimestamp/{TrustedTimestampCommand.js => TrustedTimestampCommand.ts} (52%) delete mode 100644 src/trustedTimestamp/TrustedTimestampInfo.js create mode 100644 src/trustedTimestamp/TrustedTimestampInfo.ts delete mode 100644 src/trustedTimestamp/TrustedTimestampRequest.js create mode 100644 src/trustedTimestamp/TrustedTimestampRequest.ts rename src/trustedTimestamp/{TrustedTimestampService.js => TrustedTimestampService.ts} (67%) create mode 100644 src/trustedTimestamp/types/timestamp-config.type.ts create mode 100644 src/trustedTimestamp/types/timestamp-log.type.ts create mode 100644 src/trustedTimestamp/types/timestamp-provider.type.ts create mode 100644 src/trustedTimestamp/types/timestamp-request.type.ts delete mode 100644 src/util/TempFileService.js create mode 100644 src/util/TempFileService.ts delete mode 100644 src/util/child_process_promise.js create mode 100644 src/util/child_process_promise.ts delete mode 100644 src/util/regexParser.js create mode 100644 src/util/regexParser.ts delete mode 100644 test/tests/mocks/TrustedTimestampCommand.mock.js create mode 100644 test/tests/mocks/TrustedTimestampCommand.mock.ts rename test/{vitest.config.js => vitest.config.ts} (88%) diff --git a/.eslintrc.json b/.eslintrc.json index ccdfce1..c17f9fe 100644 --- a/.eslintrc.json +++ b/.eslintrc.json @@ -1,28 +1,10 @@ { - "root": true, - "extends": ["standard", "plugin:n/recommended", "plugin:@typescript-eslint/recommended", "prettier"], - "rules": { - "curly": ["error", "all"], - "brace-style": ["error", "1tbs", { "allowSingleLine": false }], - "guard-for-in": "error", - "no-console": "error", - "no-debugger": "error", - "radix": "error", - "n/no-deprecated-api": "warn", - "n/no-process-exit": "off", - "no-process-exit": "off", - "n/shebang": "off", - "no-empty-function": "error", - "no-shadow": "warn", - "n/no-unpublished-import": "off" - }, - "env": { - "commonjs": true, - "es6": true - }, - "parser": "@typescript-eslint/parser", - "parserOptions": { - "ecmaVersion": 2020, - "sourceType": "module" - } - } + "root": true, + "extends": ["plugin:@typescript-eslint/recommended", "prettier"], + "rules": { + "@typescript-eslint/no-useless-constructor": "error", + "@typescript-eslint/no-empty-function": "error", + "@typescript-eslint/explicit-function-return-type": "error" + }, + "parser": "@typescript-eslint/parser" +} diff --git a/README.md b/README.md index 07b6d72..a2d3421 100644 --- a/README.md +++ b/README.md @@ -1,18 +1,16 @@ -Timestamp -============= +# Timestamp Trustedtimestamp service implements the generate and verification of timestamps. -* [Install](#install) -* [Usage](#usage) - * [Params](#params) -* [Default config](#default-config) -* [Config provider options](#config-provider-options) - * [Required fields](#required-fields) - * [Optional fields](#optional-fields) -* [Config example](#config-example) -* [Public methods](#public-methods) - +- [Install](#install) +- [Usage](#usage) + - [Params](#params) +- [Default config](#default-config) +- [Config provider options](#config-provider-options) + - [Required fields](#required-fields) + - [Optional fields](#optional-fields) +- [Config example](#config-example) +- [Public methods](#public-methods) ## Install diff --git a/package.json b/package.json index def03b7..d3a5a32 100644 --- a/package.json +++ b/package.json @@ -24,11 +24,11 @@ "node": ">=16.20.1" }, "scripts": { - "vitest": "vitest run --config test/vitest.config.js", + "vitest": "vitest run --config test/vitest.config.ts", "build": "rollup -c", "vitest:unit": "yarn vitest unit/", "vitest:feature": "yarn vitest feature/", - "lint": "eslint . && echo 'npm run lint: OK'", + "lint": "eslint ./src ./test && echo 'npm run lint: OK'", "lint:fix": "eslint . --fix", "format": "prettier -w .", "test": "npm run lint --silent && echo 'npm test: OK'" @@ -36,27 +36,26 @@ "type": "module", "dependencies": { "@techteamer/cert-utils": "^1.1.3", - "node-fetch": "^2.7.0", + "@types/node-fetch": "^3", + "node-fetch": "^3", "proxy-agent": "^6.5.0", "tmp": "^0.2.1" }, "devDependencies": { "@rollup/plugin-typescript": "^12.1.4", "@types/node": "^20.14.6", + "@types/tmp": "^0.2.6", "@typescript-eslint/eslint-plugin": "^7.16.0", "@typescript-eslint/parser": "^7.13.1", "@vitest/coverage-v8": "^2.0.2", "eslint": "^8.19.0", "eslint-config-prettier": "^10.1.8", "eslint-config-standard": "^17.0.0", - "eslint-plugin-import": "^2.26.0", - "eslint-plugin-n": "^16.3.1", - "eslint-plugin-promise": "^6.0.0", "nock": "^13.5.4", "prettier": "^3.6.2", "rollup": "^4.18.0", "rollup-plugin-esbuild": "^6.1.1", - "typescript": "^5.5.3", + "typescript": "~5.5", "vitest": "^2.0.2" }, "resolutions": { diff --git a/rollup.config.js b/rollup.config.js index 2ab8770..df19542 100644 --- a/rollup.config.js +++ b/rollup.config.js @@ -5,6 +5,7 @@ const name = './build/timestamp_config' const bundle = config => ({ ...config, input: 'src/index.ts', + // eslint-disable-next-line @typescript-eslint/explicit-function-return-type external: id => !/^[./]/.test(id) }) diff --git a/src/index.ts b/src/index.ts index e805f9c..9824006 100644 --- a/src/index.ts +++ b/src/index.ts @@ -1,3 +1,3 @@ -export * from './trustedTimestamp/TrustedTimestampService.js' +export * from './trustedTimestamp/TrustedTimestampService' -export * from './trustedTimestamp/error/create-timestamp-token.error.js' +export * from './trustedTimestamp/error/create-timestamp-token.error' diff --git a/src/trustedTimestamp/TimestampRequest.js b/src/trustedTimestamp/TimestampRequest.js deleted file mode 100644 index a96a598..0000000 --- a/src/trustedTimestamp/TimestampRequest.js +++ /dev/null @@ -1,235 +0,0 @@ -import fetch from 'node-fetch' -import fs from 'node:fs' -import { ProxyAgent } from 'proxy-agent' - -/** - * TimestampRequest class implements timestamp request - * - * @class TimestampRequest - * */ -class TimestampRequest { - /** - * @constructor - * @param tempFileService - * @param cleanupTempFns - * @param {object} tmpOptions - */ - constructor (tempFileService, tmpOptions, cleanupTempFns) { - this.tempFileService = tempFileService - this.tmpOptions = tmpOptions - this.cleanupTempFns = cleanupTempFns - this.tsRequest = { - method: 'POST', - headers: { - 'Content-Type': 'application/timestamp-query' - } - } - } - - /** - * set request header - * @param {object} headers - * */ - setHeader (headers) { - this.tsRequest = { - ...this.tsRequest, - headers - } - } - - /** - * set request body - * @param {object} body - * */ - setBody (body) { - this.tsRequest.body = body - } - - /** - * set request proxy - * @param {string} proxyUrl - * */ - setProxy (proxyUrl) { - this.tsRequest.agent = new ProxyAgent(proxyUrl) - } - - /** - * set request encoding - * @param {string} encoding - * */ - setEncoding (encoding) { - this.tsRequest.encoding = encoding - } - - /** - * set request encoding - * @param {boolean} resolveWithFullResponse - * */ - setResolveWithFullResponse (resolveWithFullResponse) { - this.tsRequest.resolveWithFullResponse = resolveWithFullResponse - } - - /** - * return tsRequest - * @return {object} - * */ - get () { - return this.tsRequest - } - - /** - * authStrategy method that set no auth request - * @param requestType - * @param {object | string} url - * @param {object} [auth] - * @param {object} [body] - * @param {string} [proxy] - * @param {string} tsQuery - * @return {object} - * */ - async authStrategy (requestType, url, auth, body, proxy, tsQuery) { - switch (requestType) { - case 'basic': - return this._getTimestampRequestBasic(url, auth, tsQuery) - case 'oauth': - return await this._getTimestampRequestOauth(url, auth, body, proxy, tsQuery) - case 'noAuth': - return this._getTimestampRequestNoAuth(url, tsQuery) - default: - return this._getTimestampRequestNoAuth(url, tsQuery) - } - } - - /** - * _getTimestampRequestBasic method that set basic auth request - * @param {object | string} url - * @param {object} [auth] - * @param {string} tsQuery - * @return {object} - * @Private - * */ - _getTimestampRequestBasic (url, auth, tsQuery) { - this.setHeader({ - ...this.tsRequest.headers, - Authorization: `Basic ${Buffer.from(auth.user + ':' + auth.pass).toString('base64')}` - }) - - this.setEncoding(null) // we expect binary data in a buffer: ensure that the response is not decoded unnecessarily - this.setResolveWithFullResponse(true) - this.setBody(tsQuery) - - return { requestUrl: url, tsRequest: this.get() } - } - - /** - * _getTimestampRequestOauth method that set oauth request - * @param {object | string} url - * @param {object} [auth] - * @param {object} [body] - * @param {string} [proxy] - * @param {string} tsQuery - * @return {object} - * @Private - * */ - async _getTimestampRequestOauth (url, auth, body, proxy, tsQuery) { - const oauthResult = await this._getOauth(url.getTokenUrl, auth, body, proxy) - if (!oauthResult?.access_token) { - return { requestUrl: null, tsRequest: null, error: null } - } - - if (oauthResult?.error) { - return { requestUrl: null, tsRequest: null, error: oauthResult?.error } - } - - const accessToken = oauthResult?.access_token - - if (accessToken) { - this.setHeader({ - ...this.tsRequest.headers, - Authorization: `Bearer ${accessToken}` - }) - - const { - tempPath, - cleanupCallback - } = await this.tempFileService.createTempFile(this.tmpOptions, Buffer.from(tsQuery)) - this.cleanupTempFns.push(cleanupCallback) - - const stats = fs.statSync(tempPath) - const fileSizeInBytes = stats.size - this.setBody(fs.createReadStream(tempPath)) - this.setHeader({ - ...this.tsRequest.headers, - 'Content-length': fileSizeInBytes - }) - } - - return { requestUrl: url?.getTimestampUrl, tsRequest: this.get(), error: null } - } - - /** - * _getTimestampRequestNoAuth method that set no auth request - * @param {string} url - * @return {object} - * @Private - * */ - _getTimestampRequestNoAuth (url, tsQuery) { - this.setEncoding(null) // we expect binary data in a buffer: ensure that the response is not decoded unnecessarily - this.setResolveWithFullResponse(true) - this.setBody(tsQuery) - - return { requestUrl: url, tsRequest: this.get() } - } - - /** - * _getOauth method that get oauth access_token - * - * @param {string} url - * @param {object} auth - * @param {object} body - * @param {string} [proxy] - * @return {Promise} - * @Private - **/ - async _getOauth (url, auth, body, proxy) { - const tsRequest = await this._getOauthRequestSettings(auth, body, proxy) - return await fetch(url, tsRequest).then((response) => { - return response.json() - }).catch((err) => { - return { - message: err.message, - trace: err - } - }) - } - - /** - * _getOauthRequestSettings method that set the request oath settings - * - * @param {object} auth - * @param {object} body - * @param {string} [proxy] - * @return {object} - * @Private - **/ - async _getOauthRequestSettings (auth, body, proxy) { - const tsRequest = { - method: 'POST' - } - - tsRequest.headers = { - 'Content-Type': 'application/x-www-form-urlencoded', - Authorization: `Basic ${Buffer.from(auth.user + ':' + auth.pass).toString('base64')}` - } - - tsRequest.body = new URLSearchParams(body) - - if (proxy && proxy?.url) { - tsRequest.agent = new ProxyAgent(proxy.url) - } - - return tsRequest - } -} - -export default TimestampRequest diff --git a/src/trustedTimestamp/TimestampRequest.ts b/src/trustedTimestamp/TimestampRequest.ts new file mode 100644 index 0000000..dbc3c5f --- /dev/null +++ b/src/trustedTimestamp/TimestampRequest.ts @@ -0,0 +1,231 @@ +import fetch, { BodyInit } from 'node-fetch' +import fs from 'node:fs' +import { ProxyAgent } from 'proxy-agent' +import type { FileOptions } from 'tmp' + +import type { + TimestampRequestAuthResult, + TimestampRequestAuthTypes, + TimestampRequestError, + TimestampRequestOptions +} from './types/timestamp-request.type' +import type { + TimestampProviderAuth, + TimestampProviderBody, + TimestampProviderOAuthUrl, + TimestampProviderProxyConfig, + TimestampProviderUrl +} from './types/timestamp-provider.type' +import type { TempFileService } from '../util/TempFileService' + +/** + * TimestampRequest class implements timestamp request + * */ +export class TimestampRequest { + private tsRequest: TimestampRequestOptions = { + method: 'POST', + headers: { + 'Content-Type': 'application/timestamp-query' + } + } + + constructor( + private readonly tempFileService: TempFileService, + private readonly tmpOptions: FileOptions, + private readonly cleanupTempFns: ((...args: unknown[]) => unknown)[] + ) {} + + /** + * set request header + * */ + setHeader(headers: Record): void { + this.tsRequest = { + ...this.tsRequest, + ...headers + } + } + + /** + * set request body + * */ + setBody(body: BodyInit): void { + this.tsRequest.body = body + } + + /** + * set request proxy + * */ + setProxy(proxyUrl: string): void { + this.tsRequest.agent = new ProxyAgent({ getProxyForUrl: (): string => proxyUrl }) + } + + /** + * set request encoding + * */ + setEncoding(encoding: string | null): void { + this.tsRequest.encoding = encoding + } + + /** + * set request encoding + * */ + setResolveWithFullResponse(resolveWithFullResponse: boolean): void { + this.tsRequest.resolveWithFullResponse = resolveWithFullResponse + } + + /** + * return tsRequest + * */ + get(): TimestampRequestOptions { + return this.tsRequest + } + + /** + * authStrategy method that set no auth request + * */ + async authStrategy( + requestType: TimestampRequestAuthTypes | undefined, + url: TimestampProviderUrl, + auth: TimestampProviderAuth | undefined, + body: TimestampProviderBody | undefined, + proxy: TimestampProviderProxyConfig | undefined, + tsQuery: string + ): Promise { + switch (requestType) { + case 'basic': + return this._getTimestampRequestBasic(url as string, auth!, tsQuery) + case 'oauth': + return await this._getTimestampRequestOauth(url as TimestampProviderOAuthUrl, auth!, body, proxy, tsQuery) + case 'noAuth': + return this._getTimestampRequestNoAuth(url as string, tsQuery) + default: + return this._getTimestampRequestNoAuth(url as string, tsQuery) + } + } + + /** + * _getTimestampRequestBasic method that set basic auth request + * */ + private _getTimestampRequestBasic( + url: string, + auth: TimestampProviderAuth, + tsQuery: string + ): TimestampRequestAuthResult { + this.setHeader({ + ...this.tsRequest.headers, + Authorization: `Basic ${Buffer.from(auth.user + ':' + auth.pass).toString('base64')}` + }) + + this.setEncoding(null) // we expect binary data in a buffer: ensure that the response is not decoded unnecessarily + this.setResolveWithFullResponse(true) + this.setBody(tsQuery) + + return { requestUrl: url, tsRequest: this.get() } + } + + /** + * _getTimestampRequestOauth method that set oauth request + * */ + private async _getTimestampRequestOauth( + url: TimestampProviderOAuthUrl, + auth: TimestampProviderAuth, + body: TimestampProviderBody | undefined, + proxy: TimestampProviderProxyConfig | undefined, + tsQuery: string + ): Promise { + const oauthResult = await this._getOauth<{ + access_token?: string + error?: TimestampRequestError + }>(url.getTokenUrl, auth, body, proxy) + if (!oauthResult?.access_token) { + return { requestUrl: null, tsRequest: null, error: null } + } + + if (oauthResult?.error) { + return { requestUrl: null, tsRequest: null, error: oauthResult?.error } + } + + const accessToken = oauthResult?.access_token + + if (accessToken) { + this.setHeader({ + ...this.tsRequest.headers, + Authorization: `Bearer ${accessToken}` + }) + + const { tempPath, cleanupCallback } = await this.tempFileService.createTempFile( + this.tmpOptions, + Buffer.from(tsQuery) + ) + this.cleanupTempFns.push(cleanupCallback) + + const stats = fs.statSync(tempPath) + const fileSizeInBytes = stats.size + this.setBody(fs.createReadStream(tempPath)) + this.setHeader({ + ...this.tsRequest.headers, + 'Content-length': fileSizeInBytes + }) + } + + return { requestUrl: url?.getTimestampUrl, tsRequest: this.get(), error: null } + } + + /** + * _getTimestampRequestNoAuth method that set no auth request + * */ + private _getTimestampRequestNoAuth(url: string, tsQuery: string): TimestampRequestAuthResult { + this.setEncoding(null) // we expect binary data in a buffer: ensure that the response is not decoded unnecessarily + this.setResolveWithFullResponse(true) + this.setBody(tsQuery) + + return { requestUrl: url, tsRequest: this.get() } + } + + /** + * _getOauth method that get oauth access_token + **/ + private async _getOauth( + url: string, + auth: TimestampProviderAuth, + body: TimestampProviderBody | undefined, + proxy: TimestampProviderProxyConfig | undefined + ): Promise { + const tsRequest = await this._getOauthRequestSettings(auth, body, proxy) + try { + const response = await fetch(url, tsRequest) + return (await response.json()) as ResponseType + } catch (error) { + return { + error: { + message: (error as Error).message, + trace: error as Error + } + } as ResponseType + } + } + + /** + * _getOauthRequestSettings method that set the request oath settings + **/ + private async _getOauthRequestSettings( + auth: TimestampProviderAuth, + body: TimestampProviderBody | undefined, + proxy: TimestampProviderProxyConfig | undefined + ): Promise> { + const tsRequest: TimestampRequestOptions = { + method: 'POST', + headers: { + 'Content-Type': 'application/x-www-form-urlencoded', + Authorization: `Basic ${Buffer.from(auth.user + ':' + auth.pass).toString('base64')}` + }, + body: new URLSearchParams(body) + } + + if (proxy?.url) { + tsRequest.agent = new ProxyAgent({ getProxyForUrl: (): string => proxy.url }) + } + + return tsRequest + } +} diff --git a/src/trustedTimestamp/TrustedTimestampCheck.js b/src/trustedTimestamp/TrustedTimestampCheck.js deleted file mode 100644 index 081d237..0000000 --- a/src/trustedTimestamp/TrustedTimestampCheck.js +++ /dev/null @@ -1,31 +0,0 @@ -const supportedDigestForamts = [ - 'sha', 'sha1', 'mdc2', 'ripemd160', 'sha224', 'sha256', 'sha384', 'sha512', 'md2', 'md4', 'md5', 'dss1' -] - -/** - * @param format - * @return {boolean} - */ -function checkDigestFormat (format) { - return supportedDigestForamts.includes(format) -} - -/** - * @param digest - * @return {boolean} - */ -function checkDigest (digest) { - return /^([0-9A-F])+$/i.test(digest) -} - -/** - * @param {string} format - * @return {string} - */ -function normalizeDigestFormat (format) { - return format - .replace(/^-/, '') // -sha256 - .replace(/-/g, '') // sha-256 -} - -export { checkDigestFormat, checkDigest, normalizeDigestFormat } diff --git a/src/trustedTimestamp/TrustedTimestampCheck.ts b/src/trustedTimestamp/TrustedTimestampCheck.ts new file mode 100644 index 0000000..e29d1ff --- /dev/null +++ b/src/trustedTimestamp/TrustedTimestampCheck.ts @@ -0,0 +1,28 @@ +const supportedDigestForamts = [ + 'sha', + 'sha1', + 'mdc2', + 'ripemd160', + 'sha224', + 'sha256', + 'sha384', + 'sha512', + 'md2', + 'md4', + 'md5', + 'dss1' +] + +export function checkDigestFormat(format: string): boolean { + return supportedDigestForamts.includes(format) +} + +export function checkDigest(digest: string): boolean { + return /^([0-9A-F])+$/i.test(digest) +} + +export function normalizeDigestFormat(format: string): string { + return format + .replace(/^-/, '') // -sha256 + .replace(/-/g, '') // sha-256 +} diff --git a/src/trustedTimestamp/TrustedTimestampCommand.js b/src/trustedTimestamp/TrustedTimestampCommand.ts similarity index 52% rename from src/trustedTimestamp/TrustedTimestampCommand.js rename to src/trustedTimestamp/TrustedTimestampCommand.ts index 3993627..68026a4 100644 --- a/src/trustedTimestamp/TrustedTimestampCommand.js +++ b/src/trustedTimestamp/TrustedTimestampCommand.ts @@ -1,85 +1,60 @@ -import { exec } from '../util/child_process_promise.js' +import { exec } from '../util/child_process_promise' -/** - * @param digest - * @param digestFormat - * @return {Promise} - */ -async function getTsQuery (digest, digestFormat) { +export async function getTsQuery(digest: string, digestFormat: string): Promise { // create a time stamp request based on the hash of a data file const queryCommand = `openssl ts -query -digest ${digest} -no_nonce -${digestFormat} -cert` - return await exec(queryCommand, { encoding: 'buffer' }).catch((err) => { + return await exec(queryCommand, { encoding: 'buffer' }).catch(err => { throw new Error(`Failed to execute openssl ts -query command "${queryCommand}" ${err.message}`) }) } -/** - * @param digest - * @param tempPath - * @param isToken - * @param certsLocation - * @return {Promise} - */ -function getTsVerify (digest, tempPath, isToken, certsLocation) { +export function getTsVerify( + digest: string, + tempPath: string, + isToken: boolean, + certsLocation: string +): Promise { // verify the response with openssl const verifyCommand = isToken ? `openssl ts -verify -digest ${digest} -token_in -in ${tempPath} -CApath ${certsLocation}` : `openssl ts -verify -digest ${digest} -in ${tempPath} -CApath ${certsLocation}` - return exec(verifyCommand).catch((err) => { + return exec(verifyCommand).catch(err => { throw new Error(`Failed to verify tsr "${verifyCommand}" ${err.message}`) }) } -/** - * @param inputTempPath - * @param isToken - * @return {Promise} - */ -async function getTsReply (inputTempPath, isToken) { +export async function getTsReply(inputTempPath: string, isToken: boolean): Promise { // get token info const replyCommand = isToken ? `openssl ts -reply -token_in -in ${inputTempPath} -text` : `openssl ts -reply -in ${inputTempPath} -text` - return await exec(replyCommand).catch((err) => { + return await exec(replyCommand).catch(err => { throw new Error(`Error executing openssl ts -reply command "${replyCommand}" ${err.message}`) }) } -/** - * @param inputTempPath - * @param tmp - * @return {Promise} - */ -async function generateTsReply (inputTempPath, tmp) { - await exec(`openssl ts -reply -in "${inputTempPath}" -token_out -out "${tmp.tempPath}"`).catch((err) => { +export async function generateTsReply(inputTempPath: string, tempPath: string): Promise { + await exec(`openssl ts -reply -in "${inputTempPath}" -token_out -out "${tempPath}"`).catch(err => { throw new Error(`Error executing openssl ts -reply command "${inputTempPath}" ${err.message}`) }) } -/** - * @param tstPath - * @return {Promise} - */ -async function extractCertFromToken (tstPath) { - return await exec(`openssl pkcs7 -inform der -in "${tstPath}" -print_certs`).catch((err) => { +export async function extractCertFromToken(tstPath: string): Promise { + return await exec(`openssl pkcs7 -inform der -in "${tstPath}" -print_certs`).catch(err => { throw new Error(`Error executing openssl pkcs7 command ${err.message}`) }) } -/** - * @return {Promise} - */ -async function checkSslPath () { - return await exec('which openssl').catch((err) => { - throw new Error(`Unable to verify openssl installation ${err.message}`) - }).then((stdout) => { +export async function checkSslPath(): Promise { + try { + const stdout = await exec('which openssl') if (!stdout.toString()) { throw new Error('openssl is unavailable') } return stdout - }) + } catch (error) { + throw new Error(`Unable to verify openssl installation ${(error as Error).message}`) + } } - -export { getTsQuery, getTsVerify, getTsReply, generateTsReply, extractCertFromToken, checkSslPath } diff --git a/src/trustedTimestamp/TrustedTimestampInfo.js b/src/trustedTimestamp/TrustedTimestampInfo.js deleted file mode 100644 index a30255b..0000000 --- a/src/trustedTimestamp/TrustedTimestampInfo.js +++ /dev/null @@ -1,153 +0,0 @@ -import { parseRegex } from '../util/regexParser.js' -/** - * @class TimestampInfo - * @property {Number} version - * @property {String} policyOID - * @property {String} hashAlgorithm - * @property {String} hash - * @property {String} serialNumber - * @property {String} timeStamp - * @property {Date} timeStampDate - * @property {Number} accuracy - * @property {Boolean} ordering - * @property {String} nonce - * @property {String} issuer - * @property {Object} tsa - * @property {String} tsa.C - * @property {String} tsa.L - * @property {String} tsa.O - * @property {String} tsa.OU - * @property {String} tsa.CN - * @property {String|null} [error] - * @property {CertInfo|null} [certInfo] - * - * Status info: - * Status: Granted. - * Status description: unspecified - * Failure info: unspecified - * - * TST info: - * Version: 1 - * Policy OID: 1.3.6.1.4.1.21528.2.2.99 - * Hash Algorithm: sha256 - * Message data: - * 0000 - c5 3e 94 56 aa 61 ed 56-49 69 74 29 1e 01 d7 2a .>.V.a.VIit)...* - * 0010 - 64 cc 24 84 d2 a2 31 4d-33 b6 ca c8 98 23 03 b9 d.$...1M3....#.. - * Serial number: 0x0308441E - * Time stamp: Jan 30 13:45:20 2018 GMT - * Accuracy: 0x01 seconds, unspecified millis, unspecified micros - * Ordering: no - * Nonce: unspecified - * TSA: DirName:/C=HU/L=Budapest/O=Microsec Ltd./OU=e-Szigno CA/CN=e-Szigno Test TSA2 - * Extensions: - * */ -class TimestampInfo { - /** - * @constructor - * @param {string} timestampInfoType (normal, short) - * @param {string} tsText - * @param {string} error - */ - constructor (timestampInfoType = 'normal', tsText, error = null) { - this.error = null - this.version = null - this.policyOID = null - this.hashAlgorithm = null - this.serialNumber = null - this.timeStamp = null - this.accuracy = null - this.ordering = null - this.nonce = null - this.tsa = null - - if (error) { - this.error = error - } else { - if (timestampInfoType === 'short') { - this.parseOpensslOutputShort(tsText) - } else { - this.hash = null - this.timeStampDate = null - this.issuer = null - this.certInfo = null - this.parseOpensslOutput(tsText) - } - } - } - - /** - * @param {CertInfo} certInfo - */ - setCertInfo (certInfo) { - this.certInfo = certInfo - } - - /** - * @param {string} tsText - */ - parseOpensslOutput (tsText) { - this.version = parseRegex(tsText, /Version:\s*([^\n\r]+)/, 1, parseInt) - this.policyOID = parseRegex(tsText, /Policy OID:\s*([^\n\r]+)/, 1) - this.hashAlgorithm = parseRegex(tsText, /Hash Algorithm:\s*([^\n\r]+)/, 1) - this.hash = tsText.match(/\d{4} - .*?\s{2}/g).map(line => { - return line.replace(/\d{4} - /g, '').replace(/[\s*-]/g, '') - }).join('') - this.serialNumber = parseRegex(tsText, /Serial number:\s*([^\n\r]+)/, 1) - this.timeStamp = parseRegex(tsText, /Time stamp:\s*([^\n\r]+)/, 1) - this.timeStampDate = new Date(this.timeStamp) - this.accuracy = parseRegex(tsText, /Accuracy:\s*(.+) seconds, (.+) millis, (.+) micros/, ['s', 'm', 'u'], ({ s, m, u }) => { - s = Number(s === 'unspecified' ? 0 : s) - m = Number(m === 'unspecified' ? 0 : m) - u = Number(u === 'unspecified' ? 0 : u) - return s * 1000 + m + u / 1000 - }) - this.ordering = parseRegex(tsText, /Ordering:\s*([^\n\r]+)/, 1, ordering => ordering !== 'no') - this.nonce = parseRegex(tsText, /Nonce:\s*([^\n\r]+)/, 1, nonce => nonce === 'unspecified' ? null : nonce) - this.issuer = parseRegex(tsText, /TSA:\s*DirName:\s*([^\n\r]+)/, 1) - this.tsa = parseRegex(tsText, /TSA:\s*DirName:\s*([^\n\r]+)/, 1, (result) => { - const m = result.match(/\/\w{1,2}=[^/]+/g) || [] - - return m.reduce((obj, part) => { - const [, label, value] = part.match(/\/(\w{1,2})=([^/]+)/) || [] - if (!label || !value) { - return obj - } - obj[label] = value - return obj - }, { C: null, L: null, O: null, OU: null, CN: null }) - }) - } - - /** - * @param {string} tsText - */ - parseOpensslOutputShort (tsText) { - this.version = parseRegex(tsText, /Version:\s*([^\n\r]+)/, 1, parseInt) - this.policyOID = parseRegex(tsText, /Policy OID:\s*([^\n\r]+)/, 1) - this.hashAlgorithm = parseRegex(tsText, /Hash Algorithm:\s*([^\n\r]+)/, 1) - this.serialNumber = parseRegex(tsText, /Serial number:\s*([^\n\r]+)/, 1) - this.timeStamp = parseRegex(tsText, /Time stamp:\s*([^\n\r]+)/, 1, dateString => new Date(dateString)) - this.accuracy = parseRegex(tsText, /Accuracy:\s*(.+) seconds, (.+) millis, (.+) micros/, ['s', 'm', 'u'], ({ s, m, u }) => { - s = Number(s === 'unspecified' ? 0 : s) - m = Number(m === 'unspecified' ? 0 : m) - u = Number(u === 'unspecified' ? 0 : u) - return s * 1000 + m + u / 1000 - }) - this.ordering = parseRegex(tsText, /Ordering:\s*([^\n\r]+)/, 1, ordering => ordering !== 'no') - this.nonce = parseRegex(tsText, /Nonce:\s*([^\n\r]+)/, 1, nonce => nonce === 'unspecified' ? null : nonce) - this.tsa = parseRegex(tsText, /TSA:\s*([^\n\r]+)/, 1, (v) => { - const m = v.match(/\/\w{1,2}=[^/]+/g) || [] - - return m.reduce((obj, part) => { - const [, label, value] = part.match(/\/(\w{1,2})=([^/]+)/) || [] - if (!label || !value) { - return obj - } - obj[label] = value - return obj - }, { C: null, L: null, O: null, OU: null, CN: null }) - }) - } -} - -export default TimestampInfo diff --git a/src/trustedTimestamp/TrustedTimestampInfo.ts b/src/trustedTimestamp/TrustedTimestampInfo.ts new file mode 100644 index 0000000..c09448c --- /dev/null +++ b/src/trustedTimestamp/TrustedTimestampInfo.ts @@ -0,0 +1,160 @@ +import { CertService } from '@techteamer/cert-utils' +import { parseRegex } from '../util/regexParser' + +interface TSA { + C: string | null + L: string | null + O: string | null + OU: string | null + CN: string | null +} + +/** + * + * Status info: + * Status: Granted. + * Status description: unspecified + * Failure info: unspecified + * + * TST info: + * Version: 1 + * Policy OID: 1.3.6.1.4.1.21528.2.2.99 + * Hash Algorithm: sha256 + * Message data: + * 0000 - c5 3e 94 56 aa 61 ed 56-49 69 74 29 1e 01 d7 2a .>.V.a.VIit)...* + * 0010 - 64 cc 24 84 d2 a2 31 4d-33 b6 ca c8 98 23 03 b9 d.$...1M3....#.. + * Serial number: 0x0308441E + * Time stamp: Jan 30 13:45:20 2018 GMT + * Accuracy: 0x01 seconds, unspecified millis, unspecified micros + * Ordering: no + * Nonce: unspecified + * TSA: DirName:/C=HU/L=Budapest/O=Microsec Ltd./OU=e-Szigno CA/CN=e-Szigno Test TSA2 + * Extensions: + * */ +export class TimestampInfo { + error: string | null = null + version: number | null = null + policyOID: string | null = null + hashAlgorithm: string | null = null + hash: string | null = null + serialNumber: string | null = null + timeStamp: Date | null = null + timeStampDate: Date | null = null + accuracy: number | null = null + ordering: boolean | null = null + nonce: string | null = null + issuer: string | null = null + tsa: TSA | null = null + certInfo: CertService['CertInfo'] | null = null + + constructor(timestampInfoType: 'normal' | 'short' = 'normal', tsText: string, error: string | null = null) { + this.error = null + this.version = null + this.policyOID = null + this.hashAlgorithm = null + this.serialNumber = null + this.timeStamp = null + this.accuracy = null + this.ordering = null + this.nonce = null + this.tsa = null + + if (error) { + this.error = error + } else { + if (timestampInfoType === 'short') { + this.parseOpensslOutputShort(tsText) + } else { + this.hash = null + this.timeStampDate = null + this.issuer = null + this.certInfo = null + this.parseOpensslOutput(tsText) + } + } + } + + setCertInfo(certInfo: CertService['CertInfo'] | null): void { + this.certInfo = certInfo + } + + parseOpensslOutput(tsText: string): void { + this.version = parseRegex(tsText, /Version:\s*([^\n\r]+)/, 1, parseInt)! + this.policyOID = parseRegex(tsText, /Policy OID:\s*([^\n\r]+)/, 1)! + this.hashAlgorithm = parseRegex(tsText, /Hash Algorithm:\s*([^\n\r]+)/, 1)! + this.hash = tsText + .match(/\d{4} - .*?\s{2}/g)! + .map(line => { + return line.replace(/\d{4} - /g, '').replace(/[\s*-]/g, '') + }) + .join('') + this.serialNumber = parseRegex(tsText, /Serial number:\s*([^\n\r]+)/, 1)! + this.timeStamp = parseRegex(tsText, /Time stamp:\s*([^\n\r]+)/, 1)! + this.timeStampDate = new Date(this.timeStamp) + this.accuracy = parseRegex( + tsText, + /Accuracy:\s*(.+) seconds, (.+) millis, (.+) micros/, + ['s', 'm', 'u'], + ({ s, m, u }) => { + const _s = Number(s === 'unspecified' ? 0 : s) + const _m = Number(m === 'unspecified' ? 0 : m) + const _u = Number(u === 'unspecified' ? 0 : u) + return _s * 1000 + _m + _u / 1000 + } + )! + this.ordering = parseRegex(tsText, /Ordering:\s*([^\n\r]+)/, 1, ordering => ordering !== 'no')! + this.nonce = parseRegex(tsText, /Nonce:\s*([^\n\r]+)/, 1, nonce => (nonce === 'unspecified' ? null : nonce))! + this.issuer = parseRegex(tsText, /TSA:\s*DirName:\s*([^\n\r]+)/, 1)! + this.tsa = parseRegex(tsText, /TSA:\s*DirName:\s*([^\n\r]+)/, 1, (result): TSA => { + const m = result.match(/\/\w{1,2}=[^/]+/g) || [] + + return m.reduce( + (obj, part) => { + const [, label, value] = part.match(/\/(\w{1,2})=([^/]+)/) || [] + if (!label || !value) { + return obj + } + obj[label as keyof TSA] = value + return obj + }, + { C: null, L: null, O: null, OU: null, CN: null } as TSA + ) + })! + } + + parseOpensslOutputShort(tsText: string): void { + this.version = parseRegex(tsText, /Version:\s*([^\n\r]+)/, 1, parseInt)! + this.policyOID = parseRegex(tsText, /Policy OID:\s*([^\n\r]+)/, 1)! + this.hashAlgorithm = parseRegex(tsText, /Hash Algorithm:\s*([^\n\r]+)/, 1)! + this.serialNumber = parseRegex(tsText, /Serial number:\s*([^\n\r]+)/, 1)! + this.timeStamp = parseRegex(tsText, /Time stamp:\s*([^\n\r]+)/, 1, dateString => new Date(dateString))! + this.accuracy = parseRegex( + tsText, + /Accuracy:\s*(.+) seconds, (.+) millis, (.+) micros/, + ['s', 'm', 'u'], + ({ s, m, u }) => { + const _s = Number(s === 'unspecified' ? 0 : s) + const _m = Number(m === 'unspecified' ? 0 : m) + const _u = Number(u === 'unspecified' ? 0 : u) + return _s * 1000 + _m + _u / 1000 + } + )! + this.ordering = parseRegex(tsText, /Ordering:\s*([^\n\r]+)/, 1, ordering => ordering !== 'no')! + this.nonce = parseRegex(tsText, /Nonce:\s*([^\n\r]+)/, 1, nonce => (nonce === 'unspecified' ? null : nonce))! + this.tsa = parseRegex(tsText, /TSA:\s*([^\n\r]+)/, 1, v => { + const m = v.match(/\/\w{1,2}=[^/]+/g) || [] + + return m.reduce( + (obj, part) => { + const [, label, value] = part.match(/\/(\w{1,2})=([^/]+)/) || [] + if (!label || !value) { + return obj + } + obj[label as keyof TSA] = value + return obj + }, + { C: null, L: null, O: null, OU: null, CN: null } as TSA + ) + })! + } +} diff --git a/src/trustedTimestamp/TrustedTimestampRequest.js b/src/trustedTimestamp/TrustedTimestampRequest.js deleted file mode 100644 index 43c120a..0000000 --- a/src/trustedTimestamp/TrustedTimestampRequest.js +++ /dev/null @@ -1,196 +0,0 @@ -import fetch from 'node-fetch' -import TimestampRequest from './TimestampRequest.js' - -/** -* TrustedTimestampRequest service implements timestamp request and sorted providers -* -* @class TrustedTimestampRequest -* */ -class TrustedTimestampRequest { - /** - * @typedef {object} provider - * @property {string} name provider name - * @property {string | urlObject} url provider url - * @property {object} [auth] optional auth setting - * @property {number} [priority] optional provider priority - * - * @typedef {object} urlObject - * @property {string} getTokenUrl - * @property {string} getTimestampUrl - * - * @typedef {object} auth - * @property {string} user username - * @property {string} pass password - * - * @constructor - * @param {provider[]} providers - * @param tempFileService - * @param {object} tmpOptions - */ - constructor (providers, tempFileService, tmpOptions) { - this.tempFileService = tempFileService - this.tmpOptions = tmpOptions - this.cleanupTempFns = [] - this.providers = this._sortedProviders(providers) - } - - /** - * getTimestamp method that calls the service providers in sequence, requesting a timestamp - * - * @typedef {returnObject} result - * @property {Buffer} tsr - * @property {string} providerName - * @property {array} logHistory - * - * @param {string} tsQuery - * @return {returnObject} - **/ - async getTimestamp (tsQuery) { - let tsr = null - let providerName = '' - const logHistory = [] - - for (const provider of this.providers) { - if (!tsr) { - const { name, url, auth, body, proxy } = provider - - if (!name) { - throw new Error('Provider name is missing') - } - if (!url) { - throw new Error('Provider url is missing') - } - - const { timestampToken, log } = await this._getTimeStampToken(name, url, auth, body, proxy, tsQuery) - logHistory.push(log) - tsr = timestampToken - providerName = name - } - } - - return { tsr, providerName, logHistory } - } - - /** - * sortedProviders method that sorting the providers according to priority - * - * @return array - * @Private - **/ - _sortedProviders (providers) { - const priorityProviders = [] - const nonPriorityProviders = [] - - providers.forEach((provider) => { - if (provider?.priority) { - priorityProviders.push(provider) - } else { - nonPriorityProviders.push(provider) - } - }) - - const sortedProviders = priorityProviders.sort((a, b) => a.priority - b.priority) - - return sortedProviders.concat(nonPriorityProviders) - } - - /** - * @typedef {object} urlObject - * @property {string} getTokenUrl - * @property {string} getTimestampUrl - * - * @typedef {object} returnObject - * @property {Promise} timestampToken - * @property {logObject} log - * - * @typedef {object} logObject - * @property {infoObject} info - * @property {object} errorTrace - * - * @typedef {object} infoObject - * @property {string} name - * @property {string} info - * @property {string} date - * @property {urlObject} url - * @property {string} response - * @property {string} error - **/ - - /** - * sendTimestampRequest method that calls the provider - * - * @param {string} name - provider name - * @param {string| urlObject} url - * @param {string} [auth] - * @param {string} [proxy] - * @param {string} [body] - * @param {string} tsQuery - * @return {returnObject} - * @Private - **/ - async _getTimeStampToken (name, url, auth, body, proxy, tsQuery) { - const { requestUrl, tsRequest, error } = await this._getTimestampRequest(url, body, auth, proxy, tsQuery) - if (error) { - return { timestampToken: null, log: { info: { name, info: null, date: new Date(), url, response: null, error: error?.message }, errorTrace: error?.trace } } - } - return await fetch(requestUrl, tsRequest).then(async (response) => { - if (response.status !== 200) { - throw new Error(`TSA response unsatisfactory: ${response.status} ${response.statusText}`) - } - - return { timestampToken: Buffer.from(await response.arrayBuffer(), 'utf8'), log: { info: { name, date: new Date(), url, response: `${response.status}, ${response.statusText}`, error: null }, errorTrace: null } } - }).catch((err) => { - return { timestampToken: null, log: { info: { name, date: new Date(), url, reponse: null, error: err.message }, errorTrace: err } } - }).finally(() => { - for (const cleanUpFn of this.cleanupTempFns) { - if (typeof cleanUpFn === 'function') { - cleanUpFn() - } - } - }) - } - - /** - * @typedef {object} resultObject - * @property {string} requestUrl - * @property {string} tsRequest - * @property {string} error - * - **/ - - /** - * getTimestampRequestSettings method that set the request settings - * - * @param {object | string} url - * @param {string} [body] - * @param {string} [auth] - * @param {string} [proxy] - * @param {string} [body] - * @param {string} tsQuery - * @return {resultObject} - * @Private - **/ - async _getTimestampRequest (url, body, auth, proxy, tsQuery) { - // send the request to the TSA - const tsRequest = new TimestampRequest(this.tempFileService, this.tmpOptions, this.cleanupTempFns) - - if (proxy && proxy?.url) { - tsRequest.setProxy(proxy.url) - } - - let requestType - if (url?.getTokenUrl && tsQuery) { - requestType = 'oauth' - } - if (!url?.getTokenUrl && auth?.user && auth?.pass && tsQuery) { - requestType = 'basic' - } - if (!url?.getTokenUrl && !auth?.user) { - requestType = 'noAuth' - } - - return await tsRequest.authStrategy(requestType, url, auth, body, proxy, tsQuery) - } -} - -export default TrustedTimestampRequest diff --git a/src/trustedTimestamp/TrustedTimestampRequest.ts b/src/trustedTimestamp/TrustedTimestampRequest.ts new file mode 100644 index 0000000..681fe84 --- /dev/null +++ b/src/trustedTimestamp/TrustedTimestampRequest.ts @@ -0,0 +1,167 @@ +import fetch from 'node-fetch' +import { FileOptions as TempFileOptions } from 'tmp' + +import { TimestampRequest } from './TimestampRequest' +import { TempFileService } from '../util/TempFileService' +import type { TimestampRequestAuthResult, TimestampRequestAuthTypes } from './types/timestamp-request.type' +import type { + TimestampProvider, + TimestampProviderAuth, + TimestampProviderBody, + TimestampProviderOAuthUrl, + TimestampProviderProxyConfig, + TimestampProviderUrl +} from './types/timestamp-provider.type' +import type { TimestampLog } from './types/timestamp-log.type' + +/** + * TrustedTimestampRequest service implements timestamp request and sorted providers + * */ +export class TrustedTimestampRequest { + private readonly cleanupTempFns: (() => unknown)[] = [] + private readonly providers: TimestampProvider[] + + constructor( + providers: TimestampProvider[], + private readonly tempFileService: TempFileService, + private readonly tmpOptions: TempFileOptions + ) { + this.providers = this._sortedProviders(providers) + } + + /** + * getTimestamp method that calls the service providers in sequence, requesting a timestamp + **/ + async getTimestamp( + tsQuery: string + ): Promise<{ tsr: Buffer | null; providerName: string; logHistory: TimestampLog[] }> { + let tsr = null + let providerName = '' + const logHistory: TimestampLog[] = [] + + for (const provider of this.providers) { + if (!tsr) { + const { name, url, auth, body, proxy } = provider + + if (!name) { + throw new Error('Provider name is missing') + } + if (!url) { + throw new Error('Provider url is missing') + } + + const { timestampToken, log } = await this._getTimeStampToken(name, url, auth, body, proxy, tsQuery) + logHistory.push(log) + tsr = timestampToken + providerName = name + } + } + + return { tsr, providerName, logHistory } + } + + /** + * sortedProviders method that sorting the providers according to priority + **/ + private _sortedProviders(providers: TimestampProvider[]): TimestampProvider[] { + const priorityProviders: TimestampProvider[] = [] + const nonPriorityProviders: TimestampProvider[] = [] + + providers.forEach(provider => { + if (provider?.priority) { + priorityProviders.push(provider) + } else { + nonPriorityProviders.push(provider) + } + }) + + const sortedProviders = priorityProviders.toSorted((a, b) => a.priority! - b.priority!) + + return sortedProviders.concat(nonPriorityProviders) + } + + /** + * sendTimestampRequest method that calls the provider + **/ + private async _getTimeStampToken( + name: string, + url: TimestampProviderUrl, + auth: TimestampProviderAuth | undefined, + body: TimestampProviderBody | undefined, + proxy: TimestampProviderProxyConfig | undefined, + tsQuery: string + ): Promise<{ + timestampToken: null | Buffer + log: TimestampLog + }> { + const { requestUrl, tsRequest, error } = await this._getTimestampRequest(url, body, auth, proxy, tsQuery) + if (error) { + return { + timestampToken: null, + log: { + info: { name, info: null, date: new Date(), url, response: null, error: error?.message }, + errorTrace: error?.trace + } + } + } + try { + const response = await fetch(requestUrl!, tsRequest!) + if (response.status !== 200) { + throw new Error(`TSA response unsatisfactory: ${response.status} ${response.statusText}`) + } + + return { + timestampToken: Buffer.from((await response.arrayBuffer()) as unknown as string, 'utf8'), // TODO: fix type + log: { + info: { name, date: new Date(), url, response: `${response.status}, ${response.statusText}`, error: null }, + errorTrace: null + } + } + } catch (error) { + return { + timestampToken: null, + log: { + info: { name, date: new Date(), url, response: null, error: (error as Error).message }, + errorTrace: error as Error + } + } + } finally { + for (const cleanUpFn of this.cleanupTempFns) { + if (typeof cleanUpFn === 'function') { + cleanUpFn() + } + } + } + } + + /** + * getTimestampRequestSettings method that set the request settings + **/ + private async _getTimestampRequest( + url: TimestampProviderUrl, + body: TimestampProviderBody | undefined, + auth: TimestampProviderAuth | undefined, + proxy: TimestampProviderProxyConfig | undefined, + tsQuery: string + ): Promise { + // send the request to the TSA + const tsRequest = new TimestampRequest(this.tempFileService, this.tmpOptions, this.cleanupTempFns) + + if (proxy?.url) { + tsRequest.setProxy(proxy.url) + } + + let requestType: TimestampRequestAuthTypes | undefined + if ((url as TimestampProviderOAuthUrl)?.getTokenUrl && tsQuery) { + requestType = 'oauth' + } + if (!(url as TimestampProviderOAuthUrl)?.getTokenUrl && auth?.user && auth?.pass && tsQuery) { + requestType = 'basic' + } + if (!(url as TimestampProviderOAuthUrl)?.getTokenUrl && !auth?.user) { + requestType = 'noAuth' + } + + return await tsRequest.authStrategy(requestType, url, auth, body, proxy, tsQuery) + } +} diff --git a/src/trustedTimestamp/TrustedTimestampService.js b/src/trustedTimestamp/TrustedTimestampService.ts similarity index 67% rename from src/trustedTimestamp/TrustedTimestampService.js rename to src/trustedTimestamp/TrustedTimestampService.ts index f0b3f97..0760fac 100644 --- a/src/trustedTimestamp/TrustedTimestampService.js +++ b/src/trustedTimestamp/TrustedTimestampService.ts @@ -1,5 +1,8 @@ -import TimestampInfo from './TrustedTimestampInfo.js' -import TrustedTimestampRequest from './TrustedTimestampRequest.js' +import { CertService } from '@techteamer/cert-utils' +import { FileOptions as TempFileOptions } from 'tmp' + +import { TimestampInfo } from './TrustedTimestampInfo' +import { TrustedTimestampRequest } from './TrustedTimestampRequest' import { checkSslPath, extractCertFromToken, @@ -7,15 +10,13 @@ import { getTsQuery, getTsReply, getTsVerify -} from './TrustedTimestampCommand.js' -import { checkDigest, checkDigestFormat, normalizeDigestFormat } from './TrustedTimestampCheck.js' -import TempFileService from '../util/TempFileService.js' -import { CreateTimestampTokenError } from './error/create-timestamp-token.error.ts' -import { CertService } from '@techteamer/cert-utils' - -/** - * @typedef {import('./types/timestamp-token.type').CreatedTimestampToken} CreatedTimestampToken - */ +} from './TrustedTimestampCommand' +import { checkDigest, checkDigestFormat, normalizeDigestFormat } from './TrustedTimestampCheck' +import { TempFileService } from '../util/TempFileService' +import { CreateTimestampTokenError } from './error/create-timestamp-token.error' +import type { TimestampConfig } from './types/timestamp-config.type' +import type { TimestampProvider } from './types/timestamp-provider.type' +import type { CreatedTimestampToken, Timestamp } from './types/timestamp-token.type' /** * OpenSSL docs: https://www.openssl.org/docs/manmaster/man1/ts.html @@ -24,48 +25,27 @@ import { CertService } from '@techteamer/cert-utils' * * Trustedtimestamp service implements the generate, import and verification of timestamps * - * @class TrustedTimestampService * */ export class TrustedTimestampService { - /** - * @typedef {object} provider - * @property {string} name provider name - * @property {string | urlObject} url provider url - * @property {object} [auth] optional auth setting - * @property {number} [priority] optional provider priority - * - * @typedef {object} urlObject - * @property {string} getTokenUrl - * @property {string} getTimestampUrl - * - * @typedef {object} auth - * @property {string} user username - * @property {string} pass password - * - * @typedef {object} config - * @property {string} [certsLocation="/etc/ssl/certs/"] - * @property {provider[]} [providers=[{provider}, {provider}, ...]] - * @constructor - * @param {string} timestampInfoType (normal, short) - * @param {config} config - * @param {string} encoding - */ - constructor(timestampInfoType = 'normal', config, encoding = 'latin1') { - this.timestampInfoType = timestampInfoType - this.config = config - this.encoding = encoding + private readonly tmpOptions: TempFileOptions = { prefix: 'request-', postfix: '.tsr' } + private tempFileService!: TempFileService + private certService!: CertService + private providers!: TimestampProvider[] + private certsLocation!: string + private timestampRequest!: TrustedTimestampRequest + + constructor( + private readonly timestampInfoType: 'normal' | 'short' = 'normal', + private readonly config: TimestampConfig = {} as TimestampConfig, + private readonly encoding = 'latin1' + ) { this._init() } /** * init method that sets the config and instantiates the required services - * - * @return void - * @private * */ - _init() { - this.tmpOptions = { prefix: 'request-', postfix: '.tsr' } - + private _init(): void { if (this.config) { if (!this.config?.certsLocation) { throw new Error('trustedTimestamp config "certsLocation" missing!') @@ -85,13 +65,9 @@ export class TrustedTimestampService { /** * Utility method that resolves to a TimestampInfo object containing parsed info from the tsr - * - * @param tsr timestamp response - * @param [isToken=false] true if the input is a timestamp token (not a whole timestamp response) - * @return {Promise} * */ - async getTimestampInfo(tsr, isToken = false) { - const cleanupTempFns = [] + async getTimestampInfo(tsr: Buffer, isToken = false): Promise { + const cleanupTempFns: (() => unknown)[] = [] let inputTempPath = '' try { @@ -111,7 +87,7 @@ export class TrustedTimestampService { tstPath = inputTempPath } else { const tmp = await this.tempFileService.createTempFile(this.tmpOptions) - await generateTsReply(inputTempPath, tmp) + await generateTsReply(inputTempPath, tmp.tempPath) tstPath = tmp.tempPath cleanupTempFns.push(tmp.cleanupCallback) } @@ -125,12 +101,12 @@ export class TrustedTimestampService { timestampInfo.setCertInfo(certInfo) } } catch (err) { - throw new Error('Unable to get cert info from timestamp token', err) + throw new Error('Unable to get cert info from timestamp token', err as Error) } return timestampInfo } catch (err) { - return new TimestampInfo(this.timestampInfoType, null, err.message) + return new TimestampInfo(this.timestampInfoType, null!, (err as Error).message) } finally { for (const cleanUpFn of cleanupTempFns) { if (typeof cleanUpFn === 'function') { @@ -145,13 +121,8 @@ export class TrustedTimestampService { * It requests a token from the TSA and verifies the received response. * The returned timestamp token represents the token * and contains the tsr with the verification result. - * - * @param {String} digest - * @param {String} hashAlgorithm a valid option that openssl accepts (e.g: 'sha256', 'sha512') - * @param {Number} dataSize the size of the data the digest is generated from - * @return {CreatedTimestampToken} * */ - async createTimestampToken(digest, hashAlgorithm, dataSize) { + async createTimestampToken(digest: string, hashAlgorithm: string, dataSize: number): Promise { const digestFormat = normalizeDigestFormat(hashAlgorithm) try { @@ -172,7 +143,7 @@ export class TrustedTimestampService { } const timestampInfo = await this.getTimestampInfo(tsr, false) const certExpiry = timestampInfo.certInfo?.notAfter || null - const tt = { + const tt: Timestamp = { digest, hashAlgorithm, dataSize, @@ -190,19 +161,14 @@ export class TrustedTimestampService { throw error } - throw new CreateTimestampTokenError(`Failed to create trusted timestamp ${error.message}`) + throw new CreateTimestampTokenError(`Failed to create trusted timestamp ${(error as Error).message}`) } } /** * Verify if a timestamp token corresponds to a particular hash of data - * - * @param timestampToken - * @param {String} digest - * @param {Number} dataSize - * @return {Promise} * */ - async verifyToken(timestampToken, digest, dataSize) { + async verifyToken(timestampToken: Timestamp, digest: string, dataSize: number): Promise { if (timestampToken.dataSize !== dataSize) { throw new Error( `Timestamp token verification failed: The provided data size (${dataSize}) does not match the time stamped size (${timestampToken.dataSize}).` @@ -221,13 +187,8 @@ export class TrustedTimestampService { /** * Verify a hash digest against a timestamp response file - * - * @param {String} digest the hash of some data to verify against the response - * @param {Buffer} tsr a timestamp response - * @param {Boolean} [isToken=false] indicates that whether the input is a timestamp token or response - * @return {Promise} * */ - async verifyTsr(digest, tsr, isToken = false) { + async verifyTsr(digest: string, tsr: Buffer, isToken = false): Promise { let cleanupTempFile = null try { @@ -253,16 +214,14 @@ export class TrustedTimestampService { cleanupTempFile() } - throw new Error(`Failed to verify tsr ${err.message}`) + throw new Error(`Failed to verify tsr ${(err as Error).message}`) } } /** * testService method that check the ssl installation - * - * @return {Promise} * */ - async testService() { + async testService(): Promise { return await checkSslPath() } } diff --git a/src/trustedTimestamp/error/create-timestamp-token.error.ts b/src/trustedTimestamp/error/create-timestamp-token.error.ts index 52c50d6..13b54f4 100644 --- a/src/trustedTimestamp/error/create-timestamp-token.error.ts +++ b/src/trustedTimestamp/error/create-timestamp-token.error.ts @@ -1,4 +1,4 @@ -import { CreatedTimestampToken } from '../types/timestamp-token.type.js' +import { CreatedTimestampToken } from '../types/timestamp-token.type' export type CreateTimestampTokenErrorContext = Partial> diff --git a/src/trustedTimestamp/types/timestamp-config.type.ts b/src/trustedTimestamp/types/timestamp-config.type.ts new file mode 100644 index 0000000..7e595aa --- /dev/null +++ b/src/trustedTimestamp/types/timestamp-config.type.ts @@ -0,0 +1,6 @@ +import type { TimestampProvider } from './timestamp-provider.type' + +export interface TimestampConfig { + certsLocation: string + providers: TimestampProvider[] +} diff --git a/src/trustedTimestamp/types/timestamp-log.type.ts b/src/trustedTimestamp/types/timestamp-log.type.ts new file mode 100644 index 0000000..5ce999e --- /dev/null +++ b/src/trustedTimestamp/types/timestamp-log.type.ts @@ -0,0 +1,13 @@ +import { TimestampProviderUrl } from './timestamp-provider.type' + +export interface TimestampLog { + info: { + name: string + info?: null + date: Date + url: TimestampProviderUrl + response: string | null + error: string | null + } + errorTrace: Error | null +} diff --git a/src/trustedTimestamp/types/timestamp-provider.type.ts b/src/trustedTimestamp/types/timestamp-provider.type.ts new file mode 100644 index 0000000..dad496b --- /dev/null +++ b/src/trustedTimestamp/types/timestamp-provider.type.ts @@ -0,0 +1,26 @@ +export interface TimestampProviderProxyConfig { + url: string +} + +export interface TimestampProviderOAuthUrl { + getTokenUrl: string + getTimestampUrl: string +} + +export type TimestampProviderUrl = string | TimestampProviderOAuthUrl + +export interface TimestampProviderAuth { + user: string + pass: string +} + +export type TimestampProviderBody = Record + +export interface TimestampProvider { + name: string + url: TimestampProviderUrl + auth?: TimestampProviderAuth + priority?: number + body?: TimestampProviderBody + proxy?: TimestampProviderProxyConfig +} diff --git a/src/trustedTimestamp/types/timestamp-request.type.ts b/src/trustedTimestamp/types/timestamp-request.type.ts new file mode 100644 index 0000000..5aec3fa --- /dev/null +++ b/src/trustedTimestamp/types/timestamp-request.type.ts @@ -0,0 +1,24 @@ +import type { Agent } from 'http' +import type { BodyInit } from 'node-fetch' + +export type TimestampRequestAuthTypes = 'oauth' | 'basic' | 'noAuth' + +export interface TimestampRequestOptions { + method: string + headers: Record + encoding?: string | null + resolveWithFullResponse?: boolean + body?: BodyInit + agent?: AgentType +} + +export interface TimestampRequestError { + message: string + trace: Error | null +} + +export interface TimestampRequestAuthResult { + requestUrl: string | null + tsRequest: TimestampRequestOptions | null + error?: TimestampRequestError | null +} diff --git a/src/trustedTimestamp/types/timestamp-token.type.ts b/src/trustedTimestamp/types/timestamp-token.type.ts index 9e5da48..c27d246 100644 --- a/src/trustedTimestamp/types/timestamp-token.type.ts +++ b/src/trustedTimestamp/types/timestamp-token.type.ts @@ -1,15 +1,17 @@ +import { TimestampLog } from './timestamp-log.type' + export interface Timestamp { digest: string hashAlgorithm: string dataSize: number - tsr: unknown + tsr: Buffer isToken: boolean - certExpiry: string + certExpiry: Date | null verified: boolean | null } export interface CreatedTimestampToken { timestamp: Timestamp providerName: string - logHistory: string[] + logHistory: TimestampLog[] } diff --git a/src/util/TempFileService.js b/src/util/TempFileService.js deleted file mode 100644 index 127386b..0000000 --- a/src/util/TempFileService.js +++ /dev/null @@ -1,32 +0,0 @@ -import fs from 'node:fs/promises' -import util from 'node:util' -import tmp from 'tmp' - -tmp.setGracefulCleanup() - -const tmpFile = util.promisify((options, cb) => { - tmp.file(options, (err, ...results) => cb(err, results)) -}) - -class TempFileService { - /** - * Utility to create a temp file with content - * - * @param {Object} options - * @param {Buffer} content - * @return {Promise<{tempPath, fd, cleanupCallback}>} - * */ - async createTempFile (options = {}, content) { - try { - const [tempPath, fd, cleanupCallback] = await tmpFile(options) - if (content) { - await fs.writeFile(tempPath, content) - } - return { tempPath, fd, cleanupCallback } - } catch (err) { - throw new Error(`Failed to create temp file ${err}`) - } - } -} - -export default TempFileService diff --git a/src/util/TempFileService.ts b/src/util/TempFileService.ts new file mode 100644 index 0000000..1ab82a9 --- /dev/null +++ b/src/util/TempFileService.ts @@ -0,0 +1,34 @@ +import fs from 'node:fs/promises' +import util from 'node:util' +import tmp from 'tmp' + +tmp.setGracefulCleanup() + +const tmpFile = util.promisify( + ( + options: tmp.FileOptions, + cb: (error: Error | null, results: [string, number | undefined, () => void]) => unknown + ) => { + tmp.file(options, (err, ...results) => cb(err, results)) + } +) + +export class TempFileService { + /** + * Utility to create a temp file with content + * */ + async createTempFile( + options: tmp.FileOptions, + content?: Buffer + ): Promise<{ tempPath: string; fd: number | undefined; cleanupCallback: () => void }> { + try { + const [tempPath, fd, cleanupCallback] = await tmpFile(options) + if (content) { + await fs.writeFile(tempPath, content as unknown as string) + } + return { tempPath, fd, cleanupCallback } + } catch (err) { + throw new Error(`Failed to create temp file ${err}`) + } + } +} diff --git a/src/util/child_process_promise.js b/src/util/child_process_promise.js deleted file mode 100644 index eb3b0f4..0000000 --- a/src/util/child_process_promise.js +++ /dev/null @@ -1,44 +0,0 @@ -import * as childProcess from 'node:child_process' - -export function exec (command, options = {}, logger) { - return new Promise((resolve, reject) => { - const process = childProcess.exec(command, options, (err, stdout, stderr) => { - if (err) { - return reject(err || new Error(stderr.toString('utf8') || `Failed to execute command: ${command}`)) - } - - return resolve(stdout) - }) - - if (logger) { - process.stdout.on('data', (message) => { - message = message.trim() - if (message) { - logger.info(message) - } - }) - - process.stderr.on('data', (message) => { - message = message.trim() - if (message) { - logger.error(message) - } - }) - } - }) -} - -export function execFile (command, args, options = {}) { - return new Promise((resolve, reject) => { - childProcess.execFile(command, args, options, (err, stdout, stderr) => { - if (err) { - const error = new Error(err ? err.message : stderr.toString('utf8') || `Failed to execute file: ${command}`) - error.stdout = stdout - error.stderr = stderr - return reject(error) - } - - resolve({ stdout, stderr }) - }) - }) -} diff --git a/src/util/child_process_promise.ts b/src/util/child_process_promise.ts new file mode 100644 index 0000000..57dacec --- /dev/null +++ b/src/util/child_process_promise.ts @@ -0,0 +1,61 @@ +import * as childProcess from 'node:child_process' +import type { ExecOptions } from 'node:child_process' + +interface Logger { + info: (log: string, ...args: unknown[]) => unknown + error: (log: string, ...args: unknown[]) => unknown +} + +export function exec( + command: string, + options: { + encoding?: 'buffer' + } & ExecOptions = {}, + logger?: Logger +): Promise { + return new Promise((resolve, reject) => { + const process = childProcess.exec(command, options, (err, stdout, stderr) => { + if (err) { + return reject(err || new Error(stderr.toString() || `Failed to execute command: ${command}`)) + } + + return resolve(stdout as ReturnType) + }) + + if (logger) { + process.stdout!.on('data', message => { + message = message.trim() + if (message) { + logger.info(message) + } + }) + + process.stderr!.on('data', message => { + message = message.trim() + if (message) { + logger.error(message) + } + }) + } + }) +} + +export class ExecFileError extends Error { + public stdout?: string + public stderr?: string +} + +export function execFile(command: string, args: string[], options = {}): Promise<{ stdout: string; stderr: string }> { + return new Promise((resolve, reject) => { + childProcess.execFile(command, args, options, (err, stdout, stderr) => { + if (err) { + const error = new ExecFileError(err ? err.message : stderr.toString() || `Failed to execute file: ${command}`) + error.stdout = stdout + error.stderr = stderr + return reject(error) + } + + resolve({ stdout, stderr }) + }) + }) +} diff --git a/src/util/regexParser.js b/src/util/regexParser.js deleted file mode 100644 index c2f4776..0000000 --- a/src/util/regexParser.js +++ /dev/null @@ -1,40 +0,0 @@ -/** - * @param text {string} - * @param regex {RegExp} - * @param groups {number | number[]} - * @param revive {(value: any) => any} - * @returns {any|null} - */ -function parseRegex (text, regex, groups, revive) { - const result = text.match(regex) - if (!result) { - return null - } - - revive = revive || (value => value) - - if (!groups) { - return revive(result) - } - - if (typeof groups === 'number') { - return revive(result[groups]) - } - - if (Array.isArray(groups)) { - const ret = {} - groups.forEach((name, i) => { - ret[name] = result[i + 1] - }) - return revive(ret) - } -} - -function createParser (regex, groups, revive) { - return (text) => { - return parseRegex(text, regex, groups, revive) - } -} - -export { createParser as create } -export { parseRegex } diff --git a/src/util/regexParser.ts b/src/util/regexParser.ts new file mode 100644 index 0000000..da95baa --- /dev/null +++ b/src/util/regexParser.ts @@ -0,0 +1,46 @@ +function parseRegex( + text: string, + regex: RegExp, + groups: Groups, + revive: ( + parameter: Groups extends number + ? string + : Groups extends (string | number)[] + ? Record + : RegExpMatchArray + ) => ReviveResult = value => value as unknown as ReviveResult +): ReviveResult | null | undefined { + const result = text.match(regex) + if (!result) { + return null + } + + if (!groups) { + return (revive as (parameter: RegExpMatchArray) => ReviveResult)(result) + } + + if (typeof groups === 'number') { + return (revive as (parameter: string) => ReviveResult)(result[groups]) + } + + if (Array.isArray(groups)) { + const ret: Record = {} + groups.forEach((name, i) => { + ret[name] = result[i + 1] + }) + return (revive as (parameter: Record) => ReviveResult)(ret) + } +} + +function createParser( + regex: RegExp, + groups: number | number[], + revive: (value: unknown) => ReviveResult +): (text: string) => ReviveResult | null | undefined { + return (text: string) => { + return parseRegex(text, regex, groups, revive) + } +} + +export { createParser as create } +export { parseRegex } diff --git a/test/tests/feature/timestamp-service.test.ts b/test/tests/feature/timestamp-service.test.ts index 31fbac6..05cad10 100644 --- a/test/tests/feature/timestamp-service.test.ts +++ b/test/tests/feature/timestamp-service.test.ts @@ -1,18 +1,19 @@ import { vi, expect, it, beforeEach, describe } from 'vitest' import nock from 'nock' -import '../mocks/TrustedTimestampCommand.mock.js' -import { TrustedTimestampService } from '../../../src/trustedTimestamp/TrustedTimestampService.js' -import { CreateTimestampTokenError } from '../../../src/trustedTimestamp/error/create-timestamp-token.error.ts' +import '../mocks/TrustedTimestampCommand.mock' +import { TrustedTimestampService } from '../../../src/trustedTimestamp/TrustedTimestampService' +import { CreateTimestampTokenError } from '../../../src/trustedTimestamp/error/create-timestamp-token.error' +import { TimestampConfig } from '../../../src/trustedTimestamp/types/timestamp-config.type' vi.mock('@techteamer/cert-utils', () => ({ CertService: vi.fn().mockImplementation(() => ({ - get CertType () { + get CertType(): { P12: 'P12'; PEM: 'PEM' } { return { P12: 'P12', PEM: 'PEM' } }, - parseCert: () => { /**/ } + parseCert: (): null => null })) })) @@ -81,24 +82,30 @@ describe('TrustedTimestampService.js (feature-test)', () => { }) it('fail test - config missing providers', () => { - expect(() => new TrustedTimestampService('normal', { - certsLocation: '/etc/ssl/certs/' - })).toThrow('trustedTimestamp config "providers" missing or empty!') + expect( + () => + new TrustedTimestampService('normal', { + certsLocation: '/etc/ssl/certs/' + } as TimestampConfig) + ).toThrow('trustedTimestamp config "providers" missing or empty!') }) it('fail test - config missing certsLocation', () => { - expect(() => new TrustedTimestampService('normal', { - providers: [ - { - name: 'bteszt', - url: 'https://bteszt.e-szigno.hu/tsa', - auth: { - user: 'username', - pass: 'password' - } - } - ] - })).toThrow('trustedTimestamp config "certsLocation" missing!') + expect( + () => + new TrustedTimestampService('normal', { + providers: [ + { + name: 'bteszt', + url: 'https://bteszt.e-szigno.hu/tsa', + auth: { + user: 'username', + pass: 'password' + } + } + ] + } as TimestampConfig) + ).toThrow('trustedTimestamp config "certsLocation" missing!') }) }) @@ -123,12 +130,14 @@ describe('TrustedTimestampService.js (feature-test)', () => { const hashAlgorithm = 'sha256' const dataSize = 210893 - const scope = nock('https://bteszt.e-szigno.hu') - .post('/tsa') - .reply(200, { }) + const scope = nock('https://bteszt.e-szigno.hu').post('/tsa').reply(200, {}) scope.persist(false) - const { timestamp, providerName } = await trustedTimestampServiceInstance.createTimestampToken(digest, hashAlgorithm, dataSize) + const { timestamp, providerName } = await trustedTimestampServiceInstance.createTimestampToken( + digest, + hashAlgorithm, + dataSize + ) expect(providerName).not.toBe(null) expect(timestamp).not.toBe(null) expect(timestamp.verified).toBe(true) @@ -170,7 +179,11 @@ describe('TrustedTimestampService.js (feature-test)', () => { .reply(200, { access_token: 'f1d44c9a9f3c6f12536f46e8f06cbe3001954e9e684ccabb99dd36ca296f7bd0' }) scope2.persist(false) - const { timestamp, providerName } = await trustedTimestampServiceInstance.createTimestampToken(digest, hashAlgorithm, dataSize) + const { timestamp, providerName } = await trustedTimestampServiceInstance.createTimestampToken( + digest, + hashAlgorithm, + dataSize + ) expect(providerName).not.toBe(null) expect(timestamp).not.toBe(null) expect(timestamp.verified).toBe(true) @@ -215,12 +228,14 @@ describe('TrustedTimestampService.js (feature-test)', () => { .reply(200, { access_token: 'f1d44c9a9f3c6d12536f46e8f06bbe3001954e9e684ccabb99dd36ca296f7bd0' }) scope.persist(false) - const scope2 = nock('http://localhost') - .post('/timestamp') - .reply(200, { }) + const scope2 = nock('http://localhost').post('/timestamp').reply(200, {}) scope2.persist(false) - const { timestamp, providerName } = await trustedTimestampServiceInstance.createTimestampToken(digest, hashAlgorithm, dataSize) + const { timestamp, providerName } = await trustedTimestampServiceInstance.createTimestampToken( + digest, + hashAlgorithm, + dataSize + ) expect(providerName).not.toBe(null) expect(timestamp).not.toBe(null) expect(timestamp.verified).toBe(true) @@ -283,19 +298,19 @@ describe('TrustedTimestampService.js (feature-test)', () => { ] }) - const tsr = Buffer.from(JSON.stringify({ - digest: 'f1d44c9a9f3c6f12536f46e8f06cbe3001954e9e684ccabb99dd36ca296f7bd0', - hashAlgorithm: 'sha256', - dataSize: 210893, - tsr: {}, - isToken: false, - certExpiry: null, - verified: null - })) - - const scope = nock('http://127.0.0.1') - .post('/?token=xxxxx') - .reply(200, { }) + const tsr = Buffer.from( + JSON.stringify({ + digest: 'f1d44c9a9f3c6f12536f46e8f06cbe3001954e9e684ccabb99dd36ca296f7bd0', + hashAlgorithm: 'sha256', + dataSize: 210893, + tsr: {}, + isToken: false, + certExpiry: null, + verified: null + }) + ) + + const scope = nock('http://127.0.0.1').post('/?token=xxxxx').reply(200, {}) scope.persist(false) const result = await trustedTimestampServiceInstance.getTimestampInfo(tsr, false) @@ -322,7 +337,7 @@ describe('TrustedTimestampService.js (feature-test)', () => { digest: '7c86796d0bba6cda5805fe327200528f65fbab8847d7c847f2fc29dfede24343', hashAlgorithm: 'sha256', dataSize: 458, - tsr: '', + tsr: Buffer.from(''), isToken: false, certExpiry: null, verified: null @@ -330,9 +345,7 @@ describe('TrustedTimestampService.js (feature-test)', () => { const digest = '7c86796d0bba6cda5805fe327200528f65fbab8847d7c847f2fc29dfede24343' const dataSize = 458 - const scope = nock('http://127.0.0.1') - .post('/?token=xxxxx') - .reply(200, { }) + const scope = nock('http://127.0.0.1').post('/?token=xxxxx').reply(200, {}) scope.persist(false) const result = await trustedTimestampServiceInstance.verifyToken(timestampToken, digest, dataSize) @@ -358,9 +371,7 @@ describe('TrustedTimestampService.js (feature-test)', () => { const tsr = Buffer.from('test') const digest = 'f1d44c9a9f3c6f12536f46e8f06cbe3001954e9e684ccabb99dd36ca296f7bd0' const isToken = false - const scope = nock('http://127.0.0.1') - .post('/?token=xxxxx') - .reply(200, { }) + const scope = nock('http://127.0.0.1').post('/?token=xxxxx').reply(200, {}) scope.persist(false) const result = await trustedTimestampServiceInstance.verifyTsr(digest, tsr, isToken) diff --git a/test/tests/mocks/TrustedTimestampCommand.mock.js b/test/tests/mocks/TrustedTimestampCommand.mock.js deleted file mode 100644 index e207464..0000000 --- a/test/tests/mocks/TrustedTimestampCommand.mock.js +++ /dev/null @@ -1,29 +0,0 @@ -import { vi } from 'vitest' - -const mockResult = 'TST info\n' + - 'Version: 1\n' + - 'Policy OID: 1.3.6.1.4.1.12345.1.1.11\n' + - 'Hash Algorithm: sha256\n' + - ' Message data:\n' + - ' 0000 - eb 0c 81 b5 01 05 7f 2a-23 1d 2e af e0 a2 c3 60`\n' + - ' 0010 - 12 08 67 f6 fd e6 ab 0f-50 cb 8b 90 84 0f f7 c4\n' + - 'Serial number: 0x01234XXX\n' + - 'Time stamp: May 29 07:19:13 2024 GMT\n' + - 'Accuracy: 0x01 seconds, unspecified millis, unspecified micros\n' + - 'Ordering: no\n' + - 'Nonce: unspecified\n' + - 'TSA: DirName:/C=HU/L=Budapest/O=XXXXX ./organizationIdentifier=VATHU-12345678/CN=Test xxxxx TSA xxxxx 01\n' - -vi.mock('../../../src/trustedTimestamp/TrustedTimestampCommand.js', () => ({ - getTsQuery: vi.fn().mockResolvedValue(Buffer.from(mockResult)), - getTsVerify: vi.fn().mockResolvedValue('Verification: ok'), - getTsReply: vi.fn().mockResolvedValue(mockResult), - generateTsReply: vi.fn().mockResolvedValue(mockResult), - extractCertFromToken: vi.fn().mockResolvedValue('-----BEGIN CERTIFICATE-----\n' + - 'XXXXXXXXXXXXXXXXXXXXXXXXXXXX\n' + - 'XXXXXXXXXXXXXXXXXXXXXXXXXXXX\n' + - 'XXXXXXXXXXXXXXXXXXXXXXXXXXXX\n' + - 'XXXXXXXXXXXXXXXXXXXXXXXXXXXX\n' + - '-----END CERTIFICATE-----\n'), - checkSslPath: vi.fn().mockResolvedValue('/usr/bin/openssl') -})) diff --git a/test/tests/mocks/TrustedTimestampCommand.mock.ts b/test/tests/mocks/TrustedTimestampCommand.mock.ts new file mode 100644 index 0000000..a474088 --- /dev/null +++ b/test/tests/mocks/TrustedTimestampCommand.mock.ts @@ -0,0 +1,34 @@ +import { vi } from 'vitest' + +const mockResult = + 'TST info\n' + + 'Version: 1\n' + + 'Policy OID: 1.3.6.1.4.1.12345.1.1.11\n' + + 'Hash Algorithm: sha256\n' + + ' Message data:\n' + + ' 0000 - eb 0c 81 b5 01 05 7f 2a-23 1d 2e af e0 a2 c3 60`\n' + + ' 0010 - 12 08 67 f6 fd e6 ab 0f-50 cb 8b 90 84 0f f7 c4\n' + + 'Serial number: 0x01234XXX\n' + + 'Time stamp: May 29 07:19:13 2024 GMT\n' + + 'Accuracy: 0x01 seconds, unspecified millis, unspecified micros\n' + + 'Ordering: no\n' + + 'Nonce: unspecified\n' + + 'TSA: DirName:/C=HU/L=Budapest/O=XXXXX ./organizationIdentifier=VATHU-12345678/CN=Test xxxxx TSA xxxxx 01\n' + +vi.mock('../../../src/trustedTimestamp/TrustedTimestampCommand.ts', () => ({ + getTsQuery: vi.fn().mockResolvedValue(Buffer.from(mockResult)), + getTsVerify: vi.fn().mockResolvedValue('Verification: ok'), + getTsReply: vi.fn().mockResolvedValue(mockResult), + generateTsReply: vi.fn().mockResolvedValue(mockResult), + extractCertFromToken: vi + .fn() + .mockResolvedValue( + '-----BEGIN CERTIFICATE-----\n' + + 'XXXXXXXXXXXXXXXXXXXXXXXXXXXX\n' + + 'XXXXXXXXXXXXXXXXXXXXXXXXXXXX\n' + + 'XXXXXXXXXXXXXXXXXXXXXXXXXXXX\n' + + 'XXXXXXXXXXXXXXXXXXXXXXXXXXXX\n' + + '-----END CERTIFICATE-----\n' + ), + checkSslPath: vi.fn().mockResolvedValue('/usr/bin/openssl') +})) diff --git a/test/vitest.config.js b/test/vitest.config.ts similarity index 88% rename from test/vitest.config.js rename to test/vitest.config.ts index 69639d9..f980dd1 100644 --- a/test/vitest.config.js +++ b/test/vitest.config.ts @@ -1,4 +1,3 @@ -// eslint-disable-next-line n/no-unpublished-import import { defineConfig } from 'vitest/config' export default defineConfig({ diff --git a/tsconfig.json b/tsconfig.json index 7e9295f..2a38813 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -12,7 +12,7 @@ "lib": ["esnext"], "listEmittedFiles": false, "listFiles": false, - "moduleResolution": "node", + "moduleResolution": "bundler", "noFallthroughCasesInSwitch": true, "pretty": true, "resolveJsonModule": true, diff --git a/yarn.lock b/yarn.lock index 4db16cb..d7010e7 100644 --- a/yarn.lock +++ b/yarn.lock @@ -10,29 +10,30 @@ "@jridgewell/gen-mapping" "^0.3.5" "@jridgewell/trace-mapping" "^0.3.24" -"@babel/helper-string-parser@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/helper-string-parser/-/helper-string-parser-7.24.7.tgz#4d2d0f14820ede3b9807ea5fc36dfc8cd7da07f2" - integrity sha512-7MbVt6xrwFQbunH2DNQsAP5sTGxfqQtErvBIvIMi6EQnbgUOuVYanvREcmFrOPhoXBrTtjhhP+lW+o5UfK+tDg== - -"@babel/helper-validator-identifier@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.24.7.tgz#75b889cfaf9e35c2aaf42cf0d72c8e91719251db" - integrity sha512-rR+PBcQ1SMQDDyF6X0wxtG8QyLCgUB0eRAGguqRLfkCA87l7yAP7ehq8SNj96OOGTO8OBV70KhuFYcIkHXOg0w== - -"@babel/parser@^7.24.4": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.24.7.tgz#9a5226f92f0c5c8ead550b750f5608e766c8ce85" - integrity sha512-9uUYRm6OqQrCqQdG1iCBwBPZgN8ciDBro2nIOFaiRz1/BCxaI7CNvQbDHvsArAC7Tw9Hda/B3U+6ui9u4HWXPw== - -"@babel/types@^7.24.0": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.24.7.tgz#6027fe12bc1aa724cd32ab113fb7f1988f1f66f2" - integrity sha512-XEFXSlxiG5td2EJRe8vOmRbaXVgfcBlszKujvVmWIK/UpywWljQCfzAv3RQCGujWQ1RD4YYWEAqDXfuJiy8f5Q== - dependencies: - "@babel/helper-string-parser" "^7.24.7" - "@babel/helper-validator-identifier" "^7.24.7" - to-fast-properties "^2.0.0" +"@babel/helper-string-parser@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/helper-string-parser/-/helper-string-parser-7.27.1.tgz#54da796097ab19ce67ed9f88b47bb2ec49367687" + integrity sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA== + +"@babel/helper-validator-identifier@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.27.1.tgz#a7054dcc145a967dd4dc8fee845a57c1316c9df8" + integrity sha512-D2hP9eA+Sqx1kBZgzxZh0y1trbuU+JoDkiEwqhQ36nodYqJwyEIhPSdMNd7lOm/4io72luTPWH20Yda0xOuUow== + +"@babel/parser@^7.25.4": + version "7.28.4" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.28.4.tgz#da25d4643532890932cc03f7705fe19637e03fa8" + integrity sha512-yZbBqeM6TkpP9du/I2pUZnJsRMGGvOuIrhjzC1AwHwW+6he4mni6Bp/m8ijn0iOuZuPI2BfkCoSRunpyjnrQKg== + dependencies: + "@babel/types" "^7.28.4" + +"@babel/types@^7.25.4", "@babel/types@^7.28.4": + version "7.28.4" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.28.4.tgz#0a4e618f4c60a7cd6c11cb2d48060e4dbe38ac3a" + integrity sha512-bkFqkLhh3pMBUQQkpVgWDWq/lqzc2678eUyDlTBhRqhCHFguYYGM0Efga7tYk4TogG/3x0EEl66/OQ+WGbWB/Q== + dependencies: + "@babel/helper-string-parser" "^7.27.1" + "@babel/helper-validator-identifier" "^7.27.1" "@bcoe/v8-coverage@^0.2.3": version "0.2.3" @@ -154,17 +155,17 @@ resolved "https://registry.yarnpkg.com/@esbuild/win32-x64/-/win32-x64-0.21.5.tgz#acad351d582d157bb145535db2a6ff53dd514b5c" integrity sha512-tQd/1efJuzPC6rCFwEvLtci/xNFcTZknmXs98FYDfGE4wP9ClFV98nyKrzJKVPMhdDnjzLhdUyMX4PsQAPjwIw== -"@eslint-community/eslint-utils@^4.1.2", "@eslint-community/eslint-utils@^4.2.0", "@eslint-community/eslint-utils@^4.4.0": - version "4.4.0" - resolved "https://registry.yarnpkg.com/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz#a23514e8fb9af1269d5f7788aa556798d61c6b59" - integrity sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA== +"@eslint-community/eslint-utils@^4.2.0", "@eslint-community/eslint-utils@^4.4.0": + version "4.9.0" + resolved "https://registry.yarnpkg.com/@eslint-community/eslint-utils/-/eslint-utils-4.9.0.tgz#7308df158e064f0dd8b8fdb58aa14fa2a7f913b3" + integrity sha512-ayVFHdtZ+hsq1t2Dy24wCmGXGe4q9Gu3smhLYALJrr473ZH27MsnSL+LKUlimp4BWJqMDMLmPpx/Q9R3OAlL4g== dependencies: - eslint-visitor-keys "^3.3.0" + eslint-visitor-keys "^3.4.3" -"@eslint-community/regexpp@^4.10.0", "@eslint-community/regexpp@^4.11.0", "@eslint-community/regexpp@^4.6.1": - version "4.11.0" - resolved "https://registry.yarnpkg.com/@eslint-community/regexpp/-/regexpp-4.11.0.tgz#b0ffd0312b4a3fd2d6f77237e7248a5ad3a680ae" - integrity sha512-G/M/tIiMrTAxEWRfLfQJMmGNX28IxBg4PBz8XqQhqUHLFI6TL2htpIB1iQCj144V5ee/JaKyT9/WZ0MGZWfA7A== +"@eslint-community/regexpp@^4.10.0", "@eslint-community/regexpp@^4.6.1": + version "4.12.1" + resolved "https://registry.yarnpkg.com/@eslint-community/regexpp/-/regexpp-4.12.1.tgz#cfc6cffe39df390a3841cde2abccf92eaa7ae0e0" + integrity sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ== "@eslint/eslintrc@^2.1.4": version "2.1.4" @@ -181,17 +182,17 @@ minimatch "^3.1.2" strip-json-comments "^3.1.1" -"@eslint/js@8.57.0": - version "8.57.0" - resolved "https://registry.yarnpkg.com/@eslint/js/-/js-8.57.0.tgz#a5417ae8427873f1dd08b70b3574b453e67b5f7f" - integrity sha512-Ys+3g2TaW7gADOJzPt83SJtCDhMjndcDMFVQ/Tj9iA1BfJzFKD9mAUXT3OenpuPHbI6P/myECxRJrofUsDx/5g== +"@eslint/js@8.57.1": + version "8.57.1" + resolved "https://registry.yarnpkg.com/@eslint/js/-/js-8.57.1.tgz#de633db3ec2ef6a3c89e2f19038063e8a122e2c2" + integrity sha512-d9zaMRSTIKDLhctzH12MtXvJKSSUhaHcjV+2Z+GK+EEY7XKpP5yR4x+N3TAcHTcu963nIr+TMcCb4DBCYX1z6Q== -"@humanwhocodes/config-array@^0.11.14": - version "0.11.14" - resolved "https://registry.yarnpkg.com/@humanwhocodes/config-array/-/config-array-0.11.14.tgz#d78e481a039f7566ecc9660b4ea7fe6b1fec442b" - integrity sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg== +"@humanwhocodes/config-array@^0.13.0": + version "0.13.0" + resolved "https://registry.yarnpkg.com/@humanwhocodes/config-array/-/config-array-0.13.0.tgz#fb907624df3256d04b9aa2df50d7aa97ec648748" + integrity sha512-DZLEEqFWQFiyK6h5YIeynKx7JlvCYWL0cImfSRXZ9l4Sg2efkFGTuFf6vzXjK1cq6IYkU+Eg/JizXw+TD2vRNw== dependencies: - "@humanwhocodes/object-schema" "^2.0.2" + "@humanwhocodes/object-schema" "^2.0.3" debug "^4.3.1" minimatch "^3.0.5" @@ -200,7 +201,7 @@ resolved "https://registry.yarnpkg.com/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz#af5b2691a22b44be847b0ca81641c5fb6ad0172c" integrity sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA== -"@humanwhocodes/object-schema@^2.0.2": +"@humanwhocodes/object-schema@^2.0.3": version "2.0.3" resolved "https://registry.yarnpkg.com/@humanwhocodes/object-schema/-/object-schema-2.0.3.tgz#4a2868d75d6d6963e423bcf90b7fd1be343409d3" integrity sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA== @@ -223,12 +224,11 @@ integrity sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA== "@jridgewell/gen-mapping@^0.3.5": - version "0.3.5" - resolved "https://registry.yarnpkg.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz#dcce6aff74bdf6dad1a95802b69b04a2fcb1fb36" - integrity sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg== + version "0.3.13" + resolved "https://registry.yarnpkg.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.13.tgz#6342a19f44347518c93e43b1ac69deb3c4656a1f" + integrity sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA== dependencies: - "@jridgewell/set-array" "^1.2.1" - "@jridgewell/sourcemap-codec" "^1.4.10" + "@jridgewell/sourcemap-codec" "^1.5.0" "@jridgewell/trace-mapping" "^0.3.24" "@jridgewell/resolve-uri@^3.1.0": @@ -236,20 +236,15 @@ resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz#7a0ee601f60f99a20c7c7c5ff0c80388c1189bd6" integrity sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw== -"@jridgewell/set-array@^1.2.1": - version "1.2.1" - resolved "https://registry.yarnpkg.com/@jridgewell/set-array/-/set-array-1.2.1.tgz#558fb6472ed16a4c850b889530e6b36438c49280" - integrity sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A== - -"@jridgewell/sourcemap-codec@^1.4.10", "@jridgewell/sourcemap-codec@^1.4.14", "@jridgewell/sourcemap-codec@^1.4.15": - version "1.5.0" - resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz#3188bcb273a414b0d215fd22a58540b989b9409a" - integrity sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ== +"@jridgewell/sourcemap-codec@^1.4.14", "@jridgewell/sourcemap-codec@^1.5.0", "@jridgewell/sourcemap-codec@^1.5.5": + version "1.5.5" + resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz#6912b00d2c631c0d15ce1a7ab57cd657f2a8f8ba" + integrity sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og== "@jridgewell/trace-mapping@^0.3.23", "@jridgewell/trace-mapping@^0.3.24": - version "0.3.25" - resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz#15f190e98895f3fc23276ee14bc76b675c2e50f0" - integrity sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ== + version "0.3.31" + resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.31.tgz#db15d6781c931f3a251a3dac39501c98a6082fd0" + integrity sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw== dependencies: "@jridgewell/resolve-uri" "^3.1.0" "@jridgewell/sourcemap-codec" "^1.4.14" @@ -288,15 +283,6 @@ "@rollup/pluginutils" "^5.1.0" resolve "^1.22.1" -"@rollup/pluginutils@^5.0.5": - version "5.1.0" - resolved "https://registry.yarnpkg.com/@rollup/pluginutils/-/pluginutils-5.1.0.tgz#7e53eddc8c7f483a4ad0b94afb1f7f5fd3c771e0" - integrity sha512-XTIWOPPcpvyKI6L1NHo0lFlCyznUEyPmPY1mc3KpPVDYulHSTvyeLNVW00QTLIAFNhR3kYnJTQHeGqU4M3n09g== - dependencies: - "@types/estree" "^1.0.0" - estree-walker "^2.0.2" - picomatch "^2.3.1" - "@rollup/pluginutils@^5.1.0": version "5.3.0" resolved "https://registry.yarnpkg.com/@rollup/pluginutils/-/pluginutils-5.3.0.tgz#57ba1b0cbda8e7a3c597a4853c807b156e21a7b4" @@ -306,85 +292,110 @@ estree-walker "^2.0.2" picomatch "^4.0.2" -"@rollup/rollup-android-arm-eabi@4.18.1": - version "4.18.1" - resolved "https://registry.yarnpkg.com/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.18.1.tgz#f0da481244b7d9ea15296b35f7fe39cd81157396" - integrity sha512-lncuC4aHicncmbORnx+dUaAgzee9cm/PbIqgWz1PpXuwc+sa1Ct83tnqUDy/GFKleLiN7ZIeytM6KJ4cAn1SxA== - -"@rollup/rollup-android-arm64@4.18.1": - version "4.18.1" - resolved "https://registry.yarnpkg.com/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.18.1.tgz#82ab3c575f4235fb647abea5e08eec6cf325964e" - integrity sha512-F/tkdw0WSs4ojqz5Ovrw5r9odqzFjb5LIgHdHZG65dFI1lWTWRVy32KDJLKRISHgJvqUeUhdIvy43fX41znyDg== - -"@rollup/rollup-darwin-arm64@4.18.1": - version "4.18.1" - resolved "https://registry.yarnpkg.com/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.18.1.tgz#6a530452e68a9152809ce58de1f89597632a085b" - integrity sha512-vk+ma8iC1ebje/ahpxpnrfVQJibTMyHdWpOGZ3JpQ7Mgn/3QNHmPq7YwjZbIE7km73dH5M1e6MRRsnEBW7v5CQ== - -"@rollup/rollup-darwin-x64@4.18.1": - version "4.18.1" - resolved "https://registry.yarnpkg.com/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.18.1.tgz#47727479f5ca292cf434d7e75af2725b724ecbc7" - integrity sha512-IgpzXKauRe1Tafcej9STjSSuG0Ghu/xGYH+qG6JwsAUxXrnkvNHcq/NL6nz1+jzvWAnQkuAJ4uIwGB48K9OCGA== - -"@rollup/rollup-linux-arm-gnueabihf@4.18.1": - version "4.18.1" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.18.1.tgz#46193c498aa7902a8db89ac00128060320e84fef" - integrity sha512-P9bSiAUnSSM7EmyRK+e5wgpqai86QOSv8BwvkGjLwYuOpaeomiZWifEos517CwbG+aZl1T4clSE1YqqH2JRs+g== - -"@rollup/rollup-linux-arm-musleabihf@4.18.1": - version "4.18.1" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.18.1.tgz#22d831fe239643c1d05c98906420325cee439d85" - integrity sha512-5RnjpACoxtS+aWOI1dURKno11d7krfpGDEn19jI8BuWmSBbUC4ytIADfROM1FZrFhQPSoP+KEa3NlEScznBTyQ== - -"@rollup/rollup-linux-arm64-gnu@4.18.1": - version "4.18.1" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.18.1.tgz#19abd33695ec9d588b4a858d122631433084e4a3" - integrity sha512-8mwmGD668m8WaGbthrEYZ9CBmPug2QPGWxhJxh/vCgBjro5o96gL04WLlg5BA233OCWLqERy4YUzX3bJGXaJgQ== - -"@rollup/rollup-linux-arm64-musl@4.18.1": - version "4.18.1" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.18.1.tgz#d60af8c0b9be424424ff96a0ba19fce65d26f6ab" - integrity sha512-dJX9u4r4bqInMGOAQoGYdwDP8lQiisWb9et+T84l2WXk41yEej8v2iGKodmdKimT8cTAYt0jFb+UEBxnPkbXEQ== - -"@rollup/rollup-linux-powerpc64le-gnu@4.18.1": - version "4.18.1" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.18.1.tgz#b1194e5ed6d138fdde0842d126fccde74a90f457" - integrity sha512-V72cXdTl4EI0x6FNmho4D502sy7ed+LuVW6Ym8aI6DRQ9hQZdp5sj0a2usYOlqvFBNKQnLQGwmYnujo2HvjCxQ== - -"@rollup/rollup-linux-riscv64-gnu@4.18.1": - version "4.18.1" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.18.1.tgz#f5a635c017b9bff8b856b0221fbd5c0e3373b7ec" - integrity sha512-f+pJih7sxoKmbjghrM2RkWo2WHUW8UbfxIQiWo5yeCaCM0TveMEuAzKJte4QskBp1TIinpnRcxkquY+4WuY/tg== - -"@rollup/rollup-linux-s390x-gnu@4.18.1": - version "4.18.1" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.18.1.tgz#f1043d9f4026bf6995863cb3f8dd4732606e4baa" - integrity sha512-qb1hMMT3Fr/Qz1OKovCuUM11MUNLUuHeBC2DPPAWUYYUAOFWaxInaTwTQmc7Fl5La7DShTEpmYwgdt2hG+4TEg== - -"@rollup/rollup-linux-x64-gnu@4.18.1": - version "4.18.1" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.18.1.tgz#1e781730be445119f06c9df5f185e193bc82c610" - integrity sha512-7O5u/p6oKUFYjRbZkL2FLbwsyoJAjyeXHCU3O4ndvzg2OFO2GinFPSJFGbiwFDaCFc+k7gs9CF243PwdPQFh5g== - -"@rollup/rollup-linux-x64-musl@4.18.1": - version "4.18.1" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.18.1.tgz#08f12e1965d6f27d6898ff932592121cca6abc4b" - integrity sha512-pDLkYITdYrH/9Cv/Vlj8HppDuLMDUBmgsM0+N+xLtFd18aXgM9Nyqupb/Uw+HeidhfYg2lD6CXvz6CjoVOaKjQ== - -"@rollup/rollup-win32-arm64-msvc@4.18.1": - version "4.18.1" - resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.18.1.tgz#4a5dcbbe7af7d41cac92b09798e7c1831da1f599" - integrity sha512-W2ZNI323O/8pJdBGil1oCauuCzmVd9lDmWBBqxYZcOqWD6aWqJtVBQ1dFrF4dYpZPks6F+xCZHfzG5hYlSHZ6g== - -"@rollup/rollup-win32-ia32-msvc@4.18.1": - version "4.18.1" - resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.18.1.tgz#075b0713de627843a73b4cf0e087c56b53e9d780" - integrity sha512-ELfEX1/+eGZYMaCIbK4jqLxO1gyTSOIlZr6pbC4SRYFaSIDVKOnZNMdoZ+ON0mrFDp4+H5MhwNC1H/AhE3zQLg== - -"@rollup/rollup-win32-x64-msvc@4.18.1": - version "4.18.1" - resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.18.1.tgz#0cb240c147c0dfd0e3eaff4cc060a772d39e155c" - integrity sha512-yjk2MAkQmoaPYCSu35RLJ62+dz358nE83VfTePJRp8CG7aMg25mEJYpXFiD+NcevhX8LxD5OP5tktPXnXN7GDw== +"@rollup/rollup-android-arm-eabi@4.50.2": + version "4.50.2" + resolved "https://registry.yarnpkg.com/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.50.2.tgz#52d66eba5198155f265f54aed94d2489c49269f6" + integrity sha512-uLN8NAiFVIRKX9ZQha8wy6UUs06UNSZ32xj6giK/rmMXAgKahwExvK6SsmgU5/brh4w/nSgj8e0k3c1HBQpa0A== + +"@rollup/rollup-android-arm64@4.50.2": + version "4.50.2" + resolved "https://registry.yarnpkg.com/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.50.2.tgz#137e8153fc9ce6757531ce300b8d2262299f758e" + integrity sha512-oEouqQk2/zxxj22PNcGSskya+3kV0ZKH+nQxuCCOGJ4oTXBdNTbv+f/E3c74cNLeMO1S5wVWacSws10TTSB77g== + +"@rollup/rollup-darwin-arm64@4.50.2": + version "4.50.2" + resolved "https://registry.yarnpkg.com/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.50.2.tgz#d4afd904386d37192cf5ef7345fdb0dd1bac0bc3" + integrity sha512-OZuTVTpj3CDSIxmPgGH8en/XtirV5nfljHZ3wrNwvgkT5DQLhIKAeuFSiwtbMto6oVexV0k1F1zqURPKf5rI1Q== + +"@rollup/rollup-darwin-x64@4.50.2": + version "4.50.2" + resolved "https://registry.yarnpkg.com/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.50.2.tgz#6dbe83431fc7cbc09a2b6ed2b9fb7a62dd66ebc2" + integrity sha512-Wa/Wn8RFkIkr1vy1k1PB//VYhLnlnn5eaJkfTQKivirOvzu5uVd2It01ukeQstMursuz7S1bU+8WW+1UPXpa8A== + +"@rollup/rollup-freebsd-arm64@4.50.2": + version "4.50.2" + resolved "https://registry.yarnpkg.com/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.50.2.tgz#d35afb9f66154b557b3387d12450920f8a954b96" + integrity sha512-QkzxvH3kYN9J1w7D1A+yIMdI1pPekD+pWx7G5rXgnIlQ1TVYVC6hLl7SOV9pi5q9uIDF9AuIGkuzcbF7+fAhow== + +"@rollup/rollup-freebsd-x64@4.50.2": + version "4.50.2" + resolved "https://registry.yarnpkg.com/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.50.2.tgz#849303ecdc171a420317ad9166a70af308348f34" + integrity sha512-dkYXB0c2XAS3a3jmyDkX4Jk0m7gWLFzq1C3qUnJJ38AyxIF5G/dyS4N9B30nvFseCfgtCEdbYFhk0ChoCGxPog== + +"@rollup/rollup-linux-arm-gnueabihf@4.50.2": + version "4.50.2" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.50.2.tgz#ab36199ca613376232794b2f3ba10e2b547a447c" + integrity sha512-9VlPY/BN3AgbukfVHAB8zNFWB/lKEuvzRo1NKev0Po8sYFKx0i+AQlCYftgEjcL43F2h9Ui1ZSdVBc4En/sP2w== + +"@rollup/rollup-linux-arm-musleabihf@4.50.2": + version "4.50.2" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.50.2.tgz#f3704bc2eaecd176f558dc47af64197fcac36e8a" + integrity sha512-+GdKWOvsifaYNlIVf07QYan1J5F141+vGm5/Y8b9uCZnG/nxoGqgCmR24mv0koIWWuqvFYnbURRqw1lv7IBINw== + +"@rollup/rollup-linux-arm64-gnu@4.50.2": + version "4.50.2" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.50.2.tgz#dda0b06fd1daedd00b34395a2fb4aaaa2ed6c32b" + integrity sha512-df0Eou14ojtUdLQdPFnymEQteENwSJAdLf5KCDrmZNsy1c3YaCNaJvYsEUHnrg+/DLBH612/R0xd3dD03uz2dg== + +"@rollup/rollup-linux-arm64-musl@4.50.2": + version "4.50.2" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.50.2.tgz#a018de66209051dad0c58e689e080326c3dd15b0" + integrity sha512-iPeouV0UIDtz8j1YFR4OJ/zf7evjauqv7jQ/EFs0ClIyL+by++hiaDAfFipjOgyz6y6xbDvJuiU4HwpVMpRFDQ== + +"@rollup/rollup-linux-loong64-gnu@4.50.2": + version "4.50.2" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-loong64-gnu/-/rollup-linux-loong64-gnu-4.50.2.tgz#6e514f09988615e0c98fa5a34a88a30fec64d969" + integrity sha512-OL6KaNvBopLlj5fTa5D5bau4W82f+1TyTZRr2BdnfsrnQnmdxh4okMxR2DcDkJuh4KeoQZVuvHvzuD/lyLn2Kw== + +"@rollup/rollup-linux-ppc64-gnu@4.50.2": + version "4.50.2" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-ppc64-gnu/-/rollup-linux-ppc64-gnu-4.50.2.tgz#9b2efebc7b4a1951e684a895fdee0fef26319e0d" + integrity sha512-I21VJl1w6z/K5OTRl6aS9DDsqezEZ/yKpbqlvfHbW0CEF5IL8ATBMuUx6/mp683rKTK8thjs/0BaNrZLXetLag== + +"@rollup/rollup-linux-riscv64-gnu@4.50.2": + version "4.50.2" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.50.2.tgz#a7104270e93d75789d1ba857b2c68ddf61f24f68" + integrity sha512-Hq6aQJT/qFFHrYMjS20nV+9SKrXL2lvFBENZoKfoTH2kKDOJqff5OSJr4x72ZaG/uUn+XmBnGhfr4lwMRrmqCQ== + +"@rollup/rollup-linux-riscv64-musl@4.50.2": + version "4.50.2" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.50.2.tgz#42d153f734a7b9fcacd764cc9bee6c207dca4db6" + integrity sha512-82rBSEXRv5qtKyr0xZ/YMF531oj2AIpLZkeNYxmKNN6I2sVE9PGegN99tYDLK2fYHJITL1P2Lgb4ZXnv0PjQvw== + +"@rollup/rollup-linux-s390x-gnu@4.50.2": + version "4.50.2" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.50.2.tgz#826ad73099f6fd57c083dc5329151b25404bc67d" + integrity sha512-4Q3S3Hy7pC6uaRo9gtXUTJ+EKo9AKs3BXKc2jYypEcMQ49gDPFU2P1ariX9SEtBzE5egIX6fSUmbmGazwBVF9w== + +"@rollup/rollup-linux-x64-gnu@4.50.2": + version "4.50.2" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.50.2.tgz#b9ec17bf0ca3f737d0895fca2115756674342142" + integrity sha512-9Jie/At6qk70dNIcopcL4p+1UirusEtznpNtcq/u/C5cC4HBX7qSGsYIcG6bdxj15EYWhHiu02YvmdPzylIZlA== + +"@rollup/rollup-linux-x64-musl@4.50.2": + version "4.50.2" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.50.2.tgz#29fe0adb45a1d99042f373685efbac9cdd5354d9" + integrity sha512-HPNJwxPL3EmhzeAnsWQCM3DcoqOz3/IC6de9rWfGR8ZCuEHETi9km66bH/wG3YH0V3nyzyFEGUZeL5PKyy4xvw== + +"@rollup/rollup-openharmony-arm64@4.50.2": + version "4.50.2" + resolved "https://registry.yarnpkg.com/@rollup/rollup-openharmony-arm64/-/rollup-openharmony-arm64-4.50.2.tgz#29648f11e202736b74413f823b71e339e3068d60" + integrity sha512-nMKvq6FRHSzYfKLHZ+cChowlEkR2lj/V0jYj9JnGUVPL2/mIeFGmVM2mLaFeNa5Jev7W7TovXqXIG2d39y1KYA== + +"@rollup/rollup-win32-arm64-msvc@4.50.2": + version "4.50.2" + resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.50.2.tgz#91e7edec80542fd81ab1c2581a91403ac63458ae" + integrity sha512-eFUvvnTYEKeTyHEijQKz81bLrUQOXKZqECeiWH6tb8eXXbZk+CXSG2aFrig2BQ/pjiVRj36zysjgILkqarS2YA== + +"@rollup/rollup-win32-ia32-msvc@4.50.2": + version "4.50.2" + resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.50.2.tgz#9b7cd9779f1147a3e8d3ddad432ae64dd222c4e9" + integrity sha512-cBaWmXqyfRhH8zmUxK3d3sAhEWLrtMjWBRwdMMHJIXSjvjLKvv49adxiEz+FJ8AP90apSDDBx2Tyd/WylV6ikA== + +"@rollup/rollup-win32-x64-msvc@4.50.2": + version "4.50.2" + resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.50.2.tgz#40ecd1357526fe328c7af704a283ee8533ca7ad6" + integrity sha512-APwKy6YUhvZaEoHyM+9xqmTpviEI+9eL7LoCH+aLcvWYHJ663qG5zx7WzWZY+a9qkg5JtzcMyJ9z0WtQBMDmgA== "@techteamer/cert-utils@^1.1.3": version "1.1.3" @@ -413,79 +424,86 @@ resolved "https://registry.yarnpkg.com/@tootallnate/quickjs-emscripten/-/quickjs-emscripten-0.23.0.tgz#db4ecfd499a9765ab24002c3b696d02e6d32a12c" integrity sha512-C5Mc6rdnsaJDjO3UpGW/CQTHtCKaYlScZTly4JIu97Jxo/odCiH0ITnDXSJPTOrEKk/ycSZ0AOgTmkDtkOsvIA== -"@types/estree@1.0.5", "@types/estree@^1.0.0": - version "1.0.5" - resolved "https://registry.yarnpkg.com/@types/estree/-/estree-1.0.5.tgz#a6ce3e556e00fd9895dd872dd172ad0d4bd687f4" - integrity sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw== +"@types/estree@1.0.8", "@types/estree@^1.0.0": + version "1.0.8" + resolved "https://registry.yarnpkg.com/@types/estree/-/estree-1.0.8.tgz#958b91c991b1867ced318bedea0e215ee050726e" + integrity sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w== -"@types/json5@^0.0.29": - version "0.0.29" - resolved "https://registry.yarnpkg.com/@types/json5/-/json5-0.0.29.tgz#ee28707ae94e11d2b827bcbe5270bcea7f3e71ee" - integrity sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ== +"@types/node-fetch@^3": + version "3.0.3" + resolved "https://registry.yarnpkg.com/@types/node-fetch/-/node-fetch-3.0.3.tgz#9d969c9a748e841554a40ee435d26e53fa3ee899" + integrity sha512-HhggYPH5N+AQe/OmN6fmhKmRRt2XuNJow+R3pQwJxOOF9GuwM7O2mheyGeIrs5MOIeNjDEdgdoyHBOrFeJBR3g== + dependencies: + node-fetch "*" "@types/node@^20.14.6": - version "20.14.10" - resolved "https://registry.yarnpkg.com/@types/node/-/node-20.14.10.tgz#a1a218290f1b6428682e3af044785e5874db469a" - integrity sha512-MdiXf+nDuMvY0gJKxyfZ7/6UFsETO7mGKF54MVD/ekJS6HdFtpZFBgrh6Pseu64XTb2MLyFPlbW6hj8HYRQNOQ== + version "20.19.17" + resolved "https://registry.yarnpkg.com/@types/node/-/node-20.19.17.tgz#41b52697373aef8a43b3b92f33b43f329b2d674b" + integrity sha512-gfehUI8N1z92kygssiuWvLiwcbOB3IRktR6hTDgJlXMYh5OvkPSRmgfoBUmfZt+vhwJtX7v1Yw4KvvAf7c5QKQ== dependencies: - undici-types "~5.26.4" + undici-types "~6.21.0" + +"@types/tmp@^0.2.6": + version "0.2.6" + resolved "https://registry.yarnpkg.com/@types/tmp/-/tmp-0.2.6.tgz#d785ee90c52d7cc020e249c948c36f7b32d1e217" + integrity sha512-chhaNf2oKHlRkDGt+tiKE2Z5aJ6qalm7Z9rlLdBwmOiAAf09YQvvoLXjWK4HWPF1xU/fqvMgfNfpVoBscA/tKA== "@typescript-eslint/eslint-plugin@^7.16.0": - version "7.16.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-7.16.0.tgz#b3563927341eca15124a18c6f94215f779f5c02a" - integrity sha512-py1miT6iQpJcs1BiJjm54AMzeuMPBSPuKPlnT8HlfudbcS5rYeX5jajpLf3mrdRh9dA/Ec2FVUY0ifeVNDIhZw== + version "7.18.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-7.18.0.tgz#b16d3cf3ee76bf572fdf511e79c248bdec619ea3" + integrity sha512-94EQTWZ40mzBc42ATNIBimBEDltSJ9RQHCC8vc/PDbxi4k8dVwUAv4o98dk50M1zB+JGFxp43FP7f8+FP8R6Sw== dependencies: "@eslint-community/regexpp" "^4.10.0" - "@typescript-eslint/scope-manager" "7.16.0" - "@typescript-eslint/type-utils" "7.16.0" - "@typescript-eslint/utils" "7.16.0" - "@typescript-eslint/visitor-keys" "7.16.0" + "@typescript-eslint/scope-manager" "7.18.0" + "@typescript-eslint/type-utils" "7.18.0" + "@typescript-eslint/utils" "7.18.0" + "@typescript-eslint/visitor-keys" "7.18.0" graphemer "^1.4.0" ignore "^5.3.1" natural-compare "^1.4.0" ts-api-utils "^1.3.0" "@typescript-eslint/parser@^7.13.1": - version "7.16.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-7.16.0.tgz#53fae8112f8c912024aea7b499cf7374487af6d8" - integrity sha512-ar9E+k7CU8rWi2e5ErzQiC93KKEFAXA2Kky0scAlPcxYblLt8+XZuHUZwlyfXILyQa95P6lQg+eZgh/dDs3+Vw== - dependencies: - "@typescript-eslint/scope-manager" "7.16.0" - "@typescript-eslint/types" "7.16.0" - "@typescript-eslint/typescript-estree" "7.16.0" - "@typescript-eslint/visitor-keys" "7.16.0" + version "7.18.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-7.18.0.tgz#83928d0f1b7f4afa974098c64b5ce6f9051f96a0" + integrity sha512-4Z+L8I2OqhZV8qA132M4wNL30ypZGYOQVBfMgxDH/K5UX0PNqTu1c6za9ST5r9+tavvHiTWmBnKzpCJ/GlVFtg== + dependencies: + "@typescript-eslint/scope-manager" "7.18.0" + "@typescript-eslint/types" "7.18.0" + "@typescript-eslint/typescript-estree" "7.18.0" + "@typescript-eslint/visitor-keys" "7.18.0" debug "^4.3.4" -"@typescript-eslint/scope-manager@7.16.0": - version "7.16.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-7.16.0.tgz#eb0757af5720c9c53c8010d7a0355ae27e17b7e5" - integrity sha512-8gVv3kW6n01Q6TrI1cmTZ9YMFi3ucDT7i7aI5lEikk2ebk1AEjrwX8MDTdaX5D7fPXMBLvnsaa0IFTAu+jcfOw== +"@typescript-eslint/scope-manager@7.18.0": + version "7.18.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-7.18.0.tgz#c928e7a9fc2c0b3ed92ab3112c614d6bd9951c83" + integrity sha512-jjhdIE/FPF2B7Z1uzc6i3oWKbGcHb87Qw7AWj6jmEqNOfDFbJWtjt/XfwCpvNkpGWlcJaog5vTR+VV8+w9JflA== dependencies: - "@typescript-eslint/types" "7.16.0" - "@typescript-eslint/visitor-keys" "7.16.0" + "@typescript-eslint/types" "7.18.0" + "@typescript-eslint/visitor-keys" "7.18.0" -"@typescript-eslint/type-utils@7.16.0": - version "7.16.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-7.16.0.tgz#ec52b1932b8fb44a15a3e20208e0bd49d0b6bd00" - integrity sha512-j0fuUswUjDHfqV/UdW6mLtOQQseORqfdmoBNDFOqs9rvNVR2e+cmu6zJu/Ku4SDuqiJko6YnhwcL8x45r8Oqxg== +"@typescript-eslint/type-utils@7.18.0": + version "7.18.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-7.18.0.tgz#2165ffaee00b1fbbdd2d40aa85232dab6998f53b" + integrity sha512-XL0FJXuCLaDuX2sYqZUUSOJ2sG5/i1AAze+axqmLnSkNEVMVYLF+cbwlB2w8D1tinFuSikHmFta+P+HOofrLeA== dependencies: - "@typescript-eslint/typescript-estree" "7.16.0" - "@typescript-eslint/utils" "7.16.0" + "@typescript-eslint/typescript-estree" "7.18.0" + "@typescript-eslint/utils" "7.18.0" debug "^4.3.4" ts-api-utils "^1.3.0" -"@typescript-eslint/types@7.16.0": - version "7.16.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-7.16.0.tgz#60a19d7e7a6b1caa2c06fac860829d162a036ed2" - integrity sha512-fecuH15Y+TzlUutvUl9Cc2XJxqdLr7+93SQIbcZfd4XRGGKoxyljK27b+kxKamjRkU7FYC6RrbSCg0ALcZn/xw== +"@typescript-eslint/types@7.18.0": + version "7.18.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-7.18.0.tgz#b90a57ccdea71797ffffa0321e744f379ec838c9" + integrity sha512-iZqi+Ds1y4EDYUtlOOC+aUmxnE9xS/yCigkjA7XpTKV6nCBd3Hp/PRGGmdwnfkV2ThMyYldP1wRpm/id99spTQ== -"@typescript-eslint/typescript-estree@7.16.0": - version "7.16.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-7.16.0.tgz#98ac779d526fab2a781e5619c9250f3e33867c09" - integrity sha512-a5NTvk51ZndFuOLCh5OaJBELYc2O3Zqxfl3Js78VFE1zE46J2AaVuW+rEbVkQznjkmlzWsUI15BG5tQMixzZLw== +"@typescript-eslint/typescript-estree@7.18.0": + version "7.18.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-7.18.0.tgz#b5868d486c51ce8f312309ba79bdb9f331b37931" + integrity sha512-aP1v/BSPnnyhMHts8cf1qQ6Q1IFwwRvAQGRvBFkWlo3/lH29OXA3Pts+c10nxRxIBrDnoMqzhgdwVe5f2D6OzA== dependencies: - "@typescript-eslint/types" "7.16.0" - "@typescript-eslint/visitor-keys" "7.16.0" + "@typescript-eslint/types" "7.18.0" + "@typescript-eslint/visitor-keys" "7.18.0" debug "^4.3.4" globby "^11.1.0" is-glob "^4.0.3" @@ -493,97 +511,104 @@ semver "^7.6.0" ts-api-utils "^1.3.0" -"@typescript-eslint/utils@7.16.0": - version "7.16.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-7.16.0.tgz#b38dc0ce1778e8182e227c98d91d3418449aa17f" - integrity sha512-PqP4kP3hb4r7Jav+NiRCntlVzhxBNWq6ZQ+zQwII1y/G/1gdIPeYDCKr2+dH6049yJQsWZiHU6RlwvIFBXXGNA== +"@typescript-eslint/utils@7.18.0": + version "7.18.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-7.18.0.tgz#bca01cde77f95fc6a8d5b0dbcbfb3d6ca4be451f" + integrity sha512-kK0/rNa2j74XuHVcoCZxdFBMF+aq/vH83CXAOHieC+2Gis4mF8jJXT5eAfyD3K0sAxtPuwxaIOIOvhwzVDt/kw== dependencies: "@eslint-community/eslint-utils" "^4.4.0" - "@typescript-eslint/scope-manager" "7.16.0" - "@typescript-eslint/types" "7.16.0" - "@typescript-eslint/typescript-estree" "7.16.0" + "@typescript-eslint/scope-manager" "7.18.0" + "@typescript-eslint/types" "7.18.0" + "@typescript-eslint/typescript-estree" "7.18.0" -"@typescript-eslint/visitor-keys@7.16.0": - version "7.16.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-7.16.0.tgz#a1d99fa7a3787962d6e0efd436575ef840e23b06" - integrity sha512-rMo01uPy9C7XxG7AFsxa8zLnWXTF8N3PYclekWSrurvhwiw1eW88mrKiAYe6s53AUY57nTRz8dJsuuXdkAhzCg== +"@typescript-eslint/visitor-keys@7.18.0": + version "7.18.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-7.18.0.tgz#0564629b6124d67607378d0f0332a0495b25e7d7" + integrity sha512-cDF0/Gf81QpY3xYyJKDV14Zwdmid5+uuENhjH2EqFaF0ni+yAyq/LzMaIJdhNJXZI7uLzwIlA+V7oWoyn6Curg== dependencies: - "@typescript-eslint/types" "7.16.0" + "@typescript-eslint/types" "7.18.0" eslint-visitor-keys "^3.4.3" "@ungap/structured-clone@^1.2.0": - version "1.2.0" - resolved "https://registry.yarnpkg.com/@ungap/structured-clone/-/structured-clone-1.2.0.tgz#756641adb587851b5ccb3e095daf27ae581c8406" - integrity sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ== + version "1.3.0" + resolved "https://registry.yarnpkg.com/@ungap/structured-clone/-/structured-clone-1.3.0.tgz#d06bbb384ebcf6c505fde1c3d0ed4ddffe0aaff8" + integrity sha512-WmoN8qaIAo7WTYWbAZuG8PYEhn5fkz7dZrqTBZ7dtt//lL2Gwms1IcnQ5yHqjDfX8Ft5j4YzDM23f87zBfDe9g== "@vitest/coverage-v8@^2.0.2": - version "2.0.2" - resolved "https://registry.yarnpkg.com/@vitest/coverage-v8/-/coverage-v8-2.0.2.tgz#dcaf34b4927e272e8babaa557a677e1e6a16196e" - integrity sha512-iA8eb4PMid3bMc++gfQSTvYE1QL//fC8pz+rKsTUDBFjdDiy/gH45hvpqyDu5K7FHhvgG0GNNCJzTMMSFKhoxg== + version "2.1.9" + resolved "https://registry.yarnpkg.com/@vitest/coverage-v8/-/coverage-v8-2.1.9.tgz#060bebfe3705c1023bdc220e17fdea4bd9e2b24d" + integrity sha512-Z2cOr0ksM00MpEfyVE8KXIYPEcBFxdbLSs56L8PO0QQMxt/6bDj45uQfxoc96v05KW3clk7vvgP0qfDit9DmfQ== dependencies: "@ampproject/remapping" "^2.3.0" "@bcoe/v8-coverage" "^0.2.3" - debug "^4.3.5" + debug "^4.3.7" istanbul-lib-coverage "^3.2.2" istanbul-lib-report "^3.0.1" istanbul-lib-source-maps "^5.0.6" istanbul-reports "^3.1.7" - magic-string "^0.30.10" - magicast "^0.3.4" - std-env "^3.7.0" - strip-literal "^2.1.0" + magic-string "^0.30.12" + magicast "^0.3.5" + std-env "^3.8.0" test-exclude "^7.0.1" tinyrainbow "^1.2.0" -"@vitest/expect@2.0.2": - version "2.0.2" - resolved "https://registry.yarnpkg.com/@vitest/expect/-/expect-2.0.2.tgz#2eff61dde5fb2574a0a7a32517419b5de7d78124" - integrity sha512-nKAvxBYqcDugYZ4nJvnm5OR8eDJdgWjk4XM9owQKUjzW70q0icGV2HVnQOyYsp906xJaBDUXw0+9EHw2T8e0mQ== +"@vitest/expect@2.1.9": + version "2.1.9" + resolved "https://registry.yarnpkg.com/@vitest/expect/-/expect-2.1.9.tgz#b566ea20d58ea6578d8dc37040d6c1a47ebe5ff8" + integrity sha512-UJCIkTBenHeKT1TTlKMJWy1laZewsRIzYighyYiJKZreqtdxSos/S1t+ktRMQWu2CKqaarrkeszJx1cgC5tGZw== dependencies: - "@vitest/spy" "2.0.2" - "@vitest/utils" "2.0.2" - chai "^5.1.1" + "@vitest/spy" "2.1.9" + "@vitest/utils" "2.1.9" + chai "^5.1.2" tinyrainbow "^1.2.0" -"@vitest/pretty-format@2.0.2", "@vitest/pretty-format@^2.0.2": - version "2.0.2" - resolved "https://registry.yarnpkg.com/@vitest/pretty-format/-/pretty-format-2.0.2.tgz#c2674fef447ad8469144fdc483e859f9b1664133" - integrity sha512-SBCyOXfGVvddRd9r2PwoVR0fonQjh9BMIcBMlSzbcNwFfGr6ZhOhvBzurjvi2F4ryut2HcqiFhNeDVGwru8tLg== +"@vitest/mocker@2.1.9": + version "2.1.9" + resolved "https://registry.yarnpkg.com/@vitest/mocker/-/mocker-2.1.9.tgz#36243b27351ca8f4d0bbc4ef91594ffd2dc25ef5" + integrity sha512-tVL6uJgoUdi6icpxmdrn5YNo3g3Dxv+IHJBr0GXHaEdTcw3F+cPKnsXFhli6nO+f/6SDKPHEK1UN+k+TQv0Ehg== + dependencies: + "@vitest/spy" "2.1.9" + estree-walker "^3.0.3" + magic-string "^0.30.12" + +"@vitest/pretty-format@2.1.9", "@vitest/pretty-format@^2.1.9": + version "2.1.9" + resolved "https://registry.yarnpkg.com/@vitest/pretty-format/-/pretty-format-2.1.9.tgz#434ff2f7611689f9ce70cd7d567eceb883653fdf" + integrity sha512-KhRIdGV2U9HOUzxfiHmY8IFHTdqtOhIzCpd8WRdJiE7D/HUcZVD0EgQCVjm+Q9gkUXWgBvMmTtZgIG48wq7sOQ== dependencies: tinyrainbow "^1.2.0" -"@vitest/runner@2.0.2": - version "2.0.2" - resolved "https://registry.yarnpkg.com/@vitest/runner/-/runner-2.0.2.tgz#5716c25f762308e4c87485668e4654cd4b832a73" - integrity sha512-OCh437Vi8Wdbif1e0OvQcbfM3sW4s2lpmOjAE7qfLrpzJX2M7J1IQlNvEcb/fu6kaIB9n9n35wS0G2Q3en5kHg== +"@vitest/runner@2.1.9": + version "2.1.9" + resolved "https://registry.yarnpkg.com/@vitest/runner/-/runner-2.1.9.tgz#cc18148d2d797fd1fd5908d1f1851d01459be2f6" + integrity sha512-ZXSSqTFIrzduD63btIfEyOmNcBmQvgOVsPNPe0jYtESiXkhd8u2erDLnMxmGrDCwHCCHE7hxwRDCT3pt0esT4g== dependencies: - "@vitest/utils" "2.0.2" + "@vitest/utils" "2.1.9" pathe "^1.1.2" -"@vitest/snapshot@2.0.2": - version "2.0.2" - resolved "https://registry.yarnpkg.com/@vitest/snapshot/-/snapshot-2.0.2.tgz#91a8b847d82d92d06b9bf70b72bb9f21a4a416a1" - integrity sha512-Yc2ewhhZhx+0f9cSUdfzPRcsM6PhIb+S43wxE7OG0kTxqgqzo8tHkXFuFlndXeDMp09G3sY/X5OAo/RfYydf1g== +"@vitest/snapshot@2.1.9": + version "2.1.9" + resolved "https://registry.yarnpkg.com/@vitest/snapshot/-/snapshot-2.1.9.tgz#24260b93f798afb102e2dcbd7e61c6dfa118df91" + integrity sha512-oBO82rEjsxLNJincVhLhaxxZdEtV0EFHMK5Kmx5sJ6H9L183dHECjiefOAdnqpIgT5eZwT04PoggUnW88vOBNQ== dependencies: - "@vitest/pretty-format" "2.0.2" - magic-string "^0.30.10" + "@vitest/pretty-format" "2.1.9" + magic-string "^0.30.12" pathe "^1.1.2" -"@vitest/spy@2.0.2": - version "2.0.2" - resolved "https://registry.yarnpkg.com/@vitest/spy/-/spy-2.0.2.tgz#505b70978ae5f9db7a923bf8d62e4bfa6d89725f" - integrity sha512-MgwJ4AZtCgqyp2d7WcQVE8aNG5vQ9zu9qMPYQHjsld/QVsrvg78beNrXdO4HYkP0lDahCO3P4F27aagIag+SGQ== +"@vitest/spy@2.1.9": + version "2.1.9" + resolved "https://registry.yarnpkg.com/@vitest/spy/-/spy-2.1.9.tgz#cb28538c5039d09818b8bfa8edb4043c94727c60" + integrity sha512-E1B35FwzXXTs9FHNK6bDszs7mtydNi5MIfUWpceJ8Xbfb1gBMscAnwLbEu+B44ed6W3XjL9/ehLPHR1fkf1KLQ== dependencies: - tinyspy "^3.0.0" + tinyspy "^3.0.2" -"@vitest/utils@2.0.2": - version "2.0.2" - resolved "https://registry.yarnpkg.com/@vitest/utils/-/utils-2.0.2.tgz#a2e829b126b08987e93e1d105323c7f7b99e271d" - integrity sha512-pxCY1v7kmOCWYWjzc0zfjGTA3Wmn8PKnlPvSrsA643P1NHl1fOyXj2Q9SaNlrlFE+ivCsxM80Ov3AR82RmHCWQ== +"@vitest/utils@2.1.9": + version "2.1.9" + resolved "https://registry.yarnpkg.com/@vitest/utils/-/utils-2.1.9.tgz#4f2486de8a54acf7ecbf2c5c24ad7994a680a6c1" + integrity sha512-v0psaMSkNJ3A2NMrUEHFRzJtDPFn+/VWZ5WxImB21T9fjucJRmS7xCS3ppEnARb9y11OAzaD+P2Ps+b+BGX5iQ== dependencies: - "@vitest/pretty-format" "2.0.2" - estree-walker "^3.0.3" - loupe "^3.1.1" + "@vitest/pretty-format" "2.1.9" + loupe "^3.1.2" tinyrainbow "^1.2.0" acorn-jsx@^5.3.2: @@ -592,14 +617,14 @@ acorn-jsx@^5.3.2: integrity sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ== acorn@^8.9.0: - version "8.12.1" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.12.1.tgz#71616bdccbe25e27a54439e0046e89ca76df2248" - integrity sha512-tcpGyI9zbizT9JbV6oYE477V6mTlXvvi0T0G3SNIYE2apm/G5huBa1+K89VGeovbg+jycCrfhl3ADxErOuO6Jg== + version "8.15.0" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.15.0.tgz#a360898bc415edaac46c8241f6383975b930b816" + integrity sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg== agent-base@^7.1.0, agent-base@^7.1.2: - version "7.1.3" - resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-7.1.3.tgz#29435eb821bc4194633a5b89e5bc4703bafc25a1" - integrity sha512-jRR5wdylq8CkOe6hei19GGZnxM6rBGwFl3Bg0YItGDimvjGtAvdZk4Pu6Cl4u4Igsws4a1fd1Vq3ezrhn4KmFw== + version "7.1.4" + resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-7.1.4.tgz#e3cd76d4c548ee895d3c3fd8dc1f6c5b9032e7a8" + integrity sha512-MnA+YT8fwfJPgBx3m60MNqakm30XOkyIoH1y6huTQvC0PwZG7ki8NacLBcrPbNoo8vEZy7Jpuk7+jMO+CUovTQ== ajv@^6.12.4: version "6.12.6" @@ -624,86 +649,20 @@ ansi-styles@^4.0.0, ansi-styles@^4.1.0: color-convert "^2.0.1" ansi-styles@^6.1.0: - version "6.2.1" - resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-6.2.1.tgz#0e62320cf99c21afff3b3012192546aacbfb05c5" - integrity sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug== + version "6.2.3" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-6.2.3.tgz#c044d5dcc521a076413472597a1acb1f103c4041" + integrity sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg== argparse@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/argparse/-/argparse-2.0.1.tgz#246f50f3ca78a3240f6c997e8a9bd1eac49e4b38" integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q== -array-buffer-byte-length@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/array-buffer-byte-length/-/array-buffer-byte-length-1.0.1.tgz#1e5583ec16763540a27ae52eed99ff899223568f" - integrity sha512-ahC5W1xgou+KTXix4sAO8Ki12Q+jf4i0+tmk3sC+zgcynshkHxzpXdImBehiUYKKKDwvfFiJl1tZt6ewscS1Mg== - dependencies: - call-bind "^1.0.5" - is-array-buffer "^3.0.4" - -array-includes@^3.1.7: - version "3.1.8" - resolved "https://registry.yarnpkg.com/array-includes/-/array-includes-3.1.8.tgz#5e370cbe172fdd5dd6530c1d4aadda25281ba97d" - integrity sha512-itaWrbYbqpGXkGhZPGUulwnhVf5Hpy1xiCFsGqyIGglbBxmG5vSjxQen3/WGOjPpNEv1RtBLKxbmVXm8HpJStQ== - dependencies: - call-bind "^1.0.7" - define-properties "^1.2.1" - es-abstract "^1.23.2" - es-object-atoms "^1.0.0" - get-intrinsic "^1.2.4" - is-string "^1.0.7" - array-union@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/array-union/-/array-union-2.1.0.tgz#b798420adbeb1de828d84acd8a2e23d3efe85e8d" integrity sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw== -array.prototype.findlastindex@^1.2.3: - version "1.2.5" - resolved "https://registry.yarnpkg.com/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.5.tgz#8c35a755c72908719453f87145ca011e39334d0d" - integrity sha512-zfETvRFA8o7EiNn++N5f/kaCw221hrpGsDmcpndVupkPzEc1Wuf3VgC0qby1BbHs7f5DVYjgtEU2LLh5bqeGfQ== - dependencies: - call-bind "^1.0.7" - define-properties "^1.2.1" - es-abstract "^1.23.2" - es-errors "^1.3.0" - es-object-atoms "^1.0.0" - es-shim-unscopables "^1.0.2" - -array.prototype.flat@^1.3.2: - version "1.3.2" - resolved "https://registry.yarnpkg.com/array.prototype.flat/-/array.prototype.flat-1.3.2.tgz#1476217df8cff17d72ee8f3ba06738db5b387d18" - integrity sha512-djYB+Zx2vLewY8RWlNCUdHjDXs2XOgm602S9E7P/UpHgfeHL00cRiIF+IN/G/aUJ7kGPb6yO/ErDI5V2s8iycA== - dependencies: - call-bind "^1.0.2" - define-properties "^1.2.0" - es-abstract "^1.22.1" - es-shim-unscopables "^1.0.0" - -array.prototype.flatmap@^1.3.2: - version "1.3.2" - resolved "https://registry.yarnpkg.com/array.prototype.flatmap/-/array.prototype.flatmap-1.3.2.tgz#c9a7c6831db8e719d6ce639190146c24bbd3e527" - integrity sha512-Ewyx0c9PmpcsByhSW4r+9zDU7sGjFc86qf/kKtuSCRdhfbk0SNLLkaT5qvcHnRGgc5NP/ly/y+qkXkqONX54CQ== - dependencies: - call-bind "^1.0.2" - define-properties "^1.2.0" - es-abstract "^1.22.1" - es-shim-unscopables "^1.0.0" - -arraybuffer.prototype.slice@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.3.tgz#097972f4255e41bc3425e37dc3f6421cf9aefde6" - integrity sha512-bMxMKAjg13EBSVscxTaYA4mRc5t1UAXa2kXiGTNfZ079HIWXEkKmkgFrh/nJqamaLSrXO5H4WFFkPEaLJWbs3A== - dependencies: - array-buffer-byte-length "^1.0.1" - call-bind "^1.0.5" - define-properties "^1.2.1" - es-abstract "^1.22.3" - es-errors "^1.2.1" - get-intrinsic "^1.2.3" - is-array-buffer "^3.0.4" - is-shared-array-buffer "^1.0.2" - asn1.js-rfc2560@^5.0.1: version "5.0.1" resolved "https://registry.yarnpkg.com/asn1.js-rfc2560/-/asn1.js-rfc2560-5.0.1.tgz#cff99b903e714756b29503ad49de01c72f131e60" @@ -741,9 +700,9 @@ ast-types@^0.13.4: tslib "^2.0.1" async@^3.2.4: - version "3.2.5" - resolved "https://registry.yarnpkg.com/async/-/async-3.2.5.tgz#ebd52a8fdaf7a2289a24df399f8d8485c8a46b66" - integrity sha512-baNZyqaaLhyLVKm/DlvdW051MSgO6b8eVfIezl9E5PqWxFgzLm/wQntEW4zOytVburDEr0JlALEpdOFwvErLsg== + version "3.2.6" + resolved "https://registry.yarnpkg.com/async/-/async-3.2.6.tgz#1b0728e14929d51b85b449b7f06e27c1145e38ce" + integrity sha512-htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0Ti6C2AA== available-typed-arrays@^1.0.7: version "1.0.7" @@ -763,22 +722,22 @@ basic-ftp@^5.0.2: integrity sha512-4Bcg1P8xhUuqcii/S0Z9wiHIrQVPMermM1any+MX5GeGD7faD3/msQUDGLol9wOcz4/jbg/WJnGqoJF6LiBdtg== bn.js@^4.0.0: - version "4.12.0" - resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-4.12.0.tgz#775b3f278efbb9718eec7361f483fb36fbbfea88" - integrity sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA== + version "4.12.2" + resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-4.12.2.tgz#3d8fed6796c24e177737f7cc5172ee04ef39ec99" + integrity sha512-n4DSx829VRTRByMRGdjQ9iqsN0Bh4OolPsFnaZBLcbi8iXcB+kJ9s7EnRt4wILZNV3kPLHkRVfOc/HvhC3ovDw== brace-expansion@^1.1.7: - version "1.1.11" - resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" - integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== + version "1.1.12" + resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.12.tgz#ab9b454466e5a8cc3a187beaad580412a9c5b843" + integrity sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg== dependencies: balanced-match "^1.0.0" concat-map "0.0.1" brace-expansion@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-2.0.1.tgz#1edc459e0f0c548486ecf9fc99f2221364b9a0ae" - integrity sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA== + version "2.0.2" + resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-2.0.2.tgz#54fc53237a613d854c7bd37463aad17df87214e7" + integrity sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ== dependencies: balanced-match "^1.0.0" @@ -789,43 +748,46 @@ braces@^3.0.3: dependencies: fill-range "^7.1.1" -builtin-modules@^3.3.0: - version "3.3.0" - resolved "https://registry.yarnpkg.com/builtin-modules/-/builtin-modules-3.3.0.tgz#cae62812b89801e9656336e46223e030386be7b6" - integrity sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw== - -builtins@^5.0.1: - version "5.1.0" - resolved "https://registry.yarnpkg.com/builtins/-/builtins-5.1.0.tgz#6d85eeb360c4ebc166c3fdef922a15aa7316a5e8" - integrity sha512-SW9lzGTLvWTP1AY8xeAMZimqDrIaSdLQUcVr9DMef51niJ022Ri87SwRRKYm4A6iHfkPaiVUu/Duw2Wc4J7kKg== - dependencies: - semver "^7.0.0" - cac@^6.7.14: version "6.7.14" resolved "https://registry.yarnpkg.com/cac/-/cac-6.7.14.tgz#804e1e6f506ee363cb0e3ccbb09cad5dd9870959" integrity sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ== -call-bind@^1.0.2, call-bind@^1.0.5, call-bind@^1.0.6, call-bind@^1.0.7: - version "1.0.7" - resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.7.tgz#06016599c40c56498c18769d2730be242b6fa3b9" - integrity sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w== +call-bind-apply-helpers@^1.0.0, call-bind-apply-helpers@^1.0.1, call-bind-apply-helpers@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz#4b5428c222be985d79c3d82657479dbe0b59b2d6" + integrity sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ== dependencies: - es-define-property "^1.0.0" es-errors "^1.3.0" function-bind "^1.1.2" + +call-bind@^1.0.8: + version "1.0.8" + resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.8.tgz#0736a9660f537e3388826f440d5ec45f744eaa4c" + integrity sha512-oKlSFMcMwpUg2ednkhQ454wfWiU/ul3CkJe/PEHcTKuiX6RpbehUiFMXu13HalGZxfUwCQzZG747YXBn1im9ww== + dependencies: + call-bind-apply-helpers "^1.0.0" + es-define-property "^1.0.0" get-intrinsic "^1.2.4" - set-function-length "^1.2.1" + set-function-length "^1.2.2" + +call-bound@^1.0.2, call-bound@^1.0.3, call-bound@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/call-bound/-/call-bound-1.0.4.tgz#238de935d2a2a692928c538c7ccfa91067fd062a" + integrity sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg== + dependencies: + call-bind-apply-helpers "^1.0.2" + get-intrinsic "^1.3.0" callsites@^3.0.0: version "3.1.0" resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73" integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ== -chai@^5.1.1: - version "5.1.1" - resolved "https://registry.yarnpkg.com/chai/-/chai-5.1.1.tgz#f035d9792a22b481ead1c65908d14bb62ec1c82c" - integrity sha512-pT1ZgP8rPNqUgieVaEY+ryQr6Q4HXNg8Ei9UnLUrjN4IA7dvQC5JB+/kxVcPNDHyBcc/26CXPkbNzq3qwrOEKA== +chai@^5.1.2: + version "5.3.3" + resolved "https://registry.yarnpkg.com/chai/-/chai-5.3.3.tgz#dd3da955e270916a4bd3f625f4b919996ada7e06" + integrity sha512-4zNhdJD/iOjSH0A05ea+Ke6MU5mmpQcbQsSOkgdaUMJ9zTlDTD/GYlwohmIE2u0gaxHYiVHEn1Fw9mZ/ktJWgw== dependencies: assertion-error "^2.0.1" check-error "^2.1.1" @@ -863,68 +825,32 @@ concat-map@0.0.1: resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" integrity sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg== -cross-spawn@^7.0.0, cross-spawn@^7.0.2, cross-spawn@^7.0.3: - version "7.0.3" - resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6" - integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w== +cross-spawn@^7.0.2, cross-spawn@^7.0.6: + version "7.0.6" + resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.6.tgz#8a58fe78f00dcd70c370451759dfbfaf03e8ee9f" + integrity sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA== dependencies: path-key "^3.1.0" shebang-command "^2.0.0" which "^2.0.1" +data-uri-to-buffer@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/data-uri-to-buffer/-/data-uri-to-buffer-4.0.1.tgz#d8feb2b2881e6a4f58c2e08acfd0e2834e26222e" + integrity sha512-0R9ikRb668HB7QDxT1vkpuUBtqc53YyAwMwGeUFKRojY/NWKvdZ+9UYtRfGmhqNbRkTSVpMbmyhXipFFv2cb/A== + data-uri-to-buffer@^6.0.2: version "6.0.2" resolved "https://registry.yarnpkg.com/data-uri-to-buffer/-/data-uri-to-buffer-6.0.2.tgz#8a58bb67384b261a38ef18bea1810cb01badd28b" integrity sha512-7hvf7/GW8e86rW0ptuwS3OcBGDjIi6SZva7hCyWC0yYry2cOPmLIjXAUHI6DK2HsnwJd9ifmt57i8eV2n4YNpw== -data-view-buffer@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/data-view-buffer/-/data-view-buffer-1.0.1.tgz#8ea6326efec17a2e42620696e671d7d5a8bc66b2" - integrity sha512-0lht7OugA5x3iJLOWFhWK/5ehONdprk0ISXqVFn/NFrDu+cuc8iADFrGQz5BnRK7LLU3JmkbXSxaqX+/mXYtUA== - dependencies: - call-bind "^1.0.6" - es-errors "^1.3.0" - is-data-view "^1.0.1" - -data-view-byte-length@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/data-view-byte-length/-/data-view-byte-length-1.0.1.tgz#90721ca95ff280677eb793749fce1011347669e2" - integrity sha512-4J7wRJD3ABAzr8wP+OcIcqq2dlUKp4DVflx++hs5h5ZKydWMI6/D/fAot+yh6g2tHh8fLFTvNOaVN357NvSrOQ== - dependencies: - call-bind "^1.0.7" - es-errors "^1.3.0" - is-data-view "^1.0.1" - -data-view-byte-offset@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/data-view-byte-offset/-/data-view-byte-offset-1.0.0.tgz#5e0bbfb4828ed2d1b9b400cd8a7d119bca0ff18a" - integrity sha512-t/Ygsytq+R995EJ5PZlD4Cu56sWa8InXySaViRzw9apusqsOO2bQP+SbYzAhR0pFKoB+43lYy8rWban9JSuXnA== - dependencies: - call-bind "^1.0.6" - es-errors "^1.3.0" - is-data-view "^1.0.1" - -debug@4: - version "4.4.0" - resolved "https://registry.yarnpkg.com/debug/-/debug-4.4.0.tgz#2b3f2aea2ffeb776477460267377dc8710faba8a" - integrity sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA== +debug@4, debug@^4.1.0, debug@^4.1.1, debug@^4.3.1, debug@^4.3.2, debug@^4.3.4, debug@^4.3.7, debug@^4.4.0: + version "4.4.3" + resolved "https://registry.yarnpkg.com/debug/-/debug-4.4.3.tgz#c6ae432d9bd9662582fce08709b038c58e9e3d6a" + integrity sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA== dependencies: ms "^2.1.3" -debug@^3.2.7: - version "3.2.7" - resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.7.tgz#72580b7e9145fb39b6676f9c5e5fb100b934179a" - integrity sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ== - dependencies: - ms "^2.1.1" - -debug@^4.1.0, debug@^4.1.1, debug@^4.3.1, debug@^4.3.2, debug@^4.3.4, debug@^4.3.5: - version "4.3.5" - resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.5.tgz#e83444eceb9fedd4a1da56d671ae2446a01a6e1e" - integrity sha512-pt0bNEmneDIvdL1Xsd9oDQ/wrQRkXDT4AUWlNZNPKvW5x/jyO9VFXkJUP07vQ2upmw5PlaITaPKc31jK13V+jg== - dependencies: - ms "2.1.2" - deep-eql@^5.0.1: version "5.0.2" resolved "https://registry.yarnpkg.com/deep-eql/-/deep-eql-5.0.2.tgz#4b756d8d770a9257300825d52a2c2cff99c3a341" @@ -935,7 +861,7 @@ deep-is@^0.1.3: resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.4.tgz#a6f2dce612fadd2ef1f519b73551f17e85199831" integrity sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ== -define-data-property@^1.0.1, define-data-property@^1.1.4: +define-data-property@^1.1.4: version "1.1.4" resolved "https://registry.yarnpkg.com/define-data-property/-/define-data-property-1.1.4.tgz#894dc141bb7d3060ae4366f6a0107e68fbe48c5e" integrity sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A== @@ -944,15 +870,6 @@ define-data-property@^1.0.1, define-data-property@^1.1.4: es-errors "^1.3.0" gopd "^1.0.1" -define-properties@^1.2.0, define-properties@^1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.2.1.tgz#10781cc616eb951a80a034bafcaa7377f6af2b6c" - integrity sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg== - dependencies: - define-data-property "^1.0.1" - has-property-descriptors "^1.0.0" - object-keys "^1.1.1" - degenerator@^5.0.0: version "5.0.1" resolved "https://registry.yarnpkg.com/degenerator/-/degenerator-5.0.1.tgz#9403bf297c6dad9a1ece409b37db27954f91f2f5" @@ -969,13 +886,6 @@ dir-glob@^3.0.1: dependencies: path-type "^4.0.0" -doctrine@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-2.1.0.tgz#5cd01fc101621b42c4cd7f5d1a66243716d3f39d" - integrity sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw== - dependencies: - esutils "^2.0.2" - doctrine@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-3.0.0.tgz#addebead72a6574db783639dc87a121773973961" @@ -983,6 +893,15 @@ doctrine@^3.0.0: dependencies: esutils "^2.0.2" +dunder-proto@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/dunder-proto/-/dunder-proto-1.0.1.tgz#d7ae667e1dc83482f8b70fd0f6eefc50da30f58a" + integrity sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A== + dependencies: + call-bind-apply-helpers "^1.0.1" + es-errors "^1.3.0" + gopd "^1.2.0" + eastasianwidth@^0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/eastasianwidth/-/eastasianwidth-0.2.0.tgz#696ce2ec0aa0e6ea93a397ffcf24aa7840c827cb" @@ -998,107 +917,28 @@ emoji-regex@^9.2.2: resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-9.2.2.tgz#840c8803b0d8047f4ff0cf963176b32d4ef3ed72" integrity sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg== -es-abstract@^1.22.1, es-abstract@^1.22.3, es-abstract@^1.23.0, es-abstract@^1.23.2: - version "1.23.3" - resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.23.3.tgz#8f0c5a35cd215312573c5a27c87dfd6c881a0aa0" - integrity sha512-e+HfNH61Bj1X9/jLc5v1owaLYuHdeHHSQlkhCBiTK8rBvKaULl/beGMxwrMXjpYrv4pz22BlY570vVePA2ho4A== - dependencies: - array-buffer-byte-length "^1.0.1" - arraybuffer.prototype.slice "^1.0.3" - available-typed-arrays "^1.0.7" - call-bind "^1.0.7" - data-view-buffer "^1.0.1" - data-view-byte-length "^1.0.1" - data-view-byte-offset "^1.0.0" - es-define-property "^1.0.0" - es-errors "^1.3.0" - es-object-atoms "^1.0.0" - es-set-tostringtag "^2.0.3" - es-to-primitive "^1.2.1" - function.prototype.name "^1.1.6" - get-intrinsic "^1.2.4" - get-symbol-description "^1.0.2" - globalthis "^1.0.3" - gopd "^1.0.1" - has-property-descriptors "^1.0.2" - has-proto "^1.0.3" - has-symbols "^1.0.3" - hasown "^2.0.2" - internal-slot "^1.0.7" - is-array-buffer "^3.0.4" - is-callable "^1.2.7" - is-data-view "^1.0.1" - is-negative-zero "^2.0.3" - is-regex "^1.1.4" - is-shared-array-buffer "^1.0.3" - is-string "^1.0.7" - is-typed-array "^1.1.13" - is-weakref "^1.0.2" - object-inspect "^1.13.1" - object-keys "^1.1.1" - object.assign "^4.1.5" - regexp.prototype.flags "^1.5.2" - safe-array-concat "^1.1.2" - safe-regex-test "^1.0.3" - string.prototype.trim "^1.2.9" - string.prototype.trimend "^1.0.8" - string.prototype.trimstart "^1.0.8" - typed-array-buffer "^1.0.2" - typed-array-byte-length "^1.0.1" - typed-array-byte-offset "^1.0.2" - typed-array-length "^1.0.6" - unbox-primitive "^1.0.2" - which-typed-array "^1.1.15" - -es-define-property@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/es-define-property/-/es-define-property-1.0.0.tgz#c7faefbdff8b2696cf5f46921edfb77cc4ba3845" - integrity sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ== - dependencies: - get-intrinsic "^1.2.4" +es-define-property@^1.0.0, es-define-property@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/es-define-property/-/es-define-property-1.0.1.tgz#983eb2f9a6724e9303f61addf011c72e09e0b0fa" + integrity sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g== -es-errors@^1.2.1, es-errors@^1.3.0: +es-errors@^1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/es-errors/-/es-errors-1.3.0.tgz#05f75a25dab98e4fb1dcd5e1472c0546d5057c8f" integrity sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw== -es-module-lexer@^1.3.1: - version "1.5.4" - resolved "https://registry.yarnpkg.com/es-module-lexer/-/es-module-lexer-1.5.4.tgz#a8efec3a3da991e60efa6b633a7cad6ab8d26b78" - integrity sha512-MVNK56NiMrOwitFB7cqDwq0CQutbw+0BvLshJSse0MUNU+y1FC3bUS/AQg7oUng+/wKrrki7JfmwtVHkVfPLlw== +es-module-lexer@^1.5.4, es-module-lexer@^1.6.0: + version "1.7.0" + resolved "https://registry.yarnpkg.com/es-module-lexer/-/es-module-lexer-1.7.0.tgz#9159601561880a85f2734560a9099b2c31e5372a" + integrity sha512-jEQoCwk8hyb2AZziIOLhDqpm5+2ww5uIE6lkO/6jcOCusfk6LhMHpXXfBLXTZ7Ydyt0j4VoUQv6uGNYbdW+kBA== -es-object-atoms@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/es-object-atoms/-/es-object-atoms-1.0.0.tgz#ddb55cd47ac2e240701260bc2a8e31ecb643d941" - integrity sha512-MZ4iQ6JwHOBQjahnjwaC1ZtIBH+2ohjamzAO3oaHcXYup7qxjF2fixyH+Q71voWHeOkI2q/TnJao/KfXYIZWbw== +es-object-atoms@^1.0.0, es-object-atoms@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/es-object-atoms/-/es-object-atoms-1.1.1.tgz#1c4f2c4837327597ce69d2ca190a7fdd172338c1" + integrity sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA== dependencies: es-errors "^1.3.0" -es-set-tostringtag@^2.0.3: - version "2.0.3" - resolved "https://registry.yarnpkg.com/es-set-tostringtag/-/es-set-tostringtag-2.0.3.tgz#8bb60f0a440c2e4281962428438d58545af39777" - integrity sha512-3T8uNMC3OQTHkFUsFq8r/BwAXLHvU/9O9mE0fBc/MY5iq/8H7ncvO947LmYA6ldWw9Uh8Yhf25zu6n7nML5QWQ== - dependencies: - get-intrinsic "^1.2.4" - has-tostringtag "^1.0.2" - hasown "^2.0.1" - -es-shim-unscopables@^1.0.0, es-shim-unscopables@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/es-shim-unscopables/-/es-shim-unscopables-1.0.2.tgz#1f6942e71ecc7835ed1c8a83006d8771a63a3763" - integrity sha512-J3yBRXCzDu4ULnQwxyToo/OjdMx6akgVC7K6few0a7F/0wLtmKKN7I73AH5T2836UuXRqN7Qg+IIUw/+YJksRw== - dependencies: - hasown "^2.0.0" - -es-to-primitive@^1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.2.1.tgz#e55cd4c9cdc188bcefb03b366c736323fc5c898a" - integrity sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA== - dependencies: - is-callable "^1.1.4" - is-date-object "^1.0.1" - is-symbol "^1.0.2" - esbuild@^0.21.3: version "0.21.5" resolved "https://registry.yarnpkg.com/esbuild/-/esbuild-0.21.5.tgz#9ca301b120922959b766360d8ac830da0d02997d" @@ -1144,13 +984,6 @@ escodegen@^2.1.0: optionalDependencies: source-map "~0.6.1" -eslint-compat-utils@^0.5.1: - version "0.5.1" - resolved "https://registry.yarnpkg.com/eslint-compat-utils/-/eslint-compat-utils-0.5.1.tgz#7fc92b776d185a70c4070d03fd26fde3d59652e4" - integrity sha512-3z3vFexKIEnjHE3zCMRo6fn/e44U7T1khUjg+Hp0ZQMCigh28rALD0nPFBcGZuiLC5rLZa2ubQHDRln09JfU2Q== - dependencies: - semver "^7.5.4" - eslint-config-prettier@^10.1.8: version "10.1.8" resolved "https://registry.yarnpkg.com/eslint-config-prettier/-/eslint-config-prettier-10.1.8.tgz#15734ce4af8c2778cc32f0b01b37b0b5cd1ecb97" @@ -1161,76 +994,6 @@ eslint-config-standard@^17.0.0: resolved "https://registry.yarnpkg.com/eslint-config-standard/-/eslint-config-standard-17.1.0.tgz#40ffb8595d47a6b242e07cbfd49dc211ed128975" integrity sha512-IwHwmaBNtDK4zDHQukFDW5u/aTb8+meQWZvNFWkiGmbWjD6bqyuSSBxxXKkCftCUzc1zwCH2m/baCNDLGmuO5Q== -eslint-import-resolver-node@^0.3.9: - version "0.3.9" - resolved "https://registry.yarnpkg.com/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.9.tgz#d4eaac52b8a2e7c3cd1903eb00f7e053356118ac" - integrity sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g== - dependencies: - debug "^3.2.7" - is-core-module "^2.13.0" - resolve "^1.22.4" - -eslint-module-utils@^2.8.0: - version "2.8.1" - resolved "https://registry.yarnpkg.com/eslint-module-utils/-/eslint-module-utils-2.8.1.tgz#52f2404300c3bd33deece9d7372fb337cc1d7c34" - integrity sha512-rXDXR3h7cs7dy9RNpUlQf80nX31XWJEyGq1tRMo+6GsO5VmTe4UTwtmonAD4ZkAsrfMVDA2wlGJ3790Ys+D49Q== - dependencies: - debug "^3.2.7" - -eslint-plugin-es-x@^7.5.0: - version "7.8.0" - resolved "https://registry.yarnpkg.com/eslint-plugin-es-x/-/eslint-plugin-es-x-7.8.0.tgz#a207aa08da37a7923f2a9599e6d3eb73f3f92b74" - integrity sha512-7Ds8+wAAoV3T+LAKeu39Y5BzXCrGKrcISfgKEqTS4BDN8SFEDQd0S43jiQ8vIa3wUKD07qitZdfzlenSi8/0qQ== - dependencies: - "@eslint-community/eslint-utils" "^4.1.2" - "@eslint-community/regexpp" "^4.11.0" - eslint-compat-utils "^0.5.1" - -eslint-plugin-import@^2.26.0: - version "2.29.1" - resolved "https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.29.1.tgz#d45b37b5ef5901d639c15270d74d46d161150643" - integrity sha512-BbPC0cuExzhiMo4Ff1BTVwHpjjv28C5R+btTOGaCRC7UEz801up0JadwkeSk5Ued6TG34uaczuVuH6qyy5YUxw== - dependencies: - array-includes "^3.1.7" - array.prototype.findlastindex "^1.2.3" - array.prototype.flat "^1.3.2" - array.prototype.flatmap "^1.3.2" - debug "^3.2.7" - doctrine "^2.1.0" - eslint-import-resolver-node "^0.3.9" - eslint-module-utils "^2.8.0" - hasown "^2.0.0" - is-core-module "^2.13.1" - is-glob "^4.0.3" - minimatch "^3.1.2" - object.fromentries "^2.0.7" - object.groupby "^1.0.1" - object.values "^1.1.7" - semver "^6.3.1" - tsconfig-paths "^3.15.0" - -eslint-plugin-n@^16.3.1: - version "16.6.2" - resolved "https://registry.yarnpkg.com/eslint-plugin-n/-/eslint-plugin-n-16.6.2.tgz#6a60a1a376870064c906742272074d5d0b412b0b" - integrity sha512-6TyDmZ1HXoFQXnhCTUjVFULReoBPOAjpuiKELMkeP40yffI/1ZRO+d9ug/VC6fqISo2WkuIBk3cvuRPALaWlOQ== - dependencies: - "@eslint-community/eslint-utils" "^4.4.0" - builtins "^5.0.1" - eslint-plugin-es-x "^7.5.0" - get-tsconfig "^4.7.0" - globals "^13.24.0" - ignore "^5.2.4" - is-builtin-module "^3.2.1" - is-core-module "^2.12.1" - minimatch "^3.1.2" - resolve "^1.22.2" - semver "^7.5.3" - -eslint-plugin-promise@^6.0.0: - version "6.4.0" - resolved "https://registry.yarnpkg.com/eslint-plugin-promise/-/eslint-plugin-promise-6.4.0.tgz#54926d53c79541efe9cea6ac1d823a58bbed1106" - integrity sha512-/KWWRaD3fGkVCZsdR0RU53PSthFmoHVhZl+y9+6DqeDLSikLdlUVpVEAmI6iCRR5QyOjBYBqHZV/bdv4DJ4Gtw== - eslint-scope@^7.2.2: version "7.2.2" resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-7.2.2.tgz#deb4f92563390f32006894af62a22dba1c46423f" @@ -1239,21 +1002,21 @@ eslint-scope@^7.2.2: esrecurse "^4.3.0" estraverse "^5.2.0" -eslint-visitor-keys@^3.3.0, eslint-visitor-keys@^3.4.1, eslint-visitor-keys@^3.4.3: +eslint-visitor-keys@^3.4.1, eslint-visitor-keys@^3.4.3: version "3.4.3" resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz#0cd72fe8550e3c2eae156a96a4dddcd1c8ac5800" integrity sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag== eslint@^8.19.0: - version "8.57.0" - resolved "https://registry.yarnpkg.com/eslint/-/eslint-8.57.0.tgz#c786a6fd0e0b68941aaf624596fb987089195668" - integrity sha512-dZ6+mexnaTIbSBZWgou51U6OmzIhYM2VcNdtiTtI7qPNZm35Akpr0f6vtw3w1Kmn5PYo+tZVfh13WrhpS6oLqQ== + version "8.57.1" + resolved "https://registry.yarnpkg.com/eslint/-/eslint-8.57.1.tgz#7df109654aba7e3bbe5c8eae533c5e461d3c6ca9" + integrity sha512-ypowyDxpVSYpkXr9WPv2PAZCtNip1Mv5KTW0SCurXv/9iOpcrH9PaqUElksqEB6pChqHGDRCFTyrZlGhnLNGiA== dependencies: "@eslint-community/eslint-utils" "^4.2.0" "@eslint-community/regexpp" "^4.6.1" "@eslint/eslintrc" "^2.1.4" - "@eslint/js" "8.57.0" - "@humanwhocodes/config-array" "^0.11.14" + "@eslint/js" "8.57.1" + "@humanwhocodes/config-array" "^0.13.0" "@humanwhocodes/module-importer" "^1.0.1" "@nodelib/fs.walk" "^1.2.8" "@ungap/structured-clone" "^1.2.0" @@ -1338,20 +1101,10 @@ esutils@^2.0.2: resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64" integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== -execa@^8.0.1: - version "8.0.1" - resolved "https://registry.yarnpkg.com/execa/-/execa-8.0.1.tgz#51f6a5943b580f963c3ca9c6321796db8cc39b8c" - integrity sha512-VyhnebXciFV2DESc+p6B+y0LjSm0krU4OgJN44qFAhBY0TJ+1V61tYD2+wHusZ6F9n5K+vl8k0sTy7PEfV4qpg== - 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" +expect-type@^1.1.0: + version "1.2.2" + resolved "https://registry.yarnpkg.com/expect-type/-/expect-type-1.2.2.tgz#c030a329fb61184126c8447585bc75a7ec6fbff3" + integrity sha512-JhFGDVJ7tmDJItKhYgJCGLOWjuK9vPxiXoUFLwLDc99NlmklilbiQJwoctZtt13+xMw91MCk/REan6MWHqDjyA== fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3: version "3.1.3" @@ -1359,15 +1112,15 @@ fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3: integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== fast-glob@^3.2.9: - version "3.3.2" - resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.3.2.tgz#a904501e57cfdd2ffcded45e99a54fef55e46129" - integrity sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow== + version "3.3.3" + resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.3.3.tgz#d06d585ce8dba90a16b0505c543c3ccfb3aeb818" + integrity sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg== dependencies: "@nodelib/fs.stat" "^2.0.2" "@nodelib/fs.walk" "^1.2.3" glob-parent "^5.1.2" merge2 "^1.3.0" - micromatch "^4.0.4" + micromatch "^4.0.8" fast-json-stable-stringify@^2.0.0: version "2.1.0" @@ -1380,12 +1133,20 @@ fast-levenshtein@^2.0.6: integrity sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw== fastq@^1.6.0: - version "1.17.1" - resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.17.1.tgz#2a523f07a4e7b1e81a42b91b8bf2254107753b47" - integrity sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w== + version "1.19.1" + resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.19.1.tgz#d50eaba803c8846a883c16492821ebcd2cda55f5" + integrity sha512-GwLTyxkCXjXbxqIhTsMI2Nui8huMPtnxg7krajPJAjnEG/iiOS7i+zCtWGZR9G0NBKbXKh6X9m9UIsYX/N6vvQ== dependencies: reusify "^1.0.4" +fetch-blob@^3.1.2, fetch-blob@^3.1.4: + version "3.2.0" + resolved "https://registry.yarnpkg.com/fetch-blob/-/fetch-blob-3.2.0.tgz#f09b8d4bbd45adc6f0c20b7e787e793e309dcce9" + integrity sha512-7yAQpD2UMJzLi1Dqv7qFYnPbaPx7ZfFK6PiIxQ4PfkGPyNyl2Ugx+a/umUonmKqjhM4DnfbMvdX6otXq83soQQ== + dependencies: + node-domexception "^1.0.0" + web-streams-polyfill "^3.0.3" + file-entry-cache@^6.0.1: version "6.0.1" resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-6.0.1.tgz#211b2dd9659cb0394b073e7323ac3c933d522027" @@ -1418,29 +1179,36 @@ flat-cache@^3.0.4: rimraf "^3.0.2" flatted@^3.2.9: - version "3.3.1" - resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.3.1.tgz#21db470729a6734d4997002f439cb308987f567a" - integrity sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw== + version "3.3.3" + resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.3.3.tgz#67c8fad95454a7c7abebf74bb78ee74a44023358" + integrity sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg== -for-each@^0.3.3: - version "0.3.3" - resolved "https://registry.yarnpkg.com/for-each/-/for-each-0.3.3.tgz#69b447e88a0a5d32c3e7084f3f1710034b21376e" - integrity sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw== +for-each@^0.3.5: + version "0.3.5" + resolved "https://registry.yarnpkg.com/for-each/-/for-each-0.3.5.tgz#d650688027826920feeb0af747ee7b9421a41d47" + integrity sha512-dKx12eRCVIzqCxFGplyFKJMPvLEWgmNtUrpTiJIR5u97zEhRG8ySrtboPHZXx7daLxQVrl643cTzbab2tkQjxg== dependencies: - is-callable "^1.1.3" + is-callable "^1.2.7" foreground-child@^3.1.0: - version "3.2.1" - resolved "https://registry.yarnpkg.com/foreground-child/-/foreground-child-3.2.1.tgz#767004ccf3a5b30df39bed90718bab43fe0a59f7" - integrity sha512-PXUUyLqrR2XCWICfv6ukppP96sdFwWbNEnfEMt7jNsISjMsvaLNinAHNDYyvkyU+SZG2BTSbT5NjG+vZslfGTA== + version "3.3.1" + resolved "https://registry.yarnpkg.com/foreground-child/-/foreground-child-3.3.1.tgz#32e8e9ed1b68a3497befb9ac2b6adf92a638576f" + integrity sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw== dependencies: - cross-spawn "^7.0.0" + cross-spawn "^7.0.6" signal-exit "^4.0.1" +formdata-polyfill@^4.0.10: + version "4.0.10" + resolved "https://registry.yarnpkg.com/formdata-polyfill/-/formdata-polyfill-4.0.10.tgz#24807c31c9d402e002ab3d8c720144ceb8848423" + integrity sha512-buewHzMvYL29jdeQTVILecSaZKnt/RJWjoZCF5OW60Z67/GmSLBkOFM7qh1PI3zFNtJbaZL5eQu1vLfazOwj4g== + dependencies: + fetch-blob "^3.1.2" + fs-extra@^11.1.1: - version "11.2.0" - resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-11.2.0.tgz#e70e17dfad64232287d01929399e0ea7c86b0e5b" - integrity sha512-PmDi3uwK5nFuXh7XDTlVnS17xJS7vW36is2+w3xcv8SVxiB4NyATf4ctkVY5bkSjX0Y4nbvZCq1/EjtEyr9ktw== + version "11.3.2" + resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-11.3.2.tgz#c838aeddc6f4a8c74dd15f85e11fe5511bfe02a4" + integrity sha512-Xr9F6z6up6Ws+NjzMCZc6WXg2YFRlrLP9NQDO3VQrWrfiojdhS56TzueT88ze0uBdCTwEIhQ3ptnmKeWGFAe0A== dependencies: graceful-fs "^4.2.0" jsonfile "^6.0.1" @@ -1461,62 +1229,41 @@ function-bind@^1.1.2: resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.2.tgz#2c02d864d97f3ea6c8830c464cbd11ab6eab7a1c" integrity sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA== -function.prototype.name@^1.1.6: - version "1.1.6" - resolved "https://registry.yarnpkg.com/function.prototype.name/-/function.prototype.name-1.1.6.tgz#cdf315b7d90ee77a4c6ee216c3c3362da07533fd" - integrity sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg== - dependencies: - call-bind "^1.0.2" - define-properties "^1.2.0" - es-abstract "^1.22.1" - functions-have-names "^1.2.3" - -functions-have-names@^1.2.3: - version "1.2.3" - resolved "https://registry.yarnpkg.com/functions-have-names/-/functions-have-names-1.2.3.tgz#0404fe4ee2ba2f607f0e0ec3c80bae994133b834" - integrity sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ== - -get-func-name@^2.0.1: - version "2.0.2" - resolved "https://registry.yarnpkg.com/get-func-name/-/get-func-name-2.0.2.tgz#0d7cf20cd13fda808669ffa88f4ffc7a3943fc41" - integrity sha512-8vXOvuE167CtIc3OyItco7N/dpRtBbYOsPsXCz7X/PMnlGjYjSGuZJgM1Y7mmew7BKf9BqvLX2tnOVy1BBUsxQ== - -get-intrinsic@^1.1.3, get-intrinsic@^1.2.1, get-intrinsic@^1.2.3, get-intrinsic@^1.2.4: - version "1.2.4" - resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.2.4.tgz#e385f5a4b5227d449c3eabbad05494ef0abbeadd" - integrity sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ== +get-intrinsic@^1.2.4, get-intrinsic@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.3.0.tgz#743f0e3b6964a93a5491ed1bffaae054d7f98d01" + integrity sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ== 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" - has-proto "^1.0.1" - has-symbols "^1.0.3" - hasown "^2.0.0" - -get-stream@^8.0.1: - version "8.0.1" - resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-8.0.1.tgz#def9dfd71742cd7754a7761ed43749a27d02eca2" - integrity sha512-VaUJspBffn/LMCJVoMvSAdmscJyS1auj5Zulnn5UoYcY531UWmdwhRWkcGKnGU93m5HSXP9LP2usOryrBtQowA== + get-proto "^1.0.1" + gopd "^1.2.0" + has-symbols "^1.1.0" + hasown "^2.0.2" + math-intrinsics "^1.1.0" -get-symbol-description@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/get-symbol-description/-/get-symbol-description-1.0.2.tgz#533744d5aa20aca4e079c8e5daf7fd44202821f5" - integrity sha512-g0QYk1dZBxGwk+Ngc+ltRH2IBp2f7zBkBMBJZCDerh6EhlhSR6+9irMCuT/09zD6qkarHUSn529sK/yL4S27mg== +get-proto@^1.0.0, get-proto@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/get-proto/-/get-proto-1.0.1.tgz#150b3f2743869ef3e851ec0c49d15b1d14d00ee1" + integrity sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g== dependencies: - call-bind "^1.0.5" - es-errors "^1.3.0" - get-intrinsic "^1.2.4" + dunder-proto "^1.0.1" + es-object-atoms "^1.0.0" -get-tsconfig@^4.7.0, get-tsconfig@^4.7.2: - version "4.7.5" - resolved "https://registry.yarnpkg.com/get-tsconfig/-/get-tsconfig-4.7.5.tgz#5e012498579e9a6947511ed0cd403272c7acbbaf" - integrity sha512-ZCuZCnlqNzjb4QprAzXKdpp/gh6KTxSJuw3IBsPnV/7fV4NxC9ckB+vPTt8w7fJA0TaSD7c55BR47JD6MEDyDw== +get-tsconfig@^4.10.0: + version "4.10.1" + resolved "https://registry.yarnpkg.com/get-tsconfig/-/get-tsconfig-4.10.1.tgz#d34c1c01f47d65a606c37aa7a177bc3e56ab4b2e" + integrity sha512-auHyJ4AgMz7vgS8Hp3N6HXSmlMdUyhSUrfBF16w153rxtLIEOE+HGqaBppczZvnHLqQJfiHotCYpNhl0lUROFQ== dependencies: resolve-pkg-maps "^1.0.0" get-uri@^6.0.1: - version "6.0.4" - resolved "https://registry.yarnpkg.com/get-uri/-/get-uri-6.0.4.tgz#6daaee9e12f9759e19e55ba313956883ef50e0a7" - integrity sha512-E1b1lFFLvLgak2whF2xDBcOy6NLVGZBqqjJjsIhvopKfWWEi64pLVTWWehV8KlLerZkfNTA95sTe2OdJKm1OzQ== + version "6.0.5" + resolved "https://registry.yarnpkg.com/get-uri/-/get-uri-6.0.5.tgz#714892aa4a871db671abc5395e5e9447bc306a16" + integrity sha512-b1O07XYq8eRuVzBNgJLstU6FYc1tS6wnMtF1I1D9lE8LxZSOGZ7LhxN54yPP6mGw5f2CkXY2BQUL9Fx41qvcIg== dependencies: basic-ftp "^5.0.2" data-uri-to-buffer "^6.0.2" @@ -1560,21 +1307,13 @@ glob@^7.1.3: once "^1.3.0" path-is-absolute "^1.0.0" -globals@^13.19.0, globals@^13.24.0: +globals@^13.19.0: version "13.24.0" resolved "https://registry.yarnpkg.com/globals/-/globals-13.24.0.tgz#8432a19d78ce0c1e833949c36adb345400bb1171" integrity sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ== dependencies: type-fest "^0.20.2" -globalthis@^1.0.3: - version "1.0.4" - resolved "https://registry.yarnpkg.com/globalthis/-/globalthis-1.0.4.tgz#7430ed3a975d97bfb59bcce41f5cabbafa651236" - integrity sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ== - dependencies: - define-properties "^1.2.1" - gopd "^1.0.1" - globby@^11.1.0: version "11.1.0" resolved "https://registry.yarnpkg.com/globby/-/globby-11.1.0.tgz#bd4be98bb042f83d796f7e3811991fbe82a0d34b" @@ -1587,12 +1326,10 @@ globby@^11.1.0: merge2 "^1.4.1" slash "^3.0.0" -gopd@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/gopd/-/gopd-1.0.1.tgz#29ff76de69dac7489b7c0918a5788e56477c332c" - integrity sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA== - dependencies: - get-intrinsic "^1.1.3" +gopd@^1.0.1, gopd@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/gopd/-/gopd-1.2.0.tgz#89f56b8217bdbc8802bd299df6d7f1081d7e51a1" + integrity sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg== graceful-fs@^4.1.6, graceful-fs@^4.2.0: version "4.2.11" @@ -1604,41 +1341,31 @@ graphemer@^1.4.0: resolved "https://registry.yarnpkg.com/graphemer/-/graphemer-1.4.0.tgz#fb2f1d55e0e3a1849aeffc90c4fa0dd53a0e66c6" integrity sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag== -has-bigints@^1.0.1, has-bigints@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/has-bigints/-/has-bigints-1.0.2.tgz#0871bd3e3d51626f6ca0966668ba35d5602d6eaa" - integrity sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ== - has-flag@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== -has-property-descriptors@^1.0.0, has-property-descriptors@^1.0.2: +has-property-descriptors@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz#963ed7d071dc7bf5f084c5bfbe0d1b6222586854" integrity sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg== dependencies: es-define-property "^1.0.0" -has-proto@^1.0.1, has-proto@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/has-proto/-/has-proto-1.0.3.tgz#b31ddfe9b0e6e9914536a6ab286426d0214f77fd" - integrity sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q== - -has-symbols@^1.0.2, has-symbols@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.3.tgz#bb7b2c4349251dce87b125f7bdf874aa7c8b39f8" - integrity sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A== +has-symbols@^1.0.3, has-symbols@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.1.0.tgz#fc9c6a783a084951d0b971fe1018de813707a338" + integrity sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ== -has-tostringtag@^1.0.0, has-tostringtag@^1.0.2: +has-tostringtag@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/has-tostringtag/-/has-tostringtag-1.0.2.tgz#2cdc42d40bef2e5b4eeab7c01a73c54ce7ab5abc" integrity sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw== dependencies: has-symbols "^1.0.3" -hasown@^2.0.0, hasown@^2.0.1, hasown@^2.0.2: +hasown@^2.0.2: version "2.0.2" resolved "https://registry.yarnpkg.com/hasown/-/hasown-2.0.2.tgz#003eaf91be7adc372e84ec59dc37252cedb80003" integrity sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ== @@ -1666,11 +1393,6 @@ https-proxy-agent@^7.0.6: agent-base "^7.1.2" debug "4" -human-signals@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-5.0.0.tgz#42665a284f9ae0dade3ba41ebc37eb4b852f3a28" - integrity sha512-AXcZb6vzzrFAUE61HnN4mpLqd/cSIwNQjtNWR0euPm6y0iqx3G4gOXaIDdtdDwZmhwe82LA6+zinmW4UBWVePQ== - iconv-lite@^0.6.0: version "0.6.3" resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.6.3.tgz#a52f80bf38da1952eb5c681790719871a1a72501" @@ -1678,15 +1400,15 @@ iconv-lite@^0.6.0: dependencies: safer-buffer ">= 2.1.2 < 3.0.0" -ignore@^5.2.0, ignore@^5.2.4, ignore@^5.3.1: - version "5.3.1" - resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.3.1.tgz#5073e554cd42c5b33b394375f538b8593e34d4ef" - integrity sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw== +ignore@^5.2.0, ignore@^5.3.1: + version "5.3.2" + resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.3.2.tgz#3cd40e729f3643fd87cb04e50bf0eb722bc596f5" + integrity sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g== import-fresh@^3.2.1: - version "3.3.0" - resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.3.0.tgz#37162c25fcb9ebaa2e6e53d5b4d88ce17d9e0c2b" - integrity sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw== + version "3.3.1" + resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.3.1.tgz#9cecb56503c0ada1f2741dbbd6546e4b13b57ccf" + integrity sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ== dependencies: parent-module "^1.0.0" resolve-from "^4.0.0" @@ -1709,73 +1431,24 @@ inherits@2, inherits@^2.0.1, inherits@^2.0.3: resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== -internal-slot@^1.0.7: - version "1.0.7" - resolved "https://registry.yarnpkg.com/internal-slot/-/internal-slot-1.0.7.tgz#c06dcca3ed874249881007b0a5523b172a190802" - integrity sha512-NGnrKwXzSms2qUUih/ILZ5JBqNTSa1+ZmP6flaIp6KmSElgE9qdndzS3cqjrDovwFdmwsGsLdeFgB6suw+1e9g== - dependencies: - es-errors "^1.3.0" - hasown "^2.0.0" - side-channel "^1.0.4" - -ip-address@^9.0.5: - version "9.0.5" - resolved "https://registry.yarnpkg.com/ip-address/-/ip-address-9.0.5.tgz#117a960819b08780c3bd1f14ef3c1cc1d3f3ea5a" - integrity sha512-zHtQzGojZXTwZTHQqra+ETKd4Sn3vgi7uBmlPoXVWZqYvuKmtI0l/VZTjqGmJY9x88GGOaZ9+G9ES8hC4T4X8g== - dependencies: - jsbn "1.1.0" - sprintf-js "^1.1.3" +ip-address@^10.0.1: + version "10.0.1" + resolved "https://registry.yarnpkg.com/ip-address/-/ip-address-10.0.1.tgz#a8180b783ce7788777d796286d61bce4276818ed" + integrity sha512-NWv9YLW4PoW2B7xtzaS3NCot75m6nK7Icdv0o3lfMceJVRfSoQwqD4wEH5rLwoKJwUiZ/rfpiVBhnaF0FK4HoA== is-arguments@^1.0.4: - version "1.1.1" - resolved "https://registry.yarnpkg.com/is-arguments/-/is-arguments-1.1.1.tgz#15b3f88fda01f2a97fec84ca761a560f123efa9b" - integrity sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA== - dependencies: - call-bind "^1.0.2" - has-tostringtag "^1.0.0" - -is-array-buffer@^3.0.4: - version "3.0.4" - resolved "https://registry.yarnpkg.com/is-array-buffer/-/is-array-buffer-3.0.4.tgz#7a1f92b3d61edd2bc65d24f130530ea93d7fae98" - integrity sha512-wcjaerHw0ydZwfhiKbXJWLDY8A7yV7KhjQOpb83hGgGfId/aQa4TOvwyzn2PuswW2gPCYEL/nEAiSVpdOj1lXw== - dependencies: - call-bind "^1.0.2" - get-intrinsic "^1.2.1" - -is-bigint@^1.0.1: - version "1.0.4" - resolved "https://registry.yarnpkg.com/is-bigint/-/is-bigint-1.0.4.tgz#08147a1875bc2b32005d41ccd8291dffc6691df3" - integrity sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg== - dependencies: - has-bigints "^1.0.1" - -is-boolean-object@^1.1.0: - version "1.1.2" - resolved "https://registry.yarnpkg.com/is-boolean-object/-/is-boolean-object-1.1.2.tgz#5c6dc200246dd9321ae4b885a114bb1f75f63719" - integrity sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA== - dependencies: - call-bind "^1.0.2" - has-tostringtag "^1.0.0" - -is-builtin-module@^3.2.1: - version "3.2.1" - resolved "https://registry.yarnpkg.com/is-builtin-module/-/is-builtin-module-3.2.1.tgz#f03271717d8654cfcaf07ab0463faa3571581169" - integrity sha512-BSLE3HnV2syZ0FK0iMA/yUGplUeMmNz4AW5fnTunbCIqZi4vG3WjJT9FHMy5D69xmAYBHXQhJdALdpwVxV501A== + version "1.2.0" + resolved "https://registry.yarnpkg.com/is-arguments/-/is-arguments-1.2.0.tgz#ad58c6aecf563b78ef2bf04df540da8f5d7d8e1b" + integrity sha512-7bVbi0huj/wrIAOzb8U1aszg9kdi3KN/CyU19CTI7tAoZYEZoL9yCDXpbXN+uPsuWnP02cyug1gleqq+TU+YCA== dependencies: - builtin-modules "^3.3.0" + call-bound "^1.0.2" + has-tostringtag "^1.0.2" -is-callable@^1.1.3, is-callable@^1.1.4, is-callable@^1.2.7: +is-callable@^1.2.7: version "1.2.7" resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.7.tgz#3bc2a85ea742d9e36205dcacdd72ca1fdc51b055" integrity sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA== -is-core-module@^2.12.1, is-core-module@^2.13.0, is-core-module@^2.13.1: - version "2.14.0" - resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.14.0.tgz#43b8ef9f46a6a08888db67b1ffd4ec9e3dfd59d1" - integrity sha512-a5dFJih5ZLYlRtDc0dZWP7RiKr6xIKzmn/oAYCDvdLThadVgyJwlaoQPmRtMSpz+rk0OGAgIu+TcM9HUF0fk1A== - dependencies: - hasown "^2.0.2" - is-core-module@^2.16.0: version "2.16.1" resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.16.1.tgz#2a98801a849f43e2add644fbb6bc6229b19a4ef4" @@ -1783,20 +1456,6 @@ is-core-module@^2.16.0: dependencies: hasown "^2.0.2" -is-data-view@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/is-data-view/-/is-data-view-1.0.1.tgz#4b4d3a511b70f3dc26d42c03ca9ca515d847759f" - integrity sha512-AHkaJrsUVW6wq6JS8y3JnM/GJF/9cf+k20+iDzlSaJrinEo5+7vRiteOSwBhHRiAyQATN1AmY4hwzxJKPmYf+w== - dependencies: - is-typed-array "^1.1.13" - -is-date-object@^1.0.1: - version "1.0.5" - resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.5.tgz#0841d5536e724c25597bf6ea62e1bd38298df31f" - integrity sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ== - dependencies: - has-tostringtag "^1.0.0" - is-extglob@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" @@ -1808,11 +1467,14 @@ is-fullwidth-code-point@^3.0.0: integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== is-generator-function@^1.0.7: - version "1.0.10" - resolved "https://registry.yarnpkg.com/is-generator-function/-/is-generator-function-1.0.10.tgz#f1558baf1ac17e0deea7c0415c438351ff2b3c72" - integrity sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A== + version "1.1.0" + resolved "https://registry.yarnpkg.com/is-generator-function/-/is-generator-function-1.1.0.tgz#bf3eeda931201394f57b5dba2800f91a238309ca" + integrity sha512-nPUB5km40q9e8UfN/Zc24eLlzdSf9OfKByBw9CIdw4H1giPMeA0OIJvbchsCu4npfI2QcMVBsGEBHKZ7wLTWmQ== dependencies: - has-tostringtag "^1.0.0" + call-bound "^1.0.3" + get-proto "^1.0.0" + has-tostringtag "^1.0.2" + safe-regex-test "^1.1.0" is-glob@^4.0.0, is-glob@^4.0.1, is-glob@^4.0.3: version "4.0.3" @@ -1821,18 +1483,6 @@ is-glob@^4.0.0, is-glob@^4.0.1, is-glob@^4.0.3: dependencies: is-extglob "^2.1.1" -is-negative-zero@^2.0.3: - version "2.0.3" - resolved "https://registry.yarnpkg.com/is-negative-zero/-/is-negative-zero-2.0.3.tgz#ced903a027aca6381b777a5743069d7376a49747" - integrity sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw== - -is-number-object@^1.0.4: - version "1.0.7" - resolved "https://registry.yarnpkg.com/is-number-object/-/is-number-object-1.0.7.tgz#59d50ada4c45251784e9904f5246c742f07a42fc" - integrity sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ== - dependencies: - has-tostringtag "^1.0.0" - is-number@^7.0.0: version "7.0.0" resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" @@ -1843,58 +1493,22 @@ is-path-inside@^3.0.3: resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-3.0.3.tgz#d231362e53a07ff2b0e0ea7fed049161ffd16283" integrity sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ== -is-regex@^1.1.4: - version "1.1.4" - resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.1.4.tgz#eef5663cd59fa4c0ae339505323df6854bb15958" - integrity sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg== - dependencies: - call-bind "^1.0.2" - has-tostringtag "^1.0.0" - -is-shared-array-buffer@^1.0.2, is-shared-array-buffer@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/is-shared-array-buffer/-/is-shared-array-buffer-1.0.3.tgz#1237f1cba059cdb62431d378dcc37d9680181688" - integrity sha512-nA2hv5XIhLR3uVzDDfCIknerhx8XUKnstuOERPNNIinXG7v9u+ohXF67vxm4TPTEPU6lm61ZkwP3c9PCB97rhg== - dependencies: - call-bind "^1.0.7" - -is-stream@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-3.0.0.tgz#e6bfd7aa6bef69f4f472ce9bb681e3e57b4319ac" - integrity sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA== - -is-string@^1.0.5, is-string@^1.0.7: - version "1.0.7" - resolved "https://registry.yarnpkg.com/is-string/-/is-string-1.0.7.tgz#0dd12bf2006f255bb58f695110eff7491eebc0fd" - integrity sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg== - dependencies: - has-tostringtag "^1.0.0" - -is-symbol@^1.0.2, is-symbol@^1.0.3: - version "1.0.4" - resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.0.4.tgz#a6dac93b635b063ca6872236de88910a57af139c" - integrity sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg== - dependencies: - has-symbols "^1.0.2" - -is-typed-array@^1.1.13, is-typed-array@^1.1.3: - version "1.1.13" - resolved "https://registry.yarnpkg.com/is-typed-array/-/is-typed-array-1.1.13.tgz#d6c5ca56df62334959322d7d7dd1cca50debe229" - integrity sha512-uZ25/bUAlUY5fR4OKT4rZQEBrzQWYV9ZJYGGsUmEJ6thodVJ1HX64ePQ6Z0qPWP+m+Uq6e9UugrE38jeYsDSMw== +is-regex@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.2.1.tgz#76d70a3ed10ef9be48eb577887d74205bf0cad22" + integrity sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g== dependencies: - which-typed-array "^1.1.14" + call-bound "^1.0.2" + gopd "^1.2.0" + has-tostringtag "^1.0.2" + hasown "^2.0.2" -is-weakref@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/is-weakref/-/is-weakref-1.0.2.tgz#9529f383a9338205e89765e0392efc2f100f06f2" - integrity sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ== +is-typed-array@^1.1.3: + version "1.1.15" + resolved "https://registry.yarnpkg.com/is-typed-array/-/is-typed-array-1.1.15.tgz#4bfb4a45b61cee83a5a46fba778e4e8d59c0ce0b" + integrity sha512-p3EcsicXjit7SaskXHs1hA91QxgTw46Fv6EFKKGS5DRFLD8yKnohjF3hxoju94b/OcMZoQukzpPpBE9uLVKzgQ== dependencies: - call-bind "^1.0.2" - -isarray@^2.0.5: - version "2.0.5" - resolved "https://registry.yarnpkg.com/isarray/-/isarray-2.0.5.tgz#8af1e4c1221244cc62459faf38940d4e644a5723" - integrity sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw== + which-typed-array "^1.1.16" isexe@^2.0.0: version "2.0.0" @@ -1925,9 +1539,9 @@ istanbul-lib-source-maps@^5.0.6: istanbul-lib-coverage "^3.0.0" istanbul-reports@^3.1.7: - version "3.1.7" - resolved "https://registry.yarnpkg.com/istanbul-reports/-/istanbul-reports-3.1.7.tgz#daed12b9e1dca518e15c056e1e537e741280fa0b" - integrity sha512-BewmUXImeuRk2YY0PVbxgKAysvhRPUQE0h5QRM++nVWyubKGV0l8qQ5op8+B2DOmwSe63Jivj0BjkPQVf8fP5g== + version "3.2.0" + resolved "https://registry.yarnpkg.com/istanbul-reports/-/istanbul-reports-3.2.0.tgz#cb4535162b5784aa623cee21a7252cf2c807ac93" + integrity sha512-HGYWWS/ehqTV3xN10i23tkPkpH46MLCIMFNCaaKNavAXTF1RkqxawEPtnjnGZ6XKSInBKkiOA5BKS+aZiY3AvA== dependencies: html-escaper "^2.0.0" istanbul-lib-report "^3.0.0" @@ -1941,11 +1555,6 @@ jackspeak@^3.1.2: optionalDependencies: "@pkgjs/parseargs" "^0.11.0" -js-tokens@^9.0.0: - version "9.0.0" - resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-9.0.0.tgz#0f893996d6f3ed46df7f0a3b12a03f5fd84223c1" - integrity sha512-WriZw1luRMlmV3LGJaR6QOJjWwgLUTf89OwT2lUOyjX2dJGBwgmIkbcz+7WFZjrZM635JOIR517++e/67CP9dQ== - js-yaml@^4.1.0: version "4.1.0" resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-4.1.0.tgz#c1fb65f8f5017901cdd2c951864ba18458a10602" @@ -1953,11 +1562,6 @@ js-yaml@^4.1.0: dependencies: argparse "^2.0.1" -jsbn@1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-1.1.0.tgz#b01307cb29b618a1ed26ec79e911f803c4da0040" - integrity sha512-4bYVV3aAMtDTTu4+xsDYa6sy9GyJ69/amsu9sYF2zqjiEoZA5xJi3BrfX3uY+/IekIu7MwdObdbDWpoZdBv3/A== - json-buffer@3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/json-buffer/-/json-buffer-3.0.1.tgz#9338802a30d3b6605fbe0613e094008ca8c05a13" @@ -1978,17 +1582,10 @@ json-stringify-safe@^5.0.1: resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb" integrity sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA== -json5@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/json5/-/json5-1.0.2.tgz#63d98d60f21b313b77c4d6da18bfa69d80e1d593" - integrity sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA== - dependencies: - minimist "^1.2.0" - jsonfile@^6.0.1: - version "6.1.0" - resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-6.1.0.tgz#bc55b2634793c679ec6403094eb13698a6ec0aae" - integrity sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ== + version "6.2.0" + resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-6.2.0.tgz#7c265bd1b65de6977478300087c99f1c84383f62" + integrity sha512-FGuPw30AdOIUTRMC2OMRtQV+jkVj2cfPqSeWXv1NEAJ1qZ5zb1X6z1mFhbfOB/iy3ssJCD+3KuZ8r8C3uVFlAg== dependencies: universalify "^2.0.0" optionalDependencies: @@ -2021,12 +1618,10 @@ lodash.merge@^4.6.2: resolved "https://registry.yarnpkg.com/lodash.merge/-/lodash.merge-4.6.2.tgz#558aa53b43b661e1925a0afdfa36a9a1085fe57a" integrity sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ== -loupe@^3.1.0, loupe@^3.1.1: - version "3.1.1" - resolved "https://registry.yarnpkg.com/loupe/-/loupe-3.1.1.tgz#71d038d59007d890e3247c5db97c1ec5a92edc54" - integrity sha512-edNu/8D5MKVfGVFRhFf8aAxiTM6Wumfz5XsaatSxlD3w4R1d/WEKUTydCdPGbl9K7QG/Ca3GnDV2sIKIpXRQcw== - dependencies: - get-func-name "^2.0.1" +loupe@^3.1.0, loupe@^3.1.2: + version "3.2.1" + resolved "https://registry.yarnpkg.com/loupe/-/loupe-3.2.1.tgz#0095cf56dc5b7a9a7c08ff5b1a8796ec8ad17e76" + integrity sha512-CdzqowRJCeLU72bHvWqwRBBlLcMEtIvGrlvef74kMnV2AolS9Y8xUv1I0U/MNAWMhBlKIoyuEgoJ0t/bbwHbLQ== lru-cache@^10.2.0: version "10.4.3" @@ -2038,20 +1633,20 @@ lru-cache@^7.14.1: resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-7.18.3.tgz#f793896e0fd0e954a59dfdd82f0773808df6aa89" integrity sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA== -magic-string@^0.30.10: - version "0.30.10" - resolved "https://registry.yarnpkg.com/magic-string/-/magic-string-0.30.10.tgz#123d9c41a0cb5640c892b041d4cfb3bd0aa4b39e" - integrity sha512-iIRwTIf0QKV3UAnYK4PU8uiEc4SRh5jX0mwpIwETPpHdhVM4f53RSwS/vXvN1JhGX+Cs7B8qIq3d6AH49O5fAQ== +magic-string@^0.30.12: + version "0.30.19" + resolved "https://registry.yarnpkg.com/magic-string/-/magic-string-0.30.19.tgz#cebe9f104e565602e5d2098c5f2e79a77cc86da9" + integrity sha512-2N21sPY9Ws53PZvsEpVtNuSW+ScYbQdp4b9qUaL+9QkHUrGFKo56Lg9Emg5s9V/qrtNBmiR01sYhUOwu3H+VOw== dependencies: - "@jridgewell/sourcemap-codec" "^1.4.15" + "@jridgewell/sourcemap-codec" "^1.5.5" -magicast@^0.3.4: - version "0.3.4" - resolved "https://registry.yarnpkg.com/magicast/-/magicast-0.3.4.tgz#bbda1791d03190a24b00ff3dd18151e7fd381d19" - integrity sha512-TyDF/Pn36bBji9rWKHlZe+PZb6Mx5V8IHCSxk7X4aljM4e/vyDvZZYwHewdVaqiA0nb3ghfHU/6AUpDxWoER2Q== +magicast@^0.3.5: + version "0.3.5" + resolved "https://registry.yarnpkg.com/magicast/-/magicast-0.3.5.tgz#8301c3c7d66704a0771eb1bad74274f0ec036739" + integrity sha512-L0WhttDl+2BOsybvEOLK7fW3UA0OQ0IQ2d6Zl2x/a6vVRs3bAY0ECOSHHeL5jD+SbOpOCUEi0y1DgHEn9Qn1AQ== dependencies: - "@babel/parser" "^7.24.4" - "@babel/types" "^7.24.0" + "@babel/parser" "^7.25.4" + "@babel/types" "^7.25.4" source-map-js "^1.2.0" make-dir@^4.0.0: @@ -2061,29 +1656,24 @@ make-dir@^4.0.0: dependencies: semver "^7.5.3" -merge-stream@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/merge-stream/-/merge-stream-2.0.0.tgz#52823629a14dd00c9770fb6ad47dc6310f2c1f60" - integrity sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w== +math-intrinsics@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/math-intrinsics/-/math-intrinsics-1.1.0.tgz#a0dd74be81e2aa5c2f27e65ce283605ee4e2b7f9" + integrity sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g== merge2@^1.3.0, merge2@^1.4.1: version "1.4.1" resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae" integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg== -micromatch@^4.0.4: - version "4.0.7" - resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.7.tgz#33e8190d9fe474a9895525f5618eee136d46c2e5" - integrity sha512-LPP/3KorzCwBxfeUuZmaR6bG2kdeHSbe0P2tY3FLRU4vYrjYz5hI4QZwV0njUx3jeuKe67YukQ1LSPZBKDqO/Q== +micromatch@^4.0.8: + version "4.0.8" + resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.8.tgz#d66fa18f3a47076789320b9b1af32bd86d9fa202" + integrity sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA== dependencies: braces "^3.0.3" picomatch "^2.3.1" -mimic-fn@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-4.0.0.tgz#60a90550d5cb0b239cca65d893b1a53b29871ecc" - integrity sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw== - minimalistic-assert@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz#2e194de044626d4a10e7f7fbc00ce73e83e4d5c7" @@ -2103,30 +1693,20 @@ minimatch@^9.0.4: dependencies: brace-expansion "^2.0.1" -minimist@^1.2.0, minimist@^1.2.6: - version "1.2.8" - resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.8.tgz#c1a464e7693302e082a075cee0c057741ac4772c" - integrity sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA== - "minipass@^5.0.0 || ^6.0.2 || ^7.0.0", minipass@^7.1.2: version "7.1.2" resolved "https://registry.yarnpkg.com/minipass/-/minipass-7.1.2.tgz#93a9626ce5e5e66bd4db86849e7515e92340a707" integrity sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw== -ms@2.1.2: - version "2.1.2" - resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" - integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== - -ms@^2.1.1, ms@^2.1.3: +ms@^2.1.3: version "2.1.3" resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== -nanoid@^3.3.7: - version "3.3.7" - resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.7.tgz#d0c301a691bc8d54efa0a2226ccf3fe2fd656bd8" - integrity sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g== +nanoid@^3.3.11: + version "3.3.11" + resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.11.tgz#4f4f112cefbe303202f2199838128936266d185b" + integrity sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w== natural-compare@^1.4.0: version "1.4.0" @@ -2139,75 +1719,27 @@ netmask@^2.0.2: integrity sha512-dBpDMdxv9Irdq66304OLfEmQ9tbNRFnFTuZiLo+bD+r332bBmMJ8GBLXklIXXgxd3+v9+KUnZaUR5PJMa75Gsg== nock@^13.5.4: - version "13.5.4" - resolved "https://registry.yarnpkg.com/nock/-/nock-13.5.4.tgz#8918f0addc70a63736170fef7106a9721e0dc479" - integrity sha512-yAyTfdeNJGGBFxWdzSKCBYxs5FxLbCg5X5Q4ets974hcQzG1+qCxvIyOo4j2Ry6MUlhWVMX4OoYDefAIIwupjw== + version "13.5.6" + resolved "https://registry.yarnpkg.com/nock/-/nock-13.5.6.tgz#5e693ec2300bbf603b61dae6df0225673e6c4997" + integrity sha512-o2zOYiCpzRqSzPj0Zt/dQ/DqZeYoaQ7TUonc/xUPjCGl9WeHpNbxgVvOquXYAaJzI0M9BXV3HTzG0p8IUAbBTQ== dependencies: debug "^4.1.0" json-stringify-safe "^5.0.1" propagate "^2.0.0" -node-fetch@^2.7.0: - version "2.7.0" - resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.7.0.tgz#d0f0fa6e3e2dc1d27efcd8ad99d550bda94d187d" - integrity sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A== - dependencies: - whatwg-url "^5.0.0" - -npm-run-path@^5.1.0: - version "5.3.0" - resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-5.3.0.tgz#e23353d0ebb9317f174e93417e4a4d82d0249e9f" - integrity sha512-ppwTtiJZq0O/ai0z7yfudtBpWIoxM8yE6nHi1X47eFR2EWORqfbu6CnPlNsjeN683eT0qG6H/Pyf9fCcvjnnnQ== - dependencies: - path-key "^4.0.0" - -object-inspect@^1.13.1: - version "1.13.2" - resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.13.2.tgz#dea0088467fb991e67af4058147a24824a3043ff" - integrity sha512-IRZSRuzJiynemAXPYtPe5BoI/RESNYR7TYm50MC5Mqbd3Jmw5y790sErYw3V6SryFJD64b74qQQs9wn5Bg/k3g== - -object-keys@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e" - integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA== - -object.assign@^4.1.5: - version "4.1.5" - resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.5.tgz#3a833f9ab7fdb80fc9e8d2300c803d216d8fdbb0" - integrity sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ== - dependencies: - call-bind "^1.0.5" - define-properties "^1.2.1" - has-symbols "^1.0.3" - object-keys "^1.1.1" - -object.fromentries@^2.0.7: - version "2.0.8" - resolved "https://registry.yarnpkg.com/object.fromentries/-/object.fromentries-2.0.8.tgz#f7195d8a9b97bd95cbc1999ea939ecd1a2b00c65" - integrity sha512-k6E21FzySsSK5a21KRADBd/NGneRegFO5pLHfdQLpRDETUNJueLXs3WCzyQ3tFRDYgbq3KHGXfTbi2bs8WQ6rQ== - dependencies: - call-bind "^1.0.7" - define-properties "^1.2.1" - es-abstract "^1.23.2" - es-object-atoms "^1.0.0" - -object.groupby@^1.0.1: - version "1.0.3" - resolved "https://registry.yarnpkg.com/object.groupby/-/object.groupby-1.0.3.tgz#9b125c36238129f6f7b61954a1e7176148d5002e" - integrity sha512-+Lhy3TQTuzXI5hevh8sBGqbmurHbbIjAi0Z4S63nthVLmLxfbj4T54a4CfZrXIrt9iP4mVAPYMo/v99taj3wjQ== - dependencies: - call-bind "^1.0.7" - define-properties "^1.2.1" - es-abstract "^1.23.2" +node-domexception@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/node-domexception/-/node-domexception-1.0.0.tgz#6888db46a1f71c0b76b3f7555016b63fe64766e5" + integrity sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ== -object.values@^1.1.7: - version "1.2.0" - resolved "https://registry.yarnpkg.com/object.values/-/object.values-1.2.0.tgz#65405a9d92cee68ac2d303002e0b8470a4d9ab1b" - integrity sha512-yBYjY9QX2hnRmZHAjG/f13MzmBzxzYgQhFrke06TTyKY5zSTEqkOeukBzIdVA3j3ulu8Qa3MbVFShV7T2RmGtQ== +node-fetch@*, node-fetch@^3: + version "3.3.2" + resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-3.3.2.tgz#d1e889bacdf733b4ff3b2b243eb7a12866a0b78b" + integrity sha512-dRB78srN/l6gqWulah9SrxeYnxeddIG30+GOqK/9OlLVyLg3HPnr6SqOWTWOXKRwC2eGYCkZ59NNuSgvSrpgOA== dependencies: - call-bind "^1.0.7" - define-properties "^1.2.1" - es-object-atoms "^1.0.0" + data-uri-to-buffer "^4.0.0" + fetch-blob "^3.1.4" + formdata-polyfill "^4.0.10" once@^1.3.0: version "1.4.0" @@ -2216,13 +1748,6 @@ once@^1.3.0: dependencies: wrappy "1" -onetime@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/onetime/-/onetime-6.0.0.tgz#7c24c18ed1fd2e9bca4bd26806a33613c77d34b4" - integrity sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ== - dependencies: - mimic-fn "^4.0.0" - optionator@^0.9.3: version "0.9.4" resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.9.4.tgz#7ea1c1a5d91d764fb282139c88fe11e182a3a734" @@ -2272,9 +1797,9 @@ pac-resolver@^7.0.1: netmask "^2.0.2" package-json-from-dist@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/package-json-from-dist/-/package-json-from-dist-1.0.0.tgz#e501cd3094b278495eb4258d4c9f6d5ac3019f00" - integrity sha512-dATvCeZN/8wQsGywez1mzHtTlP22H8OEfPrVMLNr4/eGa+ijtLn/6M5f0dY8UKNrC2O9UCU6SSoG3qRKnt7STw== + version "1.0.1" + resolved "https://registry.yarnpkg.com/package-json-from-dist/-/package-json-from-dist-1.0.1.tgz#4f1471a010827a86f94cfd9b0727e36d267de505" + integrity sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw== parent-module@^1.0.0: version "1.0.1" @@ -2298,11 +1823,6 @@ path-key@^3.1.0: resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375" integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== -path-key@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/path-key/-/path-key-4.0.0.tgz#295588dc3aee64154f877adb9d780b81c554bf18" - integrity sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ== - path-parse@^1.0.7: version "1.0.7" resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735" @@ -2326,39 +1846,44 @@ pathe@^1.1.2: resolved "https://registry.yarnpkg.com/pathe/-/pathe-1.1.2.tgz#6c4cb47a945692e48a1ddd6e4094d170516437ec" integrity sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ== +pathe@^2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/pathe/-/pathe-2.0.3.tgz#3ecbec55421685b70a9da872b2cff3e1cbed1716" + integrity sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w== + pathval@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/pathval/-/pathval-2.0.0.tgz#7e2550b422601d4f6b8e26f1301bc8f15a741a25" - integrity sha512-vE7JKRyES09KiunauX7nd2Q9/L7lhok4smP9RZTDeD4MVs72Dp2qNFVz39Nz5a0FVEW0BJR6C0DYrq6unoziZA== + version "2.0.1" + resolved "https://registry.yarnpkg.com/pathval/-/pathval-2.0.1.tgz#8855c5a2899af072d6ac05d11e46045ad0dc605d" + integrity sha512-//nshmD55c46FuFw26xV/xFAaB5HF9Xdap7HJBBnrKdAd6/GxDBaNA1870O79+9ueg61cZLSVc+OaFlfmObYVQ== -picocolors@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.0.1.tgz#a8ad579b571952f0e5d25892de5445bcfe25aaa1" - integrity sha512-anP1Z8qwhkbmu7MFP5iTt+wQKXgwzf7zTyGlcdzabySa9vd0Xt392U0rVmz9poOaBj0uHJKyyo9/upk0HrEQew== +picocolors@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.1.1.tgz#3d321af3eab939b083c8f929a1d12cda81c26b6b" + integrity sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA== picomatch@^2.3.1: version "2.3.1" resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42" integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== -picomatch@^4.0.2: +picomatch@^4.0.2, picomatch@^4.0.3: version "4.0.3" resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-4.0.3.tgz#796c76136d1eead715db1e7bad785dedd695a042" integrity sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q== possible-typed-array-names@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/possible-typed-array-names/-/possible-typed-array-names-1.0.0.tgz#89bb63c6fada2c3e90adc4a647beeeb39cc7bf8f" - integrity sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q== + version "1.1.0" + resolved "https://registry.yarnpkg.com/possible-typed-array-names/-/possible-typed-array-names-1.1.0.tgz#93e3582bc0e5426586d9d07b79ee40fc841de4ae" + integrity sha512-/+5VFTchJDoVj3bhoqi6UeymcD00DAwb1nJwamzPvHEszJ4FpF6SNNbUbOS8yI56qHzdV8eK0qEfOSiodkTdxg== -postcss@^8.4.39: - version "8.4.39" - resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.4.39.tgz#aa3c94998b61d3a9c259efa51db4b392e1bde0e3" - integrity sha512-0vzE+lAiG7hZl1/9I8yzKLx3aR9Xbof3fBHKunvMfOCYAtMhrsnccJY2iTURb9EZd5+pLuiNV9/c/GZJOHsgIw== +postcss@^8.4.43: + version "8.5.6" + resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.5.6.tgz#2825006615a619b4f62a9e7426cc120b349a8f3c" + integrity sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg== dependencies: - nanoid "^3.3.7" - picocolors "^1.0.1" - source-map-js "^1.2.0" + nanoid "^3.3.11" + picocolors "^1.1.1" + source-map-js "^1.2.1" prelude-ls@^1.2.1: version "1.2.1" @@ -2404,16 +1929,6 @@ queue-microtask@^1.2.2: resolved "https://registry.yarnpkg.com/queue-microtask/-/queue-microtask-1.2.3.tgz#4929228bbc724dfac43e0efb058caf7b6cfb6243" integrity sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A== -regexp.prototype.flags@^1.5.2: - version "1.5.2" - resolved "https://registry.yarnpkg.com/regexp.prototype.flags/-/regexp.prototype.flags-1.5.2.tgz#138f644a3350f981a858c44f6bb1a61ff59be334" - integrity sha512-NcDiDkTLuPR+++OCKB0nWafEmhg/Da8aUPLPMQbK+bxKKCm1/S5he+AqYa4PlMCVBalb4/yxIRub6qkEx5yJbw== - dependencies: - call-bind "^1.0.6" - define-properties "^1.2.1" - es-errors "^1.3.0" - set-function-name "^2.0.1" - resolve-from@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6" @@ -2433,19 +1948,10 @@ resolve@^1.22.1: path-parse "^1.0.7" supports-preserve-symlinks-flag "^1.0.0" -resolve@^1.22.2, resolve@^1.22.4: - version "1.22.8" - resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.8.tgz#b6c87a9f2aa06dfab52e3d70ac8cde321fa5a48d" - integrity sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw== - dependencies: - is-core-module "^2.13.0" - path-parse "^1.0.7" - supports-preserve-symlinks-flag "^1.0.0" - reusify@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/reusify/-/reusify-1.0.4.tgz#90da382b1e126efc02146e90845a88db12925d76" - integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw== + version "1.1.0" + resolved "https://registry.yarnpkg.com/reusify/-/reusify-1.1.0.tgz#0fe13b9522e1473f51b558ee796e08f11f9b489f" + integrity sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw== rimraf@^3.0.2: version "3.0.2" @@ -2455,38 +1961,43 @@ rimraf@^3.0.2: glob "^7.1.3" rollup-plugin-esbuild@^6.1.1: - version "6.1.1" - resolved "https://registry.yarnpkg.com/rollup-plugin-esbuild/-/rollup-plugin-esbuild-6.1.1.tgz#ec1dba647dbe1974f76192c75e907aa6eb636399" - integrity sha512-CehMY9FAqJD5OUaE/Mi1r5z0kNeYxItmRO2zG4Qnv2qWKF09J2lTy5GUzjJR354ZPrLkCj4fiBN41lo8PzBUhw== + version "6.2.1" + resolved "https://registry.yarnpkg.com/rollup-plugin-esbuild/-/rollup-plugin-esbuild-6.2.1.tgz#c556195465bf452965686e0f21adfe306b90c219" + integrity sha512-jTNOMGoMRhs0JuueJrJqbW8tOwxumaWYq+V5i+PD+8ecSCVkuX27tGW7BXqDgoULQ55rO7IdNxPcnsWtshz3AA== dependencies: - "@rollup/pluginutils" "^5.0.5" - debug "^4.3.4" - es-module-lexer "^1.3.1" - get-tsconfig "^4.7.2" + debug "^4.4.0" + es-module-lexer "^1.6.0" + get-tsconfig "^4.10.0" + unplugin-utils "^0.2.4" -rollup@^4.13.0, rollup@^4.18.0: - version "4.18.1" - resolved "https://registry.yarnpkg.com/rollup/-/rollup-4.18.1.tgz#18a606df5e76ca53b8a69f2d8eab256d69dda851" - integrity sha512-Elx2UT8lzxxOXMpy5HWQGZqkrQOtrVDDa/bm9l10+U4rQnVzbL/LgZ4NOM1MPIDyHk69W4InuYDF5dzRh4Kw1A== +rollup@^4.18.0, rollup@^4.20.0: + version "4.50.2" + resolved "https://registry.yarnpkg.com/rollup/-/rollup-4.50.2.tgz#938d898394939f3386d1e367ee6410a796b8f268" + integrity sha512-BgLRGy7tNS9H66aIMASq1qSYbAAJV6Z6WR4QYTvj5FgF15rZ/ympT1uixHXwzbZUBDbkvqUI1KR0fH1FhMaQ9w== dependencies: - "@types/estree" "1.0.5" + "@types/estree" "1.0.8" optionalDependencies: - "@rollup/rollup-android-arm-eabi" "4.18.1" - "@rollup/rollup-android-arm64" "4.18.1" - "@rollup/rollup-darwin-arm64" "4.18.1" - "@rollup/rollup-darwin-x64" "4.18.1" - "@rollup/rollup-linux-arm-gnueabihf" "4.18.1" - "@rollup/rollup-linux-arm-musleabihf" "4.18.1" - "@rollup/rollup-linux-arm64-gnu" "4.18.1" - "@rollup/rollup-linux-arm64-musl" "4.18.1" - "@rollup/rollup-linux-powerpc64le-gnu" "4.18.1" - "@rollup/rollup-linux-riscv64-gnu" "4.18.1" - "@rollup/rollup-linux-s390x-gnu" "4.18.1" - "@rollup/rollup-linux-x64-gnu" "4.18.1" - "@rollup/rollup-linux-x64-musl" "4.18.1" - "@rollup/rollup-win32-arm64-msvc" "4.18.1" - "@rollup/rollup-win32-ia32-msvc" "4.18.1" - "@rollup/rollup-win32-x64-msvc" "4.18.1" + "@rollup/rollup-android-arm-eabi" "4.50.2" + "@rollup/rollup-android-arm64" "4.50.2" + "@rollup/rollup-darwin-arm64" "4.50.2" + "@rollup/rollup-darwin-x64" "4.50.2" + "@rollup/rollup-freebsd-arm64" "4.50.2" + "@rollup/rollup-freebsd-x64" "4.50.2" + "@rollup/rollup-linux-arm-gnueabihf" "4.50.2" + "@rollup/rollup-linux-arm-musleabihf" "4.50.2" + "@rollup/rollup-linux-arm64-gnu" "4.50.2" + "@rollup/rollup-linux-arm64-musl" "4.50.2" + "@rollup/rollup-linux-loong64-gnu" "4.50.2" + "@rollup/rollup-linux-ppc64-gnu" "4.50.2" + "@rollup/rollup-linux-riscv64-gnu" "4.50.2" + "@rollup/rollup-linux-riscv64-musl" "4.50.2" + "@rollup/rollup-linux-s390x-gnu" "4.50.2" + "@rollup/rollup-linux-x64-gnu" "4.50.2" + "@rollup/rollup-linux-x64-musl" "4.50.2" + "@rollup/rollup-openharmony-arm64" "4.50.2" + "@rollup/rollup-win32-arm64-msvc" "4.50.2" + "@rollup/rollup-win32-ia32-msvc" "4.50.2" + "@rollup/rollup-win32-x64-msvc" "4.50.2" fsevents "~2.3.2" run-parallel@^1.1.9: @@ -2496,41 +2007,26 @@ run-parallel@^1.1.9: dependencies: queue-microtask "^1.2.2" -safe-array-concat@^1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/safe-array-concat/-/safe-array-concat-1.1.2.tgz#81d77ee0c4e8b863635227c721278dd524c20edb" - integrity sha512-vj6RsCsWBCf19jIeHEfkRMw8DPiBb+DMXklQ/1SGDHOMlHdPUkZXFQ2YdplS23zESTijAcurb1aSgJA3AgMu1Q== - dependencies: - call-bind "^1.0.7" - get-intrinsic "^1.2.4" - has-symbols "^1.0.3" - isarray "^2.0.5" - -safe-regex-test@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/safe-regex-test/-/safe-regex-test-1.0.3.tgz#a5b4c0f06e0ab50ea2c395c14d8371232924c377" - integrity sha512-CdASjNJPvRa7roO6Ra/gLYBTzYzzPyyBXxIMdGW3USQLyjWEls2RgW5UBTXaQVp+OrpeCK3bLem8smtmheoRuw== +safe-regex-test@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/safe-regex-test/-/safe-regex-test-1.1.0.tgz#7f87dfb67a3150782eaaf18583ff5d1711ac10c1" + integrity sha512-x/+Cz4YrimQxQccJf5mKEbIa1NzeCRNI5Ecl/ekmlYaampdNLPalVyIcCZNNH3MvmqBugV5TMYZXv0ljslUlaw== dependencies: - call-bind "^1.0.6" + call-bound "^1.0.2" es-errors "^1.3.0" - is-regex "^1.1.4" + is-regex "^1.2.1" "safer-buffer@>= 2.1.2 < 3.0.0", safer-buffer@^2.1.0: version "2.1.2" resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== -semver@^6.3.1: - version "6.3.1" - resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.1.tgz#556d2ef8689146e46dcea4bfdd095f3434dffcb4" - integrity sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA== +semver@^7.5.3, semver@^7.6.0: + version "7.7.2" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.7.2.tgz#67d99fdcd35cec21e6f8b87a7fd515a33f982b58" + integrity sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA== -semver@^7.0.0, semver@^7.5.3, semver@^7.5.4, semver@^7.6.0: - version "7.6.2" - resolved "https://registry.yarnpkg.com/semver/-/semver-7.6.2.tgz#1e3b34759f896e8f14d6134732ce798aeb0c6e13" - integrity sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w== - -set-function-length@^1.2.1: +set-function-length@^1.2.2: version "1.2.2" resolved "https://registry.yarnpkg.com/set-function-length/-/set-function-length-1.2.2.tgz#aac72314198eaed975cf77b2c3b6b880695e5449" integrity sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg== @@ -2542,16 +2038,6 @@ set-function-length@^1.2.1: gopd "^1.0.1" has-property-descriptors "^1.0.2" -set-function-name@^2.0.1: - version "2.0.2" - resolved "https://registry.yarnpkg.com/set-function-name/-/set-function-name-2.0.2.tgz#16a705c5a0dc2f5e638ca96d8a8cd4e1c2b90985" - integrity sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ== - dependencies: - define-data-property "^1.1.4" - es-errors "^1.3.0" - functions-have-names "^1.2.3" - has-property-descriptors "^1.0.2" - shebang-command@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea" @@ -2564,22 +2050,12 @@ shebang-regex@^3.0.0: resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172" integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== -side-channel@^1.0.4: - version "1.0.6" - resolved "https://registry.yarnpkg.com/side-channel/-/side-channel-1.0.6.tgz#abd25fb7cd24baf45466406b1096b7831c9215f2" - integrity sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA== - dependencies: - call-bind "^1.0.7" - es-errors "^1.3.0" - get-intrinsic "^1.2.4" - object-inspect "^1.13.1" - siginfo@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/siginfo/-/siginfo-2.0.0.tgz#32e76c70b79724e3bb567cb9d543eb858ccfaf30" integrity sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g== -signal-exit@^4.0.1, signal-exit@^4.1.0: +signal-exit@^4.0.1: version "4.1.0" resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-4.1.0.tgz#952188c1cbd546070e2dd20d0f41c0ae0530cb04" integrity sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw== @@ -2609,39 +2085,35 @@ socks-proxy-agent@^8.0.5: socks "^2.8.3" socks@^2.8.3: - version "2.8.4" - resolved "https://registry.yarnpkg.com/socks/-/socks-2.8.4.tgz#07109755cdd4da03269bda4725baa061ab56d5cc" - integrity sha512-D3YaD0aRxR3mEcqnidIs7ReYJFVzWdd6fXJYUM8ixcQcJRGTka/b3saV0KflYhyVJXKhb947GndU35SxYNResQ== + version "2.8.7" + resolved "https://registry.yarnpkg.com/socks/-/socks-2.8.7.tgz#e2fb1d9a603add75050a2067db8c381a0b5669ea" + integrity sha512-HLpt+uLy/pxB+bum/9DzAgiKS8CX1EvbWxI4zlmgGCExImLdiad2iCwXT5Z4c9c3Eq8rP2318mPW2c+QbtjK8A== dependencies: - ip-address "^9.0.5" + ip-address "^10.0.1" smart-buffer "^4.2.0" -source-map-js@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/source-map-js/-/source-map-js-1.2.0.tgz#16b809c162517b5b8c3e7dcd315a2a5c2612b2af" - integrity sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg== +source-map-js@^1.2.0, source-map-js@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/source-map-js/-/source-map-js-1.2.1.tgz#1ce5650fddd87abc099eda37dcff024c2667ae46" + integrity sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA== source-map@~0.6.1: version "0.6.1" resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== -sprintf-js@^1.1.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.1.3.tgz#4914b903a2f8b685d17fdf78a70e917e872e444a" - integrity sha512-Oo+0REFV59/rz3gfJNKQiBlwfHaSESl1pcGyABQsnnIfWOFt6JNj5gCog2U6MLZ//IGYD+nA8nI+mTShREReaA== - stackback@0.0.2: version "0.0.2" resolved "https://registry.yarnpkg.com/stackback/-/stackback-0.0.2.tgz#1ac8a0d9483848d1695e418b6d031a3c3ce68e3b" integrity sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw== -std-env@^3.7.0: - version "3.7.0" - resolved "https://registry.yarnpkg.com/std-env/-/std-env-3.7.0.tgz#c9f7386ced6ecf13360b6c6c55b8aaa4ef7481d2" - integrity sha512-JPbdCEQLj1w5GilpiHAx3qJvFndqybBysA3qUOnznweH4QbNYUsW/ea8QzSrnh0vNsezMMw5bcVool8lM0gwzg== +std-env@^3.8.0: + version "3.9.0" + resolved "https://registry.yarnpkg.com/std-env/-/std-env-3.9.0.tgz#1a6f7243b339dca4c9fd55e1c7504c77ef23e8f1" + integrity sha512-UGvjygr6F6tpH7o2qyqR6QYpwraIjKSdtzyBdyytFOHmPZY917kwdwLG0RbOjWOnKmnm3PeHjaoLLMie7kPLQw== -"string-width-cjs@npm:string-width@^4.2.0": +"string-width-cjs@npm:string-width@^4.2.0", string-width@^4.1.0: + name string-width-cjs version "4.2.3" resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== @@ -2650,15 +2122,6 @@ std-env@^3.7.0: is-fullwidth-code-point "^3.0.0" strip-ansi "^6.0.1" -string-width@^4.1.0: - version "4.2.2" - resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.2.tgz#dafd4f9559a7585cfba529c6a0a4f73488ebd4c5" - integrity sha512-XBJbT3N4JhVumXE0eoLU9DCjcaF92KLNqTmFCnG1pf8duUxFGwtP6AD6nkjw9a3IdiRtL3E2w3JDiE/xi3vOeA== - dependencies: - emoji-regex "^8.0.0" - is-fullwidth-code-point "^3.0.0" - strip-ansi "^6.0.0" - string-width@^5.0.1, string-width@^5.1.2: version "5.1.2" resolved "https://registry.yarnpkg.com/string-width/-/string-width-5.1.2.tgz#14f8daec6d81e7221d2a357e668cab73bdbca794" @@ -2668,34 +2131,6 @@ string-width@^5.0.1, string-width@^5.1.2: emoji-regex "^9.2.2" strip-ansi "^7.0.1" -string.prototype.trim@^1.2.9: - version "1.2.9" - resolved "https://registry.yarnpkg.com/string.prototype.trim/-/string.prototype.trim-1.2.9.tgz#b6fa326d72d2c78b6df02f7759c73f8f6274faa4" - integrity sha512-klHuCNxiMZ8MlsOihJhJEBJAiMVqU3Z2nEXWfWnIqjN0gEFS9J9+IxKozWWtQGcgoa1WUZzLjKPTr4ZHNFTFxw== - dependencies: - call-bind "^1.0.7" - define-properties "^1.2.1" - es-abstract "^1.23.0" - es-object-atoms "^1.0.0" - -string.prototype.trimend@^1.0.8: - version "1.0.8" - resolved "https://registry.yarnpkg.com/string.prototype.trimend/-/string.prototype.trimend-1.0.8.tgz#3651b8513719e8a9f48de7f2f77640b26652b229" - integrity sha512-p73uL5VCHCO2BZZ6krwwQE3kCzM7NKmis8S//xEC6fQonchbum4eP6kR4DLEjQFO3Wnj3Fuo8NM0kOSjVdHjZQ== - dependencies: - call-bind "^1.0.7" - define-properties "^1.2.1" - es-object-atoms "^1.0.0" - -string.prototype.trimstart@^1.0.8: - version "1.0.8" - resolved "https://registry.yarnpkg.com/string.prototype.trimstart/-/string.prototype.trimstart-1.0.8.tgz#7ee834dda8c7c17eff3118472bb35bfedaa34dde" - integrity sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg== - dependencies: - call-bind "^1.0.7" - define-properties "^1.2.1" - es-object-atoms "^1.0.0" - "strip-ansi-cjs@npm:strip-ansi@^6.0.1", strip-ansi@6.0.1, strip-ansi@^6.0.0, strip-ansi@^6.0.1, strip-ansi@^7.0.1: version "6.0.1" resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" @@ -2703,28 +2138,11 @@ string.prototype.trimstart@^1.0.8: dependencies: ansi-regex "^5.0.1" -strip-bom@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3" - integrity sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA== - -strip-final-newline@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/strip-final-newline/-/strip-final-newline-3.0.0.tgz#52894c313fbff318835280aed60ff71ebf12b8fd" - integrity sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw== - strip-json-comments@^3.1.1: version "3.1.1" resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006" integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== -strip-literal@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/strip-literal/-/strip-literal-2.1.0.tgz#6d82ade5e2e74f5c7e8739b6c84692bd65f0bd2a" - integrity sha512-Op+UycaUt/8FbN/Z2TWPBLge3jWrP3xj10f3fnYxf052bKuS3EKs1ZQcVGjnEMdsNVAM+plXRdmjrZ/KgG3Skw== - dependencies: - js-tokens "^9.0.0" - supports-color@^7.1.0: version "7.2.0" resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da" @@ -2751,35 +2169,35 @@ text-table@^0.2.0: resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" integrity sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw== -tinybench@^2.8.0: - version "2.8.0" - resolved "https://registry.yarnpkg.com/tinybench/-/tinybench-2.8.0.tgz#30e19ae3a27508ee18273ffed9ac7018949acd7b" - integrity sha512-1/eK7zUnIklz4JUUlL+658n58XO2hHLQfSk1Zf2LKieUjxidN16eKFEoDEfjHc3ohofSSqK3X5yO6VGb6iW8Lw== +tinybench@^2.9.0: + version "2.9.0" + resolved "https://registry.yarnpkg.com/tinybench/-/tinybench-2.9.0.tgz#103c9f8ba6d7237a47ab6dd1dcff77251863426b" + integrity sha512-0+DUvqWMValLmha6lr4kD8iAMK1HzV0/aKnCtWb9v9641TnP/MFb7Pc2bxoxQjTXAErryXVgUOfv2YqNllqGeg== -tinypool@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/tinypool/-/tinypool-1.0.0.tgz#a68965218e04f4ad9de037d2a1cd63cda9afb238" - integrity sha512-KIKExllK7jp3uvrNtvRBYBWBOAXSX8ZvoaD8T+7KB/QHIuoJW3Pmr60zucywjAlMb5TeXUkcs/MWeWLu0qvuAQ== +tinyexec@^0.3.1: + version "0.3.2" + resolved "https://registry.yarnpkg.com/tinyexec/-/tinyexec-0.3.2.tgz#941794e657a85e496577995c6eef66f53f42b3d2" + integrity sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA== + +tinypool@^1.0.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/tinypool/-/tinypool-1.1.1.tgz#059f2d042bd37567fbc017d3d426bdd2a2612591" + integrity sha512-Zba82s87IFq9A9XmjiX5uZA/ARWDrB03OHlq+Vw1fSdt0I+4/Kutwy8BP4Y/y/aORMo61FQ0vIb5j44vSo5Pkg== tinyrainbow@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/tinyrainbow/-/tinyrainbow-1.2.0.tgz#5c57d2fc0fb3d1afd78465c33ca885d04f02abb5" integrity sha512-weEDEq7Z5eTHPDh4xjX789+fHfF+P8boiFB+0vbWzpbnbsEr/GRaohi/uMKxg8RZMXnl1ItAi/IUHWMsjDV7kQ== -tinyspy@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/tinyspy/-/tinyspy-3.0.0.tgz#cb61644f2713cd84dee184863f4642e06ddf0585" - integrity sha512-q5nmENpTHgiPVd1cJDDc9cVoYN5x4vCvwT3FMilvKPKneCBZAxn2YWQjDF0UMcE9k0Cay1gBiDfTMU0g+mPMQA== +tinyspy@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/tinyspy/-/tinyspy-3.0.2.tgz#86dd3cf3d737b15adcf17d7887c84a75201df20a" + integrity sha512-n1cw8k1k0x4pgA2+9XrOkFydTerNcJ1zWCO5Nn9scWHTD+5tp8dghT2x1uduQePZTZgd3Tupf+x9BxJjeJi77Q== tmp@^0.2.1: - version "0.2.3" - resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.2.3.tgz#eb783cc22bc1e8bebd0671476d46ea4eb32a79ae" - integrity sha512-nZD7m9iCPC5g0pYmcaxogYKggSfLsdxl8of3Q/oIbqCqLLIO9IAF0GWjX1z9NZRHPiXv8Wex4yDCaZsgEw0Y8w== - -to-fast-properties@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-2.0.0.tgz#dc5e698cbd079265bc73e0377681a4e4e83f616e" - integrity sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog== + version "0.2.5" + resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.2.5.tgz#b06bcd23f0f3c8357b426891726d16015abfd8f8" + integrity sha512-voyz6MApa1rQGUxT3E+BK7/ROe8itEx7vD8/HEvt4xwXucvQ5G5oeEiHkmHZJuBO21RpOf+YYm9MOivj709jow== to-regex-range@^5.0.1: version "5.0.1" @@ -2788,25 +2206,10 @@ to-regex-range@^5.0.1: dependencies: is-number "^7.0.0" -tr46@~0.0.3: - version "0.0.3" - resolved "https://registry.yarnpkg.com/tr46/-/tr46-0.0.3.tgz#8184fd347dac9cdc185992f3a6622e14b9d9ab6a" - integrity sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw== - ts-api-utils@^1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/ts-api-utils/-/ts-api-utils-1.3.0.tgz#4b490e27129f1e8e686b45cc4ab63714dc60eea1" - integrity sha512-UQMIo7pb8WRomKR1/+MFVLTroIvDVtMX3K6OUir8ynLyzB8Jeriont2bTAtmNPa1ekAgN7YPDyf6V+ygrdU+eQ== - -tsconfig-paths@^3.15.0: - version "3.15.0" - resolved "https://registry.yarnpkg.com/tsconfig-paths/-/tsconfig-paths-3.15.0.tgz#5299ec605e55b1abb23ec939ef15edaf483070d4" - integrity sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg== - dependencies: - "@types/json5" "^0.0.29" - json5 "^1.0.2" - minimist "^1.2.6" - strip-bom "^3.0.0" + version "1.4.3" + resolved "https://registry.yarnpkg.com/ts-api-utils/-/ts-api-utils-1.4.3.tgz#bfc2215fe6528fecab2b0fba570a2e8a4263b064" + integrity sha512-i3eMG77UTMD0hZhgRS562pv83RC6ukSAC2GMNWc+9dieh/+jDM5u5YG+NHX6VNDRHQcHwmsTHctP9LhbC3WxVw== tslib@^2.0.1: version "2.8.1" @@ -2825,75 +2228,29 @@ type-fest@^0.20.2: resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.20.2.tgz#1bf207f4b28f91583666cb5fbd327887301cd5f4" integrity sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ== -typed-array-buffer@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/typed-array-buffer/-/typed-array-buffer-1.0.2.tgz#1867c5d83b20fcb5ccf32649e5e2fc7424474ff3" - integrity sha512-gEymJYKZtKXzzBzM4jqa9w6Q1Jjm7x2d+sh19AdsD4wqnMPDYyvwpsIc2Q/835kHuo3BEQ7CjelGhfTsoBb2MQ== - dependencies: - call-bind "^1.0.7" - es-errors "^1.3.0" - is-typed-array "^1.1.13" - -typed-array-byte-length@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/typed-array-byte-length/-/typed-array-byte-length-1.0.1.tgz#d92972d3cff99a3fa2e765a28fcdc0f1d89dec67" - integrity sha512-3iMJ9q0ao7WE9tWcaYKIptkNBuOIcZCCT0d4MRvuuH88fEoEH62IuQe0OtraD3ebQEoTRk8XCBoknUNc1Y67pw== - dependencies: - call-bind "^1.0.7" - for-each "^0.3.3" - gopd "^1.0.1" - has-proto "^1.0.3" - is-typed-array "^1.1.13" - -typed-array-byte-offset@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/typed-array-byte-offset/-/typed-array-byte-offset-1.0.2.tgz#f9ec1acb9259f395093e4567eb3c28a580d02063" - integrity sha512-Ous0vodHa56FviZucS2E63zkgtgrACj7omjwd/8lTEMEPFFyjfixMZ1ZXenpgCFBBt4EC1J2XsyVS2gkG0eTFA== - dependencies: - available-typed-arrays "^1.0.7" - call-bind "^1.0.7" - for-each "^0.3.3" - gopd "^1.0.1" - has-proto "^1.0.3" - is-typed-array "^1.1.13" - -typed-array-length@^1.0.6: - version "1.0.6" - resolved "https://registry.yarnpkg.com/typed-array-length/-/typed-array-length-1.0.6.tgz#57155207c76e64a3457482dfdc1c9d1d3c4c73a3" - integrity sha512-/OxDN6OtAk5KBpGb28T+HZc2M+ADtvRxXrKKbUwtsLgdoxgX13hyy7ek6bFRl5+aBs2yZzB0c4CnQfAtVypW/g== - dependencies: - call-bind "^1.0.7" - for-each "^0.3.3" - gopd "^1.0.1" - has-proto "^1.0.3" - is-typed-array "^1.1.13" - possible-typed-array-names "^1.0.0" - -typescript@^5.5.3: - version "5.5.3" - resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.5.3.tgz#e1b0a3c394190838a0b168e771b0ad56a0af0faa" - integrity sha512-/hreyEujaB0w76zKo6717l3L0o/qEUtRgdvUBvlkhoWeOVMjMuHNHk0BRBzikzuGDqNmPQbg5ifMEqsHLiIUcQ== - -unbox-primitive@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/unbox-primitive/-/unbox-primitive-1.0.2.tgz#29032021057d5e6cdbd08c5129c226dff8ed6f9e" - integrity sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw== - dependencies: - call-bind "^1.0.2" - has-bigints "^1.0.2" - has-symbols "^1.0.3" - which-boxed-primitive "^1.0.2" +typescript@~5.5: + version "5.5.4" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.5.4.tgz#d9852d6c82bad2d2eda4fd74a5762a8f5909e9ba" + integrity sha512-Mtq29sKDAEYP7aljRgtPOpTvOfbwRWlS6dPRzwjdE+C0R4brX/GUyhHSecbHMFLNBLcJIPt9nl9yG5TZ1weH+Q== -undici-types@~5.26.4: - version "5.26.5" - resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-5.26.5.tgz#bcd539893d00b56e964fd2657a4866b221a65617" - integrity sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA== +undici-types@~6.21.0: + version "6.21.0" + resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-6.21.0.tgz#691d00af3909be93a7faa13be61b3a5b50ef12cb" + integrity sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ== universalify@^2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/universalify/-/universalify-2.0.1.tgz#168efc2180964e6386d061e094df61afe239b18d" integrity sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw== +unplugin-utils@^0.2.4: + version "0.2.5" + resolved "https://registry.yarnpkg.com/unplugin-utils/-/unplugin-utils-0.2.5.tgz#d2fe44566ffffd7f216579bbb01184f6702e379b" + integrity sha512-gwXJnPRewT4rT7sBi/IvxKTjsms7jX7QIDLOClApuZwR49SXbrB1z2NLUZ+vDHyqCj/n58OzRRqaW+B8OZi8vg== + dependencies: + pathe "^2.0.3" + picomatch "^4.0.3" + uri-js@^4.2.2: version "4.4.1" resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.4.1.tgz#9b1a52595225859e55f669d928f88c6c57f2a77e" @@ -2912,86 +2269,70 @@ util@^0.12.5: is-typed-array "^1.1.3" which-typed-array "^1.1.2" -vite-node@2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/vite-node/-/vite-node-2.0.2.tgz#6e1958b2db655ddef8c95e6fb461bcd954b7fbbf" - integrity sha512-w4vkSz1Wo+NIQg8pjlEn0jQbcM/0D+xVaYjhw3cvarTanLLBh54oNiRbsT8PNK5GfuST0IlVXjsNRoNlqvY/fw== +vite-node@2.1.9: + version "2.1.9" + resolved "https://registry.yarnpkg.com/vite-node/-/vite-node-2.1.9.tgz#549710f76a643f1c39ef34bdb5493a944e4f895f" + integrity sha512-AM9aQ/IPrW/6ENLQg3AGY4K1N2TGZdR5e4gu/MmmR2xR3Ll1+dib+nook92g4TV3PXVyeyxdWwtaCAiUL0hMxA== dependencies: cac "^6.7.14" - debug "^4.3.5" + debug "^4.3.7" + es-module-lexer "^1.5.4" pathe "^1.1.2" - tinyrainbow "^1.2.0" vite "^5.0.0" vite@^5.0.0: - version "5.3.3" - resolved "https://registry.yarnpkg.com/vite/-/vite-5.3.3.tgz#5265b1f0a825b3b6564c2d07524777c83e3c04c2" - integrity sha512-NPQdeCU0Dv2z5fu+ULotpuq5yfCS1BzKUIPhNbP3YBfAMGJXbt2nS+sbTFu+qchaqWTD+H3JK++nRwr6XIcp6A== + version "5.4.20" + resolved "https://registry.yarnpkg.com/vite/-/vite-5.4.20.tgz#3267a5e03f21212f44edfd72758138e8fcecd76a" + integrity sha512-j3lYzGC3P+B5Yfy/pfKNgVEg4+UtcIJcVRt2cDjIOmhLourAqPqf8P7acgxeiSgUB7E3p2P8/3gNIgDLpwzs4g== dependencies: esbuild "^0.21.3" - postcss "^8.4.39" - rollup "^4.13.0" + postcss "^8.4.43" + rollup "^4.20.0" optionalDependencies: fsevents "~2.3.3" vitest@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/vitest/-/vitest-2.0.2.tgz#39a4bde8af124c848b4e9098ca339914ebe10ef9" - integrity sha512-WlpZ9neRIjNBIOQwBYfBSr0+of5ZCbxT2TVGKW4Lv0c8+srCFIiRdsP7U009t8mMn821HQ4XKgkx5dVWpyoyLw== - dependencies: - "@ampproject/remapping" "^2.3.0" - "@vitest/expect" "2.0.2" - "@vitest/pretty-format" "^2.0.2" - "@vitest/runner" "2.0.2" - "@vitest/snapshot" "2.0.2" - "@vitest/spy" "2.0.2" - "@vitest/utils" "2.0.2" - chai "^5.1.1" - debug "^4.3.5" - execa "^8.0.1" - magic-string "^0.30.10" + version "2.1.9" + resolved "https://registry.yarnpkg.com/vitest/-/vitest-2.1.9.tgz#7d01ffd07a553a51c87170b5e80fea3da7fb41e7" + integrity sha512-MSmPM9REYqDGBI8439mA4mWhV5sKmDlBKWIYbA3lRb2PTHACE0mgKwA8yQ2xq9vxDTuk4iPrECBAEW2aoFXY0Q== + dependencies: + "@vitest/expect" "2.1.9" + "@vitest/mocker" "2.1.9" + "@vitest/pretty-format" "^2.1.9" + "@vitest/runner" "2.1.9" + "@vitest/snapshot" "2.1.9" + "@vitest/spy" "2.1.9" + "@vitest/utils" "2.1.9" + chai "^5.1.2" + debug "^4.3.7" + expect-type "^1.1.0" + magic-string "^0.30.12" pathe "^1.1.2" - std-env "^3.7.0" - tinybench "^2.8.0" - tinypool "^1.0.0" + std-env "^3.8.0" + tinybench "^2.9.0" + tinyexec "^0.3.1" + tinypool "^1.0.1" tinyrainbow "^1.2.0" vite "^5.0.0" - vite-node "2.0.2" - why-is-node-running "^2.2.2" - -webidl-conversions@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-3.0.1.tgz#24534275e2a7bc6be7bc86611cc16ae0a5654871" - integrity sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ== - -whatwg-url@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-5.0.0.tgz#966454e8765462e37644d3626f6742ce8b70965d" - integrity sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw== - dependencies: - tr46 "~0.0.3" - webidl-conversions "^3.0.0" + vite-node "2.1.9" + why-is-node-running "^2.3.0" -which-boxed-primitive@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz#13757bc89b209b049fe5d86430e21cf40a89a8e6" - integrity sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg== - dependencies: - is-bigint "^1.0.1" - is-boolean-object "^1.1.0" - is-number-object "^1.0.4" - is-string "^1.0.5" - is-symbol "^1.0.3" +web-streams-polyfill@^3.0.3: + version "3.3.3" + resolved "https://registry.yarnpkg.com/web-streams-polyfill/-/web-streams-polyfill-3.3.3.tgz#2073b91a2fdb1fbfbd401e7de0ac9f8214cecb4b" + integrity sha512-d2JWLCivmZYTSIoge9MsgFCZrt571BikcWGYkjC1khllbTeDlGqZ2D8vD8E/lJa8WGWbb7Plm8/XJYV7IJHZZw== -which-typed-array@^1.1.14, which-typed-array@^1.1.15, which-typed-array@^1.1.2: - version "1.1.15" - resolved "https://registry.yarnpkg.com/which-typed-array/-/which-typed-array-1.1.15.tgz#264859e9b11a649b388bfaaf4f767df1f779b38d" - integrity sha512-oV0jmFtUky6CXfkqehVvBP/LSWJ2sy4vWMioiENyJLePrBO/yKyV9OyJySfAKosh+RYkIl5zJCNZ8/4JncrpdA== +which-typed-array@^1.1.16, which-typed-array@^1.1.2: + version "1.1.19" + resolved "https://registry.yarnpkg.com/which-typed-array/-/which-typed-array-1.1.19.tgz#df03842e870b6b88e117524a4b364b6fc689f956" + integrity sha512-rEvr90Bck4WZt9HHFC4DJMsjvu7x+r6bImz0/BrbWb7A2djJ8hnZMrWnHo9F8ssv0OMErasDhftrfROTyqSDrw== dependencies: available-typed-arrays "^1.0.7" - call-bind "^1.0.7" - for-each "^0.3.3" - gopd "^1.0.1" + 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.1: @@ -3001,7 +2342,7 @@ which@^2.0.1: dependencies: isexe "^2.0.0" -why-is-node-running@^2.2.2: +why-is-node-running@^2.3.0: version "2.3.0" resolved "https://registry.yarnpkg.com/why-is-node-running/-/why-is-node-running-2.3.0.tgz#a3f69a97107f494b3cdc3bdddd883a7d65cebf04" integrity sha512-hUrmaWBdVDcxvYqnyh09zunKzROWjbZTiNy8dBEjkS7ehEDQibXJ7XvlmtbwuTclUiIyN+CyXQD4Vmko8fNm8w== From f1834c482aa9848902c2eb44fb1fcc04ab57f0ff Mon Sep 17 00:00:00 2001 From: 95gabor Date: Thu, 18 Sep 2025 10:05:24 +0200 Subject: [PATCH 02/12] feat(trusted-timestamp): unauthorized proxy config option --- src/trustedTimestamp/TimestampRequest.ts | 12 +++++++++--- src/trustedTimestamp/TrustedTimestampRequest.ts | 2 +- .../types/timestamp-provider.type.ts | 1 + 3 files changed, 11 insertions(+), 4 deletions(-) diff --git a/src/trustedTimestamp/TimestampRequest.ts b/src/trustedTimestamp/TimestampRequest.ts index dbc3c5f..1c7cac2 100644 --- a/src/trustedTimestamp/TimestampRequest.ts +++ b/src/trustedTimestamp/TimestampRequest.ts @@ -55,8 +55,11 @@ export class TimestampRequest { /** * set request proxy * */ - setProxy(proxyUrl: string): void { - this.tsRequest.agent = new ProxyAgent({ getProxyForUrl: (): string => proxyUrl }) + setProxy(proxy: TimestampProviderProxyConfig): void { + this.tsRequest.agent = new ProxyAgent({ + getProxyForUrl: (): string => proxy.url, + rejectUnauthorized: !(proxy.allowUnauthorized ?? false) + }) } /** @@ -223,7 +226,10 @@ export class TimestampRequest { } if (proxy?.url) { - tsRequest.agent = new ProxyAgent({ getProxyForUrl: (): string => proxy.url }) + tsRequest.agent = new ProxyAgent({ + getProxyForUrl: (): string => proxy.url, + rejectUnauthorized: !(proxy.allowUnauthorized ?? false) + }) } return tsRequest diff --git a/src/trustedTimestamp/TrustedTimestampRequest.ts b/src/trustedTimestamp/TrustedTimestampRequest.ts index 681fe84..cb14cf1 100644 --- a/src/trustedTimestamp/TrustedTimestampRequest.ts +++ b/src/trustedTimestamp/TrustedTimestampRequest.ts @@ -148,7 +148,7 @@ export class TrustedTimestampRequest { const tsRequest = new TimestampRequest(this.tempFileService, this.tmpOptions, this.cleanupTempFns) if (proxy?.url) { - tsRequest.setProxy(proxy.url) + tsRequest.setProxy(proxy) } let requestType: TimestampRequestAuthTypes | undefined diff --git a/src/trustedTimestamp/types/timestamp-provider.type.ts b/src/trustedTimestamp/types/timestamp-provider.type.ts index dad496b..20195d3 100644 --- a/src/trustedTimestamp/types/timestamp-provider.type.ts +++ b/src/trustedTimestamp/types/timestamp-provider.type.ts @@ -1,5 +1,6 @@ export interface TimestampProviderProxyConfig { url: string + allowUnauthorized?: boolean } export interface TimestampProviderOAuthUrl { From 4fe3b513fc01025bada50b3a3a109af4aae16877 Mon Sep 17 00:00:00 2001 From: 95gabor Date: Thu, 18 Sep 2025 10:45:35 +0200 Subject: [PATCH 03/12] docs(proxy): add proxy documentation and docker example --- README.md | 19 ++++++++++--------- docs/proxy.md | 32 ++++++++++++++++++++++++++++++++ proxy/docker-compose.yaml | 16 ++++++++++++++++ 3 files changed, 58 insertions(+), 9 deletions(-) create mode 100644 docs/proxy.md create mode 100644 proxy/docker-compose.yaml diff --git a/README.md b/README.md index a2d3421..372b523 100644 --- a/README.md +++ b/README.md @@ -2,15 +2,16 @@ Trustedtimestamp service implements the generate and verification of timestamps. -- [Install](#install) -- [Usage](#usage) - - [Params](#params) -- [Default config](#default-config) -- [Config provider options](#config-provider-options) - - [Required fields](#required-fields) - - [Optional fields](#optional-fields) -- [Config example](#config-example) -- [Public methods](#public-methods) +- [Timestamp](#timestamp) + - [Install](#install) + - [Usage](#usage) + - [Params](#params) + - [Default config](#default-config) + - [Config provider options](#config-provider-options) + - [Required fields](#required-fields) + - [Optional fields](#optional-fields) + - [Config example](#config-example) + - [Public methods](#public-methods) ## Install diff --git a/docs/proxy.md b/docs/proxy.md new file mode 100644 index 0000000..581b903 --- /dev/null +++ b/docs/proxy.md @@ -0,0 +1,32 @@ +# Proxy configuration + +## Configure local proxy + +```shell +cd proxy +docker-compose up +``` + +## Application usage + +```json +{ + "trustedTimestamp": { + "certsLocation": "/etc/ssl/certs/", + "providers": [ + { + "name": "bteszt", + "url": "https://bteszt.e-szigno.hu/tsa", + "auth": { + "user": "", + "pass": "" + }, + "proxy": { + "url": "http://localhost:8080", + "allowUnauthorized": true + } + } + ] + } +} +``` diff --git a/proxy/docker-compose.yaml b/proxy/docker-compose.yaml new file mode 100644 index 0000000..2d50d49 --- /dev/null +++ b/proxy/docker-compose.yaml @@ -0,0 +1,16 @@ +services: + proxy: + image: mitmproxy/mitmproxy + command: + - 'mitmweb' + - '--no-web-open-browser' + - '--listen-port' + - '8080' + - '--web-host' + - '0.0.0.0' + # - '--set' + # - 'web_password=test' + tty: true + ports: + - 8080:8080 + - 127.0.0.1:8081:8081 From 567ec42cd5929154d471cab601067131d5c97bc4 Mon Sep 17 00:00:00 2001 From: 95gabor Date: Thu, 18 Sep 2025 10:54:37 +0200 Subject: [PATCH 04/12] fix(timestamp-request): set headers --- src/trustedTimestamp/TimestampRequest.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/trustedTimestamp/TimestampRequest.ts b/src/trustedTimestamp/TimestampRequest.ts index 1c7cac2..c1b6159 100644 --- a/src/trustedTimestamp/TimestampRequest.ts +++ b/src/trustedTimestamp/TimestampRequest.ts @@ -38,10 +38,10 @@ export class TimestampRequest { /** * set request header * */ - setHeader(headers: Record): void { + setHeader(headers: Record): void { this.tsRequest = { ...this.tsRequest, - ...headers + headers } } From 603dc680a7f5bb57e7cb0772cf6dc9dd0fb13007 Mon Sep 17 00:00:00 2001 From: 95gabor Date: Fri, 19 Sep 2025 11:05:31 +0200 Subject: [PATCH 05/12] fix!: npm engine node updated from v16 to v22.19 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index d3a5a32..20ecb22 100644 --- a/package.json +++ b/package.json @@ -21,7 +21,7 @@ "url": "https://github.com/TechTeamer/timestamp" }, "engines": { - "node": ">=16.20.1" + "node": ">=22.17.0" }, "scripts": { "vitest": "vitest run --config test/vitest.config.ts", From 3d0a39ea92adb7c85309ca60cd454105a1d4e0b6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Nagy=20Bal=C3=A1zs?= Date: Fri, 19 Sep 2025 12:09:49 +0200 Subject: [PATCH 06/12] chore: release --- package.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/package.json b/package.json index 20ecb22..6caa39c 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@techteamer/timestamp", - "version": "1.0.6", + "version": "1.0.7", "description": "This package contains a TimestampService, which can create and verity timestamps", "main": "src/index.ts", "author": "Techteamer", @@ -21,7 +21,7 @@ "url": "https://github.com/TechTeamer/timestamp" }, "engines": { - "node": ">=22.17.0" + "node": ">=22.0.0" }, "scripts": { "vitest": "vitest run --config test/vitest.config.ts", From 39c5db66fa9e5122202148ddbf61d8698af12978 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Nagy=20Bal=C3=A1zs?= Date: Fri, 19 Sep 2025 12:12:06 +0200 Subject: [PATCH 07/12] fix(TimestampRequest): content-length to string --- src/trustedTimestamp/TimestampRequest.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/trustedTimestamp/TimestampRequest.ts b/src/trustedTimestamp/TimestampRequest.ts index c1b6159..71a5797 100644 --- a/src/trustedTimestamp/TimestampRequest.ts +++ b/src/trustedTimestamp/TimestampRequest.ts @@ -167,7 +167,7 @@ export class TimestampRequest { this.setBody(fs.createReadStream(tempPath)) this.setHeader({ ...this.tsRequest.headers, - 'Content-length': fileSizeInBytes + 'Content-length': fileSizeInBytes.toString() }) } From d52d6acbeb4ddc2d2d2acca96d9207221b410cc7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Nagy=20Bal=C3=A1zs?= Date: Fri, 19 Sep 2025 12:13:06 +0200 Subject: [PATCH 08/12] chore: release with breaking change --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 6caa39c..8e43605 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@techteamer/timestamp", - "version": "1.0.7", + "version": "2.0.0", "description": "This package contains a TimestampService, which can create and verity timestamps", "main": "src/index.ts", "author": "Techteamer", From 4166624b8da46e896034eebc7b31483cc6edc49c Mon Sep 17 00:00:00 2001 From: 95gabor Date: Fri, 19 Sep 2025 13:23:02 +0200 Subject: [PATCH 09/12] fix(node-fetch): using ESM bundle --- src/patch/node-fetch.ts | 6 ++++++ src/trustedTimestamp/TimestampRequest.ts | 3 ++- src/trustedTimestamp/TrustedTimestampRequest.ts | 2 +- 3 files changed, 9 insertions(+), 2 deletions(-) create mode 100644 src/patch/node-fetch.ts diff --git a/src/patch/node-fetch.ts b/src/patch/node-fetch.ts new file mode 100644 index 0000000..1821826 --- /dev/null +++ b/src/patch/node-fetch.ts @@ -0,0 +1,6 @@ +import type { RequestInfo, RequestInit, Response } from 'node-fetch' + +export const fetch = async (url: URL | RequestInfo, init?: RequestInit): Promise => { + const { default: fetch } = await import('node-fetch') + return fetch(url, init) +} diff --git a/src/trustedTimestamp/TimestampRequest.ts b/src/trustedTimestamp/TimestampRequest.ts index 71a5797..6a7dd01 100644 --- a/src/trustedTimestamp/TimestampRequest.ts +++ b/src/trustedTimestamp/TimestampRequest.ts @@ -1,4 +1,5 @@ -import fetch, { BodyInit } from 'node-fetch' +import type { BodyInit } from 'node-fetch' +import { fetch } from '../patch/node-fetch' import fs from 'node:fs' import { ProxyAgent } from 'proxy-agent' import type { FileOptions } from 'tmp' diff --git a/src/trustedTimestamp/TrustedTimestampRequest.ts b/src/trustedTimestamp/TrustedTimestampRequest.ts index cb14cf1..77a3e32 100644 --- a/src/trustedTimestamp/TrustedTimestampRequest.ts +++ b/src/trustedTimestamp/TrustedTimestampRequest.ts @@ -1,5 +1,5 @@ -import fetch from 'node-fetch' import { FileOptions as TempFileOptions } from 'tmp' +import { fetch } from '../patch/node-fetch' import { TimestampRequest } from './TimestampRequest' import { TempFileService } from '../util/TempFileService' From 9cabb9ae7397d53187f8a6b53ae46acf8706d67d Mon Sep 17 00:00:00 2001 From: 95gabor Date: Fri, 19 Sep 2025 13:25:53 +0200 Subject: [PATCH 10/12] ci(yarn-vitest): bump node to v22 --- .github/workflows/yarn-vitest.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/yarn-vitest.yaml b/.github/workflows/yarn-vitest.yaml index 900da1d..31bcc11 100644 --- a/.github/workflows/yarn-vitest.yaml +++ b/.github/workflows/yarn-vitest.yaml @@ -10,7 +10,7 @@ jobs: - uses: actions/checkout@v4 - uses: actions/setup-node@v4 with: - node-version: '20' + node-version: '22' cache: 'yarn' - run: yarn install --frozen-lockfile - run: yarn test From d738d299005069b71f0cf313bb0a9a01dc0d41bf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Nagy=20Bal=C3=A1zs?= Date: Fri, 19 Sep 2025 14:55:23 +0200 Subject: [PATCH 11/12] chore: release --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 8e43605..fe859d0 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@techteamer/timestamp", - "version": "2.0.0", + "version": "2.0.1", "description": "This package contains a TimestampService, which can create and verity timestamps", "main": "src/index.ts", "author": "Techteamer", From a573091f17eab8a1ac3a78994ec9124acd4fe4ba Mon Sep 17 00:00:00 2001 From: 95gabor Date: Fri, 19 Sep 2025 16:11:06 +0200 Subject: [PATCH 12/12] chore(yarn): remove @types/node-fetch --- package.json | 1 - yarn.lock | 9 +-------- 2 files changed, 1 insertion(+), 9 deletions(-) diff --git a/package.json b/package.json index fe859d0..1ef8c5a 100644 --- a/package.json +++ b/package.json @@ -36,7 +36,6 @@ "type": "module", "dependencies": { "@techteamer/cert-utils": "^1.1.3", - "@types/node-fetch": "^3", "node-fetch": "^3", "proxy-agent": "^6.5.0", "tmp": "^0.2.1" diff --git a/yarn.lock b/yarn.lock index d7010e7..8ab62d3 100644 --- a/yarn.lock +++ b/yarn.lock @@ -429,13 +429,6 @@ resolved "https://registry.yarnpkg.com/@types/estree/-/estree-1.0.8.tgz#958b91c991b1867ced318bedea0e215ee050726e" integrity sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w== -"@types/node-fetch@^3": - version "3.0.3" - resolved "https://registry.yarnpkg.com/@types/node-fetch/-/node-fetch-3.0.3.tgz#9d969c9a748e841554a40ee435d26e53fa3ee899" - integrity sha512-HhggYPH5N+AQe/OmN6fmhKmRRt2XuNJow+R3pQwJxOOF9GuwM7O2mheyGeIrs5MOIeNjDEdgdoyHBOrFeJBR3g== - dependencies: - node-fetch "*" - "@types/node@^20.14.6": version "20.19.17" resolved "https://registry.yarnpkg.com/@types/node/-/node-20.19.17.tgz#41b52697373aef8a43b3b92f33b43f329b2d674b" @@ -1732,7 +1725,7 @@ node-domexception@^1.0.0: resolved "https://registry.yarnpkg.com/node-domexception/-/node-domexception-1.0.0.tgz#6888db46a1f71c0b76b3f7555016b63fe64766e5" integrity sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ== -node-fetch@*, node-fetch@^3: +node-fetch@^3: version "3.3.2" resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-3.3.2.tgz#d1e889bacdf733b4ff3b2b243eb7a12866a0b78b" integrity sha512-dRB78srN/l6gqWulah9SrxeYnxeddIG30+GOqK/9OlLVyLg3HPnr6SqOWTWOXKRwC2eGYCkZ59NNuSgvSrpgOA==