From 2564d86387ebfe995df61ccc9728aef4fb5e0d87 Mon Sep 17 00:00:00 2001 From: Sacha Froment Date: Wed, 19 Feb 2025 13:50:21 +0100 Subject: [PATCH 1/5] fix: dialTimeout (#484) Signed-off-by: Sacha Froment --- packages/network/src/node.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/packages/network/src/node.ts b/packages/network/src/node.ts index 7bcec7e9..83c057d6 100644 --- a/packages/network/src/node.ts +++ b/packages/network/src/node.ts @@ -176,6 +176,7 @@ export class DRPNetworkNode { ...(this._config?.announce_addresses ? { announce: this._config.announce_addresses } : {}), }, connectionManager: { + dialTimeout: 60_000, addressSorter: this._sortAddresses, }, connectionEncrypters: [noise()], From 71938dc0f715895ea609f446567a7c4416fe6ffe Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ho=C3=A0ng=20Qu=E1=BB=91c=20Vi=E1=BB=87t?= Date: Wed, 19 Feb 2025 20:23:57 +0700 Subject: [PATCH 2/5] fix: duplicate DRP call (#432) Signed-off-by: Sacha Froment Co-authored-by: Sacha Froment Co-authored-by: Jan Lewandowski <62848215+JanLewDev@users.noreply.github.com> Co-authored-by: anhnd350309 <156870690+anhnd350309@users.noreply.github.com> --- packages/object/src/index.ts | 50 ++++++++++++++----------- packages/object/tests/drpobject.test.ts | 44 +++++++++++++++++++++- 2 files changed, 71 insertions(+), 23 deletions(-) diff --git a/packages/object/src/index.ts b/packages/object/src/index.ts index b4d952bf..2b0aced2 100644 --- a/packages/object/src/index.ts +++ b/packages/object/src/index.ts @@ -140,7 +140,9 @@ export class DRPObject implements DRPObjectBase { if (callerName?.startsWith("DRPObject.resolveConflicts")) { return Reflect.apply(applyTarget, thisArg, args); } - if (!callerName?.startsWith("Proxy.")) obj.callFn(fullPropKey, args, vertexType); + if (!callerName?.startsWith("Proxy.")) { + return obj.callFn(fullPropKey, args, vertexType); + } return Reflect.apply(applyTarget, thisArg, args); }, }); @@ -160,36 +162,35 @@ export class DRPObject implements DRPObjectBase { if (!this.hashGraph) { throw new Error("Hashgraph is undefined"); } - // eslint-disable-next-line @typescript-eslint/no-explicit-any - let preOperationDRP: any; - if (drpType === DrpType.ACL) { - preOperationDRP = this._computeObjectACL(this.hashGraph.getFrontier()); - } else { - preOperationDRP = this._computeDRP(this.hashGraph.getFrontier()); - } + + const isACL = drpType === DrpType.ACL; + const vertexDependencies = this.hashGraph.getFrontier(); + const preOperationDRP = isACL + ? this._computeObjectACL(vertexDependencies) + : this._computeDRP(vertexDependencies); + const drp = cloneDeep(preOperationDRP); + let appliedOperationResult = undefined; try { - this._applyOperation(drp, { opType: fn, value: args, drpType }); + appliedOperationResult = this._applyOperation(drp, { + opType: fn, + value: args, + drpType, + }); } catch (e) { log.error(`::drpObject::callFn: ${e}`); - return; - } - - let stateChanged = false; - for (const key of Object.keys(preOperationDRP)) { - if (!deepEqual(preOperationDRP[key], drp[key])) { - stateChanged = true; - break; - } + return appliedOperationResult; } + const stateChanged = Object.keys(preOperationDRP).some( + (key) => !deepEqual(preOperationDRP[key], drp[key]) + ); if (!stateChanged) { - return; + return appliedOperationResult; } const vertexTimestamp = Date.now(); const vertexOperation = { drpType: drpType, opType: fn, value: args }; - const vertexDependencies = this.hashGraph.getFrontier(); const vertex = ObjectPb.Vertex.create({ hash: computeHash(this.peerId, vertexOperation, vertexDependencies, vertexTimestamp), peerId: this.peerId, @@ -197,8 +198,8 @@ export class DRPObject implements DRPObjectBase { dependencies: vertexDependencies, timestamp: vertexTimestamp, }); - this.hashGraph.addToFrontier(vertex); + this.hashGraph.addToFrontier(vertex); if (drpType === DrpType.DRP) { this._setObjectACLState(vertex, undefined); this._setDRPState(vertex, undefined, this._getDRPState(drp)); @@ -210,6 +211,11 @@ export class DRPObject implements DRPObjectBase { this.vertices.push(vertex); this._notify("callFn", [vertex]); + + if (!isACL) Object.assign(this.drp as DRP, drp); + else Object.assign(this.acl as ObjectACL, drp); + + return appliedOperationResult; } /* Merges the vertices into the hashgraph @@ -385,7 +391,7 @@ export class DRPObject implements DRPObjectBase { } try { - target[methodName](...value); + return target[methodName](...value); } catch (e) { throw new Error(`Error while applying operation ${opType}: ${e}`); } diff --git a/packages/object/tests/drpobject.test.ts b/packages/object/tests/drpobject.test.ts index 38d70e22..99faca18 100644 --- a/packages/object/tests/drpobject.test.ts +++ b/packages/object/tests/drpobject.test.ts @@ -1,7 +1,9 @@ import { SetDRP } from "@ts-drp/blueprints/src/index.js"; import { beforeEach, describe, expect, it, test, vi } from "vitest"; -import { DRPObject, ObjectACL } from "../src/index.js"; +import { SemanticsType } from "../dist/src/hashgraph/index.js"; +import { ActionType } from "../dist/src/hashgraph/index.js"; +import { DRP, DRPObject, ObjectACL, ResolveConflictsType, Vertex } from "../src/index.js"; const acl = new ObjectACL({ admins: new Map([ @@ -70,6 +72,46 @@ describe("Drp Object should be able to change state value", () => { }); }); +describe("Test for duplicate call issue", () => { + let counter = 0; + + class CounterDRP implements DRP { + semanticsType = SemanticsType.pair; + + private _counter: number; + + constructor() { + this._counter = 0; + } + + test() { + this._counter++; + counter++; + return this._counter; + } + + resolveConflicts(_: Vertex[]): ResolveConflictsType { + return { action: ActionType.Nop }; + } + } + + test("Detect duplicate call", () => { + const obj = new DRPObject({ + peerId: "", + publicCredential: { + ed25519PublicKey: "cred", + blsPublicKey: "cred", + }, + drp: new CounterDRP(), + }); + + const testDRP = obj.drp as CounterDRP; + expect(testDRP).toBeDefined(); + const ret = testDRP.test(); + expect(ret).toBe(counter); + }); +}); + describe("Merging vertices tests", () => { let obj1: DRPObject; let obj2: DRPObject; From 080af29f0f0bbbf064d972984f4201af8e84b711 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ph=E1=BA=A1m=20Xu=C3=A2n=20Trung?= <66519569+trungnotchung@users.noreply.github.com> Date: Wed, 19 Feb 2025 22:06:49 +0700 Subject: [PATCH 3/5] fix: redundant ACL computation (#474) Signed-off-by: Sacha Froment --- packages/object/src/index.ts | 81 ++-- pnpm-lock.yaml | 792 ++++++++--------------------------- 2 files changed, 210 insertions(+), 663 deletions(-) diff --git a/packages/object/src/index.ts b/packages/object/src/index.ts index 2b0aced2..8688ebf2 100644 --- a/packages/object/src/index.ts +++ b/packages/object/src/index.ts @@ -165,55 +165,51 @@ export class DRPObject implements DRPObjectBase { const isACL = drpType === DrpType.ACL; const vertexDependencies = this.hashGraph.getFrontier(); + const vertexOperation = { drpType, opType: fn, value: args }; + const preComputeLca = this.computeLCA(vertexDependencies); + const now = Date.now(); const preOperationDRP = isACL ? this._computeObjectACL(vertexDependencies) : this._computeDRP(vertexDependencies); - const drp = cloneDeep(preOperationDRP); + const clonedDRP = cloneDeep(preOperationDRP); let appliedOperationResult = undefined; try { - appliedOperationResult = this._applyOperation(drp, { - opType: fn, - value: args, - drpType, - }); + appliedOperationResult = this._applyOperation(clonedDRP, vertexOperation); } catch (e) { log.error(`::drpObject::callFn: ${e}`); return appliedOperationResult; } const stateChanged = Object.keys(preOperationDRP).some( - (key) => !deepEqual(preOperationDRP[key], drp[key]) + (key) => !deepEqual(preOperationDRP[key], clonedDRP[key]) ); if (!stateChanged) { return appliedOperationResult; } - const vertexTimestamp = Date.now(); - const vertexOperation = { drpType: drpType, opType: fn, value: args }; + const [drp, acl] = isACL + ? [this._computeDRP(vertexDependencies, preComputeLca), clonedDRP as ACL] + : [clonedDRP as DRP, this._computeObjectACL(vertexDependencies, preComputeLca)]; + const vertex = ObjectPb.Vertex.create({ - hash: computeHash(this.peerId, vertexOperation, vertexDependencies, vertexTimestamp), + hash: computeHash(this.peerId, vertexOperation, vertexDependencies, now), peerId: this.peerId, operation: vertexOperation, dependencies: vertexDependencies, - timestamp: vertexTimestamp, + timestamp: now, }); this.hashGraph.addToFrontier(vertex); - if (drpType === DrpType.DRP) { - this._setObjectACLState(vertex, undefined); - this._setDRPState(vertex, undefined, this._getDRPState(drp)); - } else { - this._setObjectACLState(vertex, undefined, this._getDRPState(drp)); - this._setDRPState(vertex, undefined); - } - this._initializeFinalityState(vertex.hash); + this._setDRPState(vertex, preComputeLca, this._getDRPState(drp)); + this._setObjectACLState(vertex, preComputeLca, this._getDRPState(acl)); + this._initializeFinalityState(vertex.hash, acl); this.vertices.push(vertex); this._notify("callFn", [vertex]); - if (!isACL) Object.assign(this.drp as DRP, drp); - else Object.assign(this.acl as ObjectACL, drp); + if (!isACL) Object.assign(this.drp as DRP, clonedDRP); + else Object.assign(this.acl as ObjectACL, clonedDRP); return appliedOperationResult; } @@ -280,18 +276,20 @@ export class DRPObject implements DRPObjectBase { try { this.validateVertex(vertex); const preComputeLca = this.computeLCA(vertex.dependencies); - - if (vertex.operation.drpType === DrpType.DRP) { - const drp = this._computeDRP(vertex.dependencies, preComputeLca, vertex.operation); - this._setObjectACLState(vertex, preComputeLca); - this._setDRPState(vertex, preComputeLca, this._getDRPState(drp)); - } else { - const acl = this._computeObjectACL(vertex.dependencies, preComputeLca, vertex.operation); - this._setObjectACLState(vertex, preComputeLca, this._getDRPState(acl)); - this._setDRPState(vertex, preComputeLca); - } + const drp = this._computeDRP( + vertex.dependencies, + preComputeLca, + vertex.operation.drpType === DrpType.DRP ? vertex.operation : undefined + ); + const acl = this._computeObjectACL( + vertex.dependencies, + preComputeLca, + vertex.operation.drpType === DrpType.ACL ? vertex.operation : undefined + ); + this._setDRPState(vertex, preComputeLca, this._getDRPState(drp)); + this._setObjectACLState(vertex, preComputeLca, this._getDRPState(acl)); this.hashGraph.addVertex(vertex); - this._initializeFinalityState(vertex.hash); + this._initializeFinalityState(vertex.hash, acl); newVertices.push(vertex); } catch (_) { missing.push(vertex.hash); @@ -344,21 +342,8 @@ export class DRPObject implements DRPObjectBase { } // initialize the attestation store for the given vertex hash - private _initializeFinalityState(hash: Hash) { - if (!this.acl || !this.originalObjectACL) { - throw new Error("ObjectACL is undefined"); - } - const fetchedState = this.aclStates.get(hash); - if (fetchedState !== undefined) { - const state = cloneDeep(fetchedState); - const acl = cloneDeep(this.originalObjectACL); - - for (const entry of state.state) { - acl[entry.key] = entry.value; - } - // signer set equals writer set - this.finalityStore.initializeState(hash, acl.query_getFinalitySigners()); - } + private _initializeFinalityState(hash: Hash, acl: ACL) { + this.finalityStore.initializeState(hash, acl.query_getFinalitySigners()); } // check if the given peer has write permission @@ -438,7 +423,7 @@ export class DRPObject implements DRPObjectBase { vertexDependencies: Hash[], preCompute?: LcaAndOperations, vertexOperation?: Operation - ): DRP { + ): ACL { if (!this.acl || !this.originalObjectACL) { throw new Error("ObjectACL is undefined"); } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 3597f1bb..5109fefa 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -70,10 +70,10 @@ importers: version: 8.24.1(eslint@9.20.1)(typescript@5.7.3) vite: specifier: ^6.0.9 - version: 6.1.0(@types/node@22.13.4)(terser@5.39.0)(tsx@4.19.1)(yaml@2.7.0) + version: 6.1.1(@types/node@22.13.4)(terser@5.39.0)(tsx@4.19.1)(yaml@2.7.0) vite-tsconfig-paths: specifier: ^5.0.1 - version: 5.1.4(typescript@5.7.3)(vite@6.1.0(@types/node@22.13.4)(terser@5.39.0)(tsx@4.19.1)(yaml@2.7.0)) + version: 5.1.4(typescript@5.7.3)(vite@6.1.1(@types/node@22.13.4)(terser@5.39.0)(tsx@4.19.1)(yaml@2.7.0)) vitest: specifier: ^3.0.5 version: 3.0.6(@types/node@22.13.4)(terser@5.39.0)(tsx@4.19.1)(yaml@2.7.0) @@ -95,10 +95,10 @@ importers: version: 5.7.3 vite: specifier: ^6.0.9 - version: 6.1.0(@types/node@22.13.4)(terser@5.39.0)(tsx@4.19.1)(yaml@2.7.0) + version: 6.1.1(@types/node@22.13.4)(terser@5.39.0)(tsx@4.19.1)(yaml@2.7.0) vite-plugin-node-polyfills: specifier: ^0.22.0 - version: 0.22.0(rollup@4.34.8)(vite@6.1.0(@types/node@22.13.4)(terser@5.39.0)(tsx@4.19.1)(yaml@2.7.0)) + version: 0.22.0(rollup@4.34.8)(vite@6.1.1(@types/node@22.13.4)(terser@5.39.0)(tsx@4.19.1)(yaml@2.7.0)) examples/chat: dependencies: @@ -117,10 +117,10 @@ importers: version: 5.7.3 vite: specifier: ^6.0.9 - version: 6.1.0(@types/node@22.13.4)(terser@5.39.0)(tsx@4.19.1)(yaml@2.7.0) + version: 6.1.1(@types/node@22.13.4)(terser@5.39.0)(tsx@4.19.1)(yaml@2.7.0) vite-plugin-node-polyfills: specifier: ^0.22.0 - version: 0.22.0(rollup@4.34.8)(vite@6.1.0(@types/node@22.13.4)(terser@5.39.0)(tsx@4.19.1)(yaml@2.7.0)) + version: 0.22.0(rollup@4.34.8)(vite@6.1.1(@types/node@22.13.4)(terser@5.39.0)(tsx@4.19.1)(yaml@2.7.0)) examples/grid: dependencies: @@ -139,10 +139,10 @@ importers: version: 5.7.3 vite: specifier: ^6.0.9 - version: 6.1.0(@types/node@22.13.4)(terser@5.39.0)(tsx@4.19.1)(yaml@2.7.0) + version: 6.1.1(@types/node@22.13.4)(terser@5.39.0)(tsx@4.19.1)(yaml@2.7.0) vite-plugin-node-polyfills: specifier: ^0.22.0 - version: 0.22.0(rollup@4.34.8)(vite@6.1.0(@types/node@22.13.4)(terser@5.39.0)(tsx@4.19.1)(yaml@2.7.0)) + version: 0.22.0(rollup@4.34.8)(vite@6.1.1(@types/node@22.13.4)(terser@5.39.0)(tsx@4.19.1)(yaml@2.7.0)) examples/local-bootstrap: dependencies: @@ -158,10 +158,10 @@ importers: version: 5.7.3 vite: specifier: ^6.0.9 - version: 6.1.0(@types/node@22.13.4)(terser@5.39.0)(tsx@4.19.1)(yaml@2.7.0) + version: 6.1.1(@types/node@22.13.4)(terser@5.39.0)(tsx@4.19.1)(yaml@2.7.0) vite-plugin-node-polyfills: specifier: ^0.22.0 - version: 0.22.0(rollup@4.34.8)(vite@6.1.0(@types/node@22.13.4)(terser@5.39.0)(tsx@4.19.1)(yaml@2.7.0)) + version: 0.22.0(rollup@4.34.8)(vite@6.1.1(@types/node@22.13.4)(terser@5.39.0)(tsx@4.19.1)(yaml@2.7.0)) packages/blueprints: dependencies: @@ -198,25 +198,25 @@ importers: version: 7.0.1 '@libp2p/autonat': specifier: ^2.0.6 - version: 2.0.19 + version: 2.0.20 '@libp2p/bootstrap': specifier: ^11.0.6 - version: 11.0.22 + version: 11.0.23 '@libp2p/circuit-relay-v2': specifier: ^3.1.6 - version: 3.1.12 + version: 3.1.13 '@libp2p/crypto': specifier: ^5.0.5 version: 5.0.11 '@libp2p/dcutr': specifier: ^2.0.6 - version: 2.0.18 + version: 2.0.19 '@libp2p/devtools-metrics': specifier: ^1.1.5 - version: 1.2.3 + version: 1.2.4 '@libp2p/identify': specifier: ^3.0.6 - version: 3.0.18 + version: 3.0.19 '@libp2p/ping': specifier: 2.0.11 version: 2.0.11 @@ -225,13 +225,13 @@ importers: version: 11.0.1 '@libp2p/webrtc': specifier: ^5.0.9 - version: 5.1.0(react-native@0.77.1(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(react@18.3.1)) + version: 5.1.1(react-native@0.78.0(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(react@19.0.0)) '@libp2p/websockets': specifier: ^9.1.1 version: 9.1.5 '@libp2p/webtransport': specifier: ^5.0.9 - version: 5.0.27 + version: 5.0.28 '@multiformats/multiaddr': specifier: ^12.3.1 version: 12.3.5 @@ -255,7 +255,7 @@ importers: version: 3.0.1 libp2p: specifier: ^2.1.6 - version: 2.6.2 + version: 2.6.3 uint8arrays: specifier: ^5.1.0 version: 5.1.0 @@ -1484,10 +1484,6 @@ packages: resolution: {integrity: sha512-GNKqxfHG2ySmJOBSHg7LxeUx4xpuCoFjacmlCoYWEbaPXLwvfIjixRI12xCQZeULksQb23uiA8F40w5TojpV7w==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@eslint/core@0.10.0': - resolution: {integrity: sha512-gFHJ+xBOo4G3WRlR1e/3G8A6/KZAH6zcE/hkLRCZTi/B9avAG365QhFA8uOGzTMqgTghpn7/fSnscW++dpMSAw==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@eslint/core@0.11.0': resolution: {integrity: sha512-DWUB2pksgNEb6Bz2fggIy1wh6fGgZP4Xyy/Mt0QZPiloKKXerbqq9D3SBQTlCRYOrcRPu4vuz+CGjwdfqxnoWA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} @@ -1504,8 +1500,8 @@ packages: resolution: {integrity: sha512-RBMg5FRL0I0gs51M/guSAj5/e14VQ4tpZnQNWwuDT66P14I43ItmPfIZRhO9fUVIPOAQXU47atlywZ/czoqFPA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@eslint/plugin-kit@0.2.5': - resolution: {integrity: sha512-lB05FkqEdUg2AA0xEbUz0SnkXT1LcCTa438W4IWTUh4hdOnVbQyOJ81OrDXsJk/LSiJHubgGEFoR5EHq1NsH1A==} + '@eslint/plugin-kit@0.2.6': + resolution: {integrity: sha512-+0TjwR1eAUdZtvv/ir1mGX+v0tUoR3VEPB8Up0LLJC+whRW0GgBBtpbOkg/a/U4Dxa6l5a3l9AJ1aWIQVyoWJA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} '@grpc/grpc-js@1.12.6': @@ -1623,29 +1619,29 @@ packages: '@leichtgewicht/ip-codec@2.0.5': resolution: {integrity: sha512-Vo+PSpZG2/fmgmiNzYK9qWRh8h/CHrwD0mo1h1DzL4yzHNSfWYujGTYsWGreD000gcgmZ7K4Ys6Tx9TxtsKdDw==} - '@libp2p/autonat@2.0.19': - resolution: {integrity: sha512-FcCVheGZpBhgiCwVZrGekrHlH2IEMgt4ottZ9cpLVE4RoEEkTXaDV4qjDBkCDf32QrqmnrVDamff5B7TGSa2jA==} + '@libp2p/autonat@2.0.20': + resolution: {integrity: sha512-1G6o7OX4u3sJs91Ym2KS0kViN7aewX9uXS98dv05k0S5gs1mofZ+MHDG68Cox6KRKNL1+RaVKz0HDuSSSBDnzw==} - '@libp2p/bootstrap@11.0.22': - resolution: {integrity: sha512-UVRNA51AlY75lg21mwuOTNuc/+VrMwG/eNkvp3B51F6H2WnazYIvWaww9GABaVBGJvx8+N9zq1gzccwuKwpr8A==} + '@libp2p/bootstrap@11.0.23': + resolution: {integrity: sha512-2HqwyAoCy6rliVM9n1YF3vsIKxo2Hyb1Dd/p9I33mVxMIQ17oS3aMG3CC2BxYHFSa3M173oxPcUrEff+j1jxxw==} - '@libp2p/circuit-relay-v2@3.1.12': - resolution: {integrity: sha512-r6AHjiDPzlrSnC+x1uSE6JK0V8OCX8ScRjNj+kcrKzSMxb3ScXcXYb6BGQhAL42Xk0cpwf8kM603aR+SXnCjQw==} + '@libp2p/circuit-relay-v2@3.1.13': + resolution: {integrity: sha512-/8kp+7gllRjx9aXoHkR5xhTwywSzjetTEO8Pda+6g8stkt9Ntgix+G85+ZYK75l0r+C9SykZqnIfzeeTBehOoA==} '@libp2p/crypto@5.0.11': resolution: {integrity: sha512-1//iAZAO6XKFPwKqX7xCNJFwIgSyLOTE7wVS0gFaD7jWXeYmD78cojFq5QC1jRl04iTJe4COTTNHen/cpqurwA==} - '@libp2p/dcutr@2.0.18': - resolution: {integrity: sha512-GIfqRmaZ+hCgAj9kNY7E3aCOfo25n0rrF+vWSYnSip1eWcmvzrke0B42uiImXpWPvUNvYnBZChKfJRLnf5zerw==} + '@libp2p/dcutr@2.0.19': + resolution: {integrity: sha512-a4+OPQAGC2612XFaEFxfwg31Lxg7aA4m8VHQk8vkGnzyqeOVDkNmlKfBy1zLVyikCkEIiulHDFcDf1IRuoCYWw==} - '@libp2p/devtools-metrics@1.2.3': - resolution: {integrity: sha512-DyK8zu+0+a2K3MSru17wzHyTrFUwV19P6fFj3ZZZ7b+2d1ObKGl/g2sEPYBUwLHE3M7ud1pMueMs3qlsB/zFhQ==} + '@libp2p/devtools-metrics@1.2.4': + resolution: {integrity: sha512-LmVXzcFJaERIrWgfMBnZXao9GS10WUhO8Xyt9HZs9zO0D7YnVO5sHU/cwq4Vbjy4FUPzWRMmPvHBqAH6Je6ksA==} - '@libp2p/identify@3.0.18': - resolution: {integrity: sha512-79y20YnFOCOB8UqKp9S+xeN5dEz1XsPISv892BUgrumtWAv2y+HFO3ioB+0qHuE4EO+ToBx+mbMgPLFQkPd63A==} + '@libp2p/identify@3.0.19': + resolution: {integrity: sha512-D7IrK8KIfytWHnRsKDR49Jym5+m30cmQZhhxIhSe2+V/GYnigWjZXTrGvLOYJRk/xREkdQfZEqQxa8FutevYjw==} - '@libp2p/interface-internal@2.3.0': - resolution: {integrity: sha512-3D2cKBMXiSHv5VKX8unD3W+GL1K9EDt6nLxNl4/aU2t1IE8jwZ5ovx/9hIhKZFOJ+c3fgkp1OdH44i4w/Wc/1w==} + '@libp2p/interface-internal@2.3.1': + resolution: {integrity: sha512-sHeURa+SrSBX0y13cza8WhZZ237bdkCNrUHN5WhpYMkCe9HgNSI2Xa8mgenk0sBTc/w+kKYh5ypOxly8Ym4uSg==} '@libp2p/interface@2.5.0': resolution: {integrity: sha512-XKUHsDMbMVwEGgYYj1uB5XCnlFeF21SgyynKbc4sqfVCEJdjxF7ILYX0dm6tjBGjVThubjUd2b82RwOqeds3Kg==} @@ -1653,8 +1649,8 @@ packages: '@libp2p/logger@5.1.8': resolution: {integrity: sha512-Mevhz+dTQuV5UbwqLMOJZv2IpMg+/89x/Ouq0iKtkgB5vAgTwJ3DlM7+IYOeyzQRUpCPfaRiJet3aBB5wnPMRg==} - '@libp2p/multistream-select@6.0.13': - resolution: {integrity: sha512-4PK1KxMCrlfjhTT4UP3kqioj9b93U3ZulDdCVad1wae3buis6ecby4JA61of5nWZdh45xVTW0kTLnFHA4Pqmzw==} + '@libp2p/multistream-select@6.0.14': + resolution: {integrity: sha512-VzLwuoReXn000qXprbvCH4ABJx/hUA3yn9JOuPLGdJlx90KFbkZ+BeOJjz7GMudc4MsyTqmCevBN8DzQX/TLCw==} '@libp2p/opentelemetry-metrics@1.0.3': resolution: {integrity: sha512-dqKO+LbGzU7FqwrAYAHkz89EKMu5ZueCTYEIOpxDVdqAtdmLplCzxBcadpOQndmtitNRSg5URUDLOmiMTTUHVw==} @@ -1677,8 +1673,8 @@ packages: '@libp2p/pubsub-peer-discovery@11.0.1': resolution: {integrity: sha512-bT7UO7tQ4mZCPFE0eS8Fx19B8MGzxjbTNR6SwcLGcOqOqUTvc2CLByMvcy3iMXuKjmds6G+VUf5ZMhvjGLTznA==} - '@libp2p/pubsub@10.0.18': - resolution: {integrity: sha512-Qgy752RUsOZPGAvKdeLPUa2CDdpo9ArFowNTHgTIOTQ06DSncYOueeUgeZXIauQuETK5GHUY4oY6Nc82voyH6w==} + '@libp2p/pubsub@10.1.0': + resolution: {integrity: sha512-7z7KJNgasuD3/kRFfP6XQHQYTk0ZcEttPkWIkX6HaY3bNYlkM1zlLkTDiYQ0R3PCYjKcf0AN5Nh1sXn5Fh3rUQ==} '@libp2p/simple-metrics@1.3.2': resolution: {integrity: sha512-8QRpNlipcJQAbJIas3/duBMqjPCf6NzRxYUhAxBU1a1f3pfHPtT8S5cBfBWa+Nl/QcbYtC0lauUpp/AHV2vEQQ==} @@ -1686,14 +1682,14 @@ packages: '@libp2p/utils@6.5.1': resolution: {integrity: sha512-2LMLzel5HrvGjh/4W3PMPhsgSDs574vNiFWC6WNB5AsBROrfC0QMoMJjzXoUSPei/PJS9kYaxZOXwmkU3mWzLw==} - '@libp2p/webrtc@5.1.0': - resolution: {integrity: sha512-lOtx8DrrGm25Zg7xbRTHlMGl6CcwLgWBPDIgELmpmQwdKDaz0xUjYJLhxAEmINI6e0WlshL/8DagZkvC6iOMpQ==} + '@libp2p/webrtc@5.1.1': + resolution: {integrity: sha512-ng9kOWLwriHGP7GL3bzQ8qWTjki05TaFx/WqWx3xCHpjwdb+Pld7BmPti/PvSrG8HQ8UPA83tSuvllm+CH4H9Q==} '@libp2p/websockets@9.1.5': resolution: {integrity: sha512-E/PJLWMI8cHKLHONuvLJDJca1KuMcn5NaqhGt5/kXt2HC1i02lbEa8xsKsWSxoVBwK/jEwjwINiW4OaKuQr6SQ==} - '@libp2p/webtransport@5.0.27': - resolution: {integrity: sha512-pLsIMaw7Zf3K0GmKwH6JQ0CIIi5gp+GfHKn0UE4X3RZAFxWZheZ5eR/RV5t9sEqTnFf6jEYuWt7Y82ThpNasfw==} + '@libp2p/webtransport@5.0.28': + resolution: {integrity: sha512-CXjAStAf3xO8JBmyxcgSX6GFfJZWbG2qCnxG1RSYh5mpsz/EtIaevmqJb1Ns5QArnA4UjMPyq4WbJpNkqkKvrw==} '@mapbox/node-pre-gyp@1.0.11': resolution: {integrity: sha512-Yhlar6v9WQgUp/He7BdgzOz8lqMQ8sU+jkCq7Wx8Myc5YFJLbEe7lgui/V7G1qB1DJykHSGwreceSaD60Y0PUQ==} @@ -1972,28 +1968,28 @@ packages: '@protobufjs/utf8@1.1.0': resolution: {integrity: sha512-Vvn3zZrhQZkkBE8LSuW3em98c0FwgO4nxzv6OdSxPKJIEKY2bGbHn+mhGIPerzI4twdxaP8/0+06HBpwf345Lw==} - '@react-native/assets-registry@0.77.1': - resolution: {integrity: sha512-bAQHOgqGZnF6xdYE9sJrbZ7F65Z25yLi9yWps8vOByKtj0b+f3FJhsU3Mcfy1uWvelpNEGebOLQf+WEPiwGrkw==} + '@react-native/assets-registry@0.78.0': + resolution: {integrity: sha512-PPHlTRuP9litTYkbFNkwveQFto3I94QRWPBBARU0cH/4ks4EkfCfb/Pdb3AHgtJi58QthSHKFvKTQnAWyHPs7w==} engines: {node: '>=18'} - '@react-native/babel-plugin-codegen@0.77.1': - resolution: {integrity: sha512-NmmAJHMTtA6gjHRE1FvO+Jvbp0ekonANcK2IYOyqK6nLj7hhtdiMlZaUDsRi17SGHYY4X4hj6UH2nm6LfD1RLg==} + '@react-native/babel-plugin-codegen@0.78.0': + resolution: {integrity: sha512-+Sy9Uine0QAbQRxMl6kBlkzKW0qHQk8hghCoKswRWt1ZfxaMA3rezobD5mtSwt/Yhadds9cGbMFWfFJM3Tynsg==} engines: {node: '>=18'} - '@react-native/babel-preset@0.77.1': - resolution: {integrity: sha512-7eTOcMaZwvPllzZhT5fjcDNysjP54GtEbdXVxO2u5sPXWYriPL3UKuDIzIdhjxil8GtZs6+UvLNoKTateFt19Q==} + '@react-native/babel-preset@0.78.0': + resolution: {integrity: sha512-q44ZbR0JXdPvNrjNw75VmiVXXoJhZIx8dTUBVgnZx/UHBQuhPu0e8pAuo56E2mZVkF7FK0s087/Zji8n5OSxbQ==} engines: {node: '>=18'} peerDependencies: '@babel/core': '*' - '@react-native/codegen@0.77.1': - resolution: {integrity: sha512-cCUbkUewMjiK94Z2+Smh+qHkZrBSoXelOMruZGZe7TTCD6ygl6ho7fkfNuKrB2yFzSAjlUfUyLfaumVJGKslWw==} + '@react-native/codegen@0.78.0': + resolution: {integrity: sha512-8iVT2VYhkalLFUWoQRGSluZZHEG93StfwQGwQ+wk1vOUlOfoT/Xqglt6DvGXIyM9gaMCr6fJBFQVrU+FrXEFYA==} engines: {node: '>=18'} peerDependencies: '@babel/preset-env': ^7.1.6 - '@react-native/community-cli-plugin@0.77.1': - resolution: {integrity: sha512-w2H9ePpUq7eqqtzSUSaYqbNNZoU6pbBONjTIWdztp0lFdnUaLoLUMddt9XhtKFUlnNaSmfetjJSSrsi3JVbO6w==} + '@react-native/community-cli-plugin@0.78.0': + resolution: {integrity: sha512-LpfEU+F1hZGcxIf07aBrjlImA0hh8v76V4wTJOgxxqGDUjjQ/X6h9V+bMXne60G9gwccTtvs1G0xiKWNUPI0VQ==} engines: {node: '>=18'} peerDependencies: '@react-native-community/cli-server-api': '*' @@ -2001,36 +1997,36 @@ packages: '@react-native-community/cli-server-api': optional: true - '@react-native/debugger-frontend@0.77.1': - resolution: {integrity: sha512-wX/f4JRyAc0PqcW3OBQAAw35k4KaTmDKe+/AJuSQLbqDH746awkFprmXRRTAfRc88q++4e6Db4gyK0GVdWNIpQ==} + '@react-native/debugger-frontend@0.78.0': + resolution: {integrity: sha512-KQYD9QlxES/VdmXh9EEvtZCJK1KAemLlszQq4dpLU1stnue5N8dnCY6A7PpStMf5UtAMk7tiniQhaicw0uVHgQ==} engines: {node: '>=18'} - '@react-native/dev-middleware@0.77.1': - resolution: {integrity: sha512-DU6EEac57ch5XKflUB6eXepelHZFaKMJvmaZ24kt28AnvBp8rVrdaORe09pThuZdIF2m+j2BXsipU5zCd8BbZw==} + '@react-native/dev-middleware@0.78.0': + resolution: {integrity: sha512-zEafAZdOz4s37Jh5Xcv4hJE5qZ6uNxgrTLcpjDOJnQG6dO34/BoZeXvDrjomQFNn6ogdysR51mKJStaQ3ixp5A==} engines: {node: '>=18'} - '@react-native/gradle-plugin@0.77.1': - resolution: {integrity: sha512-QNuNMWH0CeC+PYrAXiuUIBbwdeGJ3fZpQM03vdG3tKdk66cVSFvxLh60P0w5kRHN7UFBg2FAcYx5eQ/IdcAntg==} + '@react-native/gradle-plugin@0.78.0': + resolution: {integrity: sha512-WvwgfmVs1QfFl1FOL514kz2Fs5Nkg2BGgpE8V0ild8b/UT6jCD8qh2dTI5kL0xdT0d2Xd2BxfuFN0xCLkMC+SA==} engines: {node: '>=18'} - '@react-native/js-polyfills@0.77.1': - resolution: {integrity: sha512-6qd3kNr5R+JF+HzgM/fNSLEM1kw4RoOoaJV6XichvlOaCRmWS22X5TehVqiZOP95AAxtULRIifRs1cK5t9+JSg==} + '@react-native/js-polyfills@0.78.0': + resolution: {integrity: sha512-YZ9XtS77s/df7548B6dszX89ReehnA7hiab/axc30j/Mgk7Wv2woOjBKnAA4+rZ0ITLtxNwyJIMaRAc9kGznXw==} engines: {node: '>=18'} - '@react-native/metro-babel-transformer@0.77.1': - resolution: {integrity: sha512-M4EzWDmUpIZhwJojEekbK7DzK2fYukU/TRIVZEmnbxVyWVwt/A1urbE2iV+s9E4E99pN+JdVpnBgu4LRCyPzJQ==} + '@react-native/metro-babel-transformer@0.78.0': + resolution: {integrity: sha512-Hy/dl+zytLCRD9dp32ukcRS1Bn0gZH0h0i3AbriS6OGYgUgjAUFhXOKzZ15/G1SEq2sng91MNo/hMvo4uXoc5A==} engines: {node: '>=18'} peerDependencies: '@babel/core': '*' - '@react-native/normalize-colors@0.77.1': - resolution: {integrity: sha512-sCmEs/Vpi14CtFYhmKXpPFZntKYGezFGgT9cJANRS2aFseAL4MOomb5Ms+TOQw82aFcwPPjDX6Hrl87WjTf73A==} + '@react-native/normalize-colors@0.78.0': + resolution: {integrity: sha512-FkeLvLLaMYlGsSntixTUvlNtc1OHij4TYRtymMNPWqBKFAMXJB/qe45VxXNzWP+jD0Ok6yXineQFtktKcHk9PA==} - '@react-native/virtualized-lists@0.77.1': - resolution: {integrity: sha512-S25lyHO9owc+uaV2tcd9CMTVJs7PUZX0UGCG60LoLOBHW3krVq0peI34Gm6HEhkeKqb4YvZXqI/ehoNPUm1/ww==} + '@react-native/virtualized-lists@0.78.0': + resolution: {integrity: sha512-ibETs3AwpkkRcORRANvZeEFjzvN41W02X882sBzoxC5XdHiZ2DucXo4fjKF7i86MhYCFLfNSIYbwupx1D1iFmg==} engines: {node: '>=18'} peerDependencies: - '@types/react': ^18.2.6 + '@types/react': ^19.0.0 react: '*' react-native: '*' peerDependenciesMeta: @@ -2515,10 +2511,6 @@ packages: resolution: {integrity: sha512-LHE+8BuR7RYGDKvnrmcuSq3tDcKv9OFEXQt/HpbZhY7V6h0zlUXutnAD82GiFx9rdieCMjkvtcsPqBwgUl1Iiw==} engines: {node: '>= 0.4'} - array-find-index@1.0.2: - resolution: {integrity: sha512-M1HQyIXcBGtVywBt8WVdim+lrNaK7VHp99Qt5pSNziXznKHViIBbXWtfRTpEFpF/c4FdfxNAsCCwPp5phBYJtw==} - engines: {node: '>=0.10.0'} - array-includes@3.1.8: resolution: {integrity: sha512-itaWrbYbqpGXkGhZPGUulwnhVf5Hpy1xiCFsGqyIGglbBxmG5vSjxQen3/WGOjPpNEv1RtBLKxbmVXm8HpJStQ==} engines: {node: '>= 0.4'} @@ -2543,10 +2535,6 @@ packages: resolution: {integrity: sha512-BNoCY6SXXPQ7gF2opIP4GBE+Xw7U+pHMYKuzjgCN3GwiaIR09UUeKfheyIry77QtrCBlC0KK0q5/TER/tYh3PQ==} engines: {node: '>= 0.4'} - arrify@1.0.1: - resolution: {integrity: sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA==} - engines: {node: '>=0.10.0'} - asap@2.0.6: resolution: {integrity: sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==} @@ -2661,10 +2649,6 @@ packages: benchmark@2.1.4: resolution: {integrity: sha512-l9MlfN4M1K/H2fbhfMy3B7vJd6AGKJVQn2h6Sg/Yx+KckoUA7ewS5Vv6TjSq18ooE1kS9hhAlQRH3AkXIh/aOQ==} - binary-data@0.6.0: - resolution: {integrity: sha512-HGiT0ir03tS1u7iWdW5xjJfbPpvxH2qJbPFxXW0I3P5iOzkbjN/cJy5GlpAwmjHW5CiayGOxZ/ytLzXmYgdgqQ==} - engines: {node: '>=6'} - binaryen@116.0.0-nightly.20240114: resolution: {integrity: sha512-0GZrojJnuhoe+hiwji7QFaL3tBlJoA+KFUN7ouYSDGZLSo9CKM8swQX8n/UcbR0d1VuZKU+nhogNzv423JEu5A==} hasBin: true @@ -2741,9 +2725,6 @@ packages: buffer-xor@1.0.3: resolution: {integrity: sha512-571s0T7nZWK6vB67HI5dyUF7wXiNcfaPPPTl6zYCNApANjIvYJTg7hlud/+cJpdAhS7dVzqMLmfhfHR3rAcOjQ==} - buffer-xor@2.0.2: - resolution: {integrity: sha512-eHslX0bin3GB+Lx2p7lEYRShRewuNZL3fUl4qlVJGGiwoPGftmt8JQgk2Y9Ji5/01TnVDo33E5b5O3vUB1HdqQ==} - buffer@5.7.1: resolution: {integrity: sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==} @@ -2789,14 +2770,6 @@ packages: resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} engines: {node: '>=6'} - camelcase-keys@4.2.0: - resolution: {integrity: sha512-Ej37YKYbFUI8QiYlvj9YHb6/Z60dZyPJW0Cs8sFilMbd2lP0bw3ylAq9yJkK4lcTA2dID5fG8LjmJYbO7kWb7Q==} - engines: {node: '>=4'} - - camelcase@4.1.0: - resolution: {integrity: sha512-FxAv7HpHrXbh3aPo4o2qxHay2lkLY3x5Mw3KeE4KQE8ysVfziWeRZDwcjauvwBSGEC/nXUPzZy8zeh4HokqOnw==} - engines: {node: '>=4'} - camelcase@5.3.1: resolution: {integrity: sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==} engines: {node: '>=6'} @@ -3003,10 +2976,6 @@ packages: resolution: {integrity: sha512-r4ESw/IlusD17lgQi1O20Fa3qNnsckR126TdUuBgAu7GBYSIPvdNyONd3Zrxh0xCwA4+6w/TDArBPsMvhur+KQ==} engines: {node: '>= 0.10'} - currently-unhandled@0.4.1: - resolution: {integrity: sha512-/fITjgjGU50vjQ4FH6eUoYu+iUoUKIXws2hL15JJpIR+BbTxaXQsMuuyjtNh2WqsSBS5nsaZHFsFecyw5CCAng==} - engines: {node: '>=0.10.0'} - data-uri-to-buffer@6.0.2: resolution: {integrity: sha512-7hvf7/GW8e86rW0ptuwS3OcBGDjIi6SZva7hCyWC0yYry2cOPmLIjXAUHI6DK2HsnwJd9ifmt57i8eV2n4YNpw==} engines: {node: '>= 14'} @@ -3060,18 +3029,6 @@ packages: supports-color: optional: true - decamelize-keys@1.1.1: - resolution: {integrity: sha512-WiPxgEirIV0/eIOMcnFBA3/IJZAZqKnwAwWyvvdi4lsr1WCN22nhdf/3db3DoZcUjTV2SqfzIwNyp6y2xs3nmg==} - engines: {node: '>=0.10.0'} - - decamelize@1.2.0: - resolution: {integrity: sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==} - engines: {node: '>=0.10.0'} - - decode-uri-component@0.2.2: - resolution: {integrity: sha512-FqUYQ+8o158GyGTrMFJms9qh3CqTKvAqgqsTnkLI8sKu0028orqBhxNMFkFen0zGyg6epACD32pjVk58ngIErQ==} - engines: {node: '>=0.10'} - decompress-response@6.0.0: resolution: {integrity: sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==} engines: {node: '>=10'} @@ -3542,10 +3499,6 @@ packages: resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==} engines: {node: '>=8'} - filter-obj@1.1.0: - resolution: {integrity: sha512-8rXg1ZnX7xzy2NGDVkBVaAy+lSlPNwad13BtgSlLuxfIslyt5Vg64U7tFcCt4WS1R0hvtnQybT/IyCkGZ3DpXQ==} - engines: {node: '>=0.10.0'} - finalhandler@1.1.2: resolution: {integrity: sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==} engines: {node: '>= 0.8'} @@ -3554,10 +3507,6 @@ packages: resolution: {integrity: sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ==} engines: {node: '>=6'} - find-up@2.1.0: - resolution: {integrity: sha512-NWzkk0jSJtTt08+FBFMvXoeZnOJD+jTtsRmBYbAIzJdX6l7dLgR7CTubCM5/eDdPUBvLCeVasP1brfVR/9/EZQ==} - engines: {node: '>=4'} - find-up@3.0.0: resolution: {integrity: sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==} engines: {node: '>=6'} @@ -3584,8 +3533,8 @@ packages: flow-enums-runtime@0.0.6: resolution: {integrity: sha512-3PYnM29RFXwvAN6Pc/scUfkI7RwhQ/xqyLUyPNlXUp9S40zI8nup9tUSrTLSVnWGBN38FNiGWbwZOB6uR4OGdw==} - flow-parser@0.261.1: - resolution: {integrity: sha512-2l5bBKeVtT+d+1CYSsTLJ+iP2FuoR7zjbDQI/v6dDRiBpx3Lb20Z/tLS37ReX/lcodyGSHC2eA/Nk63hB+mkYg==} + flow-parser@0.261.2: + resolution: {integrity: sha512-RtunoakA3YjtpAxPSOBVW6lmP5NYmETwkpAfNkdr8Ovf86ENkbD3mtPWnswFTIUtRvjwv0i8ZSkHK+AzsUg1JA==} engines: {node: '>=0.4.0'} for-each@0.3.5: @@ -3635,9 +3584,6 @@ packages: engines: {node: '>=10'} deprecated: This package is no longer supported. - generate-function@2.3.1: - resolution: {integrity: sha512-eeB5GfMNeevm/GRYq20ShmsaGcmI81kIX2K9XQx5miC8KdHaC6Jm0qQ8ZNeGOi7wYB8OsdxKs+Y2oVuTFuVwKQ==} - gensync@1.0.0-beta.2: resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==} engines: {node: '>=6.9.0'} @@ -3797,8 +3743,8 @@ packages: resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==} engines: {node: '>= 0.4'} - hast-util-to-html@9.0.4: - resolution: {integrity: sha512-wxQzXtdbhiwGAUKrnQJXlOPmHnEehzphwkK7aluUPQ+lEc1xefC8pblMgpp2w5ldBTEfveRIrADcrhGIWrlTDA==} + hast-util-to-html@9.0.5: + resolution: {integrity: sha512-OguPdidb+fbHQSU4Q4ZiLKnzWo8Wwsf5bZfbvu7//a9oTYoqD/fWpe96NuHkoS9h0ccGOTe0C4NGXdtS0iObOw==} hast-util-whitespace@3.0.0: resolution: {integrity: sha512-88JUN06ipLwsnv+dVn+OIYOvAuvBMy/Qoi6O7mQHxdPXpjy+Cd6xRkWwux7DKO+4sYILtLBRIKgsdpS2gQc7qw==} @@ -3812,9 +3758,6 @@ packages: hmac-drbg@1.0.1: resolution: {integrity: sha512-Tti3gMqLdZfhOQY1Mzf/AanLiqh1WTiJgEj26ZuYQ9fbkLomzGchCws4FyrSd4VkpBfiNhaE1On+lOz894jvXg==} - hosted-git-info@2.8.9: - resolution: {integrity: sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==} - html-escaper@2.0.2: resolution: {integrity: sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==} @@ -3876,10 +3819,6 @@ packages: resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==} engines: {node: '>=0.8.19'} - indent-string@3.2.0: - resolution: {integrity: sha512-BYqTHXTGUIvg7t1r4sJNKcbDZkL92nkXA8YtRpbjFHRHGDL/NtUeiBJMeE60kIFN/Mg8ESaWQvftaYMGJzQZCQ==} - engines: {node: '>=4'} - inflight@1.0.6: resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==} deprecated: This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful. @@ -3919,13 +3858,6 @@ packages: resolution: {integrity: sha512-zHtQzGojZXTwZTHQqra+ETKd4Sn3vgi7uBmlPoXVWZqYvuKmtI0l/VZTjqGmJY9x88GGOaZ9+G9ES8hC4T4X8g==} engines: {node: '>= 12'} - ip2buf@2.0.0: - resolution: {integrity: sha512-ezW62UW6IPwpuS3mpsvOS3/3Jgx7aaNZT+uJo/+xVBxHCq7EA1ryuhzZw2MyC5GuGd1sAp3RDx7e4+nJCGt9vA==} - engines: {node: '>=6'} - - ip@1.1.9: - resolution: {integrity: sha512-cyRxvOEpNHNtchU3Ln9KC/auJgup87llfQpQ+t5ghoC/UhL16SWzbueiCsdTnWmqAWl7LadfuwhlqmtOaqMHdQ==} - is-arguments@1.2.0: resolution: {integrity: sha512-7bVbi0huj/wrIAOzb8U1aszg9kdi3KN/CyU19CTI7tAoZYEZoL9yCDXpbXN+uPsuWnP02cyug1gleqq+TU+YCA==} engines: {node: '>= 0.4'} @@ -4055,10 +3987,6 @@ packages: resolution: {integrity: sha512-lJJV/5dYS+RcL8uQdBDW9c9uWFLLBNRyFhnAKXw5tVqLlKZ4RMGZKv+YQ/IA3OhD+RpbJa1LLFM1FQPGyIXvOA==} engines: {node: '>=12'} - is-plain-obj@1.1.0: - resolution: {integrity: sha512-yvkRyxmFKEOQ4pNXCmJG5AEQNlXJS5LaONXo5/cLdTZdWvsZ1ioJEonLGAosKlMWE8lwUy/bJzMjcw8az73+Fg==} - engines: {node: '>=0.10.0'} - is-plain-obj@2.1.0: resolution: {integrity: sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==} engines: {node: '>=8'} @@ -4067,9 +3995,6 @@ packages: resolution: {integrity: sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==} engines: {node: '>=0.10.0'} - is-property@1.0.2: - resolution: {integrity: sha512-Ks/IoX00TtClbGQr4TWXemAnktAQvYB7HzcCxDGqEZU6oCmb2INHuOoKxbtR+HFkmYWBKv/dOZtGRiAjDhj92g==} - is-regex@1.2.1: resolution: {integrity: sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g==} engines: {node: '>= 0.4'} @@ -4097,10 +4022,6 @@ packages: resolution: {integrity: sha512-BtEeSsoaQjlSPBemMQIrY1MY0uM6vnS1g5fmufYOtnxLGUZM2178PKbhsk7Ffv58IX+ZtcvoGwccYsh0PglkAA==} engines: {node: '>= 0.4'} - is-stun@2.0.0: - resolution: {integrity: sha512-3d3CI8nLmh2ATbjfvi5TkVcimMgXtFH7PGoXeT1prGguVK8eaO3CzynLbdFY8Ez9khVpLpP8HHFPxneqn0QYPw==} - engines: {node: '>=4'} - is-symbol@1.1.1: resolution: {integrity: sha512-9gGx6GTtCQM73BgmHQXfDmLtfjjTUDSyoxTCbp5WtoixAhfgsDirWIcVQ/IHpvI5Vgd5i/J5F7B9cN/WlVbC/w==} engines: {node: '>= 0.4'} @@ -4310,9 +4231,6 @@ packages: jsbn@1.1.0: resolution: {integrity: sha512-4bYVV3aAMtDTTu4+xsDYa6sy9GyJ69/amsu9sYF2zqjiEoZA5xJi3BrfX3uY+/IekIu7MwdObdbDWpoZdBv3/A==} - jsc-android@250231.0.0: - resolution: {integrity: sha512-rS46PvsjYmdmuz1OAWXY/1kCYG7pnf1TBqeTiOJr1iDz7s5DLxxC9n/ZMknLDxzYzNVfI7R95MH10emSSG1Wuw==} - jsc-safe-url@0.2.4: resolution: {integrity: sha512-0wM3YBWtYePOjfyXQH5MWQ8H7sdk5EXSwZvmSLKk2RboVQ2Bu239jycHDz5J/8Blf3K0Qnoy2b6xD+z10MFB+Q==} @@ -4383,8 +4301,8 @@ packages: resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==} engines: {node: '>= 0.8.0'} - libp2p@2.6.2: - resolution: {integrity: sha512-MSc0MbHqytsl54hUkPpQBSsBUdNt177mW14FUtzHI2S60Iw2pBKraXqm1FuVf9J8nTOK6VIDbSLcC2269A0j0Q==} + libp2p@2.6.3: + resolution: {integrity: sha512-OySoiRezMGZxrIVCM9amuX94TRUm3z+oqPJfsw1ur6VOxzc3RttqgIam8eit8PuFienVTiOAsx5QYORocw+9+Q==} lighthouse-logger@1.4.2: resolution: {integrity: sha512-gPWxznF6TKmUHrOQjlVo2UbaL2EJ71mb2CCeRs/2qBpi4L/g4LUVc9+3lKQ6DTUZwJswfM7ainGrLO1+fOqa2g==} @@ -4395,14 +4313,6 @@ packages: linkify-it@5.0.0: resolution: {integrity: sha512-5aHCbzQRADcdP+ATqnDuhhJ/MRIqDkZX5pyjFHRRysS8vZ5AbqGEoFIb6pYHPZ+L/OC2Lc+xT8uHVVR5CAK/wQ==} - load-json-file@4.0.0: - resolution: {integrity: sha512-Kx8hMakjX03tiGTLAIdJ+lL0htKnXjEZN6hk/tozf/WOuYGdZBJrZ+rCJRbVCugsjB3jMLn9746NsQIf5VjBMw==} - engines: {node: '>=4'} - - locate-path@2.0.0: - resolution: {integrity: sha512-NCI2kiDkyR7VeEKm27Kda/iQHyKJe1Bu0FlTbYp3CqJu+9IFe9bLyAjMxf5ZDDbEg+iMPzB5zYyUTSm8wVTKmA==} - engines: {node: '>=4'} - locate-path@3.0.0: resolution: {integrity: sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==} engines: {node: '>=6'} @@ -4470,10 +4380,6 @@ packages: resolution: {integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==} hasBin: true - loud-rejection@1.6.0: - resolution: {integrity: sha512-RPNliZOFkqFumDhvYqOaNY4Uz9oJM2K9tC6JWsJJsNdhuONW4LQHRBpb0qf4pJApVffI5N39SwzWZJuEhfd7eQ==} - engines: {node: '>=0.10.0'} - loupe@3.1.3: resolution: {integrity: sha512-kkIp7XSkP78ZxJEsSxW3712C6teJVoeHHwgo9zJ380de7IYyJ2ISlxojcH2pC5OFLewESmnRi/+XCDIEEVyoug==} @@ -4518,14 +4424,6 @@ packages: makeerror@1.0.12: resolution: {integrity: sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==} - map-obj@1.0.1: - resolution: {integrity: sha512-7N/q3lyZ+LVCp7PzuxrJr4KMbBE2hW7BT7YNia330OFxIf4d3r5zVpicP2650l7CPN6RM9zOJRl3NGpqSiw3Eg==} - engines: {node: '>=0.10.0'} - - map-obj@2.0.0: - resolution: {integrity: sha512-TzQSV2DiMYgoF5RycneKVUzIa9bQsj/B3tTgsE3dOGqlzHnGIDaC7XBE7grnA+8kZPnfqSGFe95VHc2oc0VFUQ==} - engines: {node: '>=4'} - markdown-it@14.1.0: resolution: {integrity: sha512-a54IwgWPaeBCAAsv13YgmALOF1elABB08FxO9i+r4VFk5Vl4pKokRPeX8u5TCgSsPi6ec1otfLjdOpVcgbpshg==} hasBin: true @@ -4553,10 +4451,6 @@ packages: memoize-one@5.2.1: resolution: {integrity: sha512-zYiwtZUcYyXKo/np96AGZAckk+FWWsUdJ3cHGGmld7+AhvcWmQyGCYUh1hc4Q/pkOhb65dQR/pqCyK0cOaHz4Q==} - meow@5.0.0: - resolution: {integrity: sha512-CbTqYU17ABaLefO8vCU153ZZlprKYWDljcndKKDCFcYQITzWCXZAVk4QMFZPgvzrnUQ3uItnIE/LoUOwrT15Ig==} - engines: {node: '>=6'} - merge-options@3.0.4: resolution: {integrity: sha512-2Sug1+knBjkaMsMgf1ctR1Ujx+Ayku4EdJN4Z+C2+JzoeF7A3OZ9KM2GY0CpQS51NR61LTurMJrRKPhSs3ZRTQ==} engines: {node: '>=10'} @@ -4691,10 +4585,6 @@ packages: resolution: {integrity: sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==} engines: {node: '>=16 || 14 >=14.17'} - minimist-options@3.0.2: - resolution: {integrity: sha512-FyBrT/d0d4+uiZRbqznPXqw3IpZZG3gl3wKWiX784FycUKVwBt0uLBFkQrtE4tZOrgo78nZp2jnKz3L65T5LdQ==} - engines: {node: '>= 4'} - minimist@1.2.8: resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==} @@ -4811,17 +4701,10 @@ packages: engines: {node: '>=6'} hasBin: true - normalize-package-data@2.5.0: - resolution: {integrity: sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==} - normalize-path@3.0.0: resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} engines: {node: '>=0.10.0'} - normalize-url@6.1.0: - resolution: {integrity: sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A==} - engines: {node: '>=10'} - npm-run-path@4.0.1: resolution: {integrity: sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==} engines: {node: '>=8'} @@ -4946,10 +4829,6 @@ packages: resolution: {integrity: sha512-Q6Bekk5wpzW5qIyUP4gdMEujObYstZl6DMMOSenwBvV0BlE5LkDwkjs5yHbZmdCEq2o4RJx4tE1vwxFVf2FG1w==} engines: {node: '>=16.17'} - p-limit@1.3.0: - resolution: {integrity: sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==} - engines: {node: '>=4'} - p-limit@2.3.0: resolution: {integrity: sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==} engines: {node: '>=6'} @@ -4958,10 +4837,6 @@ packages: resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==} engines: {node: '>=10'} - p-locate@2.0.0: - resolution: {integrity: sha512-nQja7m7gSKuewoVRen45CtVfODR3crN3goVQ0DDZ9N3yHxgpkuBhZqsaiotSQRrADUrne346peY7kT3TSACykg==} - engines: {node: '>=4'} - p-locate@3.0.0: resolution: {integrity: sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==} engines: {node: '>=6'} @@ -4986,10 +4861,6 @@ packages: resolution: {integrity: sha512-MyIV3ZA/PmyBN/ud8vV9XzwTrNtR4jFrObymZYnZqMmW0zA8Z17vnT0rBgFE/TlohB+YCHqXMgZzb3Csp49vqg==} engines: {node: '>=14.16'} - p-try@1.0.0: - resolution: {integrity: sha512-U1etNYuMJoIz3ZXSrrySFjsXQTWOx2/jdi86L+2pRvph/qMKL6sbcCYdH23fqsbm8TH2Gn0OybpT4eSFlCVHww==} - engines: {node: '>=4'} - p-try@2.2.0: resolution: {integrity: sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==} engines: {node: '>=6'} @@ -4998,8 +4869,8 @@ packages: resolution: {integrity: sha512-lwx6u1CotQYPVju77R+D0vFomni/AqRfqLmqQ8hekklqZ6gAY9rONh7lBQ0uxWMkC2AuX9b2DVAl8To0NyP1JA==} engines: {node: '>=12'} - pac-proxy-agent@7.1.0: - resolution: {integrity: sha512-Z5FnLVVZSnX7WjBg0mhDtydeRZ1xMcATZThjySQUHqr+0ksP8kqaw23fNKkaaN/Z8gwLUs/W7xdl0I75eP2Xyw==} + pac-proxy-agent@7.2.0: + resolution: {integrity: sha512-TEB8ESquiLMc0lV8vcd5Ql/JAKAoyzHFXaStwjkzpOpC5Yv+pIzLfHvjTSdf3vpa2bMiUQrg9i6276yn8666aA==} engines: {node: '>= 14'} pac-resolver@7.0.1: @@ -5032,15 +4903,9 @@ packages: resolution: {integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==} engines: {node: '>=8'} - parse-path@4.0.4: - resolution: {integrity: sha512-Z2lWUis7jlmXC1jeOG9giRO2+FsuyNipeQ43HAjqAZjwSe3SEf+q/84FGPHoso3kyntbxa4c4i77t3m6fGf8cw==} - parse-path@7.0.1: resolution: {integrity: sha512-6ReLMptznuuOEzLoGEa+I1oWRSj2Zna5jLWC+l6zlfAI4dbbSaIES29ThzuPkbhNahT65dWzfoZEO6cfJw2Ksg==} - parse-url@5.0.8: - resolution: {integrity: sha512-KFg5QvyiOKJGQSwUT7c5A4ELs0TJ33gmx/NBjK0FvZUD6aonFuXHUVa3SIa2XpbYVkYU8VlDrD3oCbX1ufy0zg==} - parse-url@8.1.0: resolution: {integrity: sha512-xDvOoLU5XRrcOZvnI6b8zA6n9O9ejNk/GExuz1yBuWUGn9KA97GI6HTs6u02wKara1CeVmZhH+0TZFdWScR89w==} @@ -5086,10 +4951,6 @@ packages: resolution: {integrity: sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==} engines: {node: '>=16 || 14 >=14.18'} - path-type@3.0.0: - resolution: {integrity: sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==} - engines: {node: '>=4'} - path-type@4.0.0: resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==} engines: {node: '>=8'} @@ -5120,10 +4981,6 @@ packages: resolution: {integrity: sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==} engines: {node: '>=12'} - pify@3.0.0: - resolution: {integrity: sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==} - engines: {node: '>=4'} - pify@4.0.1: resolution: {integrity: sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==} engines: {node: '>=6'} @@ -5157,8 +5014,8 @@ packages: resolution: {integrity: sha512-/+5VFTchJDoVj3bhoqi6UeymcD00DAwb1nJwamzPvHEszJ4FpF6SNNbUbOS8yI56qHzdV8eK0qEfOSiodkTdxg==} engines: {node: '>= 0.4'} - postcss@8.5.2: - resolution: {integrity: sha512-MjOadfU3Ys9KYoX0AdkBlFEF1Vx37uCCeN4ZHnmwm9FfpbsGWMZeBLMmmpY+6Ocqod7mkdZ0DT31OlbsFrLlkA==} + postcss@8.5.3: + resolution: {integrity: sha512-dle9A3yYxlBSrt8Fu+IpjGT8SY8hN0mlaA6GY8t0P5PjIOZemULz/E2Bnm/2dcUOena75OTNkHI76uZBNUUq3A==} engines: {node: ^10 || ^12 || >=14} pprof@4.0.0: @@ -5200,8 +5057,8 @@ packages: promise@8.3.0: resolution: {integrity: sha512-rZPNPKTOYVNEEKFaq1HqTgOwZD+4/YHS5ukLzQCypkj+OkYx7iv0mA91lJlpPPZ8vMau3IIGj5Qlwrx+8iiSmg==} - property-information@6.5.0: - resolution: {integrity: sha512-PgTgs/BlvHxOu8QuEN7wi5A0OmXaBcHpmCSTehcs6Uuu9IkDIEo13Hy7n898RHfrQ49vKCoGeWZSaAK01nwVig==} + property-information@7.0.0: + resolution: {integrity: sha512-7D/qOz/+Y4X/rzSB6jKxKUsQnphO046ei8qxG59mtM3RG3DHgTK81HrxrmoDVINJb8NKT5ZsRbwHvQ6B68Iyhg==} proto-list@1.2.4: resolution: {integrity: sha512-vtK/94akxsTMhe0/cbfpR+syPuszcuwhqVjJq26CuNDgFGj682oRBXOP5MJpv2r7JtE8MsiepGIqvvOTBwn2vA==} @@ -5214,9 +5071,6 @@ packages: resolution: {integrity: sha512-mRUWCc3KUU4w1jU8sGxICXH/gNS94DvI1gxqDvBzhj1JpcsimQkYiOJfwsPUykUI5ZaspFbSgmBLER8IrQ3tqw==} engines: {node: '>=12.0.0'} - protocols@1.4.8: - resolution: {integrity: sha512-IgjKyaUSjsROSO8/D49Ab7hP8mJgTYcqApOqdPhLoPxAplXmkp+zRvsrSQjFn5by0rhm4VH0GAUELIPpx7B1yg==} - protocols@2.0.2: resolution: {integrity: sha512-hHVTzba3wboROl0/aWRRG9dMytgH6ow//STBZh43l/wQgmMhYhOFi0EHWAPtoCz9IAUymsyP0TSBHkhgMEGNnQ==} @@ -5262,10 +5116,6 @@ packages: resolution: {integrity: sha512-YWWTjgABSKcvs/nWBi9PycY/JiPJqOD4JA6o9Sej2AtvSGarXxKC3OQSk4pAarbdQlKAh5D4FCQkJNkW+GAn3w==} engines: {node: '>=0.6'} - query-string@6.14.1: - resolution: {integrity: sha512-XDxAeVmpfu1/6IjyT/gXHOl+S0vQ9owggJ30hhWKdHAsNPOcasn5o9BW0eejZqL2e4vMjhAxoW3jVHcD6mbcYw==} - engines: {node: '>=6'} - querystring-es3@0.2.1: resolution: {integrity: sha512-773xhDQnZBMFobEiztv8LIl70ch5MSF/jUQVlhwFyBILqq96anmoctVIYz+ZRp0qbCKATTn6ev02M3r7Ga5vqA==} engines: {node: '>=0.4.x'} @@ -5276,10 +5126,6 @@ packages: queue@6.0.2: resolution: {integrity: sha512-iHZWu+q3IdFZFX36ro/lKBkSvfkztY5Y7HMiPlOUjhupPcG2JMfst2KKEpu5XndviX/3UhFbRngUPNKtgvtZiA==} - quick-lru@1.1.0: - resolution: {integrity: sha512-tRS7sTgyxMXtLum8L65daJnHUhfDUgboRdcWW2bR9vBfrj2+O5HSMbQOJfJJjIVSPFqbBCF37FpwWXGitDc5tA==} - engines: {node: '>=4'} - race-event@1.3.0: resolution: {integrity: sha512-kaLm7axfOnahIqD3jQ4l1e471FIFcEGebXEnhxyLscuUzV8C94xVHtWEqDDXxll7+yu/6lW0w1Ff4HbtvHvOHg==} @@ -5311,13 +5157,13 @@ packages: peerDependencies: react-native: '>=0.60.0' - react-native@0.77.1: - resolution: {integrity: sha512-g2OMtsQqhgOuC4BqFyrcv0UsmbFcLOwfVRl/XAEHZK0p8paJubGIF3rAHN4Qh0GqGLWZGt7gJ7ha2yOmCFORoA==} + react-native@0.78.0: + resolution: {integrity: sha512-3PO4tNvCN6BdAKcoY70v1sLfxYCmDR4KS1VTY+kIBKy5Qznp27QNxL7zBQjvS6Jp91gc8N82QbysQrfBlwg9gQ==} engines: {node: '>=18'} hasBin: true peerDependencies: - '@types/react': ^18.2.6 - react: ^18.2.0 + '@types/react': ^19.0.0 + react: ^19.0.0 peerDependenciesMeta: '@types/react': optional: true @@ -5326,18 +5172,10 @@ packages: resolution: {integrity: sha512-jCvmsr+1IUSMUyzOkRcvnVbX3ZYC6g9TDrDbFuFmRDq7PD4yaGbLKNQL6k2jnArV8hjYxh7hVhAZB6s9HDGpZA==} engines: {node: '>=0.10.0'} - react@18.3.1: - resolution: {integrity: sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ==} + react@19.0.0: + resolution: {integrity: sha512-V8AVnmPIICiWpGfm6GLzCR/W5FXLchHop40W4nXBmdlEceh16rCN8O8LNWm5bh5XUX91fh7KpA+W0TgMKmgTpQ==} engines: {node: '>=0.10.0'} - read-pkg-up@3.0.0: - resolution: {integrity: sha512-YFzFrVvpC6frF1sz8psoHDBGF7fLPc+llq/8NB43oagqWkx8ar5zYtsTORtOjw9W2RHLpWP+zTWwBvf1bCmcSw==} - engines: {node: '>=4'} - - read-pkg@3.0.0: - resolution: {integrity: sha512-BLq/cCO9two+lBgiTYNqD6GdtK8s4NpaWrl6/rCO9w0TUS8oJl7cmToOZfRYllKTISY6nt1U7jQ53brmKqY6BA==} - engines: {node: '>=4'} - readable-stream@2.3.8: resolution: {integrity: sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==} @@ -5356,10 +5194,6 @@ packages: resolution: {integrity: sha512-HFM8rkZ+i3zrV+4LQjwQ0W+ez98pApMGM3HUrN04j3CqzPOzl9nmP15Y8YXNm8QHGv/eacOVEjqhmWpkRV0NAw==} engines: {node: '>= 0.10'} - redent@2.0.0: - resolution: {integrity: sha512-XNwrTx77JQCEMXTeb8movBKuK75MgH0RZkujNuDKCezemx/voapl9i2gCSi8WWm8+ox5ycJi1gxF22fR7c0Ciw==} - engines: {node: '>=4'} - reflect-metadata@0.2.2: resolution: {integrity: sha512-urBwgfrvVP/eAyXx4hluJivBKzuEbSQs9rKWCrCkbSxNv8mxPcUZKeuoF3Uy4mJl3Lwprp6yy5/39VWigZ4K6Q==} @@ -5515,8 +5349,8 @@ packages: safer-buffer@2.1.2: resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} - scheduler@0.24.0-canary-efb381bbf-20230505: - resolution: {integrity: sha512-ABvovCDe/k9IluqSh4/ISoq8tIJnW8euVAWYt5j/bg6dRnqwQwiGO1F/V4AyK96NGF/FB04FhOUDuWj8IKfABA==} + scheduler@0.25.0: + resolution: {integrity: sha512-xFVuu11jh+xcO7JOAGJNOXld8/TcEHK/4CituBUeUb5hqxJLj9YuemAEuvm9gQ/+pgXYfbQuqAkiYu+u7YEsNA==} selfsigned@2.4.1: resolution: {integrity: sha512-th5B4L2U+eGLq1TVh7zNRGBapioSORUeymIydxgFpwww9d2qyKvtuPU2jJuHvYAwwqi2Y596QBL3eEqcPEYL8Q==} @@ -5675,22 +5509,6 @@ packages: space-separated-tokens@2.0.2: resolution: {integrity: sha512-PEGlAwrG8yXGXRjW32fGbg66JAlOAwbObuqVoJpv/mRgoWDQfgH1wDPvtzWyUSNAXBGSk8h755YDbbcEy3SH2Q==} - spdx-correct@3.2.0: - resolution: {integrity: sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==} - - spdx-exceptions@2.5.0: - resolution: {integrity: sha512-PiU42r+xO4UbUS1buo3LPJkjlO7430Xn5SVAhdpzzsPHsjbYVflnnFdATgabnLude+Cqu25p6N+g2lw/PFsa4w==} - - spdx-expression-parse@3.0.1: - resolution: {integrity: sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==} - - spdx-license-ids@3.0.21: - resolution: {integrity: sha512-Bvg/8F5XephndSK3JffaRqdT+gyhfqIPwDHpX80tJrF8QQRYMo8sNMeaZ2Dp5+jhwKnUmIOyFFQfHRkjJm5nXg==} - - split-on-first@1.1.0: - resolution: {integrity: sha512-43ZssAJaMusuKWL8sKUBQXHWOpq8d6CfN/u1p4gUzfJkM05C8rxTmYrkIPTXapZpORA6LkkzcUulJ8FqA7Uudw==} - engines: {node: '>=6'} - split@1.0.1: resolution: {integrity: sha512-mTyOoPbrivtXnwnIxZRFYRrPNtEFKlpB2fvjSnCQUiAA6qAZzqwna5envK4uk6OIeP17CsdF3rSBGYVBsU0Tkg==} @@ -5735,10 +5553,6 @@ packages: stream-http@3.2.0: resolution: {integrity: sha512-Oq1bLqisTyK3TSCXpPbT4sdeYNdmyZJv1LxpEm2vu1ZhK89kSE5YXwZc3cWk0MagGaKriBh9mCFbVGtO+vY29A==} - strict-uri-encode@2.0.0: - resolution: {integrity: sha512-QwiXZgpRcKkhTj2Scnn++4PKtWsH0kpzZ62L2R6c/LUVYv7hVnZqcg2+sMuT6R7Jusu1vviK/MFsu6kNJfWlEQ==} - engines: {node: '>=4'} - string-width@4.2.3: resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} engines: {node: '>=8'} @@ -5792,10 +5606,6 @@ packages: resolution: {integrity: sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==} engines: {node: '>=12'} - strip-indent@2.0.0: - resolution: {integrity: sha512-RsSNPLpq6YUL7QYy44RnPVTn/lcVZtb48Uof3X5JLbF4zD/Gs7ZFDv2HWol+leoQN2mT86LAzSshGfkTlSOpsA==} - engines: {node: '>=4'} - strip-json-comments@2.0.1: resolution: {integrity: sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==} engines: {node: '>=0.10.0'} @@ -5807,11 +5617,6 @@ packages: stubborn-fs@1.2.5: resolution: {integrity: sha512-H2N9c26eXjzL/S/K+i/RHHcFanE74dptvvjM8iwzwbVcWY/zjBbgRqF3K0DY4+OD+uTTASTBvDoxPDaPN02D7g==} - stun@2.1.0: - resolution: {integrity: sha512-p+kY8/qzyZ9Sx+ZvlYd71hKcUDkbYhRDqjGKHrWvOdrc89vrpa0B6uHkWjYklWNQr3nQWKWHkYKDEgGBB2fiPg==} - engines: {node: '>=8.3'} - hasBin: true - supports-color@7.2.0: resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} engines: {node: '>=8'} @@ -5918,10 +5723,6 @@ packages: trim-lines@3.0.1: resolution: {integrity: sha512-kRj8B+YHZCc9kQYdWfJB2/oUl9rA99qbowYYBtr4ui4mZyAQ2JpvVBd/6U2YloATfqBhBTSMhTpgBHtU0Mf3Rg==} - trim-newlines@2.0.0: - resolution: {integrity: sha512-MTBWv3jhVjTU7XR3IQHllbiJs8sc75a80OEhB6or/q7pLTWgQ0bMGQXXYQSrSuXe6WiKWDZ5txXY5P59a/coVA==} - engines: {node: '>=4'} - ts-api-utils@1.4.3: resolution: {integrity: sha512-i3eMG77UTMD0hZhgRS562pv83RC6ukSAC2GMNWc+9dieh/+jDM5u5YG+NHX6VNDRHQcHwmsTHctP9LhbC3WxVw==} engines: {node: '>=16'} @@ -5992,10 +5793,6 @@ packages: tunnel-agent@0.6.0: resolution: {integrity: sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==} - turbo-crc32@1.0.1: - resolution: {integrity: sha512-8yyRd1ZdNp+AQLGqi3lTaA2k81JjlIZOyFQEsi7GQWBgirnQOxjqVtDEbYHM2Z4yFdJ5AQw0fxBLLnDCl6RXoQ==} - engines: {node: '>=6'} - type-check@0.4.0: resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==} engines: {node: '>= 0.8.0'} @@ -6112,10 +5909,6 @@ packages: universal-user-agent@6.0.1: resolution: {integrity: sha512-yCzhz6FN2wU1NiiQRogkTQszlQSlpWaw8SvVegAc+bDxbzHgh1vX8uIe8OYyMH6DwH+sdTJsgMl36+mSMdRJIQ==} - universalify@0.1.2: - resolution: {integrity: sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==} - engines: {node: '>= 4.0.0'} - unpipe@1.0.0: resolution: {integrity: sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==} engines: {node: '>= 0.8'} @@ -6157,9 +5950,6 @@ packages: v8-compile-cache-lib@3.0.1: resolution: {integrity: sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==} - validate-npm-package-license@3.0.4: - resolution: {integrity: sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==} - validate-peer-dependencies@1.2.0: resolution: {integrity: sha512-nd2HUpKc6RWblPZQ2GDuI65sxJ2n/UqZwSBVtj64xlWjMx0m7ZB2m9b2JS3v1f+n9VWH/dd1CMhkHfP6pIdckA==} @@ -6187,8 +5977,8 @@ packages: vite: optional: true - vite@6.1.0: - resolution: {integrity: sha512-RjjMipCKVoR4hVfPY6GQTgveinjNuyLw+qruksLDvA5ktI1150VmcMBKmQaEWJhg/j6Uaf6dNCNA0AfdzUb/hQ==} + vite@6.1.1: + resolution: {integrity: sha512-4GgM54XrwRfrOp297aIYspIti66k56v16ZnqHvrIM7mG+HjDlAwS7p+Srr7J6fGvEdOJ5JcQ/D9T7HhtdXDTzA==} engines: {node: ^18.0.0 || ^20.0.0 || >=22.0.0} hasBin: true peerDependencies: @@ -6428,9 +6218,6 @@ packages: engines: {node: '>= 14'} hasBin: true - yargs-parser@10.1.0: - resolution: {integrity: sha512-VCIyR1wJoEBZUqk5PA+oOBF6ypbwh5aNB3I50guxAL/quggdfs4TtNHQrSazFA3fYZ+tEqfs0zIGlv0c/rgjbQ==} - yargs-parser@21.1.1: resolution: {integrity: sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==} engines: {node: '>=12'} @@ -7314,9 +7101,9 @@ snapshots: dependencies: '@libp2p/crypto': 5.0.11 '@libp2p/interface': 2.5.0 - '@libp2p/interface-internal': 2.3.0 + '@libp2p/interface-internal': 2.3.1 '@libp2p/peer-id': 5.0.12 - '@libp2p/pubsub': 10.0.18 + '@libp2p/pubsub': 10.1.0 '@multiformats/multiaddr': 12.3.5 denque: 2.1.0 it-length-prefixed: 9.1.1 @@ -7527,10 +7314,6 @@ snapshots: transitivePeerDependencies: - supports-color - '@eslint/core@0.10.0': - dependencies: - '@types/json-schema': 7.0.15 - '@eslint/core@0.11.0': dependencies: '@types/json-schema': 7.0.15 @@ -7553,9 +7336,9 @@ snapshots: '@eslint/object-schema@2.1.6': {} - '@eslint/plugin-kit@0.2.5': + '@eslint/plugin-kit@0.2.6': dependencies: - '@eslint/core': 0.10.0 + '@eslint/core': 0.11.0 levn: 0.4.1 '@grpc/grpc-js@1.12.6': @@ -7702,10 +7485,10 @@ snapshots: '@leichtgewicht/ip-codec@2.0.5': {} - '@libp2p/autonat@2.0.19': + '@libp2p/autonat@2.0.20': dependencies: '@libp2p/interface': 2.5.0 - '@libp2p/interface-internal': 2.3.0 + '@libp2p/interface-internal': 2.3.1 '@libp2p/peer-collections': 6.0.17 '@libp2p/peer-id': 5.0.12 '@libp2p/utils': 6.5.1 @@ -7716,19 +7499,19 @@ snapshots: protons-runtime: 5.5.0 uint8arraylist: 2.4.8 - '@libp2p/bootstrap@11.0.22': + '@libp2p/bootstrap@11.0.23': dependencies: '@libp2p/interface': 2.5.0 - '@libp2p/interface-internal': 2.3.0 + '@libp2p/interface-internal': 2.3.1 '@libp2p/peer-id': 5.0.12 '@multiformats/mafmt': 12.1.6 '@multiformats/multiaddr': 12.3.5 - '@libp2p/circuit-relay-v2@3.1.12': + '@libp2p/circuit-relay-v2@3.1.13': dependencies: '@libp2p/crypto': 5.0.11 '@libp2p/interface': 2.5.0 - '@libp2p/interface-internal': 2.3.0 + '@libp2p/interface-internal': 2.3.1 '@libp2p/peer-collections': 6.0.17 '@libp2p/peer-id': 5.0.12 '@libp2p/peer-record': 8.0.17 @@ -7757,10 +7540,10 @@ snapshots: uint8arraylist: 2.4.8 uint8arrays: 5.1.0 - '@libp2p/dcutr@2.0.18': + '@libp2p/dcutr@2.0.19': dependencies: '@libp2p/interface': 2.5.0 - '@libp2p/interface-internal': 2.3.0 + '@libp2p/interface-internal': 2.3.1 '@libp2p/utils': 6.5.1 '@multiformats/multiaddr': 12.3.5 '@multiformats/multiaddr-matcher': 1.6.0 @@ -7769,10 +7552,10 @@ snapshots: protons-runtime: 5.5.0 uint8arraylist: 2.4.8 - '@libp2p/devtools-metrics@1.2.3': + '@libp2p/devtools-metrics@1.2.4': dependencies: '@libp2p/interface': 2.5.0 - '@libp2p/interface-internal': 2.3.0 + '@libp2p/interface-internal': 2.3.1 '@libp2p/logger': 5.1.8 '@libp2p/peer-id': 5.0.12 '@libp2p/simple-metrics': 1.3.2 @@ -7784,11 +7567,11 @@ snapshots: multiformats: 13.3.2 progress-events: 1.0.1 - '@libp2p/identify@3.0.18': + '@libp2p/identify@3.0.19': dependencies: '@libp2p/crypto': 5.0.11 '@libp2p/interface': 2.5.0 - '@libp2p/interface-internal': 2.3.0 + '@libp2p/interface-internal': 2.3.1 '@libp2p/peer-id': 5.0.12 '@libp2p/peer-record': 8.0.17 '@libp2p/utils': 6.5.1 @@ -7801,7 +7584,7 @@ snapshots: uint8arraylist: 2.4.8 uint8arrays: 5.1.0 - '@libp2p/interface-internal@2.3.0': + '@libp2p/interface-internal@2.3.1': dependencies: '@libp2p/interface': 2.5.0 '@libp2p/peer-collections': 6.0.17 @@ -7825,10 +7608,10 @@ snapshots: multiformats: 13.3.2 weald: 1.0.4 - '@libp2p/multistream-select@6.0.13': + '@libp2p/multistream-select@6.0.14': dependencies: '@libp2p/interface': 2.5.0 - it-length-prefixed: 9.1.1 + it-length-prefixed: 10.0.1 it-length-prefixed-stream: 1.2.0 it-stream-types: 2.0.2 p-defer: 4.0.1 @@ -7891,7 +7674,7 @@ snapshots: dependencies: '@libp2p/crypto': 5.0.11 '@libp2p/interface': 2.5.0 - '@libp2p/interface-internal': 2.3.0 + '@libp2p/interface-internal': 2.3.1 '@multiformats/multiaddr': 12.3.5 it-byte-stream: 1.1.0 uint8arrays: 5.1.0 @@ -7900,22 +7683,22 @@ snapshots: dependencies: '@libp2p/crypto': 5.0.11 '@libp2p/interface': 2.5.0 - '@libp2p/interface-internal': 2.3.0 + '@libp2p/interface-internal': 2.3.1 '@libp2p/peer-id': 5.0.12 '@multiformats/multiaddr': 12.3.5 protons-runtime: 5.5.0 uint8arraylist: 2.4.8 uint8arrays: 5.1.0 - '@libp2p/pubsub@10.0.18': + '@libp2p/pubsub@10.1.0': dependencies: '@libp2p/crypto': 5.0.11 '@libp2p/interface': 2.5.0 - '@libp2p/interface-internal': 2.3.0 + '@libp2p/interface-internal': 2.3.1 '@libp2p/peer-collections': 6.0.17 '@libp2p/peer-id': 5.0.12 '@libp2p/utils': 6.5.1 - it-length-prefixed: 9.1.1 + it-length-prefixed: 10.0.1 it-pipe: 3.0.1 it-pushable: 3.2.3 multiformats: 13.3.2 @@ -7955,13 +7738,13 @@ snapshots: uint8arraylist: 2.4.8 uint8arrays: 5.1.0 - '@libp2p/webrtc@5.1.0(react-native@0.77.1(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(react@18.3.1))': + '@libp2p/webrtc@5.1.1(react-native@0.78.0(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(react@19.0.0))': dependencies: '@chainsafe/is-ip': 2.1.0 '@chainsafe/libp2p-noise': 16.0.1 '@ipshipyard/node-datachannel': 0.26.4 '@libp2p/interface': 2.5.0 - '@libp2p/interface-internal': 2.3.0 + '@libp2p/interface-internal': 2.3.1 '@libp2p/peer-id': 5.0.12 '@libp2p/utils': 6.5.1 '@multiformats/multiaddr': 12.3.5 @@ -7971,21 +7754,19 @@ snapshots: any-signal: 4.1.1 detect-browser: 5.3.0 get-port: 7.1.0 - it-length-prefixed: 9.1.1 + it-length-prefixed: 10.0.1 it-protobuf-stream: 1.1.5 it-pushable: 3.2.3 it-stream-types: 2.0.2 multiformats: 13.3.2 p-defer: 4.0.1 - p-event: 6.0.1 p-timeout: 6.1.4 p-wait-for: 5.0.2 progress-events: 1.0.1 protons-runtime: 5.5.0 race-event: 1.3.0 race-signal: 1.1.0 - react-native-webrtc: 124.0.5(react-native@0.77.1(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(react@18.3.1)) - stun: 2.1.0 + react-native-webrtc: 124.0.5(react-native@0.78.0(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(react@19.0.0)) uint8-varint: 2.0.4 uint8arraylist: 2.4.8 uint8arrays: 5.1.0 @@ -8011,7 +7792,7 @@ snapshots: - bufferutil - utf-8-validate - '@libp2p/webtransport@5.0.27': + '@libp2p/webtransport@5.0.28': dependencies: '@chainsafe/libp2p-noise': 16.0.1 '@libp2p/interface': 2.5.0 @@ -8393,17 +8174,17 @@ snapshots: '@protobufjs/utf8@1.1.0': {} - '@react-native/assets-registry@0.77.1': {} + '@react-native/assets-registry@0.78.0': {} - '@react-native/babel-plugin-codegen@0.77.1(@babel/preset-env@7.26.9(@babel/core@7.26.9))': + '@react-native/babel-plugin-codegen@0.78.0(@babel/preset-env@7.26.9(@babel/core@7.26.9))': dependencies: '@babel/traverse': 7.26.9 - '@react-native/codegen': 0.77.1(@babel/preset-env@7.26.9(@babel/core@7.26.9)) + '@react-native/codegen': 0.78.0(@babel/preset-env@7.26.9(@babel/core@7.26.9)) transitivePeerDependencies: - '@babel/preset-env' - supports-color - '@react-native/babel-preset@0.77.1(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))': + '@react-native/babel-preset@0.78.0(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))': dependencies: '@babel/core': 7.26.9 '@babel/plugin-proposal-export-default-from': 7.25.9(@babel/core@7.26.9) @@ -8446,7 +8227,7 @@ snapshots: '@babel/plugin-transform-typescript': 7.26.8(@babel/core@7.26.9) '@babel/plugin-transform-unicode-regex': 7.25.9(@babel/core@7.26.9) '@babel/template': 7.26.9 - '@react-native/babel-plugin-codegen': 0.77.1(@babel/preset-env@7.26.9(@babel/core@7.26.9)) + '@react-native/babel-plugin-codegen': 0.78.0(@babel/preset-env@7.26.9(@babel/core@7.26.9)) babel-plugin-syntax-hermes-parser: 0.25.1 babel-plugin-transform-flow-enums: 0.0.2(@babel/core@7.26.9) react-refresh: 0.14.2 @@ -8454,7 +8235,7 @@ snapshots: - '@babel/preset-env' - supports-color - '@react-native/codegen@0.77.1(@babel/preset-env@7.26.9(@babel/core@7.26.9))': + '@react-native/codegen@0.78.0(@babel/preset-env@7.26.9(@babel/core@7.26.9))': dependencies: '@babel/parser': 7.26.9 '@babel/preset-env': 7.26.9(@babel/core@7.26.9) @@ -8467,10 +8248,10 @@ snapshots: transitivePeerDependencies: - supports-color - '@react-native/community-cli-plugin@0.77.1(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))': + '@react-native/community-cli-plugin@0.78.0(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))': dependencies: - '@react-native/dev-middleware': 0.77.1 - '@react-native/metro-babel-transformer': 0.77.1(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9)) + '@react-native/dev-middleware': 0.78.0 + '@react-native/metro-babel-transformer': 0.78.0(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9)) chalk: 4.1.2 debug: 2.6.9 invariant: 2.2.4 @@ -8486,12 +8267,12 @@ snapshots: - supports-color - utf-8-validate - '@react-native/debugger-frontend@0.77.1': {} + '@react-native/debugger-frontend@0.78.0': {} - '@react-native/dev-middleware@0.77.1': + '@react-native/dev-middleware@0.78.0': dependencies: '@isaacs/ttlcache': 1.4.1 - '@react-native/debugger-frontend': 0.77.1 + '@react-native/debugger-frontend': 0.78.0 chrome-launcher: 0.15.2 chromium-edge-launcher: 0.2.0 connect: 3.7.0 @@ -8507,28 +8288,28 @@ snapshots: - supports-color - utf-8-validate - '@react-native/gradle-plugin@0.77.1': {} + '@react-native/gradle-plugin@0.78.0': {} - '@react-native/js-polyfills@0.77.1': {} + '@react-native/js-polyfills@0.78.0': {} - '@react-native/metro-babel-transformer@0.77.1(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))': + '@react-native/metro-babel-transformer@0.78.0(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))': dependencies: '@babel/core': 7.26.9 - '@react-native/babel-preset': 0.77.1(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9)) + '@react-native/babel-preset': 0.78.0(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9)) hermes-parser: 0.25.1 nullthrows: 1.1.1 transitivePeerDependencies: - '@babel/preset-env' - supports-color - '@react-native/normalize-colors@0.77.1': {} + '@react-native/normalize-colors@0.78.0': {} - '@react-native/virtualized-lists@0.77.1(react-native@0.77.1(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(react@18.3.1))(react@18.3.1)': + '@react-native/virtualized-lists@0.78.0(react-native@0.78.0(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(react@19.0.0))(react@19.0.0)': dependencies: invariant: 2.2.4 nullthrows: 1.1.1 - react: 18.3.1 - react-native: 0.77.1(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(react@18.3.1) + react: 19.0.0 + react-native: 0.78.0(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(react@19.0.0) '@release-it-plugins/workspaces@4.2.0(release-it@17.11.0(typescript@5.7.3))': dependencies: @@ -8630,7 +8411,7 @@ snapshots: '@shikijs/types': 1.29.2 '@shikijs/vscode-textmate': 10.0.2 '@types/hast': 3.0.4 - hast-util-to-html: 9.0.4 + hast-util-to-html: 9.0.5 '@shikijs/engine-javascript@1.29.2': dependencies: @@ -8916,13 +8697,13 @@ snapshots: chai: 5.2.0 tinyrainbow: 2.0.0 - '@vitest/mocker@3.0.6(vite@6.1.0(@types/node@22.13.4)(terser@5.39.0)(tsx@4.19.1)(yaml@2.7.0))': + '@vitest/mocker@3.0.6(vite@6.1.1(@types/node@22.13.4)(terser@5.39.0)(tsx@4.19.1)(yaml@2.7.0))': dependencies: '@vitest/spy': 3.0.6 estree-walker: 3.0.3 magic-string: 0.30.17 optionalDependencies: - vite: 6.1.0(@types/node@22.13.4)(terser@5.39.0)(tsx@4.19.1)(yaml@2.7.0) + vite: 6.1.1(@types/node@22.13.4)(terser@5.39.0)(tsx@4.19.1)(yaml@2.7.0) '@vitest/pretty-format@3.0.6': dependencies: @@ -9034,8 +8815,6 @@ snapshots: call-bound: 1.0.3 is-array-buffer: 3.0.5 - array-find-index@1.0.2: {} - array-includes@3.1.8: dependencies: call-bind: 1.0.8 @@ -9080,8 +8859,6 @@ snapshots: get-intrinsic: 1.2.7 is-array-buffer: 3.0.5 - arrify@1.0.1: {} - asap@2.0.6: {} asn1.js@4.10.1: @@ -9246,11 +9023,6 @@ snapshots: lodash: 4.17.21 platform: 1.3.6 - binary-data@0.6.0: - dependencies: - generate-function: 2.3.1 - is-plain-object: 2.0.4 - binaryen@116.0.0-nightly.20240114: {} bindings@1.5.0: @@ -9361,10 +9133,6 @@ snapshots: buffer-xor@1.0.3: {} - buffer-xor@2.0.2: - dependencies: - safe-buffer: 5.2.1 - buffer@5.7.1: dependencies: base64-js: 1.5.1 @@ -9412,14 +9180,6 @@ snapshots: callsites@3.1.0: {} - camelcase-keys@4.2.0: - dependencies: - camelcase: 4.1.0 - map-obj: 2.0.0 - quick-lru: 1.1.0 - - camelcase@4.1.0: {} - camelcase@5.3.1: {} camelcase@6.3.0: {} @@ -9636,10 +9396,6 @@ snapshots: randombytes: 2.1.0 randomfill: 1.0.4 - currently-unhandled@0.4.1: - dependencies: - array-find-index: 1.0.2 - data-uri-to-buffer@6.0.2: {} data-view-buffer@1.0.2: @@ -9690,15 +9446,6 @@ snapshots: dependencies: ms: 2.1.3 - decamelize-keys@1.1.1: - dependencies: - decamelize: 1.2.0 - map-obj: 1.0.1 - - decamelize@1.2.0: {} - - decode-uri-component@0.2.2: {} - decompress-response@6.0.0: dependencies: mimic-response: 3.1.0 @@ -10109,7 +9856,7 @@ snapshots: '@eslint/core': 0.11.0 '@eslint/eslintrc': 3.2.0 '@eslint/js': 9.20.0 - '@eslint/plugin-kit': 0.2.5 + '@eslint/plugin-kit': 0.2.6 '@humanfs/node': 0.16.6 '@humanwhocodes/module-importer': 1.0.1 '@humanwhocodes/retry': 0.4.1 @@ -10255,8 +10002,6 @@ snapshots: dependencies: to-regex-range: 5.0.1 - filter-obj@1.1.0: {} - finalhandler@1.1.2: dependencies: debug: 2.6.9 @@ -10275,10 +10020,6 @@ snapshots: make-dir: 2.1.0 pkg-dir: 3.0.0 - find-up@2.1.0: - dependencies: - locate-path: 2.0.0 - find-up@3.0.0: dependencies: locate-path: 3.0.0 @@ -10304,7 +10045,7 @@ snapshots: flow-enums-runtime@0.0.6: {} - flow-parser@0.261.1: {} + flow-parser@0.261.2: {} for-each@0.3.5: dependencies: @@ -10356,10 +10097,6 @@ snapshots: strip-ansi: 6.0.1 wide-align: 1.1.5 - generate-function@2.3.1: - dependencies: - is-property: 1.0.2 - gensync@1.0.0-beta.2: {} get-caller-file@2.0.5: {} @@ -10528,7 +10265,7 @@ snapshots: dependencies: function-bind: 1.1.2 - hast-util-to-html@9.0.4: + hast-util-to-html@9.0.5: dependencies: '@types/hast': 3.0.4 '@types/unist': 3.0.3 @@ -10537,7 +10274,7 @@ snapshots: hast-util-whitespace: 3.0.0 html-void-elements: 3.0.0 mdast-util-to-hast: 13.2.0 - property-information: 6.5.0 + property-information: 7.0.0 space-separated-tokens: 2.0.2 stringify-entities: 4.0.4 zwitch: 2.0.4 @@ -10558,8 +10295,6 @@ snapshots: minimalistic-assert: 1.0.1 minimalistic-crypto-utils: 1.0.1 - hosted-git-info@2.8.9: {} - html-escaper@2.0.2: {} html-void-elements@3.0.0: {} @@ -10623,8 +10358,6 @@ snapshots: imurmurhash@0.1.4: {} - indent-string@3.2.0: {} - inflight@1.0.6: dependencies: once: 1.4.0 @@ -10675,10 +10408,6 @@ snapshots: jsbn: 1.1.0 sprintf-js: 1.1.3 - ip2buf@2.0.0: {} - - ip@1.1.9: {} - is-arguments@1.2.0: dependencies: call-bound: 1.0.3 @@ -10790,16 +10519,12 @@ snapshots: is-path-inside@4.0.0: {} - is-plain-obj@1.1.0: {} - is-plain-obj@2.1.0: {} is-plain-object@2.0.4: dependencies: isobject: 3.0.1 - is-property@1.0.2: {} - is-regex@1.2.1: dependencies: call-bound: 1.0.3 @@ -10826,8 +10551,6 @@ snapshots: call-bound: 1.0.3 has-tostringtag: 1.0.2 - is-stun@2.0.0: {} - is-symbol@1.1.1: dependencies: call-bound: 1.0.3 @@ -11121,8 +10844,6 @@ snapshots: jsbn@1.1.0: {} - jsc-android@250231.0.0: {} - jsc-safe-url@0.2.4: {} jscodeshift@17.1.2(@babel/preset-env@7.26.9(@babel/core@7.26.9)): @@ -11137,7 +10858,7 @@ snapshots: '@babel/preset-flow': 7.25.9(@babel/core@7.26.9) '@babel/preset-typescript': 7.26.0(@babel/core@7.26.9) '@babel/register': 7.25.9(@babel/core@7.26.9) - flow-parser: 0.261.1 + flow-parser: 0.261.2 graceful-fs: 4.2.11 micromatch: 4.0.8 neo-async: 2.6.2 @@ -11189,15 +10910,15 @@ snapshots: prelude-ls: 1.2.1 type-check: 0.4.0 - libp2p@2.6.2: + libp2p@2.6.3: dependencies: '@chainsafe/is-ip': 2.1.0 '@chainsafe/netmask': 2.0.0 '@libp2p/crypto': 5.0.11 '@libp2p/interface': 2.5.0 - '@libp2p/interface-internal': 2.3.0 + '@libp2p/interface-internal': 2.3.1 '@libp2p/logger': 5.1.8 - '@libp2p/multistream-select': 6.0.13 + '@libp2p/multistream-select': 6.0.14 '@libp2p/peer-collections': 6.0.17 '@libp2p/peer-id': 5.0.12 '@libp2p/peer-store': 11.0.17 @@ -11233,18 +10954,6 @@ snapshots: dependencies: uc.micro: 2.1.0 - load-json-file@4.0.0: - dependencies: - graceful-fs: 4.2.11 - parse-json: 4.0.0 - pify: 3.0.0 - strip-bom: 3.0.0 - - locate-path@2.0.0: - dependencies: - p-locate: 2.0.0 - path-exists: 3.0.0 - locate-path@3.0.0: dependencies: p-locate: 3.0.0 @@ -11300,11 +11009,6 @@ snapshots: dependencies: js-tokens: 4.0.0 - loud-rejection@1.6.0: - dependencies: - currently-unhandled: 0.4.1 - signal-exit: 3.0.7 - loupe@3.1.3: {} lru-cache@10.4.3: {} @@ -11348,10 +11052,6 @@ snapshots: dependencies: tmpl: 1.0.5 - map-obj@1.0.1: {} - - map-obj@2.0.0: {} - markdown-it@14.1.0: dependencies: argparse: 2.0.1 @@ -11392,18 +11092,6 @@ snapshots: memoize-one@5.2.1: {} - meow@5.0.0: - dependencies: - camelcase-keys: 4.2.0 - decamelize-keys: 1.1.1 - loud-rejection: 1.6.0 - minimist-options: 3.0.2 - normalize-package-data: 2.5.0 - read-pkg-up: 3.0.0 - redent: 2.0.0 - trim-newlines: 2.0.0 - yargs-parser: 10.1.0 - merge-options@3.0.4: dependencies: is-plain-obj: 2.1.0 @@ -11639,11 +11327,6 @@ snapshots: dependencies: brace-expansion: 2.0.1 - minimist-options@3.0.2: - dependencies: - arrify: 1.0.1 - is-plain-obj: 1.1.0 - minimist@1.2.8: {} minipass@3.3.6: @@ -11749,17 +11432,8 @@ snapshots: dependencies: abbrev: 1.1.1 - normalize-package-data@2.5.0: - dependencies: - hosted-git-info: 2.8.9 - resolve: 1.22.10 - semver: 5.7.2 - validate-npm-package-license: 3.0.4 - normalize-path@3.0.0: {} - normalize-url@6.1.0: {} - npm-run-path@4.0.1: dependencies: path-key: 3.1.1 @@ -11919,10 +11593,6 @@ snapshots: dependencies: p-timeout: 6.1.4 - p-limit@1.3.0: - dependencies: - p-try: 1.0.0 - p-limit@2.3.0: dependencies: p-try: 2.2.0 @@ -11931,10 +11601,6 @@ snapshots: dependencies: yocto-queue: 0.1.0 - p-locate@2.0.0: - dependencies: - p-limit: 1.3.0 - p-locate@3.0.0: dependencies: p-limit: 2.3.0 @@ -11960,15 +11626,13 @@ snapshots: p-timeout@6.1.4: {} - p-try@1.0.0: {} - p-try@2.2.0: {} p-wait-for@5.0.2: dependencies: p-timeout: 6.1.4 - pac-proxy-agent@7.1.0: + pac-proxy-agent@7.2.0: dependencies: '@tootallnate/quickjs-emscripten': 0.23.0 agent-base: 7.1.3 @@ -12022,24 +11686,10 @@ snapshots: json-parse-even-better-errors: 2.3.1 lines-and-columns: 1.2.4 - parse-path@4.0.4: - dependencies: - is-ssh: 1.4.1 - protocols: 1.4.8 - qs: 6.14.0 - query-string: 6.14.1 - parse-path@7.0.1: dependencies: protocols: 2.0.2 - parse-url@5.0.8: - dependencies: - is-ssh: 1.4.1 - normalize-url: 6.1.0 - parse-path: 4.0.4 - protocols: 1.4.8 - parse-url@8.1.0: dependencies: parse-path: 7.0.1 @@ -12071,10 +11721,6 @@ snapshots: lru-cache: 10.4.3 minipass: 7.1.2 - path-type@3.0.0: - dependencies: - pify: 3.0.0 - path-type@4.0.0: {} path-type@5.0.0: {} @@ -12097,8 +11743,6 @@ snapshots: picomatch@4.0.2: {} - pify@3.0.0: {} - pify@4.0.1: {} pirates@4.0.6: {} @@ -12123,7 +11767,7 @@ snapshots: possible-typed-array-names@1.1.0: {} - postcss@8.5.2: + postcss@8.5.3: dependencies: nanoid: 3.3.8 picocolors: 1.1.1 @@ -12183,7 +11827,7 @@ snapshots: dependencies: asap: 2.0.6 - property-information@6.5.0: {} + property-information@7.0.0: {} proto-list@1.2.4: {} @@ -12217,8 +11861,6 @@ snapshots: '@types/node': 22.13.4 long: 5.3.1 - protocols@1.4.8: {} - protocols@2.0.2: {} protons-runtime@5.5.0: @@ -12234,7 +11876,7 @@ snapshots: http-proxy-agent: 7.0.2 https-proxy-agent: 7.0.6 lru-cache: 7.18.3 - pac-proxy-agent: 7.1.0 + pac-proxy-agent: 7.2.0 proxy-from-env: 1.1.0 socks-proxy-agent: 8.0.5 transitivePeerDependencies: @@ -12276,13 +11918,6 @@ snapshots: dependencies: side-channel: 1.1.0 - query-string@6.14.1: - dependencies: - decode-uri-component: 0.2.2 - filter-obj: 1.1.0 - split-on-first: 1.1.0 - strict-uri-encode: 2.0.0 - querystring-es3@0.2.1: {} queue-microtask@1.2.3: {} @@ -12291,8 +11926,6 @@ snapshots: dependencies: inherits: 2.0.4 - quick-lru@1.1.0: {} - race-event@1.3.0: {} race-signal@1.1.0: {} @@ -12325,25 +11958,25 @@ snapshots: react-is@18.3.1: {} - react-native-webrtc@124.0.5(react-native@0.77.1(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(react@18.3.1)): + react-native-webrtc@124.0.5(react-native@0.78.0(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(react@19.0.0)): dependencies: base64-js: 1.5.1 debug: 4.3.4 event-target-shim: 6.0.2 - react-native: 0.77.1(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(react@18.3.1) + react-native: 0.78.0(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(react@19.0.0) transitivePeerDependencies: - supports-color - react-native@0.77.1(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(react@18.3.1): + react-native@0.78.0(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(react@19.0.0): dependencies: '@jest/create-cache-key-function': 29.7.0 - '@react-native/assets-registry': 0.77.1 - '@react-native/codegen': 0.77.1(@babel/preset-env@7.26.9(@babel/core@7.26.9)) - '@react-native/community-cli-plugin': 0.77.1(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9)) - '@react-native/gradle-plugin': 0.77.1 - '@react-native/js-polyfills': 0.77.1 - '@react-native/normalize-colors': 0.77.1 - '@react-native/virtualized-lists': 0.77.1(react-native@0.77.1(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(react@18.3.1))(react@18.3.1) + '@react-native/assets-registry': 0.78.0 + '@react-native/codegen': 0.78.0(@babel/preset-env@7.26.9(@babel/core@7.26.9)) + '@react-native/community-cli-plugin': 0.78.0(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9)) + '@react-native/gradle-plugin': 0.78.0 + '@react-native/js-polyfills': 0.78.0 + '@react-native/normalize-colors': 0.78.0 + '@react-native/virtualized-lists': 0.78.0(react-native@0.78.0(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(react@19.0.0))(react@19.0.0) abort-controller: 3.0.0 anser: 1.4.10 ansi-regex: 5.0.1 @@ -12357,18 +11990,17 @@ snapshots: glob: 7.2.3 invariant: 2.2.4 jest-environment-node: 29.7.0 - jsc-android: 250231.0.0 memoize-one: 5.2.1 metro-runtime: 0.81.1 metro-source-map: 0.81.1 nullthrows: 1.1.1 pretty-format: 29.7.0 promise: 8.3.0 - react: 18.3.1 + react: 19.0.0 react-devtools-core: 6.1.1 react-refresh: 0.14.2 regenerator-runtime: 0.13.11 - scheduler: 0.24.0-canary-efb381bbf-20230505 + scheduler: 0.25.0 semver: 7.7.1 stacktrace-parser: 0.1.11 whatwg-fetch: 3.6.20 @@ -12384,20 +12016,7 @@ snapshots: react-refresh@0.14.2: {} - react@18.3.1: - dependencies: - loose-envify: 1.4.0 - - read-pkg-up@3.0.0: - dependencies: - find-up: 2.1.0 - read-pkg: 3.0.0 - - read-pkg@3.0.0: - dependencies: - load-json-file: 4.0.0 - normalize-package-data: 2.5.0 - path-type: 3.0.0 + react@19.0.0: {} readable-stream@2.3.8: dependencies: @@ -12429,11 +12048,6 @@ snapshots: dependencies: resolve: 1.22.10 - redent@2.0.0: - dependencies: - indent-string: 3.2.0 - strip-indent: 2.0.0 - reflect-metadata@0.2.2: {} reflect.getprototypeof@1.0.10: @@ -12642,9 +12256,7 @@ snapshots: safer-buffer@2.1.2: {} - scheduler@0.24.0-canary-efb381bbf-20230505: - dependencies: - loose-envify: 1.4.0 + scheduler@0.25.0: {} selfsigned@2.4.1: dependencies: @@ -12828,22 +12440,6 @@ snapshots: space-separated-tokens@2.0.2: {} - spdx-correct@3.2.0: - dependencies: - spdx-expression-parse: 3.0.1 - spdx-license-ids: 3.0.21 - - spdx-exceptions@2.5.0: {} - - spdx-expression-parse@3.0.1: - dependencies: - spdx-exceptions: 2.5.0 - spdx-license-ids: 3.0.21 - - spdx-license-ids@3.0.21: {} - - split-on-first@1.1.0: {} - split@1.0.1: dependencies: through: 2.3.8 @@ -12884,8 +12480,6 @@ snapshots: readable-stream: 3.6.2 xtend: 4.0.2 - strict-uri-encode@2.0.0: {} - string-width@4.2.3: dependencies: emoji-regex: 8.0.0 @@ -12954,29 +12548,12 @@ snapshots: strip-final-newline@3.0.0: {} - strip-indent@2.0.0: {} - strip-json-comments@2.0.1: {} strip-json-comments@3.1.1: {} stubborn-fs@1.2.5: {} - stun@2.1.0: - dependencies: - binary-data: 0.6.0 - buffer-xor: 2.0.2 - debug: 4.4.0 - ip: 1.1.9 - ip2buf: 2.0.0 - is-stun: 2.0.0 - meow: 5.0.0 - parse-url: 5.0.8 - turbo-crc32: 1.0.1 - universalify: 0.1.2 - transitivePeerDependencies: - - supports-color - supports-color@7.2.0: dependencies: has-flag: 4.0.0 @@ -13083,8 +12660,6 @@ snapshots: trim-lines@3.0.1: {} - trim-newlines@2.0.0: {} - ts-api-utils@1.4.3(typescript@5.7.3): dependencies: typescript: 5.7.3 @@ -13158,8 +12733,6 @@ snapshots: dependencies: safe-buffer: 5.2.1 - turbo-crc32@1.0.1: {} - type-check@0.4.0: dependencies: prelude-ls: 1.2.1 @@ -13290,8 +12863,6 @@ snapshots: universal-user-agent@6.0.1: {} - universalify@0.1.2: {} - unpipe@1.0.0: {} update-browserslist-db@1.1.2(browserslist@4.24.4): @@ -13340,11 +12911,6 @@ snapshots: v8-compile-cache-lib@3.0.1: {} - validate-npm-package-license@3.0.4: - dependencies: - spdx-correct: 3.2.0 - spdx-expression-parse: 3.0.1 - validate-peer-dependencies@1.2.0: dependencies: resolve-package-path: 3.1.0 @@ -13366,7 +12932,7 @@ snapshots: debug: 4.4.0 es-module-lexer: 1.6.0 pathe: 2.0.3 - vite: 6.1.0(@types/node@22.13.4)(terser@5.39.0)(tsx@4.19.1)(yaml@2.7.0) + vite: 6.1.1(@types/node@22.13.4)(terser@5.39.0)(tsx@4.19.1)(yaml@2.7.0) transitivePeerDependencies: - '@types/node' - jiti @@ -13381,29 +12947,29 @@ snapshots: - tsx - yaml - vite-plugin-node-polyfills@0.22.0(rollup@4.34.8)(vite@6.1.0(@types/node@22.13.4)(terser@5.39.0)(tsx@4.19.1)(yaml@2.7.0)): + vite-plugin-node-polyfills@0.22.0(rollup@4.34.8)(vite@6.1.1(@types/node@22.13.4)(terser@5.39.0)(tsx@4.19.1)(yaml@2.7.0)): dependencies: '@rollup/plugin-inject': 5.0.5(rollup@4.34.8) node-stdlib-browser: 1.3.1 - vite: 6.1.0(@types/node@22.13.4)(terser@5.39.0)(tsx@4.19.1)(yaml@2.7.0) + vite: 6.1.1(@types/node@22.13.4)(terser@5.39.0)(tsx@4.19.1)(yaml@2.7.0) transitivePeerDependencies: - rollup - vite-tsconfig-paths@5.1.4(typescript@5.7.3)(vite@6.1.0(@types/node@22.13.4)(terser@5.39.0)(tsx@4.19.1)(yaml@2.7.0)): + vite-tsconfig-paths@5.1.4(typescript@5.7.3)(vite@6.1.1(@types/node@22.13.4)(terser@5.39.0)(tsx@4.19.1)(yaml@2.7.0)): dependencies: debug: 4.4.0 globrex: 0.1.2 tsconfck: 3.1.5(typescript@5.7.3) optionalDependencies: - vite: 6.1.0(@types/node@22.13.4)(terser@5.39.0)(tsx@4.19.1)(yaml@2.7.0) + vite: 6.1.1(@types/node@22.13.4)(terser@5.39.0)(tsx@4.19.1)(yaml@2.7.0) transitivePeerDependencies: - supports-color - typescript - vite@6.1.0(@types/node@22.13.4)(terser@5.39.0)(tsx@4.19.1)(yaml@2.7.0): + vite@6.1.1(@types/node@22.13.4)(terser@5.39.0)(tsx@4.19.1)(yaml@2.7.0): dependencies: esbuild: 0.24.2 - postcss: 8.5.2 + postcss: 8.5.3 rollup: 4.34.8 optionalDependencies: '@types/node': 22.13.4 @@ -13415,7 +12981,7 @@ snapshots: vitest@3.0.6(@types/node@22.13.4)(terser@5.39.0)(tsx@4.19.1)(yaml@2.7.0): dependencies: '@vitest/expect': 3.0.6 - '@vitest/mocker': 3.0.6(vite@6.1.0(@types/node@22.13.4)(terser@5.39.0)(tsx@4.19.1)(yaml@2.7.0)) + '@vitest/mocker': 3.0.6(vite@6.1.1(@types/node@22.13.4)(terser@5.39.0)(tsx@4.19.1)(yaml@2.7.0)) '@vitest/pretty-format': 3.0.6 '@vitest/runner': 3.0.6 '@vitest/snapshot': 3.0.6 @@ -13431,7 +12997,7 @@ snapshots: tinyexec: 0.3.2 tinypool: 1.0.2 tinyrainbow: 2.0.0 - vite: 6.1.0(@types/node@22.13.4)(terser@5.39.0)(tsx@4.19.1)(yaml@2.7.0) + vite: 6.1.1(@types/node@22.13.4)(terser@5.39.0)(tsx@4.19.1)(yaml@2.7.0) vite-node: 3.0.6(@types/node@22.13.4)(terser@5.39.0)(tsx@4.19.1)(yaml@2.7.0) why-is-node-running: 2.3.0 optionalDependencies: @@ -13626,10 +13192,6 @@ snapshots: yaml@2.7.0: {} - yargs-parser@10.1.0: - dependencies: - camelcase: 4.1.0 - yargs-parser@21.1.1: {} yargs@17.7.2: From de39e08674dc82ed44ccd24b06766606e61a63b3 Mon Sep 17 00:00:00 2001 From: Sacha Froment Date: Wed, 19 Feb 2025 16:35:17 +0100 Subject: [PATCH 4/5] perf: better topo dfs perf (#482) Signed-off-by: Sacha Froment Co-authored-by: Jan Lewandowski --- packages/object/src/hashgraph/index.ts | 21 ++++++++++++------- .../object/src/linearize/pairSemantics.ts | 1 - packages/object/src/utils/objectSet.ts | 9 ++++++++ packages/object/tests/actiontypes.test.ts | 4 +++- 4 files changed, 25 insertions(+), 10 deletions(-) diff --git a/packages/object/src/hashgraph/index.ts b/packages/object/src/hashgraph/index.ts index f0c3edc7..1d0524f9 100644 --- a/packages/object/src/hashgraph/index.ts +++ b/packages/object/src/hashgraph/index.ts @@ -166,16 +166,20 @@ export class HashGraph { dfsTopologicalSortIterative(origin: Hash, subgraph: ObjectSet): Hash[] { const visited = new ObjectSet(); - const result: Hash[] = []; - const stack: Hash[] = [origin]; + const result: Hash[] = Array(subgraph.size); + const stack: Hash[] = Array(subgraph.size); const processing = new ObjectSet(); + let resultIndex = subgraph.size - 1; + let stackIndex = 0; + stack[stackIndex] = origin; - while (stack.length > 0) { - const node = stack[stack.length - 1]; + while (resultIndex >= 0) { + const node = stack[stackIndex]; if (visited.has(node)) { - stack.pop(); - result.push(node); + result[resultIndex] = node; + stackIndex--; + resultIndex--; processing.delete(node); continue; } @@ -188,13 +192,14 @@ export class HashGraph { for (const neighbor of neighbors.sort()) { if (processing.has(neighbor)) throw new Error("Graph contains a cycle!"); if (subgraph.has(neighbor) && !visited.has(neighbor)) { - stack.push(neighbor); + stackIndex++; + stack[stackIndex] = neighbor; } } } } - return result.reverse(); + return result; } /* Topologically sort the vertices in the whole hashgraph or the past of a given vertex. */ diff --git a/packages/object/src/linearize/pairSemantics.ts b/packages/object/src/linearize/pairSemantics.ts index 9c3d3066..7e18f747 100644 --- a/packages/object/src/linearize/pairSemantics.ts +++ b/packages/object/src/linearize/pairSemantics.ts @@ -58,6 +58,5 @@ export function linearizePairSemantics( } } } - return result; } diff --git a/packages/object/src/utils/objectSet.ts b/packages/object/src/utils/objectSet.ts index cd11095b..ce70bdf9 100644 --- a/packages/object/src/utils/objectSet.ts +++ b/packages/object/src/utils/objectSet.ts @@ -1,19 +1,28 @@ export class ObjectSet { set: { [key in T]: boolean }; + size: number; constructor(iterable: Iterable = []) { this.set = {} as { [key in T]: boolean }; + this.size = 0; for (const item of iterable) { this.set[item] = true; + this.size++; } } add(item: T): void { + if (this.has(item)) return; + this.set[item] = true; + this.size++; } delete(item: T): void { + if (!this.has(item)) return; + delete this.set[item]; + this.size--; } has(item: T): boolean { diff --git a/packages/object/tests/actiontypes.test.ts b/packages/object/tests/actiontypes.test.ts index bf798d8d..939023b3 100644 --- a/packages/object/tests/actiontypes.test.ts +++ b/packages/object/tests/actiontypes.test.ts @@ -89,7 +89,6 @@ describe("Test: ActionTypes (Nop and Swap)", () => { addMul.add(5); drp.merge(drp2.vertices); drp2.merge(drp.vertices); - addMul.mul(5); addMul.add(5); addMul2.add(5); @@ -99,8 +98,11 @@ describe("Test: ActionTypes (Nop and Swap)", () => { expect(addMul2.query_value()).toBe(75); addMul2.mul(2); + vi.setSystemTime(new Date(Date.UTC(1998, 11, 24))); addMul2.add(2); + vi.setSystemTime(new Date(Date.UTC(1998, 11, 25))); addMul.add(3); + vi.setSystemTime(new Date(Date.UTC(1998, 11, 26))); addMul.mul(3); drp.merge(drp2.vertices); drp2.merge(drp.vertices); From 2c51957a5fa3aea9353250c3fa1adc5ab42767b2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ph=E1=BA=A1m=20Xu=C3=A2n=20Trung?= <66519569+trungnotchung@users.noreply.github.com> Date: Wed, 19 Feb 2025 22:43:19 +0700 Subject: [PATCH 5/5] fix: merge new vertices when drp is missing (#460) --- packages/object/src/index.ts | 74 ++++++++++-------------------------- 1 file changed, 20 insertions(+), 54 deletions(-) diff --git a/packages/object/src/index.ts b/packages/object/src/index.ts index 8688ebf2..032549c5 100644 --- a/packages/object/src/index.ts +++ b/packages/object/src/index.ts @@ -214,20 +214,6 @@ export class DRPObject implements DRPObjectBase { return appliedOperationResult; } - /* Merges the vertices into the hashgraph - * Returns a tuple with a boolean indicating if there were - * missing vertices and an array with the missing vertices - */ - merge(vertices: Vertex[]): [merged: boolean, missing: string[]] { - if (!this.hashGraph) { - throw new Error("Hashgraph is undefined"); - } - if (!this.drp) { - return this._mergeWithoutDrp(vertices); - } - return this._mergeWithDrp(vertices); - } - validateVertex(vertex: Vertex) { // Validate hash value if ( @@ -262,9 +248,15 @@ export class DRPObject implements DRPObjectBase { } } - /* Merges the vertices into the hashgraph using DRP + /* Merges the vertices into the hashgraph + * Returns a tuple with a boolean indicating if there were + * missing vertices and an array with the missing vertices */ - private _mergeWithDrp(vertices: Vertex[]): [merged: boolean, missing: string[]] { + merge(vertices: Vertex[]): [merged: boolean, missing: string[]] { + if (!this.hashGraph) { + throw new Error("Hashgraph is undefined"); + } + const missing: Hash[] = []; const newVertices: Vertex[] = []; for (const vertex of vertices) { @@ -276,18 +268,23 @@ export class DRPObject implements DRPObjectBase { try { this.validateVertex(vertex); const preComputeLca = this.computeLCA(vertex.dependencies); - const drp = this._computeDRP( - vertex.dependencies, - preComputeLca, - vertex.operation.drpType === DrpType.DRP ? vertex.operation : undefined - ); + + if (this.drp) { + const drp = this._computeDRP( + vertex.dependencies, + preComputeLca, + vertex.operation.drpType === DrpType.DRP ? vertex.operation : undefined + ); + this._setDRPState(vertex, preComputeLca, this._getDRPState(drp)); + } + const acl = this._computeObjectACL( vertex.dependencies, preComputeLca, vertex.operation.drpType === DrpType.ACL ? vertex.operation : undefined ); - this._setDRPState(vertex, preComputeLca, this._getDRPState(drp)); this._setObjectACLState(vertex, preComputeLca, this._getDRPState(acl)); + this.hashGraph.addVertex(vertex); this._initializeFinalityState(vertex.hash, acl); newVertices.push(vertex); @@ -298,39 +295,12 @@ export class DRPObject implements DRPObjectBase { this.vertices = this.hashGraph.getAllVertices(); this._updateObjectACLState(); - this._updateDRPState(); + if (this.drp) this._updateDRPState(); this._notify("merge", newVertices); return [missing.length === 0, missing]; } - /* Merges the vertices into the hashgraph without using DRP - */ - private _mergeWithoutDrp(vertices: Vertex[]): [merged: boolean, missing: string[]] { - const missing = []; - for (const vertex of vertices) { - if (!vertex.operation || this.hashGraph.vertices.has(vertex.hash)) { - continue; - } - - try { - this.validateVertex(vertex); - this.hashGraph.addVertex({ - hash: vertex.hash, - operation: vertex.operation, - dependencies: vertex.dependencies, - peerId: vertex.peerId, - timestamp: vertex.timestamp, - signature: vertex.signature, - }); - } catch (_) { - missing.push(vertex.hash); - } - } - - return [missing.length === 0, missing]; - } - subscribe(callback: DRPObjectCallback) { this.subscriptions.push(callback); } @@ -348,10 +318,6 @@ export class DRPObject implements DRPObjectBase { // check if the given peer has write permission private _checkWriterPermission(peerId: string, deps: Hash[]): boolean { - if (!this.drp) { - return (this.acl as ACL).query_isWriter(peerId); - } - const acl = this._computeObjectACL(deps); return (acl as ACL).query_isWriter(peerId); }