Compare commits

..

No commits in common. "2826a246aca20a111229a733a064ca3eb12f621c" and "48774c321e1912a5a83ff4cbba49c60ef6e2021e" have entirely different histories.

16 changed files with 4772 additions and 9554 deletions

View File

@ -1,43 +1,65 @@
module.exports = { module.exports = {
env: { "env": {
es2021: true, "es2021": true,
node: true, "node": true
}, },
extends: [ "extends": [
'prettier', "eslint:recommended",
'eslint:recommended', "plugin:@typescript-eslint/recommended",
'plugin:@typescript-eslint/recommended', "plugin:import/recommended",
'plugin:import/recommended', "plugin:import/typescript",
'plugin:import/typescript', "prettier",
'plugin:prettier/recommended', "plugin:prettier/recommended",
], ],
overrides: [ "overrides": [
{ {
env: { "env": {
node: true, "node": true
},
files: ['.eslintrc.{js,cjs}'],
parserOptions: {
sourceType: 'script',
},
}, },
"files": [
".eslintrc.{js,cjs}"
], ],
parser: '@typescript-eslint/parser', "parserOptions": {
parserOptions: { "sourceType": "script"
ecmaVersion: 'latest', }
sourceType: 'module', }
],
"parser": "@typescript-eslint/parser",
"parserOptions": {
"ecmaVersion": "latest",
"sourceType": "module"
}, },
plugins: ['@typescript-eslint', 'prettier'], "plugins": [
rules: { "@typescript-eslint",
'prettier/prettier': [ "prettier"
'error', ],
"rules": {
"prettier/prettier": [
"error",
{ {
tabWidth: 4,
singleQuote: true, singleQuote: true,
}, printWidth: 120
}
], ],
'import/order': ['error'], "import/order": ["error"],
'@typescript-eslint/no-unused-vars': ['warn'], /**
'@typescript-eslint/no-unused-expressions': ['off'], "indent": [
}, "error",
}; 2
],
**/
"linebreak-style": [
"error",
"unix"
],
"quotes": [
"error",
"single"
],
"semi": [
"error",
"always"
],
"@typescript-eslint/no-unused-vars": ["warn"]
}
}

6024
dist/cli.js vendored

File diff suppressed because one or more lines are too long

View File

@ -18,7 +18,7 @@ export declare function loadSavedEvents<T extends MinimalEvents>({ name, userDir
name: string; name: string;
userDirectory: string; userDirectory: string;
}): Promise<BaseEvents<T>>; }): Promise<BaseEvents<T>>;
export declare function download({ name, cacheDirectory, }: { export declare function download({ name, cacheDirectory }: {
name: string; name: string;
cacheDirectory: string; cacheDirectory: string;
}): Promise<string>; }): Promise<string>;

View File

@ -15,24 +15,24 @@ export declare class NodeTornadoService extends BaseTornadoService {
nativeCurrency: string; nativeCurrency: string;
treeCache?: TreeCache; treeCache?: TreeCache;
constructor(serviceConstructor: NodeTornadoServiceConstructor); constructor(serviceConstructor: NodeTornadoServiceConstructor);
updateEventProgress({ type, fromBlock, toBlock, count, }: Parameters<BatchEventOnProgress>[0]): void; updateEventProgress({ type, fromBlock, toBlock, count }: Parameters<BatchEventOnProgress>[0]): void;
updateTransactionProgress({ currentIndex, totalIndex, }: Parameters<BatchBlockOnProgress>[0]): void; updateTransactionProgress({ currentIndex, totalIndex }: Parameters<BatchBlockOnProgress>[0]): void;
updateBlockProgress({ currentIndex, totalIndex, }: Parameters<BatchBlockOnProgress>[0]): void; updateBlockProgress({ currentIndex, totalIndex }: Parameters<BatchBlockOnProgress>[0]): void;
updateGraphProgress({ type, fromBlock, toBlock, count, }: Parameters<BatchEventOnProgress>[0]): void; updateGraphProgress({ type, fromBlock, toBlock, count }: Parameters<BatchEventOnProgress>[0]): void;
getEventsFromDB(): Promise<BaseEvents<DepositsEvents | WithdrawalsEvents>>; getEventsFromDB(): Promise<BaseEvents<DepositsEvents | WithdrawalsEvents>>;
getEventsFromCache(): Promise<import("@tornado/core").CachedEvents<DepositsEvents | WithdrawalsEvents>>; getEventsFromCache(): Promise<import("@tornado/core").CachedEvents<DepositsEvents | WithdrawalsEvents>>;
validateEvents<S>({ events, lastBlock, hasNewEvents, }: BaseEvents<DepositsEvents | WithdrawalsEvents> & { validateEvents<S>({ events, lastBlock, hasNewEvents, }: BaseEvents<DepositsEvents | WithdrawalsEvents> & {
hasNewEvents?: boolean; hasNewEvents?: boolean;
}): Promise<S>; }): Promise<S>;
saveEvents({ events, lastBlock, }: BaseEvents<DepositsEvents | WithdrawalsEvents>): Promise<void>; saveEvents({ events, lastBlock }: BaseEvents<DepositsEvents | WithdrawalsEvents>): Promise<void>;
} }
export type NodeEchoServiceConstructor = BaseEchoServiceConstructor & NodeServiceConstructor; export type NodeEchoServiceConstructor = BaseEchoServiceConstructor & NodeServiceConstructor;
export declare class NodeEchoService extends BaseEchoService { export declare class NodeEchoService extends BaseEchoService {
cacheDirectory: string; cacheDirectory: string;
userDirectory: string; userDirectory: string;
constructor(serviceConstructor: NodeEchoServiceConstructor); constructor(serviceConstructor: NodeEchoServiceConstructor);
updateEventProgress({ type, fromBlock, toBlock, count, }: Parameters<BatchEventOnProgress>[0]): void; updateEventProgress({ type, fromBlock, toBlock, count }: Parameters<BatchEventOnProgress>[0]): void;
updateGraphProgress({ type, fromBlock, toBlock, count, }: Parameters<BatchEventOnProgress>[0]): void; updateGraphProgress({ type, fromBlock, toBlock, count }: Parameters<BatchEventOnProgress>[0]): void;
getEventsFromDB(): Promise<BaseEvents<EchoEvents>>; getEventsFromDB(): Promise<BaseEvents<EchoEvents>>;
getEventsFromCache(): Promise<import("@tornado/core").CachedEvents<EchoEvents>>; getEventsFromCache(): Promise<import("@tornado/core").CachedEvents<EchoEvents>>;
saveEvents({ events, lastBlock }: BaseEvents<EchoEvents>): Promise<void>; saveEvents({ events, lastBlock }: BaseEvents<EchoEvents>): Promise<void>;
@ -42,8 +42,8 @@ export declare class NodeEncryptedNotesService extends BaseEncryptedNotesService
cacheDirectory: string; cacheDirectory: string;
userDirectory: string; userDirectory: string;
constructor(serviceConstructor: NodeEncryptedNotesServiceConstructor); constructor(serviceConstructor: NodeEncryptedNotesServiceConstructor);
updateEventProgress({ type, fromBlock, toBlock, count, }: Parameters<BatchEventOnProgress>[0]): void; updateEventProgress({ type, fromBlock, toBlock, count }: Parameters<BatchEventOnProgress>[0]): void;
updateGraphProgress({ type, fromBlock, toBlock, count, }: Parameters<BatchEventOnProgress>[0]): void; updateGraphProgress({ type, fromBlock, toBlock, count }: Parameters<BatchEventOnProgress>[0]): void;
getEventsFromDB(): Promise<BaseEvents<EncryptedNotesEvents>>; getEventsFromDB(): Promise<BaseEvents<EncryptedNotesEvents>>;
getEventsFromCache(): Promise<import("@tornado/core").CachedEvents<EncryptedNotesEvents>>; getEventsFromCache(): Promise<import("@tornado/core").CachedEvents<EncryptedNotesEvents>>;
saveEvents({ events, lastBlock }: BaseEvents<EncryptedNotesEvents>): Promise<void>; saveEvents({ events, lastBlock }: BaseEvents<EncryptedNotesEvents>): Promise<void>;
@ -53,9 +53,9 @@ export declare class NodeGovernanceService extends BaseGovernanceService {
cacheDirectory: string; cacheDirectory: string;
userDirectory: string; userDirectory: string;
constructor(serviceConstructor: NodeGovernanceServiceConstructor); constructor(serviceConstructor: NodeGovernanceServiceConstructor);
updateEventProgress({ type, fromBlock, toBlock, count, }: Parameters<BatchEventOnProgress>[0]): void; updateEventProgress({ type, fromBlock, toBlock, count }: Parameters<BatchEventOnProgress>[0]): void;
updateGraphProgress({ type, fromBlock, toBlock, count, }: Parameters<BatchEventOnProgress>[0]): void; updateGraphProgress({ type, fromBlock, toBlock, count }: Parameters<BatchEventOnProgress>[0]): void;
updateTransactionProgress({ currentIndex, totalIndex, }: Parameters<BatchBlockOnProgress>[0]): void; updateTransactionProgress({ currentIndex, totalIndex }: Parameters<BatchBlockOnProgress>[0]): void;
getEventsFromDB(): Promise<BaseEvents<AllGovernanceEvents>>; getEventsFromDB(): Promise<BaseEvents<AllGovernanceEvents>>;
getEventsFromCache(): Promise<import("@tornado/core").CachedEvents<AllGovernanceEvents>>; getEventsFromCache(): Promise<import("@tornado/core").CachedEvents<AllGovernanceEvents>>;
saveEvents({ events, lastBlock }: BaseEvents<AllGovernanceEvents>): Promise<void>; saveEvents({ events, lastBlock }: BaseEvents<AllGovernanceEvents>): Promise<void>;
@ -65,8 +65,8 @@ export declare class NodeRegistryService extends BaseRegistryService {
cacheDirectory: string; cacheDirectory: string;
userDirectory: string; userDirectory: string;
constructor(serviceConstructor: NodeRegistryServiceConstructor); constructor(serviceConstructor: NodeRegistryServiceConstructor);
updateEventProgress({ type, fromBlock, toBlock, count, }: Parameters<BatchEventOnProgress>[0]): void; updateEventProgress({ type, fromBlock, toBlock, count }: Parameters<BatchEventOnProgress>[0]): void;
updateGraphProgress({ type, fromBlock, toBlock, count, }: Parameters<BatchEventOnProgress>[0]): void; updateGraphProgress({ type, fromBlock, toBlock, count }: Parameters<BatchEventOnProgress>[0]): void;
getEventsFromDB(): Promise<BaseEvents<RegistersEvents>>; getEventsFromDB(): Promise<BaseEvents<RegistersEvents>>;
getEventsFromCache(): Promise<import("@tornado/core").CachedEvents<RegistersEvents>>; getEventsFromCache(): Promise<import("@tornado/core").CachedEvents<RegistersEvents>>;
saveEvents({ events, lastBlock }: BaseEvents<RegistersEvents>): Promise<void>; saveEvents({ events, lastBlock }: BaseEvents<RegistersEvents>): Promise<void>;

View File

@ -29,7 +29,7 @@ export declare class TreeCache {
currency: string; currency: string;
userDirectory: string; userDirectory: string;
PARTS_COUNT: number; PARTS_COUNT: number;
constructor({ netId, amount, currency, userDirectory, PARTS_COUNT, }: TreeCacheConstructor); constructor({ netId, amount, currency, userDirectory, PARTS_COUNT }: TreeCacheConstructor);
getInstanceName(): string; getInstanceName(): string;
createTree(events: DepositsEvents[], tree: MerkleTree): Promise<void>; createTree(events: DepositsEvents[], tree: MerkleTree): Promise<void>;
} }

View File

@ -24,13 +24,11 @@
"updateEvents": "ts-node src/cli.ts updateEvents", "updateEvents": "ts-node src/cli.ts updateEvents",
"relayers": "ts-node src/cli.ts relayers", "relayers": "ts-node src/cli.ts relayers",
"createAccount": "ts-node src/cli.ts createAccount", "createAccount": "ts-node src/cli.ts createAccount",
"decrypt": "ts-node src/cli.ts decrypt", "decryptNotes": "ts-node src/cli.ts decryptNotes",
"send": "ts-node src/cli.ts send", "send": "ts-node src/cli.ts send",
"balance": "ts-node src/cli.ts balance", "balance": "ts-node src/cli.ts balance",
"sign": "ts-node src/cli.ts sign", "sign": "ts-node src/cli.ts sign",
"broadcast": "ts-node src/cli.ts broadcast", "broadcast": "ts-node src/cli.ts broadcast"
"proposals": "ts-node src/cli.ts proposals",
"delegates": "ts-node src/cli.ts delegates"
}, },
"author": "", "author": "",
"license": "MIT", "license": "MIT",
@ -53,11 +51,11 @@
"optionalDependencies": {}, "optionalDependencies": {},
"devDependencies": { "devDependencies": {
"@colors/colors": "^1.6.0", "@colors/colors": "^1.6.0",
"@tornado/core": "git+https://git.tornado.ws/tornadocontrib/tornado-core.git#8041bd7f7801fd97a87d8c1945c0251b49032ec3", "@tornado/core": "git+https://git.tornado.ws/tornadocontrib/tornado-core.git#9f4044d11033e99e0a863989864d1578a93de531",
"@typechain/ethers-v6": "^0.5.1", "@typechain/ethers-v6": "^0.5.1",
"@types/figlet": "^1.7.0", "@types/figlet": "^1.7.0",
"@typescript-eslint/eslint-plugin": "^8.11.0", "@typescript-eslint/eslint-plugin": "^8.9.0",
"@typescript-eslint/parser": "^8.11.0", "@typescript-eslint/parser": "^8.9.0",
"bloomfilter.js": "^1.0.2", "bloomfilter.js": "^1.0.2",
"cli-table3": "^0.6.4", "cli-table3": "^0.6.4",
"commander": "^12.0.0", "commander": "^12.0.0",

File diff suppressed because it is too large Load Diff

View File

@ -1,13 +1,7 @@
import path from 'path'; import path from 'path';
import { deflate, constants } from 'zlib'; import { deflate, constants } from 'zlib';
import { stat, mkdir, readFile, writeFile } from 'fs/promises'; import { stat, mkdir, readFile, writeFile } from 'fs/promises';
import { import { BaseEvents, CachedEvents, MinimalEvents, zipAsync, unzipAsync } from '@tornado/core';
BaseEvents,
CachedEvents,
MinimalEvents,
zipAsync,
unzipAsync,
} from '@tornado/core';
export async function existsAsync(fileOrDir: string): Promise<boolean> { export async function existsAsync(fileOrDir: string): Promise<boolean> {
try { try {
@ -105,9 +99,7 @@ export async function loadSavedEvents<T extends MinimalEvents>({
} }
try { try {
const events = JSON.parse( const events = JSON.parse(await readFile(filePath, { encoding: 'utf8' })) as T[];
await readFile(filePath, { encoding: 'utf8' }),
) as T[];
return { return {
events, events,
@ -123,13 +115,7 @@ export async function loadSavedEvents<T extends MinimalEvents>({
} }
} }
export async function download({ export async function download({ name, cacheDirectory }: { name: string; cacheDirectory: string }) {
name,
cacheDirectory,
}: {
name: string;
cacheDirectory: string;
}) {
const fileName = `${name}.json`.toLowerCase(); const fileName = `${name}.json`.toLowerCase();
const zipName = `${fileName}.zip`; const zipName = `${fileName}.zip`;
const zipPath = path.join(cacheDirectory, zipName); const zipPath = path.join(cacheDirectory, zipName);
@ -155,10 +141,7 @@ export async function loadCachedEvents<T extends MinimalEvents>({
if (module) { if (module) {
const events = JSON.parse(module); const events = JSON.parse(module);
const lastBlock = const lastBlock = events && events.length ? events[events.length - 1].blockNumber : deployedBlock;
events && events.length
? events[events.length - 1].blockNumber
: deployedBlock;
return { return {
events, events,

View File

@ -31,16 +31,9 @@ import type {
} from '@tornado/core'; } from '@tornado/core';
import type { MerkleTree } from '@tornado/fixed-merkle-tree'; import type { MerkleTree } from '@tornado/fixed-merkle-tree';
import { TreeCache } from './treeCache'; import { TreeCache } from './treeCache';
import { import { saveUserFile, loadSavedEvents, loadCachedEvents, existsAsync } from './data';
saveUserFile,
loadSavedEvents,
loadCachedEvents,
existsAsync,
} from './data';
async function getEventsFromDB<T extends MinimalEvents>( async function getEventsFromDB<T extends MinimalEvents>(service: BaseEventsService<T> & { userDirectory: string }) {
service: BaseEventsService<T> & { userDirectory: string },
) {
if (!service.userDirectory) { if (!service.userDirectory) {
console.log(`Updating ${service.getInstanceName()} events\n`); console.log(`Updating ${service.getInstanceName()} events\n`);
console.log(`savedEvents count - ${0}`); console.log(`savedEvents count - ${0}`);
@ -64,9 +57,7 @@ async function getEventsFromDB<T extends MinimalEvents>(
return savedEvents; return savedEvents;
} }
async function getEventsFromCache<T extends MinimalEvents>( async function getEventsFromCache<T extends MinimalEvents>(service: BaseEventsService<T> & { cacheDirectory: string }) {
service: BaseEventsService<T> & { cacheDirectory: string },
) {
if (!service.cacheDirectory) { if (!service.cacheDirectory) {
console.log(`cachedEvents count - ${0}`); console.log(`cachedEvents count - ${0}`);
console.log(`cachedEvents lastBlock - ${service.deployedBlock}\n`); console.log(`cachedEvents lastBlock - ${service.deployedBlock}\n`);
@ -136,8 +127,7 @@ export class NodeTornadoService extends BaseTornadoService {
constructor(serviceConstructor: NodeTornadoServiceConstructor) { constructor(serviceConstructor: NodeTornadoServiceConstructor) {
super(serviceConstructor); super(serviceConstructor);
const { cacheDirectory, userDirectory, nativeCurrency, treeCache } = const { cacheDirectory, userDirectory, nativeCurrency, treeCache } = serviceConstructor;
serviceConstructor;
this.cacheDirectory = cacheDirectory; this.cacheDirectory = cacheDirectory;
this.userDirectory = userDirectory; this.userDirectory = userDirectory;
@ -146,12 +136,7 @@ export class NodeTornadoService extends BaseTornadoService {
this.treeCache = treeCache; this.treeCache = treeCache;
} }
updateEventProgress({ updateEventProgress({ type, fromBlock, toBlock, count }: Parameters<BatchEventOnProgress>[0]) {
type,
fromBlock,
toBlock,
count,
}: Parameters<BatchEventOnProgress>[0]) {
if (toBlock) { if (toBlock) {
console.log(`fromBlock - ${fromBlock}`); console.log(`fromBlock - ${fromBlock}`);
console.log(`toBlock - ${toBlock}`); console.log(`toBlock - ${toBlock}`);
@ -159,51 +144,32 @@ export class NodeTornadoService extends BaseTornadoService {
if (count) { if (count) {
console.log(`downloaded ${type} events count - ${count}`); console.log(`downloaded ${type} events count - ${count}`);
console.log('____________________________________________'); console.log('____________________________________________');
console.log( console.log(`Fetched ${type} events from ${fromBlock} to ${toBlock}\n`);
`Fetched ${type} events from ${fromBlock} to ${toBlock}\n`,
);
} }
} }
} }
updateTransactionProgress({ updateTransactionProgress({ currentIndex, totalIndex }: Parameters<BatchBlockOnProgress>[0]) {
currentIndex,
totalIndex,
}: Parameters<BatchBlockOnProgress>[0]) {
if (totalIndex) { if (totalIndex) {
console.log(`Fetched ${currentIndex} deposit txs of ${totalIndex}`); console.log(`Fetched ${currentIndex} deposit txs of ${totalIndex}`);
} }
} }
updateBlockProgress({ updateBlockProgress({ currentIndex, totalIndex }: Parameters<BatchBlockOnProgress>[0]) {
currentIndex,
totalIndex,
}: Parameters<BatchBlockOnProgress>[0]) {
if (totalIndex) { if (totalIndex) {
console.log( console.log(`Fetched ${currentIndex} withdrawal blocks of ${totalIndex}`);
`Fetched ${currentIndex} withdrawal blocks of ${totalIndex}`,
);
} }
} }
updateGraphProgress({ updateGraphProgress({ type, fromBlock, toBlock, count }: Parameters<BatchEventOnProgress>[0]) {
type,
fromBlock,
toBlock,
count,
}: Parameters<BatchEventOnProgress>[0]) {
if (toBlock) { if (toBlock) {
console.log(`fromBlock - ${fromBlock}`); console.log(`fromBlock - ${fromBlock}`);
console.log(`toBlock - ${toBlock}`); console.log(`toBlock - ${toBlock}`);
if (count) { if (count) {
console.log( console.log(`downloaded ${type} events from graph node count - ${count}`);
`downloaded ${type} events from graph node count - ${count}`,
);
console.log('____________________________________________'); console.log('____________________________________________');
console.log( console.log(`Fetched ${type} events from graph node ${fromBlock} to ${toBlock}\n`);
`Fetched ${type} events from graph node ${fromBlock} to ${toBlock}\n`,
);
} }
} }
} }
@ -213,62 +179,35 @@ export class NodeTornadoService extends BaseTornadoService {
} }
async getEventsFromCache() { async getEventsFromCache() {
return await getEventsFromCache<DepositsEvents | WithdrawalsEvents>( return await getEventsFromCache<DepositsEvents | WithdrawalsEvents>(this);
this,
);
} }
async validateEvents<S>({ async validateEvents<S>({
events, events,
lastBlock, lastBlock,
hasNewEvents, hasNewEvents,
}: BaseEvents<DepositsEvents | WithdrawalsEvents> & { }: BaseEvents<DepositsEvents | WithdrawalsEvents> & { hasNewEvents?: boolean }): Promise<S> {
hasNewEvents?: boolean; const tree = await super.validateEvents<S>({ events, lastBlock, hasNewEvents });
}): Promise<S> {
const tree = await super.validateEvents<S>({
events,
lastBlock,
hasNewEvents,
});
if (tree && this.currency === this.nativeCurrency && this.treeCache) { if (tree && this.currency === this.nativeCurrency && this.treeCache) {
const merkleTree = tree as unknown as MerkleTree; const merkleTree = tree as unknown as MerkleTree;
await this.treeCache.createTree( await this.treeCache.createTree(events as DepositsEvents[], merkleTree);
events as DepositsEvents[],
merkleTree,
);
console.log( console.log(`${this.getInstanceName()}: Updated tree cache with root ${toFixedHex(BigInt(merkleTree.root))}\n`);
`${this.getInstanceName()}: Updated tree cache with root ${toFixedHex(BigInt(merkleTree.root))}\n`,
);
} }
return tree; return tree;
} }
async saveEvents({ async saveEvents({ events, lastBlock }: BaseEvents<DepositsEvents | WithdrawalsEvents>) {
events,
lastBlock,
}: BaseEvents<DepositsEvents | WithdrawalsEvents>) {
const eventTable = new Table(); const eventTable = new Table();
eventTable.push( eventTable.push(
[{ colSpan: 2, content: `${this.getType()}s`, hAlign: 'center' }], [{ colSpan: 2, content: `${this.getType()}s`, hAlign: 'center' }],
[ ['Instance', `${this.netId} chain ${this.amount} ${this.currency.toUpperCase()}`],
'Instance', ['Anonymity set', `${events.length} equal user ${this.getType().toLowerCase()}s`],
`${this.netId} chain ${this.amount} ${this.currency.toUpperCase()}`, [{ colSpan: 2, content: `Latest ${this.getType().toLowerCase()}s` }],
],
[
'Anonymity set',
`${events.length} equal user ${this.getType().toLowerCase()}s`,
],
[
{
colSpan: 2,
content: `Latest ${this.getType().toLowerCase()}s`,
},
],
...events ...events
.slice(events.length - 10) .slice(events.length - 10)
.reverse() .reverse()
@ -280,16 +219,11 @@ export class NodeTornadoService extends BaseTornadoService {
}), }),
); );
await saveEvents<DepositsEvents | WithdrawalsEvents>( await saveEvents<DepositsEvents | WithdrawalsEvents>(this, { events, lastBlock }, eventTable);
this,
{ events, lastBlock },
eventTable,
);
} }
} }
export type NodeEchoServiceConstructor = BaseEchoServiceConstructor & export type NodeEchoServiceConstructor = BaseEchoServiceConstructor & NodeServiceConstructor;
NodeServiceConstructor;
export class NodeEchoService extends BaseEchoService { export class NodeEchoService extends BaseEchoService {
cacheDirectory: string; cacheDirectory: string;
@ -304,12 +238,7 @@ export class NodeEchoService extends BaseEchoService {
this.userDirectory = userDirectory; this.userDirectory = userDirectory;
} }
updateEventProgress({ updateEventProgress({ type, fromBlock, toBlock, count }: Parameters<BatchEventOnProgress>[0]) {
type,
fromBlock,
toBlock,
count,
}: Parameters<BatchEventOnProgress>[0]) {
if (toBlock) { if (toBlock) {
console.log(`fromBlock - ${fromBlock}`); console.log(`fromBlock - ${fromBlock}`);
console.log(`toBlock - ${toBlock}`); console.log(`toBlock - ${toBlock}`);
@ -317,31 +246,20 @@ export class NodeEchoService extends BaseEchoService {
if (count) { if (count) {
console.log(`downloaded ${type} events count - ${count}`); console.log(`downloaded ${type} events count - ${count}`);
console.log('____________________________________________'); console.log('____________________________________________');
console.log( console.log(`Fetched ${type} events from ${fromBlock} to ${toBlock}\n`);
`Fetched ${type} events from ${fromBlock} to ${toBlock}\n`,
);
} }
} }
} }
updateGraphProgress({ updateGraphProgress({ type, fromBlock, toBlock, count }: Parameters<BatchEventOnProgress>[0]) {
type,
fromBlock,
toBlock,
count,
}: Parameters<BatchEventOnProgress>[0]) {
if (toBlock) { if (toBlock) {
console.log(`fromBlock - ${fromBlock}`); console.log(`fromBlock - ${fromBlock}`);
console.log(`toBlock - ${toBlock}`); console.log(`toBlock - ${toBlock}`);
if (count) { if (count) {
console.log( console.log(`downloaded ${type} events from graph node count - ${count}`);
`downloaded ${type} events from graph node count - ${count}`,
);
console.log('____________________________________________'); console.log('____________________________________________');
console.log( console.log(`Fetched ${type} events from graph node ${fromBlock} to ${toBlock}\n`);
`Fetched ${type} events from graph node ${fromBlock} to ${toBlock}\n`,
);
} }
} }
} }
@ -376,8 +294,7 @@ export class NodeEchoService extends BaseEchoService {
} }
} }
export type NodeEncryptedNotesServiceConstructor = export type NodeEncryptedNotesServiceConstructor = BaseEncryptedNotesServiceConstructor & NodeServiceConstructor;
BaseEncryptedNotesServiceConstructor & NodeServiceConstructor;
export class NodeEncryptedNotesService extends BaseEncryptedNotesService { export class NodeEncryptedNotesService extends BaseEncryptedNotesService {
cacheDirectory: string; cacheDirectory: string;
@ -392,12 +309,7 @@ export class NodeEncryptedNotesService extends BaseEncryptedNotesService {
this.userDirectory = userDirectory; this.userDirectory = userDirectory;
} }
updateEventProgress({ updateEventProgress({ type, fromBlock, toBlock, count }: Parameters<BatchEventOnProgress>[0]) {
type,
fromBlock,
toBlock,
count,
}: Parameters<BatchEventOnProgress>[0]) {
if (toBlock) { if (toBlock) {
console.log(`fromBlock - ${fromBlock}`); console.log(`fromBlock - ${fromBlock}`);
console.log(`toBlock - ${toBlock}`); console.log(`toBlock - ${toBlock}`);
@ -405,31 +317,20 @@ export class NodeEncryptedNotesService extends BaseEncryptedNotesService {
if (count) { if (count) {
console.log(`downloaded ${type} events count - ${count}`); console.log(`downloaded ${type} events count - ${count}`);
console.log('____________________________________________'); console.log('____________________________________________');
console.log( console.log(`Fetched ${type} events from ${fromBlock} to ${toBlock}\n`);
`Fetched ${type} events from ${fromBlock} to ${toBlock}\n`,
);
} }
} }
} }
updateGraphProgress({ updateGraphProgress({ type, fromBlock, toBlock, count }: Parameters<BatchEventOnProgress>[0]) {
type,
fromBlock,
toBlock,
count,
}: Parameters<BatchEventOnProgress>[0]) {
if (toBlock) { if (toBlock) {
console.log(`fromBlock - ${fromBlock}`); console.log(`fromBlock - ${fromBlock}`);
console.log(`toBlock - ${toBlock}`); console.log(`toBlock - ${toBlock}`);
if (count) { if (count) {
console.log( console.log(`downloaded ${type} events from graph node count - ${count}`);
`downloaded ${type} events from graph node count - ${count}`,
);
console.log('____________________________________________'); console.log('____________________________________________');
console.log( console.log(`Fetched ${type} events from graph node ${fromBlock} to ${toBlock}\n`);
`Fetched ${type} events from graph node ${fromBlock} to ${toBlock}\n`,
);
} }
} }
} }
@ -460,16 +361,11 @@ export class NodeEncryptedNotesService extends BaseEncryptedNotesService {
}), }),
); );
await saveEvents<EncryptedNotesEvents>( await saveEvents<EncryptedNotesEvents>(this, { events, lastBlock }, eventTable);
this,
{ events, lastBlock },
eventTable,
);
} }
} }
export type NodeGovernanceServiceConstructor = export type NodeGovernanceServiceConstructor = BaseGovernanceServiceConstructor & NodeServiceConstructor;
BaseGovernanceServiceConstructor & NodeServiceConstructor;
export class NodeGovernanceService extends BaseGovernanceService { export class NodeGovernanceService extends BaseGovernanceService {
cacheDirectory: string; cacheDirectory: string;
@ -484,12 +380,7 @@ export class NodeGovernanceService extends BaseGovernanceService {
this.userDirectory = userDirectory; this.userDirectory = userDirectory;
} }
updateEventProgress({ updateEventProgress({ type, fromBlock, toBlock, count }: Parameters<BatchEventOnProgress>[0]) {
type,
fromBlock,
toBlock,
count,
}: Parameters<BatchEventOnProgress>[0]) {
if (toBlock) { if (toBlock) {
console.log(`fromBlock - ${fromBlock}`); console.log(`fromBlock - ${fromBlock}`);
console.log(`toBlock - ${toBlock}`); console.log(`toBlock - ${toBlock}`);
@ -497,43 +388,27 @@ export class NodeGovernanceService extends BaseGovernanceService {
if (count) { if (count) {
console.log(`downloaded ${type} events count - ${count}`); console.log(`downloaded ${type} events count - ${count}`);
console.log('____________________________________________'); console.log('____________________________________________');
console.log( console.log(`Fetched ${type} events from ${fromBlock} to ${toBlock}\n`);
`Fetched ${type} events from ${fromBlock} to ${toBlock}\n`,
);
} }
} }
} }
updateGraphProgress({ updateGraphProgress({ type, fromBlock, toBlock, count }: Parameters<BatchEventOnProgress>[0]) {
type,
fromBlock,
toBlock,
count,
}: Parameters<BatchEventOnProgress>[0]) {
if (toBlock) { if (toBlock) {
console.log(`fromBlock - ${fromBlock}`); console.log(`fromBlock - ${fromBlock}`);
console.log(`toBlock - ${toBlock}`); console.log(`toBlock - ${toBlock}`);
if (count) { if (count) {
console.log( console.log(`downloaded ${type} events from graph node count - ${count}`);
`downloaded ${type} events from graph node count - ${count}`,
);
console.log('____________________________________________'); console.log('____________________________________________');
console.log( console.log(`Fetched ${type} events from graph node ${fromBlock} to ${toBlock}\n`);
`Fetched ${type} events from graph node ${fromBlock} to ${toBlock}\n`,
);
} }
} }
} }
updateTransactionProgress({ updateTransactionProgress({ currentIndex, totalIndex }: Parameters<BatchBlockOnProgress>[0]) {
currentIndex,
totalIndex,
}: Parameters<BatchBlockOnProgress>[0]) {
if (totalIndex) { if (totalIndex) {
console.log( console.log(`Fetched ${currentIndex} governance txs of ${totalIndex}`);
`Fetched ${currentIndex} governance txs of ${totalIndex}`,
);
} }
} }
@ -563,16 +438,11 @@ export class NodeGovernanceService extends BaseGovernanceService {
}), }),
); );
await saveEvents<AllGovernanceEvents>( await saveEvents<AllGovernanceEvents>(this, { events, lastBlock }, eventTable);
this,
{ events, lastBlock },
eventTable,
);
} }
} }
export type NodeRegistryServiceConstructor = BaseRegistryServiceConstructor & export type NodeRegistryServiceConstructor = BaseRegistryServiceConstructor & NodeServiceConstructor;
NodeServiceConstructor;
export class NodeRegistryService extends BaseRegistryService { export class NodeRegistryService extends BaseRegistryService {
cacheDirectory: string; cacheDirectory: string;
@ -587,12 +457,7 @@ export class NodeRegistryService extends BaseRegistryService {
this.userDirectory = userDirectory; this.userDirectory = userDirectory;
} }
updateEventProgress({ updateEventProgress({ type, fromBlock, toBlock, count }: Parameters<BatchEventOnProgress>[0]) {
type,
fromBlock,
toBlock,
count,
}: Parameters<BatchEventOnProgress>[0]) {
if (toBlock) { if (toBlock) {
console.log(`fromBlock - ${fromBlock}`); console.log(`fromBlock - ${fromBlock}`);
console.log(`toBlock - ${toBlock}`); console.log(`toBlock - ${toBlock}`);
@ -600,31 +465,20 @@ export class NodeRegistryService extends BaseRegistryService {
if (count) { if (count) {
console.log(`downloaded ${type} events count - ${count}`); console.log(`downloaded ${type} events count - ${count}`);
console.log('____________________________________________'); console.log('____________________________________________');
console.log( console.log(`Fetched ${type} events from ${fromBlock} to ${toBlock}\n`);
`Fetched ${type} events from ${fromBlock} to ${toBlock}\n`,
);
} }
} }
} }
updateGraphProgress({ updateGraphProgress({ type, fromBlock, toBlock, count }: Parameters<BatchEventOnProgress>[0]) {
type,
fromBlock,
toBlock,
count,
}: Parameters<BatchEventOnProgress>[0]) {
if (toBlock) { if (toBlock) {
console.log(`fromBlock - ${fromBlock}`); console.log(`fromBlock - ${fromBlock}`);
console.log(`toBlock - ${toBlock}`); console.log(`toBlock - ${toBlock}`);
if (count) { if (count) {
console.log( console.log(`downloaded ${type} events from graph node count - ${count}`);
`downloaded ${type} events from graph node count - ${count}`,
);
console.log('____________________________________________'); console.log('____________________________________________');
console.log( console.log(`Fetched ${type} events from graph node ${fromBlock} to ${toBlock}\n`);
`Fetched ${type} events from graph node ${fromBlock} to ${toBlock}\n`,
);
} }
} }
} }
@ -655,11 +509,7 @@ export class NodeRegistryService extends BaseRegistryService {
}), }),
); );
await saveEvents<RegistersEvents>( await saveEvents<RegistersEvents>(this, { events, lastBlock }, eventTable);
this,
{ events, lastBlock },
eventTable,
);
} }
async getRelayersFromDB(): Promise<CachedRelayers> { async getRelayersFromDB(): Promise<CachedRelayers> {
@ -674,9 +524,7 @@ export class NodeRegistryService extends BaseRegistryService {
} }
try { try {
const { lastBlock, timestamp, relayers } = JSON.parse( const { lastBlock, timestamp, relayers } = JSON.parse(await readFile(filePath, { encoding: 'utf8' }));
await readFile(filePath, { encoding: 'utf8' }),
);
return { return {
lastBlock, lastBlock,
@ -708,9 +556,7 @@ export class NodeRegistryService extends BaseRegistryService {
} }
try { try {
const { lastBlock, timestamp, relayers } = JSON.parse( const { lastBlock, timestamp, relayers } = JSON.parse(await readFile(filePath, { encoding: 'utf8' }));
await readFile(filePath, { encoding: 'utf8' }),
);
return { return {
lastBlock, lastBlock,
@ -736,12 +582,7 @@ export class NodeRegistryService extends BaseRegistryService {
await saveUserFile({ await saveUserFile({
fileName: 'relayers.json', fileName: 'relayers.json',
userDirectory: this.userDirectory, userDirectory: this.userDirectory,
dataString: dataString: JSON.stringify({ lastBlock, timestamp, relayers }, null, 2) + '\n',
JSON.stringify(
{ lastBlock, timestamp, relayers },
null,
2,
) + '\n',
}); });
} }
} }

View File

@ -17,10 +17,7 @@ export function parseUrl(value?: string): string {
} }
export function parseRelayer(value?: string): string { export function parseRelayer(value?: string): string {
if ( if (!value || !(value.endsWith('.eth') || validateUrl(value, ['http:', 'https:']))) {
!value ||
!(value.endsWith('.eth') || validateUrl(value, ['http:', 'https:']))
) {
throw new InvalidArgumentError('Invalid Relayer ETH address or URL'); throw new InvalidArgumentError('Invalid Relayer ETH address or URL');
} }
return value; return value;

View File

@ -36,13 +36,7 @@ export class TreeCache {
PARTS_COUNT: number; PARTS_COUNT: number;
constructor({ constructor({ netId, amount, currency, userDirectory, PARTS_COUNT = 4 }: TreeCacheConstructor) {
netId,
amount,
currency,
userDirectory,
PARTS_COUNT = 4,
}: TreeCacheConstructor) {
this.netId = netId; this.netId = netId;
this.amount = amount; this.amount = amount;
this.currency = currency; this.currency = currency;

Binary file not shown.

120
yarn.lock
View File

@ -648,10 +648,10 @@
"@metamask/superstruct" "^3.1.0" "@metamask/superstruct" "^3.1.0"
"@metamask/utils" "^9.0.0" "@metamask/utils" "^9.0.0"
"@metamask/eth-sig-util@^8.0.0": "@metamask/eth-sig-util@^7.0.3":
version "8.0.0" version "7.0.3"
resolved "https://registry.yarnpkg.com/@metamask/eth-sig-util/-/eth-sig-util-8.0.0.tgz#6310d93cd1101cab3cc6bc2a1ff526290ed2695b" resolved "https://registry.yarnpkg.com/@metamask/eth-sig-util/-/eth-sig-util-7.0.3.tgz#be9e444fe0b8474c04e2ff42fd983173767f6ac0"
integrity sha512-IwE6aoxUL39IhmsAgE4nk+OZbNo+ThFZRNsUjE1pjdEa4MFpWzm1Rue4zJ5DMy1oUyZBi/aiCLMhdMnjl2bh2Q== integrity sha512-PAtGnOkYvh90k2lEZldq/FK7GTLF6WxE+2bV85PoA3pqlJnmJCAY62tuvxHSwnVngSKlc4mcNvjnUg2eYO6JGg==
dependencies: dependencies:
"@ethereumjs/util" "^8.1.0" "@ethereumjs/util" "^8.1.0"
"@metamask/abi-utils" "^2.0.4" "@metamask/abi-utils" "^2.0.4"
@ -777,20 +777,20 @@
"@noble/hashes" "~1.4.0" "@noble/hashes" "~1.4.0"
"@scure/base" "~1.1.6" "@scure/base" "~1.1.6"
"@tornado/contracts@git+https://git.tornado.ws/tornadocontrib/tornado-contracts.git#1b1d707878c16a3dc60d295299d4f0e7ce6ba831": "@tornado/contracts@git+https://git.tornado.ws/tornadocontrib/tornado-contracts.git#ece511f424dc811c3aec149a4bf0e3731c0598a4":
version "1.0.2" version "1.0.2"
resolved "git+https://git.tornado.ws/tornadocontrib/tornado-contracts.git#1b1d707878c16a3dc60d295299d4f0e7ce6ba831" resolved "git+https://git.tornado.ws/tornadocontrib/tornado-contracts.git#ece511f424dc811c3aec149a4bf0e3731c0598a4"
dependencies: dependencies:
"@openzeppelin/contracts" "5.0.2" "@openzeppelin/contracts" "5.0.2"
"@openzeppelin/contracts-v3" "npm:@openzeppelin/contracts@3.2.0-rc.0" "@openzeppelin/contracts-v3" "npm:@openzeppelin/contracts@3.2.0-rc.0"
ethers "^6.13.4" ethers "^6.13.4"
"@tornado/core@git+https://git.tornado.ws/tornadocontrib/tornado-core.git#8041bd7f7801fd97a87d8c1945c0251b49032ec3": "@tornado/core@git+https://git.tornado.ws/tornadocontrib/tornado-core.git#9f4044d11033e99e0a863989864d1578a93de531":
version "1.0.19" version "1.0.19"
resolved "git+https://git.tornado.ws/tornadocontrib/tornado-core.git#8041bd7f7801fd97a87d8c1945c0251b49032ec3" resolved "git+https://git.tornado.ws/tornadocontrib/tornado-core.git#9f4044d11033e99e0a863989864d1578a93de531"
dependencies: dependencies:
"@metamask/eth-sig-util" "^8.0.0" "@metamask/eth-sig-util" "^7.0.3"
"@tornado/contracts" "git+https://git.tornado.ws/tornadocontrib/tornado-contracts.git#1b1d707878c16a3dc60d295299d4f0e7ce6ba831" "@tornado/contracts" "git+https://git.tornado.ws/tornadocontrib/tornado-contracts.git#ece511f424dc811c3aec149a4bf0e3731c0598a4"
"@tornado/fixed-merkle-tree" "^0.7.3" "@tornado/fixed-merkle-tree" "^0.7.3"
"@tornado/snarkjs" "^0.1.20" "@tornado/snarkjs" "^0.1.20"
"@tornado/websnark" "^0.0.4" "@tornado/websnark" "^0.0.4"
@ -907,62 +907,62 @@
resolved "https://registry.yarnpkg.com/@types/prettier/-/prettier-2.7.3.tgz#3e51a17e291d01d17d3fc61422015a933af7a08f" resolved "https://registry.yarnpkg.com/@types/prettier/-/prettier-2.7.3.tgz#3e51a17e291d01d17d3fc61422015a933af7a08f"
integrity sha512-+68kP9yzs4LMp7VNh8gdzMSPZFL44MLGqiHWvttYJe+6qnuVr4Ek9wSBQoveqY/r+LwjCcU29kNVkidwim+kYA== integrity sha512-+68kP9yzs4LMp7VNh8gdzMSPZFL44MLGqiHWvttYJe+6qnuVr4Ek9wSBQoveqY/r+LwjCcU29kNVkidwim+kYA==
"@typescript-eslint/eslint-plugin@^8.11.0": "@typescript-eslint/eslint-plugin@^8.9.0":
version "8.11.0" version "8.9.0"
resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.11.0.tgz#c3f087d20715fa94310b30666c08b3349e0ab084" resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.9.0.tgz#bf0b25305b0bf014b4b194a6919103d7ac2a7907"
integrity sha512-KhGn2LjW1PJT2A/GfDpiyOfS4a8xHQv2myUagTM5+zsormOmBlYsnQ6pobJ8XxJmh6hnHwa2Mbe3fPrDJoDhbA== integrity sha512-Y1n621OCy4m7/vTXNlCbMVp87zSd7NH0L9cXD8aIpOaNlzeWxIK4+Q19A68gSmTNRZn92UjocVUWDthGxtqHFg==
dependencies: dependencies:
"@eslint-community/regexpp" "^4.10.0" "@eslint-community/regexpp" "^4.10.0"
"@typescript-eslint/scope-manager" "8.11.0" "@typescript-eslint/scope-manager" "8.9.0"
"@typescript-eslint/type-utils" "8.11.0" "@typescript-eslint/type-utils" "8.9.0"
"@typescript-eslint/utils" "8.11.0" "@typescript-eslint/utils" "8.9.0"
"@typescript-eslint/visitor-keys" "8.11.0" "@typescript-eslint/visitor-keys" "8.9.0"
graphemer "^1.4.0" graphemer "^1.4.0"
ignore "^5.3.1" ignore "^5.3.1"
natural-compare "^1.4.0" natural-compare "^1.4.0"
ts-api-utils "^1.3.0" ts-api-utils "^1.3.0"
"@typescript-eslint/parser@^8.11.0": "@typescript-eslint/parser@^8.9.0":
version "8.11.0" version "8.9.0"
resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-8.11.0.tgz#2ad1481388dc1c937f50b2d138c9ca57cc6c5cce" resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-8.9.0.tgz#0cecda6def8aef95d7c7098359c0fda5a362d6ad"
integrity sha512-lmt73NeHdy1Q/2ul295Qy3uninSqi6wQI18XwSpm8w0ZbQXUpjCAWP1Vlv/obudoBiIjJVjlztjQ+d/Md98Yxg== integrity sha512-U+BLn2rqTTHnc4FL3FJjxaXptTxmf9sNftJK62XLz4+GxG3hLHm/SUNaaXP5Y4uTiuYoL5YLy4JBCJe3+t8awQ==
dependencies: dependencies:
"@typescript-eslint/scope-manager" "8.11.0" "@typescript-eslint/scope-manager" "8.9.0"
"@typescript-eslint/types" "8.11.0" "@typescript-eslint/types" "8.9.0"
"@typescript-eslint/typescript-estree" "8.11.0" "@typescript-eslint/typescript-estree" "8.9.0"
"@typescript-eslint/visitor-keys" "8.11.0" "@typescript-eslint/visitor-keys" "8.9.0"
debug "^4.3.4" debug "^4.3.4"
"@typescript-eslint/scope-manager@8.11.0": "@typescript-eslint/scope-manager@8.9.0":
version "8.11.0" version "8.9.0"
resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-8.11.0.tgz#9d399ce624118966732824878bc9a83593a30405" resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-8.9.0.tgz#c98fef0c4a82a484e6a1eb610a55b154d14d46f3"
integrity sha512-Uholz7tWhXmA4r6epo+vaeV7yjdKy5QFCERMjs1kMVsLRKIrSdM6o21W2He9ftp5PP6aWOVpD5zvrvuHZC0bMQ== integrity sha512-bZu9bUud9ym1cabmOYH9S6TnbWRzpklVmwqICeOulTCZ9ue2/pczWzQvt/cGj2r2o1RdKoZbuEMalJJSYw3pHQ==
dependencies: dependencies:
"@typescript-eslint/types" "8.11.0" "@typescript-eslint/types" "8.9.0"
"@typescript-eslint/visitor-keys" "8.11.0" "@typescript-eslint/visitor-keys" "8.9.0"
"@typescript-eslint/type-utils@8.11.0": "@typescript-eslint/type-utils@8.9.0":
version "8.11.0" version "8.9.0"
resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-8.11.0.tgz#b7f9e6120c1ddee8a1a07615646642ad85fc91b5" resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-8.9.0.tgz#aa86da3e4555fe7c8b42ab75e13561c4b5a8dfeb"
integrity sha512-ItiMfJS6pQU0NIKAaybBKkuVzo6IdnAhPFZA/2Mba/uBjuPQPet/8+zh5GtLHwmuFRShZx+8lhIs7/QeDHflOg== integrity sha512-JD+/pCqlKqAk5961vxCluK+clkppHY07IbV3vett97KOV+8C6l+CPEPwpUuiMwgbOz/qrN3Ke4zzjqbT+ls+1Q==
dependencies: dependencies:
"@typescript-eslint/typescript-estree" "8.11.0" "@typescript-eslint/typescript-estree" "8.9.0"
"@typescript-eslint/utils" "8.11.0" "@typescript-eslint/utils" "8.9.0"
debug "^4.3.4" debug "^4.3.4"
ts-api-utils "^1.3.0" ts-api-utils "^1.3.0"
"@typescript-eslint/types@8.11.0": "@typescript-eslint/types@8.9.0":
version "8.11.0" version "8.9.0"
resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-8.11.0.tgz#7c766250502097f49bbc2e651132e6bf489e20b8" resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-8.9.0.tgz#b733af07fb340b32e962c6c63b1062aec2dc0fe6"
integrity sha512-tn6sNMHf6EBAYMvmPUaKaVeYvhUsrE6x+bXQTxjQRp360h1giATU0WvgeEys1spbvb5R+VpNOZ+XJmjD8wOUHw== integrity sha512-SjgkvdYyt1FAPhU9c6FiYCXrldwYYlIQLkuc+LfAhCna6ggp96ACncdtlbn8FmnG72tUkXclrDExOpEYf1nfJQ==
"@typescript-eslint/typescript-estree@8.11.0": "@typescript-eslint/typescript-estree@8.9.0":
version "8.11.0" version "8.9.0"
resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-8.11.0.tgz#35fe5d3636fc5727c52429393415412e552e222b" resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-8.9.0.tgz#1714f167e9063062dc0df49c1d25afcbc7a96199"
integrity sha512-yHC3s1z1RCHoCz5t06gf7jH24rr3vns08XXhfEqzYpd6Hll3z/3g23JRi0jM8A47UFKNc3u/y5KIMx8Ynbjohg== integrity sha512-9iJYTgKLDG6+iqegehc5+EqE6sqaee7kb8vWpmHZ86EqwDjmlqNNHeqDVqb9duh+BY6WCNHfIGvuVU3Tf9Db0g==
dependencies: dependencies:
"@typescript-eslint/types" "8.11.0" "@typescript-eslint/types" "8.9.0"
"@typescript-eslint/visitor-keys" "8.11.0" "@typescript-eslint/visitor-keys" "8.9.0"
debug "^4.3.4" debug "^4.3.4"
fast-glob "^3.3.2" fast-glob "^3.3.2"
is-glob "^4.0.3" is-glob "^4.0.3"
@ -970,22 +970,22 @@
semver "^7.6.0" semver "^7.6.0"
ts-api-utils "^1.3.0" ts-api-utils "^1.3.0"
"@typescript-eslint/utils@8.11.0": "@typescript-eslint/utils@8.9.0":
version "8.11.0" version "8.9.0"
resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-8.11.0.tgz#4480d1e9f2bb18ea3510c79f870a1aefc118103d" resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-8.9.0.tgz#748bbe3ea5bee526d9786d9405cf1b0df081c299"
integrity sha512-CYiX6WZcbXNJV7UNB4PLDIBtSdRmRI/nb0FMyqHPTQD1rMjA0foPLaPUV39C/MxkTd/QKSeX+Gb34PPsDVC35g== integrity sha512-PKgMmaSo/Yg/F7kIZvrgrWa1+Vwn036CdNUvYFEkYbPwOH4i8xvkaRlu148W3vtheWK9ckKRIz7PBP5oUlkrvQ==
dependencies: dependencies:
"@eslint-community/eslint-utils" "^4.4.0" "@eslint-community/eslint-utils" "^4.4.0"
"@typescript-eslint/scope-manager" "8.11.0" "@typescript-eslint/scope-manager" "8.9.0"
"@typescript-eslint/types" "8.11.0" "@typescript-eslint/types" "8.9.0"
"@typescript-eslint/typescript-estree" "8.11.0" "@typescript-eslint/typescript-estree" "8.9.0"
"@typescript-eslint/visitor-keys@8.11.0": "@typescript-eslint/visitor-keys@8.9.0":
version "8.11.0" version "8.9.0"
resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-8.11.0.tgz#273de1cbffe63d9f9cd7dfc20b5a5af66310cb92" resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-8.9.0.tgz#5f11f4d9db913f37da42776893ffe0dd1ae78f78"
integrity sha512-EaewX6lxSjRJnc+99+dqzTeoDZUfyrA52d2/HRrkI830kgovWsmIiTfmr0NZorzqic7ga+1bS60lRBUgR3n/Bw== integrity sha512-Ht4y38ubk4L5/U8xKUBfKNYGmvKvA1CANoxiTRMM+tOLk3lbF3DvzZCxJCRSE+2GdCMSh6zq9VZJc3asc1XuAA==
dependencies: dependencies:
"@typescript-eslint/types" "8.11.0" "@typescript-eslint/types" "8.9.0"
eslint-visitor-keys "^3.4.3" eslint-visitor-keys "^3.4.3"
"@ungap/structured-clone@^1.2.0": "@ungap/structured-clone@^1.2.0":