diff --git a/.eslintrc.js b/.eslintrc.js
index 1f88f2a..b401893 100644
--- a/.eslintrc.js
+++ b/.eslintrc.js
@@ -1,35 +1,36 @@
module.exports = {
- "env": {
- "browser": true,
- "es2021": true
+ env: {
+ browser: true,
+ es2021: true,
+ },
+ extends: 'standard-with-typescript',
+ overrides: [
+ {
+ env: {
+ node: true,
+ },
+ files: ['.eslintrc.{js,cjs}'],
+ parserOptions: {
+ sourceType: 'script',
+ },
},
- "extends": "standard-with-typescript",
- "overrides": [
- {
- "env": {
- "node": true
- },
- "files": [
- ".eslintrc.{js,cjs}"
- ],
- "parserOptions": {
- "sourceType": "script"
- }
- }
- ],
- "parserOptions": {
- "ecmaVersion": "latest",
- "sourceType": "module"
- },
- "ignorePatterns": ["**/dist/**"],
- "rules": {
- "@typescript-eslint/strict-boolean-expressions": 0,
- "@typescript-eslint/comma-dangle": 0,
- "@typescript-eslint/dot-notation": 0,
- "@typescript-eslint/indent": 0,
- "@typescript-eslint/consistent-type-definitions": 0,
- "@typescript-eslint/non-nullable-type-assertion-style": 0,
- "no-useless-catch": 0,
- "new-cap": 0,
- }
-}
+ ],
+ parserOptions: {
+ ecmaVersion: 'latest',
+ sourceType: 'module',
+ },
+ ignorePatterns: ['**/dist/**'],
+ rules: {
+ '@typescript-eslint/strict-boolean-expressions': 0,
+ '@typescript-eslint/comma-dangle': 0,
+ '@typescript-eslint/dot-notation': 0,
+ '@typescript-eslint/indent': 0,
+ '@typescript-eslint/consistent-type-definitions': 0,
+ '@typescript-eslint/non-nullable-type-assertion-style': 0,
+ '@typescript-eslint/semi': 'off',
+ '@typescript-eslint/space-before-function-paren': 'off',
+ '@typescript-eslint/member-delimiter-style': 'off',
+ 'no-useless-catch': 0,
+ 'new-cap': 0,
+ },
+};
diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml
index d00835f..1078d02 100644
--- a/.github/workflows/ci.yml
+++ b/.github/workflows/ci.yml
@@ -16,6 +16,9 @@ jobs:
- name: Check eslint rules
run: yarn run lint-ci
+ - name: Prettier
+ run: npm run prettier-ci
+
- name: Build SDK
run: yarn run build
diff --git a/.husky/pre-commit b/.husky/pre-commit
new file mode 100755
index 0000000..d24fdfc
--- /dev/null
+++ b/.husky/pre-commit
@@ -0,0 +1,4 @@
+#!/usr/bin/env sh
+. "$(dirname -- "$0")/_/husky.sh"
+
+npx lint-staged
diff --git a/.prettierrc b/.prettierrc
new file mode 100644
index 0000000..bc794bb
--- /dev/null
+++ b/.prettierrc
@@ -0,0 +1,9 @@
+{
+ "semi": true,
+ "trailingComma": "all",
+ "singleQuote": true,
+ "printWidth": 80,
+ "tabWidth": 2,
+ "arrowParens": "avoid"
+ }
+
\ No newline at end of file
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 02fcfc8..159de39 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -2,11 +2,6 @@
All notable changes to this project will be documented in this file. Dates are displayed in UTC.
-#### [v1.0.17](https://github.com/ObolNetwork/obol-sdk/compare/v1.0.16...v1.0.17)
-
-- revert back to using git changelog [`#46`](https://github.com/ObolNetwork/obol-sdk/pull/46)
-- Hanan/ta nd c [`#44`](https://github.com/ObolNetwork/obol-sdk/pull/44)
-
#### [v1.0.16](https://github.com/ObolNetwork/obol-sdk/compare/v1.0.15...v1.0.16)
> 24 May 2024
diff --git a/README.md b/README.md
index 968a60b..a4a8d90 100644
--- a/README.md
+++ b/README.md
@@ -1,15 +1,15 @@
-![Obol Logo](https://obol.tech/obolnetwork.png)
+![Obol Logo](https://obol.org/obolnetwork.png)
Obol SDK
-This repo contains the Obol Software Development Kit, for creating Distributed Validators with the help of the [Obol API](https://docs.obol.tech/api).
+This repo contains the Obol Software Development Kit, for creating Distributed Validators with the help of the [Obol API](https://docs.obol.org/api).
## Getting Started
-Checkout our [docs](https://docs.obol.tech/docs/advanced/quickstart-sdk), [examples](https://github.com/ObolNetwork/obol-sdk-examples/), and SDK [reference](https://obolnetwork.github.io/obol-sdk). Further guides and walkthroughs coming soon.
+Checkout our [docs](https://docs.obol.org/docs/advanced/quickstart-sdk), [examples](https://github.com/ObolNetwork/obol-sdk-examples/), and SDK [reference](https://obolnetwork.github.io/obol-sdk). Further guides and walkthroughs coming soon.
## Terms and Conditions
-To use obol-sdk and in order to be able to create a cluster definition or accept an invite to join a cluster, you must accept the [latest Obol terms and conditions](https://obol.tech/terms.pdf) by calling acceptObolLatestTermsAndConditions.
+To use obol-sdk and in order to be able to create a cluster definition or accept an invite to join a cluster, you must accept the [latest Obol terms and conditions](https://obol.org/terms.pdf) by calling acceptObolLatestTermsAndConditions.
## Contributing
diff --git a/lint-staged.config.js b/lint-staged.config.js
new file mode 100644
index 0000000..33560ab
--- /dev/null
+++ b/lint-staged.config.js
@@ -0,0 +1,7 @@
+module.exports = {
+ // This will lint and format TypeScript
+ '**/*.(ts|tsx)': filenames => [
+ `npx eslint --fix ${filenames.join(' ')}`,
+ `npx prettier --write ${filenames.join(' ')}`,
+ ],
+ }
diff --git a/package.json b/package.json
index fd56209..3c8f843 100644
--- a/package.json
+++ b/package.json
@@ -1,11 +1,11 @@
{
"name": "@obolnetwork/obol-sdk",
- "version": "1.0.17",
+ "version": "1.0.16",
"description": "A package for creating Distributed Validators using the Obol API.",
"bugs": {
"url": "https://github.com/obolnetwork/obol-sdk/issues"
},
- "homepage": "https://docs.obol.tech/",
+ "homepage": "https://docs.obol.org/",
"keywords": [
"Obol",
"Distributed Validators",
@@ -20,13 +20,15 @@
"npm:publish": "npm publish --tag latest",
"release": "release-it",
"release:dry": "release-it --dry-run --no-npm",
- "lint": "eslint \"{src,apps,libs,test}/**/*.ts\" --fix",
- "lint-ci": "eslint \"{src,apps,libs,test}/**/*.ts\""
+ "lint": "eslint \"{src,test}/**/*.{js,ts}\" --fix",
+ "lint-ci": "eslint \"{src,test}/**/*.{js,ts}\"",
+ "prettier-ci": "prettier --check \"{src,test}/**/*.{js,ts}\"",
+ "prettier": "prettier --write \"{src,test}/**/*.{js,ts}\""
},
"main": "./dist/cjs/src/index.js",
"module": "./dist/esm/src/index.js",
"typings": "./dist/types/src/index.d.ts",
- "author": "Obol Labs (https://obol.tech)",
+ "author": "Obol Labs (https://obol.org)",
"repository": {
"type": "git",
"url": "git+https://github.com/obolnetwork/obol-sdk.git"
@@ -65,15 +67,18 @@
"@types/semver": "^7.5.8",
"@types/uuid": "^9.0.1",
"eslint": "^8.57.0",
+ "husky": "^9.0.11",
"jest": "^28.1.3",
+ "lint-staged": "^15.2.2",
"msw": "^2.2.1",
"npm-run-all": "^4.1.5",
+ "prettier": "^3.2.5",
"release-it": "^17.2.1",
"ts-jest": "^28.0.8",
"tsup": "^6.7.0",
"typedoc": "^0.25.7",
"typedoc-plugin-markdown": "^4.0.0-next.50",
- "typescript": "^5.3.3"
+ "typescript": "~5.3.3"
},
"engines": {
"node": ">= 16"
diff --git a/src/ajv.ts b/src/ajv.ts
index 693b83e..c02d511 100644
--- a/src/ajv.ts
+++ b/src/ajv.ts
@@ -1,16 +1,47 @@
-import Ajv, { type ErrorObject } from 'ajv'
+import Ajv, { type ErrorObject } from 'ajv';
+import { parseUnits } from 'ethers';
-export function validatePayload (
+function validDepositAmounts(data: boolean, deposits: string[]): boolean {
+ let sum = 0;
+ // from ether togwei is same as from gwei to wei
+ const maxDeposit = Number(parseUnits('32', 'gwei'));
+ const minDeposit = Number(parseUnits('1', 'gwei'));
+
+ for (const element of deposits) {
+ const amountInGWei = Number(element);
+
+ if (
+ !Number.isInteger(amountInGWei) ||
+ amountInGWei > maxDeposit ||
+ amountInGWei < minDeposit
+ ) {
+ return false;
+ }
+ sum += amountInGWei;
+ }
+ if (sum / minDeposit !== 32) {
+ return false;
+ } else {
+ return true;
+ }
+}
+
+export function validatePayload(
data: any,
schema: any,
): ErrorObject[] | undefined | null | boolean {
- const ajv = new Ajv()
- const validate = ajv.compile(schema)
- const isValid = validate(data)
+ const ajv = new Ajv();
+ ajv.addKeyword({
+ keyword: 'validDepositAmounts',
+ validate: validDepositAmounts,
+ errors: true,
+ });
+ const validate = ajv.compile(schema);
+ const isValid = validate(data);
if (!isValid) {
throw new Error(
`Schema compilation errors', ${validate.errors?.[0].message}`,
- )
+ );
}
- return isValid
+ return isValid;
}
diff --git a/src/base.ts b/src/base.ts
index ef5bfc3..b203473 100644
--- a/src/base.ts
+++ b/src/base.ts
@@ -1,31 +1,35 @@
// src/resources/base.ts
-import { DEFAULT_BASE_URL, DEFAULT_CHAIN_ID, SDK_VERSION } from './constants.js'
-import { FORK_MAPPING } from './types.js'
+import {
+ DEFAULT_BASE_URL,
+ DEFAULT_CHAIN_ID,
+ SDK_VERSION,
+} from './constants.js';
+import { FORK_MAPPING } from './types.js';
interface Config {
- baseUrl?: string
- chainId?: FORK_MAPPING
+ baseUrl?: string;
+ chainId?: FORK_MAPPING;
}
export abstract class Base {
- baseUrl: string
- chainId: number
- fork_version: string
+ baseUrl: string;
+ chainId: number;
+ fork_version: string;
- constructor ({
+ constructor({
baseUrl = DEFAULT_BASE_URL,
chainId = DEFAULT_CHAIN_ID,
}: Config) {
- this.baseUrl = baseUrl
- this.chainId = chainId
- this.fork_version = FORK_MAPPING[this.chainId]
+ this.baseUrl = baseUrl;
+ this.chainId = chainId;
+ this.fork_version = FORK_MAPPING[this.chainId];
}
protected async request(
endpoint: string,
options?: RequestInit,
): Promise {
- const url = `${this.baseUrl}${endpoint}`
+ const url = `${this.baseUrl}${endpoint}`;
const config = {
...options,
headers: {
@@ -33,18 +37,18 @@ export abstract class Base {
'User-Agent': `Obol-SDK/${SDK_VERSION}`,
...options?.headers,
},
- }
+ };
try {
- const response = await fetch(url, config)
+ const response = await fetch(url, config);
if (response.ok) {
- return await response.json()
+ return await response.json();
} else {
- const errorResponse = await response.json()
- throw errorResponse
+ const errorResponse = await response.json();
+ throw errorResponse;
}
} catch (e: any) {
- throw e
+ throw e;
}
}
}
diff --git a/src/constants.ts b/src/constants.ts
index aca2ad6..1d561d4 100644
--- a/src/constants.ts
+++ b/src/constants.ts
@@ -1,61 +1,61 @@
-import { type TypedMessage } from '@metamask/eth-sig-util'
-import { type TypedDataDomain } from 'ethers'
-import * as pjson from '../package.json'
+import { type TypedMessage } from '@metamask/eth-sig-util';
+import { type TypedDataDomain } from 'ethers';
+import * as pjson from '../package.json';
-export const CONFLICT_ERROR_MSG = 'Conflict'
+export const CONFLICT_ERROR_MSG = 'Conflict';
-export const EIP712_DOMAIN_NAME = 'Obol'
-export const EIP712_DOMAIN_VERSION = '1'
+export const EIP712_DOMAIN_NAME = 'Obol';
+export const EIP712_DOMAIN_VERSION = '1';
export const CreatorConfigHashSigningTypes = {
CreatorConfigHash: [{ name: 'creator_config_hash', type: 'string' }],
-}
+};
export const TermsAndConditionsSigningTypes = {
TermsAndConditions: [
{ name: 'terms_and_conditions_hash', type: 'string' },
{ name: 'version', type: 'uint256' },
- ]
-}
+ ],
+};
const EIP712Domain = [
{ name: 'name', type: 'string' },
{ name: 'version', type: 'string' },
{ name: 'chainId', type: 'uint256' },
-]
+];
export const Domain = (chainId?: number): TypedDataDomain => {
const typeDataDomain: any = {
name: EIP712_DOMAIN_NAME,
version: EIP712_DOMAIN_VERSION,
- }
+ };
if (chainId) {
- typeDataDomain.chainId = chainId
+ typeDataDomain.chainId = chainId;
}
- return typeDataDomain
-}
+ return typeDataDomain;
+};
export const CreatorTypedMessage = {
EIP712Domain,
...CreatorConfigHashSigningTypes,
-}
+};
// A conflict once updateDefinition is merged
export const EnrSigningTypes = {
ENR: [{ name: 'enr', type: 'string' }],
-}
+};
export const OperatorConfigHashSigningTypes = {
OperatorConfigHash: [{ name: 'operator_config_hash', type: 'string' }],
-}
+};
export const OperatorTypedMessage = {
EIP712Domain,
...OperatorConfigHashSigningTypes,
-}
+};
export const ENRTypedMessage = {
EIP712Domain,
...EnrSigningTypes,
-}
+};
export const signCreatorConfigHashPayload = (
payload: { creator_config_hash: string },
@@ -70,8 +70,8 @@ export const signCreatorConfigHashPayload = (
chainId,
},
message: payload,
- }
-}
+ };
+};
export const signOperatorConfigHashPayload = (
payload: { operator_config_hash: string },
@@ -86,8 +86,8 @@ export const signOperatorConfigHashPayload = (
chainId,
},
message: payload,
- }
-}
+ };
+};
export const signEnrPayload = (
payload: { enr: string },
@@ -102,19 +102,19 @@ export const signEnrPayload = (
chainId,
},
message: payload,
- }
-}
+ };
+};
-export const DKG_ALGORITHM = 'default'
+export const DKG_ALGORITHM = 'default';
-export const CONFIG_VERSION = 'v1.7.0'
+export const CONFIG_VERSION = 'v1.8.0';
-export const SDK_VERSION = pjson.version
+export const SDK_VERSION = pjson.version;
-export const DOMAIN_APPLICATION_BUILDER = '00000001'
-export const DOMAIN_DEPOSIT = '03000000'
+export const DOMAIN_APPLICATION_BUILDER = '00000001';
+export const DOMAIN_DEPOSIT = '03000000';
export const GENESIS_VALIDATOR_ROOT =
- '0000000000000000000000000000000000000000000000000000000000000000'
+ '0000000000000000000000000000000000000000000000000000000000000000';
// Flow used to create definition
export enum DefinitionFlow {
@@ -123,10 +123,16 @@ export enum DefinitionFlow {
Charon = 'Charon-Command',
}
-export const DEFAULT_BASE_URL = 'https://api.obol.tech'
-export const DEFAULT_CHAIN_ID = 17000
+export const DEFAULT_BASE_URL = 'https://api.obol.tech';
+export const DEFAULT_BASE_VERSION = 'v1';
+export const DEFAULT_CHAIN_ID = 17000;
-export const ETHER_TO_GWEI = 10 ** 9
+export const ETHER_TO_GWEI = 10 ** 9;
-export const TERMS_AND_CONDITIONS_VERSION = 1
-export const TERMS_AND_CONDITIONS_URL = (TERMS_AND_CONDITIONS_VERSION === 1) ? 'https://obol.tech/terms.pdf' : `https://obol.tech/${TERMS_AND_CONDITIONS_VERSION as number}/terms.pdf`
+export const TERMS_AND_CONDITIONS_VERSION = 1;
+export const TERMS_AND_CONDITIONS_URL =
+ TERMS_AND_CONDITIONS_VERSION === 1
+ ? 'https://obol.org/terms.pdf'
+ : `https://obol.org/${TERMS_AND_CONDITIONS_VERSION as number}/terms.pdf`;
+export const TERMS_AND_CONDITIONS_HASH =
+ '0xd33721644e8f3afab1495a74abe3523cec12d48b8da6cb760972492ca3f1a273';
diff --git a/src/errors.ts b/src/errors.ts
index f7683bf..a6b0f22 100644
--- a/src/errors.ts
+++ b/src/errors.ts
@@ -1,8 +1,8 @@
export class ConflictError extends Error {
- name = 'ConflictError'
+ name = 'ConflictError';
- constructor () {
- super('This Cluster has been already posted.')
- Object.setPrototypeOf(this, ConflictError.prototype)
+ constructor() {
+ super('This Cluster has been already posted.');
+ Object.setPrototypeOf(this, ConflictError.prototype);
}
}
diff --git a/src/index.ts b/src/index.ts
index 6556700..4fe4cb0 100644
--- a/src/index.ts
+++ b/src/index.ts
@@ -1,6 +1,6 @@
-import { type Signer } from 'ethers'
-import { v4 as uuidv4 } from 'uuid'
-import { Base } from './base.js'
+import { type Signer } from 'ethers';
+import { v4 as uuidv4 } from 'uuid';
+import { Base } from './base.js';
import {
CONFLICT_ERROR_MSG,
CreatorConfigHashSigningTypes,
@@ -11,26 +11,27 @@ import {
EnrSigningTypes,
TERMS_AND_CONDITIONS_VERSION,
TermsAndConditionsSigningTypes,
-} from './constants.js'
-import { ConflictError } from './errors.js'
+ DEFAULT_BASE_VERSION,
+ TERMS_AND_CONDITIONS_HASH,
+} from './constants.js';
+import { ConflictError } from './errors.js';
import {
type ClusterDefinition,
type ClusterLock,
type ClusterPayload,
type OperatorPayload,
-} from './types.js'
-import { clusterConfigOrDefinitionHash } from './verification/common.js'
-import { validatePayload } from './ajv.js'
-import { definitionSchema, operatorPayloadSchema } from './schema.js'
-import { hashTermsAndConditions } from './verification/termsAndConditions.js'
-export * from './types.js'
-export * from './services.js'
+} from './types.js';
+import { clusterConfigOrDefinitionHash } from './verification/common.js';
+import { validatePayload } from './ajv.js';
+import { definitionSchema, operatorPayloadSchema } from './schema.js';
+export * from './types.js';
+export * from './services.js';
/**
* Obol sdk Client can be used for creating, managing and activating distributed validators.
*/
export class Client extends Base {
- private readonly signer: Signer | undefined
+ private readonly signer: Signer | undefined;
/**
* @param config - Client configurations
@@ -42,12 +43,9 @@ export class Client extends Base {
* An example of how to instantiate obol-sdk Client:
* [obolClient](https://github.com/ObolNetwork/obol-sdk-examples/blob/main/TS-Example/index.ts#L29)
*/
- constructor (
- config: { baseUrl?: string, chainId?: number },
- signer?: Signer,
- ) {
- super(config)
- this.signer = signer
+ constructor(config: { baseUrl?: string; chainId?: number }, signer?: Signer) {
+ super(config);
+ this.signer = signer;
}
/**
@@ -58,17 +56,19 @@ export class Client extends Base {
* An example of how to use acceptObolLatestTermsAndConditions:
* [acceptObolLatestTermsAndConditions](https://github.com/ObolNetwork/obol-sdk-examples/blob/main/TS-Example/index.ts#L44)
*/
- async acceptObolLatestTermsAndConditions (): Promise {
- if (!this.signer) { throw new Error('Signer is required in acceptObolTermsAndConditions') }
+ async acceptObolLatestTermsAndConditions(): Promise {
+ if (!this.signer) {
+ throw new Error('Signer is required in acceptObolTermsAndConditions');
+ }
try {
- const termsAndConditionsHash = await hashTermsAndConditions()
- const address = await this.signer.getAddress()
+ const termsAndConditionsHash = TERMS_AND_CONDITIONS_HASH;
+ const address = await this.signer.getAddress();
const termsAndConditionsPayload = {
address,
version: TERMS_AND_CONDITIONS_VERSION,
- terms_and_conditions_hash: termsAndConditionsHash
- }
+ terms_and_conditions_hash: termsAndConditionsHash,
+ };
const termsAndConditionsSignature = await this.signer.signTypedData(
Domain(),
@@ -77,21 +77,22 @@ export class Client extends Base {
terms_and_conditions_hash: termsAndConditionsHash,
version: TERMS_AND_CONDITIONS_VERSION,
},
- )
+ );
- const termsAndConditionsResponse: { message: string, success: boolean } = await this.request('/termsAndConditions', {
- method: 'POST',
- body: JSON.stringify(termsAndConditionsPayload),
- headers: {
- Authorization: `Bearer ${termsAndConditionsSignature}`,
- },
- })
- return termsAndConditionsResponse?.message
+ const termsAndConditionsResponse: { message: string; success: boolean } =
+ await this.request(`/${DEFAULT_BASE_VERSION}/termsAndConditions`, {
+ method: 'POST',
+ body: JSON.stringify(termsAndConditionsPayload),
+ headers: {
+ Authorization: `Bearer ${termsAndConditionsSignature}`,
+ },
+ });
+ return termsAndConditionsResponse?.message;
} catch (err: any) {
if (err?.message === CONFLICT_ERROR_MSG) {
- throw new ConflictError()
+ throw new ConflictError();
}
- throw err
+ throw err;
}
}
@@ -104,10 +105,12 @@ export class Client extends Base {
* An example of how to use createClusterDefinition:
* [createObolCluster](https://github.com/ObolNetwork/obol-sdk-examples/blob/main/TS-Example/index.ts#L59)
*/
- async createClusterDefinition (newCluster: ClusterPayload): Promise {
- if (!this.signer) { throw new Error('Signer is required in createClusterDefinition') }
+ async createClusterDefinition(newCluster: ClusterPayload): Promise {
+ if (!this.signer) {
+ throw new Error('Signer is required in createClusterDefinition');
+ }
- validatePayload(newCluster, definitionSchema)
+ validatePayload(newCluster, definitionSchema);
const clusterConfig: Partial = {
...newCluster,
@@ -118,37 +121,42 @@ export class Client extends Base {
timestamp: new Date().toISOString(),
threshold: Math.ceil((2 * newCluster.operators.length) / 3),
num_validators: newCluster.validators.length,
- }
-
+ deposit_amounts: newCluster.deposit_amounts
+ ? newCluster.deposit_amounts
+ : ['32000000000'],
+ };
try {
- const address = await this.signer.getAddress()
+ const address = await this.signer.getAddress();
- clusterConfig.creator = { address }
+ clusterConfig.creator = { address };
clusterConfig.config_hash = clusterConfigOrDefinitionHash(
clusterConfig as ClusterDefinition,
true,
- )
+ );
const creatorConfigSignature = await this.signer.signTypedData(
Domain(this.chainId),
CreatorConfigHashSigningTypes,
{ creator_config_hash: clusterConfig.config_hash },
- )
-
- const clusterDefinition: ClusterDefinition = await this.request('/v1/definition', {
- method: 'POST',
- body: JSON.stringify(clusterConfig),
- headers: {
- Authorization: `Bearer ${creatorConfigSignature}`,
- 'fork-version': this.fork_version,
+ );
+
+ const clusterDefinition: ClusterDefinition = await this.request(
+ `/${DEFAULT_BASE_VERSION}/definition`,
+ {
+ method: 'POST',
+ body: JSON.stringify(clusterConfig),
+ headers: {
+ Authorization: `Bearer ${creatorConfigSignature}`,
+ 'fork-version': this.fork_version,
+ },
},
- })
- return clusterDefinition?.config_hash
+ );
+ return clusterDefinition?.config_hash;
} catch (err: any) {
if (err?.message === CONFLICT_ERROR_MSG) {
- throw new ConflictError()
+ throw new ConflictError();
}
- throw err
+ throw err;
}
}
@@ -162,36 +170,38 @@ export class Client extends Base {
* An example of how to use acceptClusterDefinition:
* [acceptClusterDefinition](https://github.com/ObolNetwork/obol-sdk-examples/blob/main/TS-Example/index.ts#L106)
*/
- async acceptClusterDefinition (
+ async acceptClusterDefinition(
operatorPayload: OperatorPayload,
configHash: string,
): Promise {
- if (!this.signer) { throw new Error('Signer is required in acceptClusterDefinition') }
+ if (!this.signer) {
+ throw new Error('Signer is required in acceptClusterDefinition');
+ }
- validatePayload(operatorPayload, operatorPayloadSchema)
+ validatePayload(operatorPayload, operatorPayloadSchema);
try {
- const address = await this.signer.getAddress()
+ const address = await this.signer.getAddress();
const operatorConfigSignature = await this.signer.signTypedData(
Domain(this.chainId),
OperatorConfigHashSigningTypes,
{ operator_config_hash: configHash },
- )
+ );
const operatorENRSignature = await this.signer.signTypedData(
Domain(this.chainId),
EnrSigningTypes,
{ enr: operatorPayload.enr },
- )
+ );
const operatorData: OperatorPayload = {
...operatorPayload,
address,
enr_signature: operatorENRSignature,
fork_version: this.fork_version,
- }
+ };
const clusterDefinition: ClusterDefinition = await this.request(
- `/v1/definition/${configHash}`,
+ `/${DEFAULT_BASE_VERSION}/definition/${configHash}`,
{
method: 'PUT',
body: JSON.stringify(operatorData),
@@ -199,10 +209,10 @@ export class Client extends Base {
Authorization: `Bearer ${operatorConfigSignature}`,
},
},
- )
- return clusterDefinition
+ );
+ return clusterDefinition;
} catch (err: any) {
- throw err
+ throw err;
}
}
@@ -214,15 +224,15 @@ export class Client extends Base {
* An example of how to use getClusterDefinition:
* [getObolClusterDefinition](https://github.com/ObolNetwork/obol-sdk-examples/blob/main/TS-Example/index.ts#L74)
*/
- async getClusterDefinition (configHash: string): Promise {
+ async getClusterDefinition(configHash: string): Promise {
const clusterDefinition: ClusterDefinition = await this.request(
- `/dv/${configHash}`,
+ `/${DEFAULT_BASE_VERSION}/definition/${configHash}`,
{
method: 'GET',
},
- )
+ );
- return clusterDefinition
+ return clusterDefinition;
}
/**
@@ -233,13 +243,13 @@ export class Client extends Base {
* An example of how to use getClusterLock:
* [getObolClusterLock](https://github.com/ObolNetwork/obol-sdk-examples/blob/main/TS-Example/index.ts#L89)
*/
- async getClusterLock (configHash: string): Promise {
+ async getClusterLock(configHash: string): Promise {
const lock: ClusterLock = await this.request(
- `/lock/configHash/${configHash}`,
+ `/${DEFAULT_BASE_VERSION}/lock/configHash/${configHash}`,
{
method: 'GET',
},
- )
- return lock
+ );
+ return lock;
}
}
diff --git a/src/schema.ts b/src/schema.ts
index d431816..9f6788f 100644
--- a/src/schema.ts
+++ b/src/schema.ts
@@ -9,7 +9,7 @@ export const operatorPayloadSchema = {
},
},
required: ['version', 'enr'],
-}
+};
export const definitionSchema = {
type: 'object',
@@ -53,6 +53,14 @@ export const definitionSchema = {
required: ['fee_recipient_address', 'withdrawal_address'],
},
},
+ deposit_amounts: {
+ type: 'array',
+ items: {
+ type: 'string',
+ pattern: '^[0-9]+$',
+ },
+ validDepositAmounts: true,
+ },
},
required: ['name', 'operators', 'validators'],
-}
+};
diff --git a/src/services.ts b/src/services.ts
index e29a0d4..52aa69b 100644
--- a/src/services.ts
+++ b/src/services.ts
@@ -1,5 +1,5 @@
-import { type ClusterLock } from './types.js'
-import { isValidClusterLock } from './verification/common.js'
+import { type ClusterLock } from './types.js';
+import { isValidClusterLock } from './verification/common.js';
/**
* Verifies Cluster Lock's validity.
@@ -14,9 +14,9 @@ export const validateClusterLock = async (
lock: ClusterLock,
): Promise => {
try {
- const isLockValid = await isValidClusterLock(lock)
- return isLockValid
+ const isLockValid = await isValidClusterLock(lock);
+ return isLockValid;
} catch (err: any) {
- throw err
+ throw err;
}
-}
+};
diff --git a/src/types.ts b/src/types.ts
index 3a0cddf..ef68d71 100644
--- a/src/types.ts
+++ b/src/types.ts
@@ -20,104 +20,104 @@ export enum FORK_MAPPING {
*/
export type ClusterOperator = {
/** The operator address. */
- address: string
+ address: string;
/** The operator ethereum node record. */
- enr?: string
+ enr?: string;
/** The cluster fork_version. */
- fork_version?: string
+ fork_version?: string;
/** The cluster version. */
- version?: string
+ version?: string;
/** The operator enr signature. */
- enr_signature?: string
+ enr_signature?: string;
/** The operator configuration signature. */
- config_signature?: string
-}
+ config_signature?: string;
+};
/**
* A partial view of `ClusterOperator` with `enr` and `version` as required properties.
*/
export type OperatorPayload = Partial &
- Required>
+ Required>;
/**
* Cluster creator data
*/
export type ClusterCreator = {
/** The creator address. */
- address: string
+ address: string;
/** The cluster configuration signature. */
- config_signature?: string
-}
+ config_signature?: string;
+};
/**
* Validator withdrawal configuration
*/
export type ClusterValidator = {
/** The validator fee recipient address. */
- fee_recipient_address: string
+ fee_recipient_address: string;
/** The validator reward address. */
- withdrawal_address: string
-}
+ withdrawal_address: string;
+};
/**
* Cluster configuration
*/
export type ClusterPayload = {
/** The cluster name. */
- name: string
+ name: string;
/** The cluster nodes operators addresses. */
- operators: ClusterOperator[]
+ operators: ClusterOperator[];
/** The cluster validators information. */
- validators: ClusterValidator[]
+ validators: ClusterValidator[];
/** The cluster partial deposits in gwei or 32000000000. */
- deposit_amounts?: string[]
-}
+ deposit_amounts?: string[];
+};
/**
* Cluster definition data needed for dkg
*/
export interface ClusterDefinition extends ClusterPayload {
/** The creator of the cluster. */
- creator: ClusterCreator
+ creator: ClusterCreator;
/** The cluster configuration version. */
- version: string
+ version: string;
/** The cluster dkg algorithm. */
- dkg_algorithm: string
+ dkg_algorithm: string;
/** The cluster fork version. */
- fork_version: string
+ fork_version: string;
/** The cluster uuid. */
- uuid: string
+ uuid: string;
/** The cluster creation timestamp. */
- timestamp: string
+ timestamp: string;
/** The cluster configuration hash. */
- config_hash: string
+ config_hash: string;
/** The distributed validator threshold. */
- threshold: number
+ threshold: number;
/** The number of distributed validators in the cluster. */
- num_validators: number
+ num_validators: number;
/** The cluster partial deposits in gwei or 32000000000. */
- deposit_amounts?: string[]
+ deposit_amounts?: string[];
/** The hash of the cluster definition. */
- definition_hash?: string
+ definition_hash?: string;
}
/**
@@ -125,85 +125,85 @@ export interface ClusterDefinition extends ClusterPayload {
*/
export type BuilderRegistrationMessage = {
/** The DV fee recipient. */
- fee_recipient: string
+ fee_recipient: string;
/** Default is 30000000. */
- gas_limit: number
+ gas_limit: number;
/** Timestamp when generating cluster lock file. */
- timestamp: number
+ timestamp: number;
/** The public key of the DV. */
- pubkey: string
-}
+ pubkey: string;
+};
/**
* Pre-generated Signed Validator Builder Registration
*/
export type BuilderRegistration = {
/** Builder registration message. */
- message: BuilderRegistrationMessage
+ message: BuilderRegistrationMessage;
/** BLS signature of the builder registration message. */
- signature: string
-}
+ signature: string;
+};
/**
* Required deposit data for validator activation
*/
export type DepositData = {
/** The public key of the distributed validator. */
- pubkey: string
+ pubkey: string;
/** The 0x01 withdrawal address of the DV. */
- withdrawal_credentials: string
+ withdrawal_credentials: string;
/** 32 ethers. */
- amount: string
+ amount: string;
/** A checksum for DepositData fields . */
- deposit_data_root: string
+ deposit_data_root: string;
/** BLS signature of the deposit message. */
- signature: string
-}
+ signature: string;
+};
/**
* Required deposit data for validator activation
*/
export type DistributedValidator = {
/** The public key of the distributed validator. */
- distributed_public_key: string
+ distributed_public_key: string;
/** The public key of the node distributed validator share. */
- public_shares: string[]
+ public_shares: string[];
/** The deposit data for activating the DV. */
- deposit_data?: Partial
+ deposit_data?: Partial;
/** The deposit data with partial amounts or full amount for activating the DV. */
- partial_deposit_data?: Array>
+ partial_deposit_data?: Array>;
/** pre-generated signed validator builder registration to be sent to builder network. */
- builder_registration?: BuilderRegistration
-}
+ builder_registration?: BuilderRegistration;
+};
/**
* Cluster Details after DKG is complete
*/
export type ClusterLock = {
/** The cluster definition. */
- cluster_definition: ClusterDefinition
+ cluster_definition: ClusterDefinition;
/** The cluster distributed validators. */
- distributed_validators: DistributedValidator[]
+ distributed_validators: DistributedValidator[];
/** The cluster bls signature aggregate. */
- signature_aggregate: string
+ signature_aggregate: string;
/** The hash of the cluster lock. */
- lock_hash: string
+ lock_hash: string;
/** Node Signature for the lock hash by the node secp256k1 key. */
- node_signatures?: string[]
-}
+ node_signatures?: string[];
+};
diff --git a/src/utils.ts b/src/utils.ts
index 82b43ae..736f822 100644
--- a/src/utils.ts
+++ b/src/utils.ts
@@ -1,13 +1,13 @@
-import { DefinitionFlow } from './constants'
-import { type ClusterDefinition } from './types'
+import { DefinitionFlow } from './constants';
+import { type ClusterDefinition } from './types';
export const hexWithout0x = (hex: string): string => {
- return hex.slice(2, hex.length)
-}
+ return hex.slice(2, hex.length);
+};
export const strToUint8Array = (str: string): Uint8Array => {
- return new TextEncoder().encode(str)
-}
+ return new TextEncoder().encode(str);
+};
export const definitionFlow = (
clusterDefinition: ClusterDefinition,
@@ -15,42 +15,42 @@ export const definitionFlow = (
if (
clusterDefinition.creator.address &&
clusterDefinition.creator.config_signature &&
- clusterDefinition.operators.every((operator) => {
+ clusterDefinition.operators.every(operator => {
return (
operator.address &&
operator.config_signature &&
operator.enr &&
operator.enr_signature
- )
+ );
})
) {
- return DefinitionFlow.Group
+ return DefinitionFlow.Group;
} else if (
clusterDefinition.creator.address &&
clusterDefinition.creator.config_signature &&
- clusterDefinition.operators.every((operator) => {
+ clusterDefinition.operators.every(operator => {
return (
!operator.address &&
!operator.config_signature &&
operator.enr &&
!operator.enr_signature
- )
+ );
})
) {
- return DefinitionFlow.Solo
+ return DefinitionFlow.Solo;
} else if (
!clusterDefinition.creator.address &&
!clusterDefinition.creator.config_signature &&
- clusterDefinition.operators.every((operator) => {
+ clusterDefinition.operators.every(operator => {
return (
!operator.address &&
!operator.config_signature &&
operator.enr &&
!operator.enr_signature
- )
+ );
})
) {
- return DefinitionFlow.Charon
+ return DefinitionFlow.Charon;
}
- return null
-}
+ return null;
+};
diff --git a/src/verification/common.ts b/src/verification/common.ts
index cf527fc..16bc631 100644
--- a/src/verification/common.ts
+++ b/src/verification/common.ts
@@ -1,22 +1,53 @@
+import { fromHexString } from '@chainsafe/ssz';
+import elliptic from 'elliptic';
+import { init } from '@chainsafe/bls';
+
+import {
+ FORK_MAPPING,
+ type ClusterDefinition,
+ type ClusterLock,
+ type DepositData,
+ type BuilderRegistrationMessage,
+ type DistributedValidator,
+} from '../types.js';
+import * as semver from 'semver';
+import {
+ clusterDefinitionContainerTypeV1X6,
+ hashClusterDefinitionV1X6,
+ hashClusterLockV1X6,
+ verifyDVV1X6,
+} from './v1.6.0.js';
import {
- fromHexString,
-} from '@chainsafe/ssz'
-import elliptic from 'elliptic'
+ clusterDefinitionContainerTypeV1X7,
+ hashClusterDefinitionV1X7,
+ hashClusterLockV1X7,
+ verifyDVV1X7,
+} from './v1.7.0.js';
+import { ethers } from 'ethers';
import {
- init,
-} from '@chainsafe/bls'
-
-import { FORK_MAPPING, type ClusterDefinition, type ClusterLock, type DepositData, type BuilderRegistrationMessage, type DistributedValidator } from '../types.js'
-import * as semver from 'semver'
-import { clusterDefinitionContainerTypeV1X6, hashClusterDefinitionV1X6, hashClusterLockV1X6, verifyDVV1X6 } from './v1.6.0.js'
-import { clusterDefinitionContainerTypeV1X7, hashClusterDefinitionV1X7, hashClusterLockV1X7, verifyDVV1X7 } from './v1.7.0.js'
-import { ethers } from 'ethers'
-import { DOMAIN_APPLICATION_BUILDER, DOMAIN_DEPOSIT, DefinitionFlow, GENESIS_VALIDATOR_ROOT, signCreatorConfigHashPayload, signEnrPayload, signOperatorConfigHashPayload } from '../constants.js'
-import { SignTypedDataVersion, TypedDataUtils } from '@metamask/eth-sig-util'
-import { builderRegistrationMessageType, depositMessageType, forkDataType, signingRootType } from './sszTypes.js'
-import { definitionFlow, hexWithout0x } from '../utils.js'
-import { ENR } from '@chainsafe/discv5'
-import { clusterDefinitionContainerTypeV1X8, hashClusterDefinitionV1X8, hashClusterLockV1X8, verifyDVV1X8 } from './v1.8.0.js'
+ DOMAIN_APPLICATION_BUILDER,
+ DOMAIN_DEPOSIT,
+ DefinitionFlow,
+ GENESIS_VALIDATOR_ROOT,
+ signCreatorConfigHashPayload,
+ signEnrPayload,
+ signOperatorConfigHashPayload,
+} from '../constants.js';
+import { SignTypedDataVersion, TypedDataUtils } from '@metamask/eth-sig-util';
+import {
+ builderRegistrationMessageType,
+ depositMessageType,
+ forkDataType,
+ signingRootType,
+} from './sszTypes.js';
+import { definitionFlow, hexWithout0x } from '../utils.js';
+import { ENR } from '@chainsafe/discv5';
+import {
+ clusterDefinitionContainerTypeV1X8,
+ hashClusterDefinitionV1X8,
+ hashClusterLockV1X8,
+ verifyDVV1X8,
+} from './v1.8.0.js';
// cluster-definition hash
@@ -26,37 +57,40 @@ import { clusterDefinitionContainerTypeV1X8, hashClusterDefinitionV1X8, hashClus
* @returns The config hash or the definition hash in of the corresponding cluster
*/
export const clusterConfigOrDefinitionHash = (
- cluster: ClusterDefinition,
- configOnly: boolean,
+ cluster: ClusterDefinition,
+ configOnly: boolean,
): string => {
- let definitionType, val
-
- if (semver.eq(cluster.version, 'v1.6.0')) {
- definitionType = clusterDefinitionContainerTypeV1X6(configOnly)
- val = hashClusterDefinitionV1X6(cluster, configOnly)
- return (
- '0x' + Buffer.from(definitionType.hashTreeRoot(val).buffer).toString('hex')
- )
- }
-
- if (semver.eq(cluster.version, 'v1.7.0')) {
- definitionType = clusterDefinitionContainerTypeV1X7(configOnly)
- val = hashClusterDefinitionV1X7(cluster, configOnly)
- return (
- '0x' + Buffer.from(definitionType.hashTreeRoot(val).buffer).toString('hex')
- )
- }
-
- if (semver.eq(cluster.version, 'v1.8.0')) {
- definitionType = clusterDefinitionContainerTypeV1X8(configOnly)
- val = hashClusterDefinitionV1X8(cluster, configOnly)
- return (
- '0x' + Buffer.from(definitionType.hashTreeRoot(val).buffer).toString('hex')
- )
- }
-
- throw new Error('unsupported version')
-}
+ let definitionType, val;
+
+ if (semver.eq(cluster.version, 'v1.6.0')) {
+ definitionType = clusterDefinitionContainerTypeV1X6(configOnly);
+ val = hashClusterDefinitionV1X6(cluster, configOnly);
+ return (
+ '0x' +
+ Buffer.from(definitionType.hashTreeRoot(val).buffer).toString('hex')
+ );
+ }
+
+ if (semver.eq(cluster.version, 'v1.7.0')) {
+ definitionType = clusterDefinitionContainerTypeV1X7(configOnly);
+ val = hashClusterDefinitionV1X7(cluster, configOnly);
+ return (
+ '0x' +
+ Buffer.from(definitionType.hashTreeRoot(val).buffer).toString('hex')
+ );
+ }
+
+ if (semver.eq(cluster.version, 'v1.8.0')) {
+ definitionType = clusterDefinitionContainerTypeV1X8(configOnly);
+ val = hashClusterDefinitionV1X8(cluster, configOnly);
+ return (
+ '0x' +
+ Buffer.from(definitionType.hashTreeRoot(val).buffer).toString('hex')
+ );
+ }
+
+ throw new Error('unsupported version');
+};
// cluster-lock hash
@@ -66,191 +100,193 @@ export const clusterConfigOrDefinitionHash = (
* @returns The cluster lock hash in of the corresponding cluster lock
*/
export const clusterLockHash = (clusterLock: ClusterLock): string => {
- if (semver.eq(clusterLock.cluster_definition.version, 'v1.6.0')) {
- return hashClusterLockV1X6(clusterLock)
- }
+ if (semver.eq(clusterLock.cluster_definition.version, 'v1.6.0')) {
+ return hashClusterLockV1X6(clusterLock);
+ }
- if (semver.eq(clusterLock.cluster_definition.version, 'v1.7.0')) {
- return hashClusterLockV1X7(clusterLock)
- }
+ if (semver.eq(clusterLock.cluster_definition.version, 'v1.7.0')) {
+ return hashClusterLockV1X7(clusterLock);
+ }
- if (semver.eq(clusterLock.cluster_definition.version, 'v1.8.0')) {
- return hashClusterLockV1X8(clusterLock)
- }
+ if (semver.eq(clusterLock.cluster_definition.version, 'v1.8.0')) {
+ return hashClusterLockV1X8(clusterLock);
+ }
- // other versions
- throw new Error('unsupported version')
-}
+ // other versions
+ throw new Error('unsupported version');
+};
// Lock verification
// cluster-definition signatures verification
const getPOSTConfigHashSigner = (
- signature: string,
- configHash: string,
- chainId: FORK_MAPPING,
+ signature: string,
+ configHash: string,
+ chainId: FORK_MAPPING,
): string => {
- try {
- const sig = ethers.Signature.from(signature)
- const data = signCreatorConfigHashPayload(
- { creator_config_hash: configHash },
- chainId,
- )
- const digest = TypedDataUtils.eip712Hash(data, SignTypedDataVersion.V4)
-
- return ethers.recoverAddress(digest, sig).toLowerCase()
- } catch (err) {
- throw err
- }
-}
+ try {
+ const sig = ethers.Signature.from(signature);
+ const data = signCreatorConfigHashPayload(
+ { creator_config_hash: configHash },
+ chainId,
+ );
+ const digest = TypedDataUtils.eip712Hash(data, SignTypedDataVersion.V4);
+
+ return ethers.recoverAddress(digest, sig).toLowerCase();
+ } catch (err) {
+ throw err;
+ }
+};
const getPUTConfigHashSigner = (
- signature: string,
- configHash: string,
- chainId: number,
+ signature: string,
+ configHash: string,
+ chainId: number,
): string => {
- try {
- const sig = ethers.Signature.from(signature)
- const data = signOperatorConfigHashPayload(
- { operator_config_hash: configHash },
- chainId,
- )
- const digest = TypedDataUtils.eip712Hash(data, SignTypedDataVersion.V4)
-
- return ethers.recoverAddress(digest, sig).toLowerCase()
- } catch (err) {
- throw err
- }
-}
+ try {
+ const sig = ethers.Signature.from(signature);
+ const data = signOperatorConfigHashPayload(
+ { operator_config_hash: configHash },
+ chainId,
+ );
+ const digest = TypedDataUtils.eip712Hash(data, SignTypedDataVersion.V4);
+
+ return ethers.recoverAddress(digest, sig).toLowerCase();
+ } catch (err) {
+ throw err;
+ }
+};
const getEnrSigner = (
- signature: string,
- payload: string,
- chainId: number,
+ signature: string,
+ payload: string,
+ chainId: number,
): string => {
- try {
- const sig = ethers.Signature.from(signature)
+ try {
+ const sig = ethers.Signature.from(signature);
- const data = signEnrPayload({ enr: payload }, chainId)
- const digest = TypedDataUtils.eip712Hash(data, SignTypedDataVersion.V4)
+ const data = signEnrPayload({ enr: payload }, chainId);
+ const digest = TypedDataUtils.eip712Hash(data, SignTypedDataVersion.V4);
- return ethers.recoverAddress(digest, sig).toLowerCase()
- } catch (err) {
- throw err
- }
-}
+ return ethers.recoverAddress(digest, sig).toLowerCase();
+ } catch (err) {
+ throw err;
+ }
+};
const verifyDefinitionSignatures = (
- clusterDefinition: ClusterDefinition,
- definitionType: DefinitionFlow,
+ clusterDefinition: ClusterDefinition,
+ definitionType: DefinitionFlow,
): boolean => {
- if (definitionType === DefinitionFlow.Charon) {
- return true
- } else {
- const configSigner = getPOSTConfigHashSigner(
- clusterDefinition.creator.config_signature as string,
- clusterDefinition.config_hash,
- FORK_MAPPING[clusterDefinition.fork_version as keyof typeof FORK_MAPPING],
- )
-
- if (configSigner !== clusterDefinition.creator.address.toLowerCase()) {
- return false
- }
- if (definitionType === DefinitionFlow.Solo) {
- return true
- }
- return clusterDefinition.operators.every((operator) => {
- const configSigner = getPUTConfigHashSigner(
- operator.config_signature as string,
- clusterDefinition.config_hash,
- FORK_MAPPING[
- clusterDefinition.fork_version as keyof typeof FORK_MAPPING
- ],
- )
-
- const enrSigner = getEnrSigner(
- operator.enr_signature as string,
- operator.enr as string,
- FORK_MAPPING[
- clusterDefinition.fork_version as keyof typeof FORK_MAPPING
- ],
- )
-
- if (
- configSigner !== operator.address.toLowerCase() ||
- enrSigner !== operator.address.toLowerCase()
- ) {
- return false
- }
- return true
- })
+ if (definitionType === DefinitionFlow.Charon) {
+ return true;
+ } else {
+ const configSigner = getPOSTConfigHashSigner(
+ clusterDefinition.creator.config_signature as string,
+ clusterDefinition.config_hash,
+ FORK_MAPPING[clusterDefinition.fork_version as keyof typeof FORK_MAPPING],
+ );
+
+ if (configSigner !== clusterDefinition.creator.address.toLowerCase()) {
+ return false;
+ }
+ if (definitionType === DefinitionFlow.Solo) {
+ return true;
}
-}
+ return clusterDefinition.operators.every(operator => {
+ const configSigner = getPUTConfigHashSigner(
+ operator.config_signature as string,
+ clusterDefinition.config_hash,
+ FORK_MAPPING[
+ clusterDefinition.fork_version as keyof typeof FORK_MAPPING
+ ],
+ );
+
+ const enrSigner = getEnrSigner(
+ operator.enr_signature as string,
+ operator.enr as string,
+ FORK_MAPPING[
+ clusterDefinition.fork_version as keyof typeof FORK_MAPPING
+ ],
+ );
+
+ if (
+ configSigner !== operator.address.toLowerCase() ||
+ enrSigner !== operator.address.toLowerCase()
+ ) {
+ return false;
+ }
+ return true;
+ });
+ }
+};
// cluster-lock data verification
const computeSigningRoot = (
- sszObjectRoot: Uint8Array,
- domain: Uint8Array,
+ sszObjectRoot: Uint8Array,
+ domain: Uint8Array,
): Uint8Array => {
- const signingRootDefaultValue = signingRootType.defaultValue()
- signingRootDefaultValue.objectRoot = sszObjectRoot
- signingRootDefaultValue.domain = domain
- return Buffer.from(signingRootType.hashTreeRoot(signingRootDefaultValue).buffer)
-}
+ const signingRootDefaultValue = signingRootType.defaultValue();
+ signingRootDefaultValue.objectRoot = sszObjectRoot;
+ signingRootDefaultValue.domain = domain;
+ return Buffer.from(
+ signingRootType.hashTreeRoot(signingRootDefaultValue).buffer,
+ );
+};
const computeDepositMsgRoot = (msg: Partial): Buffer => {
- const depositMsgVal = depositMessageType.defaultValue()
+ const depositMsgVal = depositMessageType.defaultValue();
- depositMsgVal.pubkey = fromHexString(msg.pubkey as string)
- depositMsgVal.withdrawal_credentials = fromHexString(
- msg.withdrawal_credentials as string,
- )
- depositMsgVal.amount = parseInt(msg.amount as string)
- return Buffer.from(depositMessageType.hashTreeRoot(depositMsgVal).buffer)
-}
+ depositMsgVal.pubkey = fromHexString(msg.pubkey as string);
+ depositMsgVal.withdrawal_credentials = fromHexString(
+ msg.withdrawal_credentials as string,
+ );
+ depositMsgVal.amount = parseInt(msg.amount as string);
+ return Buffer.from(depositMessageType.hashTreeRoot(depositMsgVal).buffer);
+};
const computeForkDataRoot = (
- currentVersion: Uint8Array,
- genesisValidatorsRoot: Uint8Array,
+ currentVersion: Uint8Array,
+ genesisValidatorsRoot: Uint8Array,
): Uint8Array => {
- const forkDataVal = forkDataType.defaultValue()
- forkDataVal.currentVersion = currentVersion
- forkDataVal.genesisValidatorsRoot = genesisValidatorsRoot
- return Buffer.from(forkDataType.hashTreeRoot(forkDataVal).buffer)
-}
+ const forkDataVal = forkDataType.defaultValue();
+ forkDataVal.currentVersion = currentVersion;
+ forkDataVal.genesisValidatorsRoot = genesisValidatorsRoot;
+ return Buffer.from(forkDataType.hashTreeRoot(forkDataVal).buffer);
+};
const computebuilderRegistrationMsgRoot = (
- msg: BuilderRegistrationMessage,
+ msg: BuilderRegistrationMessage,
): Buffer => {
- const builderRegistrationMsgVal =
- builderRegistrationMessageType.defaultValue()
-
- builderRegistrationMsgVal.fee_recipient = fromHexString(msg.fee_recipient)
- builderRegistrationMsgVal.gas_limit = msg.gas_limit
- builderRegistrationMsgVal.timestamp = msg.timestamp
- builderRegistrationMsgVal.pubkey = fromHexString(msg.pubkey)
- return Buffer.from(
- builderRegistrationMessageType.hashTreeRoot(builderRegistrationMsgVal)
- .buffer,
- )
-}
+ const builderRegistrationMsgVal =
+ builderRegistrationMessageType.defaultValue();
+
+ builderRegistrationMsgVal.fee_recipient = fromHexString(msg.fee_recipient);
+ builderRegistrationMsgVal.gas_limit = msg.gas_limit;
+ builderRegistrationMsgVal.timestamp = msg.timestamp;
+ builderRegistrationMsgVal.pubkey = fromHexString(msg.pubkey);
+ return Buffer.from(
+ builderRegistrationMessageType.hashTreeRoot(builderRegistrationMsgVal)
+ .buffer,
+ );
+};
const computeDomain = (
- domainType: Uint8Array,
- lockForkVersion: string,
- genesisValidatorsRoot: Uint8Array = fromHexString(GENESIS_VALIDATOR_ROOT),
+ domainType: Uint8Array,
+ lockForkVersion: string,
+ genesisValidatorsRoot: Uint8Array = fromHexString(GENESIS_VALIDATOR_ROOT),
): Uint8Array => {
- const forkVersion = fromHexString(
- lockForkVersion.substring(2, lockForkVersion.length),
- )
+ const forkVersion = fromHexString(
+ lockForkVersion.substring(2, lockForkVersion.length),
+ );
- const forkDataRoot = computeForkDataRoot(forkVersion, genesisValidatorsRoot)
- const domain = new Uint8Array(32)
- domain.set(domainType)
- domain.set(forkDataRoot.subarray(0, 28), 4)
- return domain
-}
+ const forkDataRoot = computeForkDataRoot(forkVersion, genesisValidatorsRoot);
+ const domain = new Uint8Array(32);
+ domain.set(domainType);
+ domain.set(forkDataRoot.subarray(0, 28), 4);
+ return domain;
+};
/**
* Verify deposit data withdrawal credintials and signature
@@ -260,161 +296,166 @@ const computeDomain = (
* @returns {boolean} - return if deposit data is valid.
*/
export const verifyDepositData = (
- distributedPublicKey: string,
- depositData: Partial,
- withdrawalAddress: string,
- forkVersion: string,
-): { isValidDepositData: boolean, depositDataMsg: Uint8Array } => {
- const depositDomain = computeDomain(
- fromHexString(DOMAIN_DEPOSIT),
- forkVersion,
- )
- const eth1AddressWithdrawalPrefix = '0x01'
- if (
- eth1AddressWithdrawalPrefix +
- '0'.repeat(22) +
- withdrawalAddress.toLowerCase().slice(2) !==
- depositData.withdrawal_credentials
- ) {
- return { isValidDepositData: false, depositDataMsg: new Uint8Array(0) }
- }
-
- if (distributedPublicKey !== depositData.pubkey) {
- return { isValidDepositData: false, depositDataMsg: new Uint8Array(0) }
- }
-
- const depositMessageBuffer = computeDepositMsgRoot(
- depositData
- )
- const depositDataMessage = signingRoot(
- depositDomain,
- depositMessageBuffer,
- )
-
- return { isValidDepositData: true, depositDataMsg: depositDataMessage }
-}
+ distributedPublicKey: string,
+ depositData: Partial,
+ withdrawalAddress: string,
+ forkVersion: string,
+): { isValidDepositData: boolean; depositDataMsg: Uint8Array } => {
+ const depositDomain = computeDomain(
+ fromHexString(DOMAIN_DEPOSIT),
+ forkVersion,
+ );
+ const eth1AddressWithdrawalPrefix = '0x01';
+ if (
+ eth1AddressWithdrawalPrefix +
+ '0'.repeat(22) +
+ withdrawalAddress.toLowerCase().slice(2) !==
+ depositData.withdrawal_credentials
+ ) {
+ return { isValidDepositData: false, depositDataMsg: new Uint8Array(0) };
+ }
+
+ if (distributedPublicKey !== depositData.pubkey) {
+ return { isValidDepositData: false, depositDataMsg: new Uint8Array(0) };
+ }
+
+ const depositMessageBuffer = computeDepositMsgRoot(depositData);
+ const depositDataMessage = signingRoot(depositDomain, depositMessageBuffer);
+
+ return { isValidDepositData: true, depositDataMsg: depositDataMessage };
+};
export const verifyBuilderRegistration = (
- validator: DistributedValidator,
- feeRecipientAddress: string,
- forkVersion: string,
-): { isValidBuilderRegistration: boolean, builderRegistrationMsg: Uint8Array } => {
- const builderDomain = computeDomain(
- fromHexString(DOMAIN_APPLICATION_BUILDER),
- forkVersion)
-
- if (
- validator.distributed_public_key !==
- validator.builder_registration?.message.pubkey
- ) {
- return { isValidBuilderRegistration: false, builderRegistrationMsg: new Uint8Array(0) }
- }
- if (
- feeRecipientAddress.toLowerCase() !==
- validator.builder_registration.message.fee_recipient.toLowerCase()
- ) {
- return { isValidBuilderRegistration: false, builderRegistrationMsg: new Uint8Array(0) }
- }
-
- const builderRegistrationMessageBuffer =
- computebuilderRegistrationMsgRoot(
- validator.builder_registration.message,
- )
-
- const builderRegistrationMessage = signingRoot(
- builderDomain,
- builderRegistrationMessageBuffer,
- )
-
- return { isValidBuilderRegistration: true, builderRegistrationMsg: builderRegistrationMessage }
-}
+ validator: DistributedValidator,
+ feeRecipientAddress: string,
+ forkVersion: string,
+): {
+ isValidBuilderRegistration: boolean;
+ builderRegistrationMsg: Uint8Array;
+} => {
+ const builderDomain = computeDomain(
+ fromHexString(DOMAIN_APPLICATION_BUILDER),
+ forkVersion,
+ );
+
+ if (
+ validator.distributed_public_key !==
+ validator.builder_registration?.message.pubkey
+ ) {
+ return {
+ isValidBuilderRegistration: false,
+ builderRegistrationMsg: new Uint8Array(0),
+ };
+ }
+ if (
+ feeRecipientAddress.toLowerCase() !==
+ validator.builder_registration.message.fee_recipient.toLowerCase()
+ ) {
+ return {
+ isValidBuilderRegistration: false,
+ builderRegistrationMsg: new Uint8Array(0),
+ };
+ }
+
+ const builderRegistrationMessageBuffer = computebuilderRegistrationMsgRoot(
+ validator.builder_registration.message,
+ );
+
+ const builderRegistrationMessage = signingRoot(
+ builderDomain,
+ builderRegistrationMessageBuffer,
+ );
+
+ return {
+ isValidBuilderRegistration: true,
+ builderRegistrationMsg: builderRegistrationMessage,
+ };
+};
export const verifyNodeSignatures = (clusterLock: ClusterLock): boolean => {
- const ec = new elliptic.ec('secp256k1')
- const nodeSignatures = clusterLock.node_signatures
-
- const lockHashWithout0x = hexWithout0x(clusterLock.lock_hash)
- // node(ENR) signatures
- for (let i = 0; i < (nodeSignatures as string[]).length; i++) {
- const pubkey = ENR.decodeTxt(
- clusterLock.cluster_definition.operators[i].enr as string,
- ).publicKey.toString('hex')
-
- const ENRsignature = {
- r: (nodeSignatures as string[])[i].slice(2, 66),
- s: (nodeSignatures as string[])[i].slice(66, 130),
- }
-
- const nodeSignatureVerification = ec
- .keyFromPublic(pubkey, 'hex')
- .verify(lockHashWithout0x, ENRsignature)
-
- if (!nodeSignatureVerification) {
- return false
- }
+ const ec = new elliptic.ec('secp256k1');
+ const nodeSignatures = clusterLock.node_signatures;
+
+ const lockHashWithout0x = hexWithout0x(clusterLock.lock_hash);
+ // node(ENR) signatures
+ for (let i = 0; i < (nodeSignatures as string[]).length; i++) {
+ const pubkey = ENR.decodeTxt(
+ clusterLock.cluster_definition.operators[i].enr as string,
+ ).publicKey.toString('hex');
+
+ const ENRsignature = {
+ r: (nodeSignatures as string[])[i].slice(2, 66),
+ s: (nodeSignatures as string[])[i].slice(66, 130),
+ };
+
+ const nodeSignatureVerification = ec
+ .keyFromPublic(pubkey, 'hex')
+ .verify(lockHashWithout0x, ENRsignature);
+
+ if (!nodeSignatureVerification) {
+ return false;
}
+ }
- return true
-}
+ return true;
+};
export const signingRoot = (
- domain: Uint8Array,
- messageBuffer: Buffer,
+ domain: Uint8Array,
+ messageBuffer: Buffer,
): Uint8Array => {
- return computeSigningRoot(messageBuffer, domain)
-}
+ return computeSigningRoot(messageBuffer, domain);
+};
const verifyLockData = async (clusterLock: ClusterLock): Promise => {
- await init('herumi')
+ await init('herumi');
- if (semver.eq(clusterLock.cluster_definition.version, 'v1.6.0')) {
- return verifyDVV1X6(clusterLock)
- }
+ if (semver.eq(clusterLock.cluster_definition.version, 'v1.6.0')) {
+ return verifyDVV1X6(clusterLock);
+ }
- if (semver.eq(clusterLock.cluster_definition.version, 'v1.7.0')) {
- return verifyDVV1X7(clusterLock)
- }
+ if (semver.eq(clusterLock.cluster_definition.version, 'v1.7.0')) {
+ return verifyDVV1X7(clusterLock);
+ }
- if (semver.eq(clusterLock.cluster_definition.version, 'v1.8.0')) {
- return verifyDVV1X8(clusterLock)
- }
- return false
-}
+ if (semver.eq(clusterLock.cluster_definition.version, 'v1.8.0')) {
+ return verifyDVV1X8(clusterLock);
+ }
+ return false;
+};
export const isValidClusterLock = async (
- clusterLock: ClusterLock,
+ clusterLock: ClusterLock,
): Promise => {
- try {
- const definitionType = definitionFlow(clusterLock.cluster_definition)
- if (definitionType == null) {
- return false
- }
-
- const isValidDefinitionData = verifyDefinitionSignatures(
- clusterLock.cluster_definition,
- definitionType,
- )
- if (!isValidDefinitionData) {
- return false
- }
-
- if (
- clusterConfigOrDefinitionHash(clusterLock.cluster_definition, false) !==
- clusterLock.cluster_definition.definition_hash
- ) {
- return false
- }
-
- if (clusterLockHash(clusterLock) !== clusterLock.lock_hash) {
- return false
- }
-
- const isValidLockData = await verifyLockData(clusterLock)
- if (!isValidLockData) {
- return false
- }
- return true
- } catch (err) {
- return false
+ try {
+ const definitionType = definitionFlow(clusterLock.cluster_definition);
+ if (definitionType == null) {
+ return false;
+ }
+ const isValidDefinitionData = verifyDefinitionSignatures(
+ clusterLock.cluster_definition,
+ definitionType,
+ );
+ if (!isValidDefinitionData) {
+ return false;
+ }
+
+ if (
+ clusterConfigOrDefinitionHash(clusterLock.cluster_definition, false) !==
+ clusterLock.cluster_definition.definition_hash
+ ) {
+ return false;
+ }
+ if (clusterLockHash(clusterLock) !== clusterLock.lock_hash) {
+ return false;
+ }
+
+ const isValidLockData = await verifyLockData(clusterLock);
+ if (!isValidLockData) {
+ return false;
}
-}
+ return true;
+ } catch (err) {
+ return false;
+ }
+};
diff --git a/src/verification/sszTypes.ts b/src/verification/sszTypes.ts
index 05c9302..779a3e8 100644
--- a/src/verification/sszTypes.ts
+++ b/src/verification/sszTypes.ts
@@ -1,79 +1,88 @@
-import { ByteListType, ByteVectorType, ContainerType, UintNumberType } from '@chainsafe/ssz'
-import { type UintNumberByteLen } from '@chainsafe/ssz/lib/type/uint'
+import {
+ ByteListType,
+ ByteVectorType,
+ ContainerType,
+ UintNumberType,
+} from '@chainsafe/ssz';
+import { type UintNumberByteLen } from '@chainsafe/ssz/lib/type/uint';
export const operatorAddressWrapperType = new ContainerType({
- address: new ByteVectorType(20),
-})
+ address: new ByteVectorType(20),
+});
export const creatorAddressWrapperType = new ContainerType({
- address: new ByteVectorType(20),
-})
+ address: new ByteVectorType(20),
+});
export const operatorContainerType = new ContainerType({
- address: new ByteVectorType(20),
- enr: new ByteListType(1024), // This needs to be dynamic, since ENRs do not have a fixed length.
- config_signature: new ByteVectorType(65),
- enr_signature: new ByteVectorType(65),
-})
+ address: new ByteVectorType(20),
+ enr: new ByteListType(1024), // This needs to be dynamic, since ENRs do not have a fixed length.
+ config_signature: new ByteVectorType(65),
+ enr_signature: new ByteVectorType(65),
+});
export const creatorContainerType = new ContainerType({
- address: new ByteVectorType(20),
- config_signature: new ByteVectorType(65),
-})
+ address: new ByteVectorType(20),
+ config_signature: new ByteVectorType(65),
+});
export const validatorsContainerType = new ContainerType({
- fee_recipient_address: new ByteVectorType(20),
- withdrawal_address: new ByteVectorType(20),
-})
+ fee_recipient_address: new ByteVectorType(20),
+ withdrawal_address: new ByteVectorType(20),
+});
-export const newCreatorContainerType = (configOnly: boolean): ContainerType => {
- return configOnly ? creatorAddressWrapperType : creatorContainerType
-}
+export const newCreatorContainerType = (
+ configOnly: boolean,
+): ContainerType => {
+ return configOnly ? creatorAddressWrapperType : creatorContainerType;
+};
-export const newOperatorContainerType = (configOnly: boolean): ContainerType => {
- return configOnly ? operatorAddressWrapperType : operatorContainerType
-}
+export const newOperatorContainerType = (
+ configOnly: boolean,
+): ContainerType => {
+ return configOnly ? operatorAddressWrapperType : operatorContainerType;
+};
// Lock
export const depositDataContainer = new ContainerType({
- pubkey: new ByteVectorType(48),
- withdrawal_credentials: new ByteVectorType(32),
- amount: new UintNumberType(8 as UintNumberByteLen),
- signature: new ByteVectorType(96),
-})
+ pubkey: new ByteVectorType(48),
+ withdrawal_credentials: new ByteVectorType(32),
+ amount: new UintNumberType(8 as UintNumberByteLen),
+ signature: new ByteVectorType(96),
+});
export const builderRegistrationMessageContainer = new ContainerType({
- fee_recipient: new ByteVectorType(20),
- gas_limit: new UintNumberType(8 as UintNumberByteLen),
- timestamp: new UintNumberType(8 as UintNumberByteLen),
- pubkey: new ByteVectorType(48),
-})
+ fee_recipient: new ByteVectorType(20),
+ gas_limit: new UintNumberType(8 as UintNumberByteLen),
+ timestamp: new UintNumberType(8 as UintNumberByteLen),
+ pubkey: new ByteVectorType(48),
+});
export const builderRegistrationContainer = new ContainerType({
- message: builderRegistrationMessageContainer,
- signature: new ByteVectorType(96),
-})
+ message: builderRegistrationMessageContainer,
+ signature: new ByteVectorType(96),
+});
export const builderRegistrationMessageType = new ContainerType({
- fee_recipient: new ByteVectorType(20),
- gas_limit: new UintNumberType(8 as UintNumberByteLen),
- timestamp: new UintNumberType(8 as UintNumberByteLen),
- pubkey: new ByteVectorType(48),
-})
+ fee_recipient: new ByteVectorType(20),
+ gas_limit: new UintNumberType(8 as UintNumberByteLen),
+ timestamp: new UintNumberType(8 as UintNumberByteLen),
+ pubkey: new ByteVectorType(48),
+});
// For domain computation that is used in deposit data and builder registration verification for dv
export const forkDataType = new ContainerType({
- currentVersion: new ByteVectorType(4),
- genesisValidatorsRoot: new ByteVectorType(32),
-})
+ currentVersion: new ByteVectorType(4),
+ genesisValidatorsRoot: new ByteVectorType(32),
+});
export const depositMessageType = new ContainerType({
- pubkey: new ByteVectorType(48),
- withdrawal_credentials: new ByteVectorType(32),
- amount: new UintNumberType(8),
-})
+ pubkey: new ByteVectorType(48),
+ withdrawal_credentials: new ByteVectorType(32),
+ amount: new UintNumberType(8),
+});
export const signingRootType = new ContainerType({
- objectRoot: new ByteVectorType(32),
- domain: new ByteVectorType(32),
-})
+ objectRoot: new ByteVectorType(32),
+ domain: new ByteVectorType(32),
+});
diff --git a/src/verification/termsAndConditions.ts b/src/verification/termsAndConditions.ts
index 6e60fe1..5e4cefd 100644
--- a/src/verification/termsAndConditions.ts
+++ b/src/verification/termsAndConditions.ts
@@ -1,30 +1,32 @@
-import pdf from 'pdf-parse'
-import { ByteListType, ContainerType } from '@chainsafe/ssz'
-import { TERMS_AND_CONDITIONS_URL } from '../constants'
-import { strToUint8Array } from '../utils'
+import pdf from 'pdf-parse';
+import { ByteListType, ContainerType } from '@chainsafe/ssz';
+import { TERMS_AND_CONDITIONS_URL } from '../constants';
+import { strToUint8Array } from '../utils';
export const hashTermsAndConditions = async (): Promise => {
try {
// read the pdf
- const response = await fetch(TERMS_AND_CONDITIONS_URL)
- const pdfBuffarrayBuffer = await response.arrayBuffer()
- const pdfBuffer = Buffer.from(pdfBuffarrayBuffer)
- const data = await pdf(pdfBuffer)
+ const response = await fetch(TERMS_AND_CONDITIONS_URL);
+ const pdfBuffarrayBuffer = await response.arrayBuffer();
+ const pdfBuffer = Buffer.from(pdfBuffarrayBuffer);
+ const data = await pdf(pdfBuffer);
// ssz hash
const termsType = new ContainerType({
terms_and_conditions_hash: new ByteListType(Number.MAX_SAFE_INTEGER),
- })
+ });
- const termsHasVal = termsType.defaultValue()
+ const termsHasVal = termsType.defaultValue();
- termsHasVal.terms_and_conditions_hash = strToUint8Array(data?.text.replace(/[^a-zA-Z0-9]/g, ''))
+ termsHasVal.terms_and_conditions_hash = strToUint8Array(
+ data?.text.replace(/[^a-zA-Z0-9]/g, ''),
+ );
return (
'0x' +
Buffer.from(termsType.hashTreeRoot(termsHasVal).buffer).toString('hex')
- )
+ );
} catch (err) {
- return null
+ return null;
}
-}
+};
diff --git a/src/verification/v1.6.0.ts b/src/verification/v1.6.0.ts
index b521bab..9579d0d 100644
--- a/src/verification/v1.6.0.ts
+++ b/src/verification/v1.6.0.ts
@@ -1,32 +1,56 @@
-import { type UintNumberByteLen, UintNumberType } from '@chainsafe/ssz/lib/type/uint'
-import { strToUint8Array } from '../utils'
-import { type creatorAddressWrapperType, type creatorContainerType, newCreatorContainerType, newOperatorContainerType, type operatorAddressWrapperType, type operatorContainerType, validatorsContainerType } from './sszTypes'
-import { ByteListType, ByteVectorType, ContainerType, ListCompositeType, fromHexString } from '@chainsafe/ssz'
-import { type ValueOfFields } from '@chainsafe/ssz/lib/view/container'
-import { type ClusterDefinition, type ClusterLock, type DepositData } from '../types'
-import { verifyDepositData } from './common'
-import { aggregateSignatures, verifyAggregate, verifyMultiple } from '@chainsafe/bls'
+import {
+ type UintNumberByteLen,
+ UintNumberType,
+} from '@chainsafe/ssz/lib/type/uint';
+import { strToUint8Array } from '../utils';
+import {
+ type creatorAddressWrapperType,
+ type creatorContainerType,
+ newCreatorContainerType,
+ newOperatorContainerType,
+ type operatorAddressWrapperType,
+ type operatorContainerType,
+ validatorsContainerType,
+} from './sszTypes';
+import {
+ ByteListType,
+ ByteVectorType,
+ ContainerType,
+ ListCompositeType,
+ fromHexString,
+} from '@chainsafe/ssz';
+import { type ValueOfFields } from '@chainsafe/ssz/lib/view/container';
+import {
+ type ClusterDefinition,
+ type ClusterLock,
+ type DepositData,
+} from '../types';
+import { verifyDepositData } from './common';
+import {
+ aggregateSignatures,
+ verifyAggregate,
+ verifyMultiple,
+} from '@chainsafe/bls';
// cluster definition
type DefinitionFieldsV1X6 = {
- uuid: ByteListType
- name: ByteListType
- version: ByteListType
- timestamp: ByteListType
- num_validators: UintNumberType
- threshold: UintNumberType
- dkg_algorithm: ByteListType
- fork_version: ByteVectorType
- operators: ListCompositeType<
- typeof operatorContainerType | typeof operatorAddressWrapperType
- >
- creator: typeof creatorContainerType | typeof creatorAddressWrapperType
- validators: ListCompositeType
- config_hash?: ByteVectorType
-}
-
-type DefinitionContainerTypeV1X6 =
- ContainerType
+ uuid: ByteListType;
+ name: ByteListType;
+ version: ByteListType;
+ timestamp: ByteListType;
+ num_validators: UintNumberType;
+ threshold: UintNumberType;
+ dkg_algorithm: ByteListType;
+ fork_version: ByteVectorType;
+ operators: ListCompositeType<
+ typeof operatorContainerType | typeof operatorAddressWrapperType
+ >;
+ creator: typeof creatorContainerType | typeof creatorAddressWrapperType;
+ validators: ListCompositeType;
+ config_hash?: ByteVectorType;
+};
+
+type DefinitionContainerTypeV1X6 = ContainerType;
/**
* Returns the containerized cluster definition
@@ -34,193 +58,199 @@ type DefinitionContainerTypeV1X6 =
* @returns SSZ Containerized type of cluster input
*/
export const clusterDefinitionContainerTypeV1X6 = (
- configOnly: boolean,
+ configOnly: boolean,
): DefinitionContainerTypeV1X6 => {
- let returnedContainerType: any = {
- uuid: new ByteListType(64),
- name: new ByteListType(256),
- version: new ByteListType(16),
- timestamp: new ByteListType(32),
- num_validators: new UintNumberType(8 as UintNumberByteLen),
- threshold: new UintNumberType(8 as UintNumberByteLen),
- dkg_algorithm: new ByteListType(32),
- fork_version: new ByteVectorType(4),
- operators: new ListCompositeType(newOperatorContainerType(configOnly), 256),
- creator: newCreatorContainerType(configOnly),
- validators: new ListCompositeType(validatorsContainerType, 65536),
- }
+ let returnedContainerType: any = {
+ uuid: new ByteListType(64),
+ name: new ByteListType(256),
+ version: new ByteListType(16),
+ timestamp: new ByteListType(32),
+ num_validators: new UintNumberType(8 as UintNumberByteLen),
+ threshold: new UintNumberType(8 as UintNumberByteLen),
+ dkg_algorithm: new ByteListType(32),
+ fork_version: new ByteVectorType(4),
+ operators: new ListCompositeType(newOperatorContainerType(configOnly), 256),
+ creator: newCreatorContainerType(configOnly),
+ validators: new ListCompositeType(validatorsContainerType, 65536),
+ };
- if (!configOnly) {
- returnedContainerType = {
- ...returnedContainerType,
- config_hash: new ByteVectorType(32),
- }
- }
+ if (!configOnly) {
+ returnedContainerType = {
+ ...returnedContainerType,
+ config_hash: new ByteVectorType(32),
+ };
+ }
- return new ContainerType(returnedContainerType)
-}
+ return new ContainerType(returnedContainerType);
+};
export const hashClusterDefinitionV1X6 = (
- cluster: ClusterDefinition,
- configOnly: boolean,
+ cluster: ClusterDefinition,
+ configOnly: boolean,
): ValueOfFields => {
- const definitionType = clusterDefinitionContainerTypeV1X6(configOnly)
-
- const val = definitionType.defaultValue()
-
- // order should be same as charon https://github.com/ObolNetwork/charon/blob/main/cluster/ssz.go#L276
- val.uuid = strToUint8Array(cluster.uuid)
- val.name = strToUint8Array(cluster.name)
- val.version = strToUint8Array(cluster.version)
- val.timestamp = strToUint8Array(cluster.timestamp)
- val.num_validators = cluster.num_validators
- val.threshold = cluster.threshold
- val.dkg_algorithm = strToUint8Array(cluster.dkg_algorithm)
- val.fork_version = fromHexString(cluster.fork_version)
- val.operators = cluster.operators.map(operator => {
- return configOnly
- ? { address: fromHexString(operator.address) }
- : {
- address: fromHexString(operator.address),
- enr: strToUint8Array(operator.enr as string),
- config_signature: fromHexString(operator.config_signature as string),
- enr_signature: fromHexString(operator.enr_signature as string),
- }
- })
- val.creator = configOnly
- ? { address: fromHexString(cluster.creator.address) }
- : {
- address: fromHexString(cluster.creator.address),
- config_signature: fromHexString(cluster.creator.config_signature as string),
- }
- val.validators = cluster.validators.map((validator) => {
- return {
- fee_recipient_address: fromHexString(validator.fee_recipient_address),
- withdrawal_address: fromHexString(validator.withdrawal_address),
- }
- })
-
- if (!configOnly) {
- val.config_hash = fromHexString(cluster.config_hash)
- }
- return val
-}
+ const definitionType = clusterDefinitionContainerTypeV1X6(configOnly);
+
+ const val = definitionType.defaultValue();
+
+ // order should be same as charon https://github.com/ObolNetwork/charon/blob/main/cluster/ssz.go#L276
+ val.uuid = strToUint8Array(cluster.uuid);
+ val.name = strToUint8Array(cluster.name);
+ val.version = strToUint8Array(cluster.version);
+ val.timestamp = strToUint8Array(cluster.timestamp);
+ val.num_validators = cluster.num_validators;
+ val.threshold = cluster.threshold;
+ val.dkg_algorithm = strToUint8Array(cluster.dkg_algorithm);
+ val.fork_version = fromHexString(cluster.fork_version);
+ val.operators = cluster.operators.map(operator => {
+ return configOnly
+ ? { address: fromHexString(operator.address) }
+ : {
+ address: fromHexString(operator.address),
+ enr: strToUint8Array(operator.enr as string),
+ config_signature: fromHexString(operator.config_signature as string),
+ enr_signature: fromHexString(operator.enr_signature as string),
+ };
+ });
+ val.creator = configOnly
+ ? { address: fromHexString(cluster.creator.address) }
+ : {
+ address: fromHexString(cluster.creator.address),
+ config_signature: fromHexString(
+ cluster.creator.config_signature as string,
+ ),
+ };
+ val.validators = cluster.validators.map(validator => {
+ return {
+ fee_recipient_address: fromHexString(validator.fee_recipient_address),
+ withdrawal_address: fromHexString(validator.withdrawal_address),
+ };
+ });
+
+ if (!configOnly) {
+ val.config_hash = fromHexString(cluster.config_hash);
+ }
+ return val;
+};
// cluster lock
const dvContainerTypeV1X6 = new ContainerType({
- distributed_public_key: new ByteVectorType(48),
- public_shares: new ListCompositeType(new ByteVectorType(48), 256),
- pubkey: new ByteVectorType(48),
- withdrawal_credentials: new ByteVectorType(32),
- amount: new UintNumberType(8 as UintNumberByteLen),
- signature: new ByteVectorType(96),
-})
+ distributed_public_key: new ByteVectorType(48),
+ public_shares: new ListCompositeType(new ByteVectorType(48), 256),
+ pubkey: new ByteVectorType(48),
+ withdrawal_credentials: new ByteVectorType(32),
+ amount: new UintNumberType(8 as UintNumberByteLen),
+ signature: new ByteVectorType(96),
+});
type LockContainerTypeV1X6 = ContainerType<{
- cluster_definition: DefinitionContainerTypeV1X6
- distributed_validators: ListCompositeType
-}>
+ cluster_definition: DefinitionContainerTypeV1X6;
+ distributed_validators: ListCompositeType;
+}>;
/**
* @returns SSZ Containerized type of cluster lock
*/
const clusterLockContainerTypeV1X6 = (): LockContainerTypeV1X6 => {
- return new ContainerType({
- cluster_definition: clusterDefinitionContainerTypeV1X6(false),
- distributed_validators: new ListCompositeType(dvContainerTypeV1X6, 65536),
- })
-}
+ return new ContainerType({
+ cluster_definition: clusterDefinitionContainerTypeV1X6(false),
+ distributed_validators: new ListCompositeType(dvContainerTypeV1X6, 65536),
+ });
+};
/**
* @param cluster The published cluster lock
* @returns The lock hash in of the corresponding cluster
*/
export const hashClusterLockV1X6 = (cluster: ClusterLock): string => {
- const lockType = clusterLockContainerTypeV1X6()
+ const lockType = clusterLockContainerTypeV1X6();
- const val = lockType.defaultValue()
+ const val = lockType.defaultValue();
- // Check if we can replace with definition_hash
- val.cluster_definition = hashClusterDefinitionV1X6(
- cluster.cluster_definition,
- false,
- )
- val.distributed_validators = cluster.distributed_validators.map(dValidator => {
- return {
- distributed_public_key: fromHexString(dValidator.distributed_public_key),
- public_shares: dValidator.public_shares.map(publicShare =>
- fromHexString(publicShare),
- ),
- pubkey: fromHexString(dValidator.deposit_data?.pubkey as string),
- withdrawal_credentials: fromHexString(
- dValidator.deposit_data?.withdrawal_credentials as string,
- ),
- amount: parseInt(dValidator.deposit_data?.amount as string),
- signature: fromHexString(dValidator.deposit_data?.signature as string),
- }
- })
-
- return '0x' + Buffer.from(lockType.hashTreeRoot(val).buffer).toString('hex')
-}
+ // Check if we can replace with definition_hash
+ val.cluster_definition = hashClusterDefinitionV1X6(
+ cluster.cluster_definition,
+ false,
+ );
+ val.distributed_validators = cluster.distributed_validators.map(
+ dValidator => {
+ return {
+ distributed_public_key: fromHexString(
+ dValidator.distributed_public_key,
+ ),
+ public_shares: dValidator.public_shares.map(publicShare =>
+ fromHexString(publicShare),
+ ),
+ pubkey: fromHexString(dValidator.deposit_data?.pubkey as string),
+ withdrawal_credentials: fromHexString(
+ dValidator.deposit_data?.withdrawal_credentials as string,
+ ),
+ amount: parseInt(dValidator.deposit_data?.amount as string),
+ signature: fromHexString(dValidator.deposit_data?.signature as string),
+ };
+ },
+ );
+
+ return '0x' + Buffer.from(lockType.hashTreeRoot(val).buffer).toString('hex');
+};
// DV verification
export const verifyDVV1X6 = (clusterLock: ClusterLock): boolean => {
- const validators = clusterLock.distributed_validators
- const pubShares = []
- const pubKeys = []
- const builderRegistrationAndDepositDataMessages = []
- const blsSignatures = []
-
- for (let i = 0; i < validators.length; i++) {
- const validator = validators[i]
- const validatorPublicShares = validator.public_shares
- const distributedPublicKey = validator.distributed_public_key
-
- // Needed in signature_aggregate verification
- for (const element of validatorPublicShares) {
- pubShares.push(fromHexString(element))
- }
-
- const { isValidDepositData, depositDataMsg } = verifyDepositData(
- distributedPublicKey,
- validator.deposit_data as Partial,
- clusterLock.cluster_definition.validators[i].withdrawal_address,
- clusterLock.cluster_definition.fork_version
- )
-
- if (
- !isValidDepositData
- ) {
- return false
- }
-
- pubKeys.push(fromHexString(validator.distributed_public_key))
- builderRegistrationAndDepositDataMessages.push(depositDataMsg)
- blsSignatures.push(fromHexString(validator.deposit_data?.signature as string))
- }
+ const validators = clusterLock.distributed_validators;
+ const pubShares = [];
+ const pubKeys = [];
+ const builderRegistrationAndDepositDataMessages = [];
+ const blsSignatures = [];
- const aggregateBLSSignature = aggregateSignatures(blsSignatures)
+ for (let i = 0; i < validators.length; i++) {
+ const validator = validators[i];
+ const validatorPublicShares = validator.public_shares;
+ const distributedPublicKey = validator.distributed_public_key;
- if (
- !verifyMultiple(
- pubKeys,
- builderRegistrationAndDepositDataMessages,
- aggregateBLSSignature,
- )
- ) {
- return false
+ // Needed in signature_aggregate verification
+ for (const element of validatorPublicShares) {
+ pubShares.push(fromHexString(element));
}
- if (
- !verifyAggregate(
- pubShares,
- fromHexString(clusterLock.lock_hash),
- fromHexString(clusterLock.signature_aggregate),
- )
- ) {
- return false
+ const { isValidDepositData, depositDataMsg } = verifyDepositData(
+ distributedPublicKey,
+ validator.deposit_data as Partial,
+ clusterLock.cluster_definition.validators[i].withdrawal_address,
+ clusterLock.cluster_definition.fork_version,
+ );
+
+ if (!isValidDepositData) {
+ return false;
}
- return true
-}
+ pubKeys.push(fromHexString(validator.distributed_public_key));
+ builderRegistrationAndDepositDataMessages.push(depositDataMsg);
+ blsSignatures.push(
+ fromHexString(validator.deposit_data?.signature as string),
+ );
+ }
+
+ const aggregateBLSSignature = aggregateSignatures(blsSignatures);
+
+ if (
+ !verifyMultiple(
+ pubKeys,
+ builderRegistrationAndDepositDataMessages,
+ aggregateBLSSignature,
+ )
+ ) {
+ return false;
+ }
+
+ if (
+ !verifyAggregate(
+ pubShares,
+ fromHexString(clusterLock.lock_hash),
+ fromHexString(clusterLock.signature_aggregate),
+ )
+ ) {
+ return false;
+ }
+
+ return true;
+};
diff --git a/src/verification/v1.7.0.ts b/src/verification/v1.7.0.ts
index abc0746..2e524f7 100644
--- a/src/verification/v1.7.0.ts
+++ b/src/verification/v1.7.0.ts
@@ -1,32 +1,62 @@
-import { type UintNumberByteLen, UintNumberType } from '@chainsafe/ssz/lib/type/uint'
-import { strToUint8Array } from '../utils'
-import { builderRegistrationContainer, type creatorAddressWrapperType, type creatorContainerType, depositDataContainer, newCreatorContainerType, newOperatorContainerType, type operatorAddressWrapperType, type operatorContainerType, validatorsContainerType } from './sszTypes'
-import { ByteListType, ByteVectorType, ContainerType, ListCompositeType, fromHexString } from '@chainsafe/ssz'
-import { type ValueOfFields } from '@chainsafe/ssz/lib/view/container'
-import { type ClusterDefinition, type ClusterLock, type DepositData } from '../types'
-import { verifyBuilderRegistration, verifyDepositData, verifyNodeSignatures } from './common'
-import { aggregateSignatures, verifyAggregate, verifyMultiple } from '@chainsafe/bls'
+import {
+ type UintNumberByteLen,
+ UintNumberType,
+} from '@chainsafe/ssz/lib/type/uint';
+import { strToUint8Array } from '../utils';
+import {
+ builderRegistrationContainer,
+ type creatorAddressWrapperType,
+ type creatorContainerType,
+ depositDataContainer,
+ newCreatorContainerType,
+ newOperatorContainerType,
+ type operatorAddressWrapperType,
+ type operatorContainerType,
+ validatorsContainerType,
+} from './sszTypes';
+import {
+ ByteListType,
+ ByteVectorType,
+ ContainerType,
+ ListCompositeType,
+ fromHexString,
+} from '@chainsafe/ssz';
+import { type ValueOfFields } from '@chainsafe/ssz/lib/view/container';
+import {
+ type ClusterDefinition,
+ type ClusterLock,
+ type DepositData,
+} from '../types';
+import {
+ verifyBuilderRegistration,
+ verifyDepositData,
+ verifyNodeSignatures,
+} from './common';
+import {
+ aggregateSignatures,
+ verifyAggregate,
+ verifyMultiple,
+} from '@chainsafe/bls';
// cluster definition
type DefinitionFieldsV1X7 = {
- uuid: ByteListType
- name: ByteListType
- version: ByteListType
- timestamp: ByteListType
- num_validators: UintNumberType
- threshold: UintNumberType
- dkg_algorithm: ByteListType
- fork_version: ByteVectorType
- operators: ListCompositeType<
- typeof operatorContainerType | typeof operatorAddressWrapperType
- >
- creator: typeof creatorContainerType | typeof creatorAddressWrapperType
- validators: ListCompositeType
- config_hash?: ByteVectorType
-}
-
-type DefinitionContainerTypeV1X7 =
- ContainerType
+ uuid: ByteListType;
+ name: ByteListType;
+ version: ByteListType;
+ timestamp: ByteListType;
+ num_validators: UintNumberType;
+ threshold: UintNumberType;
+ dkg_algorithm: ByteListType;
+ fork_version: ByteVectorType;
+ operators: ListCompositeType<
+ typeof operatorContainerType | typeof operatorAddressWrapperType
+ >;
+ creator: typeof creatorContainerType | typeof creatorAddressWrapperType;
+ validators: ListCompositeType;
+ config_hash?: ByteVectorType;
+};
+
+type DefinitionContainerTypeV1X7 = ContainerType;
/**
* Returns the containerized cluster definition
@@ -34,241 +64,246 @@ type DefinitionContainerTypeV1X7 =
* @returns SSZ Containerized type of cluster input
*/
export const clusterDefinitionContainerTypeV1X7 = (
- configOnly: boolean,
+ configOnly: boolean,
): DefinitionContainerTypeV1X7 => {
- let returnedContainerType: any = {
- uuid: new ByteListType(64),
- name: new ByteListType(256),
- version: new ByteListType(16),
- timestamp: new ByteListType(32),
- num_validators: new UintNumberType(8 as UintNumberByteLen),
- threshold: new UintNumberType(8 as UintNumberByteLen),
- dkg_algorithm: new ByteListType(32),
- fork_version: new ByteVectorType(4),
- operators: new ListCompositeType(newOperatorContainerType(configOnly), 256),
- creator: newCreatorContainerType(configOnly),
- validators: new ListCompositeType(validatorsContainerType, 65536),
- }
-
- if (!configOnly) {
- returnedContainerType = {
- ...returnedContainerType,
- config_hash: new ByteVectorType(32),
- }
- }
-
- return new ContainerType(returnedContainerType)
-}
+ let returnedContainerType: any = {
+ uuid: new ByteListType(64),
+ name: new ByteListType(256),
+ version: new ByteListType(16),
+ timestamp: new ByteListType(32),
+ num_validators: new UintNumberType(8 as UintNumberByteLen),
+ threshold: new UintNumberType(8 as UintNumberByteLen),
+ dkg_algorithm: new ByteListType(32),
+ fork_version: new ByteVectorType(4),
+ operators: new ListCompositeType(newOperatorContainerType(configOnly), 256),
+ creator: newCreatorContainerType(configOnly),
+ validators: new ListCompositeType(validatorsContainerType, 65536),
+ };
+
+ if (!configOnly) {
+ returnedContainerType = {
+ ...returnedContainerType,
+ config_hash: new ByteVectorType(32),
+ };
+ }
+
+ return new ContainerType(returnedContainerType);
+};
export const hashClusterDefinitionV1X7 = (
- cluster: ClusterDefinition,
- configOnly: boolean,
+ cluster: ClusterDefinition,
+ configOnly: boolean,
): ValueOfFields => {
- const definitionType = clusterDefinitionContainerTypeV1X7(configOnly)
-
- const val = definitionType.defaultValue()
-
- // order should be same as charon https://github.com/ObolNetwork/charon/blob/main/cluster/ssz.go#L276
- val.uuid = strToUint8Array(cluster.uuid)
- val.name = strToUint8Array(cluster.name)
- val.version = strToUint8Array(cluster.version)
- val.timestamp = strToUint8Array(cluster.timestamp)
- val.num_validators = cluster.num_validators
- val.threshold = cluster.threshold
- val.dkg_algorithm = strToUint8Array(cluster.dkg_algorithm)
- val.fork_version = fromHexString(cluster.fork_version)
- val.operators = cluster.operators.map(operator => {
- return configOnly
- ? { address: fromHexString(operator.address) }
- : {
- address: fromHexString(operator.address),
- enr: strToUint8Array(operator.enr as string),
- config_signature: fromHexString(operator.config_signature as string),
- enr_signature: fromHexString(operator.enr_signature as string),
- }
- })
- val.creator = configOnly
- ? { address: fromHexString(cluster.creator.address) }
- : {
- address: fromHexString(cluster.creator.address),
- config_signature: fromHexString(cluster.creator.config_signature as string),
- }
- val.validators = cluster.validators.map((validator) => {
- return {
- fee_recipient_address: fromHexString(validator.fee_recipient_address),
- withdrawal_address: fromHexString(validator.withdrawal_address),
- }
- })
-
- if (!configOnly) {
- val.config_hash = fromHexString(cluster.config_hash)
- }
- return val
-}
+ const definitionType = clusterDefinitionContainerTypeV1X7(configOnly);
+
+ const val = definitionType.defaultValue();
+
+ // order should be same as charon https://github.com/ObolNetwork/charon/blob/main/cluster/ssz.go#L276
+ val.uuid = strToUint8Array(cluster.uuid);
+ val.name = strToUint8Array(cluster.name);
+ val.version = strToUint8Array(cluster.version);
+ val.timestamp = strToUint8Array(cluster.timestamp);
+ val.num_validators = cluster.num_validators;
+ val.threshold = cluster.threshold;
+ val.dkg_algorithm = strToUint8Array(cluster.dkg_algorithm);
+ val.fork_version = fromHexString(cluster.fork_version);
+ val.operators = cluster.operators.map(operator => {
+ return configOnly
+ ? { address: fromHexString(operator.address) }
+ : {
+ address: fromHexString(operator.address),
+ enr: strToUint8Array(operator.enr as string),
+ config_signature: fromHexString(operator.config_signature as string),
+ enr_signature: fromHexString(operator.enr_signature as string),
+ };
+ });
+ val.creator = configOnly
+ ? { address: fromHexString(cluster.creator.address) }
+ : {
+ address: fromHexString(cluster.creator.address),
+ config_signature: fromHexString(
+ cluster.creator.config_signature as string,
+ ),
+ };
+ val.validators = cluster.validators.map(validator => {
+ return {
+ fee_recipient_address: fromHexString(validator.fee_recipient_address),
+ withdrawal_address: fromHexString(validator.withdrawal_address),
+ };
+ });
+
+ if (!configOnly) {
+ val.config_hash = fromHexString(cluster.config_hash);
+ }
+ return val;
+};
// cluster lock
const dvContainerTypeV1X7 = new ContainerType({
- distributed_public_key: new ByteVectorType(48),
- public_shares: new ListCompositeType(new ByteVectorType(48), 256),
- deposit_data: depositDataContainer,
- builder_registration: builderRegistrationContainer,
-})
+ distributed_public_key: new ByteVectorType(48),
+ public_shares: new ListCompositeType(new ByteVectorType(48), 256),
+ deposit_data: depositDataContainer,
+ builder_registration: builderRegistrationContainer,
+});
type LockContainerTypeV1X7 = ContainerType<{
- cluster_definition: DefinitionContainerTypeV1X7
- distributed_validators: ListCompositeType
-}>
+ cluster_definition: DefinitionContainerTypeV1X7;
+ distributed_validators: ListCompositeType;
+}>;
/**
* @returns SSZ Containerized type of cluster lock
*/
const clusterLockContainerTypeV1X7 = (): LockContainerTypeV1X7 => {
- return new ContainerType({
- cluster_definition: clusterDefinitionContainerTypeV1X7(false),
- distributed_validators: new ListCompositeType(dvContainerTypeV1X7, 65536),
- })
-}
+ return new ContainerType({
+ cluster_definition: clusterDefinitionContainerTypeV1X7(false),
+ distributed_validators: new ListCompositeType(dvContainerTypeV1X7, 65536),
+ });
+};
/**
* @param cluster The published cluster lock
* @returns The lock hash in of the corresponding cluster
*/
export const hashClusterLockV1X7 = (cluster: ClusterLock): string => {
- const lockType = clusterLockContainerTypeV1X7()
-
- const val = lockType.defaultValue()
-
- // Check if we can replace with definition_hash
- val.cluster_definition = hashClusterDefinitionV1X7(
- cluster.cluster_definition,
- false,
- )
- val.distributed_validators = cluster.distributed_validators.map(
- (dValidator) => {
- return {
- distributed_public_key: fromHexString(dValidator.distributed_public_key),
- public_shares: dValidator.public_shares.map((publicShare) =>
- fromHexString(publicShare),
- ),
- deposit_data: {
- pubkey: fromHexString(dValidator.deposit_data?.pubkey as string),
- withdrawal_credentials: fromHexString(
- dValidator.deposit_data?.withdrawal_credentials as string,
- ),
- amount: parseInt(dValidator.deposit_data?.amount as string),
- signature: fromHexString(dValidator.deposit_data?.signature as string),
- },
- builder_registration: {
- message: {
- fee_recipient: fromHexString(
- dValidator.builder_registration?.message.fee_recipient as string,
- ),
- gas_limit: dValidator.builder_registration?.message.gas_limit as number,
- timestamp: dValidator.builder_registration?.message.timestamp as number,
- pubkey: fromHexString(
- dValidator.builder_registration?.message.pubkey as string,
- ),
- },
- signature: fromHexString(dValidator.builder_registration?.signature as string),
- },
- }
+ const lockType = clusterLockContainerTypeV1X7();
+
+ const val = lockType.defaultValue();
+
+ // Check if we can replace with definition_hash
+ val.cluster_definition = hashClusterDefinitionV1X7(
+ cluster.cluster_definition,
+ false,
+ );
+ val.distributed_validators = cluster.distributed_validators.map(
+ dValidator => {
+ return {
+ distributed_public_key: fromHexString(
+ dValidator.distributed_public_key,
+ ),
+ public_shares: dValidator.public_shares.map(publicShare =>
+ fromHexString(publicShare),
+ ),
+ deposit_data: {
+ pubkey: fromHexString(dValidator.deposit_data?.pubkey as string),
+ withdrawal_credentials: fromHexString(
+ dValidator.deposit_data?.withdrawal_credentials as string,
+ ),
+ amount: parseInt(dValidator.deposit_data?.amount as string),
+ signature: fromHexString(
+ dValidator.deposit_data?.signature as string,
+ ),
},
- )
+ builder_registration: {
+ message: {
+ fee_recipient: fromHexString(
+ dValidator.builder_registration?.message.fee_recipient as string,
+ ),
+ gas_limit: dValidator.builder_registration?.message
+ .gas_limit as number,
+ timestamp: dValidator.builder_registration?.message
+ .timestamp as number,
+ pubkey: fromHexString(
+ dValidator.builder_registration?.message.pubkey as string,
+ ),
+ },
+ signature: fromHexString(
+ dValidator.builder_registration?.signature as string,
+ ),
+ },
+ };
+ },
+ );
- return '0x' + Buffer.from(lockType.hashTreeRoot(val).buffer).toString('hex')
-}
+ return '0x' + Buffer.from(lockType.hashTreeRoot(val).buffer).toString('hex');
+};
// DV verification
export const verifyDVV1X7 = (clusterLock: ClusterLock): boolean => {
- const validators = clusterLock.distributed_validators
-
- const pubShares = []
-
- const pubKeys = []
- const builderRegistrationAndDepositDataMessages = []
- const blsSignatures = []
-
- for (let i = 0; i < validators.length; i++) {
- const validator = validators[i]
- const validatorPublicShares = validator.public_shares
- const distributedPublicKey = validator.distributed_public_key
-
- // Needed in signature_aggregate verification
- for (const element of validatorPublicShares) {
- pubShares.push(fromHexString(element))
- }
-
- // Deposit Data Verification
- const { isValidDepositData, depositDataMsg } = verifyDepositData(
- distributedPublicKey,
- validator.deposit_data as Partial,
- clusterLock.cluster_definition.validators[i].withdrawal_address,
- clusterLock.cluster_definition.fork_version
- )
-
- if (
- !isValidDepositData
- ) {
- return false
- }
-
- pubKeys.push(fromHexString(distributedPublicKey))
- builderRegistrationAndDepositDataMessages.push(depositDataMsg)
- blsSignatures.push(fromHexString(validator.deposit_data?.signature as string))
-
- // Builder Registration Verification
- const { isValidBuilderRegistration, builderRegistrationMsg } = verifyBuilderRegistration(
- validator,
- clusterLock.cluster_definition.validators[i].fee_recipient_address,
- clusterLock.cluster_definition.fork_version
- )
-
- if (
- !isValidBuilderRegistration
- ) {
- return false
- }
-
- pubKeys.push(fromHexString(distributedPublicKey))
- builderRegistrationAndDepositDataMessages.push(builderRegistrationMsg)
- blsSignatures.push(
- fromHexString(validator.builder_registration?.signature as string),
- )
- }
+ const validators = clusterLock.distributed_validators;
+
+ const pubShares = [];
+
+ const pubKeys = [];
+ const builderRegistrationAndDepositDataMessages = [];
+ const blsSignatures = [];
+
+ for (let i = 0; i < validators.length; i++) {
+ const validator = validators[i];
+ const validatorPublicShares = validator.public_shares;
+ const distributedPublicKey = validator.distributed_public_key;
- // BLS signatures verification
- const aggregateBLSSignature = aggregateSignatures(blsSignatures)
-
- if (
- !verifyMultiple(
- pubKeys,
- builderRegistrationAndDepositDataMessages,
- aggregateBLSSignature,
- )
- ) {
- return false
+ // Needed in signature_aggregate verification
+ for (const element of validatorPublicShares) {
+ pubShares.push(fromHexString(element));
}
- // Node Signatures verification
- if (
- !verifyNodeSignatures(
- clusterLock
- )
- ) {
- return false
+ // Deposit Data Verification
+ const { isValidDepositData, depositDataMsg } = verifyDepositData(
+ distributedPublicKey,
+ validator.deposit_data as Partial,
+ clusterLock.cluster_definition.validators[i].withdrawal_address,
+ clusterLock.cluster_definition.fork_version,
+ );
+
+ if (!isValidDepositData) {
+ return false;
}
- // signature_aggregate verification
- if (
- !verifyAggregate(
- pubShares,
- fromHexString(clusterLock.lock_hash),
- fromHexString(clusterLock.signature_aggregate),
- )
- ) {
- return false
+ pubKeys.push(fromHexString(distributedPublicKey));
+ builderRegistrationAndDepositDataMessages.push(depositDataMsg);
+ blsSignatures.push(
+ fromHexString(validator.deposit_data?.signature as string),
+ );
+
+ // Builder Registration Verification
+ const { isValidBuilderRegistration, builderRegistrationMsg } =
+ verifyBuilderRegistration(
+ validator,
+ clusterLock.cluster_definition.validators[i].fee_recipient_address,
+ clusterLock.cluster_definition.fork_version,
+ );
+
+ if (!isValidBuilderRegistration) {
+ return false;
}
- return true
-}
+ pubKeys.push(fromHexString(distributedPublicKey));
+ builderRegistrationAndDepositDataMessages.push(builderRegistrationMsg);
+ blsSignatures.push(
+ fromHexString(validator.builder_registration?.signature as string),
+ );
+ }
+
+ // BLS signatures verification
+ const aggregateBLSSignature = aggregateSignatures(blsSignatures);
+
+ if (
+ !verifyMultiple(
+ pubKeys,
+ builderRegistrationAndDepositDataMessages,
+ aggregateBLSSignature,
+ )
+ ) {
+ return false;
+ }
+
+ // Node Signatures verification
+ if (!verifyNodeSignatures(clusterLock)) {
+ return false;
+ }
+
+ // signature_aggregate verification
+ if (
+ !verifyAggregate(
+ pubShares,
+ fromHexString(clusterLock.lock_hash),
+ fromHexString(clusterLock.signature_aggregate),
+ )
+ ) {
+ return false;
+ }
+
+ return true;
+};
diff --git a/src/verification/v1.8.0.ts b/src/verification/v1.8.0.ts
index 64bffca..8fff5d4 100644
--- a/src/verification/v1.8.0.ts
+++ b/src/verification/v1.8.0.ts
@@ -1,32 +1,64 @@
-import { type UintNumberByteLen, UintNumberType } from '@chainsafe/ssz/lib/type/uint'
-import { strToUint8Array } from '../utils'
-import { builderRegistrationContainer, type creatorAddressWrapperType, type creatorContainerType, depositDataContainer, newCreatorContainerType, newOperatorContainerType, type operatorAddressWrapperType, type operatorContainerType, validatorsContainerType } from './sszTypes'
-import { ByteListType, ByteVectorType, ContainerType, ListBasicType, ListCompositeType, fromHexString } from '@chainsafe/ssz'
-import { type ValueOfFields } from '@chainsafe/ssz/lib/view/container'
-import { type ClusterDefinition, type ClusterLock, type DepositData } from '../types'
-import { verifyBuilderRegistration, verifyDepositData, verifyNodeSignatures } from './common'
-import { aggregateSignatures, verifyAggregate, verifyMultiple } from '@chainsafe/bls'
+import {
+ type UintNumberByteLen,
+ UintNumberType,
+} from '@chainsafe/ssz/lib/type/uint';
+import { strToUint8Array } from '../utils';
+import {
+ builderRegistrationContainer,
+ type creatorAddressWrapperType,
+ type creatorContainerType,
+ depositDataContainer,
+ newCreatorContainerType,
+ newOperatorContainerType,
+ type operatorAddressWrapperType,
+ type operatorContainerType,
+ validatorsContainerType,
+} from './sszTypes';
+import {
+ ByteListType,
+ ByteVectorType,
+ ContainerType,
+ ListBasicType,
+ ListCompositeType,
+ fromHexString,
+} from '@chainsafe/ssz';
+import { type ValueOfFields } from '@chainsafe/ssz/lib/view/container';
+import {
+ type ClusterDefinition,
+ type ClusterLock,
+ type DepositData,
+} from '../types';
+import {
+ verifyBuilderRegistration,
+ verifyDepositData,
+ verifyNodeSignatures,
+} from './common';
+import {
+ aggregateSignatures,
+ verifyAggregate,
+ verifyMultiple,
+} from '@chainsafe/bls';
// cluster definition
type DefinitionFieldsV1X8 = {
- uuid: ByteListType
- name: ByteListType
- version: ByteListType
- timestamp: ByteListType
- num_validators: UintNumberType
- threshold: UintNumberType
- dkg_algorithm: ByteListType
- fork_version: ByteVectorType
- operators: ListCompositeType<
- typeof operatorContainerType | typeof operatorAddressWrapperType
- >
- creator: typeof creatorContainerType | typeof creatorAddressWrapperType
- validators: ListCompositeType
- deposit_amounts: ListBasicType
- config_hash?: ByteVectorType
-}
+ uuid: ByteListType;
+ name: ByteListType;
+ version: ByteListType;
+ timestamp: ByteListType;
+ num_validators: UintNumberType;
+ threshold: UintNumberType;
+ dkg_algorithm: ByteListType;
+ fork_version: ByteVectorType;
+ operators: ListCompositeType<
+ typeof operatorContainerType | typeof operatorAddressWrapperType
+ >;
+ creator: typeof creatorContainerType | typeof creatorAddressWrapperType;
+ validators: ListCompositeType;
+ deposit_amounts: ListBasicType;
+ config_hash?: ByteVectorType;
+};
-type DefinitionContainerTypeV1X8 = ContainerType
+type DefinitionContainerTypeV1X8 = ContainerType;
/**
* Returns the containerized cluster definition
@@ -34,248 +66,257 @@ type DefinitionContainerTypeV1X8 = ContainerType
* @returns SSZ Containerized type of cluster input
*/
export const clusterDefinitionContainerTypeV1X8 = (
- configOnly: boolean,
+ configOnly: boolean,
): DefinitionContainerTypeV1X8 => {
- let returnedContainerType: any = {
- uuid: new ByteListType(64),
- name: new ByteListType(256),
- version: new ByteListType(16),
- timestamp: new ByteListType(32),
- num_validators: new UintNumberType(8 as UintNumberByteLen),
- threshold: new UintNumberType(8 as UintNumberByteLen),
- dkg_algorithm: new ByteListType(32),
- fork_version: new ByteVectorType(4),
- operators: new ListCompositeType(newOperatorContainerType(configOnly), 256),
- creator: newCreatorContainerType(configOnly),
- validators: new ListCompositeType(validatorsContainerType, 65536),
- deposit_amounts: new ListBasicType(
- new UintNumberType(8 as UintNumberByteLen),
- 256,
- ),
- }
+ let returnedContainerType: any = {
+ uuid: new ByteListType(64),
+ name: new ByteListType(256),
+ version: new ByteListType(16),
+ timestamp: new ByteListType(32),
+ num_validators: new UintNumberType(8 as UintNumberByteLen),
+ threshold: new UintNumberType(8 as UintNumberByteLen),
+ dkg_algorithm: new ByteListType(32),
+ fork_version: new ByteVectorType(4),
+ operators: new ListCompositeType(newOperatorContainerType(configOnly), 256),
+ creator: newCreatorContainerType(configOnly),
+ validators: new ListCompositeType(validatorsContainerType, 65536),
+ deposit_amounts: new ListBasicType(
+ new UintNumberType(8 as UintNumberByteLen),
+ 256,
+ ),
+ };
- if (!configOnly) {
- returnedContainerType = {
- ...returnedContainerType,
- config_hash: new ByteVectorType(32),
- }
- }
+ if (!configOnly) {
+ returnedContainerType = {
+ ...returnedContainerType,
+ config_hash: new ByteVectorType(32),
+ };
+ }
- return new ContainerType(returnedContainerType)
-}
+ return new ContainerType(returnedContainerType);
+};
export const hashClusterDefinitionV1X8 = (
- cluster: ClusterDefinition,
- configOnly: boolean,
+ cluster: ClusterDefinition,
+ configOnly: boolean,
): ValueOfFields => {
- const definitionType = clusterDefinitionContainerTypeV1X8(configOnly)
+ const definitionType = clusterDefinitionContainerTypeV1X8(configOnly);
- const val = definitionType.defaultValue()
+ const val = definitionType.defaultValue();
- // order should be same as charon https://github.com/ObolNetwork/charon/blob/main/cluster/ssz.go#L276
- val.uuid = strToUint8Array(cluster.uuid)
- val.name = strToUint8Array(cluster.name)
- val.version = strToUint8Array(cluster.version)
- val.timestamp = strToUint8Array(cluster.timestamp)
- val.num_validators = cluster.num_validators
- val.threshold = cluster.threshold
- val.dkg_algorithm = strToUint8Array(cluster.dkg_algorithm)
- val.fork_version = fromHexString(cluster.fork_version)
- val.operators = cluster.operators.map(operator => {
- return configOnly
- ? { address: fromHexString(operator.address) }
- : {
- address: fromHexString(operator.address),
- enr: strToUint8Array(operator.enr as string),
- config_signature: fromHexString(operator.config_signature as string),
- enr_signature: fromHexString(operator.enr_signature as string),
- }
- })
- val.creator = configOnly
- ? { address: fromHexString(cluster.creator.address) }
- : {
- address: fromHexString(cluster.creator.address),
- config_signature: fromHexString(cluster.creator.config_signature as string),
- }
- val.validators = cluster.validators.map((validator) => {
- return {
- fee_recipient_address: fromHexString(validator.fee_recipient_address),
- withdrawal_address: fromHexString(validator.withdrawal_address),
- }
- })
- val.deposit_amounts = (cluster.deposit_amounts as string[]).map((amount: string) => {
- return parseInt(amount)
- })
+ // order should be same as charon https://github.com/ObolNetwork/charon/blob/main/cluster/ssz.go#L276
+ val.uuid = strToUint8Array(cluster.uuid);
+ val.name = strToUint8Array(cluster.name);
+ val.version = strToUint8Array(cluster.version);
+ val.timestamp = strToUint8Array(cluster.timestamp);
+ val.num_validators = cluster.num_validators;
+ val.threshold = cluster.threshold;
+ val.dkg_algorithm = strToUint8Array(cluster.dkg_algorithm);
+ val.fork_version = fromHexString(cluster.fork_version);
+ val.operators = cluster.operators.map(operator => {
+ return configOnly
+ ? { address: fromHexString(operator.address) }
+ : {
+ address: fromHexString(operator.address),
+ enr: strToUint8Array(operator.enr as string),
+ config_signature: fromHexString(operator.config_signature as string),
+ enr_signature: fromHexString(operator.enr_signature as string),
+ };
+ });
+ val.creator = configOnly
+ ? { address: fromHexString(cluster.creator.address) }
+ : {
+ address: fromHexString(cluster.creator.address),
+ config_signature: fromHexString(
+ cluster.creator.config_signature as string,
+ ),
+ };
+ val.validators = cluster.validators.map(validator => {
+ return {
+ fee_recipient_address: fromHexString(validator.fee_recipient_address),
+ withdrawal_address: fromHexString(validator.withdrawal_address),
+ };
+ });
+ val.deposit_amounts = (cluster.deposit_amounts as string[]).map(
+ (amount: string) => {
+ return parseInt(amount);
+ },
+ );
- if (!configOnly) {
- val.config_hash = fromHexString(cluster.config_hash)
- }
- return val
-}
+ if (!configOnly) {
+ val.config_hash = fromHexString(cluster.config_hash);
+ }
+ return val;
+};
// cluster lock
const dvContainerTypeV1X8 = new ContainerType({
- distributed_public_key: new ByteVectorType(48),
- public_shares: new ListCompositeType(new ByteVectorType(48), 256),
- partial_deposit_data: new ListCompositeType(depositDataContainer, 256),
- builder_registration: builderRegistrationContainer,
-})
+ distributed_public_key: new ByteVectorType(48),
+ public_shares: new ListCompositeType(new ByteVectorType(48), 256),
+ partial_deposit_data: new ListCompositeType(depositDataContainer, 256),
+ builder_registration: builderRegistrationContainer,
+});
type LockContainerTypeV1X8 = ContainerType<{
- cluster_definition: DefinitionContainerTypeV1X8
- distributed_validators: ListCompositeType
-}>
+ cluster_definition: DefinitionContainerTypeV1X8;
+ distributed_validators: ListCompositeType;
+}>;
/**
* @returns SSZ Containerized type of cluster lock
*/
const clusterLockContainerTypeV1X8 = (): LockContainerTypeV1X8 => {
- return new ContainerType({
- cluster_definition: clusterDefinitionContainerTypeV1X8(false),
- distributed_validators: new ListCompositeType(dvContainerTypeV1X8, 65536),
- })
-}
+ return new ContainerType({
+ cluster_definition: clusterDefinitionContainerTypeV1X8(false),
+ distributed_validators: new ListCompositeType(dvContainerTypeV1X8, 65536),
+ });
+};
/**
* @param cluster The published cluster lock
* @returns The lock hash in of the corresponding cluster
*/
export const hashClusterLockV1X8 = (cluster: ClusterLock): string => {
- const lockType = clusterLockContainerTypeV1X8()
+ const lockType = clusterLockContainerTypeV1X8();
- const val = lockType.defaultValue()
+ const val = lockType.defaultValue();
- // Check if we can replace with definition_hash
- val.cluster_definition = hashClusterDefinitionV1X8(
- cluster.cluster_definition,
- false,
- )
- val.distributed_validators = cluster.distributed_validators.map(dValidator => {
- return {
- distributed_public_key: fromHexString(dValidator.distributed_public_key),
- public_shares: dValidator.public_shares.map(publicShare =>
- fromHexString(publicShare),
+ // Check if we can replace with definition_hash
+ val.cluster_definition = hashClusterDefinitionV1X8(
+ cluster.cluster_definition,
+ false,
+ );
+ val.distributed_validators = cluster.distributed_validators.map(
+ dValidator => {
+ return {
+ distributed_public_key: fromHexString(
+ dValidator.distributed_public_key,
+ ),
+ public_shares: dValidator.public_shares.map(publicShare =>
+ fromHexString(publicShare),
+ ),
+ // should be fixed
+ partial_deposit_data: (
+ dValidator.partial_deposit_data as DepositData[]
+ ).map(depositData => {
+ return {
+ pubkey: fromHexString(depositData.pubkey),
+ withdrawal_credentials: fromHexString(
+ depositData.withdrawal_credentials,
+ ),
+ amount: parseInt(depositData.amount),
+ signature: fromHexString(depositData.signature),
+ };
+ }),
+ builder_registration: {
+ message: {
+ fee_recipient: fromHexString(
+ dValidator.builder_registration?.message.fee_recipient as string,
+ ),
+ gas_limit: dValidator.builder_registration?.message
+ .gas_limit as number,
+ timestamp: dValidator.builder_registration?.message
+ .timestamp as number,
+ pubkey: fromHexString(
+ dValidator.builder_registration?.message.pubkey as string,
),
- // should be fixed
- partial_deposit_data: (dValidator.partial_deposit_data as DepositData[]).map(depositData => {
- return {
- pubkey: fromHexString(depositData.pubkey),
- withdrawal_credentials: fromHexString(
- depositData.withdrawal_credentials,
- ),
- amount: parseInt(depositData.amount),
- signature: fromHexString(depositData.signature),
- }
- }),
- builder_registration: {
- message: {
- fee_recipient: fromHexString(
- dValidator.builder_registration?.message.fee_recipient as string,
- ),
- gas_limit: dValidator.builder_registration?.message.gas_limit as number,
- timestamp: dValidator.builder_registration?.message.timestamp as number,
- pubkey: fromHexString(dValidator.builder_registration?.message.pubkey as string),
- },
- signature: fromHexString(dValidator.builder_registration?.signature as string),
- },
- }
- })
+ },
+ signature: fromHexString(
+ dValidator.builder_registration?.signature as string,
+ ),
+ },
+ };
+ },
+ );
- return '0x' + Buffer.from(lockType.hashTreeRoot(val).buffer).toString('hex')
-}
+ return '0x' + Buffer.from(lockType.hashTreeRoot(val).buffer).toString('hex');
+};
// DV verification
export const verifyDVV1X8 = (clusterLock: ClusterLock): boolean => {
- const validators = clusterLock.distributed_validators
- const pubShares = []
- const pubKeys = []
- const builderRegistrationAndDepositDataMessages = []
- const blsSignatures = []
+ const validators = clusterLock.distributed_validators;
+ const pubShares = [];
+ const pubKeys = [];
+ const builderRegistrationAndDepositDataMessages = [];
+ const blsSignatures = [];
- for (let i = 0; i < validators.length; i++) {
- const validator = validators[i]
- const validatorPublicShares = validator.public_shares
- const distributedPublicKey = validator.distributed_public_key
+ for (let i = 0; i < validators.length; i++) {
+ const validator = validators[i];
+ const validatorPublicShares = validator.public_shares;
+ const distributedPublicKey = validator.distributed_public_key;
- // Needed in signature_aggregate verification
- for (const element of validatorPublicShares) {
- pubShares.push(fromHexString(element))
- }
-
- // Deposit Data Verification
- for (let j = 0; j < (validator.partial_deposit_data as DepositData[]).length; j++) {
- const depositData = (validator.partial_deposit_data as DepositData[])[j]
- const { isValidDepositData, depositDataMsg } = verifyDepositData(
- distributedPublicKey,
- depositData as Partial,
- clusterLock.cluster_definition.validators[i].withdrawal_address,
- clusterLock.cluster_definition.fork_version
- )
+ // Needed in signature_aggregate verification
+ for (const element of validatorPublicShares) {
+ pubShares.push(fromHexString(element));
+ }
- if (
- !isValidDepositData
- ) {
- return false
- }
+ // Deposit Data Verification
+ for (const element of validator.partial_deposit_data as DepositData[]) {
+ const depositData = element;
+ const { isValidDepositData, depositDataMsg } = verifyDepositData(
+ distributedPublicKey,
+ depositData as Partial,
+ clusterLock.cluster_definition.validators[i].withdrawal_address,
+ clusterLock.cluster_definition.fork_version,
+ );
- pubKeys.push(fromHexString(distributedPublicKey))
- builderRegistrationAndDepositDataMessages.push(depositDataMsg)
- blsSignatures.push(fromHexString(depositData?.signature))
- }
+ if (!isValidDepositData) {
+ return false;
+ }
- // Builder Registration Verification
- const { isValidBuilderRegistration, builderRegistrationMsg } = verifyBuilderRegistration(
- validator,
- clusterLock.cluster_definition.validators[i].fee_recipient_address,
- clusterLock.cluster_definition.fork_version
- )
+ pubKeys.push(fromHexString(distributedPublicKey));
+ builderRegistrationAndDepositDataMessages.push(depositDataMsg);
+ blsSignatures.push(fromHexString(depositData?.signature));
+ }
- if (
- !isValidBuilderRegistration
- ) {
- return false
- }
+ // Builder Registration Verification
+ const { isValidBuilderRegistration, builderRegistrationMsg } =
+ verifyBuilderRegistration(
+ validator,
+ clusterLock.cluster_definition.validators[i].fee_recipient_address,
+ clusterLock.cluster_definition.fork_version,
+ );
- pubKeys.push(fromHexString(distributedPublicKey))
- builderRegistrationAndDepositDataMessages.push(builderRegistrationMsg)
- blsSignatures.push(
- fromHexString(validator.builder_registration?.signature as string),
- )
+ if (!isValidBuilderRegistration) {
+ return false;
}
- // BLS signatures verification
- const aggregateBLSSignature = aggregateSignatures(blsSignatures)
+ pubKeys.push(fromHexString(distributedPublicKey));
+ builderRegistrationAndDepositDataMessages.push(builderRegistrationMsg);
+ blsSignatures.push(
+ fromHexString(validator.builder_registration?.signature as string),
+ );
+ }
- if (
- !verifyMultiple(
- pubKeys,
- builderRegistrationAndDepositDataMessages,
- aggregateBLSSignature,
- )
- ) {
- return false
- }
+ // BLS signatures verification
+ const aggregateBLSSignature = aggregateSignatures(blsSignatures);
- // Node Signatures verification
- if (
- !verifyNodeSignatures(
- clusterLock
- )
- ) {
- return false
- }
+ if (
+ !verifyMultiple(
+ pubKeys,
+ builderRegistrationAndDepositDataMessages,
+ aggregateBLSSignature,
+ )
+ ) {
+ return false;
+ }
- // signature_aggregate verification
- if (
- !verifyAggregate(
- pubShares,
- fromHexString(clusterLock.lock_hash),
- fromHexString(clusterLock.signature_aggregate),
- )
- ) {
- return false
- }
+ // Node Signatures verification
+ if (!verifyNodeSignatures(clusterLock)) {
+ return false;
+ }
+
+ // signature_aggregate verification
+ if (
+ !verifyAggregate(
+ pubShares,
+ fromHexString(clusterLock.lock_hash),
+ fromHexString(clusterLock.signature_aggregate),
+ )
+ ) {
+ return false;
+ }
- return true
-}
+ return true;
+};
diff --git a/test/fixtures.ts b/test/fixtures.ts
index 23a6da1..3ad338b 100644
--- a/test/fixtures.ts
+++ b/test/fixtures.ts
@@ -1,5 +1,5 @@
export const enr =
- 'enr:-HW4QLlrtMjFLGkFT1bwdGbvZQlH8hLi0M2g44JAxEYP3BZmYpcsy9Q56HPPD87fMucjvLv4-obEFacpsg0ehRilbHeAgmlkgnY0iXNlY3AyNTZrMaEDRaa5o2aSgqyFq_ERZcQTztrOij1mFtXX1bJuVI6ieak'
+ 'enr:-HW4QLlrtMjFLGkFT1bwdGbvZQlH8hLi0M2g44JAxEYP3BZmYpcsy9Q56HPPD87fMucjvLv4-obEFacpsg0ehRilbHeAgmlkgnY0iXNlY3AyNTZrMaEDRaa5o2aSgqyFq_ERZcQTztrOij1mFtXX1bJuVI6ieak';
// v1.6.0
export const clusterLockV1X6 = {
@@ -87,7 +87,7 @@ export const clusterLockV1X6 = {
'0xb7f49e8eaa4015a3118deace6d17c9aef8a495b0ce460b0f1d27423101177000541a9d422fcc4eeedbaaa2497c555d8d0ba7ee882a5eaecfb89e7dcec2f2f3f5df78bc172e03be426c5f0835cbe58dac43e5812de5c21d2755693de2af80f491',
lock_hash:
'0x6d2b38d098143c8f0bc5076f4e9b6081cbba040a5aea6649e6223e7a4131241b',
-}
+};
// v1.7.0
@@ -105,7 +105,7 @@ export const clusterConfigV1X7 = {
withdrawal_address: '0xE0C5ceA4D3869F156717C66E188Ae81C80914a6e',
},
],
-}
+};
export const clusterLockV1X7 = {
cluster_definition: {
@@ -209,7 +209,7 @@ export const clusterLockV1X7 = {
'0xebd08c9ece21abd78cfe82bc32eae68ccd77fc1e96e56ce93679918c5adcb2c92564a4fa609d7649587fbfb0c581403da8553e9e62c910e5ae589625704aa02b00',
'0xa07fc8f89f32a5b2551cc2173b0486f86142ee2a67400d2d4a956a2b948da96b58adddf558db6ac84de62242b5e56b1a1e95d26451be3a922fe3929f2a367a7400',
],
-}
+};
// v1.8.0
@@ -227,44 +227,49 @@ export const clusterConfigV1X8 = {
withdrawal_address: '0xE0C5ceA4D3869F156717C66E188Ae81C80914a6e',
},
],
- deposit_amounts: [
- '8000000000',
- '16000000000',
- '8000000000'
- ],
-}
+ deposit_amounts: ['8000000000', '16000000000', '8000000000'],
+};
export const clusterLockV1X8 = {
cluster_definition: {
name: 'xxxx',
creator: {
address: '0x86B8145c98e5BD25BA722645b15eD65f024a87EC',
- config_signature: '0xd30b182fadbc2c5b2bb3f3f6ed6ac2588f297ceb610ed5509bf3e5a25a9b30c70f8a09ef1d2c8e1dbe5ff441299fe66ec677734cc08beec87e94b7effcb089701b'
+ config_signature:
+ '0xd30b182fadbc2c5b2bb3f3f6ed6ac2588f297ceb610ed5509bf3e5a25a9b30c70f8a09ef1d2c8e1dbe5ff441299fe66ec677734cc08beec87e94b7effcb089701b',
},
operators: [
{
address: '0x86B8145c98e5BD25BA722645b15eD65f024a87EC',
enr: 'enr:-HW4QLlrtMjFLGkFT1bwdGbvZQlH8hLi0M2g44JAxEYP3BZmYpcsy9Q56HPPD87fMucjvLv4-obEFacpsg0ehRilbHeAgmlkgnY0iXNlY3AyNTZrMaEDRaa5o2aSgqyFq_ERZcQTztrOij1mFtXX1bJuVI6ieak',
- config_signature: '0x3df771ecfc9ae2d01da9249dc636a42893e48759c0fa5c51f5e5e14f3ea4513233d1e3bbdd0e11d4b67c8a907201fd08225a75a1e2d6f510a439d6b15f0c36341c',
- enr_signature: '0x3fe2a124dabe3d517e4c274074b3529d36d9528ca6fa8a4e74ef356f86a07c1462fe72a5336421c2647be7babc4ce1835c2101133e0779cf81d4a8d8cb9fe5591c'
+ config_signature:
+ '0x3df771ecfc9ae2d01da9249dc636a42893e48759c0fa5c51f5e5e14f3ea4513233d1e3bbdd0e11d4b67c8a907201fd08225a75a1e2d6f510a439d6b15f0c36341c',
+ enr_signature:
+ '0x3fe2a124dabe3d517e4c274074b3529d36d9528ca6fa8a4e74ef356f86a07c1462fe72a5336421c2647be7babc4ce1835c2101133e0779cf81d4a8d8cb9fe5591c',
},
{
address: '0xC35CfCd67b9C27345a54EDEcC1033F2284148c81',
enr: 'enr:-Iu4QNbiUUUwT18LynBbVPJhNxvzQsaSpUr40mQTWscnZaqKb6vAlvV8j-eDDR3E0wjMQumGRbGm2IAb5_k4bVWJiVGAgmlkgnY0gmlwhH8AAAGJc2VjcDI1NmsxoQPOiodUji0ohgJb5sNK1hgv8g6xO5_znZz3NkkBkyYyKIN0Y3CCDhqDdWRwgg4u',
- config_signature: '0x12d19d6fc4c1a5d9e7be09f47c2f2357dd89f47aba8ae0185f5345e08bcc3adc324bdd51e68a12c3ca34c604d786cfde5f0798aa928dac496edb16c70e7086551b',
- enr_signature: '0xa3d49832dfaf0ad87c5796f9bc151009343da70b91fd53bee3645baa63d001d3207662da8f67b3a20f2ee30c9cacb24a5719a78dc24e030c8ac93e7b3b46bf881b'
+ config_signature:
+ '0x12d19d6fc4c1a5d9e7be09f47c2f2357dd89f47aba8ae0185f5345e08bcc3adc324bdd51e68a12c3ca34c604d786cfde5f0798aa928dac496edb16c70e7086551b',
+ enr_signature:
+ '0xa3d49832dfaf0ad87c5796f9bc151009343da70b91fd53bee3645baa63d001d3207662da8f67b3a20f2ee30c9cacb24a5719a78dc24e030c8ac93e7b3b46bf881b',
},
{
address: '0x33807D6F1DCe44b9C599fFE03640762A6F08C496',
enr: 'enr:-Iu4QJyserRukhG0Vgi2csu7GjpHYUGufNEbZ8Q7ZBrcZUb0KqpL5QzHonkh1xxHlxatTxrIcX_IS5J3SEWR_sa0ptGAgmlkgnY0gmlwhH8AAAGJc2VjcDI1NmsxoQMAUgEqczOjevyculnUIofhCj0DkgJudErM7qCYIvIkzIN0Y3CCDhqDdWRwgg4u',
- config_signature: '0x665d287c46921aad0dde389291b982f24dbbeb4b7ce5ee7bbc4a7d1fb55134f7136889eb3ce70208a7f276b9d4aefb1fbc6159476934567e5bf11765b2c9649b1b',
- enr_signature: '0xc32d5ea29569b01354d48ddaf56df1481a5ae618ffb47602ef40e0e77357de5f23a5258923be5fa06ecce20f5692847860c25c38b97a4e306c94decd99c0519a1b'
+ config_signature:
+ '0x665d287c46921aad0dde389291b982f24dbbeb4b7ce5ee7bbc4a7d1fb55134f7136889eb3ce70208a7f276b9d4aefb1fbc6159476934567e5bf11765b2c9649b1b',
+ enr_signature:
+ '0xc32d5ea29569b01354d48ddaf56df1481a5ae618ffb47602ef40e0e77357de5f23a5258923be5fa06ecce20f5692847860c25c38b97a4e306c94decd99c0519a1b',
},
{
address: '0xc6e76F72Ea672FAe05C357157CfC37720F0aF26f',
enr: 'enr:-HW4QKJTwXC6Chw6zbnA3HFZi6Jo0DkIgjKy4eUBpsSOGnAeWE6ChEjEyk_6R6Qrm7jI-iqfs3_HYxiKde8vFgvHHrCAgmlkgnY0iXNlY3AyNTZrMaECfFKQH4spdZCHqrKVz1Q02xYla6J_RQECDNNYBRWdzv8',
- config_signature: '0x610f7be9c7c38878cde1cb391de08eee2f86e62f31f450843b4e37164e738fc8769046e53ad1f018f54ddaf858ff372d22169702c60d68bda19c96fdd20150b61c',
- enr_signature: '0xe2977c79f63b8fe6cb6551efec0cf69041c7f4aaa8ea338997a397450ee946023b03ccb70ad3cc97b1319e1eea9f7472a2ca161bc8b33acdcde689d84c7e771c1b'
- }
+ config_signature:
+ '0x610f7be9c7c38878cde1cb391de08eee2f86e62f31f450843b4e37164e738fc8769046e53ad1f018f54ddaf858ff372d22169702c60d68bda19c96fdd20150b61c',
+ enr_signature:
+ '0xe2977c79f63b8fe6cb6551efec0cf69041c7f4aaa8ea338997a397450ee946023b03ccb70ad3cc97b1319e1eea9f7472a2ca161bc8b33acdcde689d84c7e771c1b',
+ },
],
uuid: 'bc2fec0c-0b8b-4415-bf48-1e96b07f50eb',
version: 'v1.8.0',
@@ -274,81 +279,95 @@ export const clusterLockV1X8 = {
validators: [
{
fee_recipient_address: '0x7aC193bF9a9C6e6DD6302969E8Ea6EdF6df490d8',
- withdrawal_address: '0x9e0AC0078F10d28E875577bb3A4A9EDAB60c03EC'
+ withdrawal_address: '0x9e0AC0078F10d28E875577bb3A4A9EDAB60c03EC',
},
{
fee_recipient_address: '0x7aC193bF9a9C6e6DD6302969E8Ea6EdF6df490d8',
- withdrawal_address: '0x9e0AC0078F10d28E875577bb3A4A9EDAB60c03EC'
- }
+ withdrawal_address: '0x9e0AC0078F10d28E875577bb3A4A9EDAB60c03EC',
+ },
],
dkg_algorithm: 'default',
fork_version: '0x01017000',
- deposit_amounts: [
- '32000000000'
- ],
- config_hash: '0xb2601f51d277f699acb8ea3b9fb4fc68087c0f1f2c6ae83d00fdd853a6cddb31',
- definition_hash: '0x2a9d52b1dd13fd91661d81e3786512ffdcc3689e2ec97105add153f543c642b4'
+ deposit_amounts: ['32000000000'],
+ config_hash:
+ '0xb2601f51d277f699acb8ea3b9fb4fc68087c0f1f2c6ae83d00fdd853a6cddb31',
+ definition_hash:
+ '0x2a9d52b1dd13fd91661d81e3786512ffdcc3689e2ec97105add153f543c642b4',
},
distributed_validators: [
{
- distributed_public_key: '0xa33ae80f967a669d8df3ae769acc114577fab185d53e10154b0b50cc0cf9b9f35e466a318f174e8cecdc12173d95cb27',
+ distributed_public_key:
+ '0xa33ae80f967a669d8df3ae769acc114577fab185d53e10154b0b50cc0cf9b9f35e466a318f174e8cecdc12173d95cb27',
public_shares: [
'0x849db297f690a26e76d5930f99eac9e3f95d9232256d6e39124fe071745b43c8b5418c733b06683aa240a2a0e44b9b8f',
'0xa1051bf5692153d5bc418946763bb5c82780a05e97bd5b258ea7abe6705047628edd8277366f6b5d0469abfee18988d9',
'0x87d0342e5dc49a0a0c8f08ec011da3bd859a333bfc46ddd0a194485aa5aa954b7c18d05a2c1ae148d4dc45331101f496',
- '0xa4fa0e971e1a5e38ebe89c6457bc9316b3dd0933660b17e1c717ac148f8340a5db20d867c7a24758c701f6b6bec4d552'
+ '0xa4fa0e971e1a5e38ebe89c6457bc9316b3dd0933660b17e1c717ac148f8340a5db20d867c7a24758c701f6b6bec4d552',
],
builder_registration: {
message: {
fee_recipient: '0x7ac193bf9a9c6e6dd6302969e8ea6edf6df490d8',
gas_limit: 30000000,
timestamp: 1696000704,
- pubkey: '0xa33ae80f967a669d8df3ae769acc114577fab185d53e10154b0b50cc0cf9b9f35e466a318f174e8cecdc12173d95cb27'
+ pubkey:
+ '0xa33ae80f967a669d8df3ae769acc114577fab185d53e10154b0b50cc0cf9b9f35e466a318f174e8cecdc12173d95cb27',
},
- signature: '0xb39977fe7c45bab28cfd1bcf356a71b0557187a75e0dfa0facaf5eddba05988c0da85800a4b4528704df44f280913ebc125eb3f9c091d6dd220c92dfcc3c80bc7a9ed2f1b96bffaeaa1053cf117b02b48eb755139c5623b6e61dd92c27d15813'
+ signature:
+ '0xb39977fe7c45bab28cfd1bcf356a71b0557187a75e0dfa0facaf5eddba05988c0da85800a4b4528704df44f280913ebc125eb3f9c091d6dd220c92dfcc3c80bc7a9ed2f1b96bffaeaa1053cf117b02b48eb755139c5623b6e61dd92c27d15813',
},
partial_deposit_data: [
{
- pubkey: '0xa33ae80f967a669d8df3ae769acc114577fab185d53e10154b0b50cc0cf9b9f35e466a318f174e8cecdc12173d95cb27',
- withdrawal_credentials: '0x0100000000000000000000009e0ac0078f10d28e875577bb3a4a9edab60c03ec',
+ pubkey:
+ '0xa33ae80f967a669d8df3ae769acc114577fab185d53e10154b0b50cc0cf9b9f35e466a318f174e8cecdc12173d95cb27',
+ withdrawal_credentials:
+ '0x0100000000000000000000009e0ac0078f10d28e875577bb3a4a9edab60c03ec',
amount: '32000000000',
- signature: '0x9861022ca71cf18aad49a201b023356b8c5ca090086614b681cb84a54327caeff53c0a71c5f55f49976114bb86de2ad6052d174d7948e6c8a924d9bfbbbc2181fad967d818454c6c4f7cffb7bb93dc2c4f4c87fc5598cb4582fa08eff0c7bc08'
- }
- ]
+ signature:
+ '0x9861022ca71cf18aad49a201b023356b8c5ca090086614b681cb84a54327caeff53c0a71c5f55f49976114bb86de2ad6052d174d7948e6c8a924d9bfbbbc2181fad967d818454c6c4f7cffb7bb93dc2c4f4c87fc5598cb4582fa08eff0c7bc08',
+ },
+ ],
},
{
- distributed_public_key: '0xaa888bf805bec7da7ac18dea3afefbf5b8510cbf76367229dab830b3ecdd4533b9d50fb9fcb454df5cbe08e4b31e8479',
+ distributed_public_key:
+ '0xaa888bf805bec7da7ac18dea3afefbf5b8510cbf76367229dab830b3ecdd4533b9d50fb9fcb454df5cbe08e4b31e8479',
public_shares: [
'0x8279ae646839d946a622d096296ffcccd289e8c49ea2308560bbb731c63d4b49ea46db817a955e47634edbded4919d82',
'0xa8a12b5b645b015c55515b3220395e015fc051c58bf243e1b638770652c67f863852f9190e3e182aa86b99823b4cf28d',
'0xb0c557f812060bb1c409e5324c7b54f35fee8f1180c714e60784f7df6a58e3ba3da6cc8b3cebc01975f9f41efcd777cb',
- '0xa7a8576c3b21221f2a6adefc41b4c1f979ee0761e9a7ff50d30434d1a0c4e7fc505b308636801925e698286b802de421'
+ '0xa7a8576c3b21221f2a6adefc41b4c1f979ee0761e9a7ff50d30434d1a0c4e7fc505b308636801925e698286b802de421',
],
builder_registration: {
message: {
fee_recipient: '0x7ac193bf9a9c6e6dd6302969e8ea6edf6df490d8',
gas_limit: 30000000,
timestamp: 1696000704,
- pubkey: '0xaa888bf805bec7da7ac18dea3afefbf5b8510cbf76367229dab830b3ecdd4533b9d50fb9fcb454df5cbe08e4b31e8479'
+ pubkey:
+ '0xaa888bf805bec7da7ac18dea3afefbf5b8510cbf76367229dab830b3ecdd4533b9d50fb9fcb454df5cbe08e4b31e8479',
},
- signature: '0x8dcb54028adb8f5601b6ab20ded381dabb6739b3e506df795a279043997908c7d38a68b8e8dda27516165f18e437a84603935bfefc1a83befbd1a90ac43fcc7fb0eed81122852a2ee71fef414aa8879198da239527036b0eaebcdc88d6eca3d1'
+ signature:
+ '0x8dcb54028adb8f5601b6ab20ded381dabb6739b3e506df795a279043997908c7d38a68b8e8dda27516165f18e437a84603935bfefc1a83befbd1a90ac43fcc7fb0eed81122852a2ee71fef414aa8879198da239527036b0eaebcdc88d6eca3d1',
},
partial_deposit_data: [
{
- pubkey: '0xaa888bf805bec7da7ac18dea3afefbf5b8510cbf76367229dab830b3ecdd4533b9d50fb9fcb454df5cbe08e4b31e8479',
- withdrawal_credentials: '0x0100000000000000000000009e0ac0078f10d28e875577bb3a4a9edab60c03ec',
+ pubkey:
+ '0xaa888bf805bec7da7ac18dea3afefbf5b8510cbf76367229dab830b3ecdd4533b9d50fb9fcb454df5cbe08e4b31e8479',
+ withdrawal_credentials:
+ '0x0100000000000000000000009e0ac0078f10d28e875577bb3a4a9edab60c03ec',
amount: '32000000000',
- signature: '0x95ee68e5191d34e10f567ab0f565cd927211b29be9ab830d39bf74d0486aee7bff78d8fe12d455cb40ec707378eea1040a9d80806f82afa58295de9d4db2dccc48cfaf3c98e9020c6b5c8a9aacf5bbfc7e316871f505000304d9d39b7ad5c5d8'
- }
- ]
- }
+ signature:
+ '0x95ee68e5191d34e10f567ab0f565cd927211b29be9ab830d39bf74d0486aee7bff78d8fe12d455cb40ec707378eea1040a9d80806f82afa58295de9d4db2dccc48cfaf3c98e9020c6b5c8a9aacf5bbfc7e316871f505000304d9d39b7ad5c5d8',
+ },
+ ],
+ },
],
- signature_aggregate: '0x81ab6319191e3b9065f14231a71fe480b4a45e5e5db4a064faa19a31d04b9cb55fa88b8aa3c966b054b97ae7db2233ee060ae333c5ca3a55ed16b9a3de1894087901cb2d3a177de1cd40030c93301c23ca3edd28dfd1ad04e210b7e2c7625f89',
- lock_hash: '0x186e7e61fb49373d9034d101f2f08429cb379bfcc2f7fa5e9598e8a14ae13ed7',
+ signature_aggregate:
+ '0x81ab6319191e3b9065f14231a71fe480b4a45e5e5db4a064faa19a31d04b9cb55fa88b8aa3c966b054b97ae7db2233ee060ae333c5ca3a55ed16b9a3de1894087901cb2d3a177de1cd40030c93301c23ca3edd28dfd1ad04e210b7e2c7625f89',
+ lock_hash:
+ '0x186e7e61fb49373d9034d101f2f08429cb379bfcc2f7fa5e9598e8a14ae13ed7',
node_signatures: [
'0xd4b1b6f7b363015b9d1c1c4f199fffc3f9238b7326fdfc5059b175519b05c90a022a18bf2e3eae7d7b0e833384131c2e7be17cc78f6ca23644ae345904dc2d2601',
'0xc186f930d8d281ab3999fb0ff62b5d96045a4e2330d9d8b300d5d1014f6b4bd925d9c2fedbb53047a49d4008f82600f46e1131b981222c5e423c12b1c9fd544900',
'0xbc0831fa82b1a70e17eb4fe6f79249a8f5aab1d1f196dd07e32766eb27e72354757d7146b64fca4ad4efa554f7a5d4e7ef835aab6348e9afa37c9eeab069ff4e01',
- '0x0135f307831fa58ff64f9af46e00b92e2375162646af88f6991ba6f98a8c262f2c41846af59da68eadb8ff9c94db42ee8005bd4236e5897635573db2911460aa00'
- ]
-}
+ '0x0135f307831fa58ff64f9af46e00b92e2375162646af88f6991ba6f98a8c262f2c41846af59da68eadb8ff9c94db42ee8005bd4236e5897635573db2911460aa00',
+ ],
+};
diff --git a/test/methods.test.ts b/test/methods.test.ts
index cdc587c..bc6dea9 100644
--- a/test/methods.test.ts
+++ b/test/methods.test.ts
@@ -1,26 +1,32 @@
-import { ethers } from 'ethers'
-import { Client, validateClusterLock } from '../src/index'
-import { clusterConfigV1X7, clusterLockV1X6, clusterLockV1X7, clusterLockV1X8 } from './fixtures.js'
-import { SDK_VERSION } from '../src/constants'
-import { Base } from '../src/base'
-import { validatePayload } from '../src/ajv'
-import { HttpResponse, http } from 'msw'
-import { setupServer } from 'msw/node'
-import { hashTermsAndConditions } from '../src/verification/termsAndConditions'
+import { ethers } from 'ethers';
+import { Client, validateClusterLock } from '../src/index';
+import {
+ clusterConfigV1X7,
+ clusterConfigV1X8,
+ clusterLockV1X6,
+ clusterLockV1X7,
+ clusterLockV1X8,
+} from './fixtures.js';
+import { SDK_VERSION } from '../src/constants';
+import { Base } from '../src/base';
+import { validatePayload } from '../src/ajv';
+import { HttpResponse, http } from 'msw';
+import { setupServer } from 'msw/node';
+import { hashTermsAndConditions } from '../src/verification/termsAndConditions';
/* eslint no-new: 0 */
describe('Cluster Client', () => {
const mockConfigHash =
- '0x1f6c94e6c070393a68c1aa6073a21cb1fd57f0e14d2a475a2958990ab728c2fd'
- const mnemonic = ethers.Wallet.createRandom().mnemonic?.phrase ?? ''
- const privateKey = ethers.Wallet.fromPhrase(mnemonic).privateKey
- const wallet = new ethers.Wallet(privateKey)
- const mockSigner = wallet.connect(null)
+ '0x1f6c94e6c070393a68c1aa6073a21cb1fd57f0e14d2a475a2958990ab728c2fd';
+ const mnemonic = ethers.Wallet.createRandom().mnemonic?.phrase ?? '';
+ const privateKey = ethers.Wallet.fromPhrase(mnemonic).privateKey;
+ const wallet = new ethers.Wallet(privateKey);
+ const mockSigner = wallet.connect(null);
const clientInstance = new Client(
{ baseUrl: 'https://obol-api-dev.gcp.obol.tech', chainId: 5 },
mockSigner,
- )
+ );
// test('throws invalid ChainId when it is equal to 1', async () => {
// try {
@@ -33,177 +39,225 @@ describe('Cluster Client', () => {
test('createTermsAndConditions should return "successful authorization"', async () => {
clientInstance['request'] = jest
.fn()
- .mockReturnValue(Promise.resolve({ message: 'successful authorization' }))
+ .mockReturnValue(
+ Promise.resolve({ message: 'successful authorization' }),
+ );
const isAuthorized =
- await clientInstance.acceptObolLatestTermsAndConditions()
- expect(isAuthorized).toEqual('successful authorization')
- })
+ await clientInstance.acceptObolLatestTermsAndConditions();
+ expect(isAuthorized).toEqual('successful authorization');
+ });
test('createClusterDefinition should return config_hash', async () => {
clientInstance['request'] = jest
.fn()
- .mockReturnValue(Promise.resolve({ config_hash: mockConfigHash }))
+ .mockReturnValue(Promise.resolve({ config_hash: mockConfigHash }));
const configHash =
- await clientInstance.createClusterDefinition(clusterConfigV1X7)
- expect(configHash).toEqual(mockConfigHash)
- })
+ await clientInstance.createClusterDefinition(clusterConfigV1X8);
+ expect(configHash).toEqual(mockConfigHash);
+ });
test('acceptClusterDefinition should return cluster definition', async () => {
clientInstance['request'] = jest
.fn()
- .mockReturnValue(Promise.resolve(clusterLockV1X7.cluster_definition))
+ .mockReturnValue(Promise.resolve(clusterLockV1X8.cluster_definition));
const clusterDefinition = await clientInstance.acceptClusterDefinition(
{
- enr: clusterLockV1X7.cluster_definition.operators[0].enr,
- version: clusterLockV1X7.cluster_definition.version,
+ enr: clusterLockV1X8.cluster_definition.operators[0].enr,
+ version: clusterLockV1X8.cluster_definition.version,
},
- clusterLockV1X7.cluster_definition.config_hash,
- )
- expect(clusterDefinition).toEqual(clusterLockV1X7.cluster_definition)
- })
+ clusterLockV1X8.cluster_definition.config_hash,
+ );
+ expect(clusterDefinition).toEqual(clusterLockV1X8.cluster_definition);
+ });
test('createClusterDefinition should throw an error on invalid operators', async () => {
clientInstance['request'] = jest
.fn()
- .mockReturnValue(Promise.resolve({ config_hash: mockConfigHash }))
+ .mockReturnValue(Promise.resolve({ config_hash: mockConfigHash }));
try {
await clientInstance.createClusterDefinition({
- ...clusterConfigV1X7,
+ ...clusterConfigV1X8,
operators: [],
- })
+ });
} catch (error: any) {
expect(error.message).toEqual(
"Schema compilation errors', must NOT have fewer than 4 items",
- )
+ );
+ }
+ });
+
+ // cause we default to 32000000000
+ test('createClusterDefinition should accept a configuration without deposit_amounts', async () => {
+ clientInstance['request'] = jest
+ .fn()
+ .mockReturnValue(Promise.resolve({ config_hash: mockConfigHash }));
+
+ const configHash = await clientInstance.createClusterDefinition({
+ ...clusterConfigV1X7,
+ });
+
+ expect(configHash).toEqual(mockConfigHash);
+ });
+
+ test('createClusterDefinition should throw on not valid deposit_amounts ', async () => {
+ clientInstance['request'] = jest
+ .fn()
+ .mockReturnValue(Promise.resolve({ config_hash: mockConfigHash }));
+ try {
+ await clientInstance.createClusterDefinition({
+ ...clusterConfigV1X7,
+ deposit_amounts: ['34000000'],
+ });
+ } catch (error: any) {
+ expect(error.message).toEqual(
+ 'Schema compilation errors\', must pass "validDepositAmounts" keyword validation',
+ );
}
- })
+ });
test('validatePayload should throw an error on empty schema', async () => {
try {
- validatePayload({ ...clusterConfigV1X7, operators: [] }, '')
+ validatePayload({ ...clusterConfigV1X8, operators: [] }, '');
} catch (error: any) {
- expect(error.message).toEqual('schema must be object or boolean')
+ expect(error.message).toEqual('schema must be object or boolean');
}
- })
+ });
test('getClusterdefinition should return cluster definition if config hash exist', async () => {
clientInstance['request'] = jest
.fn()
- .mockReturnValue(Promise.resolve(clusterLockV1X7.cluster_definition))
+ .mockReturnValue(Promise.resolve(clusterLockV1X8.cluster_definition));
const clusterDefinition = await clientInstance.getClusterDefinition(
- clusterLockV1X7.cluster_definition.config_hash,
- )
+ clusterLockV1X8.cluster_definition.config_hash,
+ );
+
+ expect(clusterDefinition.deposit_amounts?.length).toEqual(
+ clusterLockV1X8.cluster_definition.deposit_amounts.length,
+ );
expect(clusterDefinition.config_hash).toEqual(
- clusterLockV1X7.cluster_definition.config_hash,
- )
- })
+ clusterLockV1X8.cluster_definition.config_hash,
+ );
+ });
test('getClusterLock should return lockFile if exist', async () => {
clientInstance['request'] = jest
.fn()
- .mockReturnValue(Promise.resolve(clusterLockV1X7))
+ .mockReturnValue(Promise.resolve(clusterLockV1X8));
const clusterLock = await clientInstance.getClusterLock(
- clusterLockV1X7.cluster_definition.config_hash,
- )
- expect(clusterLock.lock_hash).toEqual(clusterLockV1X7.lock_hash)
- })
+ clusterLockV1X8.cluster_definition.config_hash,
+ );
+ expect(clusterLock.lock_hash).toEqual(clusterLockV1X8.lock_hash);
+ });
test('request method should set user agent header', async () => {
const server = setupServer(
http.get('http://testexample.com/test', ({ request }) => {
// Check if the request contains specific headers
if (request.headers.get('User-Agent') === `Obol-SDK/${SDK_VERSION}`) {
- return HttpResponse.json({ message: 'user-agent header exist' })
+ return HttpResponse.json({ message: 'user-agent header exist' });
}
}),
- )
- server.listen()
+ );
+ server.listen();
class TestBase extends Base {
async callProtectedRequest(
endpoint: string,
options?: RequestInit,
): Promise {
- return await this['request'](endpoint, options)
+ return await this['request'](endpoint, options);
}
}
- const testBaseInstance = new TestBase({ baseUrl: 'http://testExample.com' })
+ const testBaseInstance = new TestBase({
+ baseUrl: 'http://testExample.com',
+ });
const result: { message: string } =
await testBaseInstance.callProtectedRequest('/test', {
method: 'GET',
- })
- expect(result?.message).toEqual('user-agent header exist')
- server.close()
- })
-})
+ });
+ expect(result?.message).toEqual('user-agent header exist');
+ server.close();
+ });
+});
describe('Cluster Client without a signer', () => {
const clientInstance = new Client({
baseUrl: 'https://obol-api-dev.gcp.obol.tech',
chainId: 5,
- })
+ });
test('createClusterDefinition should throw an error without signer', async () => {
try {
- await clientInstance.createClusterDefinition(clusterConfigV1X7)
+ await clientInstance.createClusterDefinition(clusterConfigV1X8);
} catch (err: any) {
- expect(err.message).toEqual('Signer is required in createClusterDefinition')
+ expect(err.message).toEqual(
+ 'Signer is required in createClusterDefinition',
+ );
}
- })
+ });
test('acceptClusterDefinition should throw an error without signer', async () => {
try {
await clientInstance.acceptClusterDefinition(
{
- enr: clusterLockV1X7.cluster_definition.operators[0].enr,
- version: clusterLockV1X7.cluster_definition.version,
+ enr: clusterLockV1X8.cluster_definition.operators[0].enr,
+ version: clusterLockV1X8.cluster_definition.version,
},
- clusterLockV1X7.cluster_definition.config_hash,
- )
+ clusterLockV1X8.cluster_definition.config_hash,
+ );
} catch (err: any) {
- expect(err.message).toEqual('Signer is required in acceptClusterDefinition')
+ expect(err.message).toEqual(
+ 'Signer is required in acceptClusterDefinition',
+ );
}
- })
+ });
test('getClusterdefinition should return cluster definition if config hash exist', async () => {
clientInstance['request'] = jest
.fn()
- .mockReturnValue(Promise.resolve(clusterLockV1X7.cluster_definition))
+ .mockReturnValue(Promise.resolve(clusterLockV1X8.cluster_definition));
const clusterDefinition = await clientInstance.getClusterDefinition(
- clusterLockV1X7.cluster_definition.config_hash,
- )
+ clusterLockV1X8.cluster_definition.config_hash,
+ );
expect(clusterDefinition.config_hash).toEqual(
- clusterLockV1X7.cluster_definition.config_hash,
- )
- })
+ clusterLockV1X8.cluster_definition.config_hash,
+ );
+ });
test('getClusterLock should return lockFile if exist', async () => {
clientInstance['request'] = jest
.fn()
- .mockReturnValue(Promise.resolve(clusterLockV1X7))
+ .mockReturnValue(Promise.resolve(clusterLockV1X8));
const clusterLock = await clientInstance.getClusterLock(
- clusterLockV1X7.cluster_definition.config_hash,
- )
- expect(clusterLock.lock_hash).toEqual(clusterLockV1X7.lock_hash)
- })
+ clusterLockV1X8.cluster_definition.config_hash,
+ );
+ expect(clusterLock.lock_hash).toEqual(clusterLockV1X8.lock_hash);
+ });
- test.each([{ version: 'v1.6.0', clusterLock: clusterLockV1X6 }, { version: 'v1.7.0', clusterLock: clusterLockV1X7 }, { version: 'v1.8.0', clusterLock: clusterLockV1X8 }])(
- '$version: \'should return true on verified cluster lock\'',
+ test.each([
+ { version: 'v1.6.0', clusterLock: clusterLockV1X6 },
+ { version: 'v1.7.0', clusterLock: clusterLockV1X7 },
+ { version: 'v1.8.0', clusterLock: clusterLockV1X8 },
+ ])(
+ "$version: 'should return true on verified cluster lock'",
async ({ clusterLock }) => {
- const isValidLock: boolean = await validateClusterLock(clusterLock)
- expect(isValidLock).toEqual(true)
- })
+ const isValidLock: boolean = await validateClusterLock(clusterLock);
+ expect(isValidLock).toEqual(true);
+ },
+ );
test('Finds the hash of the latest version of terms and conditions', async () => {
- const termsAndConditionsHash = await hashTermsAndConditions()
- expect(termsAndConditionsHash).toEqual('0xa27f806434a2a26572582a87baf908bb0c01adcb497a0e61c58867e7c3b6743e')
- })
-})
+ const termsAndConditionsHash = await hashTermsAndConditions();
+ expect(termsAndConditionsHash).toEqual(
+ '0xd33721644e8f3afab1495a74abe3523cec12d48b8da6cb760972492ca3f1a273',
+ );
+ });
+});
diff --git a/test/sdk-package-test/cluster.test.ts b/test/sdk-package-test/cluster.test.ts
index c4f5751..3ef77cf 100755
--- a/test/sdk-package-test/cluster.test.ts
+++ b/test/sdk-package-test/cluster.test.ts
@@ -1,6 +1,12 @@
-import request from 'supertest'
-import dotenv from 'dotenv'
-import { clusterConfigV1X7, clusterLockV1X6, clusterLockV1X7, clusterLockV1X8, enr } from './../fixtures'
+import request from 'supertest';
+import dotenv from 'dotenv';
+import {
+ clusterConfigV1X8,
+ clusterLockV1X6,
+ clusterLockV1X7,
+ clusterLockV1X8,
+ enr,
+} from '../fixtures';
import {
client,
updateClusterDef,
@@ -8,141 +14,146 @@ import {
app,
postClusterDef,
signer,
- secondClient
-} from './utils'
+ secondClient,
+} from './utils';
import {
type ClusterDefinition,
Client,
validateClusterLock,
-} from '@obolnetwork/obol-sdk'
+} from '@obolnetwork/obol-sdk';
-dotenv.config()
+dotenv.config();
-const DEL_AUTH = process.env.DEL_AUTH
+const DEL_AUTH = process.env.DEL_AUTH;
-jest.setTimeout(10000)
+jest.setTimeout(10000);
/* eslint @typescript-eslint/no-misused-promises: 0 */ // --> OFF
describe('Cluster Definition', () => {
- let configHash: string
- let clusterDefinition: ClusterDefinition
- let secondConfigHash: string
+ let configHash: string;
+ let clusterDefinition: ClusterDefinition;
+ let secondConfigHash: string;
const clientWithoutAsigner = new Client({
baseUrl: 'https://obol-api-nonprod-dev.dev.obol.tech',
chainId: 17000,
- })
+ });
- const unauthorisedClient = secondClient
+ const unauthorisedClient = secondClient;
it('should post latest terms and conditions acceptance signature', async () => {
- const isAuthorised = await client.acceptObolLatestTermsAndConditions()
- expect(isAuthorised).toEqual('successful authorization')
- })
+ const isAuthorised = await client.acceptObolLatestTermsAndConditions();
+ expect(isAuthorised).toEqual('successful authorization');
+ });
it('should post a cluster definition and return confighash for an authorised user', async () => {
- configHash = await client.createClusterDefinition(clusterConfigV1X7)
- expect(configHash).toHaveLength(66)
- })
+ configHash = await client.createClusterDefinition(clusterConfigV1X8);
+ expect(configHash).toHaveLength(66);
+ });
it('should throw on post a cluster without a signer', async () => {
try {
- await clientWithoutAsigner.createClusterDefinition(clusterConfigV1X7)
+ await clientWithoutAsigner.createClusterDefinition(clusterConfigV1X8);
} catch (err: any) {
- expect(err.message).toEqual('Signer is required in createClusterDefinition')
+ expect(err.message).toEqual(
+ 'Signer is required in createClusterDefinition',
+ );
}
- })
+ });
it('should throw on post a cluster if the user did not sign latest terms and conditions', async () => {
try {
- await unauthorisedClient.createClusterDefinition(clusterConfigV1X7)
+ await unauthorisedClient.createClusterDefinition(clusterConfigV1X8);
} catch (err: any) {
- expect(err.message).toEqual('Missing t&c signature')
- expect(err.statusCode).toEqual(401)
+ expect(err.message).toEqual('Missing t&c signature');
+ expect(err.statusCode).toEqual(401);
}
- })
+ });
it('should fetch the cluster definition for the configHash', async () => {
- clusterDefinition = await client.getClusterDefinition(configHash)
- expect(clusterDefinition.config_hash).toEqual(configHash)
- })
+ clusterDefinition = await client.getClusterDefinition(configHash);
+ expect(clusterDefinition.config_hash).toEqual(configHash);
+ });
it('should fetch the cluster definition for the configHash without a signer', async () => {
clusterDefinition =
- await clientWithoutAsigner.getClusterDefinition(configHash)
- expect(clusterDefinition.config_hash).toEqual(configHash)
- })
+ await clientWithoutAsigner.getClusterDefinition(configHash);
+ expect(clusterDefinition.config_hash).toEqual(configHash);
+ });
it('should throw on update a cluster that the operator is not part of', async () => {
try {
await client.acceptClusterDefinition(
{ enr, version: clusterDefinition.version },
configHash,
- )
+ );
} catch (err: any) {
- expect(err.message).toEqual('Data not found')
+ expect(err.message).toEqual('Data not found');
}
- })
+ });
it('should throw on accept a cluster if the user did not sign latest terms and conditions', async () => {
try {
- await unauthorisedClient.acceptClusterDefinition({ enr, version: clusterDefinition.version },
+ await unauthorisedClient.acceptClusterDefinition(
+ { enr, version: clusterDefinition.version },
configHash,
- )
+ );
} catch (err: any) {
- expect(err.message).toEqual('Missing t&c signature')
- expect(err.statusCode).toEqual(401)
+ expect(err.message).toEqual('Missing t&c signature');
+ expect(err.statusCode).toEqual(401);
}
- })
+ });
it('should update the cluster which the operator belongs to for an authorised user', async () => {
- const signerAddress = await signer.getAddress()
- clusterConfigV1X7.operators.push({ address: signerAddress })
+ const signerAddress = await signer.getAddress();
+ clusterConfigV1X8.operators.push({ address: signerAddress });
- secondConfigHash = await client.createClusterDefinition(clusterConfigV1X7)
+ secondConfigHash = await client.createClusterDefinition(clusterConfigV1X8);
const definitionData: ClusterDefinition =
await client.acceptClusterDefinition(
{ enr, version: clusterDefinition.version },
secondConfigHash,
- )
+ );
expect(
definitionData.operators[definitionData.operators.length - 1].enr,
- ).toEqual(enr)
- })
+ ).toEqual(enr);
+ });
it('should throw on update a cluster without a signer', async () => {
try {
await clientWithoutAsigner.acceptClusterDefinition(
{ enr, version: clusterDefinition.version },
configHash,
- )
+ );
} catch (err: any) {
- expect(err.message).toEqual('Signer is required in acceptClusterDefinition')
+ expect(err.message).toEqual(
+ 'Signer is required in acceptClusterDefinition',
+ );
}
- })
+ });
afterAll(async () => {
await request(app)
- .delete(`/dv/${configHash}`)
- .set('Authorization', `Bearer ${DEL_AUTH}`)
+ .delete(`/v1/definition/${configHash}`)
+ .set('Authorization', `Bearer ${DEL_AUTH}`);
await request(app)
- .delete(`/dv/${secondConfigHash}`)
- .set('Authorization', `Bearer ${DEL_AUTH}`)
- })
-})
+ .delete(`/v1/definition/${secondConfigHash}`)
+ .set('Authorization', `Bearer ${DEL_AUTH}`);
+ });
+});
describe('Poll Cluster Lock', () => {
// Test polling getClusterLock through mimicing the whole flow using obol-api endpoints
- const { definition_hash: _, ...rest } = clusterLockV1X7.cluster_definition
- const clusterWithoutDefHash = rest
+ const { definition_hash: _, ...rest } = clusterLockV1X8.cluster_definition;
+ const clusterWithoutDefHash = rest;
const clientWithoutAsigner = new Client({
baseUrl: 'https://obol-api-nonprod-dev.dev.obol.tech',
chainId: 17000,
- })
+ });
beforeAll(async () => {
- await postClusterDef(clusterWithoutDefHash)
- })
+ await postClusterDef(clusterWithoutDefHash);
+ });
it('should make a GET request to the API periodically until a lock is returned', async () => {
// Call two async operations in parallel, polling to fetch lockFile when exist and the whole process after the creator shares the link with operators
@@ -151,30 +162,30 @@ describe('Poll Cluster Lock', () => {
const pollReqIntervalId = setInterval(async function () {
try {
const lockFile = await client.getClusterLock(
- clusterLockV1X7.cluster_definition.config_hash,
- )
+ clusterLockV1X8.cluster_definition.config_hash,
+ );
if (lockFile?.lock_hash) {
- clearInterval(pollReqIntervalId)
- resolve(lockFile)
+ clearInterval(pollReqIntervalId);
+ resolve(lockFile);
}
} catch (err: any) {
// TODO(Hanan) Update this once the errors thrown from obol-api are updated
- console.log(err)
+ console.log(err);
}
- }, 1000)
+ }, 1000);
setTimeout(function () {
- clearInterval(pollReqIntervalId)
- reject(new Error('Time out'))
- }, 5000)
+ clearInterval(pollReqIntervalId);
+ reject(new Error('Time out'));
+ }, 5000);
}),
(async () => {
- await updateClusterDef(clusterLockV1X7.cluster_definition)
- await publishLockFile(clusterLockV1X7)
+ await updateClusterDef(clusterLockV1X8.cluster_definition);
+ await publishLockFile(clusterLockV1X8);
})(),
- ])
- expect(lockObject).toHaveProperty('lock_hash')
- })
+ ]);
+ expect(lockObject).toHaveProperty('lock_hash');
+ });
it('fetches a lock successfully without a signer', async () => {
// Call two async operations in parallel, polling to fetch lockFile when exist and the whole process after the creator shares the link with operators
@@ -183,56 +194,64 @@ describe('Poll Cluster Lock', () => {
const pollReqIntervalId = setInterval(async function () {
try {
const lockFile = await clientWithoutAsigner.getClusterLock(
- clusterLockV1X7.cluster_definition.config_hash,
- )
+ clusterLockV1X8.cluster_definition.config_hash,
+ );
if (lockFile?.lock_hash) {
- clearInterval(pollReqIntervalId)
- resolve(lockFile)
+ clearInterval(pollReqIntervalId);
+ resolve(lockFile);
}
} catch (err: any) {
- console.log(err)
+ console.log(err);
}
- }, 1000)
+ }, 1000);
setTimeout(function () {
- clearInterval(pollReqIntervalId)
- reject(new Error('Time out'))
- }, 5000)
+ clearInterval(pollReqIntervalId);
+ reject(new Error('Time out'));
+ }, 5000);
}),
(async () => {
- await updateClusterDef(clusterLockV1X7.cluster_definition)
- await publishLockFile(clusterLockV1X7)
+ await updateClusterDef(clusterLockV1X8.cluster_definition);
+ await publishLockFile(clusterLockV1X8);
})(),
- ])
- expect(lockObject).toHaveProperty('lock_hash')
- })
+ ]);
+ expect(lockObject).toHaveProperty('lock_hash');
+ });
it('should fetch the cluster definition for the configHash', async () => {
const clusterDefinition: ClusterDefinition =
await client.getClusterDefinition(
- clusterLockV1X7.cluster_definition.config_hash,
- )
+ clusterLockV1X8.cluster_definition.config_hash,
+ );
+ expect(clusterDefinition.deposit_amounts?.length).toEqual(
+ clusterLockV1X8.cluster_definition.deposit_amounts.length,
+ );
expect(clusterDefinition.config_hash).toEqual(
- clusterLockV1X7.cluster_definition.config_hash,
- )
- })
+ clusterLockV1X8.cluster_definition.config_hash,
+ );
+ });
- test.each([{ version: 'v1.6.0', clusterLock: clusterLockV1X6 }, { version: 'v1.7.0', clusterLock: clusterLockV1X7 }, { version: 'v1.8.0', clusterLock: clusterLockV1X8 }])(
- '$version: \'should return true on verified cluster lock\'',
+ test.each([
+ { version: 'v1.6.0', clusterLock: clusterLockV1X6 },
+ { version: 'v1.7.0', clusterLock: clusterLockV1X7 },
+ { version: 'v1.8.0', clusterLock: clusterLockV1X8 },
+ ])(
+ "$version: 'should return true on verified cluster lock'",
async ({ clusterLock }) => {
- const isValidLock: boolean = await validateClusterLock(clusterLock)
- expect(isValidLock).toEqual(true)
- })
+ const isValidLock: boolean = await validateClusterLock(clusterLock);
+ expect(isValidLock).toEqual(true);
+ },
+ );
afterAll(async () => {
- const configHash = clusterLockV1X7.cluster_definition.config_hash
- const lockHash = clusterLockV1X7.lock_hash
+ const configHash = clusterLockV1X8.cluster_definition.config_hash;
+ const lockHash = clusterLockV1X8.lock_hash;
await request(app)
- .delete(`/lock/${lockHash}`)
- .set('Authorization', `Bearer ${DEL_AUTH}`)
+ .delete(`/v1/lock/${lockHash}`)
+ .set('Authorization', `Bearer ${DEL_AUTH}`);
await request(app)
- .delete(`/dv/${configHash}`)
- .set('Authorization', `Bearer ${DEL_AUTH}`)
- })
-})
+ .delete(`/v1/definition/${configHash}`)
+ .set('Authorization', `Bearer ${DEL_AUTH}`);
+ });
+});
diff --git a/test/sdk-package-test/package.json b/test/sdk-package-test/package.json
index 354ce1b..f0c6b31 100755
--- a/test/sdk-package-test/package.json
+++ b/test/sdk-package-test/package.json
@@ -12,7 +12,7 @@
"build": "rm -rf dist && tsc",
"test:e2e": "jest --config ./jest-e2e.json --runInBand --forceExit"
},
- "author": "Obol Labs (https://obol.tech)",
+ "author": "Obol Labs (https://obol.org)",
"publishConfig": {
"access": "public"
},
@@ -24,7 +24,7 @@
"bugs": {
"url": "https://github.com/obolnetwork/obol-sdk/issues"
},
- "homepage": "https://docs.obol.tech/",
+ "homepage": "https://docs.obol.org/",
"dependencies": {
"@obolnetwork/obol-sdk": "file:../..",
"dotenv": "^16.3.1",
diff --git a/test/sdk-package-test/utils.ts b/test/sdk-package-test/utils.ts
index dcb5f98..80ee982 100644
--- a/test/sdk-package-test/utils.ts
+++ b/test/sdk-package-test/utils.ts
@@ -1,71 +1,69 @@
-import request from 'supertest'
-import { ethers } from 'ethers'
+import request from 'supertest';
+import { ethers } from 'ethers';
import {
type ClusterDefinition,
Client,
type ClusterLock,
-} from '@obolnetwork/obol-sdk'
+} from '@obolnetwork/obol-sdk';
-const mnemonic = ethers.Wallet.createRandom().mnemonic?.phrase ?? ''
+const mnemonic = ethers.Wallet.createRandom().mnemonic?.phrase ?? '';
-const privateKey = ethers.Wallet.fromPhrase(mnemonic).privateKey
+const privateKey = ethers.Wallet.fromPhrase(mnemonic).privateKey;
-const wallet = new ethers.Wallet(privateKey)
+const wallet = new ethers.Wallet(privateKey);
-export const signer = wallet.connect(null)
+export const signer = wallet.connect(null);
+/* eslint-disable */
export const client: Client = new Client(
{ baseUrl: 'https://obol-api-nonprod-dev.dev.obol.tech', chainId: 17000 },
signer as any,
-)
+);
-const secondMnemonic = ethers.Wallet.createRandom().mnemonic?.phrase ?? ''
+const secondMnemonic = ethers.Wallet.createRandom().mnemonic?.phrase ?? '';
-const secondprivateKey = ethers.Wallet.fromPhrase(secondMnemonic).privateKey
+const secondprivateKey = ethers.Wallet.fromPhrase(secondMnemonic).privateKey;
-const secondWallet = new ethers.Wallet(secondprivateKey)
+const secondWallet = new ethers.Wallet(secondprivateKey);
-export const secondSigner = secondWallet.connect(null)
+export const secondSigner = secondWallet.connect(null);
export const secondClient: Client = new Client(
{ baseUrl: 'https://obol-api-nonprod-dev.dev.obol.tech', chainId: 17000 },
secondSigner as any,
-)
+);
-export const app = client.baseUrl
+export const app = client.baseUrl;
export const postClusterDef = async (
clusterWithoutDefHash: ClusterDefinition,
): Promise => {
- const postAuth = clusterWithoutDefHash.creator.config_signature
+ const postAuth = clusterWithoutDefHash.creator.config_signature;
const operatorsToPOST = clusterWithoutDefHash.operators.map(
(operator: { address: any }) => {
- return { address: operator.address }
+ return { address: operator.address };
},
- )
+ );
try {
await request(app)
- .post('/dv')
+ .post('/v1/definition')
.set('Authorization', `Bearer ${postAuth}`)
- .send({ ...clusterWithoutDefHash, operators: operatorsToPOST })
+ .send({ ...clusterWithoutDefHash, operators: operatorsToPOST });
} catch (error) {
- throw error
+ throw error;
}
-}
+};
export const updateClusterDef = async (
clusterDef: ClusterDefinition,
): Promise => {
- const clusterOperators = clusterDef.operators
+ const clusterOperators = clusterDef.operators;
for (const clusterOperator of clusterOperators) {
try {
await request(app)
- .put(`/dv/${clusterDef.config_hash}`)
- .set(
- 'Authorization',
- `Bearer ${clusterOperator.config_signature}`,
- )
+ .put(`/v1/definition/${clusterDef.config_hash}`)
+ .set('Authorization', `Bearer ${clusterOperator.config_signature}`)
.send({
address: clusterOperator.address,
enr: clusterOperator.enr,
@@ -73,19 +71,19 @@ export const updateClusterDef = async (
config_signature: clusterOperator.config_signature,
version: clusterDef.version,
fork_version: clusterDef.fork_version,
- })
+ });
} catch (error) {
- throw error
+ throw error;
}
}
-}
+};
export const publishLockFile = async (
clusterLock: ClusterLock,
): Promise => {
try {
- await request(app).post('/lock').send(clusterLock)
+ await request(app).post('/lock').send(clusterLock);
} catch (error) {
- throw error
+ throw error;
}
-}
+};
diff --git a/test/sdk-package-test/yarn.lock b/test/sdk-package-test/yarn.lock
index a88013e..77231d0 100644
--- a/test/sdk-package-test/yarn.lock
+++ b/test/sdk-package-test/yarn.lock
@@ -772,7 +772,7 @@
rimraf "^3.0.2"
"@obolnetwork/obol-sdk@file:../..":
- version "1.0.17"
+ version "1.0.16"
dependencies:
"@chainsafe/bls" "6.0.3"
"@chainsafe/blst" "^0.2.9"
@@ -1068,30 +1068,30 @@
dependencies:
"@types/yargs-parser" "*"
-"@typescript-eslint/eslint-plugin@7.14.1":
- version "7.14.1"
- resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-7.14.1.tgz#90e2f76a5930d553ede124e1f541a39b4417465e"
- integrity sha512-aAJd6bIf2vvQRjUG3ZkNXkmBpN+J7Wd0mfQiiVCJMu9Z5GcZZdcc0j8XwN/BM97Fl7e3SkTXODSk4VehUv7CGw==
+"@typescript-eslint/eslint-plugin@7.15.0":
+ version "7.15.0"
+ resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-7.15.0.tgz#8eaf396ac2992d2b8f874b68eb3fcd6b179cb7f3"
+ integrity sha512-uiNHpyjZtFrLwLDpHnzaDlP3Tt6sGMqTCiqmxaN4n4RP0EfYZDODJyddiFDF44Hjwxr5xAcaYxVKm9QKQFJFLA==
dependencies:
"@eslint-community/regexpp" "^4.10.0"
- "@typescript-eslint/scope-manager" "7.14.1"
- "@typescript-eslint/type-utils" "7.14.1"
- "@typescript-eslint/utils" "7.14.1"
- "@typescript-eslint/visitor-keys" "7.14.1"
+ "@typescript-eslint/scope-manager" "7.15.0"
+ "@typescript-eslint/type-utils" "7.15.0"
+ "@typescript-eslint/utils" "7.15.0"
+ "@typescript-eslint/visitor-keys" "7.15.0"
graphemer "^1.4.0"
ignore "^5.3.1"
natural-compare "^1.4.0"
ts-api-utils "^1.3.0"
-"@typescript-eslint/parser@7.14.1":
- version "7.14.1"
- resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-7.14.1.tgz#13d97f357aed3c5719f259a6cc3d1a1f065d3692"
- integrity sha512-8lKUOebNLcR0D7RvlcloOacTOWzOqemWEWkKSVpMZVF/XVcwjPR+3MD08QzbW9TCGJ+DwIc6zUSGZ9vd8cO1IA==
+"@typescript-eslint/parser@7.15.0":
+ version "7.15.0"
+ resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-7.15.0.tgz#f4a536e5fc6a1c05c82c4d263a2bfad2da235c80"
+ integrity sha512-k9fYuQNnypLFcqORNClRykkGOMOj+pV6V91R4GO/l1FDGwpqmSwoOQrOHo3cGaH63e+D3ZiCAOsuS/D2c99j/A==
dependencies:
- "@typescript-eslint/scope-manager" "7.14.1"
- "@typescript-eslint/types" "7.14.1"
- "@typescript-eslint/typescript-estree" "7.14.1"
- "@typescript-eslint/visitor-keys" "7.14.1"
+ "@typescript-eslint/scope-manager" "7.15.0"
+ "@typescript-eslint/types" "7.15.0"
+ "@typescript-eslint/typescript-estree" "7.15.0"
+ "@typescript-eslint/visitor-keys" "7.15.0"
debug "^4.3.4"
"@typescript-eslint/parser@^6.4.0":
@@ -1113,21 +1113,21 @@
"@typescript-eslint/types" "6.21.0"
"@typescript-eslint/visitor-keys" "6.21.0"
-"@typescript-eslint/scope-manager@7.14.1":
- version "7.14.1"
- resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-7.14.1.tgz#63de7a577bc6fe8ee6e412a5b85499f654b93ee5"
- integrity sha512-gPrFSsoYcsffYXTOZ+hT7fyJr95rdVe4kGVX1ps/dJ+DfmlnjFN/GcMxXcVkeHDKqsq6uAcVaQaIi3cFffmAbA==
+"@typescript-eslint/scope-manager@7.15.0":
+ version "7.15.0"
+ resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-7.15.0.tgz#201b34b0720be8b1447df17b963941bf044999b2"
+ integrity sha512-Q/1yrF/XbxOTvttNVPihxh1b9fxamjEoz2Os/Pe38OHwxC24CyCqXxGTOdpb4lt6HYtqw9HetA/Rf6gDGaMPlw==
dependencies:
- "@typescript-eslint/types" "7.14.1"
- "@typescript-eslint/visitor-keys" "7.14.1"
+ "@typescript-eslint/types" "7.15.0"
+ "@typescript-eslint/visitor-keys" "7.15.0"
-"@typescript-eslint/type-utils@7.14.1":
- version "7.14.1"
- resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-7.14.1.tgz#c183f2f28c4c8578eb80aebc4ac9ace400160af6"
- integrity sha512-/MzmgNd3nnbDbOi3LfasXWWe292+iuo+umJ0bCCMCPc1jLO/z2BQmWUUUXvXLbrQey/JgzdF/OV+I5bzEGwJkQ==
+"@typescript-eslint/type-utils@7.15.0":
+ version "7.15.0"
+ resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-7.15.0.tgz#5b83c904c6de91802fb399305a50a56d10472c39"
+ integrity sha512-SkgriaeV6PDvpA6253PDVep0qCqgbO1IOBiycjnXsszNTVQe5flN5wR5jiczoEoDEnAqYFSFFc9al9BSGVltkg==
dependencies:
- "@typescript-eslint/typescript-estree" "7.14.1"
- "@typescript-eslint/utils" "7.14.1"
+ "@typescript-eslint/typescript-estree" "7.15.0"
+ "@typescript-eslint/utils" "7.15.0"
debug "^4.3.4"
ts-api-utils "^1.3.0"
@@ -1136,10 +1136,10 @@
resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-6.21.0.tgz#205724c5123a8fef7ecd195075fa6e85bac3436d"
integrity sha512-1kFmZ1rOm5epu9NZEZm1kckCDGj5UJEf7P1kliH4LKu/RkwpsfqqGmY2OOcUs18lSlQBKLDYBOGxRVtrMN5lpg==
-"@typescript-eslint/types@7.14.1":
- version "7.14.1"
- resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-7.14.1.tgz#a43a540dbe5df7f2a11269683d777fc50b4350aa"
- integrity sha512-mL7zNEOQybo5R3AavY+Am7KLv8BorIv7HCYS5rKoNZKQD9tsfGUpO4KdAn3sSUvTiS4PQkr2+K0KJbxj8H9NDg==
+"@typescript-eslint/types@7.15.0":
+ version "7.15.0"
+ resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-7.15.0.tgz#fb894373a6e3882cbb37671ffddce44f934f62fc"
+ integrity sha512-aV1+B1+ySXbQH0pLK0rx66I3IkiZNidYobyfn0WFsdGhSXw+P3YOqeTq5GED458SfB24tg+ux3S+9g118hjlTw==
"@typescript-eslint/typescript-estree@6.21.0":
version "6.21.0"
@@ -1155,13 +1155,13 @@
semver "^7.5.4"
ts-api-utils "^1.0.1"
-"@typescript-eslint/typescript-estree@7.14.1":
- version "7.14.1"
- resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-7.14.1.tgz#ba7c9bac8744487749d19569e254d057754a1575"
- integrity sha512-k5d0VuxViE2ulIO6FbxxSZaxqDVUyMbXcidC8rHvii0I56XZPv8cq+EhMns+d/EVIL41sMXqRbK3D10Oza1bbA==
+"@typescript-eslint/typescript-estree@7.15.0":
+ version "7.15.0"
+ resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-7.15.0.tgz#e323bfa3966e1485b638ce751f219fc1f31eba37"
+ integrity sha512-gjyB/rHAopL/XxfmYThQbXbzRMGhZzGw6KpcMbfe8Q3nNQKStpxnUKeXb0KiN/fFDR42Z43szs6rY7eHk0zdGQ==
dependencies:
- "@typescript-eslint/types" "7.14.1"
- "@typescript-eslint/visitor-keys" "7.14.1"
+ "@typescript-eslint/types" "7.15.0"
+ "@typescript-eslint/visitor-keys" "7.15.0"
debug "^4.3.4"
globby "^11.1.0"
is-glob "^4.0.3"
@@ -1169,15 +1169,15 @@
semver "^7.6.0"
ts-api-utils "^1.3.0"
-"@typescript-eslint/utils@7.14.1":
- version "7.14.1"
- resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-7.14.1.tgz#3307b8226f99103dca2133d0ebcae38419d82c9d"
- integrity sha512-CMmVVELns3nak3cpJhZosDkm63n+DwBlDX8g0k4QUa9BMnF+lH2lr3d130M1Zt1xxmB3LLk3NV7KQCq86ZBBhQ==
+"@typescript-eslint/utils@7.15.0":
+ version "7.15.0"
+ resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-7.15.0.tgz#9e6253c4599b6e7da2fb64ba3f549c73eb8c1960"
+ integrity sha512-hfDMDqaqOqsUVGiEPSMLR/AjTSCsmJwjpKkYQRo1FNbmW4tBwBspYDwO9eh7sKSTwMQgBw9/T4DHudPaqshRWA==
dependencies:
"@eslint-community/eslint-utils" "^4.4.0"
- "@typescript-eslint/scope-manager" "7.14.1"
- "@typescript-eslint/types" "7.14.1"
- "@typescript-eslint/typescript-estree" "7.14.1"
+ "@typescript-eslint/scope-manager" "7.15.0"
+ "@typescript-eslint/types" "7.15.0"
+ "@typescript-eslint/typescript-estree" "7.15.0"
"@typescript-eslint/visitor-keys@6.21.0":
version "6.21.0"
@@ -1187,12 +1187,12 @@
"@typescript-eslint/types" "6.21.0"
eslint-visitor-keys "^3.4.1"
-"@typescript-eslint/visitor-keys@7.14.1":
- version "7.14.1"
- resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-7.14.1.tgz#cc79b5ea154aea734b2a13b983670749f5742274"
- integrity sha512-Crb+F75U1JAEtBeQGxSKwI60hZmmzaqA3z9sYsVm8X7W5cwLEm5bRe0/uXS6+MR/y8CVpKSR/ontIAIEPFcEkA==
+"@typescript-eslint/visitor-keys@7.15.0":
+ version "7.15.0"
+ resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-7.15.0.tgz#1da0726201a859343fe6a05742a7c1792fff5b66"
+ integrity sha512-Hqgy/ETgpt2L5xueA/zHHIl4fJI2O4XUE9l4+OIfbJIRSnTJb/QscncdqqZzofQegIJugRIF57OJea1khw2SDw==
dependencies:
- "@typescript-eslint/types" "7.14.1"
+ "@typescript-eslint/types" "7.15.0"
eslint-visitor-keys "^3.4.3"
"@zxing/text-encoding@0.9.0":
@@ -1982,9 +1982,9 @@ dotenv@*, dotenv@^16.3.1:
integrity sha512-ZmdL2rui+eB2YwhsWzjInR8LldtZHGDoQ1ugH85ppHKwpUHL7j7rN0Ti9NCnGiQbhaZ11FpR+7ao1dNsmduNUg==
electron-to-chromium@^1.4.796:
- version "1.4.815"
- resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.815.tgz#e901b195c57c3e0fae8dc6d596e4188a33c3e82c"
- integrity sha512-OvpTT2ItpOXJL7IGcYakRjHCt8L5GrrN/wHCQsRB4PQa1X9fe+X9oen245mIId7s14xvArCGSTIq644yPUKKLg==
+ version "1.4.816"
+ resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.816.tgz#3624649d1e7fde5cdbadf59d31a524245d8ee85f"
+ integrity sha512-EKH5X5oqC6hLmiS7/vYtZHZFTNdhsYG5NVPRN6Yn0kQHNBlT59+xSM8HBy66P5fxWpKgZbPqb+diC64ng295Jw==
elliptic@^6.5.4:
version "6.5.5"
@@ -4218,9 +4218,9 @@ punycode@^2.1.0:
integrity sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==
qs@^6.11.0:
- version "6.12.1"
- resolved "https://registry.yarnpkg.com/qs/-/qs-6.12.1.tgz#39422111ca7cbdb70425541cba20c7d7b216599a"
- integrity sha512-zWmv4RSuB9r2mYQw3zxQuHWeU+42aKi1wWig/j4ele4ygELZ7PEO6MM7rim9oAQH2A5MWfsAVf/jPvTPgCbvUQ==
+ version "6.12.2"
+ resolved "https://registry.yarnpkg.com/qs/-/qs-6.12.2.tgz#5443b587f3bf73ac68968de491e5b25bafe04478"
+ integrity sha512-x+NLUpx9SYrcwXtX7ob1gnkSems4i/mGZX5SlYxwIau6RrUSODO89TR/XDGGpn5RPWSYIB+aSfuSlV5+CmbTBg==
dependencies:
side-channel "^1.0.6"
@@ -4809,13 +4809,13 @@ typed-array-length@^1.0.6:
possible-typed-array-names "^1.0.0"
typescript-eslint@^7.1.0:
- version "7.14.1"
- resolved "https://registry.yarnpkg.com/typescript-eslint/-/typescript-eslint-7.14.1.tgz#5c1a7d758527321a120adbe9588baef8e5074300"
- integrity sha512-Eo1X+Y0JgGPspcANKjeR6nIqXl4VL5ldXLc15k4m9upq+eY5fhU2IueiEZL6jmHrKH8aCfbIvM/v3IrX5Hg99w==
+ version "7.15.0"
+ resolved "https://registry.yarnpkg.com/typescript-eslint/-/typescript-eslint-7.15.0.tgz#44caca31461cc8afa829c4e5ab11aa9e0f7e175d"
+ integrity sha512-Ta40FhMXBCwHura4X4fncaCVkVcnJ9jnOq5+Lp4lN8F4DzHZtOwZdRvVBiNUGznUDHPwdGnrnwxmUOU2fFQqFA==
dependencies:
- "@typescript-eslint/eslint-plugin" "7.14.1"
- "@typescript-eslint/parser" "7.14.1"
- "@typescript-eslint/utils" "7.14.1"
+ "@typescript-eslint/eslint-plugin" "7.15.0"
+ "@typescript-eslint/parser" "7.15.0"
+ "@typescript-eslint/utils" "7.15.0"
uint8arrays@1.1.0, uint8arrays@^1.1.0:
version "1.1.0"
diff --git a/yarn.lock b/yarn.lock
index 5e235c1..0a0e47a 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -14,156 +14,159 @@
"@jridgewell/gen-mapping" "^0.3.5"
"@jridgewell/trace-mapping" "^0.3.24"
-"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.12.13", "@babel/code-frame@^7.21.4", "@babel/code-frame@^7.23.5", "@babel/code-frame@^7.24.2":
- version "7.24.2"
- resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.24.2.tgz#718b4b19841809a58b29b68cde80bc5e1aa6d9ae"
- integrity sha512-y5+tLQyV8pg3fsiln67BVLD1P13Eg4lh5RW9mF0zUuvLrv9uIQ4MCL+CRT+FTsBlBjcIan6PGsLcBN0m3ClUyQ==
+"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.12.13", "@babel/code-frame@^7.21.4", "@babel/code-frame@^7.24.7":
+ version "7.24.7"
+ resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.24.7.tgz#882fd9e09e8ee324e496bd040401c6f046ef4465"
+ integrity sha512-BcYH1CVJBO9tvyIZ2jVeXgSIMvGZ2FDRvDdOIVQyuklNKSsx+eppDEBq/g47Ayw+RqNFE+URvOShmf+f/qwAlA==
dependencies:
- "@babel/highlight" "^7.24.2"
+ "@babel/highlight" "^7.24.7"
picocolors "^1.0.0"
-"@babel/compat-data@^7.23.5":
- version "7.24.4"
- resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.24.4.tgz#6f102372e9094f25d908ca0d34fc74c74606059a"
- integrity sha512-vg8Gih2MLK+kOkHJp4gBEIkyaIi00jgWot2D9QOmmfLC8jINSOzmCLta6Bvz/JSBCqnegV0L80jhxkol5GWNfQ==
+"@babel/compat-data@^7.24.7":
+ version "7.24.7"
+ resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.24.7.tgz#d23bbea508c3883ba8251fb4164982c36ea577ed"
+ integrity sha512-qJzAIcv03PyaWqxRgO4mSU3lihncDT296vnyuE2O8uA4w3UHWI4S3hgeZd1L8W1Bft40w9JxJ2b412iDUFFRhw==
"@babel/core@^7.11.6", "@babel/core@^7.12.3":
- version "7.24.5"
- resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.24.5.tgz#15ab5b98e101972d171aeef92ac70d8d6718f06a"
- integrity sha512-tVQRucExLQ02Boi4vdPp49svNGcfL2GhdTCT9aldhXgCJVAI21EtRfBettiuLUwce/7r6bFdgs6JFkcdTiFttA==
+ version "7.24.7"
+ resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.24.7.tgz#b676450141e0b52a3d43bc91da86aa608f950ac4"
+ integrity sha512-nykK+LEK86ahTkX/3TgauT0ikKoNCfKHEaZYTUVupJdTLzGNvrblu4u6fa7DhZONAltdf8e662t/abY8idrd/g==
dependencies:
"@ampproject/remapping" "^2.2.0"
- "@babel/code-frame" "^7.24.2"
- "@babel/generator" "^7.24.5"
- "@babel/helper-compilation-targets" "^7.23.6"
- "@babel/helper-module-transforms" "^7.24.5"
- "@babel/helpers" "^7.24.5"
- "@babel/parser" "^7.24.5"
- "@babel/template" "^7.24.0"
- "@babel/traverse" "^7.24.5"
- "@babel/types" "^7.24.5"
+ "@babel/code-frame" "^7.24.7"
+ "@babel/generator" "^7.24.7"
+ "@babel/helper-compilation-targets" "^7.24.7"
+ "@babel/helper-module-transforms" "^7.24.7"
+ "@babel/helpers" "^7.24.7"
+ "@babel/parser" "^7.24.7"
+ "@babel/template" "^7.24.7"
+ "@babel/traverse" "^7.24.7"
+ "@babel/types" "^7.24.7"
convert-source-map "^2.0.0"
debug "^4.1.0"
gensync "^1.0.0-beta.2"
json5 "^2.2.3"
semver "^6.3.1"
-"@babel/generator@^7.24.5", "@babel/generator@^7.7.2":
- version "7.24.5"
- resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.24.5.tgz#e5afc068f932f05616b66713e28d0f04e99daeb3"
- integrity sha512-x32i4hEXvr+iI0NEoEfDKzlemF8AmtOP8CcrRaEcpzysWuoEb1KknpcvMsHKPONoKZiDuItklgWhB18xEhr9PA==
+"@babel/generator@^7.24.7", "@babel/generator@^7.7.2":
+ version "7.24.7"
+ resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.24.7.tgz#1654d01de20ad66b4b4d99c135471bc654c55e6d"
+ integrity sha512-oipXieGC3i45Y1A41t4tAqpnEZWgB/lC6Ehh6+rOviR5XWpTtMmLN+fGjz9vOiNRt0p6RtO6DtD0pdU3vpqdSA==
dependencies:
- "@babel/types" "^7.24.5"
+ "@babel/types" "^7.24.7"
"@jridgewell/gen-mapping" "^0.3.5"
"@jridgewell/trace-mapping" "^0.3.25"
jsesc "^2.5.1"
-"@babel/helper-compilation-targets@^7.23.6":
- version "7.23.6"
- resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.23.6.tgz#4d79069b16cbcf1461289eccfbbd81501ae39991"
- integrity sha512-9JB548GZoQVmzrFgp8o7KxdgkTGm6xs9DW0o/Pim72UDjzr5ObUQ6ZzYPqA+g9OTS2bBQoctLJrky0RDCAWRgQ==
+"@babel/helper-compilation-targets@^7.24.7":
+ version "7.24.7"
+ resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.24.7.tgz#4eb6c4a80d6ffeac25ab8cd9a21b5dfa48d503a9"
+ integrity sha512-ctSdRHBi20qWOfy27RUb4Fhp07KSJ3sXcuSvTrXrc4aG8NSYDo1ici3Vhg9bg69y5bj0Mr1lh0aeEgTvc12rMg==
dependencies:
- "@babel/compat-data" "^7.23.5"
- "@babel/helper-validator-option" "^7.23.5"
+ "@babel/compat-data" "^7.24.7"
+ "@babel/helper-validator-option" "^7.24.7"
browserslist "^4.22.2"
lru-cache "^5.1.1"
semver "^6.3.1"
-"@babel/helper-environment-visitor@^7.22.20":
- version "7.22.20"
- resolved "https://registry.yarnpkg.com/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.20.tgz#96159db61d34a29dba454c959f5ae4a649ba9167"
- integrity sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA==
-
-"@babel/helper-function-name@^7.23.0":
- version "7.23.0"
- resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.23.0.tgz#1f9a3cdbd5b2698a670c30d2735f9af95ed52759"
- integrity sha512-OErEqsrxjZTJciZ4Oo+eoZqeW9UIiOcuYKRJA4ZAgV9myA+pOXhhmpfNCKjEH/auVfEYVFJ6y1Tc4r0eIApqiw==
- dependencies:
- "@babel/template" "^7.22.15"
- "@babel/types" "^7.23.0"
-
-"@babel/helper-hoist-variables@^7.22.5":
- version "7.22.5"
- resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.22.5.tgz#c01a007dac05c085914e8fb652b339db50d823bb"
- integrity sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==
- dependencies:
- "@babel/types" "^7.22.5"
-
-"@babel/helper-module-imports@^7.24.3":
- version "7.24.3"
- resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.24.3.tgz#6ac476e6d168c7c23ff3ba3cf4f7841d46ac8128"
- integrity sha512-viKb0F9f2s0BCS22QSF308z/+1YWKV/76mwt61NBzS5izMzDPwdq1pTrzf+Li3npBWX9KdQbkeCt1jSAM7lZqg==
- dependencies:
- "@babel/types" "^7.24.0"
-
-"@babel/helper-module-transforms@^7.24.5":
- version "7.24.5"
- resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.24.5.tgz#ea6c5e33f7b262a0ae762fd5986355c45f54a545"
- integrity sha512-9GxeY8c2d2mdQUP1Dye0ks3VDyIMS98kt/llQ2nUId8IsWqTF0l1LkSX0/uP7l7MCDrzXS009Hyhe2gzTiGW8A==
- dependencies:
- "@babel/helper-environment-visitor" "^7.22.20"
- "@babel/helper-module-imports" "^7.24.3"
- "@babel/helper-simple-access" "^7.24.5"
- "@babel/helper-split-export-declaration" "^7.24.5"
- "@babel/helper-validator-identifier" "^7.24.5"
-
-"@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.10.4", "@babel/helper-plugin-utils@^7.12.13", "@babel/helper-plugin-utils@^7.14.5", "@babel/helper-plugin-utils@^7.24.0", "@babel/helper-plugin-utils@^7.8.0":
- version "7.24.5"
- resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.24.5.tgz#a924607dd254a65695e5bd209b98b902b3b2f11a"
- integrity sha512-xjNLDopRzW2o6ba0gKbkZq5YWEBaK3PCyTOY1K2P/O07LGMhMqlMXPxwN4S5/RhWuCobT8z0jrlKGlYmeR1OhQ==
-
-"@babel/helper-simple-access@^7.24.5":
- version "7.24.5"
- resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.24.5.tgz#50da5b72f58c16b07fbd992810be6049478e85ba"
- integrity sha512-uH3Hmf5q5n7n8mz7arjUlDOCbttY/DW4DYhE6FUsjKJ/oYC1kQQUvwEQWxRwUpX9qQKRXeqLwWxrqilMrf32sQ==
- dependencies:
- "@babel/types" "^7.24.5"
-
-"@babel/helper-split-export-declaration@^7.24.5":
- version "7.24.5"
- resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.24.5.tgz#b9a67f06a46b0b339323617c8c6213b9055a78b6"
- integrity sha512-5CHncttXohrHk8GWOFCcCl4oRD9fKosWlIRgWm4ql9VYioKm52Mk2xsmoohvm7f3JoiLSM5ZgJuRaf5QZZYd3Q==
- dependencies:
- "@babel/types" "^7.24.5"
-
-"@babel/helper-string-parser@^7.24.1":
- version "7.24.1"
- resolved "https://registry.yarnpkg.com/@babel/helper-string-parser/-/helper-string-parser-7.24.1.tgz#f99c36d3593db9540705d0739a1f10b5e20c696e"
- integrity sha512-2ofRCjnnA9y+wk8b9IAREroeUP02KHp431N2mhKniy2yKIDKpbrHv9eXwm8cBeWQYcJmzv5qKCu65P47eCF7CQ==
-
-"@babel/helper-validator-identifier@^7.24.5":
- version "7.24.5"
- resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.24.5.tgz#918b1a7fa23056603506370089bd990d8720db62"
- integrity sha512-3q93SSKX2TWCG30M2G2kwaKeTYgEUp5Snjuj8qm729SObL6nbtUldAi37qbxkD5gg3xnBio+f9nqpSepGZMvxA==
-
-"@babel/helper-validator-option@^7.23.5":
- version "7.23.5"
- resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.23.5.tgz#907a3fbd4523426285365d1206c423c4c5520307"
- integrity sha512-85ttAOMLsr53VgXkTbkx8oA6YTfT4q7/HzXSLEYmjcSTJPMPQtvq1BD79Byep5xMUYbGRzEpDsjUf3dyp54IKw==
-
-"@babel/helpers@^7.24.5":
- version "7.24.5"
- resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.24.5.tgz#fedeb87eeafa62b621160402181ad8585a22a40a"
- integrity sha512-CiQmBMMpMQHwM5m01YnrM6imUG1ebgYJ+fAIW4FZe6m4qHTPaRHti+R8cggAwkdz4oXhtO4/K9JWlh+8hIfR2Q==
- dependencies:
- "@babel/template" "^7.24.0"
- "@babel/traverse" "^7.24.5"
- "@babel/types" "^7.24.5"
-
-"@babel/highlight@^7.24.2":
- version "7.24.5"
- resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.24.5.tgz#bc0613f98e1dd0720e99b2a9ee3760194a704b6e"
- integrity sha512-8lLmua6AVh/8SLJRRVD6V8p73Hir9w5mJrhE+IPpILG31KKlI9iz5zmBYKcWPS59qSfgP9RaSBQSHHE81WKuEw==
- dependencies:
- "@babel/helper-validator-identifier" "^7.24.5"
+"@babel/helper-environment-visitor@^7.24.7":
+ version "7.24.7"
+ resolved "https://registry.yarnpkg.com/@babel/helper-environment-visitor/-/helper-environment-visitor-7.24.7.tgz#4b31ba9551d1f90781ba83491dd59cf9b269f7d9"
+ integrity sha512-DoiN84+4Gnd0ncbBOM9AZENV4a5ZiL39HYMyZJGZ/AZEykHYdJw0wW3kdcsh9/Kn+BRXHLkkklZ51ecPKmI1CQ==
+ dependencies:
+ "@babel/types" "^7.24.7"
+
+"@babel/helper-function-name@^7.24.7":
+ version "7.24.7"
+ resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.24.7.tgz#75f1e1725742f39ac6584ee0b16d94513da38dd2"
+ integrity sha512-FyoJTsj/PEUWu1/TYRiXTIHc8lbw+TDYkZuoE43opPS5TrI7MyONBE1oNvfguEXAD9yhQRrVBnXdXzSLQl9XnA==
+ dependencies:
+ "@babel/template" "^7.24.7"
+ "@babel/types" "^7.24.7"
+
+"@babel/helper-hoist-variables@^7.24.7":
+ version "7.24.7"
+ resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.24.7.tgz#b4ede1cde2fd89436397f30dc9376ee06b0f25ee"
+ integrity sha512-MJJwhkoGy5c4ehfoRyrJ/owKeMl19U54h27YYftT0o2teQ3FJ3nQUf/I3LlJsX4l3qlw7WRXUmiyajvHXoTubQ==
+ dependencies:
+ "@babel/types" "^7.24.7"
+
+"@babel/helper-module-imports@^7.24.7":
+ version "7.24.7"
+ resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.24.7.tgz#f2f980392de5b84c3328fc71d38bd81bbb83042b"
+ integrity sha512-8AyH3C+74cgCVVXow/myrynrAGv+nTVg5vKu2nZph9x7RcRwzmh0VFallJuFTZ9mx6u4eSdXZfcOzSqTUm0HCA==
+ dependencies:
+ "@babel/traverse" "^7.24.7"
+ "@babel/types" "^7.24.7"
+
+"@babel/helper-module-transforms@^7.24.7":
+ version "7.24.7"
+ resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.24.7.tgz#31b6c9a2930679498db65b685b1698bfd6c7daf8"
+ integrity sha512-1fuJEwIrp+97rM4RWdO+qrRsZlAeL1lQJoPqtCYWv0NL115XM93hIH4CSRln2w52SqvmY5hqdtauB6QFCDiZNQ==
+ dependencies:
+ "@babel/helper-environment-visitor" "^7.24.7"
+ "@babel/helper-module-imports" "^7.24.7"
+ "@babel/helper-simple-access" "^7.24.7"
+ "@babel/helper-split-export-declaration" "^7.24.7"
+ "@babel/helper-validator-identifier" "^7.24.7"
+
+"@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.10.4", "@babel/helper-plugin-utils@^7.12.13", "@babel/helper-plugin-utils@^7.14.5", "@babel/helper-plugin-utils@^7.24.7", "@babel/helper-plugin-utils@^7.8.0":
+ version "7.24.7"
+ resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.24.7.tgz#98c84fe6fe3d0d3ae7bfc3a5e166a46844feb2a0"
+ integrity sha512-Rq76wjt7yz9AAc1KnlRKNAi/dMSVWgDRx43FHoJEbcYU6xOWaE2dVPwcdTukJrjxS65GITyfbvEYHvkirZ6uEg==
+
+"@babel/helper-simple-access@^7.24.7":
+ version "7.24.7"
+ resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.24.7.tgz#bcade8da3aec8ed16b9c4953b74e506b51b5edb3"
+ integrity sha512-zBAIvbCMh5Ts+b86r/CjU+4XGYIs+R1j951gxI3KmmxBMhCg4oQMsv6ZXQ64XOm/cvzfU1FmoCyt6+owc5QMYg==
+ dependencies:
+ "@babel/traverse" "^7.24.7"
+ "@babel/types" "^7.24.7"
+
+"@babel/helper-split-export-declaration@^7.24.7":
+ version "7.24.7"
+ resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.24.7.tgz#83949436890e07fa3d6873c61a96e3bbf692d856"
+ integrity sha512-oy5V7pD+UvfkEATUKvIjvIAH/xCzfsFVw7ygW2SI6NClZzquT+mwdTfgfdbUiceh6iQO0CHtCPsyze/MZ2YbAA==
+ dependencies:
+ "@babel/types" "^7.24.7"
+
+"@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/helper-validator-option@^7.24.7":
+ version "7.24.7"
+ resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.24.7.tgz#24c3bb77c7a425d1742eec8fb433b5a1b38e62f6"
+ integrity sha512-yy1/KvjhV/ZCL+SM7hBrvnZJ3ZuT9OuZgIJAGpPEToANvc3iM6iDvBnRjtElWibHU6n8/LPR/EjX9EtIEYO3pw==
+
+"@babel/helpers@^7.24.7":
+ version "7.24.7"
+ resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.24.7.tgz#aa2ccda29f62185acb5d42fb4a3a1b1082107416"
+ integrity sha512-NlmJJtvcw72yRJRcnCmGvSi+3jDEg8qFu3z0AFoymmzLx5ERVWyzd9kVXr7Th9/8yIJi2Zc6av4Tqz3wFs8QWg==
+ dependencies:
+ "@babel/template" "^7.24.7"
+ "@babel/types" "^7.24.7"
+
+"@babel/highlight@^7.24.7":
+ version "7.24.7"
+ resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.24.7.tgz#a05ab1df134b286558aae0ed41e6c5f731bf409d"
+ integrity sha512-EStJpq4OuY8xYfhGVXngigBJRWxftKX9ksiGDnmlY3o7B/V7KIAc9X4oiK87uPJSc/vs5L869bem5fhZa8caZw==
+ dependencies:
+ "@babel/helper-validator-identifier" "^7.24.7"
chalk "^2.4.2"
js-tokens "^4.0.0"
picocolors "^1.0.0"
-"@babel/parser@^7.1.0", "@babel/parser@^7.14.7", "@babel/parser@^7.20.7", "@babel/parser@^7.24.0", "@babel/parser@^7.24.5":
- version "7.24.5"
- resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.24.5.tgz#4a4d5ab4315579e5398a82dcf636ca80c3392790"
- integrity sha512-EOv5IK8arwh3LI47dz1b0tKUb/1uhHAnHJOrjgtQMIpu1uXd9mlFrJg9IUgGUgZ41Ch0K8REPTYpO7B76b4vJg==
+"@babel/parser@^7.1.0", "@babel/parser@^7.14.7", "@babel/parser@^7.20.7", "@babel/parser@^7.24.7":
+ version "7.24.7"
+ resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.24.7.tgz#9a5226f92f0c5c8ead550b750f5608e766c8ce85"
+ integrity sha512-9uUYRm6OqQrCqQdG1iCBwBPZgN8ciDBro2nIOFaiRz1/BCxaI7CNvQbDHvsArAC7Tw9Hda/B3U+6ui9u4HWXPw==
"@babel/plugin-syntax-async-generators@^7.8.4":
version "7.8.4"
@@ -250,44 +253,44 @@
"@babel/helper-plugin-utils" "^7.14.5"
"@babel/plugin-syntax-typescript@^7.7.2":
- version "7.24.1"
- resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.24.1.tgz#b3bcc51f396d15f3591683f90239de143c076844"
- integrity sha512-Yhnmvy5HZEnHUty6i++gcfH1/l68AHnItFHnaCv6hn9dNh0hQvvQJsxpi4BMBFN5DLeHBuucT/0DgzXif/OyRw==
- dependencies:
- "@babel/helper-plugin-utils" "^7.24.0"
-
-"@babel/template@^7.22.15", "@babel/template@^7.24.0", "@babel/template@^7.3.3":
- version "7.24.0"
- resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.24.0.tgz#c6a524aa93a4a05d66aaf31654258fae69d87d50"
- integrity sha512-Bkf2q8lMB0AFpX0NFEqSbx1OkTHf0f+0j82mkw+ZpzBnkk7e9Ql0891vlfgi+kHwOk8tQjiQHpqh4LaSa0fKEA==
- dependencies:
- "@babel/code-frame" "^7.23.5"
- "@babel/parser" "^7.24.0"
- "@babel/types" "^7.24.0"
-
-"@babel/traverse@^7.24.5", "@babel/traverse@^7.7.2":
- version "7.24.5"
- resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.24.5.tgz#972aa0bc45f16983bf64aa1f877b2dd0eea7e6f8"
- integrity sha512-7aaBLeDQ4zYcUFDUD41lJc1fG8+5IU9DaNSJAgal866FGvmD5EbWQgnEC6kO1gGLsX0esNkfnJSndbTXA3r7UA==
- dependencies:
- "@babel/code-frame" "^7.24.2"
- "@babel/generator" "^7.24.5"
- "@babel/helper-environment-visitor" "^7.22.20"
- "@babel/helper-function-name" "^7.23.0"
- "@babel/helper-hoist-variables" "^7.22.5"
- "@babel/helper-split-export-declaration" "^7.24.5"
- "@babel/parser" "^7.24.5"
- "@babel/types" "^7.24.5"
+ version "7.24.7"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.24.7.tgz#58d458271b4d3b6bb27ee6ac9525acbb259bad1c"
+ integrity sha512-c/+fVeJBB0FeKsFvwytYiUD+LBvhHjGSI0g446PRGdSVGZLRNArBUno2PETbAly3tpiNAQR5XaZ+JslxkotsbA==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.24.7"
+
+"@babel/template@^7.24.7", "@babel/template@^7.3.3":
+ version "7.24.7"
+ resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.24.7.tgz#02efcee317d0609d2c07117cb70ef8fb17ab7315"
+ integrity sha512-jYqfPrU9JTF0PmPy1tLYHW4Mp4KlgxJD9l2nP9fD6yT/ICi554DmrWBAEYpIelzjHf1msDP3PxJIRt/nFNfBig==
+ dependencies:
+ "@babel/code-frame" "^7.24.7"
+ "@babel/parser" "^7.24.7"
+ "@babel/types" "^7.24.7"
+
+"@babel/traverse@^7.24.7", "@babel/traverse@^7.7.2":
+ version "7.24.7"
+ resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.24.7.tgz#de2b900163fa741721ba382163fe46a936c40cf5"
+ integrity sha512-yb65Ed5S/QAcewNPh0nZczy9JdYXkkAbIsEo+P7BE7yO3txAY30Y/oPa3QkQ5It3xVG2kpKMg9MsdxZaO31uKA==
+ dependencies:
+ "@babel/code-frame" "^7.24.7"
+ "@babel/generator" "^7.24.7"
+ "@babel/helper-environment-visitor" "^7.24.7"
+ "@babel/helper-function-name" "^7.24.7"
+ "@babel/helper-hoist-variables" "^7.24.7"
+ "@babel/helper-split-export-declaration" "^7.24.7"
+ "@babel/parser" "^7.24.7"
+ "@babel/types" "^7.24.7"
debug "^4.3.1"
globals "^11.1.0"
-"@babel/types@^7.0.0", "@babel/types@^7.20.7", "@babel/types@^7.22.5", "@babel/types@^7.23.0", "@babel/types@^7.24.0", "@babel/types@^7.24.5", "@babel/types@^7.3.3":
- version "7.24.5"
- resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.24.5.tgz#7661930afc638a5383eb0c4aee59b74f38db84d7"
- integrity sha512-6mQNsaLeXTw0nxYUYu+NSa4Hx4BlF1x1x8/PMFbiR+GBSr+2DkECc69b8hgy2frEodNcvPffeH8YfWd3LI6jhQ==
+"@babel/types@^7.0.0", "@babel/types@^7.20.7", "@babel/types@^7.24.7", "@babel/types@^7.3.3":
+ 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.1"
- "@babel/helper-validator-identifier" "^7.24.5"
+ "@babel/helper-string-parser" "^7.24.7"
+ "@babel/helper-validator-identifier" "^7.24.7"
to-fast-properties "^2.0.0"
"@bcoe/v8-coverage@^0.2.3":
@@ -344,9 +347,9 @@
randombytes "^2.1.0"
"@chainsafe/blst@^0.2.9":
- version "0.2.10"
- resolved "https://registry.yarnpkg.com/@chainsafe/blst/-/blst-0.2.10.tgz#77802e5b1ff2d98ec1d25dcd5f7d27b89d376a40"
- integrity sha512-ofecTL5fWsNwnpS2oUh56dDXJRmCEcDKNNBFDb2ux+WtvdjrdSq6B+L/eNlg+sVBzXbzrCw1jq8Y8+cYiHg32w==
+ version "0.2.11"
+ resolved "https://registry.yarnpkg.com/@chainsafe/blst/-/blst-0.2.11.tgz#5ec85cd663592819d1dc51127e75dfd834250e3d"
+ integrity sha512-URyOLq5GtxBoxibOnd2pgLydCy0UZzbiIIBcsRAvGxAsRzjZL04TsQfwRkz5aphU3a1ebeRoMmI/HHyMCiFSQg==
dependencies:
"@types/tar" "^6.1.4"
node-fetch "^2.6.1"
@@ -505,10 +508,10 @@
dependencies:
eslint-visitor-keys "^3.3.0"
-"@eslint-community/regexpp@^4.10.0", "@eslint-community/regexpp@^4.6.0", "@eslint-community/regexpp@^4.6.1":
- version "4.10.0"
- resolved "https://registry.yarnpkg.com/@eslint-community/regexpp/-/regexpp-4.10.0.tgz#548f6de556857c8bb73bbee70c35dc82a2e74d63"
- integrity sha512-Cu96Sd2By9mCNTx2iyKOmq10v22jUVQv0lQnlGNy16oE9589yE+QADPbrMGCkA51cKZSg3Pu/aTJVTGfL/qjUA==
+"@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/eslintrc@^2.1.4":
version "2.1.4"
@@ -597,41 +600,43 @@
integrity sha512-trnsAYxU3xnS1gPHPyU961coFyLkh4gAD/0zQ5mymY4yOZ+CYvsPqUbOFSw0aDM4y0tV7tiFxL/1XfXPNC6IPg==
"@inquirer/confirm@^3.0.0":
- version "3.1.7"
- resolved "https://registry.yarnpkg.com/@inquirer/confirm/-/confirm-3.1.7.tgz#4568196121e4d26681fc2ff8f1f8d0f2f15e9b73"
- integrity sha512-BZjjj19W8gnh5UGFTdP5ZxpgMNRjy03Dzq3k28sB2MDlEUFrcyTkMEoGgvBmGpUw0vNBoCJkTcbHZ3e9tb+d+w==
+ version "3.1.12"
+ resolved "https://registry.yarnpkg.com/@inquirer/confirm/-/confirm-3.1.12.tgz#9727d43116c0c4cfc292ed0b37a5b0abb5a82fde"
+ integrity sha512-s5Sod79QsBBi5Qm7zxCq9DcAD0i7WRcjd/LzsiIAWqWZKW4+OJTGrCgVSLGIHTulwbZgdxM4AAxpCXe86hv4/Q==
dependencies:
- "@inquirer/core" "^8.2.0"
- "@inquirer/type" "^1.3.1"
+ "@inquirer/core" "^9.0.0"
+ "@inquirer/type" "^1.4.0"
-"@inquirer/core@^8.2.0":
- version "8.2.0"
- resolved "https://registry.yarnpkg.com/@inquirer/core/-/core-8.2.0.tgz#524ab7a6737958011f40959a1d0e5a8b90ff3471"
- integrity sha512-pexNF9j2orvMMTgoQ/uKOw8V6/R7x/sIDwRwXRhl4i0pPSh6paRzFehpFKpfMbqix1/+gzCekhYTmVbQpWkVjQ==
+"@inquirer/core@^9.0.0":
+ version "9.0.0"
+ resolved "https://registry.yarnpkg.com/@inquirer/core/-/core-9.0.0.tgz#e039fff684b9cd615c3b0071519a8beb82944254"
+ integrity sha512-y3q+fkCTGmvwk9Wf6yZlI3QGlLXbEm5M7Y7Eh8abaUbv+ffvmw2aB4FxSUrWaoaozwvEJSG60raHbCaUorXEzA==
dependencies:
- "@inquirer/figures" "^1.0.1"
- "@inquirer/type" "^1.3.1"
+ "@inquirer/figures" "^1.0.3"
+ "@inquirer/type" "^1.4.0"
"@types/mute-stream" "^0.0.4"
- "@types/node" "^20.12.11"
+ "@types/node" "^20.14.9"
"@types/wrap-ansi" "^3.0.0"
ansi-escapes "^4.3.2"
- chalk "^4.1.2"
cli-spinners "^2.9.2"
cli-width "^4.1.0"
mute-stream "^1.0.0"
signal-exit "^4.1.0"
strip-ansi "^6.0.1"
wrap-ansi "^6.2.0"
+ yoctocolors-cjs "^2.1.1"
-"@inquirer/figures@^1.0.1":
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/@inquirer/figures/-/figures-1.0.1.tgz#d65f0bd0e9511a90b4d3543ee6a3ce7211f29417"
- integrity sha512-mtup3wVKia3ZwULPHcbs4Mor8Voi+iIXEWD7wCNbIO6lYR62oPCTQyrddi5OMYVXHzeCSoneZwJuS8sBvlEwDw==
+"@inquirer/figures@^1.0.3":
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/@inquirer/figures/-/figures-1.0.3.tgz#1227cc980f88e6d6ab85abadbf164f5038041edd"
+ integrity sha512-ErXXzENMH5pJt5/ssXV0DfWUZqly8nGzf0UcBV9xTnP+KyffE2mqyxIMBrZ8ijQck2nU0TQm40EQB53YreyWHw==
-"@inquirer/type@^1.3.1":
- version "1.3.1"
- resolved "https://registry.yarnpkg.com/@inquirer/type/-/type-1.3.1.tgz#afb95ff78f44fff7e8a00e17d5820db6add2a076"
- integrity sha512-Pe3PFccjPVJV1vtlfVvm9OnlbxqdnP5QcscFEFEnK5quChf1ufZtM0r8mR5ToWHMxZOh0s8o/qp9ANGRTo/DAw==
+"@inquirer/type@^1.4.0":
+ version "1.4.0"
+ resolved "https://registry.yarnpkg.com/@inquirer/type/-/type-1.4.0.tgz#3dd0c8f78c0548bbc18b9c07af16a86c4007e1f0"
+ integrity sha512-AjOqykVyjdJQvtfkNDGUyMYGF8xN50VUxftCQWsOyIo4DFRLr6VQhW0VItGI1JIyQGCGgIpKa7hMMwNhZb4OIw==
+ dependencies:
+ mute-stream "^1.0.0"
"@isaacs/cliui@^8.0.2":
version "8.0.2"
@@ -886,20 +891,13 @@
"@jridgewell/resolve-uri" "^3.1.0"
"@jridgewell/sourcemap-codec" "^1.4.14"
-"@ljharb/through@^2.3.13":
- version "2.3.13"
- resolved "https://registry.yarnpkg.com/@ljharb/through/-/through-2.3.13.tgz#b7e4766e0b65aa82e529be945ab078de79874edc"
- integrity sha512-/gKJun8NNiWGZJkGzI/Ragc53cOdcLNdzjLaIa+GEjguQs0ulsurx8WN0jijdK9yPqDvziX995sMRLyLt1uZMQ==
- dependencies:
- call-bind "^1.0.7"
-
"@metamask/abi-utils@^2.0.2":
- version "2.0.2"
- resolved "https://registry.yarnpkg.com/@metamask/abi-utils/-/abi-utils-2.0.2.tgz#ad394e9cb8a95ac177cad942daadd88a246c0de8"
- integrity sha512-B/A1dY/w4F/t6cDHUscklO6ovb/ztFsrsTXFd8QlqSByk/vyy+QbPE3VVpmmyI/7RX+PA1AJcvBdzCIz+r9dVQ==
+ version "2.0.3"
+ resolved "https://registry.yarnpkg.com/@metamask/abi-utils/-/abi-utils-2.0.3.tgz#6316a9aa832621037e27a2ac391251860410802a"
+ integrity sha512-0PbzS6AtSmgwHxi7dYb+/Q7KszcKKg9rqjXKFcGJgSx7GnD7iY+O9O6O45G/gQ2+sOy+FYUVDsFQW7yKCZ9EVQ==
dependencies:
- "@metamask/utils" "^8.0.0"
- superstruct "^1.0.3"
+ "@metamask/superstruct" "^3.0.0"
+ "@metamask/utils" "^8.5.0"
"@metamask/eth-sig-util@^7.0.1":
version "7.0.2"
@@ -913,25 +911,30 @@
ethereum-cryptography "^2.1.2"
tweetnacl "^1.0.3"
-"@metamask/utils@^8.0.0", "@metamask/utils@^8.1.0":
- version "8.4.0"
- resolved "https://registry.yarnpkg.com/@metamask/utils/-/utils-8.4.0.tgz#f44812c96467a4e1b70b2edff6ee89a9caa4e354"
- integrity sha512-dbIc3C7alOe0agCuBHM1h71UaEaEqOk2W8rAtEn8QGz4haH2Qq7MoK6i7v2guzvkJVVh79c+QCzIqphC3KvrJg==
+"@metamask/superstruct@^3.0.0":
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/@metamask/superstruct/-/superstruct-3.1.0.tgz#148f786a674fba3ac885c1093ab718515bf7f648"
+ integrity sha512-N08M56HdOgBfRKkrgCMZvQppkZGcArEop3kixNEtVbJKm6P9Cfg0YkI6X0s1g78sNrj2fWUwvJADdZuzJgFttA==
+
+"@metamask/utils@^8.1.0", "@metamask/utils@^8.5.0":
+ version "8.5.0"
+ resolved "https://registry.yarnpkg.com/@metamask/utils/-/utils-8.5.0.tgz#ddd0d4012d5191809404c97648a837ea9962cceb"
+ integrity sha512-I6bkduevXb72TIM9q2LRO63JSsF9EXduh3sBr9oybNX2hNNpr/j1tEjXrsG0Uabm4MJ1xkGAQEMwifvKZIkyxQ==
dependencies:
"@ethereumjs/tx" "^4.2.0"
+ "@metamask/superstruct" "^3.0.0"
"@noble/hashes" "^1.3.1"
"@scure/base" "^1.1.3"
"@types/debug" "^4.1.7"
debug "^4.3.4"
pony-cause "^2.1.10"
semver "^7.5.4"
- superstruct "^1.0.3"
uuid "^9.0.1"
"@mswjs/cookies@^1.1.0":
- version "1.1.0"
- resolved "https://registry.yarnpkg.com/@mswjs/cookies/-/cookies-1.1.0.tgz#1528eb43630caf83a1d75d5332b30e75e9bb1b5b"
- integrity sha512-0ZcCVQxifZmhwNBoQIrystCb+2sWBY2Zw8lpfJBPCHGCA/HWqehITeCRVIv4VMy8MPlaHo2w2pTHFV2pFfqKPw==
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/@mswjs/cookies/-/cookies-1.1.1.tgz#8b519e2bd8f1577c530beed44a25578eb9a6e72c"
+ integrity sha512-W68qOHEjx1iD+4VjQudlx26CPIoxmIAtK4ZCexU0/UJBG6jYhcuyzKJx+Iw8uhBIGd9eba64XgWVgo20it1qwA==
"@mswjs/interceptors@^0.29.0":
version "0.29.1"
@@ -950,24 +953,19 @@
resolved "https://registry.yarnpkg.com/@multiformats/base-x/-/base-x-4.0.1.tgz#95ff0fa58711789d53aefb2590a8b7a4e715d121"
integrity sha512-eMk0b9ReBbV23xXU693TAIrLyeO5iTgBZGSJfpqriG8UkYvr/hC9u9pyMlAakDNHWmbhMZCDs6KQO0jzKD8OTw==
-"@noble/curves@1.3.0", "@noble/curves@~1.3.0":
- version "1.3.0"
- resolved "https://registry.yarnpkg.com/@noble/curves/-/curves-1.3.0.tgz#01be46da4fd195822dab821e72f71bf4aeec635e"
- integrity sha512-t01iSXPuN+Eqzb4eBX0S5oubSqXbK/xXa1Ne18Hj8f9pStxztHCE2gfboSp/dZRLSqfuLpRK2nDXDK+W9puocA==
+"@noble/curves@1.4.2", "@noble/curves@~1.4.0":
+ version "1.4.2"
+ resolved "https://registry.yarnpkg.com/@noble/curves/-/curves-1.4.2.tgz#40309198c76ed71bc6dbf7ba24e81ceb4d0d1fe9"
+ integrity sha512-TavHr8qycMChk8UwMld0ZDRvatedkzWfH8IiaeGCfymOP5i0hSCozz9vHOL0nkwk7HRMlFnAiKpS2jrUmSybcw==
dependencies:
- "@noble/hashes" "1.3.3"
+ "@noble/hashes" "1.4.0"
"@noble/hashes@1.1.2":
version "1.1.2"
resolved "https://registry.yarnpkg.com/@noble/hashes/-/hashes-1.1.2.tgz#e9e035b9b166ca0af657a7848eb2718f0f22f183"
integrity sha512-KYRCASVTv6aeUi1tsF8/vpyR7zpfs3FUzy2Jqm+MU+LmUKhQ0y2FpfwqkCcxSg2ua4GALJd8k2R76WxwZGbQpA==
-"@noble/hashes@1.3.3", "@noble/hashes@~1.3.2":
- version "1.3.3"
- resolved "https://registry.yarnpkg.com/@noble/hashes/-/hashes-1.3.3.tgz#39908da56a4adc270147bb07968bf3b16cfe1699"
- integrity sha512-V7/fPHgl+jsVPXqqeOzT8egNj2iBIVt+ECeMMG8TdcnTikP3oaBtUVqpT/gYCR68aEBJSF+XbYUxStjbFMqIIA==
-
-"@noble/hashes@^1.2.0", "@noble/hashes@^1.3.0", "@noble/hashes@^1.3.1":
+"@noble/hashes@1.4.0", "@noble/hashes@^1.2.0", "@noble/hashes@^1.3.0", "@noble/hashes@^1.3.1", "@noble/hashes@~1.4.0":
version "1.4.0"
resolved "https://registry.yarnpkg.com/@noble/hashes/-/hashes-1.4.0.tgz#45814aa329f30e4fe0ba49426f49dfccdd066426"
integrity sha512-V1JJ1WTRUqHHrOSh597hURcMqVKVGL/ea3kv0gSnEdsEZ0/+VyPghM1lMNGc00z7CIQorSvbKpuJkxvuHbvdbg==
@@ -1049,34 +1047,29 @@
"@octokit/types" "^13.0.0"
universal-user-agent "^6.0.0"
-"@octokit/openapi-types@^20.0.0":
- version "20.0.0"
- resolved "https://registry.yarnpkg.com/@octokit/openapi-types/-/openapi-types-20.0.0.tgz#9ec2daa0090eeb865ee147636e0c00f73790c6e5"
- integrity sha512-EtqRBEjp1dL/15V7WiX5LJMIxxkdiGJnabzYx5Apx4FkQIFgAfKumXeYAqqJCj1s+BMX4cPFIFC4OLCR6stlnA==
-
"@octokit/openapi-types@^22.2.0":
version "22.2.0"
resolved "https://registry.yarnpkg.com/@octokit/openapi-types/-/openapi-types-22.2.0.tgz#75aa7dcd440821d99def6a60b5f014207ae4968e"
integrity sha512-QBhVjcUa9W7Wwhm6DBFu6ZZ+1/t/oYxqc2tp81Pi41YNuJinbFRx8B133qVOrAaBbF7D/m0Et6f9/pZt9Rc+tg==
-"@octokit/plugin-paginate-rest@^9.1.5":
- version "9.2.1"
- resolved "https://registry.yarnpkg.com/@octokit/plugin-paginate-rest/-/plugin-paginate-rest-9.2.1.tgz#2e2a2f0f52c9a4b1da1a3aa17dabe3c459b9e401"
- integrity sha512-wfGhE/TAkXZRLjksFXuDZdmGnJQHvtU/joFQdweXUgzo1XwvBCD4o4+75NtFfjfLK5IwLf9vHTfSiU3sLRYpRw==
+"@octokit/plugin-paginate-rest@11.3.1":
+ version "11.3.1"
+ resolved "https://registry.yarnpkg.com/@octokit/plugin-paginate-rest/-/plugin-paginate-rest-11.3.1.tgz#fe92d04b49f134165d6fbb716e765c2f313ad364"
+ integrity sha512-ryqobs26cLtM1kQxqeZui4v8FeznirUsksiA+RYemMPJ7Micju0WSkv50dBksTuZks9O5cg4wp+t8fZ/cLY56g==
dependencies:
- "@octokit/types" "^12.6.0"
+ "@octokit/types" "^13.5.0"
"@octokit/plugin-request-log@^4.0.0":
version "4.0.1"
resolved "https://registry.yarnpkg.com/@octokit/plugin-request-log/-/plugin-request-log-4.0.1.tgz#98a3ca96e0b107380664708111864cb96551f958"
integrity sha512-GihNqNpGHorUrO7Qa9JbAl0dbLnqJVrV8OXe2Zm5/Y4wFkZQDfTreBzVmiRfJVfE4mClXdihHnbpyyO9FSX4HA==
-"@octokit/plugin-rest-endpoint-methods@^10.2.0":
- version "10.4.1"
- resolved "https://registry.yarnpkg.com/@octokit/plugin-rest-endpoint-methods/-/plugin-rest-endpoint-methods-10.4.1.tgz#41ba478a558b9f554793075b2e20cd2ef973be17"
- integrity sha512-xV1b+ceKV9KytQe3zCVqjg+8GTGfDYwaT1ATU5isiUyVtlVAO3HNdzpS4sr4GBx4hxQ46s7ITtZrAsxG22+rVg==
+"@octokit/plugin-rest-endpoint-methods@13.2.2":
+ version "13.2.2"
+ resolved "https://registry.yarnpkg.com/@octokit/plugin-rest-endpoint-methods/-/plugin-rest-endpoint-methods-13.2.2.tgz#af8e5dd2cddfea576f92ffaf9cb84659f302a638"
+ integrity sha512-EI7kXWidkt3Xlok5uN43suK99VWqc8OaIMktY9d9+RNKl69juoTyxmLoWPIZgJYzi41qj/9zU7G/ljnNOJ5AFA==
dependencies:
- "@octokit/types" "^12.6.0"
+ "@octokit/types" "^13.5.0"
"@octokit/request-error@^5.1.0":
version "5.1.0"
@@ -1097,24 +1090,17 @@
"@octokit/types" "^13.1.0"
universal-user-agent "^6.0.0"
-"@octokit/rest@20.1.0":
- version "20.1.0"
- resolved "https://registry.yarnpkg.com/@octokit/rest/-/rest-20.1.0.tgz#78310528f4849a69b44b15ccd27f99c7e737bb7d"
- integrity sha512-STVO3itHQLrp80lvcYB2UIKoeil5Ctsgd2s1AM+du3HqZIR35ZH7WE9HLwUOLXH0myA0y3AGNPo8gZtcgIbw0g==
+"@octokit/rest@20.1.1":
+ version "20.1.1"
+ resolved "https://registry.yarnpkg.com/@octokit/rest/-/rest-20.1.1.tgz#ec775864f53fb42037a954b9a40d4f5275b3dc95"
+ integrity sha512-MB4AYDsM5jhIHro/dq4ix1iWTLGToIGk6cWF5L6vanFaMble5jTX/UBQyiv05HsWnwUtY8JrfHy2LWfKwihqMw==
dependencies:
"@octokit/core" "^5.0.2"
- "@octokit/plugin-paginate-rest" "^9.1.5"
+ "@octokit/plugin-paginate-rest" "11.3.1"
"@octokit/plugin-request-log" "^4.0.0"
- "@octokit/plugin-rest-endpoint-methods" "^10.2.0"
+ "@octokit/plugin-rest-endpoint-methods" "13.2.2"
-"@octokit/types@^12.6.0":
- version "12.6.0"
- resolved "https://registry.yarnpkg.com/@octokit/types/-/types-12.6.0.tgz#8100fb9eeedfe083aae66473bd97b15b62aedcb2"
- integrity sha512-1rhSOfRa6H9w4YwK0yrf5faDaDTb+yLyBUKOCV4xtCDB5VmIPqd/v9yr9o6SAzOAlRxMiRiCic6JVM1/kunVkw==
- dependencies:
- "@octokit/openapi-types" "^20.0.0"
-
-"@octokit/types@^13.0.0", "@octokit/types@^13.1.0":
+"@octokit/types@^13.0.0", "@octokit/types@^13.1.0", "@octokit/types@^13.5.0":
version "13.5.0"
resolved "https://registry.yarnpkg.com/@octokit/types/-/types-13.5.0.tgz#4796e56b7b267ebc7c921dcec262b3d5bfb18883"
integrity sha512-HdqWTf5Z3qwDVlzCrP8UJquMwunpDiMPt5er+QjGzL4hqr/vBVY/MauQgS1xWxCDT1oMx1EULyqxncdCY/NVSQ==
@@ -1228,27 +1214,27 @@
conventional-recommended-bump "^9.0.0"
semver "^7.5.4"
-"@scure/base@^1.1.3", "@scure/base@~1.1.3", "@scure/base@~1.1.4":
- version "1.1.6"
- resolved "https://registry.yarnpkg.com/@scure/base/-/base-1.1.6.tgz#8ce5d304b436e4c84f896e0550c83e4d88cb917d"
- integrity sha512-ok9AWwhcgYuGG3Zfhyqg+zwl+Wn5uE+dwC0NV/2qQkx4dABbb/bx96vWu8NSj+BNjjSjno+JRYRjle1jV08k3g==
+"@scure/base@^1.1.3", "@scure/base@~1.1.3", "@scure/base@~1.1.6":
+ version "1.1.7"
+ resolved "https://registry.yarnpkg.com/@scure/base/-/base-1.1.7.tgz#fe973311a5c6267846aa131bc72e96c5d40d2b30"
+ integrity sha512-PPNYBslrLNNUQ/Yad37MHYsNQtK67EhWb6WtSvNLLPo7SdVZgkUjD6Dg+5On7zNwmskf8OX7I7Nx5oN+MIWE0g==
-"@scure/bip32@1.3.3":
- version "1.3.3"
- resolved "https://registry.yarnpkg.com/@scure/bip32/-/bip32-1.3.3.tgz#a9624991dc8767087c57999a5d79488f48eae6c8"
- integrity sha512-LJaN3HwRbfQK0X1xFSi0Q9amqOgzQnnDngIt+ZlsBC3Bm7/nE7K0kwshZHyaru79yIVRv/e1mQAjZyuZG6jOFQ==
+"@scure/bip32@1.4.0":
+ version "1.4.0"
+ resolved "https://registry.yarnpkg.com/@scure/bip32/-/bip32-1.4.0.tgz#4e1f1e196abedcef395b33b9674a042524e20d67"
+ integrity sha512-sVUpc0Vq3tXCkDGYVWGIZTRfnvu8LoTDaev7vbwh0omSvVORONr960MQWdKqJDCReIEmTj3PAr73O3aoxz7OPg==
dependencies:
- "@noble/curves" "~1.3.0"
- "@noble/hashes" "~1.3.2"
- "@scure/base" "~1.1.4"
+ "@noble/curves" "~1.4.0"
+ "@noble/hashes" "~1.4.0"
+ "@scure/base" "~1.1.6"
-"@scure/bip39@1.2.2":
- version "1.2.2"
- resolved "https://registry.yarnpkg.com/@scure/bip39/-/bip39-1.2.2.tgz#f3426813f4ced11a47489cbcf7294aa963966527"
- integrity sha512-HYf9TUXG80beW+hGAt3TRM8wU6pQoYur9iNypTROm42dorCGmLnFe3eWjz3gOq6G62H2WRh0FCzAR1PI+29zIA==
+"@scure/bip39@1.3.0":
+ version "1.3.0"
+ resolved "https://registry.yarnpkg.com/@scure/bip39/-/bip39-1.3.0.tgz#0f258c16823ddd00739461ac31398b4e7d6a18c3"
+ integrity sha512-disdg7gHuTDZtY+ZdkmLpPCk7fxZSu3gBiEGuoC1XYxv9cGx3Z6cpTggCgW6odSOOIXCiDjuGejW+aJKCY/pIQ==
dependencies:
- "@noble/hashes" "~1.3.2"
- "@scure/base" "~1.1.4"
+ "@noble/hashes" "~1.4.0"
+ "@scure/base" "~1.1.6"
"@sinclair/typebox@^0.24.1":
version "0.24.51"
@@ -1323,9 +1309,9 @@
"@babel/types" "^7.0.0"
"@types/babel__traverse@*", "@types/babel__traverse@^7.0.6":
- version "7.20.5"
- resolved "https://registry.yarnpkg.com/@types/babel__traverse/-/babel__traverse-7.20.5.tgz#7b7502be0aa80cc4ef22978846b983edaafcd4dd"
- integrity sha512-WXCyOcRtH37HAUkpXhUduaxdm82b4GSlyTqajXviN4EfiuPgNYR109xMCKvpl6zPIpua0DGlMEDCq+g8EdoheQ==
+ version "7.20.6"
+ resolved "https://registry.yarnpkg.com/@types/babel__traverse/-/babel__traverse-7.20.6.tgz#8dc9f0ae0f202c08d8d4dab648912c8d6038e3f7"
+ integrity sha512-r1bzfrm0tomOI8g1SzvCaQHo6Lcv6zu0EA+W2kHrt8dyrHQxGzBBL4kdkzIS+jBMV+EYcMAEAqXqYaLJq5rOZg==
dependencies:
"@babel/types" "^7.20.7"
@@ -1421,10 +1407,10 @@
dependencies:
"@types/node" "*"
-"@types/node@*", "@types/node@>=13.7.0", "@types/node@^20.12.11", "@types/node@^20.2.5":
- version "20.12.12"
- resolved "https://registry.yarnpkg.com/@types/node/-/node-20.12.12.tgz#7cbecdf902085cec634fdb362172dfe12b8f2050"
- integrity sha512-eWLDGF/FOSPtAvEqeRAQ4C8LSA7M1I7i0ky1I8U7kD1J5ITyW3AsRhQrKVoWf5pFKZ2kILsEGJhsI9r93PYnOw==
+"@types/node@*", "@types/node@>=13.7.0", "@types/node@^20.14.9", "@types/node@^20.2.5":
+ version "20.14.9"
+ resolved "https://registry.yarnpkg.com/@types/node/-/node-20.14.9.tgz#12e8e765ab27f8c421a1820c99f5f313a933b420"
+ integrity sha512-06OCtnTXtWOZBJlRApleWndH4JsRVs1pDCc8dLSQp+7PpUpX3ePdHyeNSFTeSe7FtKyQkrlPvHwJOW3SLd8Oyg==
dependencies:
undici-types "~5.26.4"
@@ -1493,30 +1479,30 @@
dependencies:
"@types/yargs-parser" "*"
-"@typescript-eslint/eslint-plugin@7.9.0":
- version "7.9.0"
- resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-7.9.0.tgz#093b96fc4e342226e65d5f18f9c87081e0b04a31"
- integrity sha512-6e+X0X3sFe/G/54aC3jt0txuMTURqLyekmEHViqyA2VnxhLMpvA6nqmcjIy+Cr9tLDHPssA74BP5Mx9HQIxBEA==
+"@typescript-eslint/eslint-plugin@7.15.0":
+ version "7.15.0"
+ resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-7.15.0.tgz#8eaf396ac2992d2b8f874b68eb3fcd6b179cb7f3"
+ integrity sha512-uiNHpyjZtFrLwLDpHnzaDlP3Tt6sGMqTCiqmxaN4n4RP0EfYZDODJyddiFDF44Hjwxr5xAcaYxVKm9QKQFJFLA==
dependencies:
"@eslint-community/regexpp" "^4.10.0"
- "@typescript-eslint/scope-manager" "7.9.0"
- "@typescript-eslint/type-utils" "7.9.0"
- "@typescript-eslint/utils" "7.9.0"
- "@typescript-eslint/visitor-keys" "7.9.0"
+ "@typescript-eslint/scope-manager" "7.15.0"
+ "@typescript-eslint/type-utils" "7.15.0"
+ "@typescript-eslint/utils" "7.15.0"
+ "@typescript-eslint/visitor-keys" "7.15.0"
graphemer "^1.4.0"
ignore "^5.3.1"
natural-compare "^1.4.0"
ts-api-utils "^1.3.0"
-"@typescript-eslint/parser@7.9.0":
- version "7.9.0"
- resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-7.9.0.tgz#fb3ba01b75e0e65cb78037a360961b00301f6c70"
- integrity sha512-qHMJfkL5qvgQB2aLvhUSXxbK7OLnDkwPzFalg458pxQgfxKDfT1ZDbHQM/I6mDIf/svlMkj21kzKuQ2ixJlatQ==
+"@typescript-eslint/parser@7.15.0":
+ version "7.15.0"
+ resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-7.15.0.tgz#f4a536e5fc6a1c05c82c4d263a2bfad2da235c80"
+ integrity sha512-k9fYuQNnypLFcqORNClRykkGOMOj+pV6V91R4GO/l1FDGwpqmSwoOQrOHo3cGaH63e+D3ZiCAOsuS/D2c99j/A==
dependencies:
- "@typescript-eslint/scope-manager" "7.9.0"
- "@typescript-eslint/types" "7.9.0"
- "@typescript-eslint/typescript-estree" "7.9.0"
- "@typescript-eslint/visitor-keys" "7.9.0"
+ "@typescript-eslint/scope-manager" "7.15.0"
+ "@typescript-eslint/types" "7.15.0"
+ "@typescript-eslint/typescript-estree" "7.15.0"
+ "@typescript-eslint/visitor-keys" "7.15.0"
debug "^4.3.4"
"@typescript-eslint/parser@^6.4.0":
@@ -1538,21 +1524,21 @@
"@typescript-eslint/types" "6.21.0"
"@typescript-eslint/visitor-keys" "6.21.0"
-"@typescript-eslint/scope-manager@7.9.0":
- version "7.9.0"
- resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-7.9.0.tgz#1dd3e63a4411db356a9d040e75864851b5f2619b"
- integrity sha512-ZwPK4DeCDxr3GJltRz5iZejPFAAr4Wk3+2WIBaj1L5PYK5RgxExu/Y68FFVclN0y6GGwH8q+KgKRCvaTmFBbgQ==
+"@typescript-eslint/scope-manager@7.15.0":
+ version "7.15.0"
+ resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-7.15.0.tgz#201b34b0720be8b1447df17b963941bf044999b2"
+ integrity sha512-Q/1yrF/XbxOTvttNVPihxh1b9fxamjEoz2Os/Pe38OHwxC24CyCqXxGTOdpb4lt6HYtqw9HetA/Rf6gDGaMPlw==
dependencies:
- "@typescript-eslint/types" "7.9.0"
- "@typescript-eslint/visitor-keys" "7.9.0"
+ "@typescript-eslint/types" "7.15.0"
+ "@typescript-eslint/visitor-keys" "7.15.0"
-"@typescript-eslint/type-utils@7.9.0":
- version "7.9.0"
- resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-7.9.0.tgz#f523262e1b66ca65540b7a65a1222db52e0a90c9"
- integrity sha512-6Qy8dfut0PFrFRAZsGzuLoM4hre4gjzWJB6sUvdunCYZsYemTkzZNwF1rnGea326PHPT3zn5Lmg32M/xfJfByA==
+"@typescript-eslint/type-utils@7.15.0":
+ version "7.15.0"
+ resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-7.15.0.tgz#5b83c904c6de91802fb399305a50a56d10472c39"
+ integrity sha512-SkgriaeV6PDvpA6253PDVep0qCqgbO1IOBiycjnXsszNTVQe5flN5wR5jiczoEoDEnAqYFSFFc9al9BSGVltkg==
dependencies:
- "@typescript-eslint/typescript-estree" "7.9.0"
- "@typescript-eslint/utils" "7.9.0"
+ "@typescript-eslint/typescript-estree" "7.15.0"
+ "@typescript-eslint/utils" "7.15.0"
debug "^4.3.4"
ts-api-utils "^1.3.0"
@@ -1561,10 +1547,10 @@
resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-6.21.0.tgz#205724c5123a8fef7ecd195075fa6e85bac3436d"
integrity sha512-1kFmZ1rOm5epu9NZEZm1kckCDGj5UJEf7P1kliH4LKu/RkwpsfqqGmY2OOcUs18lSlQBKLDYBOGxRVtrMN5lpg==
-"@typescript-eslint/types@7.9.0":
- version "7.9.0"
- resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-7.9.0.tgz#b58e485e4bfba055659c7e683ad4f5f0821ae2ec"
- integrity sha512-oZQD9HEWQanl9UfsbGVcZ2cGaR0YT5476xfWE0oE5kQa2sNK2frxOlkeacLOTh9po4AlUT5rtkGyYM5kew0z5w==
+"@typescript-eslint/types@7.15.0":
+ version "7.15.0"
+ resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-7.15.0.tgz#fb894373a6e3882cbb37671ffddce44f934f62fc"
+ integrity sha512-aV1+B1+ySXbQH0pLK0rx66I3IkiZNidYobyfn0WFsdGhSXw+P3YOqeTq5GED458SfB24tg+ux3S+9g118hjlTw==
"@typescript-eslint/typescript-estree@6.21.0":
version "6.21.0"
@@ -1580,13 +1566,13 @@
semver "^7.5.4"
ts-api-utils "^1.0.1"
-"@typescript-eslint/typescript-estree@7.9.0":
- version "7.9.0"
- resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-7.9.0.tgz#3395e27656060dc313a6b406c3a298b729685e07"
- integrity sha512-zBCMCkrb2YjpKV3LA0ZJubtKCDxLttxfdGmwZvTqqWevUPN0FZvSI26FalGFFUZU/9YQK/A4xcQF9o/VVaCKAg==
+"@typescript-eslint/typescript-estree@7.15.0":
+ version "7.15.0"
+ resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-7.15.0.tgz#e323bfa3966e1485b638ce751f219fc1f31eba37"
+ integrity sha512-gjyB/rHAopL/XxfmYThQbXbzRMGhZzGw6KpcMbfe8Q3nNQKStpxnUKeXb0KiN/fFDR42Z43szs6rY7eHk0zdGQ==
dependencies:
- "@typescript-eslint/types" "7.9.0"
- "@typescript-eslint/visitor-keys" "7.9.0"
+ "@typescript-eslint/types" "7.15.0"
+ "@typescript-eslint/visitor-keys" "7.15.0"
debug "^4.3.4"
globby "^11.1.0"
is-glob "^4.0.3"
@@ -1594,15 +1580,15 @@
semver "^7.6.0"
ts-api-utils "^1.3.0"
-"@typescript-eslint/utils@7.9.0":
- version "7.9.0"
- resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-7.9.0.tgz#1b96a34eefdca1c820cb1bbc2751d848b4540899"
- integrity sha512-5KVRQCzZajmT4Ep+NEgjXCvjuypVvYHUW7RHlXzNPuak2oWpVoD1jf5xCP0dPAuNIchjC7uQyvbdaSTFaLqSdA==
+"@typescript-eslint/utils@7.15.0":
+ version "7.15.0"
+ resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-7.15.0.tgz#9e6253c4599b6e7da2fb64ba3f549c73eb8c1960"
+ integrity sha512-hfDMDqaqOqsUVGiEPSMLR/AjTSCsmJwjpKkYQRo1FNbmW4tBwBspYDwO9eh7sKSTwMQgBw9/T4DHudPaqshRWA==
dependencies:
"@eslint-community/eslint-utils" "^4.4.0"
- "@typescript-eslint/scope-manager" "7.9.0"
- "@typescript-eslint/types" "7.9.0"
- "@typescript-eslint/typescript-estree" "7.9.0"
+ "@typescript-eslint/scope-manager" "7.15.0"
+ "@typescript-eslint/types" "7.15.0"
+ "@typescript-eslint/typescript-estree" "7.15.0"
"@typescript-eslint/visitor-keys@6.21.0":
version "6.21.0"
@@ -1612,12 +1598,12 @@
"@typescript-eslint/types" "6.21.0"
eslint-visitor-keys "^3.4.1"
-"@typescript-eslint/visitor-keys@7.9.0":
- version "7.9.0"
- resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-7.9.0.tgz#82162656e339c3def02895f5c8546f6888d9b9ea"
- integrity sha512-iESPx2TNLDNGQLyjKhUvIKprlP49XNEK+MvIf9nIO7ZZaZdbnfWKHnXAgufpxqfA0YryH8XToi4+CjBgVnFTSQ==
+"@typescript-eslint/visitor-keys@7.15.0":
+ version "7.15.0"
+ resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-7.15.0.tgz#1da0726201a859343fe6a05742a7c1792fff5b66"
+ integrity sha512-Hqgy/ETgpt2L5xueA/zHHIl4fJI2O4XUE9l4+OIfbJIRSnTJb/QscncdqqZzofQegIJugRIF57OJea1khw2SDw==
dependencies:
- "@typescript-eslint/types" "7.9.0"
+ "@typescript-eslint/types" "7.15.0"
eslint-visitor-keys "^3.4.3"
"@ungap/structured-clone@^1.2.0":
@@ -1649,9 +1635,9 @@ acorn-jsx@^5.3.2:
integrity sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==
acorn@^8.9.0:
- version "8.11.3"
- resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.11.3.tgz#71e0b14e13a4ec160724b38fb7b0f233b1b81d7a"
- integrity sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg==
+ version "8.12.0"
+ resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.12.0.tgz#1627bfa2e058148036133b8d9b51a700663c294c"
+ integrity sha512-RTvkC4w+KNXrM39/lWCUaG0IbRkWdCv7W/IOW9oU6SawyxulvkQy5HQPVTKxEjczcUvapcrw3cFx/60VN/NRNw==
add-stream@^1.0.0:
version "1.0.0"
@@ -1703,9 +1689,9 @@ ajv@^6.12.4:
uri-js "^4.2.2"
ajv@^8.12.0:
- version "8.13.0"
- resolved "https://registry.yarnpkg.com/ajv/-/ajv-8.13.0.tgz#a3939eaec9fb80d217ddf0c3376948c023f28c91"
- integrity sha512-PRA911Blj99jR5RMeTunVbNXMF6Lp4vZXnk5GQjcnUWUTsrXtekg/pnmFFI2u/I36Y/2bITGS30GZCXei6uNkA==
+ version "8.16.0"
+ resolved "https://registry.yarnpkg.com/ajv/-/ajv-8.16.0.tgz#22e2a92b94f005f7e0f9c9d39652ef0b8f6f0cb4"
+ integrity sha512-F0twR8U1ZU67JIEtekUcLkXkoO5mMMmgGD8sK/xUFzJ805jxHQl92hImFAqqXMyMYjSPOyUPAwHYhB72g5sTXw==
dependencies:
fast-deep-equal "^3.1.3"
json-schema-traverse "^1.0.0"
@@ -1726,6 +1712,11 @@ ansi-escapes@^4.2.1, ansi-escapes@^4.3.2:
dependencies:
type-fest "^0.21.3"
+ansi-escapes@^6.2.0:
+ version "6.2.1"
+ resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-6.2.1.tgz#76c54ce9b081dad39acec4b5d53377913825fb0f"
+ integrity sha512-4nJ3yixlEthEJ9Rk4vPcdBRkZvQZlYyu8j4/Mqz5sgIkddmEnH2Yj2ZrnP9S3tQOvSNRUIgVNF/1yPpRAGNRig==
+
ansi-regex@^5.0.1:
version "5.0.1"
resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304"
@@ -1760,7 +1751,7 @@ ansi-styles@^5.0.0:
resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-5.2.0.tgz#07449690ad45777d1924ac2abb2fc8895dba836b"
integrity sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==
-ansi-styles@^6.1.0:
+ansi-styles@^6.0.0, ansi-styles@^6.1.0, ansi-styles@^6.2.1:
version "6.2.1"
resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-6.2.1.tgz#0e62320cf99c21afff3b3012192546aacbfb05c5"
integrity sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==
@@ -1865,18 +1856,6 @@ array.prototype.flatmap@^1.3.2:
es-abstract "^1.22.1"
es-shim-unscopables "^1.0.0"
-array.prototype.map@^1.0.5:
- version "1.0.7"
- resolved "https://registry.yarnpkg.com/array.prototype.map/-/array.prototype.map-1.0.7.tgz#82fa4d6027272d1fca28a63bbda424d0185d78a7"
- integrity sha512-XpcFfLoBEAhezrrNw1V+yLXkE7M6uR7xJEsxbG6c/V9v043qurwVJB9r9UTnoSioFDoz1i1VOydpWGmJpfVZbg==
- dependencies:
- call-bind "^1.0.7"
- define-properties "^1.2.1"
- es-abstract "^1.23.2"
- es-array-method-boxes-properly "^1.0.0"
- es-object-atoms "^1.0.0"
- is-string "^1.0.7"
-
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"
@@ -2115,12 +2094,12 @@ brace-expansion@^2.0.1:
dependencies:
balanced-match "^1.0.0"
-braces@^3.0.2, braces@~3.0.2:
- version "3.0.2"
- resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107"
- integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==
+braces@^3.0.3, braces@~3.0.2:
+ version "3.0.3"
+ resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.3.tgz#490332f40919452272d55a8480adc0c441358789"
+ integrity sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==
dependencies:
- fill-range "^7.0.1"
+ fill-range "^7.1.1"
brorand@^1.1.0:
version "1.1.0"
@@ -2128,14 +2107,14 @@ brorand@^1.1.0:
integrity sha512-cKV8tMCEpQs4hK/ik71d6LrPOnpkpGBR0wzxqr68g2m/LB2GxVYQroAjMJZRVM1Y4BCjCKc3vAamxSzOY2RP+w==
browserslist@^4.22.2:
- version "4.23.0"
- resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.23.0.tgz#8f3acc2bbe73af7213399430890f86c63a5674ab"
- integrity sha512-QW8HiM1shhT2GuzkvklfjcKDiWFXHOeFCIA/huJPwHsslwcydgk7X+z2zXpEijP98UCY7HbubZt5J2Zgvf0CaQ==
+ version "4.23.1"
+ resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.23.1.tgz#ce4af0534b3d37db5c1a4ca98b9080f985041e96"
+ integrity sha512-TUfofFo/KsK/bWZ9TWQ5O26tsWW4Uhmt8IYklbnUa70udB6P2wA7w7o4PY4muaEPBQaAX+CEnmmIA41NVHtPVw==
dependencies:
- caniuse-lite "^1.0.30001587"
- electron-to-chromium "^1.4.668"
+ caniuse-lite "^1.0.30001629"
+ electron-to-chromium "^1.4.796"
node-releases "^2.0.14"
- update-browserslist-db "^1.0.13"
+ update-browserslist-db "^1.0.16"
bs-logger@0.x:
version "0.2.6"
@@ -2197,9 +2176,9 @@ bundle-name@^4.1.0:
run-applescript "^7.0.0"
bundle-require@^4.0.0:
- version "4.1.0"
- resolved "https://registry.yarnpkg.com/bundle-require/-/bundle-require-4.1.0.tgz#3d5fcd19d5160d4cbac5e95ed5a394d1ecd40ce6"
- integrity sha512-FeArRFM+ziGkRViKRnSTbHZc35dgmR9yNog05Kn0+ItI59pOAISGvnnIwW1WgFZQW59IxD9QpJnUPkdIPfZuXg==
+ version "4.2.1"
+ resolved "https://registry.yarnpkg.com/bundle-require/-/bundle-require-4.2.1.tgz#4c450a5807381d20ade987bde8ac391544257919"
+ integrity sha512-7Q/6vkyYAwOmQNRw75x+4yRtZCZJXUDmHHlFdkiV0wgv/reNjtJwpu1jPJ0w2kbEpIM0uoKI3S4/f39dU7AjSA==
dependencies:
load-tsconfig "^0.2.3"
@@ -2281,12 +2260,12 @@ camelcase@^7.0.1:
resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-7.0.1.tgz#f02e50af9fd7782bc8b88a3558c32fd3a388f048"
integrity sha512-xlx1yCK2Oc1APsPXDL2LdlNP6+uu8OCDdhOBSVT279M/S+y75O30C2VuD8T2ogdePBBl7PfPF4504tnLgX3zfw==
-caniuse-lite@^1.0.30001587:
- version "1.0.30001618"
- resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001618.tgz#fad74fa006aef0f01e8e5c0a5540c74d8d36ec6f"
- integrity sha512-p407+D1tIkDvsEAPS22lJxLQQaG8OTBEqo0KhzfABGk0TU4juBNDSfH0hyAp/HRyx+M8L17z/ltyhxh27FTfQg==
+caniuse-lite@^1.0.30001629:
+ version "1.0.30001639"
+ resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001639.tgz#972b3a6adeacdd8f46af5fc7f771e9639f6c1521"
+ integrity sha512-eFHflNTBIlFwP2AIKaYuBQN/apnUoKNhBdza8ZnW/h2di4LCZ4xFqYlxUxo+LQ76KFI1PGcC1QDxMbxTZpSCAg==
-chalk@5.3.0, chalk@^5.2.0, chalk@^5.3.0:
+chalk@5.3.0, chalk@^5.2.0, chalk@^5.3.0, chalk@~5.3.0:
version "5.3.0"
resolved "https://registry.yarnpkg.com/chalk/-/chalk-5.3.0.tgz#67c20a7ebef70e7f3970a01f90fa210cb6860385"
integrity sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==
@@ -2392,6 +2371,14 @@ cli-spinners@^2.5.0, cli-spinners@^2.9.2:
resolved "https://registry.yarnpkg.com/cli-spinners/-/cli-spinners-2.9.2.tgz#1773a8f4b9c4d6ac31563df53b3fc1d79462fe41"
integrity sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg==
+cli-truncate@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/cli-truncate/-/cli-truncate-4.0.0.tgz#6cc28a2924fee9e25ce91e973db56c7066e6172a"
+ integrity sha512-nPdaFdQ0h/GEigbPClz11D0v/ZJEwxmeVZGeMo3Z5StPtUTkA9o1lD6QwoirYiSDzbcwn2XcjwmCp68W1IS4TA==
+ dependencies:
+ slice-ansi "^5.0.0"
+ string-width "^7.0.0"
+
cli-width@^4.1.0:
version "4.1.0"
resolved "https://registry.yarnpkg.com/cli-width/-/cli-width-4.1.0.tgz#42daac41d3c254ef38ad8ac037672130173691c5"
@@ -2450,11 +2437,21 @@ color-support@^1.1.3:
resolved "https://registry.yarnpkg.com/color-support/-/color-support-1.1.3.tgz#93834379a1cc9a0c61f82f52f0d04322251bd5a2"
integrity sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==
+colorette@^2.0.20:
+ version "2.0.20"
+ resolved "https://registry.yarnpkg.com/colorette/-/colorette-2.0.20.tgz#9eb793e6833067f7235902fcd3b09917a000a95a"
+ integrity sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==
+
commander@^4.0.0:
version "4.1.1"
resolved "https://registry.yarnpkg.com/commander/-/commander-4.1.1.tgz#9fd602bd936294e9e9ef46a3f4d6964044b18068"
integrity sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==
+commander@~12.1.0:
+ version "12.1.0"
+ resolved "https://registry.yarnpkg.com/commander/-/commander-12.1.0.tgz#01423b36f501259fdaac4d0e4d60c96c991585d3"
+ integrity sha512-Vw8qHK3bZM9y/P10u3Vib8o/DdkvA2OtPtZvD871QKjy74Wj1WSKFILMPRPSdUSx5RFK1arlJzEtA4PkFgnbuA==
+
compare-func@^2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/compare-func/-/compare-func-2.0.0.tgz#fb65e75edbddfd2e568554e8b5b05fff7a51fcb3"
@@ -2741,10 +2738,10 @@ data-view-byte-offset@^1.0.0:
es-errors "^1.3.0"
is-data-view "^1.0.1"
-debug@4, debug@^4.1.0, debug@^4.1.1, debug@^4.3.1, debug@^4.3.2, debug@^4.3.3, debug@^4.3.4:
- version "4.3.4"
- resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865"
- integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==
+debug@4, debug@^4.1.0, debug@^4.1.1, debug@^4.3.1, debug@^4.3.2, debug@^4.3.3, debug@^4.3.4, debug@~4.3.4:
+ 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"
@@ -2913,10 +2910,10 @@ eastasianwidth@^0.2.0:
resolved "https://registry.yarnpkg.com/eastasianwidth/-/eastasianwidth-0.2.0.tgz#696ce2ec0aa0e6ea93a397ffcf24aa7840c827cb"
integrity sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==
-electron-to-chromium@^1.4.668:
- version "1.4.770"
- resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.770.tgz#a26df8541a7fd92d938a2b42c70ba2502d0e9c62"
- integrity sha512-ONwOsDiVvV07CMsyH4+dEaZ9L79HMH/ODHnDS3GkIhgNqdDHJN2C18kFb0fBj0RXpQywsPJl6k2Pqg1IY4r1ig==
+electron-to-chromium@^1.4.796:
+ version "1.4.816"
+ resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.816.tgz#3624649d1e7fde5cdbadf59d31a524245d8ee85f"
+ integrity sha512-EKH5X5oqC6hLmiS7/vYtZHZFTNdhsYG5NVPRN6Yn0kQHNBlT59+xSM8HBy66P5fxWpKgZbPqb+diC64ng295Jw==
elliptic@^6.5.4:
version "6.5.5"
@@ -3032,11 +3029,6 @@ es-abstract@^1.22.1, es-abstract@^1.22.3, es-abstract@^1.23.0, es-abstract@^1.23
unbox-primitive "^1.0.2"
which-typed-array "^1.1.15"
-es-array-method-boxes-properly@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/es-array-method-boxes-properly/-/es-array-method-boxes-properly-1.0.0.tgz#873f3e84418de4ee19c5be752990b2e44718d09e"
- integrity sha512-wd6JXUmyHmt8T5a2xreUwKcGPq6f1f+WwIJkijUqiGcJz1qqnZgP6XIK+QyIWU5lT7imeNxUll48bziG+TSYcA==
-
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"
@@ -3049,21 +3041,6 @@ es-errors@^1.2.1, es-errors@^1.3.0:
resolved "https://registry.yarnpkg.com/es-errors/-/es-errors-1.3.0.tgz#05f75a25dab98e4fb1dcd5e1472c0546d5057c8f"
integrity sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==
-es-get-iterator@^1.0.2:
- version "1.1.3"
- resolved "https://registry.yarnpkg.com/es-get-iterator/-/es-get-iterator-1.1.3.tgz#3ef87523c5d464d41084b2c3c9c214f1199763d6"
- integrity sha512-sPZmqHBe6JIiTfN5q2pEi//TwxmAFHwj/XEuYjTuse78i8KxaqMTTzxPoFKuzRpDpTJ+0NAbpfenkmH2rePtuw==
- dependencies:
- call-bind "^1.0.2"
- get-intrinsic "^1.1.3"
- has-symbols "^1.0.3"
- is-arguments "^1.1.1"
- is-map "^2.0.2"
- is-set "^2.0.2"
- is-string "^1.0.7"
- isarray "^2.0.5"
- stop-iteration-iterator "^1.0.0"
-
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"
@@ -3160,10 +3137,10 @@ escodegen@^2.1.0:
optionalDependencies:
source-map "~0.6.1"
-eslint-compat-utils@^0.5.0:
- version "0.5.0"
- resolved "https://registry.yarnpkg.com/eslint-compat-utils/-/eslint-compat-utils-0.5.0.tgz#f7b2eb2befec25a370fac76934d3f9189f312a65"
- integrity sha512-dc6Y8tzEcSYZMHa+CMPLi/hyo1FzNeonbhJL7Ol0ccuKQkwopJcJBA9YL/xmMTLU1eKigXo9vj9nALElWYSowg==
+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"
@@ -3197,13 +3174,13 @@ eslint-module-utils@^2.8.0:
debug "^3.2.7"
eslint-plugin-es-x@^7.5.0:
- version "7.6.0"
- resolved "https://registry.yarnpkg.com/eslint-plugin-es-x/-/eslint-plugin-es-x-7.6.0.tgz#ccee7a4556c0f816d1ae88fd0eea21540e8ccd65"
- integrity sha512-I0AmeNgevgaTR7y2lrVCJmGYF0rjoznpDvqV/kIkZSZbZ8Rw3eu4cGlvBBULScfkSOCzqKbff5LR4CNrV7mZHA==
+ 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.6.0"
- eslint-compat-utils "^0.5.0"
+ "@eslint-community/regexpp" "^4.11.0"
+ eslint-compat-utils "^0.5.1"
eslint-plugin-import@^2.29.1:
version "2.29.1"
@@ -3246,9 +3223,9 @@ eslint-plugin-n@^16.6.2:
semver "^7.5.3"
eslint-plugin-promise@^6.1.1:
- version "6.1.1"
- resolved "https://registry.yarnpkg.com/eslint-plugin-promise/-/eslint-plugin-promise-6.1.1.tgz#269a3e2772f62875661220631bd4dafcb4083816"
- integrity sha512-tjqWDwVZQo7UIPMeDReOpUgHCmCiH+ePnVT+5zVapL0uuHnegBUs2smM13CzOs2Xb5+MHMRFTs9v24yjba4Oig==
+ 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"
@@ -3346,14 +3323,14 @@ esutils@^2.0.2:
integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==
ethereum-cryptography@^2.0.0, ethereum-cryptography@^2.1.2:
- version "2.1.3"
- resolved "https://registry.yarnpkg.com/ethereum-cryptography/-/ethereum-cryptography-2.1.3.tgz#1352270ed3b339fe25af5ceeadcf1b9c8e30768a"
- integrity sha512-BlwbIL7/P45W8FGW2r7LGuvoEZ+7PWsniMvQ4p5s2xCyw9tmaDlpfsN9HjAucbF+t/qpVHwZUisgfK24TCW8aA==
+ version "2.2.1"
+ resolved "https://registry.yarnpkg.com/ethereum-cryptography/-/ethereum-cryptography-2.2.1.tgz#58f2810f8e020aecb97de8c8c76147600b0b8ccf"
+ integrity sha512-r/W8lkHSiTLxUxW8Rf3u4HGB0xQweG2RyETjywylKZSzLWoWAijRz8WCuOtJ6wah+avllXBqZuk29HCCvhEIRg==
dependencies:
- "@noble/curves" "1.3.0"
- "@noble/hashes" "1.3.3"
- "@scure/bip32" "1.3.3"
- "@scure/bip39" "1.2.2"
+ "@noble/curves" "1.4.2"
+ "@noble/hashes" "1.4.0"
+ "@scure/bip32" "1.4.0"
+ "@scure/bip39" "1.3.0"
ethers@6.4.0:
version "6.4.0"
@@ -3368,12 +3345,17 @@ ethers@6.4.0:
tslib "2.4.0"
ws "8.5.0"
+eventemitter3@^5.0.1:
+ version "5.0.1"
+ resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-5.0.1.tgz#53f5ffd0a492ac800721bb42c66b841de96423c4"
+ integrity sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==
+
events@^3.3.0:
version "3.3.0"
resolved "https://registry.yarnpkg.com/events/-/events-3.3.0.tgz#31a95ad0a924e2d2c419a813aeb2c4e878ea7400"
integrity sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==
-execa@8.0.1:
+execa@8.0.1, 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==
@@ -3498,10 +3480,10 @@ file-uri-to-path@1.0.0:
resolved "https://registry.yarnpkg.com/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz#553a7b8446ff6f684359c445f1e37a05dacc33dd"
integrity sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==
-fill-range@^7.0.1:
- version "7.0.1"
- resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40"
- integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==
+fill-range@^7.1.1:
+ version "7.1.1"
+ resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.1.1.tgz#44265d3cac07e3ea7dc247516380643754a05292"
+ integrity sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==
dependencies:
to-regex-range "^5.0.1"
@@ -3551,9 +3533,9 @@ for-each@^0.3.3:
is-callable "^1.1.3"
foreground-child@^3.1.0:
- version "3.1.1"
- resolved "https://registry.yarnpkg.com/foreground-child/-/foreground-child-3.1.1.tgz#1d173e776d75d2772fed08efe4a0de1ea1b12d0d"
- integrity sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg==
+ version "3.2.1"
+ resolved "https://registry.yarnpkg.com/foreground-child/-/foreground-child-3.2.1.tgz#767004ccf3a5b30df39bed90718bab43fe0a59f7"
+ integrity sha512-PXUUyLqrR2XCWICfv6ukppP96sdFwWbNEnfEMt7jNsISjMsvaLNinAHNDYyvkyU+SZG2BTSbT5NjG+vZslfGTA==
dependencies:
cross-spawn "^7.0.0"
signal-exit "^4.0.1"
@@ -3744,15 +3726,16 @@ glob-parent@^6.0.2:
is-glob "^4.0.3"
glob@^10.3.10:
- version "10.3.15"
- resolved "https://registry.yarnpkg.com/glob/-/glob-10.3.15.tgz#e72bc61bc3038c90605f5dd48543dc67aaf3b50d"
- integrity sha512-0c6RlJt1TICLyvJYIApxb8GsXoai0KUP7AxKKAtsYXdgJR1mGEUa7DgwShbdk1nly0PYoZj01xd4hzbq3fsjpw==
+ version "10.4.2"
+ resolved "https://registry.yarnpkg.com/glob/-/glob-10.4.2.tgz#bed6b95dade5c1f80b4434daced233aee76160e5"
+ integrity sha512-GwMlUF6PkPo3Gk21UxkCohOv0PLcIXVtKyLlpEI28R/cO/4eNOdmLk3CMW1wROV/WR/EsZOWAfBbBOqYvs88/w==
dependencies:
foreground-child "^3.1.0"
- jackspeak "^2.3.6"
- minimatch "^9.0.1"
- minipass "^7.0.4"
- path-scurry "^1.11.0"
+ jackspeak "^3.1.2"
+ minimatch "^9.0.4"
+ minipass "^7.1.2"
+ package-json-from-dist "^1.0.0"
+ path-scurry "^1.11.1"
glob@^7.0.0, glob@^7.1.3, glob@^7.1.4:
version "7.2.3"
@@ -3793,10 +3776,10 @@ globalthis@^1.0.3:
define-properties "^1.2.1"
gopd "^1.0.1"
-globby@14.0.1:
- version "14.0.1"
- resolved "https://registry.yarnpkg.com/globby/-/globby-14.0.1.tgz#a1b44841aa7f4c6d8af2bc39951109d77301959b"
- integrity sha512-jOMLD2Z7MAhyG8aJpNOpmziMOP4rPLcc95oQPKXBazW82z+CEgPFBQvEpRUa1KeIMUJo4Wsm+q6uzO/Q/4BksQ==
+globby@14.0.2:
+ version "14.0.2"
+ resolved "https://registry.yarnpkg.com/globby/-/globby-14.0.2.tgz#06554a54ccfe9264e5a9ff8eded46aa1e306482f"
+ integrity sha512-s3Fq41ZVh7vbbe2PN3nrW7yC7U7MFVc5c98/iTl9c2GawNMKx/J648KQRW6WKkuU8GIbbh2IXfIRQjOZnXcTnw==
dependencies:
"@sindresorhus/merge-streams" "^2.1.0"
fast-glob "^3.3.2"
@@ -3874,9 +3857,9 @@ graphemer@^1.4.0:
integrity sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==
graphql@^16.8.1:
- version "16.8.1"
- resolved "https://registry.yarnpkg.com/graphql/-/graphql-16.8.1.tgz#1930a965bef1170603702acdb68aedd3f3cf6f07"
- integrity sha512-59LZHPdGZVh695Ud9lRzPBVTtlX9ZCV150Er2W43ro37wVof0ctenSaskPPjN7lVTIN8mSZt8PHUNKZuNQUuxw==
+ version "16.9.0"
+ resolved "https://registry.yarnpkg.com/graphql/-/graphql-16.9.0.tgz#1c310e63f16a49ce1fbb230bd0a000e99f6f115f"
+ integrity sha512-GGTKBX4SD7Wdb8mqeDLni2oaRGYQWjWHGKPQ24ZMnUtKfcsVoiv4uX8+LJr1K6U5VW2Lu1BwJnj7uiori0YtRw==
handlebars@^4.7.7:
version "4.7.8"
@@ -4018,10 +4001,10 @@ https-proxy-agent@^5.0.0:
agent-base "6"
debug "4"
-https-proxy-agent@^7.0.2, https-proxy-agent@^7.0.3:
- version "7.0.4"
- resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-7.0.4.tgz#8e97b841a029ad8ddc8731f26595bad868cb4168"
- integrity sha512-wlwpilI7YdjSkWaQ/7omYBMTliDcmCN8OLihO6I9B86g06lMyAoqgoDpV0XqoaPOKj+0DIdAvnsWfyAAhmimcg==
+https-proxy-agent@^7.0.3, https-proxy-agent@^7.0.5:
+ version "7.0.5"
+ resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-7.0.5.tgz#9e8b5013873299e11fab6fd548405da2d6c602b2"
+ integrity sha512-1e4Wqeblerz+tMKPIq2EMGiiWW1dIjZOksyHWSUm1rmuvw/how9hBHZ38lAGj5ID4Ik6EdkOw7NmWPy6LAwalw==
dependencies:
agent-base "^7.0.2"
debug "4"
@@ -4043,6 +4026,11 @@ humanize-ms@^1.2.1:
dependencies:
ms "^2.0.0"
+husky@^9.0.11:
+ version "9.0.11"
+ resolved "https://registry.yarnpkg.com/husky/-/husky-9.0.11.tgz#fc91df4c756050de41b3e478b2158b87c1e79af9"
+ integrity sha512-AB6lFlbwwyIqMdHYhwPe+kjOC3Oc5P3nThEoW/AaO2BX3vJDjWPFxYLxokUZOo6RNX20He3AaT8sESs9NJcmEw==
+
iconv-lite@^0.4.24:
version "0.4.24"
resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b"
@@ -4126,19 +4114,15 @@ ini@^1.3.4, ini@~1.3.0:
resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.8.tgz#a29da425b48806f34767a4efce397269af28432c"
integrity sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==
-inquirer@9.2.19:
- version "9.2.19"
- resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-9.2.19.tgz#e142ebc111b6328a21eb84d8e7dd226ff824239e"
- integrity sha512-WpxOT71HGsFya6/mj5PUue0sWwbpbiPfAR+332zLj/siB0QA1PZM8v3GepegFV1Op189UxHUCF6y8AySdtOMVA==
+inquirer@9.3.2:
+ version "9.3.2"
+ resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-9.3.2.tgz#9bc5ced19f572e848044baa05094a498f1e448c6"
+ integrity sha512-+ynEbhWKhyomnaX0n2aLIMSkgSlGB5RrWbNXnEqj6mdaIydu6y40MdBjL38SAB0JcdmOaIaMua1azdjLEr3sdw==
dependencies:
- "@inquirer/figures" "^1.0.1"
- "@ljharb/through" "^2.3.13"
+ "@inquirer/figures" "^1.0.3"
ansi-escapes "^4.3.2"
- chalk "^5.3.0"
- cli-cursor "^3.1.0"
cli-width "^4.1.0"
external-editor "^3.1.0"
- lodash "^4.17.21"
mute-stream "1.0.0"
ora "^5.4.1"
run-async "^3.0.0"
@@ -4146,8 +4130,9 @@ inquirer@9.2.19:
string-width "^4.2.3"
strip-ansi "^6.0.1"
wrap-ansi "^6.2.0"
+ yoctocolors-cjs "^2.1.1"
-internal-slot@^1.0.4, internal-slot@^1.0.7:
+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==
@@ -4182,7 +4167,7 @@ ip6addr@^0.2.3:
assert-plus "^1.0.0"
jsprim "^2.0.2"
-is-arguments@^1.0.4, is-arguments@^1.1.1:
+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==
@@ -4244,12 +4229,12 @@ is-ci@3.0.1:
dependencies:
ci-info "^3.2.0"
-is-core-module@^2.12.1, is-core-module@^2.13.0, is-core-module@^2.13.1, is-core-module@^2.8.1:
- version "2.13.1"
- resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.13.1.tgz#ad0d7532c6fea9da1ebdc82742d74525c6273384"
- integrity sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==
+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.0"
+ hasown "^2.0.2"
is-data-view@^1.0.1:
version "1.0.1"
@@ -4280,6 +4265,18 @@ is-fullwidth-code-point@^3.0.0:
resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d"
integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==
+is-fullwidth-code-point@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-4.0.0.tgz#fae3167c729e7463f8461ce512b080a49268aa88"
+ integrity sha512-O4L094N2/dZ7xqVdrXhh9r1KODPJpFms8B5sGdJLPy664AgvXsreZUyCQQNItZRDlYug4xStLjNp/sz3HvBowQ==
+
+is-fullwidth-code-point@^5.0.0:
+ version "5.0.0"
+ resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-5.0.0.tgz#9609efced7c2f97da7b60145ef481c787c7ba704"
+ integrity sha512-OVa3u9kkBbw7b8Xw5F9P+D/T9X+Z4+JruYVNapTjPYZYUznQ5YfWeFkOj606XYYW8yugTfC8Pj0hYqvi4ryAhA==
+ dependencies:
+ get-east-asian-width "^1.0.0"
+
is-generator-fn@^2.0.0:
version "2.1.0"
resolved "https://registry.yarnpkg.com/is-generator-fn/-/is-generator-fn-2.1.0.tgz#7d140adc389aaf3011a8f2a2a4cfa6faadffb118"
@@ -4341,11 +4338,6 @@ is-lambda@^1.0.1:
resolved "https://registry.yarnpkg.com/is-lambda/-/is-lambda-1.0.1.tgz#3d9877899e6a53efc0160504cde15f82e6f061d5"
integrity sha512-z7CMFGNrENq5iFB9Bqo64Xk6Y9sg+epq1myIcdHaGnbMTYOxvzsEtdYqQUylB7LxfkvgrrjP32T6Ywciio9UIQ==
-is-map@^2.0.2:
- version "2.0.3"
- resolved "https://registry.yarnpkg.com/is-map/-/is-map-2.0.3.tgz#ede96b7fe1e270b3c4465e3a465658764926d62e"
- integrity sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw==
-
is-nan@^1.3.2:
version "1.3.2"
resolved "https://registry.yarnpkg.com/is-nan/-/is-nan-1.3.2.tgz#043a54adea31748b55b6cd4e09aadafa69bd9e1d"
@@ -4399,11 +4391,6 @@ is-regex@^1.1.4:
call-bind "^1.0.2"
has-tostringtag "^1.0.0"
-is-set@^2.0.2:
- version "2.0.3"
- resolved "https://registry.yarnpkg.com/is-set/-/is-set-2.0.3.tgz#8ab209ea424608141372ded6e0cb200ef1d9d01d"
- integrity sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg==
-
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"
@@ -4516,10 +4503,10 @@ iso-random-stream@^2.0.0:
events "^3.3.0"
readable-stream "^3.4.0"
-issue-parser@7.0.0:
- version "7.0.0"
- resolved "https://registry.yarnpkg.com/issue-parser/-/issue-parser-7.0.0.tgz#27b832c5f5967da897e08ca1949d188e98873b1a"
- integrity sha512-jgAw78HO3gs9UrKqJNQvfDj9Ouy8Mhu40fbEJ8yXff4MW8+/Fcn9iFjyWUQ6SKbX8ipPk3X5A3AyfYHRu6uVLw==
+issue-parser@7.0.1:
+ version "7.0.1"
+ resolved "https://registry.yarnpkg.com/issue-parser/-/issue-parser-7.0.1.tgz#8a053e5a4952c75bb216204e454b4fc7d4cc9637"
+ integrity sha512-3YZcUUR2Wt1WsapF+S/WiA2WmlW0cWAoPccMqne7AxEBhCdFeTPjfv/Axb8V2gyCgY3nRw+ksZ3xSUX+R47iAg==
dependencies:
lodash.capitalize "^4.2.1"
lodash.escaperegexp "^4.1.2"
@@ -4569,23 +4556,10 @@ istanbul-reports@^3.1.3:
html-escaper "^2.0.0"
istanbul-lib-report "^3.0.0"
-iterate-iterator@^1.0.1:
- version "1.0.2"
- resolved "https://registry.yarnpkg.com/iterate-iterator/-/iterate-iterator-1.0.2.tgz#551b804c9eaa15b847ea6a7cdc2f5bf1ec150f91"
- integrity sha512-t91HubM4ZDQ70M9wqp+pcNpu8OyJ9UAtXntT/Bcsvp5tZMnz9vRa+IunKXeI8AnfZMTv0jNuVEmGeLSMjVvfPw==
-
-iterate-value@^1.0.2:
- version "1.0.2"
- resolved "https://registry.yarnpkg.com/iterate-value/-/iterate-value-1.0.2.tgz#935115bd37d006a52046535ebc8d07e9c9337f57"
- integrity sha512-A6fMAio4D2ot2r/TYzr4yUWrmwNdsN5xL7+HUiyACE4DXm+q8HtPcnFTp+NnW3k4N05tZ7FVYFFb2CR13NxyHQ==
- dependencies:
- es-get-iterator "^1.0.2"
- iterate-iterator "^1.0.1"
-
-jackspeak@^2.3.6:
- version "2.3.6"
- resolved "https://registry.yarnpkg.com/jackspeak/-/jackspeak-2.3.6.tgz#647ecc472238aee4b06ac0e461acc21a8c505ca8"
- integrity sha512-N3yCS/NegsOBokc8GAdM8UcmfsKiSS8cipheD/nivzr700H+nsMOxJjQnvwOcRYVuFkdH0wGUvW2WbXGmrZGbQ==
+jackspeak@^3.1.2:
+ version "3.4.0"
+ resolved "https://registry.yarnpkg.com/jackspeak/-/jackspeak-3.4.0.tgz#a75763ff36ad778ede6a156d8ee8b124de445b4a"
+ integrity sha512-JVYhQnN59LVPFCEcVa2C3CrEKYacvjRfqIQl+h8oi91aLYQVWRYbxjPcv1bUiUy/kLmQaANrYfNMCO3kuEDHfw==
dependencies:
"@isaacs/cliui" "^8.0.2"
optionalDependencies:
@@ -5047,9 +5021,9 @@ json5@^2.2.1, json5@^2.2.3:
integrity sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==
jsonc-parser@^3.2.0:
- version "3.2.1"
- resolved "https://registry.yarnpkg.com/jsonc-parser/-/jsonc-parser-3.2.1.tgz#031904571ccf929d7670ee8c547545081cb37f1a"
- integrity sha512-AilxAyFOAcK5wA1+LeaySVBrHsGQvUFCDWXKpZjzaL0PqW+xfBOttn8GNtWKFWqneyMZj41MWF9Kl6iPWLwgOA==
+ version "3.3.1"
+ resolved "https://registry.yarnpkg.com/jsonc-parser/-/jsonc-parser-3.3.1.tgz#f2a524b4f7fd11e3d791e559977ad60b98b798b4"
+ integrity sha512-HUgH65KyejrUFPvHFPbqOY0rsFip3Bo5wb4ngvdi1EpCYWUQDC5V+Y7mZws+DLkr4M//zQJoanu1SP+87Dv1oQ==
jsonfile@^6.0.1:
version "6.1.0"
@@ -5153,6 +5127,11 @@ lilconfig@^2.0.5:
resolved "https://registry.yarnpkg.com/lilconfig/-/lilconfig-2.1.0.tgz#78e23ac89ebb7e1bfbf25b18043de756548e7f52"
integrity sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==
+lilconfig@~3.1.1:
+ version "3.1.2"
+ resolved "https://registry.yarnpkg.com/lilconfig/-/lilconfig-3.1.2.tgz#e4a7c3cb549e3a606c8dcc32e5ae1005e62c05cb"
+ integrity sha512-eop+wDAvpItUys0FWkHIKeC9ybYrTGbU41U5K7+bttZZeohvnY7M9dZ5kB21GNWiFT2q1OoPTvncPCgSOVO5ow==
+
lines-and-columns@^1.1.6:
version "1.2.4"
resolved "https://registry.yarnpkg.com/lines-and-columns/-/lines-and-columns-1.2.4.tgz#eca284f75d2965079309dc0ad9255abb2ebc1632"
@@ -5163,6 +5142,34 @@ lines-and-columns@^2.0.3:
resolved "https://registry.yarnpkg.com/lines-and-columns/-/lines-and-columns-2.0.4.tgz#d00318855905d2660d8c0822e3f5a4715855fc42"
integrity sha512-wM1+Z03eypVAVUCE7QdSqpVIvelbOakn1M0bPDoA4SGWPx3sNDVUiMo3L6To6WWGClB7VyXnhQ4Sn7gxiJbE6A==
+lint-staged@^15.2.2:
+ version "15.2.7"
+ resolved "https://registry.yarnpkg.com/lint-staged/-/lint-staged-15.2.7.tgz#97867e29ed632820c0fb90be06cd9ed384025649"
+ integrity sha512-+FdVbbCZ+yoh7E/RosSdqKJyUM2OEjTciH0TFNkawKgvFp1zbGlEC39RADg+xKBG1R4mhoH2j85myBQZ5wR+lw==
+ dependencies:
+ chalk "~5.3.0"
+ commander "~12.1.0"
+ debug "~4.3.4"
+ execa "~8.0.1"
+ lilconfig "~3.1.1"
+ listr2 "~8.2.1"
+ micromatch "~4.0.7"
+ pidtree "~0.6.0"
+ string-argv "~0.3.2"
+ yaml "~2.4.2"
+
+listr2@~8.2.1:
+ version "8.2.3"
+ resolved "https://registry.yarnpkg.com/listr2/-/listr2-8.2.3.tgz#c494bb89b34329cf900e4e0ae8aeef9081d7d7a5"
+ integrity sha512-Lllokma2mtoniUOS94CcOErHWAug5iu7HOmDrvWgpw8jyQH2fomgB+7lZS4HWZxytUuQwkGOwe49FvwVaA85Xw==
+ dependencies:
+ cli-truncate "^4.0.0"
+ colorette "^2.0.20"
+ eventemitter3 "^5.0.1"
+ log-update "^6.0.0"
+ rfdc "^1.4.1"
+ wrap-ansi "^9.0.0"
+
load-json-file@^4.0.0:
version "4.0.0"
resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-4.0.0.tgz#2f5f45ab91e33216234fd53adab668eb4ec0993b"
@@ -5244,7 +5251,7 @@ lodash.uniqby@^4.7.0:
resolved "https://registry.yarnpkg.com/lodash.uniqby/-/lodash.uniqby-4.7.0.tgz#d99c07a669e9e6d24e1362dfe266c67616af1302"
integrity sha512-e/zcLx6CSbmaEgFHCA7BnoQKyCtKMxnuWrJygbwPs/AIn+IMKl66L8/s+wBUn5LRw2pZx3bUHibiV1b6aTWIww==
-lodash@4.17.21, lodash@^4.17.21:
+lodash@4.17.21:
version "4.17.21"
resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c"
integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==
@@ -5265,6 +5272,17 @@ log-symbols@^6.0.0:
chalk "^5.3.0"
is-unicode-supported "^1.3.0"
+log-update@^6.0.0:
+ version "6.0.0"
+ resolved "https://registry.yarnpkg.com/log-update/-/log-update-6.0.0.tgz#0ddeb7ac6ad658c944c1de902993fce7c33f5e59"
+ integrity sha512-niTvB4gqvtof056rRIrTZvjNYE4rCUzO6X/X+kYjd7WFxXeJ0NwEFnRxX6ehkvv3jTwrXnNdtAak5XYZuIyPFw==
+ dependencies:
+ ansi-escapes "^6.2.0"
+ cli-cursor "^4.0.0"
+ slice-ansi "^7.0.0"
+ strip-ansi "^7.1.0"
+ wrap-ansi "^9.0.0"
+
long@^4.0.0:
version "4.0.0"
resolved "https://registry.yarnpkg.com/long/-/long-4.0.0.tgz#9a7b71cfb7d361a194ea555241c92f7468d5bf28"
@@ -5276,9 +5294,9 @@ lowercase-keys@^3.0.0:
integrity sha512-ozCC6gdQ+glXOQsveKD0YsDy8DSQFjDTz4zyzEHNV5+JP5D62LmfDZ6o1cycFx9ouG940M5dE8C8CTewdj2YWQ==
lru-cache@^10.0.1, lru-cache@^10.2.0:
- version "10.2.2"
- resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-10.2.2.tgz#48206bc114c1252940c41b25b41af5b545aca878"
- integrity sha512-9hp3Vp2/hFQUiIwKo8XCeFVnrg8Pk3TYNPIR7tJADKi5YfcF7vEaK7avFHTlSy3kOKYaJQaalfEo6YuXdceBOQ==
+ version "10.3.0"
+ resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-10.3.0.tgz#4a4aaf10c84658ab70f79a85a9a3f1e1fb11196b"
+ integrity sha512-CQl19J/g+Hbjbv4Y3mFNNXFEL/5t/KCg8POCuUqd4rMKjGG+j1ybER83hxV58zL+dFI1PTkt3GNFSHRt+d8qEQ==
lru-cache@^5.1.1:
version "5.1.1"
@@ -5380,12 +5398,12 @@ micro-ftch@^0.3.1:
resolved "https://registry.yarnpkg.com/micro-ftch/-/micro-ftch-0.3.1.tgz#6cb83388de4c1f279a034fb0cf96dfc050853c5f"
integrity sha512-/0LLxhzP0tfiR5hcQebtudP56gUurs2CLkGarnCiB/OqEyUFQ6U3paQi/tgLv0hBJYt2rnr9MNpxz4fiiugstg==
-micromatch@^4.0.4:
- version "4.0.5"
- resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.5.tgz#bc8999a7cbbf77cdc89f132f6e467051b49090c6"
- integrity sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==
+micromatch@^4.0.4, micromatch@~4.0.7:
+ version "4.0.7"
+ resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.7.tgz#33e8190d9fe474a9895525f5618eee136d46c2e5"
+ integrity sha512-LPP/3KorzCwBxfeUuZmaR6bG2kdeHSbe0P2tY3FLRU4vYrjYz5hI4QZwV0njUx3jeuKe67YukQ1LSPZBKDqO/Q==
dependencies:
- braces "^3.0.2"
+ braces "^3.0.3"
picomatch "^2.3.1"
mime-db@1.52.0:
@@ -5444,10 +5462,10 @@ minimatch@^3.0.4, minimatch@^3.0.5, minimatch@^3.1.1, minimatch@^3.1.2:
dependencies:
brace-expansion "^1.1.7"
-minimatch@^9.0.1, minimatch@^9.0.3, minimatch@^9.0.4:
- version "9.0.4"
- resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-9.0.4.tgz#8e49c731d1749cbec05050ee5145147b32496a51"
- integrity sha512-KqWh+VchfxcMNRAJjj2tnsSJdNbHsVgnkBhTNrW7AjVo6OvLtxw8zfT9oLw1JSohlFzJ8jCoTgaoXvJ+kHt6fw==
+minimatch@^9.0.3, minimatch@^9.0.4:
+ version "9.0.5"
+ resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-9.0.5.tgz#d74f9dd6b57d83d8e98cfb82133b03978bc929e5"
+ integrity sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==
dependencies:
brace-expansion "^2.0.1"
@@ -5512,10 +5530,10 @@ minipass@^5.0.0:
resolved "https://registry.yarnpkg.com/minipass/-/minipass-5.0.0.tgz#3e9788ffb90b694a5d0ec94479a45b5d8738133d"
integrity sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==
-"minipass@^5.0.0 || ^6.0.2 || ^7.0.0", minipass@^7.0.4:
- version "7.1.1"
- resolved "https://registry.yarnpkg.com/minipass/-/minipass-7.1.1.tgz#f7f85aff59aa22f110b20e27692465cf3bf89481"
- integrity sha512-UZ7eQ+h8ywIRAW1hIEl2AqdwzJucU/Kp59+8kkZeSvafXhZjul247BvIJjEVFVeON6d7lM46XX1HXCduKAS8VA==
+"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==
minizlib@^2.0.0, minizlib@^2.1.1:
version "2.1.2"
@@ -5541,9 +5559,9 @@ ms@^2.0.0, ms@^2.1.1:
integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==
msw@^2.2.1:
- version "2.3.0"
- resolved "https://registry.yarnpkg.com/msw/-/msw-2.3.0.tgz#7d48ab8472a435878f4ee94dfa0efcd2b3c2264b"
- integrity sha512-cDr1q/QTMzaWhY8n9lpGhceY209k29UZtdTgJ3P8Bzne3TSMchX2EM/ldvn4ATLOktpCefCU2gcEgzHc31GTPw==
+ version "2.3.1"
+ resolved "https://registry.yarnpkg.com/msw/-/msw-2.3.1.tgz#bfc73e256ffc2c74ec4381b604abb258df35f32b"
+ integrity sha512-ocgvBCLn/5l3jpl1lssIb3cniuACJLoOfZu01e3n5dbJrpA5PeeWn28jCLgQDNt6d7QT8tF2fYRzm9JoEHtiig==
dependencies:
"@bundled-es-modules/cookie" "^2.0.0"
"@bundled-es-modules/statuses" "^1.0.1"
@@ -5654,9 +5672,9 @@ mz@^2.7.0:
thenify-all "^1.0.0"
nan@^2.14.2:
- version "2.19.0"
- resolved "https://registry.yarnpkg.com/nan/-/nan-2.19.0.tgz#bb58122ad55a6c5bc973303908d5b16cfdd5a8c0"
- integrity sha512-nO1xXxfh/RWNxfd/XPfbIfFk5vgLsAxUR9y5O0cHMJu/AW9U95JLXqthYHjEp+8gQ5p96K9jUp8nbVOxCdRbtw==
+ version "2.20.0"
+ resolved "https://registry.yarnpkg.com/nan/-/nan-2.20.0.tgz#08c5ea813dd54ed16e5bd6505bf42af4f7838ca3"
+ integrity sha512-bk3gXBZDGILuuo/6sKtr0DQmSThYHLtNCdSdXk9YkxD/jK6X2vmCyyXBBxyqZ4XcnzTyYEAThfX3DCEnLf6igw==
native-fetch@^3.0.0:
version "3.0.0"
@@ -5794,12 +5812,11 @@ normalize-package-data@^2.3.2:
validate-npm-package-license "^3.0.1"
normalize-package-data@^6.0.0:
- version "6.0.1"
- resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-6.0.1.tgz#fa69e9452210f0fabf4d79ee08d0c2870c51ed88"
- integrity sha512-6rvCfeRW+OEZagAB4lMLSNuTNYZWLVtKccK79VSTf//yTY5VOCgcpH80O+bZK8Neps7pUnd5G+QlMg1yV/2iZQ==
+ version "6.0.2"
+ resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-6.0.2.tgz#a7bc22167fe24025412bcff0a9651eb768b03506"
+ integrity sha512-V6gygoYb/5EmNI+MEGrWkC+e6+Rr7mTmfHrxDbLzxQogBkgzo76rkok0Am6thgSF7Mv2nLOajAJj5vDJZEFn7g==
dependencies:
hosted-git-info "^7.0.0"
- is-core-module "^2.8.1"
semver "^7.3.5"
validate-npm-package-license "^3.0.4"
@@ -5858,9 +5875,9 @@ object-assign@^4.0.1:
integrity sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==
object-inspect@^1.13.1:
- version "1.13.1"
- resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.13.1.tgz#b96c6109324ccfef6b12216a956ca4dc2ff94bc2"
- integrity sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ==
+ version "1.13.2"
+ resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.13.2.tgz#dea0088467fb991e67af4058147a24824a3043ff"
+ integrity sha512-IRZSRuzJiynemAXPYtPe5BoI/RESNYR7TYm50MC5Mqbd3Jmw5y790sErYw3V6SryFJD64b74qQQs9wn5Bg/k3g==
object-is@^1.1.5:
version "1.1.6"
@@ -6064,20 +6081,20 @@ p-try@^2.0.0:
integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==
pac-proxy-agent@^7.0.1:
- version "7.0.1"
- resolved "https://registry.yarnpkg.com/pac-proxy-agent/-/pac-proxy-agent-7.0.1.tgz#6b9ddc002ec3ff0ba5fdf4a8a21d363bcc612d75"
- integrity sha512-ASV8yU4LLKBAjqIPMbrgtaKIvxQri/yh2OpI+S6hVa9JRkUI3Y3NPFbfngDtY7oFtSMD3w31Xns89mDa3Feo5A==
+ version "7.0.2"
+ resolved "https://registry.yarnpkg.com/pac-proxy-agent/-/pac-proxy-agent-7.0.2.tgz#0fb02496bd9fb8ae7eb11cfd98386daaac442f58"
+ integrity sha512-BFi3vZnO9X5Qt6NRz7ZOaPja3ic0PhlsmCRYLOpN11+mWBCR6XJDqW5RF3j8jm4WGGQZtBA+bTfxYzeKW73eHg==
dependencies:
"@tootallnate/quickjs-emscripten" "^0.23.0"
agent-base "^7.0.2"
debug "^4.3.4"
get-uri "^6.0.1"
http-proxy-agent "^7.0.0"
- https-proxy-agent "^7.0.2"
- pac-resolver "^7.0.0"
- socks-proxy-agent "^8.0.2"
+ https-proxy-agent "^7.0.5"
+ pac-resolver "^7.0.1"
+ socks-proxy-agent "^8.0.4"
-pac-resolver@^7.0.0:
+pac-resolver@^7.0.1:
version "7.0.1"
resolved "https://registry.yarnpkg.com/pac-resolver/-/pac-resolver-7.0.1.tgz#54675558ea368b64d210fd9c92a640b5f3b8abb6"
integrity sha512-5NPgf87AT2STgwa2ntRMr45jTKrYBGkVU36yT0ig/n/GMAa3oPqhZfIQ2kMEimReg0+t9kZViDVZ83qfVUlckg==
@@ -6085,6 +6102,11 @@ pac-resolver@^7.0.0:
degenerator "^5.0.0"
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==
+
package-json@^8.1.0:
version "8.1.1"
resolved "https://registry.yarnpkg.com/package-json/-/package-json-8.1.1.tgz#3e9948e43df40d1e8e78a85485f1070bf8f03dc8"
@@ -6180,7 +6202,7 @@ path-parse@^1.0.7:
resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735"
integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==
-path-scurry@^1.11.0:
+path-scurry@^1.11.1:
version "1.11.1"
resolved "https://registry.yarnpkg.com/path-scurry/-/path-scurry-1.11.1.tgz#7960a668888594a0720b12a911d1a742ab9f11d2"
integrity sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==
@@ -6253,6 +6275,11 @@ pidtree@^0.3.0:
resolved "https://registry.yarnpkg.com/pidtree/-/pidtree-0.3.1.tgz#ef09ac2cc0533df1f3250ccf2c4d366b0d12114a"
integrity sha512-qQbW94hLHEqCg7nhby4yRC7G2+jYHY4Rguc2bjw7Uug4GIJuu1tvf2uHaZv5Q8zdt+WKJ6qK1FOI6amaWUo5FA==
+pidtree@~0.6.0:
+ version "0.6.0"
+ resolved "https://registry.yarnpkg.com/pidtree/-/pidtree-0.6.0.tgz#90ad7b6d42d5841e69e0a2419ef38f8883aa057c"
+ integrity sha512-eG2dWTVw5bzqGRztnHExczNxt5VGsE6OwTeCG3fdUf9KBsZzO3R5OIIIzWR+iZA0NtZ+RDVdaoE2dK1cn6jH4g==
+
pify@^3.0.0:
version "3.0.0"
resolved "https://registry.yarnpkg.com/pify/-/pify-3.0.0.tgz#e5a4acd2c101fdf3d9a4d07f0dbc4db49dd28176"
@@ -6293,6 +6320,11 @@ prelude-ls@^1.2.1:
resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.2.1.tgz#debc6489d7a6e6b0e7611888cec880337d316396"
integrity sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==
+prettier@^3.2.5:
+ version "3.3.2"
+ resolved "https://registry.yarnpkg.com/prettier/-/prettier-3.3.2.tgz#03ff86dc7c835f2d2559ee76876a3914cec4a90a"
+ integrity sha512-rAVeHYMcv8ATV5d508CFdn+8/pHPpXeIid1DdrPwXnaAdH7cqjVbpJaT5eq4yRAFU/lsbwYwSF/n5iNrdJHPQA==
+
pretty-format@^28.0.0, pretty-format@^28.1.3:
version "28.1.3"
resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-28.1.3.tgz#c9fba8cedf99ce50963a11b27d982a9ae90970d5"
@@ -6316,18 +6348,6 @@ promise-retry@^2.0.1:
err-code "^2.0.2"
retry "^0.12.0"
-promise.allsettled@1.0.7:
- version "1.0.7"
- resolved "https://registry.yarnpkg.com/promise.allsettled/-/promise.allsettled-1.0.7.tgz#b9dd51e9cffe496243f5271515652c468865f2d8"
- integrity sha512-hezvKvQQmsFkOdrZfYxUxkyxl8mgFQeT259Ajj9PXdbg9VzBCWrItOev72JyWxkCD5VSSqAeHmlN3tWx4DlmsA==
- dependencies:
- array.prototype.map "^1.0.5"
- call-bind "^1.0.2"
- define-properties "^1.2.0"
- es-abstract "^1.22.1"
- get-intrinsic "^1.2.1"
- iterate-value "^1.0.2"
-
prompts@^2.0.1:
version "2.4.2"
resolved "https://registry.yarnpkg.com/prompts/-/prompts-2.4.2.tgz#7b57e73b3a48029ad10ebd44f74b01722a4cb069"
@@ -6531,22 +6551,22 @@ registry-url@^6.0.0:
rc "1.2.8"
release-it@^17.2.1:
- version "17.2.1"
- resolved "https://registry.yarnpkg.com/release-it/-/release-it-17.2.1.tgz#1d5bbc32023a79a819cf66807485126f19f127fd"
- integrity sha512-zBOpaHyjrXC3g/9rHyQlvuDw9yCn9AGphrlL+t3gWNEhbZKEQ62WNY45JxllcJMNx9orQUxBZ3o7pVCqkeuTbg==
+ version "17.4.1"
+ resolved "https://registry.yarnpkg.com/release-it/-/release-it-17.4.1.tgz#186f700064565afe5ca2265f1589fe7b8d3128ff"
+ integrity sha512-Aa48kKx5qZRVXJ6YCnCJRg6sJiofEX7RErTLmnlFbCE7k1Kg8ayhgJovofuBhCtz3FRdsYnxBKjlh+VAMeazEA==
dependencies:
"@iarna/toml" "2.2.5"
- "@octokit/rest" "20.1.0"
+ "@octokit/rest" "20.1.1"
async-retry "1.3.3"
chalk "5.3.0"
cosmiconfig "9.0.0"
execa "8.0.1"
git-url-parse "14.0.0"
- globby "14.0.1"
+ globby "14.0.2"
got "13.0.0"
- inquirer "9.2.19"
+ inquirer "9.3.2"
is-ci "3.0.1"
- issue-parser "7.0.0"
+ issue-parser "7.0.1"
lodash "4.17.21"
mime-types "2.1.35"
new-github-release-url "2.0.0"
@@ -6554,9 +6574,8 @@ release-it@^17.2.1:
open "10.1.0"
ora "8.0.1"
os-name "5.1.0"
- promise.allsettled "1.0.7"
proxy-agent "6.4.0"
- semver "7.6.0"
+ semver "7.6.2"
shelljs "0.8.5"
update-notifier "7.0.0"
url-join "5.0.0"
@@ -6652,6 +6671,11 @@ reusify@^1.0.4:
resolved "https://registry.yarnpkg.com/reusify/-/reusify-1.0.4.tgz#90da382b1e126efc02146e90845a88db12925d76"
integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==
+rfdc@^1.4.1:
+ version "1.4.1"
+ resolved "https://registry.yarnpkg.com/rfdc/-/rfdc-1.4.1.tgz#778f76c4fb731d93414e8f925fbecf64cce7f6ca"
+ integrity sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA==
+
rimraf@^3.0.0, rimraf@^3.0.2:
version "3.0.2"
resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a"
@@ -6747,14 +6771,7 @@ semver-diff@^4.0.0:
resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.2.tgz#48d55db737c3287cd4835e17fa13feace1c41ef8"
integrity sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==
-semver@7.6.0:
- version "7.6.0"
- resolved "https://registry.yarnpkg.com/semver/-/semver-7.6.0.tgz#1a46a4db4bffcccd97b743b5005c8325f23d4e2d"
- integrity sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==
- dependencies:
- lru-cache "^6.0.0"
-
-semver@7.x, semver@^7.0.0, semver@^7.3.5, semver@^7.3.7, semver@^7.5.2, semver@^7.5.3, semver@^7.5.4, semver@^7.6.0:
+semver@7.6.2, semver@7.x, semver@^7.0.0, semver@^7.3.5, semver@^7.3.7, semver@^7.5.2, 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==
@@ -6881,6 +6898,22 @@ slash@^5.1.0:
resolved "https://registry.yarnpkg.com/slash/-/slash-5.1.0.tgz#be3adddcdf09ac38eebe8dcdc7b1a57a75b095ce"
integrity sha512-ZA6oR3T/pEyuqwMgAKT0/hAv8oAXckzbkmR0UkUosQ+Mc4RxGoJkRmwHgHufaenlyAgE1Mxgpdcrf75y6XcnDg==
+slice-ansi@^5.0.0:
+ version "5.0.0"
+ resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-5.0.0.tgz#b73063c57aa96f9cd881654b15294d95d285c42a"
+ integrity sha512-FC+lgizVPfie0kkhqUScwRu1O/lF6NOgJmlCgK+/LYxDCTk8sGelYaHDhFcDN+Sn3Cv+3VSa4Byeo+IMCzpMgQ==
+ dependencies:
+ ansi-styles "^6.0.0"
+ is-fullwidth-code-point "^4.0.0"
+
+slice-ansi@^7.0.0:
+ version "7.1.0"
+ resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-7.1.0.tgz#cd6b4655e298a8d1bdeb04250a433094b347b9a9"
+ integrity sha512-bSiSngZ/jWeX93BqeIAbImyTbEihizcwNjFoRUIY/T1wWQsfsm2Vw1agPKylXvQTU7iASGdHhyqRlqQzfz+Htg==
+ dependencies:
+ ansi-styles "^6.2.1"
+ is-fullwidth-code-point "^5.0.0"
+
smart-buffer@^4.2.0:
version "4.2.0"
resolved "https://registry.yarnpkg.com/smart-buffer/-/smart-buffer-4.2.0.tgz#6e1d71fa4f18c05f7d0ff216dd16a481d0e8d9ae"
@@ -6895,16 +6928,16 @@ socks-proxy-agent@^6.0.0:
debug "^4.3.3"
socks "^2.6.2"
-socks-proxy-agent@^8.0.2:
- version "8.0.3"
- resolved "https://registry.yarnpkg.com/socks-proxy-agent/-/socks-proxy-agent-8.0.3.tgz#6b2da3d77364fde6292e810b496cb70440b9b89d"
- integrity sha512-VNegTZKhuGq5vSD6XNKlbqWhyt/40CgoEw8XxD6dhnm8Jq9IEa3nIa4HwnM8XOqU0CdB0BwWVXusqiFXfHB3+A==
+socks-proxy-agent@^8.0.2, socks-proxy-agent@^8.0.4:
+ version "8.0.4"
+ resolved "https://registry.yarnpkg.com/socks-proxy-agent/-/socks-proxy-agent-8.0.4.tgz#9071dca17af95f483300316f4b063578fa0db08c"
+ integrity sha512-GNAq/eg8Udq2x0eNiFkr9gRg5bA7PXEWagQdeRX4cPSG+X/8V38v637gim9bjFptMk1QWsCTr0ttrJEiXbNnRw==
dependencies:
agent-base "^7.1.1"
debug "^4.3.4"
- socks "^2.7.1"
+ socks "^2.8.3"
-socks@^2.6.2, socks@^2.7.1:
+socks@^2.6.2, socks@^2.8.3:
version "2.8.3"
resolved "https://registry.yarnpkg.com/socks/-/socks-2.8.3.tgz#1ebd0f09c52ba95a09750afe3f3f9f724a800cb5"
integrity sha512-l5x7VUUWbjVFbafGLxPWkYsHIhEvmF85tbIeFZWc8ZPtoMyybuEhL7Jye/ooC4/d48FgOjSJXgsF/AJPYCW8Zw==
@@ -6954,9 +6987,9 @@ spdx-expression-parse@^3.0.0:
spdx-license-ids "^3.0.0"
spdx-license-ids@^3.0.0:
- version "3.0.17"
- resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.17.tgz#887da8aa73218e51a1d917502d79863161a93f9c"
- integrity sha512-sh8PWc/ftMqAAdFiBu6Fy6JUOYjqDJBJvIhpfDMyHrr0Rbp5liZqd4TjtQ/RgfLjKFZb+LMx5hpml5qOWy0qvg==
+ version "3.0.18"
+ resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.18.tgz#22aa922dcf2f2885a6494a261f2d8b75345d0326"
+ integrity sha512-xxRs31BqRYHwiMzudOrpSiHtZ8i/GeionCBDSilhYRj+9gIcI8wCZTlXZKu9vZIVqViP3dcp9qE5G6AlIaD+TQ==
split2@^4.0.0:
version "4.2.0"
@@ -6997,13 +7030,6 @@ stdin-discarder@^0.2.1:
resolved "https://registry.yarnpkg.com/stdin-discarder/-/stdin-discarder-0.2.2.tgz#390037f44c4ae1a1ae535c5fe38dc3aba8d997be"
integrity sha512-UhDfHmA92YAlNnCfhmq0VeNL5bDbiZGg7sZ2IvPsXubGkiNa9EC+tUTsjBRsYUAz87btI6/1wf4XoVvQ3uRnmQ==
-stop-iteration-iterator@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/stop-iteration-iterator/-/stop-iteration-iterator-1.0.0.tgz#6a60be0b4ee757d1ed5254858ec66b10c49285e4"
- integrity sha512-iCGQj+0l0HOdZ2AEeBADlsRC+vsnDsZsbdSiH1yNSjcfKM7fdpCMfqAL/dwF5BLiw/XhRft/Wax6zQbhq2BcjQ==
- dependencies:
- internal-slot "^1.0.4"
-
strict-event-emitter-types@^2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/strict-event-emitter-types/-/strict-event-emitter-types-2.0.0.tgz#05e15549cb4da1694478a53543e4e2f4abcf277f"
@@ -7014,6 +7040,11 @@ strict-event-emitter@^0.5.1:
resolved "https://registry.yarnpkg.com/strict-event-emitter/-/strict-event-emitter-0.5.1.tgz#1602ece81c51574ca39c6815e09f1a3e8550bd93"
integrity sha512-vMgjE/GGEPEFnhFub6pa4FmJBRBVOLpIII2hvCZ8Kzb7K0hlHo7mQv6xYrBvCL2LtAIBwFUK8wvuJgTVSQ5MFQ==
+string-argv@~0.3.2:
+ version "0.3.2"
+ resolved "https://registry.yarnpkg.com/string-argv/-/string-argv-0.3.2.tgz#2b6d0ef24b656274d957d54e0a4bbf6153dc02b6"
+ integrity sha512-aqD2Q0144Z+/RqG52NeHEkZauTAUWJO8c6yTftGJKO3Tja5tUgIfmIl6kExvhtxSDP7fXB6DvzkfMpCd/F3G+Q==
+
string-length@^4.0.1:
version "4.0.2"
resolved "https://registry.yarnpkg.com/string-length/-/string-length-4.0.2.tgz#a8a8dc7bd5c1a82b9b3c8b87e125f66871b6e57a"
@@ -7041,9 +7072,9 @@ string-width@^5.0.1, string-width@^5.1.2:
strip-ansi "^7.0.1"
string-width@^7.0.0:
- version "7.1.0"
- resolved "https://registry.yarnpkg.com/string-width/-/string-width-7.1.0.tgz#d994252935224729ea3719c49f7206dc9c46550a"
- integrity sha512-SEIJCWiX7Kg4c129n48aDRwLbFb2LJmXXFrWBG4NGaRtMQ3myKPKbwrD1BKqQn74oCoNMBVrfDEr5M9YxCsrkw==
+ version "7.2.0"
+ resolved "https://registry.yarnpkg.com/string-width/-/string-width-7.2.0.tgz#b5bb8e2165ce275d4d43476dd2700ad9091db6dc"
+ integrity sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==
dependencies:
emoji-regex "^10.3.0"
get-east-asian-width "^1.0.0"
@@ -7151,11 +7182,6 @@ sucrase@^3.20.3:
pirates "^4.0.1"
ts-interface-checker "^0.1.9"
-superstruct@^1.0.3:
- version "1.0.4"
- resolved "https://registry.yarnpkg.com/superstruct/-/superstruct-1.0.4.tgz#0adb99a7578bd2f1c526220da6571b2d485d91ca"
- integrity sha512-7JpaAoX2NGyoFlI9NBh66BQXGONc+uE+MRS5i2iOBKuS4e+ccgMDjATgZldkah+33DakBxDHiss9kvUcGAO8UQ==
-
supports-color@^5.3.0:
version "5.5.0"
resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f"
@@ -7329,9 +7355,9 @@ tslib@2.4.0:
integrity sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ==
tslib@^2.0.1, tslib@^2.1.0:
- version "2.6.2"
- resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.6.2.tgz#703ac29425e7b37cd6fd456e92404d46d1f3e4ae"
- integrity sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==
+ version "2.6.3"
+ resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.6.3.tgz#0438f810ad7a9edcde7a241c3d80db693c8cbfe0"
+ integrity sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==
tsup@^6.7.0:
version "6.7.0"
@@ -7396,9 +7422,9 @@ type-fest@^3.8.0:
integrity sha512-tLq3bSNx+xSpwvAJnzrK0Ep5CLNWjvFTOp71URMaAEWBfRb9nnJiBoUe0tF8bI4ZFO3omgBR6NvnbzVUT3Ly4g==
type-fest@^4.2.0, type-fest@^4.9.0:
- version "4.18.2"
- resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-4.18.2.tgz#8d765c42e7280a11f4d04fb77a00dacc417c8b05"
- integrity sha512-+suCYpfJLAe4OXS6+PPXjW3urOS4IoP9waSiLuXfLgqZODKw/aWwASvzqE886wA0kQgGy0mIWyhd87VpqIy6Xg==
+ version "4.21.0"
+ resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-4.21.0.tgz#2eec399d9bda4ac686286314d07c6675fef3fdd8"
+ integrity sha512-ADn2w7hVPcK6w1I0uWnM//y1rLXZhzB9mr0a3OirzclKF1Wp6VzevUmzz/NRAWunOT6E8HrnpGY7xOfc6K57fA==
typed-array-buffer@^1.0.2:
version "1.0.2"
@@ -7457,9 +7483,9 @@ typedarray@^0.0.6:
integrity sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==
typedoc-plugin-markdown@^4.0.0-next.50:
- version "4.0.2"
- resolved "https://registry.yarnpkg.com/typedoc-plugin-markdown/-/typedoc-plugin-markdown-4.0.2.tgz#f8f03779cd65c783a01c367cb7cde773431207c5"
- integrity sha512-4MV3M+0lsmIaXuDBzeqLYemZqwTQDWQow+o8zdT9hC7KFu06GaFo2uUEbkjE6pgZA9hnkOTtzRVd0R9YJWcH8A==
+ version "4.1.1"
+ resolved "https://registry.yarnpkg.com/typedoc-plugin-markdown/-/typedoc-plugin-markdown-4.1.1.tgz#2e3efc9b009819866b0c6ebebe3aab04b28e135c"
+ integrity sha512-ZQv8FXn1TBZAvhWMgOL8hE472rwv1dzSr/KIIUGPmdNXybeS6jmK7d1OwKhorLuGbPDQGl6U97BwfkFTcydAkw==
typedoc@^0.25.7:
version "0.25.13"
@@ -7472,23 +7498,23 @@ typedoc@^0.25.7:
shiki "^0.14.7"
typescript-eslint@^7.1.0:
- version "7.9.0"
- resolved "https://registry.yarnpkg.com/typescript-eslint/-/typescript-eslint-7.9.0.tgz#353312f356ef4ba20105a4e2e736aa8c68f096a2"
- integrity sha512-7iTn9c10teHHCys5Ud/yaJntXZrjt3h2mrx3feJGBOLgQkF3TB1X89Xs3aVQ/GgdXRAXpk2bPTdpRwHP4YkUow==
+ version "7.15.0"
+ resolved "https://registry.yarnpkg.com/typescript-eslint/-/typescript-eslint-7.15.0.tgz#44caca31461cc8afa829c4e5ab11aa9e0f7e175d"
+ integrity sha512-Ta40FhMXBCwHura4X4fncaCVkVcnJ9jnOq5+Lp4lN8F4DzHZtOwZdRvVBiNUGznUDHPwdGnrnwxmUOU2fFQqFA==
dependencies:
- "@typescript-eslint/eslint-plugin" "7.9.0"
- "@typescript-eslint/parser" "7.9.0"
- "@typescript-eslint/utils" "7.9.0"
+ "@typescript-eslint/eslint-plugin" "7.15.0"
+ "@typescript-eslint/parser" "7.15.0"
+ "@typescript-eslint/utils" "7.15.0"
-typescript@^5.3.3:
- version "5.4.5"
- resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.4.5.tgz#42ccef2c571fdbd0f6718b1d1f5e6e5ef006f611"
- integrity sha512-vcI4UpRgg81oIRUFwR0WSIHKt11nJ7SAVlYNIu+QpqeyXP+gpQJy/Z4+F0aGxSE4MqwjyXvW/TzgkLAx2AGHwQ==
+typescript@~5.3.3:
+ version "5.3.3"
+ resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.3.3.tgz#b3ce6ba258e72e6305ba66f5c9b452aaee3ffe37"
+ integrity sha512-pXWcraxM0uxAS+tN0AG/BF2TyqmHO014Z070UsJ+pFvYuRSq8KH8DmWpnbXe0pEPDHXZV3FcAbJkijJ5oNEnWw==
uglify-js@^3.1.4:
- version "3.17.4"
- resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.17.4.tgz#61678cf5fa3f5b7eb789bb345df29afb8257c22c"
- integrity sha512-T9q82TJI9e/C1TAxYvfb16xO120tMVFZrGA3f9/P4424DNu6ypK103y0GPFVa17yotwSyZW5iYXgjYHkGrJW/g==
+ version "3.18.0"
+ resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.18.0.tgz#73b576a7e8fda63d2831e293aeead73e0a270deb"
+ integrity sha512-SyVVbcNBCk0dzr9XL/R/ySrmYf0s372K6/hFklzgcp2lBFyXtw4I7BOdDjlLhE1aVqaI/SHWXWmYdlZxuyF38A==
uint8arrays@1.1.0, uint8arrays@^1.1.0:
version "1.1.0"
@@ -7563,7 +7589,7 @@ universalify@^2.0.0:
resolved "https://registry.yarnpkg.com/universalify/-/universalify-2.0.1.tgz#168efc2180964e6386d061e094df61afe239b18d"
integrity sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==
-update-browserslist-db@^1.0.13:
+update-browserslist-db@^1.0.16:
version "1.0.16"
resolved "https://registry.yarnpkg.com/update-browserslist-db/-/update-browserslist-db-1.0.16.tgz#f6d489ed90fb2f07d67784eb3f53d7891f736356"
integrity sha512-KVbTxlBYlckhF5wgfyZXTWnMn7MMZjMu9XG8bPlliUOP9ThaF4QnhP8qrjrH7DRzHfSk0oQv1wToW+iA5GajEQ==
@@ -7631,9 +7657,9 @@ uuid@^9.0.0, uuid@^9.0.1:
integrity sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==
v8-to-istanbul@^9.0.1:
- version "9.2.0"
- resolved "https://registry.yarnpkg.com/v8-to-istanbul/-/v8-to-istanbul-9.2.0.tgz#2ed7644a245cddd83d4e087b9b33b3e62dfd10ad"
- integrity sha512-/EH/sDgxU2eGxajKdwLCDmQ4FWq+kpi3uCmBGpw1xJtnAxEjlD8j8PEiGWpCIMIs3ciNAgH0d3TTJiUkYzyZjA==
+ version "9.3.0"
+ resolved "https://registry.yarnpkg.com/v8-to-istanbul/-/v8-to-istanbul-9.3.0.tgz#b9572abfa62bd556c16d75fdebc1a411d5ff3175"
+ integrity sha512-kiGUalWN+rgBJ/1OHZsBtU4rXZOfj/7rKQxULKlIzwzQSvMJUUNgPwJEEh7gU6xEVxC0ahoOBvN2YI8GH6FNgA==
dependencies:
"@jridgewell/trace-mapping" "^0.3.12"
"@types/istanbul-lib-coverage" "^2.0.1"
@@ -7830,6 +7856,15 @@ wrap-ansi@^8.1.0:
string-width "^5.0.1"
strip-ansi "^7.0.1"
+wrap-ansi@^9.0.0:
+ version "9.0.0"
+ resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-9.0.0.tgz#1a3dc8b70d85eeb8398ddfb1e4a02cd186e58b3e"
+ integrity sha512-G8ura3S+3Z2G+mkgNRq8dqaFZAuxfsxpBB8OCTGRTCtp+l/v9nbFNmCUP1BZMts3G1142MsZfn6eeUKrr4PD1Q==
+ dependencies:
+ ansi-styles "^6.2.1"
+ string-width "^7.0.0"
+ strip-ansi "^7.1.0"
+
wrappy@1:
version "1.0.2"
resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f"
@@ -7883,6 +7918,11 @@ yaml@^1.10.2:
resolved "https://registry.yarnpkg.com/yaml/-/yaml-1.10.2.tgz#2301c5ffbf12b467de8da2333a459e29e7920e4b"
integrity sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==
+yaml@~2.4.2:
+ version "2.4.5"
+ resolved "https://registry.yarnpkg.com/yaml/-/yaml-2.4.5.tgz#60630b206dd6d84df97003d33fc1ddf6296cca5e"
+ integrity sha512-aBx2bnqDzVOyNKfsysjA2ms5ZlnjSAW2eG3/L5G/CSujfjLJTJsEw1bGw8kCf04KodQWk1pxlGnZ56CRxiawmg==
+
yargs-parser@21.1.1, yargs-parser@^21.0.1, yargs-parser@^21.1.1:
version "21.1.1"
resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-21.1.1.tgz#9096bceebf990d21bb31fa9516e0ede294a77d35"
@@ -7907,6 +7947,11 @@ yocto-queue@^0.1.0:
integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==
yocto-queue@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-1.0.0.tgz#7f816433fb2cbc511ec8bf7d263c3b58a1a3c251"
- integrity sha512-9bnSc/HEW2uRy67wc+T8UwauLuPJVn28jb+GtJY16iiKWyvmYJRXVT4UamsAEGQfPohgr2q4Tq0sQbQlxTfi1g==
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-1.1.1.tgz#fef65ce3ac9f8a32ceac5a634f74e17e5b232110"
+ integrity sha512-b4JR1PFR10y1mKjhHY9LaGo6tmrgjit7hxVIeAmyMw3jegXR4dhYqLaQF5zMXZxY7tLpMyJeLjr1C4rLmkVe8g==
+
+yoctocolors-cjs@^2.1.1:
+ version "2.1.1"
+ resolved "https://registry.yarnpkg.com/yoctocolors-cjs/-/yoctocolors-cjs-2.1.1.tgz#1a096cffaeda2eb725e33b19735681875465c920"
+ integrity sha512-c6T13b6qYcJZvck7QbEFXrFX/Mu2KOjvAGiKHmYMUg96jxNpfP6i+psGW72BOPxOIDUJrORG+Kyu7quMX9CQBQ==