diff --git a/packages/builder/package.json b/packages/builder/package.json index 3c8b71bb4..562b06a77 100644 --- a/packages/builder/package.json +++ b/packages/builder/package.json @@ -34,6 +34,7 @@ "@rollup/plugin-node-resolve": "^15.2.3", "@rollup/plugin-terser": "^0.4.4", "@types/debug": "^4.1.12", + "@types/deep-freeze": "^0.1.5", "@types/jest": "^29.5.12", "@types/json-stable-stringify": "^1.1.0", "@types/lodash": "^4.17.7", @@ -48,16 +49,20 @@ "dependencies": { "@usecannon/router": "^4.1.2", "@usecannon/web-solc": "0.5.1", + "acorn": "^8.14.0", "axios": "^1.7.2", "axios-retry": "^4.4.2", "buffer": "^6.0.3", "chalk": "^4.1.2", "debug": "^4.3.6", + "deep-freeze": "^0.0.1", "form-data": "^4.0.0", "fuse.js": "^7.0.0", "lodash": "^4.17.21", "pako": "^2.1.0", "promise-events": "^0.2.4", + "rfdc": "^1.4.1", + "ses": "^1.10.0", "typestub-ipfs-only-hash": "^4.0.0", "viem": "^2.21.15", "zod": "^3.23.6" diff --git a/packages/builder/src/access-recorder.test.ts b/packages/builder/src/access-recorder.test.ts index ddb2fad0d..6508c9a7a 100644 --- a/packages/builder/src/access-recorder.test.ts +++ b/packages/builder/src/access-recorder.test.ts @@ -2,6 +2,57 @@ import { computeTemplateAccesses } from './access-recorder'; describe('access-recorder.ts', () => { describe('computeTemplateAccesses()', () => { + it('computes dependency with addition operation', () => { + expect(computeTemplateAccesses('<%= settings.value1 + settings.value2 %>')).toEqual({ + accesses: ['settings.value1', 'settings.value2'], + unableToCompute: false, + }); + }); + + it('computes simple addition', () => { + expect(computeTemplateAccesses('<%= 1 + 1 %>')).toEqual({ + accesses: [], + unableToCompute: false, + }); + }); + + it('computes dependency with subtraction operation', () => { + expect(computeTemplateAccesses('<%= settings.value1 - settings.value2 %>')).toEqual({ + accesses: ['settings.value1', 'settings.value2'], + unableToCompute: false, + }); + }); + + it('computes dependency with multiplication operation', () => { + expect(computeTemplateAccesses('<%= settings.value1 * settings.value2 %>')).toEqual({ + accesses: ['settings.value1', 'settings.value2'], + unableToCompute: false, + }); + }); + + it('computes dependency with division operation', () => { + expect(computeTemplateAccesses('<%= settings.value1 / settings.value2 %>')).toEqual({ + accesses: ['settings.value1', 'settings.value2'], + unableToCompute: false, + }); + }); + + it('computes dependency with complex math operation', () => { + expect( + computeTemplateAccesses('<%= (settings.value1 + settings.value2) * settings.value3 / settings.value4 %>') + ).toEqual({ + accesses: ['settings.value1', 'settings.value2', 'settings.value3', 'settings.value4'], + unableToCompute: false, + }); + }); + + it('computes multiple dependencies on different template tags', () => { + expect(computeTemplateAccesses('<%= settings.woot %>-<%= settings.woot2 %>')).toEqual({ + accesses: ['settings.woot', 'settings.woot2'], + unableToCompute: false, + }); + }); + it('computes simple dependency', () => { expect(computeTemplateAccesses('<%= settings.woot %>')).toEqual({ accesses: ['settings.woot'], @@ -9,6 +60,17 @@ describe('access-recorder.ts', () => { }); }); + it('computes array dependency', () => { + expect( + computeTemplateAccesses( + '["<%= settings.camelotSwapPublisherAdmin1 %>","<%= settings.camelotSwapPublisherAdmin2 %>"]' + ) + ).toEqual({ + accesses: ['settings.camelotSwapPublisherAdmin1', 'settings.camelotSwapPublisherAdmin2'], + unableToCompute: false, + }); + }); + it('computes dependency using simple CannonHelperContext', () => { expect(computeTemplateAccesses('<%= parseEther(settings.woot) %>')).toEqual({ accesses: ['settings.woot'], @@ -26,10 +88,93 @@ describe('access-recorder.ts', () => { unableToCompute: false, }); }); + }); + + describe('computeTemplateAccesses() syntax validation', () => { + it('handles invalid template syntax - unmatched brackets', () => { + expect(computeTemplateAccesses('<%= settings.value) %>')).toEqual({ + accesses: [], + unableToCompute: true, + }); + }); + + it('handles empty template tags', () => { + expect(computeTemplateAccesses('<%=%>')).toEqual({ + accesses: [], + unableToCompute: true, + }); + }); + + it('handles multiple template tags with mixed validity', () => { + expect(computeTemplateAccesses('<%= settings.valid %> and <% invalid.syntax')).toEqual({ + accesses: ['settings.valid'], + unableToCompute: false, + }); + }); + + it('handles template with only whitespace', () => { + expect(computeTemplateAccesses('<%= %>')).toEqual({ + accesses: [], + unableToCompute: true, + }); + }); + }); + + describe('computeTemplateAccesses() security', () => { + it('prevents direct code execution', () => { + expect(computeTemplateAccesses('<%= process.exit(1) %>')).toEqual({ + accesses: [], + unableToCompute: true, + }); + }); + + it('prevents access to global objects', () => { + expect(computeTemplateAccesses('<%= global.process %>')).toEqual({ + accesses: [], + unableToCompute: true, + }); + }); + + it('prevents require/import statements', () => { + expect(computeTemplateAccesses('<%= require("fs") %>')).toEqual({ + accesses: [], + unableToCompute: true, + }); + }); + + it('prevents eval usage', () => { + expect(computeTemplateAccesses('<%= eval("console.log(\'REKT\')") %>')).toEqual({ + accesses: [], + unableToCompute: true, + }); + }); + + it('prevents Function constructor usage', () => { + expect(computeTemplateAccesses('<%= new Function("return process")() %>')).toEqual({ + accesses: [], + unableToCompute: true, + }); + }); + + it('prevents setTimeout/setInterval usage', () => { + expect(computeTemplateAccesses('<%= setTimeout(() => {}, 1000) %>')).toEqual({ + accesses: [], + unableToCompute: true, + }); + }); + + it('prevents overriding console.log', () => { + expect( + computeTemplateAccesses('<%= console.log=function(n){require("fs").writeFileSync("./exploit.log",n)} %>') + ).toEqual({ + accesses: [], + unableToCompute: true, + }); + }); - it('recognizes whene dependencies are not found', () => { - expect(computeTemplateAccesses('<%= contracts.hello %><%= sophistication(settings.woot) %>')).toEqual({ - accesses: ['contracts.hello'], + it('prevents assignment of values', () => { + expect(computeTemplateAccesses('<%= const value = 1 + 2 %>')).toEqual({ + accesses: [], unableToCompute: true, }); }); diff --git a/packages/builder/src/access-recorder.ts b/packages/builder/src/access-recorder.ts index 398f405b7..ffa31814f 100644 --- a/packages/builder/src/access-recorder.ts +++ b/packages/builder/src/access-recorder.ts @@ -1,8 +1,8 @@ import Debug from 'debug'; import _ from 'lodash'; import * as viem from 'viem'; -import { CannonHelperContext } from './types'; import { template } from './utils/template'; +import { CannonHelperContext } from './types'; const debug = Debug('cannon:builder:access-recorder'); @@ -32,6 +32,7 @@ class ExtendableProxy { }); } } + export class AccessRecorder extends ExtendableProxy { getAccesses(depth: number, cur = 1) { if (cur == depth) { @@ -52,15 +53,33 @@ export class AccessRecorder extends ExtendableProxy { return acc; } } -export type AccessComputationResult = { accesses: string[]; unableToCompute: boolean }; -export function computeTemplateAccesses(str?: string, possibleNames: string[] = []): AccessComputationResult { - if (!str) { - return { accesses: [], unableToCompute: false }; - } +export type AccessComputationResult = { accesses: string[]; unableToCompute: boolean }; - type AccessRecorderMap = { [k: string]: AccessRecorder }; - const recorders: { [k: string]: AccessRecorder | AccessRecorderMap } = { +type AccessRecorderMap = { [k: string]: AccessRecorder }; + +type TemplateContext = { + [k: string]: AccessRecorder | AccessRecorderMap | unknown; +}; + +/** + * Setup the template context. + * @param possibleNames - The possible names to setup the context for + * @returns The template context + */ +function setupTemplateContext(possibleNames: string[] = []): TemplateContext { + // Create a fake helper context, so the render works but no real functions are called + const fakeHelperContext = _createDeepNoopObject(CannonHelperContext); + + const recorders: TemplateContext = { + // Include base context variables, no access recording as they are always available + chainId: 0, + timestamp: 0, + package: { version: '0.0.0' }, + ...fakeHelperContext, + + // Add access recorders for the base context variables, these are the ones + // used to calculate dependencies beween steps contracts: new AccessRecorder(), imports: new AccessRecorder(), extras: new AccessRecorder(), @@ -71,43 +90,40 @@ export function computeTemplateAccesses(str?: string, possibleNames: string[] = settings: new AccessRecorder(viem.zeroAddress), }; - for (const [n, ctxVal] of Object.entries(CannonHelperContext)) { - if (typeof ctxVal === 'function') { - // the types have been a massive unsolvableseeming pain here - recorders[n] = _.noop as unknown as AccessRecorder; - } else if (typeof ctxVal === 'object') { - for (const [key, val] of Object.entries(ctxVal)) { - if (typeof val === 'function') { - if (!recorders[n]) recorders[n] = {} as AccessRecorderMap; - (recorders[n] as AccessRecorderMap)[key] = _.noop as unknown as AccessRecorder; - } else { - recorders[n] = ctxVal as unknown as AccessRecorder; - } - } - } else { - recorders[n] = ctxVal as unknown as AccessRecorder; - } - } - + // add possible names for (const n of possibleNames) { recorders[n] = new AccessRecorder(); } - const baseTemplate = template(str, { - imports: recorders, - }); + return recorders; +} - let unableToCompute = false; - try { - baseTemplate(); - } catch (err) { - debug('ran into template processing error, mark unable to compute', err); - unableToCompute = true; +export function _createDeepNoopObject(obj: T): T { + if (_.isFunction(obj)) { + return _.noop as T; } + if (Array.isArray(obj)) { + return obj.map((item) => _createDeepNoopObject(item)) as T; + } + + if (_.isPlainObject(obj)) { + return _.mapValues(obj as Record, (value) => _createDeepNoopObject(value)) as T; + } + + return obj; +} + +/** + * Collect the accesses from the recorders. + * @param recorders - The recorders to collect accesses from + * @param possibleNames - The possible names to collect accesses from + * @returns The accesses + */ +function collectAccesses(recorders: TemplateContext, possibleNames: string[]): string[] { const accesses: string[] = []; - for (const recorder of _.difference(Object.keys(recorders), Object.keys(CannonHelperContext))) { + for (const recorder of Object.keys(recorders)) { if (recorders[recorder] instanceof AccessRecorder) { if (possibleNames.includes(recorder) && recorders[recorder].accessed.size > 0) { accesses.push(recorder); @@ -117,9 +133,41 @@ export function computeTemplateAccesses(str?: string, possibleNames: string[] = } } - return { accesses, unableToCompute }; + return accesses; +} + +/** + * Compute the accesses from the template. + * @param str - The template to compute accesses from + * @param possibleNames - The possible names to compute accesses from + * @returns The accesses + */ +export function computeTemplateAccesses(str?: string, possibleNames: string[] = []): AccessComputationResult { + if (!str) { + return { accesses: [], unableToCompute: false }; + } + + const recorders = setupTemplateContext(possibleNames); + + try { + // we give it "true" for safeContext to avoid cloning and freezing of the object + // this is because we want to keep the access recorder, and is not a security risk + // if the user can modify that object + template(str, recorders, true); + const accesses = collectAccesses(recorders, possibleNames); + return { accesses, unableToCompute: false }; + } catch (err) { + debug('Template execution failed:', err); + return { accesses: [], unableToCompute: true }; + } } +/** + * Merge two template access computation results. + * @param r1 - The first result + * @param r2 - The second result + * @returns The merged result + */ export function mergeTemplateAccesses(r1: AccessComputationResult, r2: AccessComputationResult): AccessComputationResult { return { accesses: [...r1.accesses, ...r2.accesses], diff --git a/packages/builder/src/actions.test.ts b/packages/builder/src/actions.test.ts index abb3836cb..07464091d 100644 --- a/packages/builder/src/actions.test.ts +++ b/packages/builder/src/actions.test.ts @@ -1,5 +1,5 @@ import { ActionKinds, registerAction, validateConfig, CannonAction } from './actions'; -import { ChainArtifacts, ChainBuilderContext, ChainBuilderContextWithHelpers, ChainBuilderRuntimeInfo } from './types'; +import { ChainArtifacts, ChainBuilderContext, ChainBuilderRuntimeInfo } from './types'; import { z } from 'zod'; import { PackageReference } from './package-reference'; @@ -11,7 +11,7 @@ const FakeAction: CannonAction = { version: z.string(), }), - async getState(_runtime: ChainBuilderRuntimeInfo, ctx: ChainBuilderContextWithHelpers, config: Record) { + async getState(_runtime: ChainBuilderRuntimeInfo, ctx: ChainBuilderContext, config: Record) { return this.configInject(ctx, config, { ref: new PackageReference('hello:1.0.0'), currentLabel: '' }); }, diff --git a/packages/builder/src/actions.ts b/packages/builder/src/actions.ts index e7d62a008..6559488b8 100644 --- a/packages/builder/src/actions.ts +++ b/packages/builder/src/actions.ts @@ -11,7 +11,7 @@ import pullSpec from './steps/pull'; import routerSpec from './steps/router'; import diamondSpec from './steps/diamond'; import varSpec from './steps/var'; -import { ChainArtifacts, ChainBuilderContext, ChainBuilderContextWithHelpers, PackageState } from './types'; +import { ChainArtifacts, ChainBuilderContext, PackageState } from './types'; export interface RawConfig { description?: string; @@ -21,11 +21,11 @@ export interface RawConfig { export interface CannonAction { label: string; - configInject: (ctx: ChainBuilderContextWithHelpers, config: Config, packageState: PackageState) => Config; + configInject: (ctx: ChainBuilderContext, config: Config, packageState: PackageState) => Config; getState: ( runtime: ChainBuilderRuntime, - ctx: ChainBuilderContextWithHelpers, + ctx: ChainBuilderContext, config: Config, packageState: PackageState ) => Promise; diff --git a/packages/builder/src/definition.ts b/packages/builder/src/definition.ts index 818541a20..39bbd78a1 100644 --- a/packages/builder/src/definition.ts +++ b/packages/builder/src/definition.ts @@ -5,7 +5,7 @@ import type { Address } from 'viem'; import { ActionKinds, RawChainDefinition, checkConfig } from './actions'; import { ChainBuilderRuntime } from './runtime'; import { chainDefinitionSchema } from './schemas'; -import { CannonHelperContext, ChainBuilderContext } from './types'; +import { ChainBuilderContext } from './types'; import { template } from './utils/template'; import { PackageReference } from './package-reference'; @@ -112,7 +112,7 @@ export class ChainDefinition { } getName(ctx: ChainBuilderContext) { - const n = template(this.raw.name)(ctx); + const n = template(this.raw.name, ctx); validatePackageName(n); @@ -120,7 +120,7 @@ export class ChainDefinition { } getVersion(ctx: ChainBuilderContext) { - const v = template(this.raw.version)(ctx); + const v = template(this.raw.version, ctx); validatePackageVersion(v); @@ -128,7 +128,7 @@ export class ChainDefinition { } getPreset(ctx: ChainBuilderContext) { - return template(this.raw.preset)(ctx) || 'main'; + return this.raw.preset ? template(this.raw.preset, ctx) : 'main'; } getPackageRef(ctx: ChainBuilderContext) { @@ -157,7 +157,7 @@ export class ChainDefinition { ); } - return action.configInject({ ...ctx, ...CannonHelperContext }, _.get(this.raw, n), { + return action.configInject({ ...ctx }, _.get(this.raw, n), { ref: this.getPackageRef(ctx), currentLabel: n, }); @@ -189,15 +189,10 @@ export class ChainDefinition { } } - const objs = await ActionKinds[kind].getState( - runtime, - { ...ctx, ...CannonHelperContext }, - this.getConfig(n, ctx) as any, - { - ref: this.getPackageRef(ctx), - currentLabel: n, - } - ); + const objs = await ActionKinds[kind].getState(runtime, { ...ctx }, this.getConfig(n, ctx) as any, { + ref: this.getPackageRef(ctx), + currentLabel: n, + }); if (!objs) { return null; @@ -222,9 +217,9 @@ export class ChainDefinition { // can do about this right now return _.uniq( Object.values(this.raw.import).map((d) => ({ - source: template(d.source)(ctx), + source: template(d.source, ctx), chainId: d.chainId || ctx.chainId, - preset: template(d.preset)(ctx) || 'main', + preset: d.preset ? template(d.preset, ctx) : 'main', })) ); } diff --git a/packages/builder/src/index.ts b/packages/builder/src/index.ts index 08716ce81..a462ad431 100644 --- a/packages/builder/src/index.ts +++ b/packages/builder/src/index.ts @@ -1,3 +1,10 @@ +// prevent dumb bugs +if (!Object.prototype.hasOwnProperty.call(BigInt.prototype, 'toJSON')) { + (BigInt.prototype as any).toJSON = function () { + return this.toString(); + }; +} + export { createInitialContext, build, getArtifacts, addOutputsToContext, getOutputs } from './builder'; export { computeTemplateAccesses, mergeTemplateAccesses } from './access-recorder'; export { registerAction, ActionKinds } from './actions'; @@ -10,12 +17,6 @@ export { decodeTxError, renderTrace, findContract } from './trace'; export type { TraceEntry } from './trace'; export { traceActions, CannonError } from './error'; export { prepareMulticall } from './multicall'; - -// prevent dumb bugs -(BigInt.prototype as any).toJSON = function () { - return this.toString(); -}; - export { CannonRegistry, OnChainRegistry, InMemoryRegistry, FallbackRegistry } from './registry'; export * from './package'; export { diff --git a/packages/builder/src/steps/clone.ts b/packages/builder/src/steps/clone.ts index f2dbb3b8f..42ba9acce 100644 --- a/packages/builder/src/steps/clone.ts +++ b/packages/builder/src/steps/clone.ts @@ -48,7 +48,7 @@ const cloneSpec = { throw new Error(`only one of \`target\` and \`targetPreset\` can specified for ${packageState.currentLabel}`); } - const ref = new PackageReference(template(config.source)(ctx)); + const ref = new PackageReference(template(config.source, ctx)); config.source = ref.fullPackageRef; @@ -56,22 +56,22 @@ const cloneSpec = { config.source = PackageReference.from(ref.name, ref.version, config.sourcePreset).fullPackageRef; } - config.sourcePreset = template(config.sourcePreset)(ctx); - config.targetPreset = template(config.targetPreset)(ctx); - config.target = template(config.target)(ctx); + config.sourcePreset = template(config.sourcePreset || '', ctx); + config.targetPreset = template(config.targetPreset || '', ctx); + config.target = template(config.target || '', ctx); if (config.var) { config.var = _.mapValues(config.var, (v) => { - return template(v)(ctx); + return template(v, ctx); }); } else if (config.options) { config.options = _.mapValues(config.options, (v) => { - return template(v)(ctx); + return template(v, ctx); }); } if (config.tags) { - config.tags = config.tags.map((t: string) => template(t)(ctx)); + config.tags = config.tags.map((t: string) => template(t, ctx)); } return config; diff --git a/packages/builder/src/steps/deploy.ts b/packages/builder/src/steps/deploy.ts index 1dc810726..15eeb4c7d 100644 --- a/packages/builder/src/steps/deploy.ts +++ b/packages/builder/src/steps/deploy.ts @@ -157,39 +157,39 @@ const deploySpec = { configInject(ctx, config) { config = _.cloneDeep(config); - config.from = template(config.from || '')(ctx); + config.from = template(config.from || '', ctx); - config.nonce = template(config.nonce || '')(ctx); + config.nonce = template(config.nonce || '', ctx); - config.artifact = template(config.artifact)(ctx); + config.artifact = template(config.artifact, ctx); - config.value = template(config.value || '')(ctx); + config.value = template(config.value || '', ctx); - config.abi = template(config.abi || '')(ctx); + config.abi = template(config.abi || '', ctx); if (config.abiOf) { - config.abiOf = _.map(config.abiOf, (v) => template(v)(ctx)); + config.abiOf = _.map(config.abiOf, (v) => template(v, ctx)); } if (config.args) { config.args = _.map(config.args, (a) => { // just convert it to a JSON string when. This will allow parsing of complicated nested structures - return JSON.parse(template(JSON.stringify(a))(ctx)); + return JSON.parse(template(JSON.stringify(a), ctx)); }); } if (config.libraries) { config.libraries = _.mapValues(config.libraries, (a) => { - return template(a)(ctx); + return template(a, ctx); }); } if (config.salt) { - config.salt = template(config.salt)(ctx); + config.salt = template(config.salt, ctx); } if (config?.overrides?.gasLimit) { - config.overrides.gasLimit = template(config.overrides.gasLimit)(ctx); + config.overrides.gasLimit = template(config.overrides.gasLimit, ctx); } return config; diff --git a/packages/builder/src/steps/diamond.ts b/packages/builder/src/steps/diamond.ts index d49b8dc7c..8e8ad8aa2 100644 --- a/packages/builder/src/steps/diamond.ts +++ b/packages/builder/src/steps/diamond.ts @@ -71,24 +71,24 @@ const diamondStep = { configInject(ctx, config) { config = _.cloneDeep(config); - config.contracts = _.map(config.contracts, (n) => template(n)(ctx)); + config.contracts = _.map(config.contracts, (n) => template(n, ctx)); - config.diamondArgs.owner = template(config.diamondArgs.owner)(ctx); + config.diamondArgs.owner = template(config.diamondArgs.owner, ctx); if (config.diamondArgs.init) { - config.diamondArgs.init = template(config.diamondArgs.init)(ctx); + config.diamondArgs.init = template(config.diamondArgs.init, ctx); } else { config.diamondArgs.init = viem.zeroAddress; } if (config.diamondArgs.initCalldata) { - config.diamondArgs.initCalldata = template(config.diamondArgs.initCalldata)(ctx); + config.diamondArgs.initCalldata = template(config.diamondArgs.initCalldata, ctx); } else { config.diamondArgs.initCalldata = '0x'; } - config.salt = template(config.salt)(ctx); + config.salt = template(config.salt, ctx); if (config?.overrides?.gasLimit) { - config.overrides.gasLimit = template(config.overrides.gasLimit)(ctx); + config.overrides.gasLimit = template(config.overrides.gasLimit, ctx); } return config; diff --git a/packages/builder/src/steps/invoke.ts b/packages/builder/src/steps/invoke.ts index 2523808b3..81e594592 100644 --- a/packages/builder/src/steps/invoke.ts +++ b/packages/builder/src/steps/invoke.ts @@ -20,7 +20,7 @@ import { getContractFromPath, getMergedAbiFromContractPaths, } from '../util'; -import { getTemplateMatches, isTemplateString, template } from '../utils/template'; +import { template, getTemplateMatches, isTemplateString } from '../utils/template'; import { isStepPath, isStepName } from '../utils/matchers'; import { CannonAction } from '../actions'; @@ -107,7 +107,7 @@ async function runTxn( .map((v) => v[1]) .join( '\n' - )}\n\nIf this is a proxy contract, make sure you’ve specified abiOf for the contract action in the cannonfile that deploys it. If you’re calling an overloaded function, update func to include parentheses.` + )}\n\nIf this is a proxy contract, make sure you've specified abiOf for the contract action in the cannonfile that deploys it. If you’re calling an overloaded function, update func to include parentheses.` ); } @@ -369,58 +369,57 @@ const invokeSpec = { if (config.target) { // [string, ...string[]] refers to a nonempty array - config.target = config.target.map((v) => template(v)(ctx)) as [string, ...string[]]; + config.target = config.target.map((v) => template(v, ctx)) as [string, ...string[]]; } if (config.abi) { - config.abi = template(config.abi)(ctx); + config.abi = template(config.abi, ctx); } - config.func = template(config.func)(ctx); + config.func = template(config.func, ctx); if (config.args) { debug('rendering invoke args with settings: ', ctx.settings); - config.args = _.map(config.args, (a) => { - // just convert it to a JSON string when. This will allow parsing of complicated nested structures - return JSON.parse(template(JSON.stringify(a))(ctx)); + config.args = _.map(config.args, (arg) => { + return JSON.parse(template(JSON.stringify(arg), ctx)); }); } if (config.from) { - config.from = template(config.from)(ctx); + config.from = template(config.from, ctx); } if (config.fromCall) { - config.fromCall.func = template(config.fromCall.func)(ctx); - config.fromCall.args = _.map(config.fromCall.args, (a) => { + config.fromCall.func = template(config.fromCall.func, ctx); + config.fromCall.args = _.map(config.fromCall.args, (arg) => { // just convert it to a JSON string when. This will allow parsing of complicated nested structures - return JSON.parse(template(JSON.stringify(a))(ctx)); + return JSON.parse(template(JSON.stringify(arg), ctx)); }); } if (config.value) { - config.value = template(config.value)(ctx); + config.value = template(config.value, ctx); } if (config?.overrides?.gasLimit) { - config.overrides.gasLimit = template(config.overrides.gasLimit)(ctx); + config.overrides.gasLimit = template(config.overrides.gasLimit, ctx); } for (const name in config.factory) { const f = config.factory[name]; - f.event = template(f.event)(ctx); + f.event = template(f.event, ctx); if (f.artifact) { - f.artifact = template(f.artifact)(ctx); + f.artifact = template(f.artifact, ctx); } if (f.abiOf) { - f.abiOf = _.map(f.abiOf, (v) => template(v)(ctx)); + f.abiOf = _.map(f.abiOf, (v) => template(v, ctx)); } if (f.abi) { - f.abi = template(f.abi || '')(ctx); + f.abi = template(f.abi || '', ctx); } } @@ -428,7 +427,7 @@ const invokeSpec = { for (const name in varsConfig) { const f = varsConfig[name]; - f.event = template(f.event)(ctx); + f.event = template(f.event, ctx); } return config; diff --git a/packages/builder/src/steps/keeper.ts b/packages/builder/src/steps/keeper.ts index 0c854ba51..481d4c69a 100644 --- a/packages/builder/src/steps/keeper.ts +++ b/packages/builder/src/steps/keeper.ts @@ -44,17 +44,17 @@ export default { configInject(ctx, config) { config = _.cloneDeep(config); - config.exec = template(config.exec)(ctx); + config.exec = template(config.exec, ctx); if (config.args) { config.args = _.map(config.args, (v) => { - return template(v)(ctx); + return template(v, ctx); }); } if (config.env) { config.env = _.map(config.env, (v) => { - return template(v)(ctx); + return template(v, ctx); }); } diff --git a/packages/builder/src/steps/pull.ts b/packages/builder/src/steps/pull.ts index 9fb40334c..790747211 100644 --- a/packages/builder/src/steps/pull.ts +++ b/packages/builder/src/steps/pull.ts @@ -51,10 +51,10 @@ const pullSpec = { configInject(ctx, config) { config = _.cloneDeep(config); - const packageRef = new PackageReference(template(config.source)(ctx)); + const packageRef = new PackageReference(template(config.source, ctx)); config.source = packageRef.fullPackageRef; - config.preset = template(config.preset)(ctx) || packageRef.preset; + config.preset = template(config.preset || '', ctx) || packageRef.preset; return config; }, diff --git a/packages/builder/src/steps/router.ts b/packages/builder/src/steps/router.ts index 2d6a80504..bf5666873 100644 --- a/packages/builder/src/steps/router.ts +++ b/packages/builder/src/steps/router.ts @@ -83,18 +83,18 @@ const routerStep = { configInject(ctx, config) { config = _.cloneDeep(config); - config.contracts = _.map(config.contracts, (n) => template(n)(ctx)); + config.contracts = _.map(config.contracts, (n) => template(n, ctx)); if (config.from) { - config.from = template(config.from)(ctx); + config.from = template(config.from, ctx); } if (config.salt) { - config.salt = template(config.salt)(ctx); + config.salt = template(config.salt, ctx); } if (config?.overrides?.gasLimit) { - config.overrides.gasLimit = template(config.overrides.gasLimit)(ctx); + config.overrides.gasLimit = template(config.overrides.gasLimit, ctx); } if (_.isUndefined(config.includeDiamondCompatibility)) { diff --git a/packages/builder/src/steps/utils.test.helper.ts b/packages/builder/src/steps/utils.test.helper.ts index 91c5acd46..c7f3fd922 100644 --- a/packages/builder/src/steps/utils.test.helper.ts +++ b/packages/builder/src/steps/utils.test.helper.ts @@ -1,6 +1,6 @@ import { makeFakeProvider } from '../../test/fixtures'; import { ChainBuilderRuntime } from '../runtime'; -import { ChainBuilderContextWithHelpers } from '../types'; +import { ChainBuilderContext } from '../types'; import * as viem from 'viem'; @@ -21,7 +21,7 @@ export const fakeCtx = { chainId: 1234, package: {}, timestamp: '1234123412', -} as unknown as ChainBuilderContextWithHelpers; +} as unknown as ChainBuilderContext; export const fakeRuntime = new ChainBuilderRuntime({} as any, null as any, {}); diff --git a/packages/builder/src/steps/var.ts b/packages/builder/src/steps/var.ts index 971a80eca..7c24e1297 100644 --- a/packages/builder/src/steps/var.ts +++ b/packages/builder/src/steps/var.ts @@ -36,7 +36,7 @@ const varSpec = { configInject(ctx, config) { config = _.cloneDeep(config); for (const c in _.omit(config, 'depends')) { - config[c] = template(config[c])(ctx); + config[c] = template(config[c], ctx); } return config; diff --git a/packages/builder/src/types.ts b/packages/builder/src/types.ts index 9edc563b5..cc5aee733 100644 --- a/packages/builder/src/types.ts +++ b/packages/builder/src/types.ts @@ -1,10 +1,16 @@ import _ from 'lodash'; import * as viem from 'viem'; +import deepFreeze from 'deep-freeze'; +import rfdc from 'rfdc'; import { viemContext } from './utils/viem-context'; +import { jsContext } from './utils/js-context'; +import { ethersContext } from './utils/ethers-context'; import { PackageReference } from './package-reference'; import type { RawChainDefinition } from './actions'; +const deepClone = rfdc(); + // loosely based on the hardhat `Artifact` type export type ContractArtifact = { contractName: string; @@ -90,81 +96,17 @@ export interface ChainBuilderContext extends PreChainBuilderContext { [shortContract: string]: any; } -const etherUnitNames = ['wei', 'kwei', 'mwei', 'gwei', 'szabo', 'finney', 'ether']; - -// Ethers.js compatible context functions. Consider deprecating. -const ethersStyleConstants = { - AddressZero: viem.zeroAddress, - HashZero: viem.zeroHash, - MaxUint256: viem.maxUint256, - - defaultAbiCoder: { - encode: (a: string[], v: any[]) => { - return viem.encodeAbiParameters( - a.map((arg) => ({ type: arg })), - v - ); - }, - decode: (a: string[], v: viem.Hex | viem.ByteArray) => { - return viem.decodeAbiParameters( - a.map((arg) => ({ type: arg })), - v - ); - }, - }, - - zeroPad: (a: viem.Hex, s: number) => viem.padHex(a, { size: s }), - hexZeroPad: (a: viem.Hex, s: number) => viem.padHex(a, { size: s }), - hexlify: viem.toHex, - stripZeros: viem.trim, - formatBytes32String: (v: string) => viem.stringToHex(v, { size: 32 }), - parseBytes32String: (v: viem.Hex) => viem.hexToString(v, { size: 32 }), - id: (v: string) => (v.startsWith('function ') ? viem.toFunctionSelector(v) : viem.keccak256(viem.toHex(v))), - formatEther: viem.formatEther, - formatUnits: (s: bigint, units: number | string) => { - if (typeof units === 'string') { - const index = etherUnitNames.indexOf(units); - if (index < 0) { - throw new Error(`formatUnits: unknown ethereum unit name: ${units}`); - } - units = 3 * index; - } - - return viem.formatUnits(s, units as number); - }, - parseEther: viem.parseEther, - parseUnits: (s: string, units: number | string) => { - if (typeof units === 'string') { - const index = etherUnitNames.indexOf(units); - if (index < 0) { - throw new Error(`parseUnits: unknown ethereum unit name: ${units}`); - } - units = 3 * index; - } - - return viem.parseUnits(s, units as number); - }, - keccak256: viem.keccak256, - sha256: viem.sha256, - ripemd160: viem.ripemd160, - solidityPack: viem.encodePacked, - solidityKeccak256: (a: string[], v: any[]) => viem.keccak256(viem.encodePacked(a, v)), - soliditySha256: (a: string[], v: any[]) => viem.sha256(viem.encodePacked(a, v)), - serializeTransaction: viem.serializeTransaction, - parseTransaction: viem.parseTransaction, - - encodeFunctionData: viem.encodeFunctionData, - decodeFunctionData: viem.decodeFunctionData, - encodeFunctionResult: viem.encodeFunctionResult, - decodeFunctionResult: viem.decodeFunctionResult, -}; - -export const CannonHelperContext = { - ...viemContext, - ...ethersStyleConstants, -}; +export type CannonContextGlobals = 'imports' | 'contracts' | 'txns' | 'settings' | 'extras'; -export type ChainBuilderContextWithHelpers = ChainBuilderContext & typeof CannonHelperContext; +// We do a deepFreeze and deepClone to make sure to not any of the context objects, +// and not let the user modify them also, +export const CannonHelperContext = deepFreeze( + deepClone({ + ...viemContext, + ...ethersContext, + ...jsContext, + }) +); export type BuildOptions = { [val: string]: string }; @@ -221,7 +163,7 @@ export interface BundledChainBuilderOutputs { [module: string]: BundledOutput; } -export type ChainArtifacts = Partial>; +export type ChainArtifacts = Partial>; export interface ChainBuilderOptions { [key: string]: string; diff --git a/packages/builder/src/utils/ethers-context.ts b/packages/builder/src/utils/ethers-context.ts new file mode 100644 index 000000000..58a020803 --- /dev/null +++ b/packages/builder/src/utils/ethers-context.ts @@ -0,0 +1,70 @@ +import * as viem from 'viem'; + +const _unitNames = ['wei', 'kwei', 'mwei', 'gwei', 'szabo', 'finney', 'ether']; + +// Ethers.js compatible context functions. Consider deprecating. +export const ethersContext = { + AddressZero: viem.zeroAddress, + HashZero: viem.zeroHash, + MaxUint256: viem.maxUint256, + + defaultAbiCoder: { + encode: (a: string[], v: any[]) => { + return viem.encodeAbiParameters( + a.map((arg) => ({ type: arg })), + v + ); + }, + decode: (a: string[], v: viem.Hex | viem.ByteArray) => { + return viem.decodeAbiParameters( + a.map((arg) => ({ type: arg })), + v + ); + }, + }, + + zeroPad: (a: viem.Hex, s: number) => viem.padHex(a, { size: s }), + hexZeroPad: (a: viem.Hex, s: number) => viem.padHex(a, { size: s }), + hexlify: viem.toHex, + stripZeros: viem.trim, + formatBytes32String: (v: string) => viem.stringToHex(v, { size: 32 }), + parseBytes32String: (v: viem.Hex) => viem.hexToString(v, { size: 32 }), + id: (v: string) => (v.startsWith('function ') ? viem.toFunctionSelector(v) : viem.keccak256(viem.toHex(v))), + formatEther: viem.formatEther, + formatUnits: (s: bigint, units: number | string) => { + if (typeof units === 'string') { + const index = _unitNames.indexOf(units); + if (index < 0) { + throw new Error(`formatUnits: unknown ethereum unit name: ${units}`); + } + units = 3 * index; + } + + return viem.formatUnits(s, units as number); + }, + parseEther: viem.parseEther, + parseUnits: (s: string, units: number | string) => { + if (typeof units === 'string') { + const index = _unitNames.indexOf(units); + if (index < 0) { + throw new Error(`parseUnits: unknown ethereum unit name: ${units}`); + } + units = 3 * index; + } + + return viem.parseUnits(s, units as number); + }, + keccak256: viem.keccak256, + sha256: viem.sha256, + ripemd160: viem.ripemd160, + solidityPack: viem.encodePacked, + solidityKeccak256: (a: string[], v: any[]) => viem.keccak256(viem.encodePacked(a, v)), + soliditySha256: (a: string[], v: any[]) => viem.sha256(viem.encodePacked(a, v)), + serializeTransaction: viem.serializeTransaction, + parseTransaction: viem.parseTransaction, + + encodeFunctionData: viem.encodeFunctionData, + decodeFunctionData: viem.decodeFunctionData, + encodeFunctionResult: viem.encodeFunctionResult, + decodeFunctionResult: viem.decodeFunctionResult, +}; diff --git a/packages/builder/src/utils/get-global-vars.ts b/packages/builder/src/utils/get-global-vars.ts new file mode 100644 index 000000000..7cf115a30 --- /dev/null +++ b/packages/builder/src/utils/get-global-vars.ts @@ -0,0 +1,47 @@ +/** + * Gets all global variables from various JavaScript environments + * @returns Set of all discoverable globals + */ +export function getGlobalVars(): Set { + const globals = new Set(); + + // Helper to safely get all properties from an object and its prototype chain + const getAllPropertiesFromObject = (obj: any) => { + while (obj) { + try { + Object.getOwnPropertyNames(obj).forEach((prop) => globals.add(prop)); + obj = Object.getPrototypeOf(obj); + } catch (e) { + break; // Stop if we can't access further + } + } + }; + + // Check globalThis + getAllPropertiesFromObject(globalThis); + + // Check window in browser environment + if (typeof window !== 'undefined') { + getAllPropertiesFromObject(window); + } + + // Check global in Node.js environment + if (typeof global !== 'undefined') { + getAllPropertiesFromObject(global); + } + + // Check self (used in Web Workers) + if (typeof self !== 'undefined') { + getAllPropertiesFromObject(self); + } + + // Get properties from Function constructor + try { + const functionProps = new Function('return Object.getOwnPropertyNames(this)')(); + functionProps.forEach((prop: string) => globals.add(prop)); + } catch (e) { + // Ignore if blocked + } + + return globals; +} diff --git a/packages/builder/src/utils/js-context.ts b/packages/builder/src/utils/js-context.ts new file mode 100644 index 000000000..ee91e9096 --- /dev/null +++ b/packages/builder/src/utils/js-context.ts @@ -0,0 +1,38 @@ +export const jsContext = { + // Fundamental objects + Number: (value: string) => Number(value), + BigInt: (value: string) => BigInt(value), + Array: { + from: Array.from.bind(Array), + isArray: Array.isArray.bind(Array), + }, + Date: { + now: Date.now.bind(Date), + }, + + // Functions + JSON: { + stringify(value: any) { + return JSON.stringify(value, (_: any, v: any) => (typeof v === 'bigint' ? v.toString() : v)); + }, + parse(value: string) { + return JSON.parse(value); + }, + }, + console: { + // eslint-disable-next-line no-console + log: console.log.bind(console), + // eslint-disable-next-line no-console + error: console.error.bind(console), + // eslint-disable-next-line no-console + warn: console.warn.bind(console), + // eslint-disable-next-line no-console + info: console.info.bind(console), + // eslint-disable-next-line no-console + debug: console.debug.bind(console), + }, + parseFloat: (n: string) => parseFloat(n), + parseInt: (n: string) => parseInt(n), + isNaN: (n: any) => isNaN(n), + isFinite: (n: any) => isFinite(n), +}; diff --git a/packages/builder/src/utils/template.test.ts b/packages/builder/src/utils/template.test.ts new file mode 100644 index 000000000..d4dce4e36 --- /dev/null +++ b/packages/builder/src/utils/template.test.ts @@ -0,0 +1,86 @@ +import { TemplateValidationError, validateTemplate, renderTemplate, template } from './template'; + +describe('template.ts', () => { + describe('validateTemplate()', () => { + it.each([ + '<%= a = 1 %>', + '<%= a += 1 %>', + '<%= a -= 1 %>', + '<%= a *= 1 %>', + '<%= a /= 1 %>', + '<%= a++ %>', + '<%= a-- %>', + '<%= a %= 1 %>', + '<%= a <<= 1 %>', + '<%= a >>= 1 %>', + '<%= a >>>= 1 %>', + '<%= a &= 1 %>', + '<%= a |= 1 %>', + '<%= a ^= 1 %>', + '<%= a **= 1 %>', + '<%= a &&= 1 %>', + '<%= a ||= 1 %>', + '<%= a ??= 1 %>', + ])('does not allow assignment operator: "%s"', (template) => { + expect(() => validateTemplate(template)).toThrow(TemplateValidationError); + }); + + it.each([ + '<%= process.exit(1) %>', + "<%= console.log(this), 'new greeting' %>", + "<%= console.log(process.env), 'some value' %>", + '<%= global.process %>', + '<%= require("fs") %>', + '<%= eval("console.log(\'REKT\')") %>', + '<%= new Function("return process")() %>', + '<%= setTimeout(() => {}, 1000) %>', + '<%= console.log=function(n){require("fs").writeFileSync("./exploit.log",n)} %>', + '<%= const value = 1 + 2 %>', + '<%= value=1+2 %>', + '<%= value++ %>', + '<%= globalThis["process"] %>', + '<%= globalThis %>', + ])('does not allow invalid globals: "%s"', (template) => { + expect(() => validateTemplate(template)).toThrow(TemplateValidationError); + }); + + it.each(['<%= settings.value) %>', '<%= settings.value === %>'])('throws a SyntaxError: "%s"', (template) => { + expect(() => validateTemplate(template)).toThrow(SyntaxError); + }); + + it.each([ + '<%=%>', + '<%= %>', + '<%= package.version %>', + '<%= chainId %>', + '<%= timestamp %>', + '<%=settings.value%>', + '<%= settings.value === 1 %>', + '<%=settings.value1%>-<%=settings.value2%>', + '<%= settings.value1 + settings.value2 %>', + '<%= settings.value1 - settings.value2 %>', + '<%= settings.value1 * settings.value2 %>', + '<%= settings.value1 / settings.value2 %>', + '<%= settings.value1 %>', + '<%= settings.value1.value2 %>', + '<%= settings.value1[0] %>', + '<%= settings.value1[0].value2 %>', + '<%= (settings.value1 + settings.value2) * settings.value3 / settings.value4 %>', + '<%= defaultAbiCoder.encode(parseEther(settings.woot)) %> + <%= defaultAbiCoder.decode(contracts.compound) %>', + ])('is valid: "%s"', (template) => { + expect(validateTemplate(template)).toBeUndefined(); + }); + }); + + describe('template()', () => { + it.each<[string, any, string]>([ + ['<%= settings.woot %>', { settings: { woot: 'woot' } }, 'woot'], + ['<%= a %>-<%= b %>', { a: 'one', b: 'two' }, 'one-two'], + ['[<%= JSON.stringify(a) %>]', { a: { one: 1, two: '2', three: [3] } }, '[{"one":1,"two":"2","three":[3]}]'], + ])('is valid: "%s"', (str, ctx, expected) => { + // Make sure the rendering has the same result inside the ses compartment + expect(renderTemplate(str, ctx)).toEqual(expected); + expect(template(str, ctx)).toEqual(expected); + }); + }); +}); diff --git a/packages/builder/src/utils/template.ts b/packages/builder/src/utils/template.ts index db89ff6b2..4a923f289 100644 --- a/packages/builder/src/utils/template.ts +++ b/packages/builder/src/utils/template.ts @@ -1,8 +1,79 @@ -import Fuse from 'fuse.js'; +import 'ses'; import _ from 'lodash'; +import Debug from 'debug'; +import Fuse from 'fuse.js'; +import rfdc from 'rfdc'; +import * as acorn from 'acorn'; +import { Node, Identifier, MemberExpression } from 'acorn'; +import { CannonHelperContext } from '../types'; +import { getGlobalVars } from './get-global-vars'; + +const deepClone = rfdc(); +const debug = Debug('cannon:builder:template'); + +const ALLOWED_IDENTIFIERS = new Set(Object.keys(CannonHelperContext)); + +const DISALLOWED_IDENTIFIERS = new Set([ + '__defineGetter__', + '__defineSetter__', + '__lookupGetter__', + '__lookupSetter__', + '__proto__', + 'arguments', + 'async', + 'await', + 'break', + 'callee', + 'caller', + 'case', + 'catch', + 'class', + 'const', + 'constructor', + 'continue', + 'debugger', + 'delete', + 'do', + 'else', + 'export', + 'extends', + 'eval', + 'finally', + 'for', + 'function', + 'Function', + 'function*', + 'global', + 'globalThis', + 'if', + 'import', + 'let', + 'new', + 'process', + 'prototype', + 'require', + 'return', + 'self', + 'static', + 'super', + 'switch', + 'this', + 'throw', + 'try', + 'var', + 'while', + 'window', + 'with', + 'yield', +]); -import type { TemplateOptions } from 'lodash'; +const GLOBAL_VARS = new Set(Array.from(getGlobalVars()).filter((g) => !DISALLOWED_IDENTIFIERS.has(g))); +/** + * Check if the given string is a template string. + * @param str - The string to check + * @returns True if the string is a template string, false otherwise + */ export function isTemplateString(str: string) { return /<%[=-]([\s\S]+?)%>/.test(str); } @@ -12,57 +83,234 @@ export function isTemplateString(str: string) { * e.g.: * getTemplateMatches('<%= some.val %>-<%- another.val %>') // ['<%= some.val %>', '<%- another.val %>'] */ -export function getTemplateMatches(str: string) { +export function getTemplateMatches(str: string, includeTags = true) { const results = Array.from(str.matchAll(/<%[=-]([\s\S]+?)%>/g)); - return results.map((r) => r[0]); + return results.map((r) => (includeTags ? r[0] : r[1].trim())); } -export function template(str?: string, options?: TemplateOptions) { - const render = _.template(str, options); - - return (data?: object) => { - try { - return render(data); - } catch (err) { - if (err instanceof Error) { - err.message += ` at ${str}`; - - // Do a fuzzy search in the given context, in the case the user did a typo - // we look for something close in the current data context object. - if (data && err.message.includes('Cannot read properties of undefined')) { - const match = err.message.match(/\(reading '([^']+)'\)/); - if (match && match[1]) { - const desiredKey = match[1]; - const allKeys = Array.from(getAllKeys(data)); - const results = fuzzySearch(allKeys, desiredKey); - if (results.length) { - err.message += "\n\n Here's a list of some fields available in this context, did you mean one of these?"; - for (const res of results) err.message += `\n ${res}`; - } - } +/** + * Lodash template function wrapper. + * It adds a fuzzy search for the keys in the data object in case the user made a typo. + */ +export function renderTemplate(templateStr: string, templateContext: any = {}, safeContext = false) { + if (!_.isPlainObject(templateContext)) { + throw new Error('Missing template context'); + } + + // Check that the given context does not contain any disallowed variables + for (const key of DISALLOWED_IDENTIFIERS) { + if (Object.prototype.hasOwnProperty.call(templateContext, key)) { + throw new Error(`Usage of identifier "${key}" is not allowed`); + } + } + + try { + // If it is rendering a real context, we clone it and freeze it to avoid any modifications + // by the user. This is to avoid any security risks that could be moved to the following steps. + // E.g.: + // args = ["<%= Object.assign(contracts.Greeter, { address: '0xdeadbeef' }) %>"] + const ctx = safeContext ? templateContext : deepClone(templateContext); + + // Validate the template string to make sure it's safe to execute + validateTemplate(templateStr, Object.keys(ctx)); + + // Set null to all global vars so they cannot be accessed by the user + if (!safeContext) { + for (const key of GLOBAL_VARS.values()) { + if (ALLOWED_IDENTIFIERS.has(key)) continue; + if (!Object.prototype.hasOwnProperty.call(templateContext, key)) { + ctx[key] = null; } } + } + + return _.template(templateStr, { imports: CannonHelperContext })(ctx); + } catch (err) { + if (err instanceof Error) { + err.message += ` at ${templateStr}`; + + // Do a fuzzy search in the given context, in the case the user did a typo + // we look for something close in the current data context object. + if (templateContext) { + const match = err.message.includes('Cannot read properties of undefined') + ? err.message.match(/\(reading '([^']+)'\)/) + : err.message.includes(' is not defined ') + ? err.message.match(/([^']+) is not defined at /) + : null; - throw err; + if (match?.[1]) { + const desiredKey = match[1]; + const allKeys = Array.from(_getAllKeys(templateContext)); + const results = _fuzzySearch(allKeys, desiredKey); + if (results.length) { + err.message += "\n\n Here's a list of some fields available in this context, did you mean one of these?"; + for (const res of results) err.message += `\n ${res}`; + err.message += '\n'; + } + } + } } + + throw err; + } +} + +/** + * Executes a template string in a SES secure compartment. + * @param templateStr - The template string to evaluate + * @param context - The template context object, includes the variables to be used in the template + * @returns The evaluated result + */ +export function template(templateStr: string, templateContext: Record = {}, safeContext = false) { + const code = 'renderTemplate(templateStr, templateContext, safeContext)'; + + const compartmentContext = { + globals: { + templateStr, + templateContext, + renderTemplate, + safeContext, + }, + __options__: true, }; + + try { + // eslint-disable-next-line no-undef + const compartment = new Compartment(compartmentContext); + return compartment.evaluate(code); + } catch (err) { + debug(`Render template "${templateStr}" failed:`, err); + throw err; + } } -function getAllKeys(obj: { [key: string]: any }, parentKey = '', keys: Set = new Set()) { +/** + * Get all the keys in the given object. + * @param obj - The object to get the keys from + * @param parentKey - The parent key + * @param keys - The set of keys to add to + * @returns Set of keys + */ +function _getAllKeys(obj: { [key: string]: any }, parentKey = '', keys: Set = new Set()) { for (const key of Object.keys(obj)) { const fullKey = parentKey ? `${parentKey}.${key}` : key; keys.add(fullKey); - if (_.isPlainObject(obj[key])) getAllKeys(obj[key], fullKey, keys); + if (_.isPlainObject(obj[key])) _getAllKeys(obj[key], fullKey, keys); } return keys; } -function fuzzySearch(data: string[], query: string) { +/** + * Perform a fuzzy search on the given data array. + * @param data - The data array to search + * @param query - The query string to search for + * @returns Array of matching items + */ +function _fuzzySearch(data: string[], query: string) { const searcher = new Fuse(data, { ignoreLocation: true, - threshold: 0.3, + threshold: 0.4, }); return searcher.search(query).map(({ item }) => item); } + +export class TemplateValidationError extends Error { + constructor(message: string) { + super(message); + this.name = 'TemplateValidationError'; + } +} + +const NEW_LINE_CHARS = ['\n', '\r', '\u2028']; + +// Define the subset of JS operations that are allowed in templates +const ALLOWED_NODE_TYPES = new Set([ + 'Program', // Root node of the ast + 'ExpressionStatement', // Represents a single expression + 'Literal', // Represents literal values (numbers, strings, booleans, etc.) + 'BinaryExpression', // Mathematical or comparison operations (e.g., +, -, *, /, >, <) + 'LogicalExpression', // Logical operations (&&, ||) + 'SequenceExpression', // Execution expressions with comma: a, b + 'ConditionalExpression', // Ternary expressions (condition ? true : false) + 'MemberExpression', // Object property access (e.g., obj.prop) + 'Identifier', // Variable and function names + 'CallExpression', // Function calls + 'ArrayExpression', // Array literals [] + 'ObjectExpression', // Object literals {} + 'Property', // Object property definitions + 'TemplateLiteral', // Template strings using backticks + 'TemplateElement', // Parts of template literals between expressions +]); + +/** + * Validate the given template string. + * @param templateStr - The template string to validate + * @throws {TemplateValidationError} If given template string is invalid + */ +export function validateTemplate(templateStr: string, allowedKeywords: string[] = []): undefined { + const expressions = getTemplateMatches(templateStr, false) ?? []; + + for (const expr of expressions) { + if (NEW_LINE_CHARS.some((nl) => expr.includes(nl))) { + throw new TemplateValidationError('Multi-line expressions are not allowed'); + } + + const ast = acorn.parse(expr, { + ecmaVersion: 2021, + sourceType: 'script', + }); + + const parentMap = new WeakMap(); + + const walkNode = (node: Node | Record): void => { + if (!node || typeof node !== 'object') return; + + // check if node type is allowed + if (node.type) { + if (!ALLOWED_NODE_TYPES.has(node.type)) { + throw new TemplateValidationError(`Invalid operation type: ${node.type}`); + } + + if (node.type === 'Identifier') { + const identifierNode = node as Identifier; + const parent = parentMap.get(node) as MemberExpression | undefined; + const isPropertyName = parent?.type === 'MemberExpression' && parent.property === node; + + // check against both blocked globals and allowed identifiers + if (!isPropertyName) { + if ( + DISALLOWED_IDENTIFIERS.has(identifierNode.name) || + (!ALLOWED_IDENTIFIERS.has(identifierNode.name) && + allowedKeywords.length && + !allowedKeywords.includes(identifierNode.name)) + ) { + throw new TemplateValidationError(`${identifierNode.name} is not defined`); + } + } + } + } + + // walk through all properties that could be nodes + for (const key of Object.keys(node)) { + const child = node[key as keyof typeof node]; + if (child && typeof child === 'object') { + if (Array.isArray(child)) { + child.forEach((item) => { + if (item && typeof item === 'object') { + parentMap.set(item, node); + walkNode(item); + } + }); + } else { + parentMap.set(child, node); + walkNode(child); + } + } + } + }; + + walkNode(ast); + } +} diff --git a/packages/builder/test/fixtures.ts b/packages/builder/test/fixtures.ts index c4e3fd14c..a54c388b5 100644 --- a/packages/builder/test/fixtures.ts +++ b/packages/builder/test/fixtures.ts @@ -2,9 +2,9 @@ import fs from 'node:fs'; import _ from 'lodash'; import * as viem from 'viem'; import { generatePrivateKey, privateKeyToAccount } from 'viem/accounts'; -import { CannonHelperContext, CannonSigner, InMemoryRegistry } from '../src'; +import { CannonSigner, ChainBuilderContext, InMemoryRegistry } from '../src'; import { ChainBuilderRuntime } from '../src/runtime'; -import { ChainBuilderContextWithHelpers, ChainBuilderRuntimeInfo } from '../src/types'; +import { ChainBuilderRuntimeInfo } from '../src/types'; const Greeter = JSON.parse(fs.readFileSync(`${__dirname}/data/Greeter.json`).toString()); @@ -31,7 +31,7 @@ export function fixtureTransactionReceipt(attrs: Partial = {}) => +export const fixtureCtx = (overrides: Partial = {}) => _.merge( { settings: {}, @@ -41,11 +41,10 @@ export const fixtureCtx = (overrides: Partial = imports: {}, chainId: 1234, package: {}, - timestamp: '1234123412', + timestamp: 1234123412, }, - CannonHelperContext, overrides - ) as ChainBuilderContextWithHelpers; + ) as ChainBuilderContext; export const fixtureContractArtifact = (contractName = 'Greeter') => ({ contractName, diff --git a/packages/builder/tsconfig.json b/packages/builder/tsconfig.json index 13c017a36..78c5e6235 100644 --- a/packages/builder/tsconfig.json +++ b/packages/builder/tsconfig.json @@ -1,7 +1,7 @@ { "compilerOptions": { "noEmit": true, - "target": "ES2020", + "target": "ES2021", "module": "CommonJS", "moduleResolution": "node", "declaration": true, @@ -11,9 +11,18 @@ "allowSyntheticDefaultImports": true, "esModuleInterop": true, "resolveJsonModule": true, - "rootDirs": ["./src"], + "rootDirs": [ + "./src" + ], "skipLibCheck": true }, - "include": ["./src", "../cli/run.ts", "../cli/import-from.ts"], - "exclude": ["dist", "node_modules"] + "include": [ + "./src", + "../cli/run.ts", + "../cli/import-from.ts" + ], + "exclude": [ + "dist", + "node_modules" + ] } diff --git a/packages/cli/src/commands/build.ts b/packages/cli/src/commands/build.ts index f638561d6..64a69534e 100644 --- a/packages/cli/src/commands/build.ts +++ b/packages/cli/src/commands/build.ts @@ -34,6 +34,7 @@ import { PackageSpecification } from '../types'; import { log, warn, error } from '../util/console'; import { hideApiKey } from '../util/provider'; import { createWriteScript, WriteScriptFormat } from '../write-script/write'; +import { mergeErrors } from '../util/merge-errors'; interface Params { provider: viem.PublicClient; @@ -351,13 +352,13 @@ export async function build({ let newState; try { newState = await cannonBuild(runtime, def, oldDeployData && !wipe ? oldDeployData.state : {}, initialCtx); - } catch (err: any) { + } catch (buildErr: any) { const dumpData = { def: def.toJson(), initialCtx, oldState: oldDeployData?.state || null, activeCtx: runtime.ctx, - error: _.pick(err, Object.getOwnPropertyNames(err)), + error: _.pick(buildErr, Object.getOwnPropertyNames(buildErr)), }; const dumpFilePath = path.join(cliSettings.cannonDirectory, 'dumps', new Date().toISOString() + '.json'); @@ -367,9 +368,11 @@ export async function build({ spaces: 2, }); - throw new Error( - `${err.toString()}\n\nAn error occured during build. A file with comprehensive information pertaining to this error has been written to ${dumpFilePath}. Please include this file when reporting an issue.` + const cliError = new Error( + `An error occured during build. A file with comprehensive information pertaining to this error has been written to ${dumpFilePath}. Please include this file when reporting an issue.` ); + + throw mergeErrors(cliError, buildErr); } if (writeScript) { diff --git a/packages/cli/src/custom-steps/run.ts b/packages/cli/src/custom-steps/run.ts index 46937bf6a..76983d14b 100644 --- a/packages/cli/src/custom-steps/run.ts +++ b/packages/cli/src/custom-steps/run.ts @@ -115,22 +115,22 @@ const runAction = { configInject(ctx: ChainBuilderContext, config: Config) { config = _.cloneDeep(config); - config.exec = template(config.exec)(ctx); + config.exec = template(config.exec, ctx); config.modified = _.map(config.modified, (v) => { - return template(v)(ctx); + return template(v, ctx); }) as [string, ...string[]]; if (config.args) { config.args = _.map(config.args, (v) => { // just convert it to a JSON string when. This will allow parsing of complicated nested structures - return JSON.parse(JSON.stringify(template(v)(ctx))); + return JSON.parse(JSON.stringify(template(v, ctx))); }); } if (config.env) { config.env = _.map(config.env, (v) => { - return template(v)(ctx); + return template(v, ctx); }); } diff --git a/packages/cli/src/util/merge-errors.ts b/packages/cli/src/util/merge-errors.ts new file mode 100644 index 000000000..a625c99a3 --- /dev/null +++ b/packages/cli/src/util/merge-errors.ts @@ -0,0 +1,10 @@ +export function mergeErrors(err: Error, cause: Error) { + const merged = new Error(cause.message + '\n' + err.message); + merged.stack = merged.toString() + '\n' + _getErrorStack(cause) + '\n' + _getErrorStack(err); + return merged; +} + +function _getErrorStack(err: Error) { + const messageLength = err.toString().length; + return err.stack?.slice(messageLength + 1); +} diff --git a/packages/hardhat-cannon/src/internal/augment-provider.ts b/packages/hardhat-cannon/src/internal/augment-provider.ts index 0facb92be..34e08426d 100644 --- a/packages/hardhat-cannon/src/internal/augment-provider.ts +++ b/packages/hardhat-cannon/src/internal/augment-provider.ts @@ -1,7 +1,7 @@ -import { traceActions } from '@usecannon/builder'; -import { BuildOutputs, CannonProvider } from '../types'; +import { ChainArtifacts, traceActions } from '@usecannon/builder'; +import { CannonProvider } from '../types'; -export function augmentProvider(originalProvider: CannonProvider, outputs: BuildOutputs) { +export function augmentProvider(originalProvider: CannonProvider, outputs: ChainArtifacts) { const provider = originalProvider.extend(traceActions(outputs) as any) as unknown as CannonProvider; // Monkey patch to call original cannon extended estimateGas fn diff --git a/packages/hardhat-cannon/src/internal/cannon.ts b/packages/hardhat-cannon/src/internal/cannon.ts index 30691156e..e726e1bf3 100644 --- a/packages/hardhat-cannon/src/internal/cannon.ts +++ b/packages/hardhat-cannon/src/internal/cannon.ts @@ -1,5 +1,5 @@ import path from 'node:path'; -import { ContractMap } from '@usecannon/builder'; +import { ContractMap, ChainArtifacts } from '@usecannon/builder'; import { build, getProvider, loadCannonfile, PackageSettings } from '@usecannon/cli'; import { SUBTASK_GET_ARTIFACT } from '../task-names'; import { getHardhatSigners } from './get-hardhat-signers'; @@ -9,7 +9,6 @@ import * as viem from 'viem'; import type { CannonRpcNode } from '@usecannon/cli/src/rpc'; import type { HardhatRuntimeEnvironment } from 'hardhat/types'; -import type { BuildOutputs } from '../types'; interface BuildOptions { hre: HardhatRuntimeEnvironment; @@ -64,7 +63,7 @@ export async function cannonBuild(options: BuildOptions) { return { outputs }; } -export function getContractDataFromOutputs(outputs: BuildOutputs, contractName: string) { +export function getContractDataFromOutputs(outputs: ChainArtifacts, contractName: string) { const contracts = getAllContractDatasFromOutputs(outputs); const contract = contracts[contractName]; @@ -76,13 +75,13 @@ export function getContractDataFromOutputs(outputs: BuildOutputs, contractName: return contract; } -export function getAllContractDatasFromOutputs(outputs: BuildOutputs) { +export function getAllContractDatasFromOutputs(outputs: ChainArtifacts) { const result: ContractMap = {}; _setContractsDatasFromOutputs(outputs, result); return result; } -function _setContractsDatasFromOutputs(outputs: BuildOutputs, result: ContractMap, scope?: string) { +function _setContractsDatasFromOutputs(outputs: ChainArtifacts, result: ContractMap, scope?: string) { // this logic handles deeply nested imports such as synthetix.oracle_manager // which is really outputs.imports.synthetix.imports.oracle_manager const from = scope diff --git a/packages/hardhat-cannon/src/type-extensions.ts b/packages/hardhat-cannon/src/type-extensions.ts index e7e448dd4..8fba896a0 100644 --- a/packages/hardhat-cannon/src/type-extensions.ts +++ b/packages/hardhat-cannon/src/type-extensions.ts @@ -1,7 +1,7 @@ import type { HardhatNetworkConfig } from 'hardhat/types/config'; -import type { BuildOutputs } from './types'; import type { getContract, getContractData, getAllContractDatas } from './utils'; import type * as viem from 'viem'; +import { ChainArtifacts } from '@usecannon/builder'; declare module 'hardhat/types/config' { export interface HardhatUserConfig { @@ -32,7 +32,7 @@ declare module 'hardhat/types/runtime' { export interface HardhatRuntimeEnvironment { cannon: { /** Output generated on last build */ - outputs?: BuildOutputs; + outputs?: ChainArtifacts; provider?: viem.PublicClient & viem.TestClient & viem.WalletClient; signers?: viem.Account[]; /** Get the abi and address from a specific contract */ diff --git a/packages/hardhat-cannon/src/types.ts b/packages/hardhat-cannon/src/types.ts index fa4dd90eb..14e6518a0 100644 --- a/packages/hardhat-cannon/src/types.ts +++ b/packages/hardhat-cannon/src/types.ts @@ -1,5 +1,3 @@ import type * as viem from 'viem'; -import type { ChainBuilderContext } from '@usecannon/builder'; -export type BuildOutputs = Partial>; export type CannonProvider = viem.PublicClient & viem.TestClient & viem.WalletClient; diff --git a/packages/website/cypress.config.ts b/packages/website/cypress.config.ts index 923177121..381d7f370 100644 --- a/packages/website/cypress.config.ts +++ b/packages/website/cypress.config.ts @@ -5,10 +5,10 @@ import { defineConfig } from 'cypress'; export default defineConfig({ e2e: { - defaultCommandTimeout: 1000_000, - pageLoadTimeout: 1000_000, - requestTimeout: 1000_000, - responseTimeout: 1000_000, + defaultCommandTimeout: 100_000, + pageLoadTimeout: 100_000, + requestTimeout: 100_000, + responseTimeout: 300_000, specPattern: '**/*.feature', baseUrl: 'http://localhost:3000', video: false, // GH provides 2 CPUs, and cypress video eats one up, ref https://github.com/cypress-io/cypress/issues/20468#issuecomment-1307608025 diff --git a/packages/website/cypress/integration/StageTxns.feature b/packages/website/cypress/integration/StageTxns.feature index c5c3da484..01ef33c92 100644 --- a/packages/website/cypress/integration/StageTxns.feature +++ b/packages/website/cypress/integration/StageTxns.feature @@ -1,13 +1,13 @@ Feature: Stage Transactions Scenario: User navigates to the deploy page without connecting a wallet Given User opens the "/deploy" page - Then View renders a "p" displaying the text "Queue, sign, and execute deployments using a" - * View renders a "p" displaying the text "Connect a wallet and select a Safe from the dropdown above." + Then View renders a "p" displaying the text "Queue, sign, and execute deployments" + * View renders a "button" displaying the text "Select Safe" Scenario: User navigates to the deploy page with a connected wallet Given User opens the "/deploy" page * Wallet is connected - Then View renders a "p" displaying the text "Queue, sign, and execute deployments using a" + Then View renders a "p" displaying the text "Queue, sign, and execute deployments" @skip Scenario: User stages transactions from the interact page @@ -41,6 +41,7 @@ Feature: Stage Transactions When User clicks on the button with "aria-label" "queue-txs" Then View renders a "header" displaying the text "Stage Transactions to a Safe" When User types and select the safe "11155111:0xfD050037C9039cE7b4A3213E3645BC1ba6eA0c97" + When View contains the "target-input" input When User types "owned-greeter" in the "target-input" input When User clicks on the button with "aria-label" "Add Transaction" * User selects and clicks on the contract with name "Greeter" of the element # 1 diff --git a/packages/website/cypress/step-definitions/base.ts b/packages/website/cypress/step-definitions/base.ts index ead7cdfa7..8c13e7006 100644 --- a/packages/website/cypress/step-definitions/base.ts +++ b/packages/website/cypress/step-definitions/base.ts @@ -39,3 +39,7 @@ Then('URL includes {string}', (path: string) => { Then('View renders a {string} displaying the text {string}', (element: string, text: string) => { cy.get(element).contains(text); }); + +Then('View contains the {string} input', (input: string) => { + cy.get(`input[name="${input}"]`).should('be.visible'); +}); diff --git a/packages/website/cypress/step-definitions/stage-txns-drawer.ts b/packages/website/cypress/step-definitions/stage-txns-drawer.ts index 188b45cd0..0df07337b 100644 --- a/packages/website/cypress/step-definitions/stage-txns-drawer.ts +++ b/packages/website/cypress/step-definitions/stage-txns-drawer.ts @@ -1,18 +1,27 @@ import { When, Then } from '@badeball/cypress-cucumber-preprocessor'; When('User types and select the safe {string}', (text: string) => { - cy.get('input[role="combobox"]').type(text); - cy.get('input[role="combobox"]').type('{enter}'); + const [chainId, address] = text.split(':'); - const chainId = text.split(':')[0]; - const address = text.split(':')[1]; + // Click the Select Safe button to open the dialog + cy.contains('button', 'Select Safe').click(); - cy.get('[data-test-id="selected-safe-container"]').should(($container) => { - expect($container).to.exist; - expect($container).to.contain(address.slice(0, 6)); - expect($container).to.contain(address.slice(-4)); - expect($container).to.contain(chainId); - }); + // Type chain ID in the first input + cy.get('[data-testid="safe-chain-input"]').type(chainId); + + // Type address in the second input + cy.get('[data-testid="safe-address-input"]').type(address); + cy.get('[data-testid="safe-address-input"]').type('{enter}'); + + // Verify the selected safe is displayed correctly with the right content + cy.get('[data-testid="selected-safe"]') + .should('exist') + .and('be.visible') + .within(() => { + // Check for the first 6 and last 4 characters of the address + cy.contains(address.slice(0, 6)).should('exist'); + cy.contains(address.slice(-4)).should('exist'); + }); }); When('User closes the queue txns drawer', () => { diff --git a/packages/website/src/components/ui/dialog.tsx b/packages/website/src/components/ui/dialog.tsx index b8bfc3356..d2e4c0a58 100644 --- a/packages/website/src/components/ui/dialog.tsx +++ b/packages/website/src/components/ui/dialog.tsx @@ -36,7 +36,7 @@ const DialogContent = React.forwardRef< s.currentSafe); const safeAddresses = useStore((s) => s.safeAddresses); const setCurrentSafe = useStore((s) => s.setCurrentSafe); const [inputErrorText, setInputErrorText] = useState(''); + const [isDialogOpen, setIsDialogOpen] = useState(false); + const [newSafeInput, setNewSafeInput] = useState(''); - // This state prevents the initialization useEffect (which sets the selected safe from the url or the currentSafe) - // from running when clearing the input - // It's set to true when clearing, which allows us to: - // 1. Set currentSafe to null - // 2. Wait for the router to clear chainId and address query params - // 3. Reset isClearing to false, allowing normal behavior to resume const [isClearing, setIsClearing] = useState(false); const deleteSafe = useStore((s) => s.deleteSafe); @@ -80,94 +69,64 @@ export function SafeAddressInput() { walletSafes.filter((s: any) => !includes(safeAddresses, s)) ); - // If the user puts a correct address in the input, update the url - const handleNewOrSelectedSafe = useCallback( - async (safeString: string) => { - if (safeString == '') { - setIsClearing(true); - setCurrentSafe(null); - await router.push({ - pathname: router.pathname, - query: omit(router.query, ['chainId', 'address']), - }); - setIsClearing(false); - return; - } - - if (!isValidSafeString(safeString)) { - return; - } - const parsedSafeInput = parseSafe(safeString); - - if (!isValidSafe(parsedSafeInput, chains)) { - return; - } - + const handleNewOrSelectedSafe = async (safeString: string) => { + if (safeString == '') { + setIsClearing(true); + setCurrentSafe(null); await router.push({ pathname: router.pathname, - query: { - ...router.query, - chainId: parsedSafeInput.chainId.toString(), - address: parsedSafeInput.address, - }, + query: omit(router.query, ['chainId', 'address']), }); - }, - [chains, router, setCurrentSafe] - ); + setIsClearing(false); + return; + } - function handleSafeDelete(safeString: SafeString) { if (!isValidSafeString(safeString)) { return; } - deleteSafe(parseSafe(safeString)); - } + const parsedSafeInput = parseSafe(safeString); - const chakraStyles: ChakraStylesConfig< - SafeOption, - boolean, - GroupBase - > = { - container: (provided) => ({ - ...provided, - borderColor: !currentSafe ? 'teal.700' : 'gray.700', - background: 'black', - cursor: 'pointer', - }), - menuList: (provided) => ({ - ...provided, - borderColor: 'whiteAlpha.400', - background: 'black', - py: 0, - }), - groupHeading: (provided) => ({ - ...provided, - background: 'black', - }), - option: (provided) => ({ - ...provided, - background: 'black', - _selected: { - bg: 'gray.800', - }, - _hover: { - bg: 'gray.900', - }, - }), - noOptionsMessage: () => ({ - height: 2, - }), - dropdownIndicator: (provided) => ({ - ...provided, - background: 'black', - }), - control: (provided) => ({ - ...provided, - '& hr.chakra-divider': { - display: 'none', + if (!isValidSafe(parsedSafeInput, chains)) { + return; + } + + await router.push({ + pathname: router.pathname, + query: { + ...router.query, + chainId: parsedSafeInput.chainId.toString(), + address: parsedSafeInput.address, }, - }), + }); + setIsDialogOpen(false); }; + function handleSafeDelete(safeString: SafeString) { + if (!isValidSafeString(safeString)) { + return; + } + const parsedSafe = parseSafe(safeString); + deleteSafe(parsedSafe); + + // If we're deleting the currently selected safe, clear it and redirect + if ( + currentSafe && + currentSafe.chainId === parsedSafe.chainId && + currentSafe.address === parsedSafe.address + ) { + setIsClearing(true); + void router + .push({ + pathname: '/deploy', + query: {}, + }) + .then(() => { + setCurrentSafe(null); + setIsClearing(false); + }); + } + } + // Load the safe address from url useEffect(() => { const loadSafeFromUrl = async () => { @@ -185,7 +144,11 @@ export function SafeAddressInput() { ); } - if (!deepEqual(currentSafe, safeFromUrl)) { + if ( + !currentSafe || + currentSafe.chainId !== safeFromUrl.chainId || + currentSafe.address !== safeFromUrl.address + ) { setCurrentSafe(safeFromUrl); } @@ -201,10 +164,16 @@ export function SafeAddressInput() { } }; - void loadSafeFromUrl(); + // eslint-disable-next-line @typescript-eslint/no-floating-promises + loadSafeFromUrl().catch((error: any) => { + toast.error('Error loading safe from URL', { + description: error.message || 'An unknown error occurred', + }); + }); }, [ chains, currentSafe, + // eslint-disable-next-line @typescript-eslint/no-floating-promises handleNewOrSelectedSafe, isClearing, prependSafeAddress, @@ -214,158 +183,249 @@ export function SafeAddressInput() { switchChain, ]); + const handleAddNewSafe = async () => { + setInputErrorText(''); + const isValid = isValidSafeFromSafeString(newSafeInput, chains); + if (!isValid) { + setInputErrorText( + 'Invalid Safe Address. If you are using a custom chain, add a custom provider in settings.' + ); + return; + } + await handleNewOrSelectedSafe(newSafeInput); + setNewSafeInput(''); + }; + return ( - - - ''} - isClearable - options={[ - { - label: 'Connected Safes', - options: safeOptions, - }, - { - label: 'Owned Safes', - options: walletSafeOptions, - }, - ]} - onChange={(selected) => - handleNewOrSelectedSafe( - (selected as SingleValue)?.value || '' - ) - } - onCreateOption={handleNewOrSelectedSafe} - // eslint-disable-next-line @typescript-eslint/ban-ts-comment - //@ts-ignore-next-line - //@ts-ignore-next-line - onDeleteOption={(selected: SafeOption) => - handleSafeDelete(selected.value) - } - isValidNewOption={(safeString) => { - setInputErrorText(''); - const res = isValidSafeFromSafeString(safeString, chains); - if (!res && safeString !== '') { - setInputErrorText( - 'Invalid Safe Address. If you are using a custom chain, configure a custom PRC in the settings page.' - ); - } - return res; - }} - components={{ - Option: DeletableOption, - SingleValue: SelectedOption, - MenuList: (props) => ( - - ), - }} - /> - {inputErrorText} - +
+
+ {currentSafe ? ( + <> +
+ + + + + + {truncateAddress(currentSafe.address, 4)} + + + +

{currentSafe.address}

+
+
+
- {currentSafe && pendingServiceTransactions.count > 0 && ( - - - - )} - - ); -} + + {currentSafe.address} + +
-function SelectedOption({ - ...props -}: SingleValueProps & { selectProps?: { onDeleteOption?: any } }) { - return ( - - - {/* @notice: Tooltip is not working for this component */} - - - {truncateAddress(props.data.value.split(':')[1], 10)} - - - - - - ); -} + + + + + + +

Select Safe

+
+
+
+ + ) : ( + + )} -function DeletableOption({ - ...props -}: OptionProps & { - selectProps?: { onDeleteOption?: (value: SafeOption) => void }; -}) { - const onDelete = props.selectProps?.onDeleteOption; - const chainId = parseInt(props.data.value.split(':')[0]); - const address = props.data.value.split(':')[1]; - return ( - - - - - {truncateAddress(address, 10)} - - - - - {onDelete && props.data.isDeletable && ( - } - onClick={(evt) => { - evt.preventDefault(); - evt.stopPropagation(); - onDelete(props.data); - }} - /> - )} - - - - ); -} + + + + Select Safe + +
+
+ {safeOptions.map((option) => ( +
+ + {option.isDeletable && ( + + )} +
+ ))} -function CustomMenuList({ - children, - inputErrorText, - ...props -}: MenuListProps & { - inputErrorText: string; -}) { - return ( - - - {inputErrorText || - 'To add a Safe, enter it in the format chainId:safeAddress'} - - {children} - + {walletSafeOptions.length > 0 && ( +
+

Owned Safes

+
+ {walletSafeOptions.map((option) => ( +
{ + void handleNewOrSelectedSafe(option.value); + setIsDialogOpen(false); + }} + > + + + + + {truncateAddress( + option.value.split(':')[1], + 12 + )} + + + +

{option.value.split(':')[1]}

+
+
+
+ +
+ ))} +
+
+ )} + +
+
{ + e.preventDefault(); + void handleAddNewSafe(); + }} + > +
+
+ + + setNewSafeInput( + `${e.target.value}:${ + newSafeInput.split(':')[1] || '' + }` + ) + } + placeholder="1" + type="number" + /> +
+
+ +
+ + setNewSafeInput( + `${newSafeInput.split(':')[0] || ''}:${ + e.target.value + }` + ) + } + placeholder="0x..." + className="flex-1" + /> + +
+
+
+
+ {inputErrorText && ( +

+ {inputErrorText} +

+ )} +
+
+
+
+
+
+ + {currentSafe && pendingServiceTransactions.count > 0 && ( + + + + + + +

+ There{' '} + {pendingServiceTransactions.count === 1 + ? 'is 1 pending transaction' + : `are ${pendingServiceTransactions.count} pending transactions`}{' '} + on the Safe app. Any transactions executed using Cannon will + override transactions there. +

+
+
+
+ )} +
); } diff --git a/packages/website/src/features/Deploy/WithSafe.tsx b/packages/website/src/features/Deploy/WithSafe.tsx index 2d088e120..781589338 100644 --- a/packages/website/src/features/Deploy/WithSafe.tsx +++ b/packages/website/src/features/Deploy/WithSafe.tsx @@ -5,12 +5,17 @@ import PrepareNetwork from './PrepareNetwork'; import * as onchainStore from '../../helpers/onchain-store'; import * as multicallForwarder from '../../helpers/trusted-multicall-forwarder'; import MainContentLoading from '@/components/MainContentLoading'; +import { motion } from 'framer-motion'; +import { useConnectModal } from '@rainbow-me/rainbowkit'; +import { Button } from '@/components/ui/button'; +import { SafeAddressInput } from './SafeAddressInput'; export default function WithSafe({ children }: { children: ReactNode }) { const currentSafe = useStore((s) => s.currentSafe); // Uncomment the following line to use test with local network // const currentSafe = { chainId: 31337 }; const { isConnected } = useAccount(); + const { openConnectModal } = useConnectModal(); const onchainStoreBytecode = useBytecode({ chainId: currentSafe?.chainId, @@ -47,25 +52,54 @@ export default function WithSafe({ children }: { children: ReactNode }) { ) ) : (
-

- Queue, sign, and execute deployments using a - - {/* eslint-disable-next-line @next/next/no-img-element */} - Safe - + + + + + +

+ Queue, sign, and execute deployments

-

- {isConnected ? 'S' : 'Connect a wallet and s'}elect a Safe from the - dropdown above. +

+ {isConnected ? ( +

+ +
+ ) : ( + <> + + {' and select a Safe'} + + )}

)} diff --git a/packages/website/src/features/Packages/DeploymentExplorer.tsx b/packages/website/src/features/Packages/DeploymentExplorer.tsx index 4e9bbb945..49c09183b 100644 --- a/packages/website/src/features/Packages/DeploymentExplorer.tsx +++ b/packages/website/src/features/Packages/DeploymentExplorer.tsx @@ -1,55 +1,30 @@ import 'prismjs'; import 'prismjs/components/prism-toml'; -import React, { FC, useState } from 'react'; -import { Info } from 'lucide-react'; -import { - Tooltip, - TooltipContent, - TooltipProvider, - TooltipTrigger, -} from '@/components/ui/tooltip'; +import React, { FC } from 'react'; import { DeploymentInfo } from '@usecannon/builder/src/types'; import { useQueryIpfsDataParsed } from '@/hooks/ipfs'; -import { ContractsTable } from './ContractsTable'; -import { InvokesTable } from './InvokesTable'; -import { EventsTable } from './EventsTable'; import { extractAddressesAbis } from '@/features/Packages/utils/extractAddressesAndABIs'; import { ApiPackage } from '@usecannon/api/dist/src/types'; -import SearchInput from '@/components/SearchInput'; -import isEmpty from 'lodash/isEmpty'; import { ChainBuilderContext } from '@usecannon/builder'; import { IpfsSpinner } from '@/components/IpfsSpinner'; +import { Tabs, TabsList, TabsTrigger } from '@/components/ui/tabs'; +import { useRouter, usePathname } from 'next/navigation'; +import ContractsTab from './Tabs/ContractsTab'; +import FunctionCallsTab from './Tabs/FunctionCallsTab'; +import EventDataTab from './Tabs/EventDataTab'; export const DeploymentExplorer: FC<{ pkg: ApiPackage; }> = ({ pkg }) => { - const [contractSearchTerm, setContractSearchTerm] = useState(''); - const [invokeSearchTerm, setInvokeSearchTerm] = useState(''); - + const router = useRouter(); + const pathname = usePathname(); const deploymentData = useQueryIpfsDataParsed( pkg?.deployUrl, !!pkg?.deployUrl ); const deploymentInfo = deploymentData.data; - const settings: { [key: string]: any } = {}; - if (deploymentInfo?.def?.setting) { - for (const key in deploymentInfo.def.setting) { - if ( - deploymentInfo?.options && - deploymentInfo.options[key] !== undefined - ) { - settings[key] = { - ...deploymentInfo.def.setting[key], - option: deploymentInfo.options[key], - }; - } else { - settings[key] = { ...deploymentInfo.def.setting[key] }; - } - } - } - const stepDefinitions: string[] = [ 'deploy', 'contract', @@ -99,24 +74,6 @@ export const DeploymentExplorer: FC<{ ? mergeArtifactsContracts(deploymentInfo.state) : {}; - // Filter and sort based on search term and sort order of steps - const contractEntries = Object.entries(contractState); - const filteredContractState = Object.fromEntries( - contractEntries - .sort( - ([, { deployedOn: propA }], [, { deployedOn: propB }]) => - stepDefinitions.findIndex((val) => propA.includes(val)) - - stepDefinitions.findIndex((val) => propB.includes(val)) - ) - .filter(([, val]) => - Object.values(val).some( - (v) => - typeof v === 'string' && - v.toLowerCase().includes(contractSearchTerm.toLowerCase()) - ) - ) - ); - function mergeInvoke(obj: any, mergedInvokes: any = {}): any { for (const key in obj) { if (obj[key] && typeof obj[key] === 'object') { @@ -138,17 +95,6 @@ export const DeploymentExplorer: FC<{ ? mergeInvoke(deploymentInfo.state) : {}; - const invokeEntries = Object.entries(invokeState); - const filteredInvokeState = Object.fromEntries( - invokeEntries.filter(([, func]) => - Object.values(func).some( - (value) => - typeof value === 'string' && - value.toLowerCase().includes(invokeSearchTerm.toLowerCase()) - ) - ) - ); - const addressesAbis = deploymentInfo?.state ? extractAddressesAbis(deploymentInfo.state) : {}; @@ -182,91 +128,59 @@ export const DeploymentExplorer: FC<{ const mergedExtras = mergeExtras(deploymentInfo?.state || {}); + const getCurrentTab = () => { + if (pathname.endsWith('/calls')) return 'calls'; + if (pathname.endsWith('/event-data')) return 'event-data'; + return 'contracts'; + }; + + const handleTabChange = (value: string) => { + const basePath = pathname.split('/deployment')[0]; + router.push(`${basePath}/deployment/${value}`); + }; + return pkg?.deployUrl ? ( -
+
{deploymentData.isLoading ? (
) : deploymentInfo ? ( -
-

- {pkg.chainId === 13370 - ? 'The following operations will be executed by this package.' - : 'The following operations were executed when building this package or a package it upgraded from.'} -

- - {!isEmpty(filteredContractState) && !isEmpty(addressesAbis) && ( - <> -
-
-

- Contract Deployments -

-
-
- -
-
- -
- -
- - )} - - {!isEmpty(invokeState) && ( - <> -
-
-

- Function Calls -

-
-
- -
-
- -
- -
- - )} - - {!isEmpty(mergedExtras) && ( -
-
-

- Event Data -

- - - - - - - This includes event data captured during the build, to be - referenced in dependent operations. - - - -
-
- -
-
- )} -
+ <> +
+ + + + Contract Deployments + + Function Calls + Event Data + + +
+ +
+ {pathname.endsWith('/contracts') && ( + + )} + {pathname.endsWith('/calls') && ( + + )} + {pathname.endsWith('/event-data') && ( + + )} +
+ ) : (
Unable to retrieve deployment data diff --git a/packages/website/src/features/Packages/InvokesTable.tsx b/packages/website/src/features/Packages/InvokesTable.tsx index 1161d48ad..509febe99 100644 --- a/packages/website/src/features/Packages/InvokesTable.tsx +++ b/packages/website/src/features/Packages/InvokesTable.tsx @@ -85,35 +85,41 @@ export const InvokesTable: React.FC<{ }); return ( -
+
0 ? 'border border-border' : '' + } rounded-md overflow-x-auto`} + > - - {table.getHeaderGroups().map((headerGroup) => ( - - {headerGroup.headers.map((header) => { - const meta: any = header.column.columnDef.meta; - return ( - - - - ); - })} - - ))} - + + + ); + })} + + ))} + + )} {table.getRowModel().rows.map((row) => ( diff --git a/packages/website/src/features/Packages/Tabs/ContractsTab.tsx b/packages/website/src/features/Packages/Tabs/ContractsTab.tsx new file mode 100644 index 000000000..2287bf761 --- /dev/null +++ b/packages/website/src/features/Packages/Tabs/ContractsTab.tsx @@ -0,0 +1,68 @@ +import { FC } from 'react'; +import { ContractsTable } from '../ContractsTable'; +import SearchInput from '@/components/SearchInput'; +import { useState } from 'react'; +import isEmpty from 'lodash/isEmpty'; + +export const ContractsTab: FC<{ + contractState: any; + addressesAbis: any; + chainId: number; +}> = ({ contractState, addressesAbis, chainId }) => { + const [contractSearchTerm, setContractSearchTerm] = useState(''); + + const filteredContractState = Object.fromEntries( + Object.entries(contractState).filter(([, val]) => + Object.values(val as Record).some( + (v) => + typeof v === 'string' && + v.toLowerCase().includes(contractSearchTerm.toLowerCase()) + ) + ) + ); + + if (isEmpty(contractState) || isEmpty(addressesAbis)) { + return ( + <> +
+
+
+

+ No contracts were deployed when building this package or a + package it upgraded from. +

+
+
+
+ + ); + } + + return ( + <> +
+
+
+

+ These contracts were deployed when building this package or a + package it upgraded from. +

+
+
+ +
+
+
+ {!isEmpty(filteredContractState) && ( +
+ +
+ )} + + ); +}; + +export default ContractsTab; diff --git a/packages/website/src/features/Packages/Tabs/EventDataTab.tsx b/packages/website/src/features/Packages/Tabs/EventDataTab.tsx new file mode 100644 index 000000000..6a0bf80ce --- /dev/null +++ b/packages/website/src/features/Packages/Tabs/EventDataTab.tsx @@ -0,0 +1,73 @@ +import { FC } from 'react'; +import { EventsTable } from '../EventsTable'; +import SearchInput from '@/components/SearchInput'; +import { useState } from 'react'; +import isEmpty from 'lodash/isEmpty'; + +const searchInObject = (obj: unknown, term: string, key?: string): boolean => { + if (key && key.toLowerCase().includes(term.toLowerCase())) { + return true; + } + if (typeof obj === 'string') { + return obj.toLowerCase().includes(term.toLowerCase()); + } + if (typeof obj === 'object' && obj !== null) { + return Object.entries(obj).some(([k, value]) => + searchInObject(value, term, k) + ); + } + return false; +}; + +export const EventDataTab: FC<{ + extrasState: Record; +}> = ({ extrasState }) => { + const [searchTerm, setSearchTerm] = useState(''); + + const filteredExtrasState = Object.fromEntries( + Object.entries(extrasState).filter(([key, val]) => + searchInObject(val, searchTerm, key) + ) + ); + + if (isEmpty(extrasState)) { + return ( +
+
+
+
+

+ No event data was captured during the build. +

+
+
+
+
+ ); + } + + return ( +
+
+
+
+

+ This includes event data captured during the build, referenced in + dependent operations. +

+
+
+ +
+
+
+ {!isEmpty(filteredExtrasState) && ( +
+ +
+ )} +
+ ); +}; + +export default EventDataTab; diff --git a/packages/website/src/features/Packages/Tabs/FunctionCallsTab.tsx b/packages/website/src/features/Packages/Tabs/FunctionCallsTab.tsx new file mode 100644 index 000000000..977764ac9 --- /dev/null +++ b/packages/website/src/features/Packages/Tabs/FunctionCallsTab.tsx @@ -0,0 +1,64 @@ +import { FC } from 'react'; +import { InvokesTable } from '../InvokesTable'; +import SearchInput from '@/components/SearchInput'; +import { useState } from 'react'; +import isEmpty from 'lodash/isEmpty'; +import { ChainBuilderContext } from '@usecannon/builder'; + +export const FunctionCallsTab: FC<{ + invokeState: ChainBuilderContext['txns']; + chainId: number; +}> = ({ invokeState, chainId }) => { + const [invokeSearchTerm, setInvokeSearchTerm] = useState(''); + + const filteredInvokeState = Object.fromEntries( + Object.entries(invokeState).filter(([, func]) => + Object.values(func).some( + (value) => + typeof value === 'string' && + value.toLowerCase().includes(invokeSearchTerm.toLowerCase()) + ) + ) + ); + + if (isEmpty(invokeState)) { + return ( + <> +
+
+
+

+ No functions were invoked when building this package or a + package it upgraded from. +

+
+
+
+ + ); + } + + return ( + <> +
+
+
+

+ These functions were invoked when building this package or a + package it upgraded from. +

+
+
+ +
+
+
+ +
+ +
+ + ); +}; + +export default FunctionCallsTab; diff --git a/packages/website/src/features/Search/PackageCard/Chain.tsx b/packages/website/src/features/Search/PackageCard/Chain.tsx index 011fbdc94..527ebe923 100644 --- a/packages/website/src/features/Search/PackageCard/Chain.tsx +++ b/packages/website/src/features/Search/PackageCard/Chain.tsx @@ -1,5 +1,11 @@ import { FC, useMemo } from 'react'; import { useCannonChains } from '@/providers/CannonProvidersProvider'; +import { + Tooltip, + TooltipContent, + TooltipProvider, + TooltipTrigger, +} from '@/components/ui/tooltip'; export type ChainData = { id: number; @@ -9,6 +15,20 @@ export type ChainData = { hideId?: boolean; }; +const ChainIcon: FC<{ id: number; color: string }> = ({ id, color }) => + id === 13370 ? ( + Cannon + ) : ( +
+ ); + const Chain: FC<{ id: number; isSmall?: boolean; @@ -20,29 +40,34 @@ const Chain: FC<{ const name = chain?.name || 'Unknown Chain'; const color = chainMetadata[+id]?.color || '#4B5563'; + const icon = ; + return (
- {id === 13370 ? ( - Cannon + {isSmall ? ( + + + {icon} + +

+ {name} + {!hideId ? ` (ID ${id})` : ''} +

+
+
+
) : ( -
- )} - {!isSmall && ( -
- {name} - {!hideId && ( - - ID {id} - - )} -
+ <> + {icon} +
+ {name} + {!hideId && ( + + ID {id} + + )} +
+ )}
); diff --git a/packages/website/src/features/Search/PackageCard/PackageCardExpandable.tsx b/packages/website/src/features/Search/PackageCard/PackageCardExpandable.tsx index 6b579be43..5ca301628 100644 --- a/packages/website/src/features/Search/PackageCard/PackageCardExpandable.tsx +++ b/packages/website/src/features/Search/PackageCard/PackageCardExpandable.tsx @@ -52,7 +52,10 @@ export const PackageCardExpandable: FC = ({ isOpen && 'text-muted-foreground' )} > - Only latest mainnet deployments + + Filter for latest on mainnet + + Filter for latest

diff --git a/packages/website/src/helpers/ethereum.ts b/packages/website/src/helpers/ethereum.ts index edec32685..c8b9baeef 100644 --- a/packages/website/src/helpers/ethereum.ts +++ b/packages/website/src/helpers/ethereum.ts @@ -182,7 +182,7 @@ export async function contractTransaction( * truncateAddress('0x1234567890abcdef1234567890abcdef12345678') // '0x123456...12345678' */ export const truncateAddress = (address: string, length = 6) => { - return `${address.slice(0, length)}...${address.slice(-length)}`; + return `${address.slice(0, length + 2)}...${address.slice(-length)}`; }; /** diff --git a/packages/website/src/pages/deploy/deployLayout.tsx b/packages/website/src/pages/deploy/deployLayout.tsx index 11a500e32..93fa5163f 100644 --- a/packages/website/src/pages/deploy/deployLayout.tsx +++ b/packages/website/src/pages/deploy/deployLayout.tsx @@ -2,7 +2,6 @@ import dynamic from 'next/dynamic'; import { ReactNode } from 'react'; -import { Box, Flex, useBreakpointValue } from '@chakra-ui/react'; import { useRouter } from 'next/router'; import { links } from '@/constants/links'; import { NavLink } from '@/components/NavLink'; @@ -11,6 +10,7 @@ import ClientOnly from '@/components/ClientOnly'; import { useParams } from 'next/navigation'; import PageLoading from '@/components/PageLoading'; import { SidebarLayout } from '@/components/layouts/SidebarLayout'; +import { useMediaQuery } from 'usehooks-ts'; const NoSSRWithSafe = dynamic(() => import('@/features/Deploy/WithSafe'), { ssr: false, @@ -19,40 +19,23 @@ const NoSSRWithSafe = dynamic(() => import('@/features/Deploy/WithSafe'), { export default function DeployLayout({ children }: { children: ReactNode }) { const params = useParams(); const pathname = useRouter().pathname; - - const isLarge = useBreakpointValue({ base: false, lg: true }); + const isLarge = useMediaQuery('(min-width: 1024px)'); if (params == null) { return ; } return ( - +
{/* Header */} - - - +
+
+
- - +
+
- {isLarge && 'Queue '} Deployment + Queue Deployment Stage{isLarge && ' Transactions'} - - - +
+
+
{/* Body */} {children} -
+
); } diff --git a/packages/website/src/pages/packages/[name]/[tag]/[variant]/deployment/calls.tsx b/packages/website/src/pages/packages/[name]/[tag]/[variant]/deployment/calls.tsx new file mode 100644 index 000000000..a9ce51a00 --- /dev/null +++ b/packages/website/src/pages/packages/[name]/[tag]/[variant]/deployment/calls.tsx @@ -0,0 +1,66 @@ +import { ReactElement } from 'react'; +import { useRouter } from 'next/router'; +import { NextSeo } from 'next-seo'; +import defaultSEO from '@/constants/defaultSeo'; +import NameTagVariantLayout from '../NameTagVariantLayout'; +import { PackageReference } from '@usecannon/builder'; +import { useCannonChains } from '@/providers/CannonProvidersProvider'; +import { DeploymentTab } from '@/features/Packages/Tabs/DeploymentTab'; + +function generateMetadata({ + params, + getChainById, +}: { + params: { name: string; tag: string; variant: string }; + getChainById: ReturnType['getChainById']; +}) { + const [chainId, preset] = PackageReference.parseVariant(params.variant); + const chain = getChainById(chainId); + + const title = `${params.name} on ${chain?.name} Function Calls | Cannon`; + + const description = `Explore the Cannon package function calls for ${ + params.name + }${params.tag !== 'latest' ? `:${params.tag}` : ''}${ + preset !== 'main' ? `@${preset}` : '' + } on ${chain?.name} (ID: ${chainId})`; + + return { + title, + description, + openGraph: { + title, + description, + }, + }; +} + +export default function Calls() { + const params = useRouter().query; + const { getChainById } = useCannonChains(); + const metadata = generateMetadata({ params: params as any, getChainById }); + + return ( + <> + + + + ); +} + +Calls.getLayout = function getLayout(page: ReactElement) { + return {page}; +}; diff --git a/packages/website/src/pages/packages/[name]/[tag]/[variant]/deployment/contracts.tsx b/packages/website/src/pages/packages/[name]/[tag]/[variant]/deployment/contracts.tsx new file mode 100644 index 000000000..9dade5f0a --- /dev/null +++ b/packages/website/src/pages/packages/[name]/[tag]/[variant]/deployment/contracts.tsx @@ -0,0 +1,66 @@ +import { ReactElement } from 'react'; +import { useRouter } from 'next/router'; +import { NextSeo } from 'next-seo'; +import defaultSEO from '@/constants/defaultSeo'; +import NameTagVariantLayout from '../NameTagVariantLayout'; +import { PackageReference } from '@usecannon/builder'; +import { useCannonChains } from '@/providers/CannonProvidersProvider'; +import { DeploymentTab } from '@/features/Packages/Tabs/DeploymentTab'; + +function generateMetadata({ + params, + getChainById, +}: { + params: { name: string; tag: string; variant: string }; + getChainById: ReturnType['getChainById']; +}) { + const [chainId, preset] = PackageReference.parseVariant(params.variant); + const chain = getChainById(chainId); + + const title = `${params.name} on ${chain?.name} Contract Deployments | Cannon`; + + const description = `Explore the Cannon package contract deployments for ${ + params.name + }${params.tag !== 'latest' ? `:${params.tag}` : ''}${ + preset !== 'main' ? `@${preset}` : '' + } on ${chain?.name} (ID: ${chainId})`; + + return { + title, + description, + openGraph: { + title, + description, + }, + }; +} + +export default function Contracts() { + const params = useRouter().query; + const { getChainById } = useCannonChains(); + const metadata = generateMetadata({ params: params as any, getChainById }); + + return ( + <> + + + + ); +} + +Contracts.getLayout = function getLayout(page: ReactElement) { + return {page}; +}; diff --git a/packages/website/src/pages/packages/[name]/[tag]/[variant]/deployment/event-data.tsx b/packages/website/src/pages/packages/[name]/[tag]/[variant]/deployment/event-data.tsx new file mode 100644 index 000000000..3149e6d92 --- /dev/null +++ b/packages/website/src/pages/packages/[name]/[tag]/[variant]/deployment/event-data.tsx @@ -0,0 +1,66 @@ +import { ReactElement } from 'react'; +import { useRouter } from 'next/router'; +import { NextSeo } from 'next-seo'; +import defaultSEO from '@/constants/defaultSeo'; +import NameTagVariantLayout from '../NameTagVariantLayout'; +import { PackageReference } from '@usecannon/builder'; +import { useCannonChains } from '@/providers/CannonProvidersProvider'; +import { DeploymentTab } from '@/features/Packages/Tabs/DeploymentTab'; + +function generateMetadata({ + params, + getChainById, +}: { + params: { name: string; tag: string; variant: string }; + getChainById: ReturnType['getChainById']; +}) { + const [chainId, preset] = PackageReference.parseVariant(params.variant); + const chain = getChainById(chainId); + + const title = `${params.name} on ${chain?.name} Event Data | Cannon`; + + const description = `Explore the Cannon package event data for ${ + params.name + }${params.tag !== 'latest' ? `:${params.tag}` : ''}${ + preset !== 'main' ? `@${preset}` : '' + } on ${chain?.name} (ID: ${chainId})`; + + return { + title, + description, + openGraph: { + title, + description, + }, + }; +} + +export default function EventData() { + const params = useRouter().query; + const { getChainById } = useCannonChains(); + const metadata = generateMetadata({ params: params as any, getChainById }); + + return ( + <> + + + + ); +} + +EventData.getLayout = function getLayout(page: ReactElement) { + return {page}; +}; diff --git a/packages/website/src/pages/packages/[name]/[tag]/[variant]/deployment/index.tsx b/packages/website/src/pages/packages/[name]/[tag]/[variant]/deployment/index.tsx index b170cb601..d727a4c51 100644 --- a/packages/website/src/pages/packages/[name]/[tag]/[variant]/deployment/index.tsx +++ b/packages/website/src/pages/packages/[name]/[tag]/[variant]/deployment/index.tsx @@ -1,9 +1,8 @@ -import dynamic from 'next/dynamic'; import { useRouter } from 'next/router'; import { NextSeo } from 'next-seo'; import defaultSEO from '@/constants/defaultSeo'; import TagVariantLayout from '../NameTagVariantLayout'; -import { ReactElement } from 'react'; +import { ReactElement, useEffect } from 'react'; import { PackageReference } from '@usecannon/builder'; import { useCannonChains } from '@/providers/CannonProvidersProvider'; @@ -35,20 +34,21 @@ function generateMetadata({ }; } -const DeploymentTab = dynamic( - async () => { - return import('@/features/Packages/Tabs/DeploymentTab'); - }, - { - ssr: false, - } -); - export default function Deployment() { - const params = useRouter().query; + const router = useRouter(); + const params = router.query; const { getChainById } = useCannonChains(); const metadata = generateMetadata({ params: params as any, getChainById }); + // Redirect to contracts tab + useEffect(() => { + if (router.isReady) { + void router.replace( + `/packages/${params.name}/${params.tag}/${params.variant}/deployment/contracts` + ); + } + }, [router.isReady, params.name, params.tag, params.variant]); + return ( <> - ); } diff --git a/packages/website/src/styles/globals.css b/packages/website/src/styles/globals.css index 73aaa1a31..41c9ad62c 100644 --- a/packages/website/src/styles/globals.css +++ b/packages/website/src/styles/globals.css @@ -38,7 +38,7 @@ --sidebar-ring: 217.2 91.2% 59.8%; /* Header */ - --header-height: 105px; + --header-height: 106px; @media (min-width: 768px) { --header-height: 124px; } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 84dbaef4d..b3c24a744 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -232,6 +232,9 @@ importers: '@usecannon/web-solc': specifier: 0.5.1 version: 0.5.1 + acorn: + specifier: ^8.14.0 + version: 8.14.0 axios: specifier: ^1.7.2 version: 1.7.5(debug@4.3.6) @@ -246,7 +249,10 @@ importers: version: 4.1.2 debug: specifier: ^4.3.6 - version: 4.3.6 + version: 4.3.6(supports-color@8.1.1) + deep-freeze: + specifier: ^0.0.1 + version: 0.0.1 form-data: specifier: ^4.0.0 version: 4.0.0 @@ -262,6 +268,12 @@ importers: promise-events: specifier: ^0.2.4 version: 0.2.4 + rfdc: + specifier: ^1.4.1 + version: 1.4.1 + ses: + specifier: ^1.10.0 + version: 1.10.0 typestub-ipfs-only-hash: specifier: ^4.0.0 version: 4.0.0(encoding@0.1.13) @@ -287,6 +299,9 @@ importers: '@types/debug': specifier: ^4.1.12 version: 4.1.12 + '@types/deep-freeze': + specifier: ^0.1.5 + version: 0.1.5 '@types/jest': specifier: ^29.5.12 version: 29.5.12 @@ -337,7 +352,7 @@ importers: version: 12.1.0 debug: specifier: ^4.3.6 - version: 4.3.6 + version: 4.3.6(supports-color@8.1.1) eth-provider: specifier: ^0.13.6 version: 0.13.7(bufferutil@4.0.8)(utf-8-validate@5.0.10) @@ -455,7 +470,7 @@ importers: version: 4.1.2 debug: specifier: ^4.3.6 - version: 4.3.6 + version: 4.3.6(supports-color@8.1.1) fs-extra: specifier: ^11.2.0 version: 11.2.0 @@ -703,7 +718,7 @@ importers: version: 0.2.6 axios: specifier: ^1.7.7 - version: 1.7.7(debug@4.4.0) + version: 1.7.7(debug@4.3.7) get-port-please: specifier: ^3.1.2 version: 3.1.2 @@ -727,7 +742,7 @@ importers: version: 2.0.0(@types/node@22.7.5)(typescript@5.5.4) vitest: specifier: ^2.1.8 - version: 2.1.8(@types/node@22.7.5)(sass@1.77.8)(terser@5.37.0) + version: 2.1.8(@types/node@22.7.5)(sass@1.77.8)(terser@5.36.0) packages/website: dependencies: @@ -847,7 +862,7 @@ importers: version: 9.1.0(bufferutil@4.0.8)(typescript@5.5.4)(utf-8-validate@5.0.10)(zod@3.23.8) '@sentry/nextjs': specifier: ^8.20.0 - version: 8.26.0(@opentelemetry/api@1.9.0)(@opentelemetry/core@1.27.0(@opentelemetry/api@1.9.0))(@opentelemetry/instrumentation@0.52.1(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@1.27.0(@opentelemetry/api@1.9.0))(encoding@0.1.13)(next@14.2.6(@babel/core@7.25.2)(@opentelemetry/api@1.9.0)(babel-plugin-macros@3.1.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.77.8))(react@18.3.1)(webpack@5.94.0(esbuild@0.23.1)) + version: 8.26.0(@opentelemetry/api@1.9.0)(@opentelemetry/core@1.25.1(@opentelemetry/api@1.9.0))(@opentelemetry/instrumentation@0.52.1(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@1.25.1(@opentelemetry/api@1.9.0))(encoding@0.1.13)(next@14.2.6(@babel/core@7.25.2)(@opentelemetry/api@1.9.0)(babel-plugin-macros@3.1.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.77.8))(react@18.3.1)(webpack@5.94.0(esbuild@0.23.1)) '@synthetixio/router': specifier: ^3.4.0 version: 3.4.0(hardhat@2.22.9(bufferutil@4.0.8)(ts-node@10.9.2(@types/node@20.3.2)(typescript@5.5.4))(typescript@5.5.4)(utf-8-validate@5.0.10))(solc@0.8.26) @@ -1301,10 +1316,6 @@ packages: resolution: {integrity: sha512-z88xeGxnzehn2sqZ8UdGQEvYErF1odv2CftxInpSYJt6uHuPe9YjahKZITGs3l5LeI9d2ROG+obuDAoSlqbNfQ==} engines: {node: '>=6.9.0'} - '@babel/code-frame@7.26.2': - resolution: {integrity: sha512-RJlIHRueQgwWitWgF8OdFYGZX328Ax5BCemNGlqHfplnRT9ESi8JkFlvaVYbS+UubVY6dpv87Fs2u5M29iNFVQ==} - engines: {node: '>=6.9.0'} - '@babel/compat-data@7.25.4': resolution: {integrity: sha512-+LGRog6RAsCJrrrg/IO6LGmpphNe5DiK30dGjCoxxeGv49B10/3XYGxPsAwrDlMFcFEvdAUavDT8r9k/hSyQqQ==} engines: {node: '>=6.9.0'} @@ -1313,10 +1324,6 @@ packages: resolution: {integrity: sha512-yD+hEuJ/+wAJ4Ox2/rpNv5HIuPG82x3ZlQvYVn8iYCprdxzE7P1udpGF1jyjQVBU4dgznN+k2h103vxZ7NdPyw==} engines: {node: '>=6.9.0'} - '@babel/compat-data@7.26.3': - resolution: {integrity: sha512-nHIxvKPniQXpmQLb0vhY3VaFb3S0YrTAwpOWJZh1wn3oJPjJk9Asva204PsBdmAE8vpzfHudT8DB0scYvy9q0g==} - engines: {node: '>=6.9.0'} - '@babel/core@7.25.2': resolution: {integrity: sha512-BBt3opiCOxUr9euZ5/ro/Xv8/V7yJ5bjYMqG/C1YAo8MIKAnumZalCN+msbci3Pigy4lIQfPUpfMM27HMGaYEA==} engines: {node: '>=6.9.0'} @@ -1329,10 +1336,6 @@ packages: resolution: {integrity: sha512-omlUGkr5EaoIJrhLf9CJ0TvjBRpd9+AXRG//0GEQ9THSo8wPiTlbpy1/Ow8ZTrbXpjd9FHXfbFQx32I04ht0FA==} engines: {node: '>=6.9.0'} - '@babel/generator@7.26.3': - resolution: {integrity: sha512-6FF/urZvD0sTeO7k6/B15pMLC4CHUv1426lzr3N01aHJTl046uCAh9LXW/fzeXXjPNCJ6iABW5XaWOsIZB93aQ==} - engines: {node: '>=6.9.0'} - '@babel/helper-annotate-as-pure@7.24.7': resolution: {integrity: sha512-BaDeOonYvhdKw+JoMVkAixAAJzG2jVPIwWoKBPdYuY9b452e2rPuI9QPYh3KpofZ3pW2akOmwZLOiOsHMiqRAg==} engines: {node: '>=6.9.0'} @@ -1376,11 +1379,6 @@ packages: peerDependencies: '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 - '@babel/helper-define-polyfill-provider@0.6.3': - resolution: {integrity: sha512-HK7Bi+Hj6H+VTHA3ZvBis7V/6hu9QuTrnMXNybfUf2iiuU/N97I8VjB+KbhFF8Rld/Lx5MzoCwPCpPjfK+n8Cg==} - peerDependencies: - '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 - '@babel/helper-member-expression-to-functions@7.24.8': resolution: {integrity: sha512-LABppdt+Lp/RlBxqrh4qgf1oEH/WxdzQNDJIu5gC/W1GyvPVrOBiItmmM8wan2fm4oYqFuFfkXmlGpLQhPY8CA==} engines: {node: '>=6.9.0'} @@ -1409,12 +1407,6 @@ packages: peerDependencies: '@babel/core': ^7.0.0 - '@babel/helper-module-transforms@7.26.0': - resolution: {integrity: sha512-xO+xu6B5K2czEnQye6BHA7DolFFmS3LB7stHZFaOLb1pAwO1HWLS8fXA+eh0A2yIvltPVmx3eNNDBJA2SLHXFw==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0 - '@babel/helper-optimise-call-expression@7.24.7': resolution: {integrity: sha512-jKiTsW2xmWwxT1ixIdfXUZp+P5yURx2suzLZr5Hi64rURpDYdMW0pv+Uf17EYk2Rd428Lx4tLsnjGJzYKDM/6A==} engines: {node: '>=6.9.0'} @@ -1515,11 +1507,6 @@ packages: engines: {node: '>=6.0.0'} hasBin: true - '@babel/parser@7.26.3': - resolution: {integrity: sha512-WJ/CvmY8Mea8iDXo6a7RK2wbmJITT5fN3BEkRuFlxVyNx8jOKIIhmC4fSkTcPcf8JyavbBwIe6OpiCOBXt/IcA==} - engines: {node: '>=6.0.0'} - hasBin: true - '@babel/plugin-bugfix-firefox-class-in-computed-class-key@7.25.3': resolution: {integrity: sha512-wUrcsxZg6rqBXG05HG1FPYgsP6EvwF4WpBbxIpWIIYnH8wG0gzx3yZY3dtEHas4sTAOGkbTsc9EGPxwff8lRoA==} engines: {node: '>=6.9.0'} @@ -1627,8 +1614,8 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-syntax-flow@7.26.0': - resolution: {integrity: sha512-B+O2DnPc0iG+YXFqOxv2WNuNU97ToWjOomUQ78DouOENWUaM5sVrmet9mcomUGQFwpJd//gvUagXBSdzO1fRKg==} + '@babel/plugin-syntax-flow@7.25.9': + resolution: {integrity: sha512-F3FVgxwamIRS3+kfjNaPARX0DSAiH1exrQUVajXiR34hkdA9eyK+8rJbnu55DQjKL/ayuXqjNr2HDXwBEMEtFQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 @@ -1883,12 +1870,6 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-modules-commonjs@7.26.3': - resolution: {integrity: sha512-MgR55l4q9KddUDITEzEFYn5ZsGDXMSsU9E+kh7fjRXTIC3RHqfCo8RPRbyReYJh44HQ/yomFkqbOFohXvDCiIQ==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-modules-systemjs@7.25.0': resolution: {integrity: sha512-YPJfjQPDXxyQWg/0+jHKj1llnY5f/R6a0p/vP4lPymxLu7Lvl4k2WMitqi08yxwQcCVUUdG9LCUj4TNEgAp3Jw==} engines: {node: '>=6.9.0'} @@ -2057,8 +2038,8 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-typescript@7.26.3': - resolution: {integrity: sha512-6+5hpdr6mETwSKjmJUdYw0EIkATiQhnELWlE3kJFBwSg/BGIVwVaVbX+gOXBCdc7Ln1RXZxyWGecIXhUfnl7oA==} + '@babel/plugin-transform-typescript@7.25.9': + resolution: {integrity: sha512-7PbZQZP50tzv2KGGnhh82GSyMB01yKY9scIjf1a+GfZCtInOWqUH5+1EBU4t9fyR5Oykkkc9vFTs4OHrhHXljQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 @@ -2110,8 +2091,8 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/preset-typescript@7.26.0': - resolution: {integrity: sha512-NMk1IGZ5I/oHhoXEElcm+xUnL/szL6xflkFZmoEU9xj1qSJXpiS7rsspYo92B4DRCDvZn2erT5LdsCeXAKNCkg==} + '@babel/preset-typescript@7.25.9': + resolution: {integrity: sha512-XWxw1AcKk36kgxf4C//fl0ikjLeqGUWn062/Fd8GtpTfDJOX6Ud95FK+4JlDA36BX4bNGndXi3a6Vr4Jo5/61A==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 @@ -2130,10 +2111,6 @@ packages: resolution: {integrity: sha512-4zpTHZ9Cm6L9L+uIqghQX8ZXg8HKFcjYO3qHoO8zTmRm6HQUJ8SSJ+KRvbMBZn0EGVlT4DRYeQ/6hjlyXBh+Kg==} engines: {node: '>=6.9.0'} - '@babel/runtime@7.26.0': - resolution: {integrity: sha512-FDSOghenHTiToteC/QRlv2q3DhPZ/oOXTBoirfWNx1Cx3TMVcGWQtMMmQcSvb/JjpNeGzx8Pq/b4fKEJuWm1sw==} - engines: {node: '>=6.9.0'} - '@babel/template@7.25.0': resolution: {integrity: sha512-aOOgh1/5XzKvg1jvVz7AVrx2piJ2XBi227DHmbY6y+bM9H2FlN+IfecYu4Xl0cNiiVejlsCri89LUsbj8vJD9Q==} engines: {node: '>=6.9.0'} @@ -2150,10 +2127,6 @@ packages: resolution: {integrity: sha512-ZCuvfwOwlz/bawvAuvcj8rrithP2/N55Tzz342AkTvq4qaWbGfmCk/tKhNaV2cthijKrPAA8SRJV5WWe7IBMJw==} engines: {node: '>=6.9.0'} - '@babel/traverse@7.26.4': - resolution: {integrity: sha512-fH+b7Y4p3yqvApJALCPJcwb0/XaOSgtK4pzV6WVjPR5GLFQBRI7pfoX2V2iM48NXvX07NUxxm1Vw98YjqTcU5w==} - engines: {node: '>=6.9.0'} - '@babel/types@7.25.4': resolution: {integrity: sha512-zQ1ijeeCXVEh+aNL0RlmkPkG8HUiDcU2pzQQFjtbntgAczRASFzj4H+6+bV+dy1ntKR14I/DypeuRG1uma98iQ==} engines: {node: '>=6.9.0'} @@ -2162,10 +2135,6 @@ packages: resolution: {integrity: sha512-OwS2CM5KocvQ/k7dFJa8i5bNGJP0hXWfVCfDkqRFP1IreH1JDC7wG6eCYCi0+McbfT8OR/kNqsI0UU0xP9H6PQ==} engines: {node: '>=6.9.0'} - '@babel/types@7.26.3': - resolution: {integrity: sha512-vN5p+1kl59GVKMvTHt55NzzmYVxprfJD+ql7U9NFIfKCBkYE55LYtS+WtPlaYOyzydrKI8Nezd+aZextrd+FMA==} - engines: {node: '>=6.9.0'} - '@badeball/cypress-configuration@6.1.1': resolution: {integrity: sha512-0IcJFMiCRo33Ofrvxxojt5QRJWyxApymHuuy981FeXnOGz4UsWKgr/hRupeXkw2cKXvah+j+880kXliygxPOSQ==} @@ -2982,6 +2951,9 @@ packages: '@emotion/weak-memoize@0.4.0': resolution: {integrity: sha512-snKqtPW01tN0ui7yu9rGv69aJXr/a/Ywvl11sUjNtEcRc+ng/mQriFL0wLXMef74iHa/EkftbDzU9F8iFbH+zg==} + '@endo/env-options@1.1.8': + resolution: {integrity: sha512-Xtxw9n33I4guo8q0sDyZiRuxlfaopM454AKiELgU7l3tqsylCut6IBZ0fPy4ltSHsBib7M3yF7OEMoIuLwzWVg==} + '@esbuild-plugins/node-resolve@0.1.4': resolution: {integrity: sha512-haFQ0qhxEpqtWWY0kx1Y5oE3sMyO1PcoSiWEPrAw6tm/ZOOLXjSs6Q+v1v9eyuVF0nNt50YEvrcrvENmyoMv5g==} peerDependencies: @@ -3719,10 +3691,6 @@ packages: resolution: {integrity: sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==} engines: {node: '>=6.0.0'} - '@jridgewell/gen-mapping@0.3.8': - resolution: {integrity: sha512-imAbBGkb+ebQyxKgzv5Hu2nmROxoDOXHh80evxdoXNOrvAnVx7zimzc1Oo5h9RlfV4vPXaE2iM5pOFbvOCClWA==} - engines: {node: '>=6.0.0'} - '@jridgewell/resolve-uri@3.1.2': resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==} engines: {node: '>=6.0.0'} @@ -4487,6 +4455,12 @@ packages: resolution: {integrity: sha512-3giAOQvZiH5F9bMlMiv8+GSPMeqg0dbaeo58/0SlA9sxSqZhnUtxzX9/2FzyhS9sWQf5S0GJE0AKBrFqjpeYcg==} engines: {node: '>=8.0.0'} + '@opentelemetry/context-async-hooks@1.25.1': + resolution: {integrity: sha512-UW/ge9zjvAEmRWVapOP0qyCvPulWU6cQxGxDbWEFfGOj1VBBZAuOqTo3X6yWmDTD3Xe15ysCZChHncr2xFMIfQ==} + engines: {node: '>=14'} + peerDependencies: + '@opentelemetry/api': '>=1.0.0 <1.10.0' + '@opentelemetry/context-async-hooks@1.27.0': resolution: {integrity: sha512-CdZ3qmHCwNhFAzjTgHqrDQ44Qxcpz43cVxZRhOs+Ns/79ug+Mr84Bkb626bkJLkA3+BLimA5YAEVRlJC6pFb7g==} engines: {node: '>=14'} @@ -4702,6 +4676,12 @@ packages: peerDependencies: '@opentelemetry/api': '>=1.0.0 <1.5.0' + '@opentelemetry/sdk-trace-base@1.25.1': + resolution: {integrity: sha512-C8k4hnEbc5FamuZQ92nTOp8X/diCY56XUTnMiv9UTuJitCzaNNHAVsdm5+HLCdI8SLQsLWIrG38tddMxLVoftw==} + engines: {node: '>=14'} + peerDependencies: + '@opentelemetry/api': '>=1.0.0 <1.10.0' + '@opentelemetry/sdk-trace-base@1.27.0': resolution: {integrity: sha512-btz6XTQzwsyJjombpeqCX6LhiMQYpzt2pIYNPnw0IPO/3AhT6yjnf8Mnv3ZC2A4eRYOjqrg+bfaXg9XHDRJDWQ==} engines: {node: '>=14'} @@ -4865,8 +4845,8 @@ packages: resolution: {integrity: sha512-SLm3IFcfmy9iMqHeT4Ih6qMNZhJEefY14T9yTlpsH2D/FE5+BaGGnfcexUifVlfH6M7mwRC4hEFdNvZ6ebZjJg==} deprecated: This package is deprecated and is no longer maintained. Please use @pythnetwork/hermes-client instead. - '@pythnetwork/price-service-sdk@1.8.0': - resolution: {integrity: sha512-tFZ1thj3Zja06DzPIX2dEWSi7kIfIyqreoywvw5NQ3Z1pl5OJHQGMEhxt6Li3UCGSp2ooYZS9wl8/8XfrfrNSA==} + '@pythnetwork/price-service-sdk@1.7.1': + resolution: {integrity: sha512-xr2boVXTyv1KUt/c6llUTfbv2jpud99pWlMJbFaHGUBoygQsByuy7WbjIJKZ+0Blg1itLZl0Lp/pJGGg8SdJoQ==} '@pythnetwork/pyth-evm-js@1.63.0': resolution: {integrity: sha512-P6PTOmUitlKuZrMpE46MDE8cxx7j5BzZsPoN57CuYa7aQ1M8624/p4m4/5VS+tweFwRwcR39ubgUf6zYuuzn8Q==} @@ -6763,6 +6743,9 @@ packages: '@types/debug@4.1.12': resolution: {integrity: sha512-vIChWdVG3LG1SMxEvI/AK+FWJthlrqlTu7fbrlywTkkaONwk/UAGaULXRlf8vkzFBLVm0zkMdCquhL5aOjhXPQ==} + '@types/deep-freeze@0.1.5': + resolution: {integrity: sha512-KZtR+jtmgkCpgE0f+We/QEI2Fi0towBV/tTkvHVhMzx+qhUVGXMx7pWvAtDp6vEWIjdKLTKpqbI/sORRCo8TKg==} + '@types/diff@5.2.1': resolution: {integrity: sha512-uxpcuwWJGhe2AR1g8hD9F5OYGCqjqWnBUQFD8gMZsDbv8oPHzxJF6iMO6n8Tk0AdzlxoaaoQhOYlIg/PukVU8g==} @@ -7058,8 +7041,8 @@ packages: '@types/uuid@9.0.8': resolution: {integrity: sha512-jg+97EGIcY9AGHJJRaaPVgetKDsrTgbRjQ5Msgjh/DQKEFl0DtyRr/VCOyD1T2R1MNeWPK/u7JoGhlDZnKBAfA==} - '@types/ws@8.5.13': - resolution: {integrity: sha512-osM/gWBTPKgHV8XkTunnegTRIsvF6owmf5w+JtAfOw472dptdm0dlGv4xCt6GwQRcC2XVOvvRE/0bAoQcL2QkA==} + '@types/ws@8.5.12': + resolution: {integrity: sha512-3tPRkv1EtkDpzlgyKyI8pGsGZAGPEaXeu0DOj5DI25Ja91bdAYddYHbADRYVrZMRbfW+1l5YwXVDKohDJNQxkQ==} '@types/yargs-parser@21.0.3': resolution: {integrity: sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ==} @@ -7311,50 +7294,50 @@ packages: '@walletconnect/window-metadata@1.0.1': resolution: {integrity: sha512-9koTqyGrM2cqFRW517BPY/iEtUDx2r1+Pwwu5m7sJ7ka79wi3EyqhqcICk/yDmv6jAS1rjKgTKXlEhanYjijcA==} - '@webassemblyjs/ast@1.14.1': - resolution: {integrity: sha512-nuBEDgQfm1ccRp/8bCQrx1frohyufl4JlbMMZ4P1wpeOfDhF6FQkxZJ1b/e+PLwr6X1Nhw6OLme5usuBWYBvuQ==} + '@webassemblyjs/ast@1.12.1': + resolution: {integrity: sha512-EKfMUOPRRUTy5UII4qJDGPpqfwjOmZ5jeGFwid9mnoqIFK+e0vqoi1qH56JpmZSzEL53jKnNzScdmftJyG5xWg==} - '@webassemblyjs/floating-point-hex-parser@1.13.2': - resolution: {integrity: sha512-6oXyTOzbKxGH4steLbLNOu71Oj+C8Lg34n6CqRvqfS2O71BxY6ByfMDRhBytzknj9yGUPVJ1qIKhRlAwO1AovA==} + '@webassemblyjs/floating-point-hex-parser@1.11.6': + resolution: {integrity: sha512-ejAj9hfRJ2XMsNHk/v6Fu2dGS+i4UaXBXGemOfQ/JfQ6mdQg/WXtwleQRLLS4OvfDhv8rYnVwH27YJLMyYsxhw==} - '@webassemblyjs/helper-api-error@1.13.2': - resolution: {integrity: sha512-U56GMYxy4ZQCbDZd6JuvvNV/WFildOjsaWD3Tzzvmw/mas3cXzRJPMjP83JqEsgSbyrmaGjBfDtV7KDXV9UzFQ==} + '@webassemblyjs/helper-api-error@1.11.6': + resolution: {integrity: sha512-o0YkoP4pVu4rN8aTJgAyj9hC2Sv5UlkzCHhxqWj8butaLvnpdc2jOwh4ewE6CX0txSfLn/UYaV/pheS2Txg//Q==} - '@webassemblyjs/helper-buffer@1.14.1': - resolution: {integrity: sha512-jyH7wtcHiKssDtFPRB+iQdxlDf96m0E39yb0k5uJVhFGleZFoNw1c4aeIcVUPPbXUVJ94wwnMOAqUHyzoEPVMA==} + '@webassemblyjs/helper-buffer@1.12.1': + resolution: {integrity: sha512-nzJwQw99DNDKr9BVCOZcLuJJUlqkJh+kVzVl6Fmq/tI5ZtEyWT1KZMyOXltXLZJmDtvLCDgwsyrkohEtopTXCw==} - '@webassemblyjs/helper-numbers@1.13.2': - resolution: {integrity: sha512-FE8aCmS5Q6eQYcV3gI35O4J789wlQA+7JrqTTpJqn5emA4U2hvwJmvFRC0HODS+3Ye6WioDklgd6scJ3+PLnEA==} + '@webassemblyjs/helper-numbers@1.11.6': + resolution: {integrity: sha512-vUIhZ8LZoIWHBohiEObxVm6hwP034jwmc9kuq5GdHZH0wiLVLIPcMCdpJzG4C11cHoQ25TFIQj9kaVADVX7N3g==} - '@webassemblyjs/helper-wasm-bytecode@1.13.2': - resolution: {integrity: sha512-3QbLKy93F0EAIXLh0ogEVR6rOubA9AoZ+WRYhNbFyuB70j3dRdwH9g+qXhLAO0kiYGlg3TxDV+I4rQTr/YNXkA==} + '@webassemblyjs/helper-wasm-bytecode@1.11.6': + resolution: {integrity: sha512-sFFHKwcmBprO9e7Icf0+gddyWYDViL8bpPjJJl0WHxCdETktXdmtWLGVzoHbqUcY4Be1LkNfwTmXOJUFZYSJdA==} - '@webassemblyjs/helper-wasm-section@1.14.1': - resolution: {integrity: sha512-ds5mXEqTJ6oxRoqjhWDU83OgzAYjwsCV8Lo/N+oRsNDmx/ZDpqalmrtgOMkHwxsG0iI//3BwWAErYRHtgn0dZw==} + '@webassemblyjs/helper-wasm-section@1.12.1': + resolution: {integrity: sha512-Jif4vfB6FJlUlSbgEMHUyk1j234GTNG9dBJ4XJdOySoj518Xj0oGsNi59cUQF4RRMS9ouBUxDDdyBVfPTypa5g==} - '@webassemblyjs/ieee754@1.13.2': - resolution: {integrity: sha512-4LtOzh58S/5lX4ITKxnAK2USuNEvpdVV9AlgGQb8rJDHaLeHciwG4zlGr0j/SNWlr7x3vO1lDEsuePvtcDNCkw==} + '@webassemblyjs/ieee754@1.11.6': + resolution: {integrity: sha512-LM4p2csPNvbij6U1f19v6WR56QZ8JcHg3QIJTlSwzFcmx6WSORicYj6I63f9yU1kEUtrpG+kjkiIAkevHpDXrg==} - '@webassemblyjs/leb128@1.13.2': - resolution: {integrity: sha512-Lde1oNoIdzVzdkNEAWZ1dZ5orIbff80YPdHx20mrHwHrVNNTjNr8E3xz9BdpcGqRQbAEa+fkrCb+fRFTl/6sQw==} + '@webassemblyjs/leb128@1.11.6': + resolution: {integrity: sha512-m7a0FhE67DQXgouf1tbN5XQcdWoNgaAuoULHIfGFIEVKA6tu/edls6XnIlkmS6FrXAquJRPni3ZZKjw6FSPjPQ==} - '@webassemblyjs/utf8@1.13.2': - resolution: {integrity: sha512-3NQWGjKTASY1xV5m7Hr0iPeXD9+RDobLll3T9d2AO+g3my8xy5peVyjSag4I50mR1bBSN/Ct12lo+R9tJk0NZQ==} + '@webassemblyjs/utf8@1.11.6': + resolution: {integrity: sha512-vtXf2wTQ3+up9Zsg8sa2yWiQpzSsMyXj0qViVP6xKGCUT8p8YJ6HqI7l5eCnWx1T/FYdsv07HQs2wTFbbof/RA==} - '@webassemblyjs/wasm-edit@1.14.1': - resolution: {integrity: sha512-RNJUIQH/J8iA/1NzlE4N7KtyZNHi3w7at7hDjvRNm5rcUXa00z1vRz3glZoULfJ5mpvYhLybmVcwcjGrC1pRrQ==} + '@webassemblyjs/wasm-edit@1.12.1': + resolution: {integrity: sha512-1DuwbVvADvS5mGnXbE+c9NfA8QRcZ6iKquqjjmR10k6o+zzsRVesil54DKexiowcFCPdr/Q0qaMgB01+SQ1u6g==} - '@webassemblyjs/wasm-gen@1.14.1': - resolution: {integrity: sha512-AmomSIjP8ZbfGQhumkNvgC33AY7qtMCXnN6bL2u2Js4gVCg8fp735aEiMSBbDR7UQIj90n4wKAFUSEd0QN2Ukg==} + '@webassemblyjs/wasm-gen@1.12.1': + resolution: {integrity: sha512-TDq4Ojh9fcohAw6OIMXqiIcTq5KUXTGRkVxbSo1hQnSy6lAM5GSdfwWeSxpAo0YzgsgF182E/U0mDNhuA0tW7w==} - '@webassemblyjs/wasm-opt@1.14.1': - resolution: {integrity: sha512-PTcKLUNvBqnY2U6E5bdOQcSM+oVP/PmrDY9NzowJjislEjwP/C4an2303MCVS2Mg9d3AJpIGdUFIQQWbPds0Sw==} + '@webassemblyjs/wasm-opt@1.12.1': + resolution: {integrity: sha512-Jg99j/2gG2iaz3hijw857AVYekZe2SAskcqlWIZXjji5WStnOpVoat3gQfT/Q5tb2djnCjBtMocY/Su1GfxPBg==} - '@webassemblyjs/wasm-parser@1.14.1': - resolution: {integrity: sha512-JLBl+KZ0R5qB7mCnud/yyX08jWFw5MsoalJ1pQ4EdFlgj9VdXKGuENGsiCIjegI1W7p91rUlcB/LB5yRJKNTcQ==} + '@webassemblyjs/wasm-parser@1.12.1': + resolution: {integrity: sha512-xikIi7c2FHXysxXe3COrVUPSheuBtpcfhbpFj4gmu7KRLYOzANztwUU0IbsqvMqzuNK2+glRGWCEqZo1WCLyAQ==} - '@webassemblyjs/wast-printer@1.14.1': - resolution: {integrity: sha512-kPSSXE6De1XOR820C90RIo2ogvZG+c3KiHzqUoO/F34Y2shGzesfqv7o57xrxovZJH/MetF5UjroJ/R/3isoiw==} + '@webassemblyjs/wast-printer@1.12.1': + resolution: {integrity: sha512-+X4WAlOisVWQMikjbcvY2e0rwPsKQ9F688lksZhBcPycBBuii3O7m8FACbDMWDojpAqvjIncrG8J0XHKyQfVeA==} '@xmldom/xmldom@0.8.10': resolution: {integrity: sha512-2WALfTl4xo2SkGCYRt6rDTFfk9R1czmBvUQy12gK2KuRKIpWEhcbbzy8EZXtz/jkRqHX8bFEc6FC1HjX4TUWYw==} @@ -7473,11 +7456,6 @@ packages: engines: {node: '>=0.4.0'} hasBin: true - acorn@8.13.0: - resolution: {integrity: sha512-8zSiw54Oxrdym50NlZ9sUusyO1Z1ZchgRLWRaK6c86XJFClyCgFKetdowBg5bKxyp/u+CDBJG4Mpp0m3HLZl9w==} - engines: {node: '>=0.4.0'} - hasBin: true - acorn@8.14.0: resolution: {integrity: sha512-cl669nCJTZBsL97OF4kUQm5g5hC2uihk0NxY3WENAC0TYdILVkAyHymAntgxGkl7K+t0cXIrH5siy5S4XkFycA==} engines: {node: '>=0.4.0'} @@ -7835,9 +7813,6 @@ packages: axios@1.7.7: resolution: {integrity: sha512-S4kL7XrjgBmvdGut0sN3yJxqYzrDOnivkBiN0OFs6hLiUam3UPvswUo0kqGyhqUZGEOytHyumEdXsAkgCOUf3Q==} - axios@1.7.9: - resolution: {integrity: sha512-LhLcE7Hbiryz8oMDdDptSrWowmB4Bl6RCt6sIJKpRB4XtVf0iEgewX3au/pJqm+Py1kCASkb/FFKjxQaLtxJvw==} - axobject-query@3.1.1: resolution: {integrity: sha512-goKlv8DZrK9hUh975fnHzhNIO4jUnFCfv/dszV5VwUGDFjI6vQ2VwoyjYjYNEbBE8AH87TduWP5uyDR1D+Iteg==} @@ -7876,11 +7851,6 @@ packages: peerDependencies: '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 - babel-plugin-polyfill-corejs2@0.4.12: - resolution: {integrity: sha512-CPWT6BwvhrTO2d8QVorhTCQw9Y43zOu7G9HigcfxvepOU6b8o3tcWad6oVgZIsZCTt42FFv97aA7ZJsbM4+8og==} - peerDependencies: - '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 - babel-plugin-polyfill-corejs3@0.10.6: resolution: {integrity: sha512-b37+KR2i/khY5sKmWNVQAnitvquQbNdWy6lJdsr0kmquCKEEUgMKK4SboVM3HtfnZilfjr4MMQ7vY58FVWDtIA==} peerDependencies: @@ -7891,11 +7861,6 @@ packages: peerDependencies: '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 - babel-plugin-polyfill-regenerator@0.6.3: - resolution: {integrity: sha512-LiWSbl4CRSIa5x/JAU6jZiG9eit9w6mz+yVMFwDE83LAWvt0AfGBoZ7HS/mkhrKuh2ZlzfVZYKoLjXdqw6Yt7Q==} - peerDependencies: - '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 - babel-plugin-transform-flow-enums@0.0.2: resolution: {integrity: sha512-g4aaCrDDOsWjbm0PUUeVnkcVd6AKJsVc/MbnPhEotEpkeJQP6b8nzewohQi7+QS8UyPehOhGWn0nOwjvWpmMvQ==} @@ -7980,9 +7945,6 @@ packages: bn.js@4.12.0: resolution: {integrity: sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==} - bn.js@4.12.1: - resolution: {integrity: sha512-k8TVBiPkPJT9uHLdOKfFpqcfprwBFOAAXXozRubr7R7PfIuKvQlzcI4M0pALeqXN09vdaMbUdUj+pass+uULAg==} - bn.js@5.2.1: resolution: {integrity: sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==} @@ -8053,11 +8015,6 @@ packages: engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} hasBin: true - browserslist@4.24.3: - resolution: {integrity: sha512-1CPmv8iobE2fyRMV97dAcMVegvvWKxmq94hkLiAkUGwKVTyDLw33K+ZxiFrREKmmps4rIw6grcCFCnTMSZ/YiA==} - engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} - hasBin: true - bs-logger@0.2.6: resolution: {integrity: sha512-pd8DCoxmbgc7hyPKOvxtqNcjYoOsABPQdcCUjGp3d42VR2CX1ORhk2A87oqqu5R1kk+76nsxZupkmyd+MVtCog==} engines: {node: '>= 6'} @@ -8213,9 +8170,6 @@ packages: caniuse-lite@1.0.30001669: resolution: {integrity: sha512-DlWzFDJqstqtIVx1zeSpIMLjunf5SmwOw0N2Ck/QSQdS8PLS4+9HrLaYei4w8BIAL7IB/UEDu889d8vhCTPA0w==} - caniuse-lite@1.0.30001690: - resolution: {integrity: sha512-5ExiE3qQN6oF8Clf8ifIDcMRCRE/dMGcETG/XGMD8/XiXm6HXQgQTh1yZYLXXpSOsEUlJm1Xr7kGULZTuGtP/w==} - capital-case@1.0.4: resolution: {integrity: sha512-ds37W8CytHgwnhGGTi88pcPyR15qoNkOpYwmMMfnWqqWgESapLqvDx6huFjQ5vqWSn2Z06173XNA7LtMOeUh1A==} @@ -8677,10 +8631,6 @@ packages: resolution: {integrity: sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ==} engines: {node: '>= 0.8.0'} - compression@1.7.5: - resolution: {integrity: sha512-bQJ0YRck5ak3LgtnpKkiabX5pNF7tMUh1BSy2ZBOTh0Dim0BUu6aPPwByIns6/A5Prh8PufSPerMDUklpzes2Q==} - engines: {node: '>= 0.8.0'} - compute-scroll-into-view@3.0.3: resolution: {integrity: sha512-nadqwNxghAGTamwIqQSG433W6OADZx2vCo3UXHNrzTRHK/htu+7+L0zhjEoaeaQVNAi3YgqWDv8+tzf0hRfR+A==} @@ -9160,15 +9110,6 @@ packages: supports-color: optional: true - debug@4.4.0: - resolution: {integrity: sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==} - engines: {node: '>=6.0'} - peerDependencies: - supports-color: '*' - peerDependenciesMeta: - supports-color: - optional: true - decamelize-keys@1.1.1: resolution: {integrity: sha512-WiPxgEirIV0/eIOMcnFBA3/IJZAZqKnwAwWyvvdi4lsr1WCN22nhdf/3db3DoZcUjTV2SqfzIwNyp6y2xs3nmg==} engines: {node: '>=0.10.0'} @@ -9227,6 +9168,9 @@ packages: resolution: {integrity: sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==} engines: {node: '>=4.0.0'} + deep-freeze@0.0.1: + resolution: {integrity: sha512-Z+z8HiAvsGwmjqlphnHW5oz6yWlOwu6EQfFTjmeTWlDeda3FS2yv3jhq35TX/ewmsnqB+RX2IdsIOyjJCQN5tg==} + deep-is@0.1.4: resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==} @@ -9491,9 +9435,6 @@ packages: electron-to-chromium@1.5.44: resolution: {integrity: sha512-Lz3POUa7wANQA8G+9btKAdH+cqkfWCBdkotvQZJVOqRXMYGm1tTD835Z01iCjWpEBf0RInPBWuPfzhGbxOCULw==} - electron-to-chromium@1.5.76: - resolution: {integrity: sha512-CjVQyG7n7Sr+eBXE86HIulnL5N8xZY1sgmOPGuq/F0Rr0FJq63lg0kEtOIDfZBk44FnDLf6FUJ+dsJcuiUDdDQ==} - elliptic@6.5.4: resolution: {integrity: sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ==} @@ -9544,10 +9485,6 @@ packages: resolution: {integrity: sha512-LMHl3dXhTcfv8gM4kEzIUeTQ+7fpdA0l2tUf34BddXPkz2A5xJ5L/Pchd5BL6rdccM9QGvu0sWZzK1Z1t4wwyg==} engines: {node: '>=10.13.0'} - enhanced-resolve@5.18.0: - resolution: {integrity: sha512-0/r0MySGYG8YqlayBZ6MuCfECmHFdJ5qyPh8s8wa5Hnm6SaFLSK1VYCbj+NKp090Nm1caZhD+QTnmxO7esYGyQ==} - engines: {node: '>=10.13.0'} - enquirer@2.3.6: resolution: {integrity: sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==} engines: {node: '>=8.6'} @@ -9629,9 +9566,6 @@ packages: es-module-lexer@1.5.4: resolution: {integrity: sha512-MVNK56NiMrOwitFB7cqDwq0CQutbw+0BvLshJSse0MUNU+y1FC3bUS/AQg7oUng+/wKrrki7JfmwtVHkVfPLlw==} - es-module-lexer@1.6.0: - resolution: {integrity: sha512-qqnD1yMU6tk/jnaMosogGySTZP8YtUgAffA9nMN+E/rjxcfRQ6IEk7IiozUjgxKoFHBGjTLnrHB/YC45r/59EQ==} - es-object-atoms@1.0.0: resolution: {integrity: sha512-MZ4iQ6JwHOBQjahnjwaC1ZtIBH+2ohjamzAO3oaHcXYup7qxjF2fixyH+Q71voWHeOkI2q/TnJao/KfXYIZWbw==} engines: {node: '>= 0.4'} @@ -10165,8 +10099,8 @@ packages: resolution: {integrity: sha512-xkjOecfnKGkSsOwtZ5Pz7Us/T6mrbPQrq0nh+aCO5V9nk5NLWmasAHumTKjiPJPWANe+kAZ84Jc8ooJkzZ88Sw==} hasBin: true - fast-xml-parser@4.5.1: - resolution: {integrity: sha512-y655CeyUQ+jj7KBbYMc4FG01V8ZQqjN+gDYGJ50RtfsUB8iG9AmwmwoAgeKLJdmueKKMrH1RJ7yXHTSoczdv5w==} + fast-xml-parser@4.5.0: + resolution: {integrity: sha512-/PlTQCI96+fZMAOLMZK4CWG1ItCbfZ/0jx7UIJFChPNrx7tcEgerUgWbeieCM9MfHInUDyK8DWYZ+YrywDJuTg==} hasBin: true fastest-levenshtein@1.0.16: @@ -10285,8 +10219,8 @@ packages: flow-enums-runtime@0.0.6: resolution: {integrity: sha512-3PYnM29RFXwvAN6Pc/scUfkI7RwhQ/xqyLUyPNlXUp9S40zI8nup9tUSrTLSVnWGBN38FNiGWbwZOB6uR4OGdw==} - flow-parser@0.257.1: - resolution: {integrity: sha512-7+KYDpAXyBPD/wODhbPYO6IGUx+WwtJcLLG/r3DvbNyxaDyuYaTBKbSqeCldWQzuFcj+MsOVx2bpkEwVPB9JRw==} + flow-parser@0.250.0: + resolution: {integrity: sha512-8mkLh/CotlvqA9vCyQMbhJoPx2upEg9oKxARAayz8zQ58wCdABnTZy6U4xhMHvHvbTUFgZQk4uH2cglOCOel5A==} engines: {node: '>=0.4.0'} fn.name@1.1.0: @@ -10305,15 +10239,6 @@ packages: debug: optional: true - follow-redirects@1.15.9: - resolution: {integrity: sha512-gew4GsXizNgdoRyqmyfMHyAmXsZDk6mHkSxZFCzW9gwlbtOW44CDtYavM+y+72qD/Vq2l550kMF52DT8fOLJqQ==} - engines: {node: '>=4.0'} - peerDependencies: - debug: '*' - peerDependenciesMeta: - debug: - optional: true - for-each@0.3.3: resolution: {integrity: sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==} @@ -10339,10 +10264,6 @@ packages: resolution: {integrity: sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==} engines: {node: '>= 6'} - form-data@4.0.1: - resolution: {integrity: sha512-tzN8e4TX8+kkxGPK8D5u0FNmjPUjw3lwC9lSLxxoB/+GtsJG91CO8bSWy73APlgAZzZbXEYZJuxjkHH2w+Ezhw==} - engines: {node: '>= 6'} - format@0.2.2: resolution: {integrity: sha512-wzsgA6WOq+09wrU1tsJ09udeR/YZRaeArL9e1wPbFg3GG2yDnC2ldKpxs4xunpFF9DgqCqOIra3bc1HWrJ37Ww==} engines: {node: '>=0.4.x'} @@ -11024,8 +10945,8 @@ packages: resolution: {integrity: sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==} engines: {node: '>= 4'} - image-size@1.2.0: - resolution: {integrity: sha512-4S8fwbO6w3GeCVN6OPtA9I5IGKkcDMPcKndtUlpJuCwu7JLjtj7JZpwqLuyY2nrmQT3AWsCJLSKPsc2mPBSl3w==} + image-size@1.1.1: + resolution: {integrity: sha512-541xKlUw6jr/6gGuk92F+mYM5zaFAc5ahphvkqvNe2bQ6gVBkd6bfrmVJ2t4KDAfikAYZyIqTnktX3i6/aQDrQ==} engines: {node: '>=16.x'} hasBin: true @@ -11214,10 +11135,6 @@ packages: resolution: {integrity: sha512-z0vtXSwucUJtANQWldhbtbt7BnL0vxiFjIdDLAatwhDYty2bad6s+rijD6Ri4YuYJubLzIJLUidCh09e1djEVQ==} engines: {node: '>= 0.4'} - is-core-module@2.16.1: - resolution: {integrity: sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==} - engines: {node: '>= 0.4'} - is-data-view@1.0.1: resolution: {integrity: sha512-AHkaJrsUVW6wq6JS8y3JnM/GJF/9cf+k20+iDzlSaJrinEo5+7vRiteOSwBhHRiAyQATN1AmY4hwzxJKPmYf+w==} engines: {node: '>= 0.4'} @@ -11751,11 +11668,6 @@ packages: engines: {node: '>=6'} hasBin: true - jsesc@3.1.0: - resolution: {integrity: sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==} - engines: {node: '>=6'} - hasBin: true - json-buffer@3.0.0: resolution: {integrity: sha512-CuUqjv0FUZIdXkHPI8MezCnFCdaTAacej1TZYulLoAg1h/PhwkdXFN4V/gzY4g+fMBCOV2xF+rp7t2XD2ns/NQ==} @@ -12897,8 +12809,8 @@ packages: resolution: {integrity: sha512-2dF2R6YMSZbpip1V1WHKGLNjr/k48uQClqMVb5H3MOvwc9qhYis3/IWbj02qIg/Y8MDXKFF4c5v0rxx2o6xTZw==} engines: {node: '>=12.0.0'} - modern-ahocorasick@1.1.0: - resolution: {integrity: sha512-sEKPVl2rM+MNVkGQt3ChdmD8YsigmXdn5NifZn6jiwn9LRJpWm8F3guhaqrJT/JOat6pwpbXEk6kv+b9DMIjsQ==} + modern-ahocorasick@1.0.1: + resolution: {integrity: sha512-yoe+JbhTClckZ67b2itRtistFKf8yPYelHLc7e5xAwtNAXxM6wJTUx2C7QeVSJFDzKT7bCIFyBVybPMKvmB9AA==} modify-values@1.0.1: resolution: {integrity: sha512-xV2bxeN6F7oYjZWTe/YPAy6MN2M+sL4u/Rlm2AHCIVGfo2p1yGmBHQ6vHehl4bRTZBdHu3TSkWdYgkwpYzAGSw==} @@ -13032,10 +12944,6 @@ packages: resolution: {integrity: sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==} engines: {node: '>= 0.6'} - negotiator@0.6.4: - resolution: {integrity: sha512-myRT3DiWPHqho5PrJaIRyaMv2kgYf0mUVgBNOYMuCH5Ki1yEiQaf/ZJuQ62nvpc44wL5WDbTX7yGJi1Neevw8w==} - engines: {node: '>= 0.6'} - neo-async@2.6.2: resolution: {integrity: sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==} @@ -13175,9 +13083,6 @@ packages: node-releases@2.0.18: resolution: {integrity: sha512-d9VeXT4SJ7ZeOqGX6R5EM022wpL+eWPooLI+5UpWn2jCT1aosUQEhQP214x33Wkwx3JQMvIm+tIoVOdodFS40g==} - node-releases@2.0.19: - resolution: {integrity: sha512-xxOWJsBKtzAq7DY0J+DTzuz58K8e7sJbdgwkbMWQe8UYB6ekmsQ45q0M/tJDsGaZmbC+l7n57UV8Hl5tHxO9uw==} - node-stream-zip@1.15.0: resolution: {integrity: sha512-LN4fydt9TqhZhThkZIVQnF9cwjU3qmUH9h78Mx/K7d3VvfRqqwthLwJEUOEL0QPZ0XQmNN7be5Ggit5+4dq3Bw==} engines: {node: '>=0.12.0'} @@ -13849,8 +13754,8 @@ packages: preact@10.23.2: resolution: {integrity: sha512-kKYfePf9rzKnxOAKDpsWhg/ysrHPqT+yQ7UW4JjdnqjFIeNUnNcEJvhuA8fDenxAGWzUqtd51DfVg7xp/8T9NA==} - preact@10.25.4: - resolution: {integrity: sha512-jLdZDb+Q+odkHJ+MpW/9U5cODzqnB+fy2EiHSZES7ldV5LK7yjlVzTp7R8Xy6W6y75kfK8iWYtFVH7lvjwrCMA==} + preact@10.24.3: + resolution: {integrity: sha512-Z2dPnBnMUfyQfSQ+GBdsGa16hz35YmLmtTLhM169uW944hYL6xzTYkJjC07j+Wosz733pMWx0fgON3JNw1jJQA==} preferred-pm@3.1.4: resolution: {integrity: sha512-lEHd+yEm22jXdCphDrkvIJQU66EuLojPPtvZkpKIkiD+l0DMThF/niqZKJSoU8Vl7iuvtmzyMhir9LdVy5WMnA==} @@ -14220,6 +14125,16 @@ packages: resolution: {integrity: sha512-jCvmsr+1IUSMUyzOkRcvnVbX3ZYC6g9TDrDbFuFmRDq7PD4yaGbLKNQL6k2jnArV8hjYxh7hVhAZB6s9HDGpZA==} engines: {node: '>=0.10.0'} + react-remove-scroll-bar@2.3.6: + resolution: {integrity: sha512-DtSYaao4mBmX+HDo5YWYdBWQwYIQQshUV/dVxFxK+KM26Wjwp1gZ6rv6OC3oujI6Bfu6Xyg3TwK533AQutsn/g==} + engines: {node: '>=10'} + peerDependencies: + '@types/react': ^16.8.0 || ^17.0.0 || ^18.0.0 + react: ^16.8.0 || ^17.0.0 || ^18.0.0 + peerDependenciesMeta: + '@types/react': + optional: true + react-remove-scroll-bar@2.3.8: resolution: {integrity: sha512-9r+yi9+mgU33AKcj6IbT9oRCO78WriSj6t/cF8DWBZJ9aOGPOTEDvdUDz1FwKim7QXWwmHqtdHnRJfhAxEG46Q==} engines: {node: '>=10'} @@ -14598,11 +14513,6 @@ packages: resolve@1.17.0: resolution: {integrity: sha512-ic+7JYiV8Vi2yzQGFWOkiZD5Z9z7O2Zhm9XMaTxdJExKasieFCr+yXZ/WmXsckHiKl12ar0y6XiXDx3m4RHn1w==} - resolve@1.22.10: - resolution: {integrity: sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w==} - engines: {node: '>= 0.4'} - hasBin: true - resolve@1.22.8: resolution: {integrity: sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==} hasBin: true @@ -14759,9 +14669,9 @@ packages: resolution: {integrity: sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==} engines: {node: '>= 10.13.0'} - schema-utils@4.3.0: - resolution: {integrity: sha512-Gf9qqc58SpCA/xdziiHz35F4GNIWYWZrEshUc/G/r5BnLph6xpKuLeoJoQuj5WfBIx/eQLf+hmVPYHaxJu7V2g==} - engines: {node: '>= 10.13.0'} + schema-utils@4.2.0: + resolution: {integrity: sha512-L0jRsrPpjdckP3oPug3/VxNKt2trR8TcabrM6FOAAlvC/9Phcmm+cuAgTlxBqdBR1WJx7Naj9WHw+aOmheSVbw==} + engines: {node: '>= 12.13.0'} scroll-into-view-if-needed@3.1.0: resolution: {integrity: sha512-49oNpRjWRvnU8NyGVmUaYG4jtTkNonFZI86MmGRDqBphEK2EXT9gdEUoQPZhuBM8yWHxCWbobltqYO5M4XrUvQ==} @@ -14861,6 +14771,9 @@ packages: resolution: {integrity: sha512-/xE6GvsKKqyo1BAY+KxOWXcLpPsUUyji7Qg3bVD7hh1eRze5bR1uYiuDA/k3Gof1s9BTzQZEJK8sNcNGFIzeWw==} engines: {node: '>=6'} + ses@1.10.0: + resolution: {integrity: sha512-HXmJbNEgY/4hsQfaz5dna39vVKNyvlElRmJYk+bjTqSXSElT0Hr6NKwWVg4j0TxP6IuHp/PNMoWJKIRXzmLbAQ==} + set-blocking@2.0.0: resolution: {integrity: sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==} @@ -14914,9 +14827,8 @@ packages: resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} engines: {node: '>=8'} - shell-quote@1.8.2: - resolution: {integrity: sha512-AzqKpGKjrj7EM6rKVQEPpB288oCfnrEIuyoT9cyF4nmGa7V8Zk6f7RRqYisX8X9m+Q7bd632aZW4ky7EhbQztA==} - engines: {node: '>= 0.4'} + shell-quote@1.8.1: + resolution: {integrity: sha512-6j1W9l1iAs/4xYBI1SYOVZyFcCis9b4KCLQ8fgAGG07QvzaRLVVRQvAy85yNmmZSjYjg4MWh4gNvlPujU/5LpA==} shelljs@0.8.5: resolution: {integrity: sha512-TiwcRcrkhHvbrZbnRcFYMLl30Dfov3HKqzp5tO5b4pt6G/SezKcYhmDg15zXVBswHmctSAQKznqNW2LO5tTDow==} @@ -15414,10 +15326,6 @@ packages: resolution: {integrity: sha512-w2sfv80nrAh2VCbqR5AK27wswXhqcck2AhfnNW76beQXskGZ1V12GwS//yYVa3d3fcvAip2OUnbDAjW2k3v9fA==} engines: {node: '>=10.0.0'} - table@6.9.0: - resolution: {integrity: sha512-9kY+CygyYM6j02t5YFHbNz2FN5QmYGv9zAjVp4lCDjlCw7amdckXlEt/bjMhUIfj4ThGRE4gCUH5+yGnNuPo5A==} - engines: {node: '>=10.0.0'} - tailwind-merge@2.5.4: resolution: {integrity: sha512-0q8cfZHMu9nuYP/b5Shb7Y7Sh1B7Nnl5GqNr1U+n2p6+mybvRtayrQ+0042Z5byvTA8ihjlP8Odo8/VnHbZu4Q==} @@ -15462,8 +15370,8 @@ packages: resolution: {integrity: sha512-wK0Ri4fOGjv/XPy8SBHZChl8CM7uMc5VML7SqiQ0zG7+J5Vr+RMQDoHa2CNT6KHUnTGIXH34UDMkPzAUyapBZg==} engines: {node: '>=8'} - terser-webpack-plugin@5.3.11: - resolution: {integrity: sha512-RVCsMfuD0+cTt3EwX8hSl2Ks56EbFHWmhluwcqoPKtBnfjiT6olaq7PRIRfhyU8nnC2MrnDrBLfrD/RGE+cVXQ==} + terser-webpack-plugin@5.3.10: + resolution: {integrity: sha512-BKFPWlPDndPs+NGGCr1U59t0XScL5317Y0UReNrHaw9/FwhPENlq6bfgs+4yPfyP51vqC1bQ4rp1EfXW5ZSH9w==} engines: {node: '>= 10.13.0'} peerDependencies: '@swc/core': '*' @@ -15483,8 +15391,8 @@ packages: engines: {node: '>=10'} hasBin: true - terser@5.37.0: - resolution: {integrity: sha512-B8wRRkmre4ERucLM/uXx4MOV5cbnOlVAqUst+1+iLKPI0dOgFO28f84ptoQt9HEI537PMzfYa/d+GEPKTRXmYA==} + terser@5.36.0: + resolution: {integrity: sha512-IYV9eNMuFAV4THUspIRXkLakHnV6XO7FEdtKjf/mDyrnqUg9LnlOn6/RwRvM9SZjR4GUq8Nk8zj67FzVARr74w==} engines: {node: '>=10'} hasBin: true @@ -15775,9 +15683,6 @@ packages: tslib@2.8.0: resolution: {integrity: sha512-jWVzBLplnCmoaTr13V9dYbiQ99wvZRd0vNWaDRg+aVYRcjDF3nDksxFDE/+fkXnKhpnUUkmx5pK/v8mCtLVqZA==} - tslib@2.8.1: - resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==} - tsort@0.0.1: resolution: {integrity: sha512-Tyrf5mxF8Ofs1tNoxA13lFeZ2Zrbd6cKbuH3V+MQ5sb6DtBj5FjrXVsRWT8YvNAQTqNoz66dz1WsbigI22aEnw==} @@ -16213,6 +16118,16 @@ packages: resolution: {integrity: sha512-yIQdxJpgkPamPPAPuGdS7Q548rLhny42tg8d4vyTNzFqvOnwqrgHXvgehT09U7fwrzxi3RxCiXjoNUNnNOlQ8A==} engines: {node: '>=6.0.0'} + use-callback-ref@1.3.2: + resolution: {integrity: sha512-elOQwe6Q8gqZgDA8mrh44qRTQqpIHDcZ3hXTLjBe1i4ph8XpNJnO+aQf3NaG+lriLopI4HMx9VjQLfPQ6vhnoA==} + engines: {node: '>=10'} + peerDependencies: + '@types/react': ^16.8.0 || ^17.0.0 || ^18.0.0 + react: ^16.8.0 || ^17.0.0 || ^18.0.0 + peerDependenciesMeta: + '@types/react': + optional: true + use-callback-ref@1.3.3: resolution: {integrity: sha512-jQL3lRnocaFtu3V00JToYz/4QkNWswxijDaCVNZRiRTO3HQDLsdu1ZtmIUvV4yPp+rvWm5j0y0TG/S61cuijTg==} engines: {node: '>=10'} @@ -16242,16 +16157,6 @@ packages: '@types/react': optional: true - use-sidecar@1.1.3: - resolution: {integrity: sha512-Fedw0aZvkhynoPYlA5WXrMCAMm+nSWdZt6lzJQ7Ok8S6Q+VsHmHpRWndVRJ8Be0ZbkfPc5LRYH+5XrzXcEeLRQ==} - engines: {node: '>=10'} - peerDependencies: - '@types/react': '*' - react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc - peerDependenciesMeta: - '@types/react': - optional: true - use-sync-external-store@1.2.0: resolution: {integrity: sha512-eEgnFxGQ1Ife9bzYs6VLi8/4X6CObHMw9Qr9tPY43iKwsPw8xE8+EFsf/2cFZ5S3esXgpWgtSCtLNS41F+sKPA==} peerDependencies: @@ -17073,8 +16978,8 @@ packages: engines: {node: '>= 14'} hasBin: true - yaml@2.6.1: - resolution: {integrity: sha512-7r0XPzioN/Q9kXBro/XPnA6kznR73DHq+GXh5ON7ZozRO6aMjbmiBuKste2wslTFkC5d1dw0GooOCepZXJ2SAg==} + yaml@2.6.0: + resolution: {integrity: sha512-a6ae//JvKDEra2kdi1qzCyrJW/WZCgFi8ydDV+eXExl95t+5R+ijnqHJbz9tmMh8FUjx3iv2fCQ4dclAQlO2UQ==} engines: {node: '>= 14'} hasBin: true @@ -17206,13 +17111,13 @@ snapshots: dependencies: '@aws-crypto/util': 5.2.0 '@aws-sdk/types': 3.696.0 - tslib: 2.8.1 + tslib: 2.8.0 '@aws-crypto/crc32c@5.2.0': dependencies: '@aws-crypto/util': 5.2.0 '@aws-sdk/types': 3.696.0 - tslib: 2.8.1 + tslib: 2.8.0 '@aws-crypto/sha1-browser@5.2.0': dependencies: @@ -17221,7 +17126,7 @@ snapshots: '@aws-sdk/types': 3.696.0 '@aws-sdk/util-locate-window': 3.693.0 '@smithy/util-utf8': 2.3.0 - tslib: 2.8.1 + tslib: 2.8.0 '@aws-crypto/sha256-browser@5.2.0': dependencies: @@ -17231,23 +17136,23 @@ snapshots: '@aws-sdk/types': 3.696.0 '@aws-sdk/util-locate-window': 3.693.0 '@smithy/util-utf8': 2.3.0 - tslib: 2.8.1 + tslib: 2.8.0 '@aws-crypto/sha256-js@5.2.0': dependencies: '@aws-crypto/util': 5.2.0 '@aws-sdk/types': 3.696.0 - tslib: 2.8.1 + tslib: 2.8.0 '@aws-crypto/supports-web-crypto@5.2.0': dependencies: - tslib: 2.8.1 + tslib: 2.8.0 '@aws-crypto/util@5.2.0': dependencies: '@aws-sdk/types': 3.696.0 '@smithy/util-utf8': 2.3.0 - tslib: 2.8.1 + tslib: 2.8.0 '@aws-sdk/client-s3@3.701.0': dependencies: @@ -17353,7 +17258,7 @@ snapshots: '@smithy/util-middleware': 3.0.10 '@smithy/util-retry': 3.0.10 '@smithy/util-utf8': 3.0.0 - tslib: 2.8.1 + tslib: 2.8.0 transitivePeerDependencies: - aws-crt @@ -17396,7 +17301,7 @@ snapshots: '@smithy/util-middleware': 3.0.10 '@smithy/util-retry': 3.0.10 '@smithy/util-utf8': 3.0.0 - tslib: 2.8.1 + tslib: 2.8.0 transitivePeerDependencies: - aws-crt @@ -17441,7 +17346,7 @@ snapshots: '@smithy/util-middleware': 3.0.10 '@smithy/util-retry': 3.0.10 '@smithy/util-utf8': 3.0.0 - tslib: 2.8.1 + tslib: 2.8.0 transitivePeerDependencies: - aws-crt @@ -17457,7 +17362,7 @@ snapshots: '@smithy/types': 3.7.1 '@smithy/util-middleware': 3.0.10 fast-xml-parser: 4.4.1 - tslib: 2.8.1 + tslib: 2.8.0 '@aws-sdk/credential-provider-env@3.696.0': dependencies: @@ -17465,7 +17370,7 @@ snapshots: '@aws-sdk/types': 3.696.0 '@smithy/property-provider': 3.1.10 '@smithy/types': 3.7.1 - tslib: 2.8.1 + tslib: 2.8.0 '@aws-sdk/credential-provider-http@3.696.0': dependencies: @@ -17478,7 +17383,7 @@ snapshots: '@smithy/smithy-client': 3.4.5 '@smithy/types': 3.7.1 '@smithy/util-stream': 3.3.1 - tslib: 2.8.1 + tslib: 2.8.0 '@aws-sdk/credential-provider-ini@3.699.0(@aws-sdk/client-sso-oidc@3.699.0(@aws-sdk/client-sts@3.699.0))(@aws-sdk/client-sts@3.699.0)': dependencies: @@ -17494,7 +17399,7 @@ snapshots: '@smithy/property-provider': 3.1.10 '@smithy/shared-ini-file-loader': 3.1.11 '@smithy/types': 3.7.1 - tslib: 2.8.1 + tslib: 2.8.0 transitivePeerDependencies: - '@aws-sdk/client-sso-oidc' - aws-crt @@ -17512,7 +17417,7 @@ snapshots: '@smithy/property-provider': 3.1.10 '@smithy/shared-ini-file-loader': 3.1.11 '@smithy/types': 3.7.1 - tslib: 2.8.1 + tslib: 2.8.0 transitivePeerDependencies: - '@aws-sdk/client-sso-oidc' - '@aws-sdk/client-sts' @@ -17525,7 +17430,7 @@ snapshots: '@smithy/property-provider': 3.1.10 '@smithy/shared-ini-file-loader': 3.1.11 '@smithy/types': 3.7.1 - tslib: 2.8.1 + tslib: 2.8.0 '@aws-sdk/credential-provider-sso@3.699.0(@aws-sdk/client-sso-oidc@3.699.0(@aws-sdk/client-sts@3.699.0))': dependencies: @@ -17536,7 +17441,7 @@ snapshots: '@smithy/property-provider': 3.1.10 '@smithy/shared-ini-file-loader': 3.1.11 '@smithy/types': 3.7.1 - tslib: 2.8.1 + tslib: 2.8.0 transitivePeerDependencies: - '@aws-sdk/client-sso-oidc' - aws-crt @@ -17548,7 +17453,7 @@ snapshots: '@aws-sdk/types': 3.696.0 '@smithy/property-provider': 3.1.10 '@smithy/types': 3.7.1 - tslib: 2.8.1 + tslib: 2.8.0 '@aws-sdk/middleware-bucket-endpoint@3.696.0': dependencies: @@ -17558,14 +17463,14 @@ snapshots: '@smithy/protocol-http': 4.1.7 '@smithy/types': 3.7.1 '@smithy/util-config-provider': 3.0.0 - tslib: 2.8.1 + tslib: 2.8.0 '@aws-sdk/middleware-expect-continue@3.696.0': dependencies: '@aws-sdk/types': 3.696.0 '@smithy/protocol-http': 4.1.7 '@smithy/types': 3.7.1 - tslib: 2.8.1 + tslib: 2.8.0 '@aws-sdk/middleware-flexible-checksums@3.701.0': dependencies: @@ -17581,33 +17486,33 @@ snapshots: '@smithy/util-middleware': 3.0.10 '@smithy/util-stream': 3.3.1 '@smithy/util-utf8': 3.0.0 - tslib: 2.8.1 + tslib: 2.8.0 '@aws-sdk/middleware-host-header@3.696.0': dependencies: '@aws-sdk/types': 3.696.0 '@smithy/protocol-http': 4.1.7 '@smithy/types': 3.7.1 - tslib: 2.8.1 + tslib: 2.8.0 '@aws-sdk/middleware-location-constraint@3.696.0': dependencies: '@aws-sdk/types': 3.696.0 '@smithy/types': 3.7.1 - tslib: 2.8.1 + tslib: 2.8.0 '@aws-sdk/middleware-logger@3.696.0': dependencies: '@aws-sdk/types': 3.696.0 '@smithy/types': 3.7.1 - tslib: 2.8.1 + tslib: 2.8.0 '@aws-sdk/middleware-recursion-detection@3.696.0': dependencies: '@aws-sdk/types': 3.696.0 '@smithy/protocol-http': 4.1.7 '@smithy/types': 3.7.1 - tslib: 2.8.1 + tslib: 2.8.0 '@aws-sdk/middleware-sdk-s3@3.696.0': dependencies: @@ -17624,13 +17529,13 @@ snapshots: '@smithy/util-middleware': 3.0.10 '@smithy/util-stream': 3.3.1 '@smithy/util-utf8': 3.0.0 - tslib: 2.8.1 + tslib: 2.8.0 '@aws-sdk/middleware-ssec@3.696.0': dependencies: '@aws-sdk/types': 3.696.0 '@smithy/types': 3.7.1 - tslib: 2.8.1 + tslib: 2.8.0 '@aws-sdk/middleware-user-agent@3.696.0': dependencies: @@ -17640,7 +17545,7 @@ snapshots: '@smithy/core': 2.5.4 '@smithy/protocol-http': 4.1.7 '@smithy/types': 3.7.1 - tslib: 2.8.1 + tslib: 2.8.0 '@aws-sdk/region-config-resolver@3.696.0': dependencies: @@ -17649,7 +17554,7 @@ snapshots: '@smithy/types': 3.7.1 '@smithy/util-config-provider': 3.0.0 '@smithy/util-middleware': 3.0.10 - tslib: 2.8.1 + tslib: 2.8.0 '@aws-sdk/signature-v4-multi-region@3.696.0': dependencies: @@ -17658,7 +17563,7 @@ snapshots: '@smithy/protocol-http': 4.1.7 '@smithy/signature-v4': 4.2.3 '@smithy/types': 3.7.1 - tslib: 2.8.1 + tslib: 2.8.0 '@aws-sdk/token-providers@3.699.0(@aws-sdk/client-sso-oidc@3.699.0(@aws-sdk/client-sts@3.699.0))': dependencies: @@ -17667,34 +17572,34 @@ snapshots: '@smithy/property-provider': 3.1.10 '@smithy/shared-ini-file-loader': 3.1.11 '@smithy/types': 3.7.1 - tslib: 2.8.1 + tslib: 2.8.0 '@aws-sdk/types@3.696.0': dependencies: '@smithy/types': 3.7.1 - tslib: 2.8.1 + tslib: 2.8.0 '@aws-sdk/util-arn-parser@3.693.0': dependencies: - tslib: 2.8.1 + tslib: 2.8.0 '@aws-sdk/util-endpoints@3.696.0': dependencies: '@aws-sdk/types': 3.696.0 '@smithy/types': 3.7.1 '@smithy/util-endpoints': 2.1.6 - tslib: 2.8.1 + tslib: 2.8.0 '@aws-sdk/util-locate-window@3.693.0': dependencies: - tslib: 2.8.1 + tslib: 2.8.0 '@aws-sdk/util-user-agent-browser@3.696.0': dependencies: '@aws-sdk/types': 3.696.0 '@smithy/types': 3.7.1 bowser: 2.11.0 - tslib: 2.8.1 + tslib: 2.8.0 '@aws-sdk/util-user-agent-node@3.696.0': dependencies: @@ -17702,12 +17607,12 @@ snapshots: '@aws-sdk/types': 3.696.0 '@smithy/node-config-provider': 3.1.11 '@smithy/types': 3.7.1 - tslib: 2.8.1 + tslib: 2.8.0 '@aws-sdk/xml-builder@3.696.0': dependencies: '@smithy/types': 3.7.1 - tslib: 2.8.1 + tslib: 2.8.0 '@babel/code-frame@7.24.7': dependencies: @@ -17719,18 +17624,10 @@ snapshots: '@babel/highlight': 7.25.9 picocolors: 1.1.1 - '@babel/code-frame@7.26.2': - dependencies: - '@babel/helper-validator-identifier': 7.25.9 - js-tokens: 4.0.0 - picocolors: 1.1.1 - '@babel/compat-data@7.25.4': {} '@babel/compat-data@7.25.9': {} - '@babel/compat-data@7.26.3': {} - '@babel/core@7.25.2': dependencies: '@ampproject/remapping': 2.3.0 @@ -17744,7 +17641,7 @@ snapshots: '@babel/traverse': 7.25.4 '@babel/types': 7.25.4 convert-source-map: 2.0.0 - debug: 4.3.6 + debug: 4.3.6(supports-color@8.1.1) gensync: 1.0.0-beta.2 json5: 2.2.3 semver: 6.3.1 @@ -17765,14 +17662,6 @@ snapshots: '@jridgewell/trace-mapping': 0.3.25 jsesc: 3.0.2 - '@babel/generator@7.26.3': - dependencies: - '@babel/parser': 7.26.3 - '@babel/types': 7.26.3 - '@jridgewell/gen-mapping': 0.3.8 - '@jridgewell/trace-mapping': 0.3.25 - jsesc: 3.1.0 - '@babel/helper-annotate-as-pure@7.24.7': dependencies: '@babel/types': 7.25.4 @@ -17842,20 +17731,9 @@ snapshots: '@babel/core': 7.25.2 '@babel/helper-compilation-targets': 7.25.9 '@babel/helper-plugin-utils': 7.25.9 - debug: 4.4.0(supports-color@8.1.1) - lodash.debounce: 4.0.8 - resolve: 1.22.10 - transitivePeerDependencies: - - supports-color - - '@babel/helper-define-polyfill-provider@0.6.3(@babel/core@7.25.2)': - dependencies: - '@babel/core': 7.25.2 - '@babel/helper-compilation-targets': 7.25.9 - '@babel/helper-plugin-utils': 7.25.9 - debug: 4.4.0(supports-color@8.1.1) + debug: 4.3.7(supports-color@8.1.1) lodash.debounce: 4.0.8 - resolve: 1.22.10 + resolve: 1.22.8 transitivePeerDependencies: - supports-color @@ -17907,15 +17785,6 @@ snapshots: transitivePeerDependencies: - supports-color - '@babel/helper-module-transforms@7.26.0(@babel/core@7.25.2)': - dependencies: - '@babel/core': 7.25.2 - '@babel/helper-module-imports': 7.25.9 - '@babel/helper-validator-identifier': 7.25.9 - '@babel/traverse': 7.26.4 - transitivePeerDependencies: - - supports-color - '@babel/helper-optimise-call-expression@7.24.7': dependencies: '@babel/types': 7.25.4 @@ -18030,10 +17899,6 @@ snapshots: dependencies: '@babel/types': 7.25.9 - '@babel/parser@7.26.3': - dependencies: - '@babel/types': 7.26.3 - '@babel/plugin-bugfix-firefox-class-in-computed-class-key@7.25.3(@babel/core@7.25.2)': dependencies: '@babel/core': 7.25.2 @@ -18146,7 +18011,7 @@ snapshots: '@babel/core': 7.25.2 '@babel/helper-plugin-utils': 7.25.9 - '@babel/plugin-syntax-flow@7.26.0(@babel/core@7.25.2)': + '@babel/plugin-syntax-flow@7.25.9(@babel/core@7.25.2)': dependencies: '@babel/core': 7.25.2 '@babel/helper-plugin-utils': 7.25.9 @@ -18351,7 +18216,7 @@ snapshots: dependencies: '@babel/core': 7.25.2 '@babel/helper-plugin-utils': 7.25.9 - '@babel/plugin-syntax-flow': 7.26.0(@babel/core@7.25.2) + '@babel/plugin-syntax-flow': 7.25.9(@babel/core@7.25.2) '@babel/plugin-transform-for-of@7.25.9(@babel/core@7.25.2)': dependencies: @@ -18417,14 +18282,6 @@ snapshots: transitivePeerDependencies: - supports-color - '@babel/plugin-transform-modules-commonjs@7.26.3(@babel/core@7.25.2)': - dependencies: - '@babel/core': 7.25.2 - '@babel/helper-module-transforms': 7.26.0(@babel/core@7.25.2) - '@babel/helper-plugin-utils': 7.25.9 - transitivePeerDependencies: - - supports-color - '@babel/plugin-transform-modules-systemjs@7.25.0(@babel/core@7.25.2)': dependencies: '@babel/core': 7.25.2 @@ -18541,7 +18398,7 @@ snapshots: '@babel/helper-module-imports': 7.25.9 '@babel/helper-plugin-utils': 7.25.9 '@babel/plugin-syntax-jsx': 7.25.9(@babel/core@7.25.2) - '@babel/types': 7.26.3 + '@babel/types': 7.25.9 transitivePeerDependencies: - supports-color @@ -18573,9 +18430,9 @@ snapshots: '@babel/core': 7.25.2 '@babel/helper-module-imports': 7.25.9 '@babel/helper-plugin-utils': 7.25.9 - babel-plugin-polyfill-corejs2: 0.4.12(@babel/core@7.25.2) + babel-plugin-polyfill-corejs2: 0.4.11(@babel/core@7.25.2) babel-plugin-polyfill-corejs3: 0.10.6(@babel/core@7.25.2) - babel-plugin-polyfill-regenerator: 0.6.3(@babel/core@7.25.2) + babel-plugin-polyfill-regenerator: 0.6.2(@babel/core@7.25.2) semver: 6.3.1 transitivePeerDependencies: - supports-color @@ -18619,7 +18476,7 @@ snapshots: transitivePeerDependencies: - supports-color - '@babel/plugin-transform-typescript@7.26.3(@babel/core@7.25.2)': + '@babel/plugin-transform-typescript@7.25.9(@babel/core@7.25.2)': dependencies: '@babel/core': 7.25.2 '@babel/helper-annotate-as-pure': 7.25.9 @@ -18767,14 +18624,14 @@ snapshots: transitivePeerDependencies: - supports-color - '@babel/preset-typescript@7.26.0(@babel/core@7.25.2)': + '@babel/preset-typescript@7.25.9(@babel/core@7.25.2)': dependencies: '@babel/core': 7.25.2 '@babel/helper-plugin-utils': 7.25.9 '@babel/helper-validator-option': 7.25.9 '@babel/plugin-syntax-jsx': 7.25.9(@babel/core@7.25.2) - '@babel/plugin-transform-modules-commonjs': 7.26.3(@babel/core@7.25.2) - '@babel/plugin-transform-typescript': 7.26.3(@babel/core@7.25.2) + '@babel/plugin-transform-modules-commonjs': 7.25.9(@babel/core@7.25.2) + '@babel/plugin-transform-typescript': 7.25.9(@babel/core@7.25.2) transitivePeerDependencies: - supports-color @@ -18795,10 +18652,6 @@ snapshots: dependencies: regenerator-runtime: 0.14.1 - '@babel/runtime@7.26.0': - dependencies: - regenerator-runtime: 0.14.1 - '@babel/template@7.25.0': dependencies: '@babel/code-frame': 7.24.7 @@ -18818,7 +18671,7 @@ snapshots: '@babel/parser': 7.25.4 '@babel/template': 7.25.0 '@babel/types': 7.25.4 - debug: 4.3.7 + debug: 4.3.7(supports-color@8.1.1) globals: 11.12.0 transitivePeerDependencies: - supports-color @@ -18830,19 +18683,7 @@ snapshots: '@babel/parser': 7.25.9 '@babel/template': 7.25.9 '@babel/types': 7.25.9 - debug: 4.4.0(supports-color@8.1.1) - globals: 11.12.0 - transitivePeerDependencies: - - supports-color - - '@babel/traverse@7.26.4': - dependencies: - '@babel/code-frame': 7.26.2 - '@babel/generator': 7.26.3 - '@babel/parser': 7.26.3 - '@babel/template': 7.25.9 - '@babel/types': 7.26.3 - debug: 4.4.0(supports-color@8.1.1) + debug: 4.3.7(supports-color@8.1.1) globals: 11.12.0 transitivePeerDependencies: - supports-color @@ -18858,15 +18699,10 @@ snapshots: '@babel/helper-string-parser': 7.25.9 '@babel/helper-validator-identifier': 7.25.9 - '@babel/types@7.26.3': - dependencies: - '@babel/helper-string-parser': 7.25.9 - '@babel/helper-validator-identifier': 7.25.9 - '@badeball/cypress-configuration@6.1.1': dependencies: - '@babel/parser': 7.26.3 - debug: 4.4.0(supports-color@8.1.1) + '@babel/parser': 7.25.4 + debug: 4.3.7(supports-color@8.1.1) esbuild: 0.19.12 glob: 7.2.3 minimatch: 3.1.2 @@ -18892,7 +18728,7 @@ snapshots: common-ancestor-path: 1.0.1 cosmiconfig: 9.0.0(typescript@5.5.4) cypress: 13.13.3 - debug: 4.4.0(supports-color@8.1.1) + debug: 4.3.6(supports-color@8.1.1) error-stack-parser: 2.1.4 esbuild: 0.23.1 glob: 11.0.0 @@ -18908,7 +18744,7 @@ snapshots: '@bahmutov/cypress-esbuild-preprocessor@2.2.2(esbuild@0.23.1)': dependencies: - debug: 4.3.6 + debug: 4.3.6(supports-color@8.1.1) esbuild: 0.23.1 transitivePeerDependencies: - supports-color @@ -19802,7 +19638,7 @@ snapshots: eth-json-rpc-filters: 6.0.1 eventemitter3: 5.0.1 keccak: 3.0.4 - preact: 10.25.4 + preact: 10.24.3 sha.js: 2.4.11 transitivePeerDependencies: - supports-color @@ -19873,7 +19709,7 @@ snapshots: micromatch: 4.0.8 ts-pattern: 4.3.0 unified: 10.1.2 - yaml: 2.6.1 + yaml: 2.6.0 zod: 3.23.8 transitivePeerDependencies: - '@effect-ts/otel-node' @@ -19895,17 +19731,17 @@ snapshots: '@contentlayer/utils@0.3.4': dependencies: '@effect-ts/core': 0.60.5 - '@effect-ts/otel': 0.15.1(@effect-ts/core@0.60.5)(@opentelemetry/api@1.9.0)(@opentelemetry/core@1.27.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@1.27.0(@opentelemetry/api@1.9.0)) - '@effect-ts/otel-exporter-trace-otlp-grpc': 0.15.1(@effect-ts/core@0.60.5)(@opentelemetry/api@1.9.0)(@opentelemetry/core@1.27.0(@opentelemetry/api@1.9.0))(@opentelemetry/exporter-trace-otlp-grpc@0.39.1(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@1.27.0(@opentelemetry/api@1.9.0)) - '@effect-ts/otel-sdk-trace-node': 0.15.1(@effect-ts/core@0.60.5)(@opentelemetry/api@1.9.0)(@opentelemetry/core@1.27.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@1.27.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-node@1.27.0(@opentelemetry/api@1.9.0)) + '@effect-ts/otel': 0.15.1(@effect-ts/core@0.60.5)(@opentelemetry/api@1.9.0)(@opentelemetry/core@1.25.1(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@1.25.1(@opentelemetry/api@1.9.0)) + '@effect-ts/otel-exporter-trace-otlp-grpc': 0.15.1(@effect-ts/core@0.60.5)(@opentelemetry/api@1.9.0)(@opentelemetry/core@1.25.1(@opentelemetry/api@1.9.0))(@opentelemetry/exporter-trace-otlp-grpc@0.39.1(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@1.25.1(@opentelemetry/api@1.9.0)) + '@effect-ts/otel-sdk-trace-node': 0.15.1(@effect-ts/core@0.60.5)(@opentelemetry/api@1.9.0)(@opentelemetry/core@1.25.1(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@1.25.1(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-node@1.27.0(@opentelemetry/api@1.9.0)) '@js-temporal/polyfill': 0.4.4 '@opentelemetry/api': 1.9.0 - '@opentelemetry/core': 1.27.0(@opentelemetry/api@1.9.0) + '@opentelemetry/core': 1.25.1(@opentelemetry/api@1.9.0) '@opentelemetry/exporter-trace-otlp-grpc': 0.39.1(@opentelemetry/api@1.9.0) - '@opentelemetry/resources': 1.27.0(@opentelemetry/api@1.9.0) - '@opentelemetry/sdk-trace-base': 1.27.0(@opentelemetry/api@1.9.0) + '@opentelemetry/resources': 1.25.1(@opentelemetry/api@1.9.0) + '@opentelemetry/sdk-trace-base': 1.25.1(@opentelemetry/api@1.9.0) '@opentelemetry/sdk-trace-node': 1.27.0(@opentelemetry/api@1.9.0) - '@opentelemetry/semantic-conventions': 1.27.0 + '@opentelemetry/semantic-conventions': 1.26.0 chokidar: 3.6.0 hash-wasm: 4.11.0 inflection: 2.0.1 @@ -19945,7 +19781,7 @@ snapshots: chalk: 4.1.2 cli-table3: 0.6.3 commander: 10.0.1 - debug: 4.4.0(supports-color@8.1.1) + debug: 4.3.7(supports-color@8.1.1) error-stack-parser: 2.1.4 figures: 3.2.0 glob: 10.4.5 @@ -19971,7 +19807,7 @@ snapshots: type-fest: 4.25.0 util-arity: 1.1.0 xmlbuilder: 15.1.1 - yaml: 2.6.1 + yaml: 2.5.0 yup: 1.2.0 '@cucumber/gherkin-streams@5.0.1(@cucumber/gherkin@28.0.0)(@cucumber/message-streams@4.0.1(@cucumber/messages@25.0.1))(@cucumber/messages@24.1.0)': @@ -20062,7 +19898,7 @@ snapshots: '@babel/preset-env': 7.25.4(@babel/core@7.25.2) babel-loader: 9.1.3(@babel/core@7.25.2)(webpack@5.94.0(esbuild@0.23.1)) bluebird: 3.7.1 - debug: 4.4.0(supports-color@8.1.1) + debug: 4.3.6(supports-color@8.1.1) lodash: 4.17.21 webpack: 5.94.0(esbuild@0.23.1) transitivePeerDependencies: @@ -20087,50 +19923,50 @@ snapshots: dependencies: '@effect-ts/system': 0.57.5 - '@effect-ts/otel-exporter-trace-otlp-grpc@0.15.1(@effect-ts/core@0.60.5)(@opentelemetry/api@1.9.0)(@opentelemetry/core@1.27.0(@opentelemetry/api@1.9.0))(@opentelemetry/exporter-trace-otlp-grpc@0.39.1(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@1.27.0(@opentelemetry/api@1.9.0))': + '@effect-ts/otel-exporter-trace-otlp-grpc@0.15.1(@effect-ts/core@0.60.5)(@opentelemetry/api@1.9.0)(@opentelemetry/core@1.25.1(@opentelemetry/api@1.9.0))(@opentelemetry/exporter-trace-otlp-grpc@0.39.1(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@1.25.1(@opentelemetry/api@1.9.0))': dependencies: '@effect-ts/core': 0.60.5 - '@effect-ts/otel': 0.15.1(@effect-ts/core@0.60.5)(@opentelemetry/api@1.9.0)(@opentelemetry/core@1.27.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@1.27.0(@opentelemetry/api@1.9.0)) + '@effect-ts/otel': 0.15.1(@effect-ts/core@0.60.5)(@opentelemetry/api@1.9.0)(@opentelemetry/core@1.25.1(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@1.25.1(@opentelemetry/api@1.9.0)) '@opentelemetry/api': 1.9.0 - '@opentelemetry/core': 1.27.0(@opentelemetry/api@1.9.0) + '@opentelemetry/core': 1.25.1(@opentelemetry/api@1.9.0) '@opentelemetry/exporter-trace-otlp-grpc': 0.39.1(@opentelemetry/api@1.9.0) - '@opentelemetry/sdk-trace-base': 1.27.0(@opentelemetry/api@1.9.0) + '@opentelemetry/sdk-trace-base': 1.25.1(@opentelemetry/api@1.9.0) - '@effect-ts/otel-sdk-trace-node@0.15.1(@effect-ts/core@0.60.5)(@opentelemetry/api@1.9.0)(@opentelemetry/core@1.27.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@1.27.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-node@1.27.0(@opentelemetry/api@1.9.0))': + '@effect-ts/otel-sdk-trace-node@0.15.1(@effect-ts/core@0.60.5)(@opentelemetry/api@1.9.0)(@opentelemetry/core@1.25.1(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@1.25.1(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-node@1.27.0(@opentelemetry/api@1.9.0))': dependencies: '@effect-ts/core': 0.60.5 - '@effect-ts/otel': 0.15.1(@effect-ts/core@0.60.5)(@opentelemetry/api@1.9.0)(@opentelemetry/core@1.27.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@1.27.0(@opentelemetry/api@1.9.0)) + '@effect-ts/otel': 0.15.1(@effect-ts/core@0.60.5)(@opentelemetry/api@1.9.0)(@opentelemetry/core@1.25.1(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@1.25.1(@opentelemetry/api@1.9.0)) '@opentelemetry/api': 1.9.0 - '@opentelemetry/core': 1.27.0(@opentelemetry/api@1.9.0) - '@opentelemetry/sdk-trace-base': 1.27.0(@opentelemetry/api@1.9.0) + '@opentelemetry/core': 1.25.1(@opentelemetry/api@1.9.0) + '@opentelemetry/sdk-trace-base': 1.25.1(@opentelemetry/api@1.9.0) '@opentelemetry/sdk-trace-node': 1.27.0(@opentelemetry/api@1.9.0) - '@effect-ts/otel@0.15.1(@effect-ts/core@0.60.5)(@opentelemetry/api@1.9.0)(@opentelemetry/core@1.27.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@1.27.0(@opentelemetry/api@1.9.0))': + '@effect-ts/otel@0.15.1(@effect-ts/core@0.60.5)(@opentelemetry/api@1.9.0)(@opentelemetry/core@1.25.1(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@1.25.1(@opentelemetry/api@1.9.0))': dependencies: '@effect-ts/core': 0.60.5 '@opentelemetry/api': 1.9.0 - '@opentelemetry/core': 1.27.0(@opentelemetry/api@1.9.0) - '@opentelemetry/sdk-trace-base': 1.27.0(@opentelemetry/api@1.9.0) + '@opentelemetry/core': 1.25.1(@opentelemetry/api@1.9.0) + '@opentelemetry/sdk-trace-base': 1.25.1(@opentelemetry/api@1.9.0) '@effect-ts/system@0.57.5': {} '@emnapi/core@1.2.0': dependencies: '@emnapi/wasi-threads': 1.0.1 - tslib: 2.8.1 + tslib: 2.8.0 '@emnapi/runtime@1.2.0': dependencies: - tslib: 2.8.1 + tslib: 2.8.0 '@emnapi/wasi-threads@1.0.1': dependencies: - tslib: 2.8.1 + tslib: 2.8.0 '@emotion/babel-plugin@11.12.0': dependencies: '@babel/helper-module-imports': 7.24.7 - '@babel/runtime': 7.26.0 + '@babel/runtime': 7.25.4 '@emotion/hash': 0.9.2 '@emotion/memoize': 0.9.0 '@emotion/serialize': 1.3.1 @@ -20233,13 +20069,15 @@ snapshots: '@emotion/weak-memoize@0.4.0': {} + '@endo/env-options@1.1.8': {} + '@esbuild-plugins/node-resolve@0.1.4(esbuild@0.23.1)': dependencies: '@types/resolve': 1.20.2 - debug: 4.4.0(supports-color@8.1.1) + debug: 4.3.7(supports-color@8.1.1) esbuild: 0.23.1 escape-string-regexp: 4.0.0 - resolve: 1.22.10 + resolve: 1.22.8 transitivePeerDependencies: - supports-color @@ -20463,7 +20301,7 @@ snapshots: '@eslint/eslintrc@2.1.4': dependencies: ajv: 6.12.6 - debug: 4.3.7 + debug: 4.3.7(supports-color@8.1.1) espree: 9.6.1 globals: 13.24.0 ignore: 5.3.2 @@ -20851,7 +20689,7 @@ snapshots: '@humanwhocodes/config-array@0.11.14': dependencies: '@humanwhocodes/object-schema': 2.0.3 - debug: 4.3.7 + debug: 4.3.7(supports-color@8.1.1) minimatch: 3.1.2 transitivePeerDependencies: - supports-color @@ -21078,12 +20916,6 @@ snapshots: '@jridgewell/sourcemap-codec': 1.5.0 '@jridgewell/trace-mapping': 0.3.25 - '@jridgewell/gen-mapping@0.3.8': - dependencies: - '@jridgewell/set-array': 1.2.1 - '@jridgewell/sourcemap-codec': 1.5.0 - '@jridgewell/trace-mapping': 0.3.25 - '@jridgewell/resolve-uri@3.1.2': {} '@jridgewell/set-array@1.2.1': {} @@ -21110,13 +20942,13 @@ snapshots: '@js-temporal/polyfill@0.4.4': dependencies: jsbi: 4.3.0 - tslib: 2.8.1 + tslib: 2.8.0 '@jsdevtools/ono@7.1.3': {} '@koa/router@9.4.0': dependencies: - debug: 4.4.0(supports-color@8.1.1) + debug: 4.3.7(supports-color@8.1.1) http-errors: 1.8.1 koa-compose: 4.1.0 methods: 1.1.2 @@ -21265,7 +21097,7 @@ snapshots: '@manypkg/find-root@1.1.0': dependencies: - '@babel/runtime': 7.26.0 + '@babel/runtime': 7.25.9 '@types/node': 12.20.55 find-up: 4.1.0 fs-extra: 8.1.0 @@ -21439,7 +21271,7 @@ snapshots: bufferutil: 4.0.8 cross-fetch: 4.0.0(encoding@0.1.13) date-fns: 2.30.0 - debug: 4.4.0(supports-color@8.1.1) + debug: 4.3.7(supports-color@8.1.1) eciesjs: 0.3.20 eventemitter2: 6.4.9 readable-stream: 3.6.2 @@ -21467,7 +21299,7 @@ snapshots: '@types/dom-screen-wake-lock': 1.0.3 bowser: 2.11.0 cross-fetch: 4.0.0(encoding@0.1.13) - debug: 4.4.0(supports-color@8.1.1) + debug: 4.3.7(supports-color@8.1.1) eciesjs: 0.3.20 eth-rpc-errors: 4.0.3 eventemitter2: 6.4.9 @@ -21499,7 +21331,7 @@ snapshots: dependencies: '@ethereumjs/tx': 4.2.0 '@types/debug': 4.1.12 - debug: 4.4.0(supports-color@8.1.1) + debug: 4.3.7(supports-color@8.1.1) semver: 7.6.3 superstruct: 1.0.4 transitivePeerDependencies: @@ -21512,7 +21344,7 @@ snapshots: '@noble/hashes': 1.5.0 '@scure/base': 1.1.9 '@types/debug': 4.1.12 - debug: 4.4.0(supports-color@8.1.1) + debug: 4.3.7(supports-color@8.1.1) pony-cause: 2.1.11 semver: 7.6.3 uuid: 9.0.1 @@ -21526,7 +21358,7 @@ snapshots: '@noble/hashes': 1.5.0 '@scure/base': 1.1.9 '@types/debug': 4.1.12 - debug: 4.4.0(supports-color@8.1.1) + debug: 4.3.7(supports-color@8.1.1) pony-cause: 2.1.11 semver: 7.6.3 uuid: 9.0.1 @@ -21550,7 +21382,7 @@ snapshots: '@motionone/easing': 10.18.0 '@motionone/types': 10.17.1 '@motionone/utils': 10.18.0 - tslib: 2.8.1 + tslib: 2.8.0 '@motionone/dom@10.18.0': dependencies: @@ -21559,23 +21391,23 @@ snapshots: '@motionone/types': 10.17.1 '@motionone/utils': 10.18.0 hey-listen: 1.0.8 - tslib: 2.8.1 + tslib: 2.8.0 '@motionone/easing@10.18.0': dependencies: '@motionone/utils': 10.18.0 - tslib: 2.8.1 + tslib: 2.8.0 '@motionone/generators@10.18.0': dependencies: '@motionone/types': 10.17.1 '@motionone/utils': 10.18.0 - tslib: 2.8.1 + tslib: 2.8.0 '@motionone/svelte@10.16.4': dependencies: '@motionone/dom': 10.18.0 - tslib: 2.8.1 + tslib: 2.8.0 '@motionone/types@10.17.1': {} @@ -21583,12 +21415,12 @@ snapshots: dependencies: '@motionone/types': 10.17.1 hey-listen: 1.0.8 - tslib: 2.8.1 + tslib: 2.8.0 '@motionone/vue@10.16.4': dependencies: '@motionone/dom': 10.18.0 - tslib: 2.8.1 + tslib: 2.8.0 '@msgpackr-extract/msgpackr-extract-darwin-arm64@3.0.3': optional: true @@ -21760,7 +21592,7 @@ snapshots: '@nomicfoundation/hardhat-ethers@3.0.7(ethers@6.13.2(bufferutil@4.0.8)(utf-8-validate@5.0.10))(hardhat@2.22.9(bufferutil@4.0.8)(ts-node@10.9.2(@types/node@22.7.5)(typescript@5.5.4))(typescript@5.5.4)(utf-8-validate@5.0.10))': dependencies: - debug: 4.4.0(supports-color@8.1.1) + debug: 4.3.7(supports-color@8.1.1) ethers: 6.13.2(bufferutil@4.0.8)(utf-8-validate@5.0.10) hardhat: 2.22.9(bufferutil@4.0.8)(ts-node@10.9.2(@types/node@22.7.5)(typescript@5.5.4))(typescript@5.5.4)(utf-8-validate@5.0.10) lodash.isequal: 4.5.0 @@ -21798,11 +21630,11 @@ snapshots: '@ethersproject/address': 5.7.0 cbor: 8.1.0 chalk: 2.4.2 - debug: 4.4.0(supports-color@8.1.1) + debug: 4.3.7(supports-color@8.1.1) hardhat: 2.22.9(bufferutil@4.0.8)(ts-node@10.9.2(@types/node@22.7.5)(typescript@5.5.4))(typescript@5.5.4)(utf-8-validate@5.0.10) lodash.clonedeep: 4.5.0 semver: 6.3.1 - table: 6.9.0 + table: 6.8.2 undici: 5.28.4 transitivePeerDependencies: - supports-color @@ -21859,7 +21691,7 @@ snapshots: '@ethersproject/address': 5.7.0 cbor: 8.1.0 chalk: 2.4.2 - debug: 4.3.6 + debug: 4.3.6(supports-color@8.1.1) fs-extra: 7.0.1 hardhat: 2.22.9(bufferutil@4.0.8)(ts-node@10.9.2(@types/node@16.18.105)(typescript@5.5.4))(typescript@5.5.4)(utf-8-validate@5.0.10) lodash: 4.17.21 @@ -22008,7 +21840,7 @@ snapshots: '@nrwl/tao@19.7.2': dependencies: nx: 19.7.2 - tslib: 2.8.1 + tslib: 2.8.0 transitivePeerDependencies: - '@swc-node/register' - '@swc/core' @@ -22159,6 +21991,10 @@ snapshots: '@opentelemetry/api@1.9.0': {} + '@opentelemetry/context-async-hooks@1.25.1(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/context-async-hooks@1.27.0(@opentelemetry/api@1.9.0)': dependencies: '@opentelemetry/api': 1.9.0 @@ -22191,9 +22027,9 @@ snapshots: '@opentelemetry/instrumentation-connect@0.38.0(@opentelemetry/api@1.9.0)': dependencies: '@opentelemetry/api': 1.9.0 - '@opentelemetry/core': 1.27.0(@opentelemetry/api@1.9.0) + '@opentelemetry/core': 1.25.1(@opentelemetry/api@1.9.0) '@opentelemetry/instrumentation': 0.52.1(@opentelemetry/api@1.9.0) - '@opentelemetry/semantic-conventions': 1.27.0 + '@opentelemetry/semantic-conventions': 1.26.0 '@types/connect': 3.4.36 transitivePeerDependencies: - supports-color @@ -22201,25 +22037,25 @@ snapshots: '@opentelemetry/instrumentation-express@0.41.1(@opentelemetry/api@1.9.0)': dependencies: '@opentelemetry/api': 1.9.0 - '@opentelemetry/core': 1.27.0(@opentelemetry/api@1.9.0) + '@opentelemetry/core': 1.25.1(@opentelemetry/api@1.9.0) '@opentelemetry/instrumentation': 0.52.1(@opentelemetry/api@1.9.0) - '@opentelemetry/semantic-conventions': 1.27.0 + '@opentelemetry/semantic-conventions': 1.26.0 transitivePeerDependencies: - supports-color '@opentelemetry/instrumentation-fastify@0.38.0(@opentelemetry/api@1.9.0)': dependencies: '@opentelemetry/api': 1.9.0 - '@opentelemetry/core': 1.27.0(@opentelemetry/api@1.9.0) + '@opentelemetry/core': 1.25.1(@opentelemetry/api@1.9.0) '@opentelemetry/instrumentation': 0.52.1(@opentelemetry/api@1.9.0) - '@opentelemetry/semantic-conventions': 1.27.0 + '@opentelemetry/semantic-conventions': 1.26.0 transitivePeerDependencies: - supports-color '@opentelemetry/instrumentation-fs@0.14.0(@opentelemetry/api@1.9.0)': dependencies: '@opentelemetry/api': 1.9.0 - '@opentelemetry/core': 1.27.0(@opentelemetry/api@1.9.0) + '@opentelemetry/core': 1.25.1(@opentelemetry/api@1.9.0) '@opentelemetry/instrumentation': 0.52.1(@opentelemetry/api@1.9.0) transitivePeerDependencies: - supports-color @@ -22234,9 +22070,9 @@ snapshots: '@opentelemetry/instrumentation-hapi@0.40.0(@opentelemetry/api@1.9.0)': dependencies: '@opentelemetry/api': 1.9.0 - '@opentelemetry/core': 1.27.0(@opentelemetry/api@1.9.0) + '@opentelemetry/core': 1.25.1(@opentelemetry/api@1.9.0) '@opentelemetry/instrumentation': 0.52.1(@opentelemetry/api@1.9.0) - '@opentelemetry/semantic-conventions': 1.27.0 + '@opentelemetry/semantic-conventions': 1.26.0 transitivePeerDependencies: - supports-color @@ -22255,16 +22091,16 @@ snapshots: '@opentelemetry/api': 1.9.0 '@opentelemetry/instrumentation': 0.52.1(@opentelemetry/api@1.9.0) '@opentelemetry/redis-common': 0.36.2 - '@opentelemetry/semantic-conventions': 1.27.0 + '@opentelemetry/semantic-conventions': 1.26.0 transitivePeerDependencies: - supports-color '@opentelemetry/instrumentation-koa@0.42.0(@opentelemetry/api@1.9.0)': dependencies: '@opentelemetry/api': 1.9.0 - '@opentelemetry/core': 1.27.0(@opentelemetry/api@1.9.0) + '@opentelemetry/core': 1.25.1(@opentelemetry/api@1.9.0) '@opentelemetry/instrumentation': 0.52.1(@opentelemetry/api@1.9.0) - '@opentelemetry/semantic-conventions': 1.27.0 + '@opentelemetry/semantic-conventions': 1.26.0 transitivePeerDependencies: - supports-color @@ -22273,16 +22109,16 @@ snapshots: '@opentelemetry/api': 1.9.0 '@opentelemetry/instrumentation': 0.52.1(@opentelemetry/api@1.9.0) '@opentelemetry/sdk-metrics': 1.25.1(@opentelemetry/api@1.9.0) - '@opentelemetry/semantic-conventions': 1.27.0 + '@opentelemetry/semantic-conventions': 1.26.0 transitivePeerDependencies: - supports-color '@opentelemetry/instrumentation-mongoose@0.40.0(@opentelemetry/api@1.9.0)': dependencies: '@opentelemetry/api': 1.9.0 - '@opentelemetry/core': 1.27.0(@opentelemetry/api@1.9.0) + '@opentelemetry/core': 1.25.1(@opentelemetry/api@1.9.0) '@opentelemetry/instrumentation': 0.52.1(@opentelemetry/api@1.9.0) - '@opentelemetry/semantic-conventions': 1.27.0 + '@opentelemetry/semantic-conventions': 1.26.0 transitivePeerDependencies: - supports-color @@ -22290,7 +22126,7 @@ snapshots: dependencies: '@opentelemetry/api': 1.9.0 '@opentelemetry/instrumentation': 0.52.1(@opentelemetry/api@1.9.0) - '@opentelemetry/semantic-conventions': 1.27.0 + '@opentelemetry/semantic-conventions': 1.26.0 '@opentelemetry/sql-common': 0.40.1(@opentelemetry/api@1.9.0) transitivePeerDependencies: - supports-color @@ -22299,7 +22135,7 @@ snapshots: dependencies: '@opentelemetry/api': 1.9.0 '@opentelemetry/instrumentation': 0.52.1(@opentelemetry/api@1.9.0) - '@opentelemetry/semantic-conventions': 1.27.0 + '@opentelemetry/semantic-conventions': 1.26.0 '@types/mysql': 2.15.22 transitivePeerDependencies: - supports-color @@ -22308,7 +22144,7 @@ snapshots: dependencies: '@opentelemetry/api': 1.9.0 '@opentelemetry/instrumentation': 0.52.1(@opentelemetry/api@1.9.0) - '@opentelemetry/semantic-conventions': 1.27.0 + '@opentelemetry/semantic-conventions': 1.26.0 transitivePeerDependencies: - supports-color @@ -22316,7 +22152,7 @@ snapshots: dependencies: '@opentelemetry/api': 1.9.0 '@opentelemetry/instrumentation': 0.52.1(@opentelemetry/api@1.9.0) - '@opentelemetry/semantic-conventions': 1.27.0 + '@opentelemetry/semantic-conventions': 1.26.0 '@opentelemetry/sql-common': 0.40.1(@opentelemetry/api@1.9.0) '@types/pg': 8.6.1 '@types/pg-pool': 2.0.4 @@ -22328,7 +22164,7 @@ snapshots: '@opentelemetry/api': 1.9.0 '@opentelemetry/instrumentation': 0.52.1(@opentelemetry/api@1.9.0) '@opentelemetry/redis-common': 0.36.2 - '@opentelemetry/semantic-conventions': 1.27.0 + '@opentelemetry/semantic-conventions': 1.26.0 transitivePeerDependencies: - supports-color @@ -22437,6 +22273,13 @@ snapshots: '@opentelemetry/resources': 1.13.0(@opentelemetry/api@1.9.0) '@opentelemetry/semantic-conventions': 1.13.0 + '@opentelemetry/sdk-trace-base@1.25.1(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/core': 1.25.1(@opentelemetry/api@1.9.0) + '@opentelemetry/resources': 1.25.1(@opentelemetry/api@1.9.0) + '@opentelemetry/semantic-conventions': 1.25.1 + '@opentelemetry/sdk-trace-base@1.27.0(@opentelemetry/api@1.9.0)': dependencies: '@opentelemetry/api': 1.9.0 @@ -22465,7 +22308,7 @@ snapshots: '@opentelemetry/sql-common@0.40.1(@opentelemetry/api@1.9.0)': dependencies: '@opentelemetry/api': 1.9.0 - '@opentelemetry/core': 1.27.0(@opentelemetry/api@1.9.0) + '@opentelemetry/core': 1.25.1(@opentelemetry/api@1.9.0) '@parcel/watcher-android-arm64@2.4.1': optional: true @@ -22539,7 +22382,7 @@ snapshots: dependencies: '@opentelemetry/api': 1.9.0 '@opentelemetry/instrumentation': 0.52.1(@opentelemetry/api@1.9.0) - '@opentelemetry/sdk-trace-base': 1.27.0(@opentelemetry/api@1.9.0) + '@opentelemetry/sdk-trace-base': 1.25.1(@opentelemetry/api@1.9.0) transitivePeerDependencies: - supports-color @@ -22568,9 +22411,9 @@ snapshots: '@pythnetwork/price-service-client@1.9.0(bufferutil@4.0.8)(utf-8-validate@5.0.10)': dependencies: - '@pythnetwork/price-service-sdk': 1.8.0 - '@types/ws': 8.5.13 - axios: 1.7.9 + '@pythnetwork/price-service-sdk': 1.7.1 + '@types/ws': 8.5.12 + axios: 1.7.7(debug@4.3.7) axios-retry: 3.9.1 isomorphic-ws: 4.0.1(ws@8.18.0(bufferutil@4.0.8)(utf-8-validate@5.0.10)) ts-log: 2.2.7 @@ -22580,7 +22423,7 @@ snapshots: - debug - utf-8-validate - '@pythnetwork/price-service-sdk@1.8.0': + '@pythnetwork/price-service-sdk@1.7.1': dependencies: bn.js: 5.2.1 @@ -22599,7 +22442,7 @@ snapshots: '@radix-ui/primitive@1.0.1': dependencies: - '@babel/runtime': 7.26.0 + '@babel/runtime': 7.25.9 '@radix-ui/primitive@1.1.0': {} @@ -22707,7 +22550,7 @@ snapshots: '@radix-ui/react-compose-refs@1.0.1(@types/react@18.2.37)(react@18.3.1)': dependencies: - '@babel/runtime': 7.26.0 + '@babel/runtime': 7.25.9 react: 18.3.1 optionalDependencies: '@types/react': 18.2.37 @@ -22726,7 +22569,7 @@ snapshots: '@radix-ui/react-context@1.0.1(@types/react@18.2.37)(react@18.3.1)': dependencies: - '@babel/runtime': 7.26.0 + '@babel/runtime': 7.25.9 react: 18.3.1 optionalDependencies: '@types/react': 18.2.37 @@ -22745,7 +22588,7 @@ snapshots: '@radix-ui/react-dialog@1.0.5(@types/react-dom@18.2.6)(@types/react@18.2.37)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: - '@babel/runtime': 7.26.0 + '@babel/runtime': 7.25.9 '@radix-ui/primitive': 1.0.1 '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.2.37)(react@18.3.1) '@radix-ui/react-context': 1.0.1(@types/react@18.2.37)(react@18.3.1) @@ -22796,7 +22639,7 @@ snapshots: '@radix-ui/react-dismissable-layer@1.0.5(@types/react-dom@18.2.6)(@types/react@18.2.37)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: - '@babel/runtime': 7.26.0 + '@babel/runtime': 7.25.9 '@radix-ui/primitive': 1.0.1 '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.2.37)(react@18.3.1) '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.6)(@types/react@18.2.37)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) @@ -22851,7 +22694,7 @@ snapshots: '@radix-ui/react-focus-guards@1.0.1(@types/react@18.2.37)(react@18.3.1)': dependencies: - '@babel/runtime': 7.26.0 + '@babel/runtime': 7.25.9 react: 18.3.1 optionalDependencies: '@types/react': 18.2.37 @@ -22864,7 +22707,7 @@ snapshots: '@radix-ui/react-focus-scope@1.0.4(@types/react-dom@18.2.6)(@types/react@18.2.37)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: - '@babel/runtime': 7.26.0 + '@babel/runtime': 7.25.9 '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.2.37)(react@18.3.1) '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.6)(@types/react@18.2.37)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.2.37)(react@18.3.1) @@ -22902,7 +22745,7 @@ snapshots: '@radix-ui/react-id@1.0.1(@types/react@18.2.37)(react@18.3.1)': dependencies: - '@babel/runtime': 7.26.0 + '@babel/runtime': 7.25.9 '@radix-ui/react-use-layout-effect': 1.0.1(@types/react@18.2.37)(react@18.3.1) react: 18.3.1 optionalDependencies: @@ -23011,7 +22854,7 @@ snapshots: '@radix-ui/react-portal@1.0.4(@types/react-dom@18.2.6)(@types/react@18.2.37)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: - '@babel/runtime': 7.26.0 + '@babel/runtime': 7.25.9 '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.6)(@types/react@18.2.37)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) @@ -23041,7 +22884,7 @@ snapshots: '@radix-ui/react-presence@1.0.1(@types/react-dom@18.2.6)(@types/react@18.2.37)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: - '@babel/runtime': 7.26.0 + '@babel/runtime': 7.25.9 '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.2.37)(react@18.3.1) '@radix-ui/react-use-layout-effect': 1.0.1(@types/react@18.2.37)(react@18.3.1) react: 18.3.1 @@ -23062,7 +22905,7 @@ snapshots: '@radix-ui/react-primitive@1.0.3(@types/react-dom@18.2.6)(@types/react@18.2.37)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: - '@babel/runtime': 7.26.0 + '@babel/runtime': 7.25.9 '@radix-ui/react-slot': 1.0.2(@types/react@18.2.37)(react@18.3.1) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) @@ -23162,7 +23005,7 @@ snapshots: '@radix-ui/react-slot@1.0.2(@types/react@18.2.37)(react@18.3.1)': dependencies: - '@babel/runtime': 7.26.0 + '@babel/runtime': 7.25.9 '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.2.37)(react@18.3.1) react: 18.3.1 optionalDependencies: @@ -23255,7 +23098,7 @@ snapshots: '@radix-ui/react-use-callback-ref@1.0.1(@types/react@18.2.37)(react@18.3.1)': dependencies: - '@babel/runtime': 7.26.0 + '@babel/runtime': 7.25.9 react: 18.3.1 optionalDependencies: '@types/react': 18.2.37 @@ -23268,7 +23111,7 @@ snapshots: '@radix-ui/react-use-controllable-state@1.0.1(@types/react@18.2.37)(react@18.3.1)': dependencies: - '@babel/runtime': 7.26.0 + '@babel/runtime': 7.25.9 '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.2.37)(react@18.3.1) react: 18.3.1 optionalDependencies: @@ -23283,7 +23126,7 @@ snapshots: '@radix-ui/react-use-escape-keydown@1.0.3(@types/react@18.2.37)(react@18.3.1)': dependencies: - '@babel/runtime': 7.26.0 + '@babel/runtime': 7.25.9 '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.2.37)(react@18.3.1) react: 18.3.1 optionalDependencies: @@ -23298,7 +23141,7 @@ snapshots: '@radix-ui/react-use-layout-effect@1.0.1(@types/react@18.2.37)(react@18.3.1)': dependencies: - '@babel/runtime': 7.26.0 + '@babel/runtime': 7.25.9 react: 18.3.1 optionalDependencies: '@types/react': 18.2.37 @@ -23414,7 +23257,7 @@ snapshots: semver: 7.6.3 strip-ansi: 5.2.0 wcwidth: 1.0.1 - yaml: 2.6.1 + yaml: 2.6.0 transitivePeerDependencies: - typescript @@ -23424,7 +23267,7 @@ snapshots: chalk: 4.1.2 execa: 5.1.1 fast-glob: 3.3.2 - fast-xml-parser: 4.5.1 + fast-xml-parser: 4.5.0 logkitty: 0.7.1 '@react-native-community/cli-platform-apple@14.0.0': @@ -23433,7 +23276,7 @@ snapshots: chalk: 4.1.2 execa: 5.1.1 fast-glob: 3.3.2 - fast-xml-parser: 4.5.1 + fast-xml-parser: 4.5.0 ora: 5.4.1 '@react-native-community/cli-platform-ios@14.0.0': @@ -23444,7 +23287,7 @@ snapshots: dependencies: '@react-native-community/cli-debugger-ui': 14.0.0 '@react-native-community/cli-tools': 14.0.0 - compression: 1.7.5 + compression: 1.7.4 connect: 3.7.0 errorhandler: 1.5.1 nocache: 3.0.4 @@ -23460,7 +23303,7 @@ snapshots: dependencies: '@react-native-community/cli-debugger-ui': 14.0.0-alpha.11 '@react-native-community/cli-tools': 14.0.0-alpha.11 - compression: 1.7.5 + compression: 1.7.4 connect: 3.7.0 errorhandler: 1.5.1 nocache: 3.0.4 @@ -23482,7 +23325,7 @@ snapshots: open: 6.4.0 ora: 5.4.1 semver: 7.6.3 - shell-quote: 1.8.2 + shell-quote: 1.8.1 sudo-prompt: 9.2.1 '@react-native-community/cli-tools@14.0.0-alpha.11': @@ -23495,7 +23338,7 @@ snapshots: open: 6.4.0 ora: 5.4.1 semver: 7.6.3 - shell-quote: 1.8.2 + shell-quote: 1.8.1 sudo-prompt: 9.2.1 '@react-native-community/cli-types@14.0.0': @@ -23541,7 +23384,7 @@ snapshots: '@babel/plugin-proposal-export-default-from': 7.25.9(@babel/core@7.25.2) '@babel/plugin-syntax-dynamic-import': 7.8.3(@babel/core@7.25.2) '@babel/plugin-syntax-export-default-from': 7.25.9(@babel/core@7.25.2) - '@babel/plugin-syntax-flow': 7.26.0(@babel/core@7.25.2) + '@babel/plugin-syntax-flow': 7.25.9(@babel/core@7.25.2) '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.25.2) '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.25.2) '@babel/plugin-transform-arrow-functions': 7.25.9(@babel/core@7.25.2) @@ -23557,7 +23400,7 @@ snapshots: '@babel/plugin-transform-function-name': 7.25.9(@babel/core@7.25.2) '@babel/plugin-transform-literals': 7.25.9(@babel/core@7.25.2) '@babel/plugin-transform-logical-assignment-operators': 7.25.9(@babel/core@7.25.2) - '@babel/plugin-transform-modules-commonjs': 7.26.3(@babel/core@7.25.2) + '@babel/plugin-transform-modules-commonjs': 7.25.9(@babel/core@7.25.2) '@babel/plugin-transform-named-capturing-groups-regex': 7.25.9(@babel/core@7.25.2) '@babel/plugin-transform-nullish-coalescing-operator': 7.25.9(@babel/core@7.25.2) '@babel/plugin-transform-numeric-separator': 7.25.9(@babel/core@7.25.2) @@ -23576,7 +23419,7 @@ snapshots: '@babel/plugin-transform-shorthand-properties': 7.25.9(@babel/core@7.25.2) '@babel/plugin-transform-spread': 7.25.9(@babel/core@7.25.2) '@babel/plugin-transform-sticky-regex': 7.25.9(@babel/core@7.25.2) - '@babel/plugin-transform-typescript': 7.26.3(@babel/core@7.25.2) + '@babel/plugin-transform-typescript': 7.25.9(@babel/core@7.25.2) '@babel/plugin-transform-unicode-regex': 7.25.9(@babel/core@7.25.2) '@babel/template': 7.25.9 '@react-native/babel-plugin-codegen': 0.75.2(@babel/preset-env@7.25.4(@babel/core@7.25.2)) @@ -23588,7 +23431,7 @@ snapshots: '@react-native/codegen@0.75.2(@babel/preset-env@7.25.4(@babel/core@7.25.2))': dependencies: - '@babel/parser': 7.26.3 + '@babel/parser': 7.25.9 '@babel/preset-env': 7.25.4(@babel/core@7.25.2) glob: 7.2.3 hermes-parser: 0.22.0 @@ -24047,14 +23890,14 @@ snapshots: '@sentry/types': 5.30.0 tslib: 1.14.1 - '@sentry/nextjs@8.26.0(@opentelemetry/api@1.9.0)(@opentelemetry/core@1.27.0(@opentelemetry/api@1.9.0))(@opentelemetry/instrumentation@0.52.1(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@1.27.0(@opentelemetry/api@1.9.0))(encoding@0.1.13)(next@14.2.6(@babel/core@7.25.2)(@opentelemetry/api@1.9.0)(babel-plugin-macros@3.1.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.77.8))(react@18.3.1)(webpack@5.94.0(esbuild@0.23.1))': + '@sentry/nextjs@8.26.0(@opentelemetry/api@1.9.0)(@opentelemetry/core@1.25.1(@opentelemetry/api@1.9.0))(@opentelemetry/instrumentation@0.52.1(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@1.25.1(@opentelemetry/api@1.9.0))(encoding@0.1.13)(next@14.2.6(@babel/core@7.25.2)(@opentelemetry/api@1.9.0)(babel-plugin-macros@3.1.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.77.8))(react@18.3.1)(webpack@5.94.0(esbuild@0.23.1))': dependencies: '@opentelemetry/instrumentation-http': 0.52.1(@opentelemetry/api@1.9.0) '@opentelemetry/semantic-conventions': 1.26.0 '@rollup/plugin-commonjs': 26.0.1(rollup@3.29.4) '@sentry/core': 8.26.0 '@sentry/node': 8.26.0 - '@sentry/opentelemetry': 8.26.0(@opentelemetry/api@1.9.0)(@opentelemetry/core@1.27.0(@opentelemetry/api@1.9.0))(@opentelemetry/instrumentation@0.52.1(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@1.27.0(@opentelemetry/api@1.9.0))(@opentelemetry/semantic-conventions@1.26.0) + '@sentry/opentelemetry': 8.26.0(@opentelemetry/api@1.9.0)(@opentelemetry/core@1.25.1(@opentelemetry/api@1.9.0))(@opentelemetry/instrumentation@0.52.1(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@1.25.1(@opentelemetry/api@1.9.0))(@opentelemetry/semantic-conventions@1.26.0) '@sentry/react': 8.26.0(react@18.3.1) '@sentry/types': 8.26.0 '@sentry/utils': 8.26.0 @@ -24093,8 +23936,8 @@ snapshots: '@sentry/node@8.26.0': dependencies: '@opentelemetry/api': 1.9.0 - '@opentelemetry/context-async-hooks': 1.27.0(@opentelemetry/api@1.9.0) - '@opentelemetry/core': 1.27.0(@opentelemetry/api@1.9.0) + '@opentelemetry/context-async-hooks': 1.25.1(@opentelemetry/api@1.9.0) + '@opentelemetry/core': 1.25.1(@opentelemetry/api@1.9.0) '@opentelemetry/instrumentation': 0.52.1(@opentelemetry/api@1.9.0) '@opentelemetry/instrumentation-connect': 0.38.0(@opentelemetry/api@1.9.0) '@opentelemetry/instrumentation-express': 0.41.1(@opentelemetry/api@1.9.0) @@ -24112,12 +23955,12 @@ snapshots: '@opentelemetry/instrumentation-nestjs-core': 0.39.0(@opentelemetry/api@1.9.0) '@opentelemetry/instrumentation-pg': 0.43.0(@opentelemetry/api@1.9.0) '@opentelemetry/instrumentation-redis-4': 0.41.0(@opentelemetry/api@1.9.0) - '@opentelemetry/resources': 1.27.0(@opentelemetry/api@1.9.0) - '@opentelemetry/sdk-trace-base': 1.27.0(@opentelemetry/api@1.9.0) - '@opentelemetry/semantic-conventions': 1.27.0 + '@opentelemetry/resources': 1.25.1(@opentelemetry/api@1.9.0) + '@opentelemetry/sdk-trace-base': 1.25.1(@opentelemetry/api@1.9.0) + '@opentelemetry/semantic-conventions': 1.26.0 '@prisma/instrumentation': 5.17.0 '@sentry/core': 8.26.0 - '@sentry/opentelemetry': 8.26.0(@opentelemetry/api@1.9.0)(@opentelemetry/core@1.27.0(@opentelemetry/api@1.9.0))(@opentelemetry/instrumentation@0.52.1(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@1.27.0(@opentelemetry/api@1.9.0))(@opentelemetry/semantic-conventions@1.27.0) + '@sentry/opentelemetry': 8.26.0(@opentelemetry/api@1.9.0)(@opentelemetry/core@1.25.1(@opentelemetry/api@1.9.0))(@opentelemetry/instrumentation@0.52.1(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@1.25.1(@opentelemetry/api@1.9.0))(@opentelemetry/semantic-conventions@1.26.0) '@sentry/types': 8.26.0 '@sentry/utils': 8.26.0 import-in-the-middle: 1.11.0 @@ -24126,28 +23969,17 @@ snapshots: transitivePeerDependencies: - supports-color - '@sentry/opentelemetry@8.26.0(@opentelemetry/api@1.9.0)(@opentelemetry/core@1.27.0(@opentelemetry/api@1.9.0))(@opentelemetry/instrumentation@0.52.1(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@1.27.0(@opentelemetry/api@1.9.0))(@opentelemetry/semantic-conventions@1.26.0)': + '@sentry/opentelemetry@8.26.0(@opentelemetry/api@1.9.0)(@opentelemetry/core@1.25.1(@opentelemetry/api@1.9.0))(@opentelemetry/instrumentation@0.52.1(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@1.25.1(@opentelemetry/api@1.9.0))(@opentelemetry/semantic-conventions@1.26.0)': dependencies: '@opentelemetry/api': 1.9.0 - '@opentelemetry/core': 1.27.0(@opentelemetry/api@1.9.0) + '@opentelemetry/core': 1.25.1(@opentelemetry/api@1.9.0) '@opentelemetry/instrumentation': 0.52.1(@opentelemetry/api@1.9.0) - '@opentelemetry/sdk-trace-base': 1.27.0(@opentelemetry/api@1.9.0) + '@opentelemetry/sdk-trace-base': 1.25.1(@opentelemetry/api@1.9.0) '@opentelemetry/semantic-conventions': 1.26.0 '@sentry/core': 8.26.0 '@sentry/types': 8.26.0 '@sentry/utils': 8.26.0 - '@sentry/opentelemetry@8.26.0(@opentelemetry/api@1.9.0)(@opentelemetry/core@1.27.0(@opentelemetry/api@1.9.0))(@opentelemetry/instrumentation@0.52.1(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@1.27.0(@opentelemetry/api@1.9.0))(@opentelemetry/semantic-conventions@1.27.0)': - dependencies: - '@opentelemetry/api': 1.9.0 - '@opentelemetry/core': 1.27.0(@opentelemetry/api@1.9.0) - '@opentelemetry/instrumentation': 0.52.1(@opentelemetry/api@1.9.0) - '@opentelemetry/sdk-trace-base': 1.27.0(@opentelemetry/api@1.9.0) - '@opentelemetry/semantic-conventions': 1.27.0 - '@sentry/core': 8.26.0 - '@sentry/types': 8.26.0 - '@sentry/utils': 8.26.0 - '@sentry/react@8.26.0(react@18.3.1)': dependencies: '@sentry/browser': 8.26.0 @@ -24282,16 +24114,16 @@ snapshots: '@smithy/abort-controller@3.1.8': dependencies: '@smithy/types': 3.7.1 - tslib: 2.8.1 + tslib: 2.8.0 '@smithy/chunked-blob-reader-native@3.0.1': dependencies: '@smithy/util-base64': 3.0.0 - tslib: 2.8.1 + tslib: 2.8.0 '@smithy/chunked-blob-reader@4.0.0': dependencies: - tslib: 2.8.1 + tslib: 2.8.0 '@smithy/config-resolver@3.0.12': dependencies: @@ -24299,7 +24131,7 @@ snapshots: '@smithy/types': 3.7.1 '@smithy/util-config-provider': 3.0.0 '@smithy/util-middleware': 3.0.10 - tslib: 2.8.1 + tslib: 2.8.0 '@smithy/core@2.5.4': dependencies: @@ -24310,7 +24142,7 @@ snapshots: '@smithy/util-middleware': 3.0.10 '@smithy/util-stream': 3.3.1 '@smithy/util-utf8': 3.0.0 - tslib: 2.8.1 + tslib: 2.8.0 '@smithy/credential-provider-imds@3.2.7': dependencies: @@ -24318,37 +24150,37 @@ snapshots: '@smithy/property-provider': 3.1.10 '@smithy/types': 3.7.1 '@smithy/url-parser': 3.0.10 - tslib: 2.8.1 + tslib: 2.8.0 '@smithy/eventstream-codec@3.1.9': dependencies: '@aws-crypto/crc32': 5.2.0 '@smithy/types': 3.7.1 '@smithy/util-hex-encoding': 3.0.0 - tslib: 2.8.1 + tslib: 2.8.0 '@smithy/eventstream-serde-browser@3.0.13': dependencies: '@smithy/eventstream-serde-universal': 3.0.12 '@smithy/types': 3.7.1 - tslib: 2.8.1 + tslib: 2.8.0 '@smithy/eventstream-serde-config-resolver@3.0.10': dependencies: '@smithy/types': 3.7.1 - tslib: 2.8.1 + tslib: 2.8.0 '@smithy/eventstream-serde-node@3.0.12': dependencies: '@smithy/eventstream-serde-universal': 3.0.12 '@smithy/types': 3.7.1 - tslib: 2.8.1 + tslib: 2.8.0 '@smithy/eventstream-serde-universal@3.0.12': dependencies: '@smithy/eventstream-codec': 3.1.9 '@smithy/types': 3.7.1 - tslib: 2.8.1 + tslib: 2.8.0 '@smithy/fetch-http-handler@4.1.1': dependencies: @@ -24356,52 +24188,52 @@ snapshots: '@smithy/querystring-builder': 3.0.10 '@smithy/types': 3.7.1 '@smithy/util-base64': 3.0.0 - tslib: 2.8.1 + tslib: 2.8.0 '@smithy/hash-blob-browser@3.1.9': dependencies: '@smithy/chunked-blob-reader': 4.0.0 '@smithy/chunked-blob-reader-native': 3.0.1 '@smithy/types': 3.7.1 - tslib: 2.8.1 + tslib: 2.8.0 '@smithy/hash-node@3.0.10': dependencies: '@smithy/types': 3.7.1 '@smithy/util-buffer-from': 3.0.0 '@smithy/util-utf8': 3.0.0 - tslib: 2.8.1 + tslib: 2.8.0 '@smithy/hash-stream-node@3.1.9': dependencies: '@smithy/types': 3.7.1 '@smithy/util-utf8': 3.0.0 - tslib: 2.8.1 + tslib: 2.8.0 '@smithy/invalid-dependency@3.0.10': dependencies: '@smithy/types': 3.7.1 - tslib: 2.8.1 + tslib: 2.8.0 '@smithy/is-array-buffer@2.2.0': dependencies: - tslib: 2.8.1 + tslib: 2.8.0 '@smithy/is-array-buffer@3.0.0': dependencies: - tslib: 2.8.1 + tslib: 2.8.0 '@smithy/md5-js@3.0.10': dependencies: '@smithy/types': 3.7.1 '@smithy/util-utf8': 3.0.0 - tslib: 2.8.1 + tslib: 2.8.0 '@smithy/middleware-content-length@3.0.12': dependencies: '@smithy/protocol-http': 4.1.7 '@smithy/types': 3.7.1 - tslib: 2.8.1 + tslib: 2.8.0 '@smithy/middleware-endpoint@3.2.4': dependencies: @@ -24412,7 +24244,7 @@ snapshots: '@smithy/types': 3.7.1 '@smithy/url-parser': 3.0.10 '@smithy/util-middleware': 3.0.10 - tslib: 2.8.1 + tslib: 2.8.0 '@smithy/middleware-retry@3.0.28': dependencies: @@ -24423,25 +24255,25 @@ snapshots: '@smithy/types': 3.7.1 '@smithy/util-middleware': 3.0.10 '@smithy/util-retry': 3.0.10 - tslib: 2.8.1 + tslib: 2.8.0 uuid: 9.0.1 '@smithy/middleware-serde@3.0.10': dependencies: '@smithy/types': 3.7.1 - tslib: 2.8.1 + tslib: 2.8.0 '@smithy/middleware-stack@3.0.10': dependencies: '@smithy/types': 3.7.1 - tslib: 2.8.1 + tslib: 2.8.0 '@smithy/node-config-provider@3.1.11': dependencies: '@smithy/property-provider': 3.1.10 '@smithy/shared-ini-file-loader': 3.1.11 '@smithy/types': 3.7.1 - tslib: 2.8.1 + tslib: 2.8.0 '@smithy/node-http-handler@3.3.1': dependencies: @@ -24449,28 +24281,28 @@ snapshots: '@smithy/protocol-http': 4.1.7 '@smithy/querystring-builder': 3.0.10 '@smithy/types': 3.7.1 - tslib: 2.8.1 + tslib: 2.8.0 '@smithy/property-provider@3.1.10': dependencies: '@smithy/types': 3.7.1 - tslib: 2.8.1 + tslib: 2.8.0 '@smithy/protocol-http@4.1.7': dependencies: '@smithy/types': 3.7.1 - tslib: 2.8.1 + tslib: 2.8.0 '@smithy/querystring-builder@3.0.10': dependencies: '@smithy/types': 3.7.1 '@smithy/util-uri-escape': 3.0.0 - tslib: 2.8.1 + tslib: 2.8.0 '@smithy/querystring-parser@3.0.10': dependencies: '@smithy/types': 3.7.1 - tslib: 2.8.1 + tslib: 2.8.0 '@smithy/service-error-classification@3.0.10': dependencies: @@ -24479,7 +24311,7 @@ snapshots: '@smithy/shared-ini-file-loader@3.1.11': dependencies: '@smithy/types': 3.7.1 - tslib: 2.8.1 + tslib: 2.8.0 '@smithy/signature-v4@4.2.3': dependencies: @@ -24490,7 +24322,7 @@ snapshots: '@smithy/util-middleware': 3.0.10 '@smithy/util-uri-escape': 3.0.0 '@smithy/util-utf8': 3.0.0 - tslib: 2.8.1 + tslib: 2.8.0 '@smithy/smithy-client@3.4.5': dependencies: @@ -24500,45 +24332,45 @@ snapshots: '@smithy/protocol-http': 4.1.7 '@smithy/types': 3.7.1 '@smithy/util-stream': 3.3.1 - tslib: 2.8.1 + tslib: 2.8.0 '@smithy/types@3.7.1': dependencies: - tslib: 2.8.1 + tslib: 2.8.0 '@smithy/url-parser@3.0.10': dependencies: '@smithy/querystring-parser': 3.0.10 '@smithy/types': 3.7.1 - tslib: 2.8.1 + tslib: 2.8.0 '@smithy/util-base64@3.0.0': dependencies: '@smithy/util-buffer-from': 3.0.0 '@smithy/util-utf8': 3.0.0 - tslib: 2.8.1 + tslib: 2.8.0 '@smithy/util-body-length-browser@3.0.0': dependencies: - tslib: 2.8.1 + tslib: 2.8.0 '@smithy/util-body-length-node@3.0.0': dependencies: - tslib: 2.8.1 + tslib: 2.8.0 '@smithy/util-buffer-from@2.2.0': dependencies: '@smithy/is-array-buffer': 2.2.0 - tslib: 2.8.1 + tslib: 2.8.0 '@smithy/util-buffer-from@3.0.0': dependencies: '@smithy/is-array-buffer': 3.0.0 - tslib: 2.8.1 + tslib: 2.8.0 '@smithy/util-config-provider@3.0.0': dependencies: - tslib: 2.8.1 + tslib: 2.8.0 '@smithy/util-defaults-mode-browser@3.0.28': dependencies: @@ -24546,7 +24378,7 @@ snapshots: '@smithy/smithy-client': 3.4.5 '@smithy/types': 3.7.1 bowser: 2.11.0 - tslib: 2.8.1 + tslib: 2.8.0 '@smithy/util-defaults-mode-node@3.0.28': dependencies: @@ -24556,28 +24388,28 @@ snapshots: '@smithy/property-provider': 3.1.10 '@smithy/smithy-client': 3.4.5 '@smithy/types': 3.7.1 - tslib: 2.8.1 + tslib: 2.8.0 '@smithy/util-endpoints@2.1.6': dependencies: '@smithy/node-config-provider': 3.1.11 '@smithy/types': 3.7.1 - tslib: 2.8.1 + tslib: 2.8.0 '@smithy/util-hex-encoding@3.0.0': dependencies: - tslib: 2.8.1 + tslib: 2.8.0 '@smithy/util-middleware@3.0.10': dependencies: '@smithy/types': 3.7.1 - tslib: 2.8.1 + tslib: 2.8.0 '@smithy/util-retry@3.0.10': dependencies: '@smithy/service-error-classification': 3.0.10 '@smithy/types': 3.7.1 - tslib: 2.8.1 + tslib: 2.8.0 '@smithy/util-stream@3.3.1': dependencies: @@ -24588,27 +24420,27 @@ snapshots: '@smithy/util-buffer-from': 3.0.0 '@smithy/util-hex-encoding': 3.0.0 '@smithy/util-utf8': 3.0.0 - tslib: 2.8.1 + tslib: 2.8.0 '@smithy/util-uri-escape@3.0.0': dependencies: - tslib: 2.8.1 + tslib: 2.8.0 '@smithy/util-utf8@2.3.0': dependencies: '@smithy/util-buffer-from': 2.2.0 - tslib: 2.8.1 + tslib: 2.8.0 '@smithy/util-utf8@3.0.0': dependencies: '@smithy/util-buffer-from': 3.0.0 - tslib: 2.8.1 + tslib: 2.8.0 '@smithy/util-waiter@3.1.9': dependencies: '@smithy/abort-controller': 3.1.8 '@smithy/types': 3.7.1 - tslib: 2.8.1 + tslib: 2.8.0 '@socket.io/component-emitter@3.1.2': {} @@ -24707,14 +24539,14 @@ snapshots: '@swc/helpers@0.5.5': dependencies: '@swc/counter': 0.1.3 - tslib: 2.8.1 + tslib: 2.8.0 '@synthetixio/core-contracts@1.1.1': {} '@synthetixio/router@3.4.0(hardhat@2.22.9(bufferutil@4.0.8)(ts-node@10.9.2(@types/node@20.3.2)(typescript@5.5.4))(typescript@5.5.4)(utf-8-validate@5.0.10))(solc@0.8.26)': dependencies: '@ethersproject/keccak256': 5.7.0 - debug: 4.3.6 + debug: 4.3.6(supports-color@8.1.1) hardhat: 2.22.9(bufferutil@4.0.8)(ts-node@10.9.2(@types/node@20.3.2)(typescript@5.5.4))(typescript@5.5.4)(utf-8-validate@5.0.10) mustache: 4.2.0 solc: 0.8.26 @@ -24761,7 +24593,7 @@ snapshots: '@textlint/markdown-to-ast@12.6.1': dependencies: '@textlint/ast-node-types': 12.6.1 - debug: 4.4.0(supports-color@8.1.1) + debug: 4.3.7(supports-color@8.1.1) mdast-util-gfm-autolink-literal: 0.1.3 remark-footnotes: 3.0.0 remark-frontmatter: 3.0.0 @@ -24791,7 +24623,7 @@ snapshots: dependencies: '@truffle/error': 0.1.1 '@truffle/interface-adapter': 0.5.37(bufferutil@4.0.8)(encoding@0.1.13)(utf-8-validate@5.0.10) - debug: 4.4.0(supports-color@8.1.1) + debug: 4.3.7(supports-color@8.1.1) web3: 1.7.4(bufferutil@4.0.8)(utf-8-validate@5.0.10) transitivePeerDependencies: - bufferutil @@ -24816,7 +24648,7 @@ snapshots: '@tybys/wasm-util@0.9.0': dependencies: - tslib: 2.8.1 + tslib: 2.8.0 '@typechain/ethers-v5@10.1.0(@ethersproject/abi@5.7.0)(@ethersproject/bytes@5.7.0)(@ethersproject/providers@5.7.2(bufferutil@4.0.8)(utf-8-validate@5.0.10))(ethers@5.7.1(bufferutil@4.0.8)(utf-8-validate@5.0.10))(typechain@8.1.0(typescript@5.5.4))(typescript@5.5.4)': dependencies: @@ -24898,24 +24730,24 @@ snapshots: '@types/babel__core@7.20.5': dependencies: - '@babel/parser': 7.26.3 - '@babel/types': 7.26.3 + '@babel/parser': 7.25.4 + '@babel/types': 7.25.4 '@types/babel__generator': 7.6.8 '@types/babel__template': 7.4.4 '@types/babel__traverse': 7.20.6 '@types/babel__generator@7.6.8': dependencies: - '@babel/types': 7.26.3 + '@babel/types': 7.25.4 '@types/babel__template@7.4.4': dependencies: - '@babel/parser': 7.26.3 - '@babel/types': 7.26.3 + '@babel/parser': 7.25.4 + '@babel/types': 7.25.4 '@types/babel__traverse@7.20.6': dependencies: - '@babel/types': 7.26.3 + '@babel/types': 7.25.4 '@types/big.js@6.2.2': {} @@ -25100,6 +24932,8 @@ snapshots: dependencies: '@types/ms': 0.7.34 + '@types/deep-freeze@0.1.5': {} + '@types/diff@5.2.1': {} '@types/dom-screen-wake-lock@1.0.3': {} @@ -25401,7 +25235,7 @@ snapshots: '@types/uuid@9.0.8': {} - '@types/ws@8.5.13': + '@types/ws@8.5.12': dependencies: '@types/node': 22.7.5 @@ -25431,7 +25265,7 @@ snapshots: '@typescript-eslint/scope-manager': 5.62.0 '@typescript-eslint/type-utils': 5.62.0(eslint@8.43.0)(typescript@5.5.4) '@typescript-eslint/utils': 5.62.0(eslint@8.43.0)(typescript@5.5.4) - debug: 4.3.6 + debug: 4.3.6(supports-color@8.1.1) eslint: 8.43.0 graphemer: 1.4.0 ignore: 5.3.2 @@ -25448,7 +25282,7 @@ snapshots: '@typescript-eslint/scope-manager': 5.62.0 '@typescript-eslint/types': 5.62.0 '@typescript-eslint/typescript-estree': 5.62.0(typescript@5.5.4) - debug: 4.3.6 + debug: 4.3.6(supports-color@8.1.1) eslint: 8.43.0 optionalDependencies: typescript: 5.5.4 @@ -25464,7 +25298,7 @@ snapshots: dependencies: '@typescript-eslint/typescript-estree': 5.62.0(typescript@5.5.4) '@typescript-eslint/utils': 5.62.0(eslint@8.43.0)(typescript@5.5.4) - debug: 4.3.7 + debug: 4.3.7(supports-color@8.1.1) eslint: 8.43.0 tsutils: 3.21.0(typescript@5.5.4) optionalDependencies: @@ -25478,7 +25312,7 @@ snapshots: dependencies: '@typescript-eslint/types': 5.62.0 '@typescript-eslint/visitor-keys': 5.62.0 - debug: 4.3.7 + debug: 4.3.7(supports-color@8.1.1) globby: 11.1.0 is-glob: 4.0.3 semver: 7.6.3 @@ -25515,11 +25349,11 @@ snapshots: '@usecannon/builder@2.17.1(bufferutil@4.0.8)(encoding@0.1.13)(hardhat@2.22.9(bufferutil@4.0.8)(ts-node@10.9.2(@types/node@20.3.2)(typescript@5.5.4))(typescript@5.5.4)(utf-8-validate@5.0.10))(solc@0.8.26)(typescript@5.5.4)(utf-8-validate@5.0.10)': dependencies: '@synthetixio/router': 3.4.0(hardhat@2.22.9(bufferutil@4.0.8)(ts-node@10.9.2(@types/node@20.3.2)(typescript@5.5.4))(typescript@5.5.4)(utf-8-validate@5.0.10))(solc@0.8.26) - axios: 1.7.7(debug@4.4.0) - axios-retry: 4.5.0(axios@1.7.7(debug@4.4.0)) + axios: 1.7.7(debug@4.3.7) + axios-retry: 4.5.0(axios@1.7.7(debug@4.3.7)) buffer: 6.0.3 chalk: 4.1.2 - debug: 4.4.0(supports-color@8.1.1) + debug: 4.3.7(supports-color@8.1.1) form-data: 4.0.0 fuse.js: 7.0.0 lodash: 4.17.21 @@ -25544,7 +25378,7 @@ snapshots: abitype: 1.0.6(typescript@5.5.4)(zod@3.23.8) chalk: 4.1.2 commander: 9.5.0 - debug: 4.4.0(supports-color@8.1.1) + debug: 4.3.7(supports-color@8.1.1) eth-provider: 0.13.7(bufferutil@4.0.8)(utf-8-validate@5.0.10) fastq: 1.17.1 fs-extra: 11.2.0 @@ -25570,7 +25404,7 @@ snapshots: dependencies: '@ethersproject/abi': 5.7.0 '@ethersproject/keccak256': 5.7.0 - debug: 4.3.7 + debug: 4.3.7(supports-color@8.1.1) mustache: 4.2.0 transitivePeerDependencies: - supports-color @@ -25591,7 +25425,7 @@ snapshots: deepmerge: 4.3.1 lru-cache: 10.4.3 media-query-parser: 2.0.2 - modern-ahocorasick: 1.1.0 + modern-ahocorasick: 1.0.1 picocolors: 1.1.1 transitivePeerDependencies: - babel-plugin-macros @@ -25620,13 +25454,13 @@ snapshots: chai: 5.1.2 tinyrainbow: 1.2.0 - '@vitest/mocker@2.1.8(vite@5.4.11(@types/node@22.7.5)(sass@1.77.8)(terser@5.37.0))': + '@vitest/mocker@2.1.8(vite@5.4.11(@types/node@22.7.5)(sass@1.77.8)(terser@5.36.0))': dependencies: '@vitest/spy': 2.1.8 estree-walker: 3.0.3 magic-string: 0.30.14 optionalDependencies: - vite: 5.4.11(@types/node@22.7.5)(sass@1.77.8)(terser@5.37.0) + vite: 5.4.11(@types/node@22.7.5)(sass@1.77.8)(terser@5.36.0) '@vitest/pretty-format@2.1.8': dependencies: @@ -26021,80 +25855,80 @@ snapshots: '@walletconnect/window-getters': 1.0.1 tslib: 1.14.1 - '@webassemblyjs/ast@1.14.1': + '@webassemblyjs/ast@1.12.1': dependencies: - '@webassemblyjs/helper-numbers': 1.13.2 - '@webassemblyjs/helper-wasm-bytecode': 1.13.2 + '@webassemblyjs/helper-numbers': 1.11.6 + '@webassemblyjs/helper-wasm-bytecode': 1.11.6 - '@webassemblyjs/floating-point-hex-parser@1.13.2': {} + '@webassemblyjs/floating-point-hex-parser@1.11.6': {} - '@webassemblyjs/helper-api-error@1.13.2': {} + '@webassemblyjs/helper-api-error@1.11.6': {} - '@webassemblyjs/helper-buffer@1.14.1': {} + '@webassemblyjs/helper-buffer@1.12.1': {} - '@webassemblyjs/helper-numbers@1.13.2': + '@webassemblyjs/helper-numbers@1.11.6': dependencies: - '@webassemblyjs/floating-point-hex-parser': 1.13.2 - '@webassemblyjs/helper-api-error': 1.13.2 + '@webassemblyjs/floating-point-hex-parser': 1.11.6 + '@webassemblyjs/helper-api-error': 1.11.6 '@xtuc/long': 4.2.2 - '@webassemblyjs/helper-wasm-bytecode@1.13.2': {} + '@webassemblyjs/helper-wasm-bytecode@1.11.6': {} - '@webassemblyjs/helper-wasm-section@1.14.1': + '@webassemblyjs/helper-wasm-section@1.12.1': dependencies: - '@webassemblyjs/ast': 1.14.1 - '@webassemblyjs/helper-buffer': 1.14.1 - '@webassemblyjs/helper-wasm-bytecode': 1.13.2 - '@webassemblyjs/wasm-gen': 1.14.1 + '@webassemblyjs/ast': 1.12.1 + '@webassemblyjs/helper-buffer': 1.12.1 + '@webassemblyjs/helper-wasm-bytecode': 1.11.6 + '@webassemblyjs/wasm-gen': 1.12.1 - '@webassemblyjs/ieee754@1.13.2': + '@webassemblyjs/ieee754@1.11.6': dependencies: '@xtuc/ieee754': 1.2.0 - '@webassemblyjs/leb128@1.13.2': + '@webassemblyjs/leb128@1.11.6': dependencies: '@xtuc/long': 4.2.2 - '@webassemblyjs/utf8@1.13.2': {} + '@webassemblyjs/utf8@1.11.6': {} - '@webassemblyjs/wasm-edit@1.14.1': + '@webassemblyjs/wasm-edit@1.12.1': dependencies: - '@webassemblyjs/ast': 1.14.1 - '@webassemblyjs/helper-buffer': 1.14.1 - '@webassemblyjs/helper-wasm-bytecode': 1.13.2 - '@webassemblyjs/helper-wasm-section': 1.14.1 - '@webassemblyjs/wasm-gen': 1.14.1 - '@webassemblyjs/wasm-opt': 1.14.1 - '@webassemblyjs/wasm-parser': 1.14.1 - '@webassemblyjs/wast-printer': 1.14.1 + '@webassemblyjs/ast': 1.12.1 + '@webassemblyjs/helper-buffer': 1.12.1 + '@webassemblyjs/helper-wasm-bytecode': 1.11.6 + '@webassemblyjs/helper-wasm-section': 1.12.1 + '@webassemblyjs/wasm-gen': 1.12.1 + '@webassemblyjs/wasm-opt': 1.12.1 + '@webassemblyjs/wasm-parser': 1.12.1 + '@webassemblyjs/wast-printer': 1.12.1 - '@webassemblyjs/wasm-gen@1.14.1': + '@webassemblyjs/wasm-gen@1.12.1': dependencies: - '@webassemblyjs/ast': 1.14.1 - '@webassemblyjs/helper-wasm-bytecode': 1.13.2 - '@webassemblyjs/ieee754': 1.13.2 - '@webassemblyjs/leb128': 1.13.2 - '@webassemblyjs/utf8': 1.13.2 + '@webassemblyjs/ast': 1.12.1 + '@webassemblyjs/helper-wasm-bytecode': 1.11.6 + '@webassemblyjs/ieee754': 1.11.6 + '@webassemblyjs/leb128': 1.11.6 + '@webassemblyjs/utf8': 1.11.6 - '@webassemblyjs/wasm-opt@1.14.1': + '@webassemblyjs/wasm-opt@1.12.1': dependencies: - '@webassemblyjs/ast': 1.14.1 - '@webassemblyjs/helper-buffer': 1.14.1 - '@webassemblyjs/wasm-gen': 1.14.1 - '@webassemblyjs/wasm-parser': 1.14.1 + '@webassemblyjs/ast': 1.12.1 + '@webassemblyjs/helper-buffer': 1.12.1 + '@webassemblyjs/wasm-gen': 1.12.1 + '@webassemblyjs/wasm-parser': 1.12.1 - '@webassemblyjs/wasm-parser@1.14.1': + '@webassemblyjs/wasm-parser@1.12.1': dependencies: - '@webassemblyjs/ast': 1.14.1 - '@webassemblyjs/helper-api-error': 1.13.2 - '@webassemblyjs/helper-wasm-bytecode': 1.13.2 - '@webassemblyjs/ieee754': 1.13.2 - '@webassemblyjs/leb128': 1.13.2 - '@webassemblyjs/utf8': 1.13.2 + '@webassemblyjs/ast': 1.12.1 + '@webassemblyjs/helper-api-error': 1.11.6 + '@webassemblyjs/helper-wasm-bytecode': 1.11.6 + '@webassemblyjs/ieee754': 1.11.6 + '@webassemblyjs/leb128': 1.11.6 + '@webassemblyjs/utf8': 1.11.6 - '@webassemblyjs/wast-printer@1.14.1': + '@webassemblyjs/wast-printer@1.12.1': dependencies: - '@webassemblyjs/ast': 1.14.1 + '@webassemblyjs/ast': 1.12.1 '@xtuc/long': 4.2.2 '@xmldom/xmldom@0.8.10': {} @@ -26108,7 +25942,7 @@ snapshots: '@yarnpkg/parsers@3.0.0-rc.46': dependencies: js-yaml: 3.14.1 - tslib: 2.8.1 + tslib: 2.8.0 '@zag-js/dom-query@0.16.0': {} @@ -26174,34 +26008,20 @@ snapshots: acorn: 8.14.0 optional: true - acorn-import-attributes@1.9.5(acorn@8.13.0): - dependencies: - acorn: 8.13.0 - acorn-import-attributes@1.9.5(acorn@8.14.0): dependencies: acorn: 8.14.0 - acorn-jsx@5.3.2(acorn@8.12.1): - dependencies: - acorn: 8.12.1 - - acorn-jsx@5.3.2(acorn@8.13.0): - dependencies: - acorn: 8.13.0 - acorn-jsx@5.3.2(acorn@8.14.0): dependencies: acorn: 8.14.0 acorn-walk@8.3.3: dependencies: - acorn: 8.12.1 + acorn: 8.14.0 acorn@8.12.1: {} - acorn@8.13.0: {} - acorn@8.14.0: {} add-stream@1.0.0: {} @@ -26216,13 +26036,13 @@ snapshots: agent-base@6.0.2: dependencies: - debug: 4.4.0(supports-color@8.1.1) + debug: 4.3.7(supports-color@8.1.1) transitivePeerDependencies: - supports-color agent-base@7.1.1: dependencies: - debug: 4.4.0(supports-color@8.1.1) + debug: 4.3.7(supports-color@8.1.1) transitivePeerDependencies: - supports-color @@ -26346,7 +26166,7 @@ snapshots: aria-hidden@1.2.4: dependencies: - tslib: 2.8.1 + tslib: 2.8.0 aria-query@5.1.3: dependencies: @@ -26451,7 +26271,7 @@ snapshots: asn1.js@4.10.1: dependencies: - bn.js: 4.12.1 + bn.js: 4.12.0 inherits: 2.0.4 minimalistic-assert: 1.0.1 @@ -26477,7 +26297,7 @@ snapshots: ast-types@0.15.2: dependencies: - tslib: 2.8.1 + tslib: 2.8.0 astral-regex@1.0.0: {} @@ -26491,7 +26311,7 @@ snapshots: async-mutex@0.2.6: dependencies: - tslib: 2.8.1 + tslib: 2.8.0 async-retry@1.3.3: dependencies: @@ -26509,8 +26329,8 @@ snapshots: autoprefixer@10.4.20(postcss@8.4.47): dependencies: - browserslist: 4.24.3 - caniuse-lite: 1.0.30001690 + browserslist: 4.24.2 + caniuse-lite: 1.0.30001669 fraction.js: 4.3.7 normalize-range: 0.1.2 picocolors: 1.1.1 @@ -26529,7 +26349,7 @@ snapshots: axios-retry@3.9.1: dependencies: - '@babel/runtime': 7.26.0 + '@babel/runtime': 7.25.9 is-retry-allowed: 2.2.0 axios-retry@4.5.0(axios@1.7.5(debug@4.3.6)): @@ -26537,14 +26357,14 @@ snapshots: axios: 1.7.5(debug@4.3.6) is-retry-allowed: 2.2.0 - axios-retry@4.5.0(axios@1.7.7(debug@4.4.0)): + axios-retry@4.5.0(axios@1.7.7(debug@4.3.7)): dependencies: - axios: 1.7.7(debug@4.4.0) + axios: 1.7.7(debug@4.3.7) is-retry-allowed: 2.2.0 axios@1.7.5: dependencies: - follow-redirects: 1.15.6(debug@4.4.0) + follow-redirects: 1.15.6(debug@4.3.7) form-data: 4.0.0 proxy-from-env: 1.1.0 transitivePeerDependencies: @@ -26558,22 +26378,14 @@ snapshots: transitivePeerDependencies: - debug - axios@1.7.7(debug@4.4.0): + axios@1.7.7(debug@4.3.7): dependencies: - follow-redirects: 1.15.6(debug@4.4.0) + follow-redirects: 1.15.6(debug@4.3.7) form-data: 4.0.0 proxy-from-env: 1.1.0 transitivePeerDependencies: - debug - axios@1.7.9: - dependencies: - follow-redirects: 1.15.9 - form-data: 4.0.1 - proxy-from-env: 1.1.0 - transitivePeerDependencies: - - debug - axobject-query@3.1.1: dependencies: deep-equal: 2.2.3 @@ -26599,7 +26411,7 @@ snapshots: dependencies: '@babel/core': 7.25.2 find-cache-dir: 4.0.0 - schema-utils: 4.3.0 + schema-utils: 4.2.0 webpack: 5.94.0(esbuild@0.23.1) babel-plugin-istanbul@6.1.1: @@ -26615,15 +26427,15 @@ snapshots: babel-plugin-jest-hoist@29.6.3: dependencies: '@babel/template': 7.25.0 - '@babel/types': 7.26.3 + '@babel/types': 7.25.4 '@types/babel__core': 7.20.5 '@types/babel__traverse': 7.20.6 babel-plugin-macros@3.1.0: dependencies: - '@babel/runtime': 7.26.0 + '@babel/runtime': 7.25.9 cosmiconfig: 7.1.0 - resolve: 1.22.10 + resolve: 1.22.8 babel-plugin-polyfill-corejs2@0.4.11(@babel/core@7.25.2): dependencies: @@ -26634,15 +26446,6 @@ snapshots: transitivePeerDependencies: - supports-color - babel-plugin-polyfill-corejs2@0.4.12(@babel/core@7.25.2): - dependencies: - '@babel/compat-data': 7.26.3 - '@babel/core': 7.25.2 - '@babel/helper-define-polyfill-provider': 0.6.3(@babel/core@7.25.2) - semver: 6.3.1 - transitivePeerDependencies: - - supports-color - babel-plugin-polyfill-corejs3@0.10.6(@babel/core@7.25.2): dependencies: '@babel/core': 7.25.2 @@ -26658,16 +26461,9 @@ snapshots: transitivePeerDependencies: - supports-color - babel-plugin-polyfill-regenerator@0.6.3(@babel/core@7.25.2): - dependencies: - '@babel/core': 7.25.2 - '@babel/helper-define-polyfill-provider': 0.6.3(@babel/core@7.25.2) - transitivePeerDependencies: - - supports-color - babel-plugin-transform-flow-enums@0.0.2(@babel/core@7.25.2): dependencies: - '@babel/plugin-syntax-flow': 7.26.0(@babel/core@7.25.2) + '@babel/plugin-syntax-flow': 7.25.9(@babel/core@7.25.2) transitivePeerDependencies: - '@babel/core' @@ -26761,8 +26557,6 @@ snapshots: bn.js@4.12.0: {} - bn.js@4.12.1: {} - bn.js@5.2.1: {} body-parser@1.20.2: @@ -26902,13 +26696,6 @@ snapshots: node-releases: 2.0.18 update-browserslist-db: 1.1.1(browserslist@4.24.2) - browserslist@4.24.3: - dependencies: - caniuse-lite: 1.0.30001690 - electron-to-chromium: 1.5.76 - node-releases: 2.0.19 - update-browserslist-db: 1.1.1(browserslist@4.24.3) - bs-logger@0.2.6: dependencies: fast-json-stable-stringify: 2.1.0 @@ -27054,7 +26841,7 @@ snapshots: camel-case@4.1.2: dependencies: pascal-case: 3.1.2 - tslib: 2.8.1 + tslib: 2.8.0 camelcase-css@2.0.1: {} @@ -27076,12 +26863,10 @@ snapshots: caniuse-lite@1.0.30001669: {} - caniuse-lite@1.0.30001690: {} - capital-case@1.0.4: dependencies: no-case: 3.0.4 - tslib: 2.8.1 + tslib: 2.8.0 upper-case-first: 2.0.2 caseless@0.12.0: {} @@ -27558,18 +27343,6 @@ snapshots: transitivePeerDependencies: - supports-color - compression@1.7.5: - dependencies: - bytes: 3.1.2 - compressible: 2.0.18 - debug: 2.6.9 - negotiator: 0.6.4 - on-headers: 1.0.2 - safe-buffer: 5.2.1 - vary: 1.1.2 - transitivePeerDependencies: - - supports-color - compute-scroll-into-view@3.0.3: {} compute-scroll-into-view@3.1.0: {} @@ -27777,7 +27550,7 @@ snapshots: create-ecdh@4.0.4: dependencies: - bn.js: 4.12.1 + bn.js: 4.12.0 elliptic: 6.5.7 create-hash@1.2.0: @@ -27908,7 +27681,7 @@ snapshots: commander: 6.2.1 common-tags: 1.8.2 dayjs: 1.11.13 - debug: 4.4.0(supports-color@8.1.1) + debug: 4.3.6(supports-color@8.1.1) enquirer: 2.4.1 eventemitter2: 6.4.7 execa: 4.1.0 @@ -28152,15 +27925,13 @@ snapshots: optionalDependencies: supports-color: 8.1.1 - debug@4.3.6: + debug@4.3.6(supports-color@8.1.1): dependencies: ms: 2.1.2 + optionalDependencies: + supports-color: 8.1.1 - debug@4.3.7: - dependencies: - ms: 2.1.3 - - debug@4.4.0(supports-color@8.1.1): + debug@4.3.7(supports-color@8.1.1): dependencies: ms: 2.1.3 optionalDependencies: @@ -28228,6 +27999,8 @@ snapshots: deep-extend@0.6.0: {} + deep-freeze@0.0.1: {} + deep-is@0.1.4: {} deep-object-diff@1.1.9: {} @@ -28305,7 +28078,7 @@ snapshots: detect-port@1.6.1: dependencies: address: 1.2.2 - debug: 4.4.0(supports-color@8.1.1) + debug: 4.3.7(supports-color@8.1.1) transitivePeerDependencies: - supports-color @@ -28338,7 +28111,7 @@ snapshots: diffie-hellman@5.0.3: dependencies: - bn.js: 4.12.1 + bn.js: 4.12.0 miller-rabin: 4.0.1 randombytes: 2.1.0 @@ -28375,7 +28148,7 @@ snapshots: dom-helpers@5.2.1: dependencies: - '@babel/runtime': 7.26.0 + '@babel/runtime': 7.25.9 csstype: 3.1.3 dom-serializer@1.4.1: @@ -28472,8 +28245,6 @@ snapshots: electron-to-chromium@1.5.44: {} - electron-to-chromium@1.5.76: {} - elliptic@6.5.4: dependencies: bn.js: 4.12.0 @@ -28522,7 +28293,7 @@ snapshots: engine.io-client@6.5.4(bufferutil@4.0.8)(utf-8-validate@5.0.10): dependencies: '@socket.io/component-emitter': 3.1.2 - debug: 4.3.7 + debug: 4.3.7(supports-color@8.1.1) engine.io-parser: 5.2.3 ws: 8.17.1(bufferutil@4.0.8)(utf-8-validate@5.0.10) xmlhttprequest-ssl: 2.0.0 @@ -28538,11 +28309,6 @@ snapshots: graceful-fs: 4.2.11 tapable: 2.2.1 - enhanced-resolve@5.18.0: - dependencies: - graceful-fs: 4.2.11 - tapable: 2.2.1 - enquirer@2.3.6: dependencies: ansi-colors: 4.1.3 @@ -28689,8 +28455,6 @@ snapshots: es-module-lexer@1.5.4: {} - es-module-lexer@1.6.0: {} - es-object-atoms@1.0.0: dependencies: es-errors: 1.3.0 @@ -28895,7 +28659,7 @@ snapshots: eslint-import-resolver-typescript@3.6.1(@typescript-eslint/parser@5.62.0(eslint@8.43.0)(typescript@5.5.4))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.29.1(@typescript-eslint/parser@5.62.0(eslint@8.43.0)(typescript@5.5.4))(eslint@8.43.0))(eslint@8.43.0): dependencies: - debug: 4.4.0(supports-color@8.1.1) + debug: 4.3.6(supports-color@8.1.1) enhanced-resolve: 5.17.1 eslint: 8.43.0 eslint-module-utils: 2.8.1(@typescript-eslint/parser@5.62.0(eslint@8.43.0)(typescript@5.5.4))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1(@typescript-eslint/parser@5.62.0(eslint@8.43.0)(typescript@5.5.4))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.29.1(@typescript-eslint/parser@5.62.0(eslint@8.43.0)(typescript@5.5.4))(eslint@8.43.0))(eslint@8.43.0))(eslint@8.43.0) @@ -29031,7 +28795,7 @@ snapshots: ajv: 6.12.6 chalk: 4.1.2 cross-spawn: 7.0.3 - debug: 4.3.6 + debug: 4.3.6(supports-color@8.1.1) doctrine: 3.0.0 escape-string-regexp: 4.0.0 eslint-scope: 7.2.2 @@ -29072,8 +28836,8 @@ snapshots: espree@9.6.1: dependencies: - acorn: 8.12.1 - acorn-jsx: 5.3.2(acorn@8.12.1) + acorn: 8.14.0 + acorn-jsx: 5.3.2(acorn@8.14.0) eslint-visitor-keys: 3.4.3 esprima@1.2.2: {} @@ -29209,7 +28973,7 @@ snapshots: eth-lib@0.1.29(bufferutil@4.0.8)(utf-8-validate@5.0.10): dependencies: - bn.js: 4.12.1 + bn.js: 4.12.0 elliptic: 6.5.7 nano-json-stream-parser: 0.1.2 servify: 0.1.12 @@ -29222,7 +28986,7 @@ snapshots: eth-lib@0.2.8: dependencies: - bn.js: 4.12.1 + bn.js: 4.12.0 elliptic: 6.5.7 xhr-request-promise: 0.1.3 @@ -29313,7 +29077,7 @@ snapshots: ethers@4.0.49: dependencies: aes-js: 3.0.0 - bn.js: 4.12.1 + bn.js: 4.12.0 elliptic: 6.5.4 hash.js: 1.1.3 js-sha3: 0.5.7 @@ -29624,7 +29388,7 @@ snapshots: extract-zip@2.0.1(supports-color@8.1.1): dependencies: - debug: 4.4.0(supports-color@8.1.1) + debug: 4.3.7(supports-color@8.1.1) get-stream: 5.2.0 yauzl: 2.10.0 optionalDependencies: @@ -29670,7 +29434,7 @@ snapshots: dependencies: strnum: 1.0.5 - fast-xml-parser@4.5.1: + fast-xml-parser@4.5.0: dependencies: strnum: 1.0.5 @@ -29817,23 +29581,21 @@ snapshots: flow-enums-runtime@0.0.6: {} - flow-parser@0.257.1: {} + flow-parser@0.250.0: {} fn.name@1.1.0: {} focus-lock@1.3.5: dependencies: - tslib: 2.8.1 + tslib: 2.8.0 follow-redirects@1.15.6(debug@4.3.6): optionalDependencies: - debug: 4.3.6 + debug: 4.3.6(supports-color@8.1.1) - follow-redirects@1.15.6(debug@4.4.0): + follow-redirects@1.15.6(debug@4.3.7): optionalDependencies: - debug: 4.4.0(supports-color@8.1.1) - - follow-redirects@1.15.9: {} + debug: 4.3.7(supports-color@8.1.1) for-each@0.3.3: dependencies: @@ -29866,12 +29628,6 @@ snapshots: combined-stream: 1.0.8 mime-types: 2.1.35 - form-data@4.0.1: - dependencies: - asynckit: 0.4.0 - combined-stream: 1.0.8 - mime-types: 2.1.35 - format@0.2.2: {} formdata-polyfill@4.0.10: @@ -30399,7 +30155,7 @@ snapshots: chalk: 2.4.2 chokidar: 3.6.0 ci-info: 2.0.0 - debug: 4.3.6 + debug: 4.3.6(supports-color@8.1.1) enquirer: 2.4.1 env-paths: 2.2.1 ethereum-cryptography: 1.2.0 @@ -30453,7 +30209,7 @@ snapshots: chalk: 2.4.2 chokidar: 3.6.0 ci-info: 2.0.0 - debug: 4.3.6 + debug: 4.3.6(supports-color@8.1.1) enquirer: 2.4.1 env-paths: 2.2.1 ethereum-cryptography: 1.2.0 @@ -30507,7 +30263,7 @@ snapshots: chalk: 2.4.2 chokidar: 3.6.0 ci-info: 2.0.0 - debug: 4.3.6 + debug: 4.3.6(supports-color@8.1.1) enquirer: 2.4.1 env-paths: 2.2.1 ethereum-cryptography: 1.2.0 @@ -30561,7 +30317,7 @@ snapshots: chalk: 2.4.2 chokidar: 3.6.0 ci-info: 2.0.0 - debug: 4.3.6 + debug: 4.3.6(supports-color@8.1.1) enquirer: 2.4.1 env-paths: 2.2.1 ethereum-cryptography: 1.2.0 @@ -30615,7 +30371,7 @@ snapshots: chalk: 2.4.2 chokidar: 3.6.0 ci-info: 2.0.0 - debug: 4.3.6 + debug: 4.3.6(supports-color@8.1.1) enquirer: 2.4.1 env-paths: 2.2.1 ethereum-cryptography: 1.2.0 @@ -30960,14 +30716,14 @@ snapshots: dependencies: '@tootallnate/once': 2.0.0 agent-base: 6.0.2 - debug: 4.3.7 + debug: 4.3.7(supports-color@8.1.1) transitivePeerDependencies: - supports-color http-proxy-agent@7.0.2: dependencies: agent-base: 7.1.1 - debug: 4.4.0(supports-color@8.1.1) + debug: 4.3.7(supports-color@8.1.1) transitivePeerDependencies: - supports-color @@ -31002,14 +30758,14 @@ snapshots: https-proxy-agent@5.0.1: dependencies: agent-base: 6.0.2 - debug: 4.3.7 + debug: 4.3.7(supports-color@8.1.1) transitivePeerDependencies: - supports-color https-proxy-agent@7.0.5: dependencies: agent-base: 7.1.1 - debug: 4.4.0(supports-color@8.1.1) + debug: 4.3.7(supports-color@8.1.1) transitivePeerDependencies: - supports-color @@ -31025,11 +30781,11 @@ snapshots: i18next-browser-languagedetector@7.1.0: dependencies: - '@babel/runtime': 7.26.0 + '@babel/runtime': 7.25.9 i18next@23.11.5: dependencies: - '@babel/runtime': 7.26.0 + '@babel/runtime': 7.25.9 iconv-lite@0.4.24: dependencies: @@ -31057,7 +30813,7 @@ snapshots: ignore@5.3.2: {} - image-size@1.2.0: + image-size@1.1.1: dependencies: queue: 6.0.2 @@ -31077,8 +30833,8 @@ snapshots: import-in-the-middle@1.11.0: dependencies: - acorn: 8.13.0 - acorn-import-attributes: 1.9.5(acorn@8.13.0) + acorn: 8.14.0 + acorn-import-attributes: 1.9.5(acorn@8.14.0) cjs-module-lexer: 1.3.1 module-details-from-path: 1.0.3 @@ -31176,7 +30932,7 @@ snapshots: dependencies: '@ioredis/commands': 1.2.0 cluster-key-slot: 1.1.2 - debug: 4.4.0(supports-color@8.1.1) + debug: 4.3.7(supports-color@8.1.1) denque: 2.1.0 lodash.defaults: 4.2.0 lodash.isarguments: 3.1.0 @@ -31299,10 +31055,6 @@ snapshots: dependencies: hasown: 2.0.2 - is-core-module@2.16.1: - dependencies: - hasown: 2.0.2 - is-data-view@1.0.1: dependencies: is-typed-array: 1.1.13 @@ -31531,7 +31283,7 @@ snapshots: istanbul-lib-instrument@5.2.1: dependencies: '@babel/core': 7.25.2 - '@babel/parser': 7.26.3 + '@babel/parser': 7.25.4 '@istanbuljs/schema': 0.1.3 istanbul-lib-coverage: 3.2.2 semver: 6.3.1 @@ -31541,7 +31293,7 @@ snapshots: istanbul-lib-instrument@6.0.3: dependencies: '@babel/core': 7.25.2 - '@babel/parser': 7.26.3 + '@babel/parser': 7.25.4 '@istanbuljs/schema': 0.1.3 istanbul-lib-coverage: 3.2.2 semver: 7.6.3 @@ -31556,7 +31308,7 @@ snapshots: istanbul-lib-source-maps@4.0.1: dependencies: - debug: 4.4.0(supports-color@8.1.1) + debug: 4.3.7(supports-color@8.1.1) istanbul-lib-coverage: 3.2.2 source-map: 0.6.1 transitivePeerDependencies: @@ -31789,7 +31541,7 @@ snapshots: jest-pnp-resolver: 1.2.3(jest-resolve@29.7.0) jest-util: 29.7.0 jest-validate: 29.7.0 - resolve: 1.22.10 + resolve: 1.22.8 resolve.exports: 2.0.2 slash: 3.0.0 @@ -31963,18 +31715,18 @@ snapshots: jscodeshift@0.14.0(@babel/preset-env@7.25.4(@babel/core@7.25.2)): dependencies: '@babel/core': 7.25.2 - '@babel/parser': 7.26.3 + '@babel/parser': 7.25.9 '@babel/plugin-proposal-class-properties': 7.18.6(@babel/core@7.25.2) '@babel/plugin-proposal-nullish-coalescing-operator': 7.18.6(@babel/core@7.25.2) '@babel/plugin-proposal-optional-chaining': 7.21.0(@babel/core@7.25.2) - '@babel/plugin-transform-modules-commonjs': 7.26.3(@babel/core@7.25.2) + '@babel/plugin-transform-modules-commonjs': 7.25.9(@babel/core@7.25.2) '@babel/preset-env': 7.25.4(@babel/core@7.25.2) '@babel/preset-flow': 7.25.9(@babel/core@7.25.2) - '@babel/preset-typescript': 7.26.0(@babel/core@7.25.2) + '@babel/preset-typescript': 7.25.9(@babel/core@7.25.2) '@babel/register': 7.25.9(@babel/core@7.25.2) babel-core: 7.0.0-bridge.0(@babel/core@7.25.2) chalk: 4.1.2 - flow-parser: 0.257.1 + flow-parser: 0.250.0 graceful-fs: 4.2.11 micromatch: 4.0.8 neo-async: 2.6.2 @@ -31989,8 +31741,6 @@ snapshots: jsesc@3.0.2: {} - jsesc@3.1.0: {} - json-buffer@3.0.0: {} json-buffer@3.0.1: {} @@ -32147,7 +31897,7 @@ snapshots: content-disposition: 0.5.4 content-type: 1.0.5 cookies: 0.9.1 - debug: 4.4.0(supports-color@8.1.1) + debug: 4.3.7(supports-color@8.1.1) delegates: 1.0.0 depd: 2.0.0 destroy: 1.2.0 @@ -32510,7 +32260,7 @@ snapshots: lower-case@2.0.2: dependencies: - tslib: 2.8.1 + tslib: 2.8.0 lowercase-keys@1.0.1: {} @@ -32966,7 +32716,7 @@ snapshots: mdx-bundler@9.2.1(esbuild@0.23.1): dependencies: - '@babel/runtime': 7.26.0 + '@babel/runtime': 7.25.9 '@esbuild-plugins/node-resolve': 0.1.4(esbuild@0.23.1) '@fal-works/esbuild-plugin-global-externals': 2.1.2 '@mdx-js/esbuild': 2.3.0(esbuild@0.23.1) @@ -32981,7 +32731,7 @@ snapshots: media-query-parser@2.0.2: dependencies: - '@babel/runtime': 7.26.0 + '@babel/runtime': 7.25.9 media-typer@0.3.0: {} @@ -33108,7 +32858,7 @@ snapshots: metro-minify-terser@0.80.12: dependencies: flow-enums-runtime: 0.0.6 - terser: 5.37.0 + terser: 5.36.0 metro-resolver@0.80.12: dependencies: @@ -33116,13 +32866,13 @@ snapshots: metro-runtime@0.80.12: dependencies: - '@babel/runtime': 7.26.0 + '@babel/runtime': 7.25.9 flow-enums-runtime: 0.0.6 metro-source-map@0.80.12: dependencies: - '@babel/traverse': 7.26.4 - '@babel/types': 7.26.3 + '@babel/traverse': 7.25.9 + '@babel/types': 7.25.9 flow-enums-runtime: 0.0.6 invariant: 2.2.4 metro-symbolicate: 0.80.12 @@ -33148,9 +32898,9 @@ snapshots: metro-transform-plugins@0.80.12: dependencies: '@babel/core': 7.25.2 - '@babel/generator': 7.26.3 + '@babel/generator': 7.25.9 '@babel/template': 7.25.9 - '@babel/traverse': 7.26.4 + '@babel/traverse': 7.25.9 flow-enums-runtime: 0.0.6 nullthrows: 1.1.1 transitivePeerDependencies: @@ -33159,9 +32909,9 @@ snapshots: metro-transform-worker@0.80.12(bufferutil@4.0.8)(utf-8-validate@5.0.10): dependencies: '@babel/core': 7.25.2 - '@babel/generator': 7.26.3 - '@babel/parser': 7.26.3 - '@babel/types': 7.26.3 + '@babel/generator': 7.25.9 + '@babel/parser': 7.25.9 + '@babel/types': 7.25.9 flow-enums-runtime: 0.0.6 metro: 0.80.12(bufferutil@4.0.8)(utf-8-validate@5.0.10) metro-babel-transformer: 0.80.12 @@ -33178,13 +32928,13 @@ snapshots: metro@0.80.12(bufferutil@4.0.8)(utf-8-validate@5.0.10): dependencies: - '@babel/code-frame': 7.26.2 + '@babel/code-frame': 7.25.9 '@babel/core': 7.25.2 - '@babel/generator': 7.26.3 - '@babel/parser': 7.26.3 + '@babel/generator': 7.25.9 + '@babel/parser': 7.25.9 '@babel/template': 7.25.9 - '@babel/traverse': 7.26.4 - '@babel/types': 7.26.3 + '@babel/traverse': 7.25.9 + '@babel/types': 7.25.9 accepts: 1.3.8 chalk: 4.1.2 ci-info: 2.0.0 @@ -33195,7 +32945,7 @@ snapshots: flow-enums-runtime: 0.0.6 graceful-fs: 4.2.11 hermes-parser: 0.23.1 - image-size: 1.2.0 + image-size: 1.1.1 invariant: 2.2.4 jest-worker: 29.7.0 jsc-safe-url: 0.2.4 @@ -33471,8 +33221,8 @@ snapshots: micromark-extension-mdxjs@3.0.0: dependencies: - acorn: 8.13.0 - acorn-jsx: 5.3.2(acorn@8.13.0) + acorn: 8.14.0 + acorn-jsx: 5.3.2(acorn@8.14.0) micromark-extension-mdx-expression: 3.0.0 micromark-extension-mdx-jsx: 3.0.1 micromark-extension-mdx-md: 2.0.0 @@ -33711,7 +33461,7 @@ snapshots: micromark@2.11.4: dependencies: - debug: 4.4.0(supports-color@8.1.1) + debug: 4.3.7(supports-color@8.1.1) parse-entities: 2.0.0 transitivePeerDependencies: - supports-color @@ -33719,7 +33469,7 @@ snapshots: micromark@3.2.0: dependencies: '@types/debug': 4.1.12 - debug: 4.4.0(supports-color@8.1.1) + debug: 4.3.7(supports-color@8.1.1) decode-named-character-reference: 1.0.2 micromark-core-commonmark: 1.1.0 micromark-factory-space: 1.1.0 @@ -33741,7 +33491,7 @@ snapshots: micromark@4.0.1: dependencies: '@types/debug': 4.1.12 - debug: 4.4.0(supports-color@8.1.1) + debug: 4.3.7(supports-color@8.1.1) decode-named-character-reference: 1.0.2 devlop: 1.1.0 micromark-core-commonmark: 2.0.2 @@ -33767,7 +33517,7 @@ snapshots: miller-rabin@4.0.1: dependencies: - bn.js: 4.12.1 + bn.js: 4.12.0 brorand: 1.1.0 mime-db@1.33.0: {} @@ -33955,7 +33705,7 @@ snapshots: ansi-colors: 4.1.3 browser-stdout: 1.3.1 chokidar: 3.6.0 - debug: 4.4.0(supports-color@8.1.1) + debug: 4.3.7(supports-color@8.1.1) diff: 5.2.0 escape-string-regexp: 4.0.0 find-up: 5.0.0 @@ -33977,7 +33727,7 @@ snapshots: mock-fs@5.2.0: {} - modern-ahocorasick@1.1.0: {} + modern-ahocorasick@1.0.1: {} modify-values@1.0.1: {} @@ -34122,8 +33872,6 @@ snapshots: negotiator@0.6.3: {} - negotiator@0.6.4: {} - neo-async@2.6.2: {} next-contentlayer@0.3.4(contentlayer@0.3.4(esbuild@0.23.1))(esbuild@0.23.1)(next@14.2.6(@babel/core@7.25.2)(@opentelemetry/api@1.9.0)(babel-plugin-macros@3.1.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.77.8))(react-dom@18.3.1(react@18.3.1))(react@18.3.1): @@ -34191,7 +33939,7 @@ snapshots: no-case@3.0.4: dependencies: lower-case: 2.0.2 - tslib: 2.8.1 + tslib: 2.8.0 nocache@3.0.4: {} @@ -34270,8 +34018,6 @@ snapshots: node-releases@2.0.18: {} - node-releases@2.0.19: {} - node-stream-zip@1.15.0: {} nofilter@3.1.0: {} @@ -34287,14 +34033,14 @@ snapshots: normalize-package-data@2.5.0: dependencies: hosted-git-info: 2.8.9 - resolve: 1.22.10 + resolve: 1.22.8 semver: 5.7.2 validate-npm-package-license: 3.0.4 normalize-package-data@3.0.3: dependencies: hosted-git-info: 4.1.0 - is-core-module: 2.16.1 + is-core-module: 2.15.1 semver: 7.6.3 validate-npm-package-license: 3.0.4 @@ -34568,7 +34314,7 @@ snapshots: dependencies: '@opentelemetry/api': 1.9.0 '@opentelemetry/instrumentation': 0.46.0(@opentelemetry/api@1.9.0) - '@opentelemetry/semantic-conventions': 1.27.0 + '@opentelemetry/semantic-conventions': 1.26.0 transitivePeerDependencies: - supports-color optional: true @@ -34806,7 +34552,7 @@ snapshots: pascal-case@3.1.2: dependencies: no-case: 3.0.4 - tslib: 2.8.1 + tslib: 2.8.0 passthrough-counter@1.0.0: {} @@ -34964,7 +34710,7 @@ snapshots: postcss-load-config@4.0.2(postcss@8.4.47)(ts-node@10.9.2(@types/node@20.3.2)(typescript@5.5.4)): dependencies: lilconfig: 3.1.2 - yaml: 2.6.1 + yaml: 2.6.0 optionalDependencies: postcss: 8.4.47 ts-node: 10.9.2(@types/node@20.3.2)(typescript@5.5.4) @@ -35011,7 +34757,7 @@ snapshots: preact@10.23.2: {} - preact@10.25.4: {} + preact@10.24.3: {} preferred-pm@3.1.4: dependencies: @@ -35164,7 +34910,7 @@ snapshots: public-encrypt@4.0.3: dependencies: - bn.js: 4.12.1 + bn.js: 4.12.0 browserify-rsa: 4.1.0 create-hash: 1.2.0 parse-asn1: 5.1.7 @@ -35254,7 +35000,7 @@ snapshots: dependencies: '@assemblyscript/loader': 0.9.4 bl: 5.1.0 - debug: 4.4.0(supports-color@8.1.1) + debug: 4.3.7(supports-color@8.1.1) minimist: 1.2.8 node-fetch: 2.7.0(encoding@0.1.13) readable-stream: 3.6.2 @@ -35300,12 +35046,12 @@ snapshots: react-clientside-effect@1.2.6(react@18.3.1): dependencies: - '@babel/runtime': 7.26.0 + '@babel/runtime': 7.25.9 react: 18.3.1 react-devtools-core@5.3.2(bufferutil@4.0.8)(utf-8-validate@5.0.10): dependencies: - shell-quote: 1.8.2 + shell-quote: 1.8.1 ws: 7.5.10(bufferutil@4.0.8)(utf-8-validate@5.0.10) transitivePeerDependencies: - bufferutil @@ -35336,13 +35082,13 @@ snapshots: react-focus-lock@2.12.1(@types/react@18.2.37)(react@18.3.1): dependencies: - '@babel/runtime': 7.26.0 + '@babel/runtime': 7.25.9 focus-lock: 1.3.5 prop-types: 15.8.1 react: 18.3.1 react-clientside-effect: 1.2.6(react@18.3.1) - use-callback-ref: 1.3.3(@types/react@18.2.37)(react@18.3.1) - use-sidecar: 1.1.3(@types/react@18.2.37)(react@18.3.1) + use-callback-ref: 1.3.2(@types/react@18.2.37)(react@18.3.1) + use-sidecar: 1.1.2(@types/react@18.2.37)(react@18.3.1) optionalDependencies: '@types/react': 18.2.37 @@ -35452,33 +35198,41 @@ snapshots: react-refresh@0.14.2: {} + react-remove-scroll-bar@2.3.6(@types/react@18.2.37)(react@18.3.1): + dependencies: + react: 18.3.1 + react-style-singleton: 2.2.1(@types/react@18.2.37)(react@18.3.1) + tslib: 2.8.0 + optionalDependencies: + '@types/react': 18.2.37 + react-remove-scroll-bar@2.3.8(@types/react@18.2.37)(react@18.3.1): dependencies: react: 18.3.1 react-style-singleton: 2.2.3(@types/react@18.2.37)(react@18.3.1) - tslib: 2.8.1 + tslib: 2.8.0 optionalDependencies: '@types/react': 18.2.37 react-remove-scroll@2.5.5(@types/react@18.2.37)(react@18.3.1): dependencies: react: 18.3.1 - react-remove-scroll-bar: 2.3.8(@types/react@18.2.37)(react@18.3.1) - react-style-singleton: 2.2.3(@types/react@18.2.37)(react@18.3.1) - tslib: 2.8.1 - use-callback-ref: 1.3.3(@types/react@18.2.37)(react@18.3.1) - use-sidecar: 1.1.3(@types/react@18.2.37)(react@18.3.1) + react-remove-scroll-bar: 2.3.6(@types/react@18.2.37)(react@18.3.1) + react-style-singleton: 2.2.1(@types/react@18.2.37)(react@18.3.1) + tslib: 2.8.0 + use-callback-ref: 1.3.2(@types/react@18.2.37)(react@18.3.1) + use-sidecar: 1.1.2(@types/react@18.2.37)(react@18.3.1) optionalDependencies: '@types/react': 18.2.37 react-remove-scroll@2.6.0(@types/react@18.2.37)(react@18.3.1): dependencies: react: 18.3.1 - react-remove-scroll-bar: 2.3.8(@types/react@18.2.37)(react@18.3.1) - react-style-singleton: 2.2.3(@types/react@18.2.37)(react@18.3.1) - tslib: 2.8.1 - use-callback-ref: 1.3.3(@types/react@18.2.37)(react@18.3.1) - use-sidecar: 1.1.3(@types/react@18.2.37)(react@18.3.1) + react-remove-scroll-bar: 2.3.6(@types/react@18.2.37)(react@18.3.1) + react-style-singleton: 2.2.1(@types/react@18.2.37)(react@18.3.1) + tslib: 2.8.0 + use-callback-ref: 1.3.2(@types/react@18.2.37)(react@18.3.1) + use-sidecar: 1.1.2(@types/react@18.2.37)(react@18.3.1) optionalDependencies: '@types/react': 18.2.37 @@ -35487,7 +35241,7 @@ snapshots: react: 18.3.1 react-remove-scroll-bar: 2.3.8(@types/react@18.2.37)(react@18.3.1) react-style-singleton: 2.2.1(@types/react@18.2.37)(react@18.3.1) - tslib: 2.8.1 + tslib: 2.8.0 use-callback-ref: 1.3.3(@types/react@18.2.37)(react@18.3.1) use-sidecar: 1.1.2(@types/react@18.2.37)(react@18.3.1) optionalDependencies: @@ -35502,7 +35256,7 @@ snapshots: react-select@5.8.0(@types/react@18.2.37)(react-dom@18.3.1(react@18.3.1))(react@18.3.1): dependencies: - '@babel/runtime': 7.26.0 + '@babel/runtime': 7.25.9 '@emotion/cache': 11.13.1 '@emotion/react': 11.13.3(@types/react@18.2.37)(react@18.3.1) '@floating-ui/dom': 1.6.10 @@ -35522,7 +35276,7 @@ snapshots: get-nonce: 1.0.1 invariant: 2.2.4 react: 18.3.1 - tslib: 2.8.1 + tslib: 2.8.0 optionalDependencies: '@types/react': 18.2.37 @@ -35530,7 +35284,7 @@ snapshots: dependencies: get-nonce: 1.0.1 react: 18.3.1 - tslib: 2.8.1 + tslib: 2.8.0 optionalDependencies: '@types/react': 18.2.37 @@ -35545,7 +35299,7 @@ snapshots: react-transition-group@4.4.5(react-dom@18.3.1(react@18.3.1))(react@18.3.1): dependencies: - '@babel/runtime': 7.26.0 + '@babel/runtime': 7.25.9 dom-helpers: 5.2.1 loose-envify: 1.4.0 prop-types: 15.8.1 @@ -35638,11 +35392,11 @@ snapshots: ast-types: 0.15.2 esprima: 4.0.1 source-map: 0.6.1 - tslib: 2.8.1 + tslib: 2.8.0 rechoir@0.6.2: dependencies: - resolve: 1.22.10 + resolve: 1.22.8 recma-build-jsx@1.0.0: dependencies: @@ -35689,7 +35443,7 @@ snapshots: dependencies: camelcase: 6.3.0 cross-spawn: 7.0.3 - debug: 4.3.6 + debug: 4.3.6(supports-color@8.1.1) extract-zip: 2.0.1(supports-color@8.1.1) find-cache-dir: 3.3.2 find-package-json: 1.2.0 @@ -35753,7 +35507,7 @@ snapshots: regenerator-transform@0.15.2: dependencies: - '@babel/runtime': 7.26.0 + '@babel/runtime': 7.25.9 regex@4.4.0: {} @@ -35986,9 +35740,9 @@ snapshots: require-in-the-middle@7.4.0: dependencies: - debug: 4.4.0(supports-color@8.1.1) + debug: 4.3.7(supports-color@8.1.1) module-details-from-path: 1.0.3 - resolve: 1.22.10 + resolve: 1.22.8 transitivePeerDependencies: - supports-color @@ -36022,12 +35776,6 @@ snapshots: dependencies: path-parse: 1.0.7 - resolve@1.22.10: - dependencies: - is-core-module: 2.16.1 - path-parse: 1.0.7 - supports-preserve-symlinks-flag: 1.0.0 - resolve@1.22.8: dependencies: is-core-module: 2.15.1 @@ -36036,7 +35784,7 @@ snapshots: resolve@2.0.0-next.5: dependencies: - is-core-module: 2.16.1 + is-core-module: 2.15.1 path-parse: 1.0.7 supports-preserve-symlinks-flag: 1.0.0 @@ -36152,7 +35900,7 @@ snapshots: rxjs@7.8.1: dependencies: - tslib: 2.8.1 + tslib: 2.8.0 s3rver@3.7.1: dependencies: @@ -36232,7 +35980,7 @@ snapshots: ajv: 6.12.6 ajv-keywords: 3.5.2(ajv@6.12.6) - schema-utils@4.3.0: + schema-utils@4.2.0: dependencies: '@types/json-schema': 7.0.15 ajv: 8.17.1 @@ -36412,6 +36160,10 @@ snapshots: transitivePeerDependencies: - supports-color + ses@1.10.0: + dependencies: + '@endo/env-options': 1.1.8 + set-blocking@2.0.0: {} set-function-length@1.2.2: @@ -36466,7 +36218,7 @@ snapshots: shebang-regex@3.0.0: {} - shell-quote@1.8.2: {} + shell-quote@1.8.1: {} shelljs@0.8.5: dependencies: @@ -36571,7 +36323,7 @@ snapshots: socket.io-client@4.7.5(bufferutil@4.0.8)(utf-8-validate@5.0.10): dependencies: '@socket.io/component-emitter': 3.1.2 - debug: 4.3.7 + debug: 4.3.7(supports-color@8.1.1) engine.io-client: 6.5.4(bufferutil@4.0.8)(utf-8-validate@5.0.10) socket.io-parser: 4.2.4 transitivePeerDependencies: @@ -36582,14 +36334,14 @@ snapshots: socket.io-parser@4.2.4: dependencies: '@socket.io/component-emitter': 3.1.2 - debug: 4.3.7 + debug: 4.3.7(supports-color@8.1.1) transitivePeerDependencies: - supports-color socks-proxy-agent@8.0.4: dependencies: agent-base: 7.1.1 - debug: 4.4.0(supports-color@8.1.1) + debug: 4.3.7(supports-color@8.1.1) socks: 2.8.3 transitivePeerDependencies: - supports-color @@ -36603,7 +36355,7 @@ snapshots: dependencies: command-exists: 1.2.9 commander: 8.3.0 - follow-redirects: 1.15.6(debug@4.4.0) + follow-redirects: 1.15.6(debug@4.3.7) js-sha3: 0.8.0 memorystream: 0.3.1 semver: 5.7.2 @@ -37047,7 +36799,7 @@ snapshots: dependencies: component-emitter: 1.3.1 cookiejar: 2.1.4 - debug: 4.3.7 + debug: 4.3.7(supports-color@8.1.1) fast-safe-stringify: 2.1.1 form-data: 4.0.0 formidable: 3.5.2 @@ -37061,7 +36813,7 @@ snapshots: dependencies: component-emitter: 1.3.1 cookiejar: 2.1.4 - debug: 4.4.0(supports-color@8.1.1) + debug: 4.3.7(supports-color@8.1.1) fast-safe-stringify: 2.1.1 form-data: 4.0.0 formidable: 3.5.2 @@ -37143,14 +36895,6 @@ snapshots: string-width: 4.2.3 strip-ansi: 6.0.1 - table@6.9.0: - dependencies: - ajv: 8.17.1 - lodash.truncate: 4.4.2 - slice-ansi: 4.0.0 - string-width: 4.2.3 - strip-ansi: 6.0.1 - tailwind-merge@2.5.4: {} tailwindcss-animate@1.0.7(tailwindcss@3.4.14(ts-node@10.9.2(@types/node@20.3.2)(typescript@5.5.4))): @@ -37225,13 +36969,13 @@ snapshots: term-size@2.2.1: {} - terser-webpack-plugin@5.3.11(esbuild@0.23.1)(webpack@5.94.0(esbuild@0.23.1)): + terser-webpack-plugin@5.3.10(esbuild@0.23.1)(webpack@5.94.0(esbuild@0.23.1)): dependencies: '@jridgewell/trace-mapping': 0.3.25 jest-worker: 27.5.1 - schema-utils: 4.3.0 + schema-utils: 3.3.0 serialize-javascript: 6.0.2 - terser: 5.37.0 + terser: 5.36.0 webpack: 5.94.0(esbuild@0.23.1) optionalDependencies: esbuild: 0.23.1 @@ -37239,11 +36983,11 @@ snapshots: terser@5.31.6: dependencies: '@jridgewell/source-map': 0.3.6 - acorn: 8.12.1 + acorn: 8.14.0 commander: 2.20.3 source-map-support: 0.5.21 - terser@5.37.0: + terser@5.36.0: dependencies: '@jridgewell/source-map': 0.3.6 acorn: 8.14.0 @@ -37482,7 +37226,7 @@ snapshots: '@tsconfig/node14': 1.0.3 '@tsconfig/node16': 1.0.4 '@types/node': 22.7.5 - acorn: 8.12.1 + acorn: 8.14.0 acorn-walk: 8.3.3 arg: 4.1.3 create-require: 1.1.1 @@ -37615,8 +37359,6 @@ snapshots: tslib@2.8.0: {} - tslib@2.8.1: {} - tsort@0.0.1: {} tsscmp@1.0.6: {} @@ -37629,7 +37371,7 @@ snapshots: tuf-js@2.2.1: dependencies: '@tufjs/models': 2.0.1 - debug: 4.4.0(supports-color@8.1.1) + debug: 4.3.7(supports-color@8.1.1) make-fetch-happen: 13.0.1 transitivePeerDependencies: - supports-color @@ -37689,7 +37431,7 @@ snapshots: dependencies: '@types/prettier': 2.7.3 command-line-args: 4.0.7 - debug: 4.3.6 + debug: 4.3.6(supports-color@8.1.1) fs-extra: 7.0.1 glob: 7.2.3 js-sha3: 0.8.0 @@ -37704,7 +37446,7 @@ snapshots: typechain@8.1.0(typescript@5.5.4): dependencies: '@types/prettier': 2.7.3 - debug: 4.3.6 + debug: 4.3.6(supports-color@8.1.1) fs-extra: 7.0.1 glob: 7.1.7 js-sha3: 0.8.0 @@ -37720,7 +37462,7 @@ snapshots: typechain@8.3.2(typescript@5.5.4): dependencies: '@types/prettier': 2.7.3 - debug: 4.4.0(supports-color@8.1.1) + debug: 4.3.7(supports-color@8.1.1) fs-extra: 7.0.1 glob: 7.1.7 js-sha3: 0.8.0 @@ -38003,7 +37745,7 @@ snapshots: unplugin@1.0.1: dependencies: - acorn: 8.13.0 + acorn: 8.14.0 chokidar: 3.6.0 webpack-sources: 3.2.3 webpack-virtual-modules: 0.5.0 @@ -38048,12 +37790,6 @@ snapshots: escalade: 3.2.0 picocolors: 1.1.1 - update-browserslist-db@1.1.1(browserslist@4.24.3): - dependencies: - browserslist: 4.24.3 - escalade: 3.2.0 - picocolors: 1.1.1 - update-check@1.5.4: dependencies: registry-auth-token: 3.3.2 @@ -38063,7 +37799,7 @@ snapshots: upper-case-first@2.0.2: dependencies: - tslib: 2.8.1 + tslib: 2.8.0 uqr@0.1.2: {} @@ -38084,32 +37820,31 @@ snapshots: url-value-parser@2.2.0: {} - use-callback-ref@1.3.3(@types/react@18.2.37)(react@18.3.1): + use-callback-ref@1.3.2(@types/react@18.2.37)(react@18.3.1): dependencies: react: 18.3.1 - tslib: 2.8.1 + tslib: 2.8.0 optionalDependencies: '@types/react': 18.2.37 - use-isomorphic-layout-effect@1.1.2(@types/react@18.2.37)(react@18.3.1): + use-callback-ref@1.3.3(@types/react@18.2.37)(react@18.3.1): dependencies: react: 18.3.1 + tslib: 2.8.0 optionalDependencies: '@types/react': 18.2.37 - use-sidecar@1.1.2(@types/react@18.2.37)(react@18.3.1): + use-isomorphic-layout-effect@1.1.2(@types/react@18.2.37)(react@18.3.1): dependencies: - detect-node-es: 1.1.0 react: 18.3.1 - tslib: 2.8.1 optionalDependencies: '@types/react': 18.2.37 - use-sidecar@1.1.3(@types/react@18.2.37)(react@18.3.1): + use-sidecar@1.1.2(@types/react@18.2.37)(react@18.3.1): dependencies: detect-node-es: 1.1.0 react: 18.3.1 - tslib: 2.8.1 + tslib: 2.8.0 optionalDependencies: '@types/react': 18.2.37 @@ -38289,13 +38024,13 @@ snapshots: - utf-8-validate - zod - vite-node@2.1.8(@types/node@22.7.5)(sass@1.77.8)(terser@5.37.0): + vite-node@2.1.8(@types/node@22.7.5)(sass@1.77.8)(terser@5.36.0): dependencies: cac: 6.7.14 - debug: 4.4.0(supports-color@8.1.1) + debug: 4.3.7(supports-color@8.1.1) es-module-lexer: 1.5.4 pathe: 1.1.2 - vite: 5.4.11(@types/node@22.7.5)(sass@1.77.8)(terser@5.37.0) + vite: 5.4.11(@types/node@22.7.5)(sass@1.77.8)(terser@5.36.0) transitivePeerDependencies: - '@types/node' - less @@ -38307,7 +38042,7 @@ snapshots: - supports-color - terser - vite@5.4.11(@types/node@22.7.5)(sass@1.77.8)(terser@5.37.0): + vite@5.4.11(@types/node@22.7.5)(sass@1.77.8)(terser@5.36.0): dependencies: esbuild: 0.21.5 postcss: 8.4.47 @@ -38316,19 +38051,19 @@ snapshots: '@types/node': 22.7.5 fsevents: 2.3.3 sass: 1.77.8 - terser: 5.37.0 + terser: 5.36.0 - vitest@2.1.8(@types/node@22.7.5)(sass@1.77.8)(terser@5.37.0): + vitest@2.1.8(@types/node@22.7.5)(sass@1.77.8)(terser@5.36.0): dependencies: '@vitest/expect': 2.1.8 - '@vitest/mocker': 2.1.8(vite@5.4.11(@types/node@22.7.5)(sass@1.77.8)(terser@5.37.0)) + '@vitest/mocker': 2.1.8(vite@5.4.11(@types/node@22.7.5)(sass@1.77.8)(terser@5.36.0)) '@vitest/pretty-format': 2.1.8 '@vitest/runner': 2.1.8 '@vitest/snapshot': 2.1.8 '@vitest/spy': 2.1.8 '@vitest/utils': 2.1.8 chai: 5.1.2 - debug: 4.3.7 + debug: 4.3.7(supports-color@8.1.1) expect-type: 1.1.0 magic-string: 0.30.14 pathe: 1.1.2 @@ -38337,8 +38072,8 @@ snapshots: tinyexec: 0.3.1 tinypool: 1.0.2 tinyrainbow: 1.2.0 - vite: 5.4.11(@types/node@22.7.5)(sass@1.77.8)(terser@5.37.0) - vite-node: 2.1.8(@types/node@22.7.5)(sass@1.77.8)(terser@5.37.0) + vite: 5.4.11(@types/node@22.7.5)(sass@1.77.8)(terser@5.36.0) + vite-node: 2.1.8(@types/node@22.7.5)(sass@1.77.8)(terser@5.36.0) why-is-node-running: 2.3.0 optionalDependencies: '@types/node': 22.7.5 @@ -39037,7 +38772,7 @@ snapshots: webpack-bundle-analyzer@4.10.1(bufferutil@4.0.8)(utf-8-validate@5.0.10): dependencies: '@discoveryjs/json-ext': 0.5.7 - acorn: 8.12.1 + acorn: 8.14.0 acorn-walk: 8.3.3 commander: 7.2.0 debounce: 1.2.1 @@ -39060,15 +38795,15 @@ snapshots: webpack@5.94.0(esbuild@0.23.1): dependencies: '@types/estree': 1.0.6 - '@webassemblyjs/ast': 1.14.1 - '@webassemblyjs/wasm-edit': 1.14.1 - '@webassemblyjs/wasm-parser': 1.14.1 + '@webassemblyjs/ast': 1.12.1 + '@webassemblyjs/wasm-edit': 1.12.1 + '@webassemblyjs/wasm-parser': 1.12.1 acorn: 8.14.0 acorn-import-attributes: 1.9.5(acorn@8.14.0) - browserslist: 4.24.3 + browserslist: 4.24.2 chrome-trace-event: 1.0.4 - enhanced-resolve: 5.18.0 - es-module-lexer: 1.6.0 + enhanced-resolve: 5.17.1 + es-module-lexer: 1.5.4 eslint-scope: 5.1.1 events: 3.3.0 glob-to-regexp: 0.4.1 @@ -39079,7 +38814,7 @@ snapshots: neo-async: 2.6.2 schema-utils: 3.3.0 tapable: 2.2.1 - terser-webpack-plugin: 5.3.11(esbuild@0.23.1)(webpack@5.94.0(esbuild@0.23.1)) + terser-webpack-plugin: 5.3.10(esbuild@0.23.1)(webpack@5.94.0(esbuild@0.23.1)) watchpack: 2.4.2 webpack-sources: 3.2.3 transitivePeerDependencies: @@ -39364,7 +39099,7 @@ snapshots: yaml@2.5.0: {} - yaml@2.6.1: {} + yaml@2.6.0: {} yargs-parser@18.1.3: dependencies: