From 2d8dbd9aab18944c8c18be7030e906a170068fb9 Mon Sep 17 00:00:00 2001 From: Russell Dempsey <1173416+SgtPooki@users.noreply.github.com> Date: Thu, 12 Dec 2024 12:20:34 -0600 Subject: [PATCH] fix: config ui is in sync with IDB (#528) * chore: update package-lock.json * fix: config UI is up to date with IDB * chore: apply self suggestions from code review * chore: fix build and lint --- package-lock.json | 1071 ++++++++++-------- src/lib/config-db.ts | 133 ++- src/lib/generic-db.ts | 28 + src/pages/config.tsx | 10 +- test-e2e/config-ui.test.ts | 33 + test-e2e/fixtures/config-test-fixtures.ts | 24 +- test-e2e/fixtures/locators.ts | 10 +- test-e2e/fixtures/set-sw-config.ts | 138 ++- test-e2e/fixtures/wait-for-service-worker.ts | 8 +- test-e2e/subdomain-detection.test.ts | 22 +- 10 files changed, 861 insertions(+), 616 deletions(-) create mode 100644 test-e2e/config-ui.test.ts diff --git a/package-lock.json b/package-lock.json index 421479de..a2ad93e2 100644 --- a/package-lock.json +++ b/package-lock.json @@ -2315,11 +2315,14 @@ } }, "node_modules/@bcoe/v8-coverage": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz", - "integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@bcoe/v8-coverage/-/v8-coverage-1.0.1.tgz", + "integrity": "sha512-W+a0/JpU28AqH4IKtwUPcEUnUyXMDLALcn5/JLczGGT9fHE2sIby/xP/oQnx3nxkForzgzPy201RAKcB4xPAFQ==", "dev": true, - "license": "MIT" + "license": "MIT", + "engines": { + "node": ">=18" + } }, "node_modules/@chainsafe/as-chacha20poly1305": { "version": "0.1.0", @@ -3624,9 +3627,9 @@ } }, "node_modules/@helia/verified-fetch": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/@helia/verified-fetch/-/verified-fetch-2.3.0.tgz", - "integrity": "sha512-Jh7RGxD/rvKXlrXzaiInFcmRE1U2dkOYbbp7ld20gVuqdktnj2VTmm80OBEV6MQrSr7mz0Vhy0bBQJVhW6hmUQ==", + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/@helia/verified-fetch/-/verified-fetch-2.3.1.tgz", + "integrity": "sha512-rSx0wEidbwGODWtkafaAvxUabP/z4CIIgHiwaqhIRgNU8HroDN1yrWmUxDSF62ENjAXZQQTvv5qpiF4EPjfRLA==", "license": "Apache-2.0 OR MIT", "dependencies": { "@helia/block-brokers": "^4.0.2", @@ -4071,9 +4074,9 @@ } }, "node_modules/@jridgewell/gen-mapping": { - "version": "0.3.5", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz", - "integrity": "sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==", + "version": "0.3.8", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.8.tgz", + "integrity": "sha512-imAbBGkb+ebQyxKgzv5Hu2nmROxoDOXHh80evxdoXNOrvAnVx7zimzc1Oo5h9RlfV4vPXaE2iM5pOFbvOCClWA==", "license": "MIT", "dependencies": { "@jridgewell/set-array": "^1.2.1", @@ -4136,337 +4139,336 @@ "license": "MIT" }, "node_modules/@libp2p/autonat": { - "version": "2.0.12", - "resolved": "https://registry.npmjs.org/@libp2p/autonat/-/autonat-2.0.12.tgz", - "integrity": "sha512-EgJb6RwJmBwB7/Ddg3B3xFspc+OrNC6oonWh3osrP85J0cY7wOVmDSuLqk8tcxli9OuTYNSef/7dY9NVYEA+9g==", + "version": "2.0.15", + "resolved": "https://registry.npmjs.org/@libp2p/autonat/-/autonat-2.0.15.tgz", + "integrity": "sha512-R9PHA/0zy//gZ/W0xjyUl7PN+7JP6qtXqoeZnafb7pVOkJy/4RiBeYY4g/QKnZ0lEIpKLDowHT1pujkjbWw/Cg==", "license": "Apache-2.0 OR MIT", "dependencies": { - "@libp2p/interface": "^2.2.1", - "@libp2p/interface-internal": "^2.1.1", - "@libp2p/peer-id": "^5.0.8", - "@libp2p/utils": "^6.2.1", - "@multiformats/multiaddr": "^12.2.3", - "it-first": "^3.0.6", - "it-length-prefixed": "^9.0.4", - "it-map": "^3.1.0", - "it-parallel": "^3.0.7", - "it-pipe": "^3.0.1", - "multiformats": "^13.2.2", - "protons-runtime": "^5.4.0", + "@libp2p/interface": "^2.3.0", + "@libp2p/interface-internal": "^2.2.1", + "@libp2p/peer-collections": "^6.0.13", + "@libp2p/peer-id": "^5.0.9", + "@libp2p/utils": "^6.3.0", + "@multiformats/multiaddr": "^12.3.3", + "any-signal": "^4.1.1", + "it-protobuf-stream": "^1.1.5", + "multiformats": "^13.3.1", + "protons-runtime": "^5.5.0", "uint8arraylist": "^2.4.8" } }, "node_modules/@libp2p/bootstrap": { - "version": "11.0.13", - "resolved": "https://registry.npmjs.org/@libp2p/bootstrap/-/bootstrap-11.0.13.tgz", - "integrity": "sha512-zfZdqR4pVvsSWRBYNYjJD6hCzsgRRNLy8NAcLOf+H4+xDQg2pdGY7RhbeLetqnEaifHFV1INdIuCkdOI8cSMsQ==", + "version": "11.0.16", + "resolved": "https://registry.npmjs.org/@libp2p/bootstrap/-/bootstrap-11.0.16.tgz", + "integrity": "sha512-GmIkQuZwWFOnEBuUM0eRma/PjS0iCgc7Yl8X54QxqbmjB04DMqz2sGgmP+2gmiB38CIj1WGz4DTiTaECiyut2Q==", "license": "Apache-2.0 OR MIT", "dependencies": { - "@libp2p/interface": "^2.2.1", - "@libp2p/interface-internal": "^2.1.1", - "@libp2p/peer-id": "^5.0.8", + "@libp2p/interface": "^2.3.0", + "@libp2p/interface-internal": "^2.2.1", + "@libp2p/peer-id": "^5.0.9", "@multiformats/mafmt": "^12.1.6", - "@multiformats/multiaddr": "^12.2.3" + "@multiformats/multiaddr": "^12.3.3" } }, "node_modules/@libp2p/circuit-relay-v2": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/@libp2p/circuit-relay-v2/-/circuit-relay-v2-3.1.3.tgz", - "integrity": "sha512-tdPaNK4ut9FU5uwABf+lj01eul3uVDUyAdlcpnIRgkRTOMZ02C06nyaIFSeHD5ykpyZpDIbLPHHBLd5kRYRfYg==", + "version": "3.1.6", + "resolved": "https://registry.npmjs.org/@libp2p/circuit-relay-v2/-/circuit-relay-v2-3.1.6.tgz", + "integrity": "sha512-47ocamyjMlGM9HgVo2BZI/yUuSM03GugTu03KjS1Wx/mLDq3WSpUVk1qMS4v1ZpOwXTnKlk5e3sp/t9K5PHCjw==", "license": "Apache-2.0 OR MIT", "dependencies": { - "@libp2p/crypto": "^5.0.7", - "@libp2p/interface": "^2.2.1", - "@libp2p/interface-internal": "^2.1.1", - "@libp2p/peer-collections": "^6.0.12", - "@libp2p/peer-id": "^5.0.8", - "@libp2p/peer-record": "^8.0.12", - "@libp2p/utils": "^6.2.1", - "@multiformats/multiaddr": "^12.2.3", - "@multiformats/multiaddr-matcher": "^1.3.0", + "@libp2p/crypto": "^5.0.8", + "@libp2p/interface": "^2.3.0", + "@libp2p/interface-internal": "^2.2.1", + "@libp2p/peer-collections": "^6.0.13", + "@libp2p/peer-id": "^5.0.9", + "@libp2p/peer-record": "^8.0.13", + "@libp2p/utils": "^6.3.0", + "@multiformats/multiaddr": "^12.3.3", + "@multiformats/multiaddr-matcher": "^1.6.0", "any-signal": "^4.1.1", - "it-protobuf-stream": "^1.1.3", - "it-stream-types": "^2.0.1", - "multiformats": "^13.1.0", - "nanoid": "^5.0.7", - "progress-events": "^1.0.0", - "protons-runtime": "^5.4.0", - "retimeable-signal": "^0.0.0", + "it-protobuf-stream": "^1.1.5", + "it-stream-types": "^2.0.2", + "multiformats": "^13.3.1", + "nanoid": "^5.0.9", + "progress-events": "^1.0.1", + "protons-runtime": "^5.5.0", + "retimeable-signal": "^1.0.0", "uint8arraylist": "^2.4.8", "uint8arrays": "^5.1.0" } }, "node_modules/@libp2p/crypto": { - "version": "5.0.7", - "resolved": "https://registry.npmjs.org/@libp2p/crypto/-/crypto-5.0.7.tgz", - "integrity": "sha512-hv0rv/BPBsmSV5GBtaLZpOEv1LsA+Ub0BEDnEvSdB0ZbZ3Fcdlt5HTaJ2jYz4lx2T7KWTFQa9i1elmlGxwuJNg==", + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/@libp2p/crypto/-/crypto-5.0.8.tgz", + "integrity": "sha512-3ZxuzqMvyLXhRnjT3sjvzCCW4zkO9UKgv75KfqExP3k1Yk/Zbb+oM2z7OgnDycvLGxnRZgGwizrgnWpZvXlDEA==", "license": "Apache-2.0 OR MIT", "dependencies": { - "@libp2p/interface": "^2.2.1", - "@noble/curves": "^1.4.0", - "@noble/hashes": "^1.4.0", + "@libp2p/interface": "^2.3.0", + "@noble/curves": "^1.7.0", + "@noble/hashes": "^1.6.1", "asn1js": "^3.0.5", - "multiformats": "^13.1.0", - "protons-runtime": "^5.4.0", + "multiformats": "^13.3.1", + "protons-runtime": "^5.5.0", "uint8arraylist": "^2.4.8", "uint8arrays": "^5.1.0" } }, "node_modules/@libp2p/dcutr": { - "version": "2.0.12", - "resolved": "https://registry.npmjs.org/@libp2p/dcutr/-/dcutr-2.0.12.tgz", - "integrity": "sha512-BtUtNQW+AmZDr3waEuQn4TzEleMljxXlojnUBAseysnJH5nHPjLyQfkfqKEIFdswghlZOJLX0YhiR+otzKXCCQ==", + "version": "2.0.14", + "resolved": "https://registry.npmjs.org/@libp2p/dcutr/-/dcutr-2.0.14.tgz", + "integrity": "sha512-claAqe1n2SBoy53v30tvw3BI3+Jbn5UivmR0R69tclBa2sU15sh8WfKMfRv+h3eo8823syUruNZUvUslc2p4DA==", "license": "Apache-2.0 OR MIT", "dependencies": { - "@libp2p/interface": "^2.2.1", - "@libp2p/interface-internal": "^2.1.1", - "@libp2p/utils": "^6.2.1", - "@multiformats/multiaddr": "^12.2.3", - "@multiformats/multiaddr-matcher": "^1.2.1", + "@libp2p/interface": "^2.3.0", + "@libp2p/interface-internal": "^2.2.1", + "@libp2p/utils": "^6.3.0", + "@multiformats/multiaddr": "^12.3.3", + "@multiformats/multiaddr-matcher": "^1.6.0", "delay": "^6.0.0", - "it-protobuf-stream": "^1.1.3", - "protons-runtime": "^5.4.0", + "it-protobuf-stream": "^1.1.5", + "protons-runtime": "^5.5.0", "uint8arraylist": "^2.4.8" } }, "node_modules/@libp2p/identify": { - "version": "3.0.12", - "resolved": "https://registry.npmjs.org/@libp2p/identify/-/identify-3.0.12.tgz", - "integrity": "sha512-Z1MjdaGMsLPEEpEvlCJOsOgZ2q4FOPqO7W9ep6Kemnc0suuB6wk+8XLDvnZKHS80OdZopGQwm7z8Az06cxrLAA==", + "version": "3.0.14", + "resolved": "https://registry.npmjs.org/@libp2p/identify/-/identify-3.0.14.tgz", + "integrity": "sha512-H80tdH8csD3W+wHoaltJEnjTAmZBJ22bYqFOPk5YKCF0k19Ox2MwRTkyCXuVDIdQfrYs94JE3HvLvUoN9X/JBQ==", "license": "Apache-2.0 OR MIT", "dependencies": { - "@libp2p/crypto": "^5.0.7", - "@libp2p/interface": "^2.2.1", - "@libp2p/interface-internal": "^2.1.1", - "@libp2p/peer-id": "^5.0.8", - "@libp2p/peer-record": "^8.0.12", - "@libp2p/utils": "^6.2.1", - "@multiformats/multiaddr": "^12.2.3", - "@multiformats/multiaddr-matcher": "^1.2.1", + "@libp2p/crypto": "^5.0.8", + "@libp2p/interface": "^2.3.0", + "@libp2p/interface-internal": "^2.2.1", + "@libp2p/peer-id": "^5.0.9", + "@libp2p/peer-record": "^8.0.13", + "@libp2p/utils": "^6.3.0", + "@multiformats/multiaddr": "^12.3.3", + "@multiformats/multiaddr-matcher": "^1.6.0", "it-drain": "^3.0.7", - "it-parallel": "^3.0.7", - "it-protobuf-stream": "^1.1.3", - "protons-runtime": "^5.4.0", + "it-parallel": "^3.0.8", + "it-protobuf-stream": "^1.1.5", + "protons-runtime": "^5.5.0", "uint8arraylist": "^2.4.8", "uint8arrays": "^5.1.0", "wherearewe": "^2.0.1" } }, "node_modules/@libp2p/interface": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/@libp2p/interface/-/interface-2.2.1.tgz", - "integrity": "sha512-5dvsnf9+S5DoXCk5H3HNpe8lKzuXTi0k2On8Cdqr6YrkmrhCimow63AxtaUOVkH7GVBTTi8Q1jSx3aleX7KcEA==", + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@libp2p/interface/-/interface-2.3.0.tgz", + "integrity": "sha512-lodc8jxw32fkY2m2bsS6yzzozua6EDr5rJvahJaJVC36jZWFW5sBmOW8jBoKfoZyRwgD6uoOXP39miWQhEaUcg==", "license": "Apache-2.0 OR MIT", "dependencies": { - "@multiformats/multiaddr": "^12.2.3", + "@multiformats/multiaddr": "^12.3.3", "it-pushable": "^3.2.3", - "it-stream-types": "^2.0.1", - "multiformats": "^13.1.0", - "progress-events": "^1.0.0", + "it-stream-types": "^2.0.2", + "multiformats": "^13.3.1", + "progress-events": "^1.0.1", "uint8arraylist": "^2.4.8" } }, "node_modules/@libp2p/interface-internal": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/@libp2p/interface-internal/-/interface-internal-2.1.1.tgz", - "integrity": "sha512-7rw7p5wZry9ZPfdhYi4zXRjsgrJ8y/X5M7iWIzUBSJdJP2Zd0ZVStlgyqYm1YAbb8V0mwo5BI/kxd2o9R/9TJQ==", + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/@libp2p/interface-internal/-/interface-internal-2.2.1.tgz", + "integrity": "sha512-GGxQnTgQ891bpOcHQAG9Dy/KXo1OoKnCaV2e02yWNhW8TkqlFJnwdny6tX8O6BN8Od56yuEIS89ZoNn2SK4F5g==", "license": "Apache-2.0 OR MIT", "dependencies": { - "@libp2p/interface": "^2.2.1", - "@libp2p/peer-collections": "^6.0.12", - "@multiformats/multiaddr": "^12.2.3", - "progress-events": "^1.0.0", + "@libp2p/interface": "^2.3.0", + "@libp2p/peer-collections": "^6.0.13", + "@multiformats/multiaddr": "^12.3.3", + "progress-events": "^1.0.1", "uint8arraylist": "^2.4.8" } }, "node_modules/@libp2p/kad-dht": { - "version": "14.1.3", - "resolved": "https://registry.npmjs.org/@libp2p/kad-dht/-/kad-dht-14.1.3.tgz", - "integrity": "sha512-eo2QdsllouakcdHa7NbLhjQ6eMdsMc7PLZRt3lnQTdQsMT81iVTAB/hhVJlTSEUJHQS5JbikrjkJLtFu6KUFzw==", + "version": "14.1.6", + "resolved": "https://registry.npmjs.org/@libp2p/kad-dht/-/kad-dht-14.1.6.tgz", + "integrity": "sha512-ceTF2Xh32PTleLfccAvniTdTFWfRgmaW1NT2juk4YRfzCQFdJqhuspiDVqelpZnexHKWgbYvwUos/gIEQICJ7g==", "license": "Apache-2.0 OR MIT", "dependencies": { - "@libp2p/crypto": "^5.0.7", - "@libp2p/interface": "^2.2.1", - "@libp2p/interface-internal": "^2.1.1", - "@libp2p/peer-collections": "^6.0.12", - "@libp2p/peer-id": "^5.0.8", + "@libp2p/crypto": "^5.0.8", + "@libp2p/interface": "^2.3.0", + "@libp2p/interface-internal": "^2.2.1", + "@libp2p/peer-collections": "^6.0.13", + "@libp2p/peer-id": "^5.0.9", "@libp2p/record": "^4.0.4", - "@libp2p/utils": "^6.2.1", - "@multiformats/multiaddr": "^12.2.3", + "@libp2p/utils": "^6.3.0", + "@multiformats/multiaddr": "^12.3.3", "any-signal": "^4.1.1", - "interface-datastore": "^8.3.0", + "interface-datastore": "^8.3.1", + "it-all": "^3.0.6", "it-drain": "^3.0.7", "it-length": "^3.0.6", - "it-length-prefixed": "^9.0.4", - "it-map": "^3.1.0", + "it-length-prefixed": "^9.1.0", + "it-map": "^3.1.1", "it-merge": "^3.0.5", - "it-parallel": "^3.0.7", + "it-parallel": "^3.0.8", "it-pipe": "^3.0.1", - "it-protobuf-stream": "^1.1.3", - "it-take": "^3.0.5", - "mortice": "^3.0.4", - "multiformats": "^13.1.0", + "it-protobuf-stream": "^1.1.5", + "it-take": "^3.0.6", + "mortice": "^3.0.6", + "multiformats": "^13.3.1", "p-defer": "^4.0.1", "p-event": "^6.0.1", - "progress-events": "^1.0.0", - "protons-runtime": "^5.4.0", - "race-signal": "^1.0.2", + "progress-events": "^1.0.1", + "protons-runtime": "^5.5.0", + "race-signal": "^1.1.0", "uint8-varint": "^2.0.4", "uint8arraylist": "^2.4.8", "uint8arrays": "^5.1.0" } }, "node_modules/@libp2p/keychain": { - "version": "5.0.10", - "resolved": "https://registry.npmjs.org/@libp2p/keychain/-/keychain-5.0.10.tgz", - "integrity": "sha512-olTq2dbKpKkUCsDjAOYcxwSB4KotJ9zA3aaWOE8aUd2ZbwrYJ3VBlm0Ov5PfdGx9qsUhsfnmC01vpF6cEEOg0g==", + "version": "5.0.11", + "resolved": "https://registry.npmjs.org/@libp2p/keychain/-/keychain-5.0.11.tgz", + "integrity": "sha512-kznG/mCaULYZTVYXuXtGJgmq7ZBiWFQNd4UutIsi8T1h7q0uD37iQI3sNJxb58yDOHrpCYpICfDpjlK6X3bJzQ==", "license": "Apache-2.0 OR MIT", "dependencies": { - "@libp2p/crypto": "^5.0.7", - "@libp2p/interface": "^2.2.1", - "@noble/hashes": "^1.5.0", + "@libp2p/crypto": "^5.0.8", + "@libp2p/interface": "^2.3.0", + "@noble/hashes": "^1.6.1", "asn1js": "^3.0.5", - "interface-datastore": "^8.3.0", + "interface-datastore": "^8.3.1", "merge-options": "^3.0.4", - "multiformats": "^13.2.2", + "multiformats": "^13.3.1", "sanitize-filename": "^1.6.3", "uint8arrays": "^5.1.0" } }, "node_modules/@libp2p/logger": { - "version": "5.1.4", - "resolved": "https://registry.npmjs.org/@libp2p/logger/-/logger-5.1.4.tgz", - "integrity": "sha512-pVQ2odi6rcOR412wM0dg7eZ1+wPHPo5D7W8vIn3YyB2FLodQD7CZXXfg7Z9Yaqlc4BVbkNXDWL/jlUss9wL2Ow==", + "version": "5.1.5", + "resolved": "https://registry.npmjs.org/@libp2p/logger/-/logger-5.1.5.tgz", + "integrity": "sha512-Qe8B/Mja0myaArPvuI5iKVi3o2Z55Rir+RDkkEU/m9TkKDkHVFmGKnPlWDzHehi18GALjLxOsTE9TJASxjDTCA==", "license": "Apache-2.0 OR MIT", "dependencies": { - "@libp2p/interface": "^2.2.1", - "@multiformats/multiaddr": "^12.2.3", - "interface-datastore": "^8.3.0", - "multiformats": "^13.1.0", - "weald": "^1.0.2" + "@libp2p/interface": "^2.3.0", + "@multiformats/multiaddr": "^12.3.3", + "interface-datastore": "^8.3.1", + "multiformats": "^13.3.1", + "weald": "^1.0.4" } }, "node_modules/@libp2p/mdns": { - "version": "11.0.13", - "resolved": "https://registry.npmjs.org/@libp2p/mdns/-/mdns-11.0.13.tgz", - "integrity": "sha512-zGr7PygfoUeYjTvpujFYcLLhlcQ4dGegPep6e/LaLq97eU+GTF//AJbs9KhHQRfSqv449o+38fbqPHCxrwurMA==", + "version": "11.0.16", + "resolved": "https://registry.npmjs.org/@libp2p/mdns/-/mdns-11.0.16.tgz", + "integrity": "sha512-FJLJywEFCm5r61b7IZ+KGvxUPEGuGx5VGXyTSE10y7lSxizn50ZUAmnN76OsBdLz/Uj3/iyzTOOmY17mzBjN3g==", "license": "Apache-2.0 OR MIT", "dependencies": { - "@libp2p/interface": "^2.2.1", - "@libp2p/interface-internal": "^2.1.1", - "@libp2p/peer-id": "^5.0.8", - "@libp2p/utils": "^6.2.1", - "@multiformats/multiaddr": "^12.2.3", + "@libp2p/interface": "^2.3.0", + "@libp2p/interface-internal": "^2.2.1", + "@libp2p/peer-id": "^5.0.9", + "@libp2p/utils": "^6.3.0", + "@multiformats/multiaddr": "^12.3.3", "@types/multicast-dns": "^7.2.4", "dns-packet": "^5.6.1", "multicast-dns": "^7.2.5" } }, "node_modules/@libp2p/mplex": { - "version": "11.0.13", - "resolved": "https://registry.npmjs.org/@libp2p/mplex/-/mplex-11.0.13.tgz", - "integrity": "sha512-OS6n8BfzMhgsAB/IiEcbQfdftAVOXkRCrZrSAZC90kWEL47SuHk6M5xjsr6ODOXCHAWApC7FfMV4tKrzyXXItw==", + "version": "11.0.16", + "resolved": "https://registry.npmjs.org/@libp2p/mplex/-/mplex-11.0.16.tgz", + "integrity": "sha512-FHzKT67sSE7AxzGDj+WVesvKHXjjoXGg9aiuHfQmnO0tC2c3F7jY3KahuaaxLIZp4P3QdZZMwtqhbb6iASrWyg==", "license": "Apache-2.0 OR MIT", "dependencies": { - "@libp2p/interface": "^2.2.1", - "@libp2p/utils": "^6.2.1", + "@libp2p/interface": "^2.3.0", + "@libp2p/utils": "^6.3.0", "it-pipe": "^3.0.1", "it-pushable": "^3.2.3", - "it-stream-types": "^2.0.1", + "it-stream-types": "^2.0.2", "uint8-varint": "^2.0.4", "uint8arraylist": "^2.4.8", "uint8arrays": "^5.1.0" } }, "node_modules/@libp2p/multistream-select": { - "version": "6.0.9", - "resolved": "https://registry.npmjs.org/@libp2p/multistream-select/-/multistream-select-6.0.9.tgz", - "integrity": "sha512-yU+K4/jtXwt1WXMXSJTuhGnn6F97v/P0IOdMALMQlgmvSeGICDBNllX/i0r9y/DDwI/Hh61phB15aUgc/6pX8Q==", + "version": "6.0.10", + "resolved": "https://registry.npmjs.org/@libp2p/multistream-select/-/multistream-select-6.0.10.tgz", + "integrity": "sha512-u2sxsPk18cmJl1GLbfKgV+HXcFP2e873411PPwfQgMqTuNYXvJZheJWxV/nz7LjB3XelHxgYPpDVkMvK/kjMyw==", "license": "Apache-2.0 OR MIT", "dependencies": { - "@libp2p/interface": "^2.2.1", - "it-length-prefixed": "^9.0.4", - "it-length-prefixed-stream": "^1.1.7", - "it-stream-types": "^2.0.1", + "@libp2p/interface": "^2.3.0", + "it-length-prefixed": "^9.1.0", + "it-length-prefixed-stream": "^1.2.0", + "it-stream-types": "^2.0.2", "p-defer": "^4.0.1", - "race-signal": "^1.0.2", + "race-signal": "^1.1.0", "uint8-varint": "^2.0.4", "uint8arraylist": "^2.4.8", "uint8arrays": "^5.1.0" } }, "node_modules/@libp2p/peer-collections": { - "version": "6.0.12", - "resolved": "https://registry.npmjs.org/@libp2p/peer-collections/-/peer-collections-6.0.12.tgz", - "integrity": "sha512-JQvnCZ5rUiFkznQTOblNF+xE0ddmETn1f3FyYP9vHALOPrgdQkoZeY1b1W3Gz7gA8CXZ//cluHE+ZBiavDbNIg==", + "version": "6.0.13", + "resolved": "https://registry.npmjs.org/@libp2p/peer-collections/-/peer-collections-6.0.13.tgz", + "integrity": "sha512-BjpXs3kWegnNay2CApntOkL9tPyzTxC2lKUt0Mj9qntmOp1BF/zWY982U1X4ScjCE/M9Nh9x/w4Z/GKCT+K5lQ==", "license": "Apache-2.0 OR MIT", "dependencies": { - "@libp2p/interface": "^2.2.1", - "@libp2p/peer-id": "^5.0.8", - "@libp2p/utils": "^6.2.1", - "multiformats": "^13.2.2" + "@libp2p/interface": "^2.3.0", + "@libp2p/peer-id": "^5.0.9", + "@libp2p/utils": "^6.3.0", + "multiformats": "^13.3.1" } }, "node_modules/@libp2p/peer-id": { - "version": "5.0.8", - "resolved": "https://registry.npmjs.org/@libp2p/peer-id/-/peer-id-5.0.8.tgz", - "integrity": "sha512-vil9cch+qtqchSlrgG0Zw82uCW8XsyeOJc6DaIiS2hI01cMOIChT4CKjTn0iV5k2yw/niycQPjLrYQzy7tBIYg==", + "version": "5.0.9", + "resolved": "https://registry.npmjs.org/@libp2p/peer-id/-/peer-id-5.0.9.tgz", + "integrity": "sha512-TgWOPbU7AcUdSiHomL2wcg9eJqjoMCvCmU5eq/3fyBygTaG4BiQA/tYKuTEfeB5YPMdG1cJLmxgpk/a+ZRkY1g==", "license": "Apache-2.0 OR MIT", "dependencies": { - "@libp2p/crypto": "^5.0.7", - "@libp2p/interface": "^2.2.1", - "multiformats": "^13.1.0", + "@libp2p/crypto": "^5.0.8", + "@libp2p/interface": "^2.3.0", + "multiformats": "^13.3.1", "uint8arrays": "^5.1.0" } }, "node_modules/@libp2p/peer-record": { - "version": "8.0.12", - "resolved": "https://registry.npmjs.org/@libp2p/peer-record/-/peer-record-8.0.12.tgz", - "integrity": "sha512-N8OyAAgQwBCUB7AtSlI0AQun45SeBS5UWMnhO9JLAzzNUOZiMk+IfBwEu8dpJ0E311QK2vGY1suoxTsauqMSjg==", + "version": "8.0.13", + "resolved": "https://registry.npmjs.org/@libp2p/peer-record/-/peer-record-8.0.13.tgz", + "integrity": "sha512-4+jd3UvlF3sUoHpjPToy9AdW3ReF/ipvA9yBdl5axDKWxjJVOfyG8DvLRGJsTvm12gLdvb7vDgmEtpUPwWqjGQ==", "license": "Apache-2.0 OR MIT", "dependencies": { - "@libp2p/crypto": "^5.0.7", - "@libp2p/interface": "^2.2.1", - "@libp2p/peer-id": "^5.0.8", - "@libp2p/utils": "^6.2.1", - "@multiformats/multiaddr": "^12.2.3", - "multiformats": "^13.2.2", - "protons-runtime": "^5.4.0", + "@libp2p/crypto": "^5.0.8", + "@libp2p/interface": "^2.3.0", + "@libp2p/peer-id": "^5.0.9", + "@libp2p/utils": "^6.3.0", + "@multiformats/multiaddr": "^12.3.3", + "multiformats": "^13.3.1", + "protons-runtime": "^5.5.0", "uint8-varint": "^2.0.4", "uint8arraylist": "^2.4.8", "uint8arrays": "^5.1.0" } }, "node_modules/@libp2p/peer-store": { - "version": "11.0.12", - "resolved": "https://registry.npmjs.org/@libp2p/peer-store/-/peer-store-11.0.12.tgz", - "integrity": "sha512-wCPvrmdm+fua28xY6THVskawNDhKxo9O9suif9MAy6Nb9Drr+WiOGucHasOrs/ELvkuU3nc/zxvyWjk8MlTEfw==", + "version": "11.0.13", + "resolved": "https://registry.npmjs.org/@libp2p/peer-store/-/peer-store-11.0.13.tgz", + "integrity": "sha512-KieXSY8ysyC7ROJ7GI7dtQkowRFDuG2jk5HQedSXNUe74JurG0uI/HddFF8yij+HgY/kZiBwWUQbKrTC4Cewbw==", "license": "Apache-2.0 OR MIT", "dependencies": { - "@libp2p/crypto": "^5.0.7", - "@libp2p/interface": "^2.2.1", - "@libp2p/peer-id": "^5.0.8", - "@libp2p/peer-record": "^8.0.12", - "@multiformats/multiaddr": "^12.2.3", - "interface-datastore": "^8.3.0", + "@libp2p/crypto": "^5.0.8", + "@libp2p/interface": "^2.3.0", + "@libp2p/peer-id": "^5.0.9", + "@libp2p/peer-record": "^8.0.13", + "@multiformats/multiaddr": "^12.3.3", + "interface-datastore": "^8.3.1", "it-all": "^3.0.6", - "mortice": "^3.0.4", - "multiformats": "^13.1.0", - "protons-runtime": "^5.4.0", + "mortice": "^3.0.6", + "multiformats": "^13.3.1", + "protons-runtime": "^5.5.0", "uint8arraylist": "^2.4.8", "uint8arrays": "^5.1.0" } }, "node_modules/@libp2p/ping": { - "version": "2.0.12", - "resolved": "https://registry.npmjs.org/@libp2p/ping/-/ping-2.0.12.tgz", - "integrity": "sha512-wJKJ9PmAQbcXl/V5iZfmypztptVS6mRAZjpidDHOwUxSTmxgnd9HadJEgiQ1dUJjaMe4JUmLhb3+ym+RS48alg==", + "version": "2.0.14", + "resolved": "https://registry.npmjs.org/@libp2p/ping/-/ping-2.0.14.tgz", + "integrity": "sha512-+idRl+4T2bhP+FNDgwBFWHyHkFoOcjwzQmezLR00mG8hg2iH3BvDmzMd7cagZM21SaeDd4eiN8XyhQqyi1RcZA==", "license": "Apache-2.0 OR MIT", "dependencies": { - "@libp2p/crypto": "^5.0.7", - "@libp2p/interface": "^2.2.1", - "@libp2p/interface-internal": "^2.1.1", - "@multiformats/multiaddr": "^12.2.3", + "@libp2p/crypto": "^5.0.8", + "@libp2p/interface": "^2.3.0", + "@libp2p/interface-internal": "^2.2.1", + "@multiformats/multiaddr": "^12.3.3", "it-byte-stream": "^1.1.0", "uint8arrays": "^5.1.0" } @@ -4483,40 +4485,40 @@ } }, "node_modules/@libp2p/tcp": { - "version": "10.0.13", - "resolved": "https://registry.npmjs.org/@libp2p/tcp/-/tcp-10.0.13.tgz", - "integrity": "sha512-1oxkfMGJdnACSeq75k+K1JM9KkPUFgp7U/YH6+4f884MC7crciV28+FtrIoxS+79gX+EZeUOzvCPLWbuQddk9Q==", + "version": "10.0.14", + "resolved": "https://registry.npmjs.org/@libp2p/tcp/-/tcp-10.0.14.tgz", + "integrity": "sha512-HwYCvNnSqjVzoy3DQh6chy4EwWgmnII+ccT/LEpitKbV8QzHTv2HUeSaGtuGc42Z95rFMXqmJeqBkhbXcpeCRA==", "license": "Apache-2.0 OR MIT", "dependencies": { - "@libp2p/interface": "^2.2.1", - "@libp2p/utils": "^6.2.1", + "@libp2p/interface": "^2.3.0", + "@libp2p/utils": "^6.3.0", "@multiformats/mafmt": "^12.1.6", - "@multiformats/multiaddr": "^12.2.3", + "@multiformats/multiaddr": "^12.3.3", "@types/sinon": "^17.0.3", "p-defer": "^4.0.1", "p-event": "^6.0.1", - "progress-events": "^1.0.0", + "progress-events": "^1.0.1", "race-event": "^1.3.0", "stream-to-it": "^1.0.1" } }, "node_modules/@libp2p/tls": { - "version": "2.0.11", - "resolved": "https://registry.npmjs.org/@libp2p/tls/-/tls-2.0.11.tgz", - "integrity": "sha512-kUBC1CneZgFPP0p084ecHGOnFURxOfZgJXRRSXYrZhK/pv8xpJcO2GPebsNlJDkuId/sX22koGYBZV+xDIVEgg==", + "version": "2.0.12", + "resolved": "https://registry.npmjs.org/@libp2p/tls/-/tls-2.0.12.tgz", + "integrity": "sha512-OyxGH4Eg8dFGAkpdpwy1xf4vwcT1f+PFzEnFOiD2ql0RTLh/fEpkeNOd+2D2qvMhHa0a3gYH9hFiyswSIz+CGQ==", "license": "Apache-2.0 OR MIT", "dependencies": { - "@libp2p/crypto": "^5.0.7", - "@libp2p/interface": "^2.2.1", - "@libp2p/peer-id": "^5.0.8", - "@peculiar/asn1-schema": "^2.3.8", - "@peculiar/asn1-x509": "^2.3.8", - "@peculiar/webcrypto": "^1.4.6", - "@peculiar/x509": "^1.9.7", + "@libp2p/crypto": "^5.0.8", + "@libp2p/interface": "^2.3.0", + "@libp2p/peer-id": "^5.0.9", + "@peculiar/asn1-schema": "^2.3.13", + "@peculiar/asn1-x509": "^2.3.13", + "@peculiar/webcrypto": "^1.5.0", + "@peculiar/x509": "^1.12.3", "asn1js": "^3.0.5", "it-pushable": "^3.2.3", - "it-stream-types": "^2.0.1", - "protons-runtime": "^5.4.0", + "it-stream-types": "^2.0.2", + "protons-runtime": "^5.5.0", "uint8arraylist": "^2.4.8", "uint8arrays": "^5.1.0" } @@ -4539,16 +4541,17 @@ } }, "node_modules/@libp2p/utils": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/@libp2p/utils/-/utils-6.2.1.tgz", - "integrity": "sha512-uORuQLB75MgbrDA6i0rCw/fqNFgCs1dO3c21Z5WNdRCA4Lcvhgi6wnUf45DwgNCqtljDAnBR0FYI+UbEp5yAuA==", + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/@libp2p/utils/-/utils-6.3.0.tgz", + "integrity": "sha512-1zF9xwxtAjg7N54deR3l45d0awLsuO8cacfp9J4vE+4RjrtKSa40IxhunLOp52ctm9H17wixlXUhoP85Ki8F3w==", "license": "Apache-2.0 OR MIT", "dependencies": { "@chainsafe/is-ip": "^2.0.2", - "@libp2p/crypto": "^5.0.7", - "@libp2p/interface": "^2.2.1", - "@libp2p/logger": "^5.1.4", - "@multiformats/multiaddr": "^12.2.3", + "@chainsafe/netmask": "^2.0.0", + "@libp2p/crypto": "^5.0.8", + "@libp2p/interface": "^2.3.0", + "@libp2p/logger": "^5.1.5", + "@multiformats/multiaddr": "^12.3.3", "@sindresorhus/fnv1a": "^3.1.0", "@types/murmurhash3js-revisited": "^3.0.3", "any-signal": "^4.1.1", @@ -4558,42 +4561,42 @@ "it-foreach": "^2.1.1", "it-pipe": "^3.0.1", "it-pushable": "^3.2.3", - "it-stream-types": "^2.0.1", + "it-stream-types": "^2.0.2", "murmurhash3js-revisited": "^3.0.0", "netmask": "^2.0.2", "p-defer": "^4.0.1", "race-event": "^1.3.0", - "race-signal": "^1.0.2", + "race-signal": "^1.1.0", "uint8arraylist": "^2.4.8", "uint8arrays": "^5.1.0" } }, "node_modules/@libp2p/webrtc": { - "version": "5.0.19", - "resolved": "https://registry.npmjs.org/@libp2p/webrtc/-/webrtc-5.0.19.tgz", - "integrity": "sha512-WicT2mraZf4ZKqt73MYvfAUvOQehZDPT673GThA3yK02eR6B/c9MenMuUbNb3qGsE4b5yhMjioYjZPahWpxcBw==", + "version": "5.0.22", + "resolved": "https://registry.npmjs.org/@libp2p/webrtc/-/webrtc-5.0.22.tgz", + "integrity": "sha512-WVJC4mhFYdZ1wKTZxAwTMXyLqkfcLRM86J8wKgRNTAfvZqet1HQuJ5U/Hp4CngNnuLGHqOKVdn6obDcy6nMWww==", "license": "Apache-2.0 OR MIT", "dependencies": { "@chainsafe/libp2p-noise": "^16.0.0", - "@libp2p/interface": "^2.2.1", - "@libp2p/interface-internal": "^2.1.1", - "@libp2p/peer-id": "^5.0.8", - "@libp2p/utils": "^6.2.1", - "@multiformats/multiaddr": "^12.2.3", - "@multiformats/multiaddr-matcher": "^1.2.1", + "@libp2p/interface": "^2.3.0", + "@libp2p/interface-internal": "^2.2.1", + "@libp2p/peer-id": "^5.0.9", + "@libp2p/utils": "^6.3.0", + "@multiformats/multiaddr": "^12.3.3", + "@multiformats/multiaddr-matcher": "^1.6.0", "detect-browser": "^5.3.0", - "it-length-prefixed": "^9.0.4", - "it-protobuf-stream": "^1.1.3", + "it-length-prefixed": "^9.1.0", + "it-protobuf-stream": "^1.1.5", "it-pushable": "^3.2.3", - "it-stream-types": "^2.0.1", - "multiformats": "^13.1.0", + "it-stream-types": "^2.0.2", + "multiformats": "^13.3.1", "node-datachannel": "^0.11.0", "p-defer": "^4.0.1", "p-event": "^6.0.1", - "p-timeout": "^6.1.2", - "progress-events": "^1.0.0", - "protons-runtime": "^5.4.0", - "race-signal": "^1.0.2", + "p-timeout": "^6.1.3", + "progress-events": "^1.0.1", + "protons-runtime": "^5.5.0", + "race-signal": "^1.1.0", "react-native-webrtc": "^124.0.4", "uint8-varint": "^2.0.4", "uint8arraylist": "^2.4.8", @@ -4601,50 +4604,41 @@ } }, "node_modules/@libp2p/websockets": { - "version": "9.0.13", - "resolved": "https://registry.npmjs.org/@libp2p/websockets/-/websockets-9.0.13.tgz", - "integrity": "sha512-e1Lukn8kzJC7YbfufT8rOy/BXUyl213srb+zizFu4JkTRloChEjq7VzARPo9lrMQye71JrTi2eBg+O/XadERsg==", + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/@libp2p/websockets/-/websockets-9.1.0.tgz", + "integrity": "sha512-110hKTaCO13nUxUAr5KQPyomzbXbwkoyeY0Xr5urX8oAA7R3hQrcs8+luWpouiF8Ui5SvmeWDN8t2yPMoH2v5g==", "license": "Apache-2.0 OR MIT", "dependencies": { - "@libp2p/interface": "^2.2.1", - "@libp2p/utils": "^6.2.1", - "@multiformats/multiaddr": "^12.2.3", - "@multiformats/multiaddr-matcher": "^1.4.0", - "@multiformats/multiaddr-to-uri": "^10.0.1", - "@types/ws": "^8.5.10", - "it-ws": "^6.1.1", + "@libp2p/interface": "^2.3.0", + "@libp2p/utils": "^6.3.0", + "@multiformats/multiaddr": "^12.3.3", + "@multiformats/multiaddr-matcher": "^1.6.0", + "@multiformats/multiaddr-to-uri": "^11.0.0", + "@types/ws": "^8.5.13", + "it-ws": "^6.1.5", "p-defer": "^4.0.1", - "progress-events": "^1.0.0", - "race-signal": "^1.0.2", - "wherearewe": "^2.0.1", - "ws": "^8.17.0" - } - }, - "node_modules/@libp2p/websockets/node_modules/@multiformats/multiaddr-to-uri": { - "version": "10.1.2", - "resolved": "https://registry.npmjs.org/@multiformats/multiaddr-to-uri/-/multiaddr-to-uri-10.1.2.tgz", - "integrity": "sha512-6sicfYRjJlHJn4bwsQancs8kXncWU4dDN/+V9sMVTYp9hi8ovWgVkK75AbAv4SfhztmmI+oufVUncQ1n+SukKQ==", - "license": "Apache-2.0 OR MIT", - "dependencies": { - "@multiformats/multiaddr": "^12.3.0" + "p-event": "^6.0.1", + "progress-events": "^1.0.1", + "race-signal": "^1.1.0", + "ws": "^8.18.0" } }, "node_modules/@libp2p/webtransport": { - "version": "5.0.18", - "resolved": "https://registry.npmjs.org/@libp2p/webtransport/-/webtransport-5.0.18.tgz", - "integrity": "sha512-JDWJB7Nh8MR35sNhHpKg6/OcW6nJu4Tu8Lsb1dXHvMBhYC8Y/Ndu+DsEZ/zFZqOWnfzZmNr7kvYNK/mPiHFZGw==", + "version": "5.0.21", + "resolved": "https://registry.npmjs.org/@libp2p/webtransport/-/webtransport-5.0.21.tgz", + "integrity": "sha512-8b+uZ7dHcT3otu3tqAqhpF2RaPRKwJ041bpIU2GGTqyPha76M9p2PaS8SrPxifC+L7qj+ZjXOE0IVZPGh1k+Lg==", "license": "Apache-2.0 OR MIT", "dependencies": { "@chainsafe/libp2p-noise": "^16.0.0", - "@libp2p/interface": "^2.2.1", - "@libp2p/peer-id": "^5.0.8", - "@libp2p/utils": "^6.2.1", - "@multiformats/multiaddr": "^12.2.3", - "@multiformats/multiaddr-matcher": "^1.2.1", - "it-stream-types": "^2.0.1", - "multiformats": "^13.1.0", - "progress-events": "^1.0.0", - "race-signal": "^1.0.2", + "@libp2p/interface": "^2.3.0", + "@libp2p/peer-id": "^5.0.9", + "@libp2p/utils": "^6.3.0", + "@multiformats/multiaddr": "^12.3.3", + "@multiformats/multiaddr-matcher": "^1.6.0", + "it-stream-types": "^2.0.2", + "multiformats": "^13.3.1", + "progress-events": "^1.0.1", + "race-signal": "^1.1.0", "uint8arraylist": "^2.4.8", "uint8arrays": "^5.1.0" } @@ -5181,13 +5175,13 @@ } }, "node_modules/@playwright/test": { - "version": "1.49.0", - "resolved": "https://registry.npmjs.org/@playwright/test/-/test-1.49.0.tgz", - "integrity": "sha512-DMulbwQURa8rNIQrf94+jPJQ4FmOVdpE5ZppRNvWVjvhC+6sOeo28r8MgIpQRYouXRtt/FCCXU7zn20jnHR4Qw==", + "version": "1.49.1", + "resolved": "https://registry.npmjs.org/@playwright/test/-/test-1.49.1.tgz", + "integrity": "sha512-Ky+BVzPz8pL6PQxHqNRW1k3mIyv933LML7HktS8uik0bUXNCdPhoS/kLihiO1tMf/egaJb4IutXd7UywvXEW+g==", "dev": true, "license": "Apache-2.0", "dependencies": { - "playwright": "1.49.0" + "playwright": "1.49.1" }, "bin": { "playwright": "cli.js" @@ -5256,9 +5250,9 @@ "license": "MIT" }, "node_modules/@react-native/assets-registry": { - "version": "0.76.4", - "resolved": "https://registry.npmjs.org/@react-native/assets-registry/-/assets-registry-0.76.4.tgz", - "integrity": "sha512-S2qgMmB08JIeKz/0bSoE0X4NNTCIVjquINZzGnYTBWllq5COGmB8MVFcAYF52GkbTlMjVVFSsnVjcLwV4aNXEw==", + "version": "0.76.5", + "resolved": "https://registry.npmjs.org/@react-native/assets-registry/-/assets-registry-0.76.5.tgz", + "integrity": "sha512-MN5dasWo37MirVcKWuysRkRr4BjNc81SXwUtJYstwbn8oEkfnwR9DaqdDTo/hHOnTdhafffLIa2xOOHcjDIGEw==", "license": "MIT", "peer": true, "engines": { @@ -5266,22 +5260,22 @@ } }, "node_modules/@react-native/babel-plugin-codegen": { - "version": "0.76.4", - "resolved": "https://registry.npmjs.org/@react-native/babel-plugin-codegen/-/babel-plugin-codegen-0.76.4.tgz", - "integrity": "sha512-JMK8Ad6YOWrR74mLlA5w7ycOzZ5zlb6pU6v38J7F4DVTToeWAFAi+Hqy0p5FtvJlfKyxVuPB3kFeQ0YL2JA/0A==", + "version": "0.76.5", + "resolved": "https://registry.npmjs.org/@react-native/babel-plugin-codegen/-/babel-plugin-codegen-0.76.5.tgz", + "integrity": "sha512-xe7HSQGop4bnOLMaXt0aU+rIatMNEQbz242SDl8V9vx5oOTI0VbZV9yLy6yBc6poUlYbcboF20YVjoRsxX4yww==", "license": "MIT", "peer": true, "dependencies": { - "@react-native/codegen": "0.76.4" + "@react-native/codegen": "0.76.5" }, "engines": { "node": ">=18" } }, "node_modules/@react-native/babel-preset": { - "version": "0.76.4", - "resolved": "https://registry.npmjs.org/@react-native/babel-preset/-/babel-preset-0.76.4.tgz", - "integrity": "sha512-D++oMqmBXeibWI8BMeH1goMhR8dHGkQwu9tJoR7zxNapFZuPrjkCzWXQ4fiJrk1plaQnp9W05x+CpSabsiJqSg==", + "version": "0.76.5", + "resolved": "https://registry.npmjs.org/@react-native/babel-preset/-/babel-preset-0.76.5.tgz", + "integrity": "sha512-1Nu5Um4EogOdppBLI4pfupkteTjWfmI0hqW8ezWTg7Bezw0FtBj8yS8UYVd3wTnDFT9A5mA2VNoNUqomJnvj2A==", "license": "MIT", "peer": true, "dependencies": { @@ -5326,7 +5320,7 @@ "@babel/plugin-transform-typescript": "^7.25.2", "@babel/plugin-transform-unicode-regex": "^7.24.7", "@babel/template": "^7.25.0", - "@react-native/babel-plugin-codegen": "0.76.4", + "@react-native/babel-plugin-codegen": "0.76.5", "babel-plugin-syntax-hermes-parser": "^0.25.1", "babel-plugin-transform-flow-enums": "^0.0.2", "react-refresh": "^0.14.0" @@ -5366,9 +5360,9 @@ } }, "node_modules/@react-native/codegen": { - "version": "0.76.4", - "resolved": "https://registry.npmjs.org/@react-native/codegen/-/codegen-0.76.4.tgz", - "integrity": "sha512-ZiV1D0pF1QS54MzVHCacNT5foSk6HxgqH07vswFLqH2GTQaytHd8TZF9XBOzDxOjmLuiR8KEO1ZY1F3bN1sW4A==", + "version": "0.76.5", + "resolved": "https://registry.npmjs.org/@react-native/codegen/-/codegen-0.76.5.tgz", + "integrity": "sha512-FoZ9VRQ5MpgtDAnVo1rT9nNRfjnWpE40o1GeJSDlpUMttd36bVXvsDm8W/NhX8BKTWXSX+CPQJsRcvN1UPYGKg==", "license": "MIT", "peer": true, "dependencies": { @@ -5435,14 +5429,14 @@ } }, "node_modules/@react-native/community-cli-plugin": { - "version": "0.76.4", - "resolved": "https://registry.npmjs.org/@react-native/community-cli-plugin/-/community-cli-plugin-0.76.4.tgz", - "integrity": "sha512-IcXic/21To3oS2/PnrvOm8WpR2PvmclBsZUlB1o/wVdd/+LIaq7AS0qTh32AR1sluV07Q6TD7t68abD7Ahl4tA==", + "version": "0.76.5", + "resolved": "https://registry.npmjs.org/@react-native/community-cli-plugin/-/community-cli-plugin-0.76.5.tgz", + "integrity": "sha512-3MKMnlU0cZOWlMhz5UG6WqACJiWUrE3XwBEumzbMmZw3Iw3h+fIsn+7kLLE5EhzqLt0hg5Y4cgYFi4kOaNgq+g==", "license": "MIT", "peer": true, "dependencies": { - "@react-native/dev-middleware": "0.76.4", - "@react-native/metro-babel-transformer": "0.76.4", + "@react-native/dev-middleware": "0.76.5", + "@react-native/metro-babel-transformer": "0.76.5", "chalk": "^4.0.0", "execa": "^5.1.1", "invariant": "^2.2.4", @@ -5595,9 +5589,9 @@ } }, "node_modules/@react-native/debugger-frontend": { - "version": "0.76.4", - "resolved": "https://registry.npmjs.org/@react-native/debugger-frontend/-/debugger-frontend-0.76.4.tgz", - "integrity": "sha512-NrikafRPP6xoAcPiTKTIL8wJtza2r2+BAvtthqba+PvGAwRJxzmW2C75uvyP3IfVHxUiBAm6BalBLu8ADPhQ0g==", + "version": "0.76.5", + "resolved": "https://registry.npmjs.org/@react-native/debugger-frontend/-/debugger-frontend-0.76.5.tgz", + "integrity": "sha512-5gtsLfBaSoa9WP8ToDb/8NnDBLZjv4sybQQj7rDKytKOdsXm3Pr2y4D7x7GQQtP1ZQRqzU0X0OZrhRz9xNnOqA==", "license": "BSD-3-Clause", "peer": true, "engines": { @@ -5605,14 +5599,14 @@ } }, "node_modules/@react-native/dev-middleware": { - "version": "0.76.4", - "resolved": "https://registry.npmjs.org/@react-native/dev-middleware/-/dev-middleware-0.76.4.tgz", - "integrity": "sha512-cbTAfsS2wyEEp1F+ch8T9nIJqymb/3lxA0yQqrhbv/RG7UQqvaikY3R+VtIo1jWXXcDceF4RuayjVO/uIGdwrA==", + "version": "0.76.5", + "resolved": "https://registry.npmjs.org/@react-native/dev-middleware/-/dev-middleware-0.76.5.tgz", + "integrity": "sha512-f8eimsxpkvMgJia7POKoUu9uqjGF6KgkxX4zqr/a6eoR1qdEAWUd6PonSAqtag3PAqvEaJpB99gLH2ZJI1nDGg==", "license": "MIT", "peer": true, "dependencies": { "@isaacs/ttlcache": "^1.4.1", - "@react-native/debugger-frontend": "0.76.4", + "@react-native/debugger-frontend": "0.76.5", "chrome-launcher": "^0.15.2", "chromium-edge-launcher": "^0.2.0", "connect": "^3.6.5", @@ -5655,9 +5649,9 @@ } }, "node_modules/@react-native/gradle-plugin": { - "version": "0.76.4", - "resolved": "https://registry.npmjs.org/@react-native/gradle-plugin/-/gradle-plugin-0.76.4.tgz", - "integrity": "sha512-xTL7T3u8f3/C3vaK06UY+mF7XKMSoGBx8GUKVM9MZ5lbvKTTTktn3/GlHzJBr/9c9WKtVLEnk/EjKLcm6JZrwQ==", + "version": "0.76.5", + "resolved": "https://registry.npmjs.org/@react-native/gradle-plugin/-/gradle-plugin-0.76.5.tgz", + "integrity": "sha512-7KSyD0g0KhbngITduC8OABn0MAlJfwjIdze7nA4Oe1q3R7qmAv+wQzW+UEXvPah8m1WqFjYTkQwz/4mK3XrQGw==", "license": "MIT", "peer": true, "engines": { @@ -5665,9 +5659,9 @@ } }, "node_modules/@react-native/js-polyfills": { - "version": "0.76.4", - "resolved": "https://registry.npmjs.org/@react-native/js-polyfills/-/js-polyfills-0.76.4.tgz", - "integrity": "sha512-yBNx3a6S3e9+H7sBb9rQr0FhwKZdptofENguv1HiqgyGs3Tu+TMbd1xsl0vuxhB/B9ICa8xb+lnrpLtNRgtcSQ==", + "version": "0.76.5", + "resolved": "https://registry.npmjs.org/@react-native/js-polyfills/-/js-polyfills-0.76.5.tgz", + "integrity": "sha512-ggM8tcKTcaqyKQcXMIvcB0vVfqr9ZRhWVxWIdiFO1mPvJyS6n+a+lLGkgQAyO8pfH0R1qw6K9D0nqbbDo865WQ==", "license": "MIT", "peer": true, "engines": { @@ -5675,14 +5669,14 @@ } }, "node_modules/@react-native/metro-babel-transformer": { - "version": "0.76.4", - "resolved": "https://registry.npmjs.org/@react-native/metro-babel-transformer/-/metro-babel-transformer-0.76.4.tgz", - "integrity": "sha512-+YyYLKhtOso1GwrIis6L/LS5we4gnXI6S57Uya5s0Oz/MJVvJZiGSppJgBa4MJci90WU9OE0oHDe1EnFH+e0iQ==", + "version": "0.76.5", + "resolved": "https://registry.npmjs.org/@react-native/metro-babel-transformer/-/metro-babel-transformer-0.76.5.tgz", + "integrity": "sha512-Cm9G5Sg5BDty3/MKa3vbCAJtT3YHhlEaPlQALLykju7qBS+pHZV9bE9hocfyyvc5N/osTIGWxG5YOfqTeMu1oQ==", "license": "MIT", "peer": true, "dependencies": { "@babel/core": "^7.25.2", - "@react-native/babel-preset": "0.76.4", + "@react-native/babel-preset": "0.76.5", "hermes-parser": "0.23.1", "nullthrows": "^1.1.1" }, @@ -5694,16 +5688,16 @@ } }, "node_modules/@react-native/normalize-colors": { - "version": "0.76.4", - "resolved": "https://registry.npmjs.org/@react-native/normalize-colors/-/normalize-colors-0.76.4.tgz", - "integrity": "sha512-qqkYV6iNUjlmyH5cvDIboNckUaOIGTHbMANkrMRL+MPffB/AFFyHnlKWJh0nILFqyUr3DIzqRAP8z6v0DUbGjA==", + "version": "0.76.5", + "resolved": "https://registry.npmjs.org/@react-native/normalize-colors/-/normalize-colors-0.76.5.tgz", + "integrity": "sha512-6QRLEok1r55gLqj+94mEWUENuU5A6wsr2OoXpyq/CgQ7THWowbHtru/kRGRr6o3AQXrVnZheR60JNgFcpNYIug==", "license": "MIT", "peer": true }, "node_modules/@react-native/virtualized-lists": { - "version": "0.76.4", - "resolved": "https://registry.npmjs.org/@react-native/virtualized-lists/-/virtualized-lists-0.76.4.tgz", - "integrity": "sha512-QLL86rgKhgK7shh3sLB3KoTMdAHIrqcrjMzSJIXeEr42PZkScMITGdDqq/cpx2zpp635pYJt/6d3Ithk00NrGA==", + "version": "0.76.5", + "resolved": "https://registry.npmjs.org/@react-native/virtualized-lists/-/virtualized-lists-0.76.5.tgz", + "integrity": "sha512-M/fW1fTwxrHbcx0OiVOIxzG6rKC0j9cR9Csf80o77y1Xry0yrNPpAlf8D1ev3LvHsiAUiRNFlauoPtodrs2J1A==", "license": "MIT", "peer": true, "dependencies": { @@ -6148,9 +6142,9 @@ } }, "node_modules/@semantic-release/npm/node_modules/execa": { - "version": "9.5.1", - "resolved": "https://registry.npmjs.org/execa/-/execa-9.5.1.tgz", - "integrity": "sha512-QY5PPtSonnGwhhHDNI7+3RvY285c7iuJFFB+lU+oEzMY/gEGJ808owqJsrr8Otd1E/x07po1LkUBmdAc5duPAg==", + "version": "9.5.2", + "resolved": "https://registry.npmjs.org/execa/-/execa-9.5.2.tgz", + "integrity": "sha512-EHlpxMCpHWSAh1dgS6bVeoLAXGnJNdR93aabr4QCGbzOM73o5XmRfM/e5FUqsw3aagP8S8XEWUWFAxnRBnAF0Q==", "dev": true, "license": "MIT", "dependencies": { @@ -6744,9 +6738,9 @@ "license": "MIT" }, "node_modules/@types/node": { - "version": "22.10.1", - "resolved": "https://registry.npmjs.org/@types/node/-/node-22.10.1.tgz", - "integrity": "sha512-qKgsUwfHZV2WCWLAnVP1JqnpE6Im6h3Y0+fYgMTasNQ7V++CBX5OT1as0g0f+OyubbFqhf6XVNIsmN4IIhEgGQ==", + "version": "22.10.2", + "resolved": "https://registry.npmjs.org/@types/node/-/node-22.10.2.tgz", + "integrity": "sha512-Xxr6BBRCAOQixvonOye19wnzyDiUtTeqldOOmj3CkeblonbccA12PFwlufvRdrpjXxqnmUaeiU5EOA+7s5diUQ==", "license": "MIT", "dependencies": { "undici-types": "~6.20.0" @@ -6784,9 +6778,9 @@ "license": "MIT" }, "node_modules/@types/react": { - "version": "18.3.14", - "resolved": "https://registry.npmjs.org/@types/react/-/react-18.3.14.tgz", - "integrity": "sha512-NzahNKvjNhVjuPBQ+2G7WlxstQ+47kXZNHlUvFakDViuIEfGY926GqhMueQFZ7woG+sPiQKlF36XfrIUVSUfFg==", + "version": "18.3.16", + "resolved": "https://registry.npmjs.org/@types/react/-/react-18.3.16.tgz", + "integrity": "sha512-oh8AMIC4Y2ciKufU8hnKgs+ufgbA/dhPTACaZPM86AbwX9QwnFtSoPWEeRUj8fge+v6kFt78BXcDhAU1SrrAsw==", "devOptional": true, "license": "MIT", "dependencies": { @@ -7326,9 +7320,9 @@ } }, "node_modules/@ungap/structured-clone": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.2.0.tgz", - "integrity": "sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.2.1.tgz", + "integrity": "sha512-fEzPV3hSkSMltkw152tJKNARhOupqbH96MZWyRjNaYZOMIzbrTeQDG+MTc6Mr2pgzFQzFxAfmhGDNP5QK++2ZA==", "dev": true, "license": "ISC" }, @@ -7586,9 +7580,9 @@ } }, "node_modules/aegir/node_modules/@types/node": { - "version": "20.17.9", - "resolved": "https://registry.npmjs.org/@types/node/-/node-20.17.9.tgz", - "integrity": "sha512-0JOXkRyLanfGPE2QRCwgxhzlBAvaRdCNMcvbd7jFfpmD4eEXll7LRwy5ymJmyeZqk7Nh7eD2LeUyQ68BbndmXw==", + "version": "20.17.10", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.17.10.tgz", + "integrity": "sha512-/jrvh5h6NXhEauFFexRin69nA0uHJ5gwk4iDivp/DeoEua3uwCUto6PC86IpRITBOs4+6i2I56K5x5b6WYGXHA==", "dev": true, "license": "MIT", "dependencies": { @@ -7616,14 +7610,11 @@ "license": "MIT" }, "node_modules/agent-base": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.1.tgz", - "integrity": "sha512-H0TSyFNDMomMNJQBn8wFV5YC/2eJ+VXECwOadZJT554xP6cODZHPX3H9QMQECxvrgiSOP1pHjy1sMWQVYJOUOA==", + "version": "7.1.3", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.3.tgz", + "integrity": "sha512-jRR5wdylq8CkOe6hei19GGZnxM6rBGwFl3Bg0YItGDimvjGtAvdZk4Pu6Cl4u4Igsws4a1fd1Vq3ezrhn4KmFw==", "dev": true, "license": "MIT", - "dependencies": { - "debug": "^4.3.4" - }, "engines": { "node": ">= 14" } @@ -8678,13 +8669,13 @@ } }, "node_modules/c8": { - "version": "10.1.2", - "resolved": "https://registry.npmjs.org/c8/-/c8-10.1.2.tgz", - "integrity": "sha512-Qr6rj76eSshu5CgRYvktW0uM0CFY0yi4Fd5D0duDXO6sYinyopmftUiJVuzBQxQcwQLor7JWDVRP+dUfCmzgJw==", + "version": "10.1.3", + "resolved": "https://registry.npmjs.org/c8/-/c8-10.1.3.tgz", + "integrity": "sha512-LvcyrOAaOnrrlMpW22n690PUvxiq4Uf9WMhQwNJ9vgagkL/ph1+D4uvjvDA5XCbykrc0sx+ay6pVi9YZ1GnhyA==", "dev": true, "license": "ISC", "dependencies": { - "@bcoe/v8-coverage": "^0.2.3", + "@bcoe/v8-coverage": "^1.0.1", "@istanbuljs/schema": "^0.1.3", "find-up": "^5.0.0", "foreground-child": "^3.1.1", @@ -8815,9 +8806,9 @@ } }, "node_modules/call-bind-apply-helpers": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.0.tgz", - "integrity": "sha512-CCKAP2tkPau7D3GE8+V8R6sQubA9R5foIzGp+85EXCVSCivuxBNAWqcpn72PKYiIcqoViv/kcUDpaEIMBVi1lQ==", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.1.tgz", + "integrity": "sha512-BhYE+WDaywFg2TBWYNXAE+8B1ATnThNBqXHP5nQu0jWJdVvY2hvkpyB3qOmtmDePiS5/BDQ8wASEWGMWRG148g==", "dev": true, "license": "MIT", "dependencies": { @@ -8828,6 +8819,23 @@ "node": ">= 0.4" } }, + "node_modules/call-bound": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bound/-/call-bound-1.0.2.tgz", + "integrity": "sha512-0lk0PHFe/uz0vl527fG9CgdE9WdafjDbCXvBbs+LUv000TVt2Jjhqbs4Jwm8gz070w8xXyEAxrPOMullsxXeGg==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "get-intrinsic": "^1.2.5" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/caller-callsite": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/caller-callsite/-/caller-callsite-2.0.0.tgz", @@ -8934,9 +8942,9 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001687", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001687.tgz", - "integrity": "sha512-0S/FDhf4ZiqrTUiQ39dKeUjYRjkv7lOZU1Dgif2rIqrTzX/1wV2hfKu9TOm1IHkdSijfLswxTFzl/cvir+SLSQ==", + "version": "1.0.30001688", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001688.tgz", + "integrity": "sha512-Nmqpru91cuABu/DTCXbM2NSRHzM2uVHfPnhJ/1zEAJx/ILBRVmz3pzH4N7DZqbdG0gWClsCC05Oj0mJ/1AWMbA==", "funding": [ { "type": "opencollective", @@ -10859,6 +10867,21 @@ "node": ">=8" } }, + "node_modules/dunder-proto": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.0.tgz", + "integrity": "sha512-9+Sj30DIu+4KvHqMfLUGLFYL2PkURSYMVXJyXe92nFRvlYq5hBjLEhblKB+vkd/WVlUYMWigiY07T91Fkk0+4A==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.0", + "es-errors": "^1.3.0", + "gopd": "^1.2.0" + }, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/duplexer": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.2.tgz", @@ -10963,9 +10986,9 @@ } }, "node_modules/electron-to-chromium": { - "version": "1.5.71", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.71.tgz", - "integrity": "sha512-dB68l59BI75W1BUGVTAEJy45CEVuEGy9qPVVQ8pnHyHMn36PLPPoE1mjLH+lo9rKulO3HC2OhbACI/8tCqJBcA==", + "version": "1.5.73", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.73.tgz", + "integrity": "sha512-8wGNxG9tAG5KhGd3eeA0o6ixhiNdgr0DcHWm85XPCphwZgD1lIEoi6t3VERayWao7SF7AAZTw6oARGJeVjH8Kg==", "license": "ISC" }, "node_modules/electron-window": { @@ -11178,14 +11201,11 @@ } }, "node_modules/es-define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.0.tgz", - "integrity": "sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz", + "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==", "dev": true, "license": "MIT", - "dependencies": { - "get-intrinsic": "^1.2.4" - }, "engines": { "node": ">= 0.4" } @@ -13020,17 +13040,22 @@ } }, "node_modules/get-intrinsic": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.4.tgz", - "integrity": "sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==", + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.6.tgz", + "integrity": "sha512-qxsEs+9A+u85HhllWJJFicJfPDhRmjzoYdl64aMWW9yRIJmSyxdn8IEkuIM530/7T+lv0TIHd8L6Q/ra0tEoeA==", "dev": true, "license": "MIT", "dependencies": { + "call-bind-apply-helpers": "^1.0.1", + "dunder-proto": "^1.0.0", + "es-define-property": "^1.0.1", "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0", "function-bind": "^1.1.2", - "has-proto": "^1.0.1", - "has-symbols": "^1.0.3", - "hasown": "^2.0.0" + "gopd": "^1.2.0", + "has-symbols": "^1.1.0", + "hasown": "^2.0.2", + "math-intrinsics": "^1.0.0" }, "engines": { "node": ">= 0.4" @@ -13514,13 +13539,13 @@ } }, "node_modules/has-proto": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.1.0.tgz", - "integrity": "sha512-QLdzI9IIO1Jg7f9GT1gXpPpXArAn6cS31R1eEZqz08Gc+uQ8/XiqHWt17Fiw+2p6oTTIq5GXEpQkAlA88YRl/Q==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.2.0.tgz", + "integrity": "sha512-KIL7eQPfHQRC8+XluaIw7BHUwwqL19bQn4hzNgdr+1wXoU0KKj6rufu47lhY7KbJR2C6T6+PfyN0Ea7wkSS+qQ==", "dev": true, "license": "MIT", "dependencies": { - "call-bind": "^1.0.7" + "dunder-proto": "^1.0.0" }, "engines": { "node": ">= 0.4" @@ -13876,13 +13901,13 @@ } }, "node_modules/https-proxy-agent": { - "version": "7.0.5", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.5.tgz", - "integrity": "sha512-1e4Wqeblerz+tMKPIq2EMGiiWW1dIjZOksyHWSUm1rmuvw/how9hBHZ38lAGj5ID4Ik6EdkOw7NmWPy6LAwalw==", + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.6.tgz", + "integrity": "sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw==", "dev": true, "license": "MIT", "dependencies": { - "agent-base": "^7.0.2", + "agent-base": "^7.1.2", "debug": "4" }, "engines": { @@ -14252,9 +14277,9 @@ } }, "node_modules/ipfsd-ctl/node_modules/execa": { - "version": "9.5.1", - "resolved": "https://registry.npmjs.org/execa/-/execa-9.5.1.tgz", - "integrity": "sha512-QY5PPtSonnGwhhHDNI7+3RvY285c7iuJFFB+lU+oEzMY/gEGJ808owqJsrr8Otd1E/x07po1LkUBmdAc5duPAg==", + "version": "9.5.2", + "resolved": "https://registry.npmjs.org/execa/-/execa-9.5.2.tgz", + "integrity": "sha512-EHlpxMCpHWSAh1dgS6bVeoLAXGnJNdR93aabr4QCGbzOM73o5XmRfM/e5FUqsw3aagP8S8XEWUWFAxnRBnAF0Q==", "dev": true, "license": "MIT", "dependencies": { @@ -14586,12 +14611,14 @@ } }, "node_modules/is-data-view": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-data-view/-/is-data-view-1.0.1.tgz", - "integrity": "sha512-AHkaJrsUVW6wq6JS8y3JnM/GJF/9cf+k20+iDzlSaJrinEo5+7vRiteOSwBhHRiAyQATN1AmY4hwzxJKPmYf+w==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-data-view/-/is-data-view-1.0.2.tgz", + "integrity": "sha512-RKtWF8pGmS87i2D6gqQu/l7EYRlVdfzemCJN/P3UOs//x1QE7mfhvzHIApBTRf7axvT6DMGwSwBXYCT0nfB9xw==", "dev": true, "license": "MIT", "dependencies": { + "call-bound": "^1.0.2", + "get-intrinsic": "^1.2.6", "is-typed-array": "^1.1.13" }, "engines": { @@ -14927,14 +14954,14 @@ "license": "MIT" }, "node_modules/is-regex": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.2.0.tgz", - "integrity": "sha512-B6ohK4ZmoftlUe+uvenXSbPJFo6U37BH7oO1B3nQH8f/7h27N56s85MhUtbFJAziz5dcmuR3i8ovUl35zp8pFA==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.2.1.tgz", + "integrity": "sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g==", "dev": true, "license": "MIT", "dependencies": { - "call-bind": "^1.0.7", - "gopd": "^1.1.0", + "call-bound": "^1.0.2", + "gopd": "^1.2.0", "has-tostringtag": "^1.0.2", "hasown": "^2.0.2" }, @@ -16105,9 +16132,9 @@ } }, "node_modules/jsesc": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.0.2.tgz", - "integrity": "sha512-xKqzzWXDttJuOcawBt4KnKHHIf5oQ/Cxax+0PWFG+DFDgHNAdi+TXECADI+RYiFUMmx8792xsMbbgXj4CwnP4g==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.1.0.tgz", + "integrity": "sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==", "license": "MIT", "bin": { "jsesc": "bin/jsesc" @@ -16344,9 +16371,9 @@ } }, "node_modules/ky": { - "version": "1.7.2", - "resolved": "https://registry.npmjs.org/ky/-/ky-1.7.2.tgz", - "integrity": "sha512-OzIvbHKKDpi60TnF9t7UUVAF1B4mcqc02z5PIvrm08Wyb+yOcz63GRvEuVxNT18a9E1SrNouhB4W2NNLeD7Ykg==", + "version": "1.7.3", + "resolved": "https://registry.npmjs.org/ky/-/ky-1.7.3.tgz", + "integrity": "sha512-Sz49ZWR/BjNOq+2UK1k9ONZUVq8eyuCj30Zgc8VrRNtFlTBZduzuvehUd5kjQF6/Fms3Ir3EYqzJryw9tRvsSw==", "dev": true, "license": "MIT", "engines": { @@ -16397,36 +16424,38 @@ } }, "node_modules/libp2p": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/libp2p/-/libp2p-2.3.1.tgz", - "integrity": "sha512-b8SydqWzScHXiS5A+c29w2JGbkYBajW+AGFmWmtaF5r53ZpMTetnPmlczkT7D2Zd9+k4yKC7plGBWBNku/KNXQ==", + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/libp2p/-/libp2p-2.4.2.tgz", + "integrity": "sha512-8y+moEpzzkDjRbK7e+0k8zgtCnL4RkttFnjxrnzoVLQdk6ki3xf0SQkH3aD6FHyz8fdHlG48Av6BEOsT+F9TKg==", "license": "Apache-2.0 OR MIT", "dependencies": { - "@libp2p/crypto": "^5.0.7", - "@libp2p/interface": "^2.2.1", - "@libp2p/interface-internal": "^2.1.1", - "@libp2p/logger": "^5.1.4", - "@libp2p/multistream-select": "^6.0.9", - "@libp2p/peer-collections": "^6.0.12", - "@libp2p/peer-id": "^5.0.8", - "@libp2p/peer-store": "^11.0.12", - "@libp2p/utils": "^6.2.1", + "@chainsafe/is-ip": "^2.0.2", + "@chainsafe/netmask": "^2.0.0", + "@libp2p/crypto": "^5.0.8", + "@libp2p/interface": "^2.3.0", + "@libp2p/interface-internal": "^2.2.1", + "@libp2p/logger": "^5.1.5", + "@libp2p/multistream-select": "^6.0.10", + "@libp2p/peer-collections": "^6.0.13", + "@libp2p/peer-id": "^5.0.9", + "@libp2p/peer-store": "^11.0.13", + "@libp2p/utils": "^6.3.0", "@multiformats/dns": "^1.0.6", - "@multiformats/multiaddr": "^12.2.3", - "@multiformats/multiaddr-matcher": "^1.2.1", + "@multiformats/multiaddr": "^12.3.3", + "@multiformats/multiaddr-matcher": "^1.6.0", "any-signal": "^4.1.1", - "datastore-core": "^10.0.0", - "interface-datastore": "^8.3.0", - "it-byte-stream": "^1.0.12", + "datastore-core": "^10.0.2", + "interface-datastore": "^8.3.1", + "it-byte-stream": "^1.1.0", "it-merge": "^3.0.5", - "it-parallel": "^3.0.7", + "it-parallel": "^3.0.8", "merge-options": "^3.0.4", - "multiformats": "^13.1.0", + "multiformats": "^13.3.1", "p-defer": "^4.0.1", - "p-retry": "^6.2.0", - "progress-events": "^1.0.0", + "p-retry": "^6.2.1", + "progress-events": "^1.0.1", "race-event": "^1.3.0", - "race-signal": "^1.0.2", + "race-signal": "^1.1.0", "uint8arrays": "^5.1.0" } }, @@ -17101,9 +17130,9 @@ "license": "MIT" }, "node_modules/magic-string": { - "version": "0.30.14", - "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.14.tgz", - "integrity": "sha512-5c99P1WKTed11ZC0HMJOj6CDIue6F8ySu+bJL+85q1zBEIY8IklrJ1eiKC2NDRh3Ct3FcvmJPyQHb9erXMTJNw==", + "version": "0.30.15", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.15.tgz", + "integrity": "sha512-zXeaYRgZ6ldS1RJJUrMrYgNJ4fdwnyI6tVqoiIhyCyv5IVTK9BU8Ic2l253GGETQHxI4HNUwhJ3fjDhKqEoaAw==", "dev": true, "license": "MIT", "dependencies": { @@ -17278,6 +17307,16 @@ "node": ">=6" } }, + "node_modules/math-intrinsics": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.0.0.tgz", + "integrity": "sha512-4MqMiKP90ybymYvsut0CH2g4XWbfLtmlCkXmtmdcDCxNB+mQcu1w/1+L/VD7vi/PSv7X2JYV7SCcR+jiPXnQtA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, "node_modules/mdast-util-find-and-replace": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/mdast-util-find-and-replace/-/mdast-util-find-and-replace-3.0.1.tgz", @@ -19500,9 +19539,9 @@ } }, "node_modules/node-releases": { - "version": "2.0.18", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.18.tgz", - "integrity": "sha512-d9VeXT4SJ7ZeOqGX6R5EM022wpL+eWPooLI+5UpWn2jCT1aosUQEhQP214x33Wkwx3JQMvIm+tIoVOdodFS40g==", + "version": "2.0.19", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.19.tgz", + "integrity": "sha512-xxOWJsBKtzAq7DY0J+DTzuz58K8e7sJbdgwkbMWQe8UYB6ekmsQ45q0M/tJDsGaZmbC+l7n57UV8Hl5tHxO9uw==", "license": "MIT" }, "node_modules/normalize-package-data": { @@ -24781,13 +24820,13 @@ } }, "node_modules/playwright": { - "version": "1.49.0", - "resolved": "https://registry.npmjs.org/playwright/-/playwright-1.49.0.tgz", - "integrity": "sha512-eKpmys0UFDnfNb3vfsf8Vx2LEOtflgRebl0Im2eQQnYMA4Aqd+Zw8bEOB+7ZKvN76901mRnqdsiOGKxzVTbi7A==", + "version": "1.49.1", + "resolved": "https://registry.npmjs.org/playwright/-/playwright-1.49.1.tgz", + "integrity": "sha512-VYL8zLoNTBxVOrJBbDuRgDWa3i+mfQgDTrL8Ah9QXZ7ax4Dsj0MSq5bYgytRnDVVe+njoKnfsYkH3HzqVj5UZA==", "dev": true, "license": "Apache-2.0", "dependencies": { - "playwright-core": "1.49.0" + "playwright-core": "1.49.1" }, "bin": { "playwright": "cli.js" @@ -24800,9 +24839,9 @@ } }, "node_modules/playwright-core": { - "version": "1.49.0", - "resolved": "https://registry.npmjs.org/playwright-core/-/playwright-core-1.49.0.tgz", - "integrity": "sha512-R+3KKTQF3npy5GTiKH/T+kdhoJfJojjHESR1YEWhYuEKRVfVaxH3+4+GvXE5xyCngCxhxnykk0Vlah9v8fs3jA==", + "version": "1.49.1", + "resolved": "https://registry.npmjs.org/playwright-core/-/playwright-core-1.49.1.tgz", + "integrity": "sha512-BzmpVcs4kE2CH15rWfzpjzVGhWERJfmnXmniSyKeRZUs9Ws65m+RGIi7mjJK/euCegfn3i7jvqWeWyHe9y3Vgg==", "dev": true, "license": "Apache-2.0", "bin": { @@ -25337,9 +25376,9 @@ } }, "node_modules/playwright-test/node_modules/execa": { - "version": "9.5.1", - "resolved": "https://registry.npmjs.org/execa/-/execa-9.5.1.tgz", - "integrity": "sha512-QY5PPtSonnGwhhHDNI7+3RvY285c7iuJFFB+lU+oEzMY/gEGJ808owqJsrr8Otd1E/x07po1LkUBmdAc5duPAg==", + "version": "9.5.2", + "resolved": "https://registry.npmjs.org/execa/-/execa-9.5.2.tgz", + "integrity": "sha512-EHlpxMCpHWSAh1dgS6bVeoLAXGnJNdR93aabr4QCGbzOM73o5XmRfM/e5FUqsw3aagP8S8XEWUWFAxnRBnAF0Q==", "dev": true, "license": "MIT", "dependencies": { @@ -26133,20 +26172,20 @@ "peer": true }, "node_modules/react-native": { - "version": "0.76.4", - "resolved": "https://registry.npmjs.org/react-native/-/react-native-0.76.4.tgz", - "integrity": "sha512-c4K5dLmIAeeoGIxRM/Z2h9LjZVGDs8jwamksmFRSZFDt/j/A1wByVG/AnOpa6V39X40MQYSKEO0grKC7W5HpMQ==", + "version": "0.76.5", + "resolved": "https://registry.npmjs.org/react-native/-/react-native-0.76.5.tgz", + "integrity": "sha512-op2p2kB+lqMF1D7AdX4+wvaR0OPFbvWYs+VBE7bwsb99Cn9xISrLRLAgFflZedQsa5HvnOGrULhtnmItbIKVVw==", "license": "MIT", "peer": true, "dependencies": { "@jest/create-cache-key-function": "^29.6.3", - "@react-native/assets-registry": "0.76.4", - "@react-native/codegen": "0.76.4", - "@react-native/community-cli-plugin": "0.76.4", - "@react-native/gradle-plugin": "0.76.4", - "@react-native/js-polyfills": "0.76.4", - "@react-native/normalize-colors": "0.76.4", - "@react-native/virtualized-lists": "0.76.4", + "@react-native/assets-registry": "0.76.5", + "@react-native/codegen": "0.76.5", + "@react-native/community-cli-plugin": "0.76.5", + "@react-native/gradle-plugin": "0.76.5", + "@react-native/js-polyfills": "0.76.5", + "@react-native/normalize-colors": "0.76.5", + "@react-native/virtualized-lists": "0.76.5", "abort-controller": "^3.0.0", "anser": "^1.4.9", "ansi-regex": "^5.0.0", @@ -27424,19 +27463,20 @@ "license": "Apache-2.0" }, "node_modules/reflect.getprototypeof": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/reflect.getprototypeof/-/reflect.getprototypeof-1.0.7.tgz", - "integrity": "sha512-bMvFGIUKlc/eSfXNX+aZ+EL95/EgZzuwA0OBPTbZZDEJw/0AkentjMuM1oiRfwHrshqk4RzdgiTg5CcDalXN5g==", + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/reflect.getprototypeof/-/reflect.getprototypeof-1.0.8.tgz", + "integrity": "sha512-B5dj6usc5dkk8uFliwjwDHM8To5/QwdKz9JcBZ8Ic4G1f0YmeeJTtE/ZTdgRFPAfxZFiUaPhZ1Jcs4qeagItGQ==", "dev": true, "license": "MIT", "dependencies": { - "call-bind": "^1.0.7", + "call-bind": "^1.0.8", "define-properties": "^1.2.1", + "dunder-proto": "^1.0.0", "es-abstract": "^1.23.5", "es-errors": "^1.3.0", "get-intrinsic": "^1.2.4", - "gopd": "^1.0.1", - "which-builtin-type": "^1.1.4" + "gopd": "^1.2.0", + "which-builtin-type": "^1.2.0" }, "engines": { "node": ">= 0.4" @@ -27575,6 +27615,18 @@ "regjsparser": "bin/parser" } }, + "node_modules/regjsparser/node_modules/jsesc": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.0.2.tgz", + "integrity": "sha512-xKqzzWXDttJuOcawBt4KnKHHIf5oQ/Cxax+0PWFG+DFDgHNAdi+TXECADI+RYiFUMmx8792xsMbbgXj4CwnP4g==", + "license": "MIT", + "bin": { + "jsesc": "bin/jsesc" + }, + "engines": { + "node": ">=6" + } + }, "node_modules/release-zalgo": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/release-zalgo/-/release-zalgo-1.0.0.tgz", @@ -27744,9 +27796,9 @@ "license": "ISC" }, "node_modules/retimeable-signal": { - "version": "0.0.0", - "resolved": "https://registry.npmjs.org/retimeable-signal/-/retimeable-signal-0.0.0.tgz", - "integrity": "sha512-jxnBbSwD7khkZIf0cnD6j3BVawwhrbcT4y1WWWZq14l5Ds+z+csataLeBSRtKVqn5tjuT4WPCbMDJLKI2C/WUA==", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/retimeable-signal/-/retimeable-signal-1.0.1.tgz", + "integrity": "sha512-Cy26CYfbWnYu8HMoJeDhaMpW/EYFIbne3vMf6G9RSrOyWYXbPehja/BEdzpqmM84uy2bfBD7NPZhoQ4GZEtgvg==", "license": "Apache-2.0 OR MIT" }, "node_modules/retry": { @@ -27965,15 +28017,16 @@ } }, "node_modules/safe-array-concat": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.1.2.tgz", - "integrity": "sha512-vj6RsCsWBCf19jIeHEfkRMw8DPiBb+DMXklQ/1SGDHOMlHdPUkZXFQ2YdplS23zESTijAcurb1aSgJA3AgMu1Q==", + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.1.3.tgz", + "integrity": "sha512-AURm5f0jYEOydBj7VQlVvDrjeFgthDdEF5H1dP+6mNpoXOMo1quQqJ4wvJDyRZ9+pO3kGWoOdmV08cSv2aJV6Q==", "dev": true, "license": "MIT", "dependencies": { - "call-bind": "^1.0.7", - "get-intrinsic": "^1.2.4", - "has-symbols": "^1.0.3", + "call-bind": "^1.0.8", + "call-bound": "^1.0.2", + "get-intrinsic": "^1.2.6", + "has-symbols": "^1.1.0", "isarray": "^2.0.5" }, "engines": { @@ -28518,9 +28571,9 @@ } }, "node_modules/semantic-release/node_modules/execa": { - "version": "9.5.1", - "resolved": "https://registry.npmjs.org/execa/-/execa-9.5.1.tgz", - "integrity": "sha512-QY5PPtSonnGwhhHDNI7+3RvY285c7iuJFFB+lU+oEzMY/gEGJ808owqJsrr8Otd1E/x07po1LkUBmdAc5duPAg==", + "version": "9.5.2", + "resolved": "https://registry.npmjs.org/execa/-/execa-9.5.2.tgz", + "integrity": "sha512-EHlpxMCpHWSAh1dgS6bVeoLAXGnJNdR93aabr4QCGbzOM73o5XmRfM/e5FUqsw3aagP8S8XEWUWFAxnRBnAF0Q==", "dev": true, "license": "MIT", "dependencies": { @@ -29052,16 +29105,73 @@ } }, "node_modules/side-channel": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.6.tgz", - "integrity": "sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.1.0.tgz", + "integrity": "sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==", "dev": true, "license": "MIT", "dependencies": { - "call-bind": "^1.0.7", "es-errors": "^1.3.0", - "get-intrinsic": "^1.2.4", - "object-inspect": "^1.13.1" + "object-inspect": "^1.13.3", + "side-channel-list": "^1.0.0", + "side-channel-map": "^1.0.1", + "side-channel-weakmap": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-list": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/side-channel-list/-/side-channel-list-1.0.0.tgz", + "integrity": "sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "object-inspect": "^1.13.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-map": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/side-channel-map/-/side-channel-map-1.0.1.tgz", + "integrity": "sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.5", + "object-inspect": "^1.13.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-weakmap": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/side-channel-weakmap/-/side-channel-weakmap-1.0.2.tgz", + "integrity": "sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.5", + "object-inspect": "^1.13.3", + "side-channel-map": "^1.0.1" }, "engines": { "node": ">= 0.4" @@ -29881,16 +29991,19 @@ } }, "node_modules/string.prototype.trim": { - "version": "1.2.9", - "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.9.tgz", - "integrity": "sha512-klHuCNxiMZ8MlsOihJhJEBJAiMVqU3Z2nEXWfWnIqjN0gEFS9J9+IxKozWWtQGcgoa1WUZzLjKPTr4ZHNFTFxw==", + "version": "1.2.10", + "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.10.tgz", + "integrity": "sha512-Rs66F0P/1kedk5lyYyH9uBzuiI/kNRmwJAR9quK6VOtIpZ2G+hMZd+HQbbv25MgCA6gEffoMZYxlTod4WcdrKA==", "dev": true, "license": "MIT", "dependencies": { - "call-bind": "^1.0.7", + "call-bind": "^1.0.8", + "call-bound": "^1.0.2", + "define-data-property": "^1.1.4", "define-properties": "^1.2.1", - "es-abstract": "^1.23.0", - "es-object-atoms": "^1.0.0" + "es-abstract": "^1.23.5", + "es-object-atoms": "^1.0.0", + "has-property-descriptors": "^1.0.2" }, "engines": { "node": ">= 0.4" @@ -29900,16 +30013,20 @@ } }, "node_modules/string.prototype.trimend": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.8.tgz", - "integrity": "sha512-p73uL5VCHCO2BZZ6krwwQE3kCzM7NKmis8S//xEC6fQonchbum4eP6kR4DLEjQFO3Wnj3Fuo8NM0kOSjVdHjZQ==", + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.9.tgz", + "integrity": "sha512-G7Ok5C6E/j4SGfyLCloXTrngQIQU3PWtXGst3yM7Bea9FRURf1S42ZHlZZtsNque2FN2PoUhfZXYLNWwEr4dLQ==", "dev": true, "license": "MIT", "dependencies": { - "call-bind": "^1.0.7", + "call-bind": "^1.0.8", + "call-bound": "^1.0.2", "define-properties": "^1.2.1", "es-object-atoms": "^1.0.0" }, + "engines": { + "node": ">= 0.4" + }, "funding": { "url": "https://github.com/sponsors/ljharb" } diff --git a/src/lib/config-db.ts b/src/lib/config-db.ts index 52a035e4..3e9ca05d 100644 --- a/src/lib/config-db.ts +++ b/src/lib/config-db.ts @@ -81,65 +81,86 @@ export async function setConfig (config: ConfigDbWithoutPrivateFields, logger: C } } -export async function getConfig (logger: ComponentLogger): Promise { - const log = logger.forComponent('get-config') - let gateways = defaultGateways - let routers = defaultRouters - let dnsJsonResolvers = defaultDnsJsonResolvers - let enableRecursiveGateways - let enableWss - let enableWebTransport - let enableGatewayProviders - let debug = '' - let _supportsSubdomains = defaultSupportsSubdomains - - try { - await configDb.open() - - gateways = await configDb.get('gateways') +let getConfigPromise: Promise | null = null - routers = await configDb.get('routers') - - dnsJsonResolvers = await configDb.get('dnsJsonResolvers') - - enableRecursiveGateways = await configDb.get('enableRecursiveGateways') ?? defaultEnableRecursiveGateways - enableWss = await configDb.get('enableWss') ?? defaultEnableWss - enableWebTransport = await configDb.get('enableWebTransport') ?? defaultEnableWebTransport - enableGatewayProviders = await configDb.get('enableGatewayProviders') ?? defaultEnableGatewayProviders - - debug = await configDb.get('debug') ?? defaultDebug() - enable(debug) - - _supportsSubdomains ??= await configDb.get('_supportsSubdomains') - } catch (err) { - log('error loading config from db', err) - } finally { - configDb.close() - } - - if (gateways == null || gateways.length === 0) { - gateways = [...defaultGateways] - } - - if (routers == null || routers.length === 0) { - routers = [...defaultRouters] - } - if (dnsJsonResolvers == null || Object.keys(dnsJsonResolvers).length === 0) { - dnsJsonResolvers = { ...defaultDnsJsonResolvers } +export async function getConfig (logger: ComponentLogger): Promise { + if (getConfigPromise != null) { + /** + * If there is already a promise to get the config, return it. + * This is to prevent multiple calls to the db to get the same config, because + * each request will close the DB when done, and then the next request will fail at some point + */ + return getConfigPromise } - // always return the config, even if we failed to load it. - return { - gateways, - routers, - dnsJsonResolvers, - enableRecursiveGateways, - enableWss, - enableWebTransport, - enableGatewayProviders, - debug, - _supportsSubdomains - } + getConfigPromise = (async () => { + const log = logger.forComponent('get-config') + let gateways = defaultGateways + let routers = defaultRouters + let dnsJsonResolvers = defaultDnsJsonResolvers + let enableRecursiveGateways + let enableWss + let enableWebTransport + let enableGatewayProviders + let debug = '' + let _supportsSubdomains = defaultSupportsSubdomains + + let config: ConfigDb + + log('config-debug: getting config for domain %s', globalThis.location.origin) + try { + await configDb.open() + + config = await configDb.getAll() + debug = config.debug ?? defaultDebug() + enable(debug) + + gateways = config.gateways + + routers = config.routers + + dnsJsonResolvers = config.dnsJsonResolvers + enableRecursiveGateways = config.enableRecursiveGateways ?? defaultEnableRecursiveGateways + enableWss = config.enableWss ?? defaultEnableWss + enableWebTransport = config.enableWebTransport ?? defaultEnableWebTransport + enableGatewayProviders = config.enableGatewayProviders ?? defaultEnableGatewayProviders + + _supportsSubdomains ??= config.thing + } catch (err) { + log('error loading config from db', err) + } finally { + configDb.close() + } + + if (gateways == null || gateways.length === 0) { + gateways = [...defaultGateways] + } + + if (routers == null || routers.length === 0) { + routers = [...defaultRouters] + } + if (dnsJsonResolvers == null || Object.keys(dnsJsonResolvers).length === 0) { + dnsJsonResolvers = { ...defaultDnsJsonResolvers } + } + + // always return the config, even if we failed to load it. + return { + gateways, + routers, + dnsJsonResolvers, + enableRecursiveGateways, + enableWss, + enableWebTransport, + enableGatewayProviders, + debug, + _supportsSubdomains + } + })().finally(() => { + getConfigPromise = null + }) + + const result = await getConfigPromise + return result } export async function validateConfig (config: ConfigDbWithoutPrivateFields, logger: ComponentLogger): Promise { diff --git a/src/lib/generic-db.ts b/src/lib/generic-db.ts index 434892dd..1391db99 100644 --- a/src/lib/generic-db.ts +++ b/src/lib/generic-db.ts @@ -59,6 +59,34 @@ export class GenericIDB { }) } + async getAll (): Promise { + if (this.db == null) { + throw new Error('Database not opened') + } + const transaction = this.db.transaction(this.storeName, 'readonly') + const store = transaction.objectStore(this.storeName) + + return new Promise((resolve, reject) => { + // @ts-expect-error - its empty right now... + const result: { [K in keyof T]: T[K] } = {} + const request = store.openCursor() + + request.onerror = () => { + reject(request.error ?? new Error(`Could not get all keys and values from store "${this.storeName}"`)) + } + + request.onsuccess = () => { + const cursor = request.result + if (cursor != null) { + result[cursor.key as keyof T] = cursor.value as T[keyof T] + cursor.continue() + } else { + resolve(result) + } + } + }) + } + close (): void { if (this.db != null) { this.db.close() diff --git a/src/pages/config.tsx b/src/pages/config.tsx index 1cff0a87..081ffcca 100644 --- a/src/pages/config.tsx +++ b/src/pages/config.tsx @@ -150,7 +150,7 @@ const ConfigPage: FunctionComponent = () => {

Configure your IPFS Gateway

= () => { resetKey={resetKey} /> = () => { resetKey={resetKey} /> = () => { = () => { resetKey={resetKey} /> { + test('setting the config via UI actually works', async ({ page, protocol, rootDomain }) => { + await page.goto(`${protocol}//${rootDomain}`) + + // read the config from the page + const config = await getConfigUi({ page }) + + // change the config + const testConfig: typeof config = { + ...config, + gateways: ['https://example.com'], + routers: ['https://example2.com'] + } + + // change the UI & save it + await setConfigViaUi({ page, config: testConfig }) + + // verify that the IndexedDB has the new config + expect(await getConfig({ page })).toMatchObject(testConfig) + + // reload the page, and ensure the config is the same as the one we set + await page.reload() + expect(await getConfigUi({ page })).toMatchObject(testConfig) + expect(await getConfig({ page })).toMatchObject(testConfig) + }) +}) diff --git a/test-e2e/fixtures/config-test-fixtures.ts b/test-e2e/fixtures/config-test-fixtures.ts index 819b8bbb..adcfd2ec 100644 --- a/test-e2e/fixtures/config-test-fixtures.ts +++ b/test-e2e/fixtures/config-test-fixtures.ts @@ -1,5 +1,5 @@ -import { test as base, type Page } from '@playwright/test' -import { setConfig, setSubdomainConfig } from './set-sw-config.js' +import { test as base } from '@playwright/test' +import { setConfig } from './set-sw-config.js' import { waitForServiceWorker } from './wait-for-service-worker.js' function isNoServiceWorkerProject (test: T): boolean { @@ -90,26 +90,6 @@ export const testSubdomainRouting = test.extend<{ rootDomain: string, baseURL: s throw new Error('KUBO_GATEWAY not set') } const kuboGateway = process.env.KUBO_GATEWAY - const oldPageGoto = page.goto.bind(page) - page.goto = async (url: Parameters[0], options: Parameters[1]): ReturnType => { - const response = await oldPageGoto(url, options) - if (['.ipfs.', '.ipns.'].some((part) => url.includes(part))) { - await setSubdomainConfig({ - page, - config: { - autoReload: true, - gateways: [kuboGateway], - routers: [kuboGateway], - dnsJsonResolvers: { - '.': 'https://delegated-ipfs.dev/dns-query' - } - } - }) - } else { - // already set on root. - } - return response - } // set config for the initial page await setConfig({ diff --git a/test-e2e/fixtures/locators.ts b/test-e2e/fixtures/locators.ts index f1a55bfd..331e20ec 100644 --- a/test-e2e/fixtures/locators.ts +++ b/test-e2e/fixtures/locators.ts @@ -16,9 +16,14 @@ export const getConfigPage: GetLocator = (page) => page.locator('.e2e-config-pag export const getConfigPageInput: GetLocator = (page) => page.locator('.e2e-config-page-input') export const getConfigPageSaveButton: GetLocator = (page) => page.locator('.e2e-config-page-button#save-config') export const getIframeLocator: GetFrameLocator = (page) => page.frameLocator('iframe') -export const getConfigGatewaysInput: GetLocator = (page) => page.locator('.e2e-config-page-input-gateways') +export const getConfigEnableGatewayProviders: GetLocator = (page) => page.locator('.e2e-config-page-input-enableGatewayProviders') +export const getConfigEnableWss: GetLocator = (page) => page.locator('.e2e-config-page-input-enableWss') +export const getConfigEnableWebTransport: GetLocator = (page) => page.locator('.e2e-config-page-input-enableWebTransport') export const getConfigRoutersInput: GetLocator = (page) => page.locator('.e2e-config-page-input-routers') -export const getConfigAutoReloadInput: GetLocator = (page) => page.locator('.e2e-config-page-input-autoreload') +export const getConfigEnableRecursiveGateways: GetLocator = (page) => page.locator('.e2e-config-page-input-enableRecursiveGateways') +export const getConfigGatewaysInput: GetLocator = (page) => page.locator('.e2e-config-page-input-gateways') +export const getConfigDnsJsonResolvers: GetLocator = (page) => page.locator('.e2e-config-page-input-dnsJsonResolvers') +export const getConfigDebug: GetLocator = (page) => page.locator('.e2e-config-page-input-debug') export const getNoServiceWorkerError: GetLocator = (page) => page.locator('.e2e-no-service-worker-error') @@ -31,5 +36,4 @@ export const getAboutSection: GetLocator = (page) => page.locator('.e2e-about-se export const getConfigButtonIframe: GetLocator = (page) => getIframeLocator(page).locator('.e2e-collapsible-button') export const getConfigGatewaysInputIframe: GetLocator = (page) => getConfigGatewaysInput(getIframeLocator(page)) export const getConfigRoutersInputIframe: GetLocator = (page) => getConfigRoutersInput(getIframeLocator(page)) -export const getConfigAutoReloadInputIframe: GetLocator = (page) => getConfigAutoReloadInput(getIframeLocator(page)) export const getConfigPageSaveButtonIframe: GetLocator = (page) => getConfigPageSaveButton(getIframeLocator(page)) diff --git a/test-e2e/fixtures/set-sw-config.ts b/test-e2e/fixtures/set-sw-config.ts index 8072bd26..53c4d068 100644 --- a/test-e2e/fixtures/set-sw-config.ts +++ b/test-e2e/fixtures/set-sw-config.ts @@ -4,24 +4,50 @@ * * Note that this was only tested and confirmed working for subdomain pages. */ -import { getConfigAutoReloadInputIframe, getConfigButtonIframe, getConfigGatewaysInput, getConfigGatewaysInputIframe, getConfigPage, getConfigPageSaveButton, getConfigPageSaveButtonIframe, getConfigRoutersInput, getConfigRoutersInputIframe } from './locators.js' +import { getConfigDebug, getConfigDnsJsonResolvers, getConfigEnableGatewayProviders, getConfigEnableRecursiveGateways, getConfigEnableWebTransport, getConfigEnableWss, getConfigGatewaysInput, getConfigGatewaysInputIframe, getConfigPage, getConfigPageSaveButton, getConfigPageSaveButtonIframe, getConfigRoutersInput, getConfigRoutersInputIframe } from './locators.js' import { waitForServiceWorker } from './wait-for-service-worker.js' -import type { ConfigDb } from '../../src/lib/config-db.js' +import type { ConfigDb, ConfigDbWithoutPrivateFields } from '../../src/lib/config-db.js' import type { Page } from '@playwright/test' export async function setConfigViaUiSubdomain ({ page, config }: { page: Page, config: Partial }): Promise { await waitForServiceWorker(page) - await getConfigButtonIframe(page).isVisible() - await getConfigButtonIframe(page).click() + await getConfigGatewaysInputIframe(page).locator('input').fill([process.env.KUBO_GATEWAY].join('\n')) + await getConfigRoutersInputIframe(page).locator('input').fill([process.env.KUBO_GATEWAY].join('\n')) - for (const [key] of Object.entries(config)) { - if (key === 'autoReload') { - await getConfigAutoReloadInputIframe(page).click() - } + if (config.enableGatewayProviders != null) { + await getConfigEnableGatewayProviders(page).locator('input').setChecked(config.enableGatewayProviders) + } + + if (config.enableWss != null) { + await getConfigEnableWss(page).locator('input').setChecked(config.enableWss) + } + + if (config.enableWebTransport != null) { + await getConfigEnableWebTransport(page).locator('input').setChecked(config.enableWebTransport) + } + + if (config.routers != null) { + await getConfigRoutersInputIframe(page).locator('input').fill(config.routers.join('\n')) + } + + if (config.enableRecursiveGateways != null) { + await getConfigEnableRecursiveGateways(page).locator('input').setChecked(config.enableRecursiveGateways) + } + + if (config.gateways != null) { + await getConfigGatewaysInputIframe(page).locator('input').fill(config.gateways.join('\n')) + } + + // if (config.dnsJsonResolvers != null) { + // await getConfigDnsJsonResolvers(page).locator('input').fill(config.dnsJsonResolvers.reduce((acc, [key, value]) => { + // acc.push(`${key} ${value}`) + // return acc + // }, []).join('\n')) + // } + if (config.debug != null) { + await getConfigDebug(page).locator('input').fill(config.debug) } - await getConfigGatewaysInputIframe(page).locator('input').fill(JSON.stringify([process.env.KUBO_GATEWAY])) - await getConfigRoutersInputIframe(page).locator('input').fill(JSON.stringify([process.env.KUBO_GATEWAY])) await getConfigPageSaveButtonIframe(page).click() @@ -33,12 +59,85 @@ export async function setConfigViaUi ({ page, config }: { page: Page, config: Pa await getConfigPage(page).isVisible() - await getConfigGatewaysInput(page).locator('input').fill(JSON.stringify([process.env.KUBO_GATEWAY])) - await getConfigRoutersInput(page).locator('input').fill(JSON.stringify([process.env.KUBO_GATEWAY])) + await getConfigGatewaysInput(page).locator('textarea').fill([process.env.KUBO_GATEWAY].join('\n')) + await getConfigRoutersInput(page).locator('textarea').fill([process.env.KUBO_GATEWAY].join('\n')) + + if (config.enableGatewayProviders != null) { + // scroll to the element so it's visible + await getConfigEnableGatewayProviders(page).scrollIntoViewIfNeeded() + await getConfigEnableGatewayProviders(page).locator('input').setChecked(config.enableGatewayProviders) + } + + if (config.enableWss != null) { + await getConfigEnableWss(page).scrollIntoViewIfNeeded() + await getConfigEnableWss(page).locator('input').setChecked(config.enableWss) + } + + if (config.enableWebTransport != null) { + await getConfigEnableWebTransport(page).scrollIntoViewIfNeeded() + await getConfigEnableWebTransport(page).locator('input').setChecked(config.enableWebTransport) + } + + if (config.routers != null) { + await getConfigRoutersInput(page).scrollIntoViewIfNeeded() + await getConfigRoutersInput(page).locator('textarea').fill(config.routers.join('\n')) + } + + if (config.enableRecursiveGateways != null) { + await getConfigEnableRecursiveGateways(page).scrollIntoViewIfNeeded() + await getConfigEnableRecursiveGateways(page).locator('input').setChecked(config.enableRecursiveGateways) + } + + if (config.gateways != null) { + await getConfigGatewaysInput(page).scrollIntoViewIfNeeded() + await getConfigGatewaysInput(page).locator('textarea').fill(config.gateways.join('\n')) + } + + // if (config.dnsJsonResolvers != null) { + // await getConfigDnsJsonResolvers(page).locator('input').fill(config.dnsJsonResolvers.reduce((acc, [key, value]) => { + // acc.push(`${key} ${value}`) + // return acc + // }, []).join('\n')) + // } + + if (config.debug != null) { + await getConfigDebug(page).scrollIntoViewIfNeeded() + await getConfigDebug(page).locator('textarea').fill(config.debug) + } await getConfigPageSaveButton(page).click() +} - await getConfigPage(page).isHidden() +export async function getConfigUi ({ page }: { page: Page }): Promise { + await waitForServiceWorker(page) + + await getConfigPage(page).isVisible() + + const enableGatewayProviders = await getConfigEnableGatewayProviders(page).locator('input').isChecked() + const enableWss = await getConfigEnableWss(page).locator('input').isChecked() + const enableWebTransport = await getConfigEnableWebTransport(page).locator('input').isChecked() + const routers = (await getConfigRoutersInput(page).locator('textarea').inputValue()).split('\n') + const enableRecursiveGateways = await getConfigEnableRecursiveGateways(page).locator('input').isChecked() + const gateways = (await getConfigGatewaysInput(page).locator('textarea').inputValue()).split('\n') + const dnsJsonResolvers = await getConfigDnsJsonResolvers(page).locator('textarea').inputValue().then((value) => { + return value.split('\n').reduce((acc, line) => { + const [key, value] = line.split(' ') + acc[key] = value + return acc + }, {}) + }) + const debug = await getConfigDebug(page).locator('textarea').inputValue() + + return { + enableGatewayProviders, + enableWss, + enableWebTransport, + routers, + enableRecursiveGateways, + gateways, + dnsJsonResolvers, + debug + } } export async function setConfig ({ page, config }: { page: Page, config: Partial }): Promise { @@ -128,16 +227,3 @@ export async function getConfig ({ page }: { page: Page }): Promise { return config } - -export async function setSubdomainConfig ({ page, config }: { page: Page, config: Partial }): Promise { - await waitForServiceWorker(page) - - await page.evaluate(async (configInPage) => { - // TODO: we shouldn't need this. We should be able to just post a message to the service worker to reload it's config. - window.postMessage({ source: 'helia-sw-config-iframe', target: 'PARENT', action: 'RELOAD_CONFIG', config: configInPage }, { targetOrigin: window.location.origin }) - }, { - gateways: [process.env.KUBO_GATEWAY], - routers: [process.env.KUBO_GATEWAY], - ...config - }) -} diff --git a/test-e2e/fixtures/wait-for-service-worker.ts b/test-e2e/fixtures/wait-for-service-worker.ts index d5dd6b19..79b1631b 100644 --- a/test-e2e/fixtures/wait-for-service-worker.ts +++ b/test-e2e/fixtures/wait-for-service-worker.ts @@ -1,15 +1,11 @@ import type { Page } from '@playwright/test' export async function waitForServiceWorker (page: Page): Promise { - await page.evaluate(async () => { + await page.waitForFunction(async () => { const registration = await window.navigator.serviceWorker.getRegistration() if (registration?.active?.state === 'activated') { - return + return true } - - await new Promise((resolve, reject) => { - window.navigator.serviceWorker.addEventListener('controllerchange', resolve) - }) }) } diff --git a/test-e2e/subdomain-detection.test.ts b/test-e2e/subdomain-detection.test.ts index 808e8682..cd177a86 100644 --- a/test-e2e/subdomain-detection.test.ts +++ b/test-e2e/subdomain-detection.test.ts @@ -1,5 +1,5 @@ import { test, testSubdomainRouting, expect } from './fixtures/config-test-fixtures.js' -import { setConfig, setSubdomainConfig } from './fixtures/set-sw-config.js' +import { setConfig } from './fixtures/set-sw-config.js' import { waitForServiceWorker } from './fixtures/wait-for-service-worker.js' test.describe('subdomain-detection', () => { @@ -18,7 +18,6 @@ test.describe('subdomain-detection', () => { await setConfig({ page, config: { - autoReload: false, gateways, routers, dnsJsonResolvers: { @@ -38,25 +37,6 @@ test.describe('subdomain-detection', () => { await expect(bodyTextLocator).toContainText('hello') }) - - test('enabling autoreload automatically loads the subdomain', async ({ page, rootDomain, protocol }) => { - await page.goto(`${protocol}//bafkqablimvwgy3y.ipfs.${rootDomain}/`, { waitUntil: 'networkidle' }) - await setSubdomainConfig({ - page, - config: { - autoReload: true, - gateways, - routers, - dnsJsonResolvers: { - '.': 'https://delegated-ipfs.dev/dns-query' - } - } - }) - - const bodyTextLocator = page.locator('body') - - await expect(bodyTextLocator).toContainText('hello') - }) }) testSubdomainRouting.describe('subdomain-detection auto fixture', () => {