diff --git a/beach.webm b/beach.webm new file mode 100644 index 00000000..f9ac4eca Binary files /dev/null and b/beach.webm differ diff --git a/beach2.webm b/beach2.webm new file mode 100644 index 00000000..c6c60af5 Binary files /dev/null and b/beach2.webm differ diff --git a/package-lock.json b/package-lock.json index 421479de..5f297f6c 100644 --- a/package-lock.json +++ b/package-lock.json @@ -17,7 +17,7 @@ "@helia/http": "^2.0.2", "@helia/interface": "^5.0.0", "@helia/routers": "^2.1.0", - "@helia/verified-fetch": "^2.3.0", + "@helia/verified-fetch": "^2.3.1", "@libp2p/crypto": "^5.0.6", "@libp2p/dcutr": "^2.0.12", "@libp2p/identify": "^3.0.12", @@ -3624,9 +3624,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", @@ -4136,337 +4136,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.13", + "resolved": "https://registry.npmjs.org/@libp2p/autonat/-/autonat-2.0.13.tgz", + "integrity": "sha512-JwKYsVmLdo/3RLs1r9ZOJYN1IRfBrp8QFQm5d4oAh5iJ2CIAdsCgEFzO8TAT2k/x0YTuTcy5EjOMeTuWbRpdFQ==", "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.0", + "@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.14", + "resolved": "https://registry.npmjs.org/@libp2p/bootstrap/-/bootstrap-11.0.14.tgz", + "integrity": "sha512-sDqnYpYGs872KbsrLO5EG859RTbiKdthDu1EvBLGX7Fzf0myLVzgRUZn9VfdAdKYbbHtyObOWP4cWl/iIssUTA==", "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.0", + "@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.4", + "resolved": "https://registry.npmjs.org/@libp2p/circuit-relay-v2/-/circuit-relay-v2-3.1.4.tgz", + "integrity": "sha512-vY28TFZuLJoDJlcKldnvGsKzf1tSn7MS3yevIdidu3bd/Bts8DR1HKn/Y8/QEuR3OAULdDqdgr0Xa+xlYfXLqg==", "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.0", + "@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.13", + "resolved": "https://registry.npmjs.org/@libp2p/dcutr/-/dcutr-2.0.13.tgz", + "integrity": "sha512-PTq0Ib0lG1GgpKEnmSjTGGryAkg+DTMvKAlgxmVA63N2OKE2BlUHBNOtVKTwW46U9OXlQ2P0ClCUOaL/Z+W6kQ==", "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.0", + "@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.13", + "resolved": "https://registry.npmjs.org/@libp2p/identify/-/identify-3.0.13.tgz", + "integrity": "sha512-6FmtKC2Zq1S86DosG4phGAXG9MKr84IV3v4X37lqR2SiofbFEz8iCS0yNTi6Cml2HmCoiS6XMBGEtMzjBtTeMA==", "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.0", + "@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.0", + "resolved": "https://registry.npmjs.org/@libp2p/interface-internal/-/interface-internal-2.2.0.tgz", + "integrity": "sha512-5qCiIT1Vww6o6rjkbfv88M+tG7tfdLSiSEkM2JWv/wNWUYEn2dt+Qy1RP2z7Sj8Xdl8R7gVSmP3eal+dmon2zQ==", "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.4", + "resolved": "https://registry.npmjs.org/@libp2p/kad-dht/-/kad-dht-14.1.4.tgz", + "integrity": "sha512-MfViFd0KqlrVmXto88yAekW06JA8ba9UbwH+L5q5LnVjsPYthSXNWX2LHGYPgXLfXD8kQC+REonHq1M/9xyoYQ==", "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.0", + "@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.14", + "resolved": "https://registry.npmjs.org/@libp2p/mdns/-/mdns-11.0.14.tgz", + "integrity": "sha512-StSIo224Xt9S+3Uc/aC6TbuZ/Pupgyd398UpfCL/+Jl/R7XE+62YswQZVswcQdb30F/HYMJc6Q0gecajZYDnkQ==", "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.0", + "@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.14", + "resolved": "https://registry.npmjs.org/@libp2p/mplex/-/mplex-11.0.14.tgz", + "integrity": "sha512-/nG8T4R9fepmiOxONX7LHIxIOzaSWIUGeu/t/VDUIFsoC8B0l+9oMfB/P4YeB39lojaQFSKJAmvTsOGC9QMTdQ==", "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.13", + "resolved": "https://registry.npmjs.org/@libp2p/ping/-/ping-2.0.13.tgz", + "integrity": "sha512-JQFedyQ4sdS+x7kyxOs+bxBU5TEbVWVqcHSzs8mq7sBZ8oiGpq5yGM046ShE9XKOVfkoZ+YYsXlO4KnA8QUyjQ==", "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.0", + "@multiformats/multiaddr": "^12.3.3", "it-byte-stream": "^1.1.0", "uint8arrays": "^5.1.0" } @@ -4483,40 +4482,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 +4538,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 +4558,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.20", + "resolved": "https://registry.npmjs.org/@libp2p/webrtc/-/webrtc-5.0.20.tgz", + "integrity": "sha512-4U0qlkyrRSzVLC/tuvqxH9wf/AHG+h6nw0iJxrbRs21t+/uVRtxNAJ7DXN9nWCA7bKAOaHWdfF09qLH5i+XFXg==", "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.0", + "@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 +4601,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.19", + "resolved": "https://registry.npmjs.org/@libp2p/webtransport/-/webtransport-5.0.19.tgz", + "integrity": "sha512-tivS8dFzBTphKDhw/NlkK58A5ISJcXwMM2NXXKMa2GeBGz+EjYOapIGP46w7MMGXEW8AoK+Sdjlomu1ksyUfSw==", "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 +5172,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 +5247,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 +5257,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 +5317,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 +5357,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 +5426,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 +5586,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 +5596,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 +5646,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 +5656,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 +5666,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 +5685,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 +6139,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": { @@ -7326,9 +7317,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" }, @@ -7616,14 +7607,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" } @@ -8815,9 +8803,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": { @@ -10859,6 +10847,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 +10966,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.72", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.72.tgz", + "integrity": "sha512-ZpSAUOZ2Izby7qnZluSrAlGgGQzucmFbN0n64dYzocYxnxV5ufurpj3VgEe4cUp7ir9LmeLxNYo8bVnlM8bQHw==", "license": "ISC" }, "node_modules/electron-window": { @@ -11178,14 +11181,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 +13020,20 @@ } }, "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.5", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.5.tgz", + "integrity": "sha512-Y4+pKa7XeRUPWFNvOOYHkRYrfzW07oraURSvjDmRVOJ748OrVmeXtpE4+GCEHncjCjkTxPNRt8kEbxDhsn6VTg==", "dev": true, "license": "MIT", "dependencies": { + "call-bind-apply-helpers": "^1.0.0", + "dunder-proto": "^1.0.0", + "es-define-property": "^1.0.1", "es-errors": "^1.3.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" }, "engines": { "node": ">= 0.4" @@ -13514,13 +13517,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 +13879,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 +14255,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": { @@ -16397,36 +16400,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.0", + "resolved": "https://registry.npmjs.org/libp2p/-/libp2p-2.4.0.tgz", + "integrity": "sha512-zSpbPNbpBSySjdU7ZssViQ2oG6zg54+WltsGY/ijrabiE72Tva6Qr6cG3DlXa6/AGJMii4Z8HuEFpqApKpBr7g==", "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.0", + "@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 +17106,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": { @@ -19500,9 +19505,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 +24786,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 +24805,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 +25342,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 +26138,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 +27429,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" @@ -27744,9 +27750,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": { @@ -28518,9 +28524,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": { diff --git a/package.json b/package.json index 6a6ed6ed..dcfb1dfc 100644 --- a/package.json +++ b/package.json @@ -47,7 +47,7 @@ "@helia/http": "^2.0.2", "@helia/interface": "^5.0.0", "@helia/routers": "^2.1.0", - "@helia/verified-fetch": "^2.3.0", + "@helia/verified-fetch": "^2.3.1", "@libp2p/crypto": "^5.0.6", "@libp2p/dcutr": "^2.0.12", "@libp2p/identify": "^3.0.12", diff --git a/test-e2e/byte-range.test.ts b/test-e2e/byte-range.test.ts index d459f318..11505068 100644 --- a/test-e2e/byte-range.test.ts +++ b/test-e2e/byte-range.test.ts @@ -1,5 +1,6 @@ import { testPathRouting as test, expect } from './fixtures/config-test-fixtures.js' import { doRangeRequest } from './fixtures/do-range-request.js' +import { setConfig } from './fixtures/set-sw-config.js' test.describe('byte-ranges', () => { test('should be able to get a single character', async ({ page }) => { @@ -30,4 +31,32 @@ test.describe('byte-ranges', () => { expect(byteSize).toBe(872) expect(bytes).toStrictEqual(tailBytes) }) + + test('ttfb video file', async ({ page }) => { + await setConfig({ + page, + config: { + // eslint-disable-next-line @typescript-eslint/no-non-null-assertion + gateways: [process.env.KUBO_GATEWAY!], + // eslint-disable-next-line @typescript-eslint/no-non-null-assertion + routers: [process.env.KUBO_GATEWAY!], + debug: 'helia*,helia*:trace,libp2p*,libp2p*:trace', + enableWss: true, + enableWebTransport: false, + enableRecursiveGateways: true, + enableGatewayProviders: false + } + }) + const { bytes, byteSize, statusCode } = await doRangeRequest({ page, range: 'bytes=0-100', path: '/ipfs/bafybeiaelnma6kc5k2522f3277m4iw72l4kqbblnxmmoyjugjsaxcpeu7i' }) + + // also fetch from KUBO_GATEWAY to compare + const response = await fetch(`${process.env.KUBO_GATEWAY}/ipfs/bafybeiaelnma6kc5k2522f3277m4iw72l4kqbblnxmmoyjugjsaxcpeu7i`, { headers: { range: 'bytes=0-100' } }) + + const buffer = await response.arrayBuffer() + const kuboByteSize = buffer.byteLength + const kuboBytes = Array.from(new Uint8Array(buffer)) + expect(statusCode).toBe(response.status) + expect(byteSize).toBe(kuboByteSize) + expect(bytes).toStrictEqual(kuboBytes) + }) }) diff --git a/test-e2e/fixtures/config-test-fixtures.ts b/test-e2e/fixtures/config-test-fixtures.ts index 819b8bbb..0d71812e 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 { @@ -51,10 +51,19 @@ export const testPathRouting = test.extend<{ rootDomain: string, baseURL: string routers: [process.env.KUBO_GATEWAY], dnsJsonResolvers: { '.': 'https://delegated-ipfs.dev/dns-query' - } + }, + debug: 'helia*,helia*:trace,libp2p*,libp2p*:trace,*,*:trace', + enableWss: false, + enableWebTransport: false, + enableRecursiveGateways: true, + enableGatewayProviders: false } }) + await page.evaluate(async () => { + await fetch('/#/ipfs-sw-config-reload') + }) + await use(page) } }) @@ -89,38 +98,46 @@ export const testSubdomainRouting = test.extend<{ rootDomain: string, baseURL: s if (process.env.KUBO_GATEWAY == null || process.env.KUBO_GATEWAY === '') { 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 - } + // 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' + // }, + // enableWss: true, + // enableWebTransport: false, + // enableRecursiveGateways: true, + // enableGatewayProviders: false + // } + // }) + // } else { + // // already set on root. + // } + // return response + // } // set config for the initial page await setConfig({ page, config: { - autoReload: true, - gateways: [kuboGateway], - routers: [kuboGateway], + gateways: [process.env.KUBO_GATEWAY], + routers: [process.env.KUBO_GATEWAY], dnsJsonResolvers: { '.': 'https://delegated-ipfs.dev/dns-query' - } + }, + debug: 'helia*,helia*:trace,libp2p*,libp2p*:trace,*,*:trace', + enableWss: false, + enableWebTransport: false, + enableRecursiveGateways: true, + enableGatewayProviders: false } }) diff --git a/test-e2e/fixtures/data/bafybeiaelnma6kc5k2522f3277m4iw72l4kqbblnxmmoyjugjsaxcpeu7i.car b/test-e2e/fixtures/data/bafybeiaelnma6kc5k2522f3277m4iw72l4kqbblnxmmoyjugjsaxcpeu7i.car new file mode 100644 index 00000000..bf11f6c9 Binary files /dev/null and b/test-e2e/fixtures/data/bafybeiaelnma6kc5k2522f3277m4iw72l4kqbblnxmmoyjugjsaxcpeu7i.car differ diff --git a/test-e2e/fixtures/data/bafybeih6fyvqpookcgm2vfiapxsvaj2pibf5oflssph7zwn5qn57mfiikm.car b/test-e2e/fixtures/data/bafybeih6fyvqpookcgm2vfiapxsvaj2pibf5oflssph7zwn5qn57mfiikm.car new file mode 100644 index 00000000..b0270ccd Binary files /dev/null and b/test-e2e/fixtures/data/bafybeih6fyvqpookcgm2vfiapxsvaj2pibf5oflssph7zwn5qn57mfiikm.car differ diff --git a/test-e2e/fixtures/set-sw-config.ts b/test-e2e/fixtures/set-sw-config.ts index 8072bd26..20d1cf3f 100644 --- a/test-e2e/fixtures/set-sw-config.ts +++ b/test-e2e/fixtures/set-sw-config.ts @@ -129,15 +129,15 @@ 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 - }) -} +// 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/subdomain-detection.test.ts b/test-e2e/subdomain-detection.test.ts index 808e8682..71899d42 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', () => { @@ -41,7 +41,7 @@ test.describe('subdomain-detection', () => { test('enabling autoreload automatically loads the subdomain', async ({ page, rootDomain, protocol }) => { await page.goto(`${protocol}//bafkqablimvwgy3y.ipfs.${rootDomain}/`, { waitUntil: 'networkidle' }) - await setSubdomainConfig({ + await setConfig({ page, config: { autoReload: true, diff --git a/test-e2e/video.test.ts b/test-e2e/video.test.ts new file mode 100644 index 00000000..ed99c3b0 --- /dev/null +++ b/test-e2e/video.test.ts @@ -0,0 +1,163 @@ +import { type ConfigDbWithoutPrivateFields } from '../src/lib/config-db.js' +import { testPathRouting as test, expect } from './fixtures/config-test-fixtures.js' +import { getConfig, setConfig } from './fixtures/set-sw-config.js' +// import { waitForServiceWorker } from './fixtures/wait-for-service-worker.js' + +// const cid = 'bafkreifxwh3i3e7etigob52wqjiic2skhka6nblhmkxtodqpw55tekjg5a' // blank video, mpg +// const cid = 'bafkreibux244hbfyljy4ato265ugpqle6rakmpw24disegfe7rjt442ele' // blank video, webm +// const cid = 'bafybeiao6bob2xmjxjw74bzkcpw4txuoa4uhyu4ikgiyrvr2uwykmfukgi' // beach.mp4 +// const cid = 'bafybeih6fyvqpookcgm2vfiapxsvaj2pibf5oflssph7zwn5qn57mfiikm' // beach.webm downloaded from https://www.pexels.com/video/drone-footage-of-the-beach-8150514/ and converted to webm (playwright wont render mp4 for some reason) +const cid = 'bafybeiaelnma6kc5k2522f3277m4iw72l4kqbblnxmmoyjugjsaxcpeu7i' // beach2.webm downloaded from https://www.pexels.com/video/scenic-view-of-a-beach-1893629/ and converted to webm (playwright wont render mp4 for some reason) +// const cid = 'bafybeidsp6fva53dexzjycntiucts57ftecajcn5omzfgjx57pqfy3kwbq' // big buck bunny +test.describe('video', () => { + const testConfig: Partial = { + // eslint-disable-next-line @typescript-eslint/no-non-null-assertion + gateways: [process.env.KUBO_GATEWAY!], + // eslint-disable-next-line @typescript-eslint/no-non-null-assertion + routers: [process.env.KUBO_GATEWAY!], + debug: 'helia*,helia*:trace,libp2p*,libp2p*:trace', + enableWss: true, + enableWebTransport: false, + enableRecursiveGateways: true, + enableGatewayProviders: false + } + + /** + * We want to load the beach video fixture and ensure it starts playing. + */ + test('time to play video is reasonable', async ({ page }) => { + // eslint-disable-next-line no-console + console.log('process.env.KUBO_GATEWAY', process.env.KUBO_GATEWAY) + await setConfig({ page, config: testConfig }) + + page.on('request', async (request) => { + // eslint-disable-next-line no-console + console.log('request.url()', request.url(), await request.allHeaders()) + }) + + page.on('response', async (response) => { + // eslint-disable-next-line no-console + console.log('response.url()', response.url(), await response.allHeaders()) + }) + const response = await page.goto(`http://127.0.0.1:3333/ipfs/${cid}`, { waitUntil: 'commit' }) + // const response = await page.goto(`${process.env.KUBO_GATEWAY}/ipfs/${cid}`) // test with kubo gateway directly. + // subdomains + // const response = await page.goto(`${protocol}//${cid}.ipfs.${rootDomain}`, { waitUntil: 'commit' }) + + // await waitForServiceWorker(page) + const start = performance.now() + + const config = await getConfig({ page }) + // eslint-disable-next-line no-console + console.log('config', config) + + expect(response?.status()).toBe(200) + + // expect a video player + await page.waitForSelector('video') + const video = await page.$('video') + if (video == null) { + throw new Error('video element not found') + } + + // make sure the video is actually playing + // continuously check if the video is playing + await page.waitForFunction((video) => { + return video.currentTime > 0 && !video.paused && !video.ended && video.readyState > 2 + }, video) + const end = performance.now() + + const timeToPlay = end - start + expect(timeToPlay).toBeLessThan(1000) + }) +}) + +/* eslint-disable jsdoc/check-alignment */ +/** +- **tmp** +- **test: add test for big-buck-bunny ttfb** + +## Title + + +test: local-only ttfb for big-buck-bunny + +## Description + + + +A test to help confirm improved performance for https://github.com/ipfs/helia-verified-fetch/pull/163 + +## Notes & open questions + + + +### Running against main: + +```console +> npm i --save @helia/verified-fetch@latest && npm run test:chrome -- -g 'ttfb' --workers=1 --repeat-each=10 + +# ... + +Running 10 tests using 1 worker + + ✓ 1 [chromium] › ttfb-big-buck-bunny.test.ts:29:3 › ttfb-time-to-play-video › loads quickly (1.9s) +[WebServer] (node:53174) [DEP0066] DeprecationWarning: OutgoingMessage.prototype._headers is deprecated +[WebServer] (Use `node --trace-deprecation ...` to show where the warning was created) + ✓ 2 [chromium] › ttfb-big-buck-bunny.test.ts:29:3 › ttfb-time-to-play-video › loads quickly (2.0s) + ✓ 3 [chromium] › ttfb-big-buck-bunny.test.ts:29:3 › ttfb-time-to-play-video › loads quickly (2.0s) + ✓ 4 [chromium] › ttfb-big-buck-bunny.test.ts:29:3 › ttfb-time-to-play-video › loads quickly (2.1s) + ✓ 5 [chromium] › ttfb-big-buck-bunny.test.ts:29:3 › ttfb-time-to-play-video › loads quickly (1.8s) + ✓ 6 [chromium] › ttfb-big-buck-bunny.test.ts:29:3 › ttfb-time-to-play-video › loads quickly (2.5s) + ✓ 7 [chromium] › ttfb-big-buck-bunny.test.ts:29:3 › ttfb-time-to-play-video › loads quickly (2.3s) + ✓ 8 [chromium] › ttfb-big-buck-bunny.test.ts:29:3 › ttfb-time-to-play-video › loads quickly (2.2s) + ✓ 9 [chromium] › ttfb-big-buck-bunny.test.ts:29:3 › ttfb-time-to-play-video › loads quickly (2.3s) + ✓ 10 [chromium] › ttfb-big-buck-bunny.test.ts:29:3 › ttfb-time-to-play-video › loads quickly (2.3s) + + 10 passed (52.3s) +``` + +### Running with verified-fetch from https://github.com/ipfs/helia-verified-fetch/pull/163 + +```console +> npm i --save /Users/sgtpooki/code/work/protocol.ai/ipfs/helia-verified-fetch/packages/verified-fetch/helia-verified-fetch-2.3.0.tgz && npm run test:chrome -- -g 'ttfb' --workers=1 --repeat-each=10 + +# ... + +Running 10 tests using 1 worker + + ✓ 1 [chromium] › ttfb-big-buck-bunny.test.ts:29:3 › ttfb-time-to-play-video › loads quickly (2.5s) +[WebServer] (node:54928) [DEP0066] DeprecationWarning: OutgoingMessage.prototype._headers is deprecated +[WebServer] (Use `node --trace-deprecation ...` to show where the warning was created) + ✓ 2 [chromium] › ttfb-big-buck-bunny.test.ts:29:3 › ttfb-time-to-play-video › loads quickly (2.0s) + ✓ 3 [chromium] › ttfb-big-buck-bunny.test.ts:29:3 › ttfb-time-to-play-video › loads quickly (2.6s) + ✓ 4 [chromium] › ttfb-big-buck-bunny.test.ts:29:3 › ttfb-time-to-play-video › loads quickly (2.3s) + ✓ 5 [chromium] › ttfb-big-buck-bunny.test.ts:29:3 › ttfb-time-to-play-video › loads quickly (1.8s) + ✓ 6 [chromium] › ttfb-big-buck-bunny.test.ts:29:3 › ttfb-time-to-play-video › loads quickly (2.2s) + ✓ 7 [chromium] › ttfb-big-buck-bunny.test.ts:29:3 › ttfb-time-to-play-video › loads quickly (2.1s) + ✓ 8 [chromium] › ttfb-big-buck-bunny.test.ts:29:3 › ttfb-time-to-play-video › loads quickly (2.1s) + ✓ 9 [chromium] › ttfb-big-buck-bunny.test.ts:29:3 › ttfb-time-to-play-video › loads quickly (1.5s) + ✓ 10 [chromium] › ttfb-big-buck-bunny.test.ts:29:3 › ttfb-time-to-play-video › loads quickly (1.7s) + + 10 passed (54.3s) +``` + +## Change checklist + +- [ ] I have performed a self-review of my own code +- [ ] I have made corresponding changes to the documentation if necessary (this includes comments as well) +- [ ] I have added tests that prove my fix is effective or that my feature works + + */