diff --git a/manifest-beta.json b/manifest-beta.json index 7885ae5..26b0d7f 100644 --- a/manifest-beta.json +++ b/manifest-beta.json @@ -1,7 +1,7 @@ { "id": "obsidian-livesync", "name": "Self-hosted LiveSync", - "version": "0.25.21.beta2", + "version": "0.25.24.beta3", "minAppVersion": "0.9.12", "description": "Community implementation of self-hosted livesync. Reflect your vault changes to some other devices immediately. Please make sure to disable other synchronize solutions to avoid content corruption or duplication.", "author": "vorotamoroz", diff --git a/package-lock.json b/package-lock.json index d224e3f..0b3d96d 100644 --- a/package-lock.json +++ b/package-lock.json @@ -19,9 +19,9 @@ "fflate": "^0.8.2", "idb": "^8.0.3", "minimatch": "^10.0.2", - "octagonal-wheels": "^0.1.41", + "octagonal-wheels": "^0.1.42", "qrcode-generator": "^1.4.4", - "trystero": "github:vrtmrz/trystero#9e892a93ec14eeb57ce806d272fbb7c3935256d8", + "trystero": "^0.22.0", "xxhash-wasm-102": "npm:xxhash-wasm@^1.0.2" }, "devDependencies": { @@ -29,7 +29,8 @@ "@eslint/compat": "^1.2.7", "@eslint/eslintrc": "^3.3.0", "@eslint/js": "^9.21.0", - "@tsconfig/svelte": "^5.0.4", + "@sveltejs/vite-plugin-svelte": "^6.2.1", + "@tsconfig/svelte": "^5.0.5", "@types/deno": "^2.3.0", "@types/diff-match-patch": "^1.0.36", "@types/node": "^22.13.8", @@ -41,15 +42,15 @@ "@types/pouchdb-mapreduce": "^6.1.10", "@types/pouchdb-replication": "^6.4.7", "@types/transform-pouch": "^1.0.6", - "@typescript-eslint/eslint-plugin": "8.25.0", - "@typescript-eslint/parser": "8.25.0", + "@typescript-eslint/eslint-plugin": "8.46.2", + "@typescript-eslint/parser": "8.46.2", "builtin-modules": "5.0.0", "esbuild": "0.25.0", "esbuild-plugin-inline-worker": "^0.1.1", - "esbuild-svelte": "^0.9.0", - "eslint": "^9.21.0", - "eslint-plugin-import": "^2.31.0", - "eslint-plugin-svelte": "^3.0.2", + "esbuild-svelte": "^0.9.3", + "eslint": "^9.38.0", + "eslint-plugin-import": "^2.32.0", + "eslint-plugin-svelte": "^3.12.4", "events": "^3.3.0", "glob": "^11.0.3", "obsidian": "^1.8.7", @@ -67,14 +68,14 @@ "pouchdb-replication": "^9.0.0", "pouchdb-utils": "^9.0.0", "prettier": "3.5.2", - "svelte": "5.28.6", - "svelte-check": "^4.1.7", + "svelte": "5.41.1", + "svelte-check": "^4.3.3", "svelte-preprocess": "^6.0.3", "terser": "^5.39.0", "transform-pouch": "^2.0.0", "tslib": "^2.8.1", - "tsx": "^4.19.4", - "typescript": "5.7.3", + "tsx": "^4.20.6", + "typescript": "5.9.3", "yaml": "^2.8.0" } }, @@ -87,20 +88,6 @@ "node": ">=0.10.0" } }, - "node_modules/@ampproject/remapping": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.3.0.tgz", - "integrity": "sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@jridgewell/gen-mapping": "^0.3.5", - "@jridgewell/trace-mapping": "^0.3.24" - }, - "engines": { - "node": ">=6.0.0" - } - }, "node_modules/@aws-crypto/crc32": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/@aws-crypto/crc32/-/crc32-5.2.0.tgz", @@ -942,9 +929,9 @@ } }, "node_modules/@babel/runtime": { - "version": "7.27.6", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.27.6.tgz", - "integrity": "sha512-vbavdySgbTTrmFE+EsiqUTzlOr5bzlnJtUv9PynGCAKvfQqjIXbvFdumPM/GxMDfyuGMJaJAU6TO4zc1Jf1i8Q==", + "version": "7.28.4", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.28.4.tgz", + "integrity": "sha512-Q/N6JNWvIvPnLDvjlE1OUBLPQHH6l3CltCEsHIujp45zQUSSh8K+gHnaEX45yAT1nyngnINhvWtzN+Nb9D8RAQ==", "license": "MIT", "engines": { "node": ">=6.9.0" @@ -957,9 +944,9 @@ "license": "Apache-2.0" }, "node_modules/@chainsafe/as-sha256": { - "version": "0.4.2", - "resolved": "https://registry.npmjs.org/@chainsafe/as-sha256/-/as-sha256-0.4.2.tgz", - "integrity": "sha512-HJ8GZBRjLeWtRsAXf3EbNsNzmTGpzTFjfpSf4yHkLYC+E52DhT6hwz+7qpj6I/EmFzSUm5tYYvT9K8GZokLQCQ==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@chainsafe/as-sha256/-/as-sha256-1.2.0.tgz", + "integrity": "sha512-H2BNHQ5C3RS+H0ZvOdovK6GjFAyq5T6LClad8ivwj9Oaiy28uvdsGVS7gNJKuZmg0FGHAI+n7F0Qju6U0QkKDA==", "license": "Apache-2.0" }, "node_modules/@chainsafe/is-ip": { @@ -969,21 +956,21 @@ "license": "MIT" }, "node_modules/@chainsafe/libp2p-noise": { - "version": "16.0.0", - "resolved": "https://registry.npmjs.org/@chainsafe/libp2p-noise/-/libp2p-noise-16.0.0.tgz", - "integrity": "sha512-8rqr8V1RD2/lVbfL0Bb//N8iPOFof11cUe8v8z8xJT7fUhCAbtCCSM4jbwI4HCnw0MvHLmcpmAfDCFRwcWzoeA==", + "version": "16.1.3", + "resolved": "https://registry.npmjs.org/@chainsafe/libp2p-noise/-/libp2p-noise-16.1.3.tgz", + "integrity": "sha512-YLonKdIUFk/0keKRfzlmdrsObi8r0EaZC14Vjh3qdLy4+W7NaQAs1sSMt8aDP07oE78pa51NyejmQLKOnt7tOw==", "license": "Apache-2.0 OR MIT", "dependencies": { "@chainsafe/as-chacha20poly1305": "^0.1.0", - "@chainsafe/as-sha256": "^0.4.1", + "@chainsafe/as-sha256": "^1.0.0", "@libp2p/crypto": "^5.0.0", - "@libp2p/interface": "^2.0.0", + "@libp2p/interface": "^2.9.0", "@libp2p/peer-id": "^5.0.0", - "@noble/ciphers": "^0.6.0", + "@noble/ciphers": "^1.1.3", "@noble/curves": "^1.1.0", "@noble/hashes": "^1.3.1", - "it-length-prefixed": "^9.0.1", - "it-length-prefixed-stream": "^1.0.0", + "it-length-prefixed": "^10.0.1", + "it-length-prefixed-stream": "^2.0.1", "it-pair": "^2.0.6", "it-pipe": "^3.0.1", "it-stream-types": "^2.0.1", @@ -1514,9 +1501,9 @@ } }, "node_modules/@eslint-community/eslint-utils": { - "version": "4.7.0", - "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.7.0.tgz", - "integrity": "sha512-dyybb3AcajC7uha6CvhdVRJqaKyn7w2YKqKyAN37NKYgZT36w+iRb0Dymmc5qEJ549c/S31cMMSFd75bteCpCw==", + "version": "4.9.0", + "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.9.0.tgz", + "integrity": "sha512-ayVFHdtZ+hsq1t2Dy24wCmGXGe4q9Gu3smhLYALJrr473ZH27MsnSL+LKUlimp4BWJqMDMLmPpx/Q9R3OAlL4g==", "dev": true, "license": "MIT", "dependencies": { @@ -1561,13 +1548,13 @@ } }, "node_modules/@eslint/config-array": { - "version": "0.21.0", - "resolved": "https://registry.npmjs.org/@eslint/config-array/-/config-array-0.21.0.tgz", - "integrity": "sha512-ENIdc4iLu0d93HeYirvKmrzshzofPw6VkZRKQGe9Nv46ZnWUzcF1xV01dcvEg/1wXUR61OmmlSfyeyO7EvjLxQ==", + "version": "0.21.1", + "resolved": "https://registry.npmjs.org/@eslint/config-array/-/config-array-0.21.1.tgz", + "integrity": "sha512-aw1gNayWpdI/jSYVgzN5pL0cfzU02GT3NBpeT/DXbx1/1x7ZKxFPd9bwrzygx/qiwIQiJ1sw/zD8qY/kRvlGHA==", "dev": true, "license": "Apache-2.0", "dependencies": { - "@eslint/object-schema": "^2.1.6", + "@eslint/object-schema": "^2.1.7", "debug": "^4.3.1", "minimatch": "^3.1.2" }, @@ -1575,17 +1562,6 @@ "node": "^18.18.0 || ^20.9.0 || >=21.1.0" } }, - "node_modules/@eslint/config-array/node_modules/brace-expansion": { - "version": "1.1.12", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", - "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==", - "dev": true, - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, "node_modules/@eslint/config-array/node_modules/minimatch": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", @@ -1600,19 +1576,22 @@ } }, "node_modules/@eslint/config-helpers": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/@eslint/config-helpers/-/config-helpers-0.3.0.tgz", - "integrity": "sha512-ViuymvFmcJi04qdZeDc2whTHryouGcDlaxPqarTD0ZE10ISpxGUVZGZDx4w01upyIynL3iu6IXH2bS1NhclQMw==", + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/@eslint/config-helpers/-/config-helpers-0.4.1.tgz", + "integrity": "sha512-csZAzkNhsgwb0I/UAV6/RGFTbiakPCf0ZrGmrIxQpYvGZ00PhTkSnyKNolphgIvmnJeGw6rcGVEXfTzUnFuEvw==", "dev": true, "license": "Apache-2.0", + "dependencies": { + "@eslint/core": "^0.16.0" + }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" } }, "node_modules/@eslint/core": { - "version": "0.15.1", - "resolved": "https://registry.npmjs.org/@eslint/core/-/core-0.15.1.tgz", - "integrity": "sha512-bkOp+iumZCCbt1K1CmWf0R9pM5yKpDv+ZXtvSyQpudrI9kuFLp+bM2WOPXImuD/ceQuaa8f5pj93Y7zyECIGNA==", + "version": "0.16.0", + "resolved": "https://registry.npmjs.org/@eslint/core/-/core-0.16.0.tgz", + "integrity": "sha512-nmC8/totwobIiFcGkDza3GIKfAw1+hLiYVrh3I1nIomQ8PEr5cxg34jnkmGawul/ep52wGRAcyeDCNtWKSOj4Q==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -1646,17 +1625,6 @@ "url": "https://opencollective.com/eslint" } }, - "node_modules/@eslint/eslintrc/node_modules/brace-expansion": { - "version": "1.1.12", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", - "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==", - "dev": true, - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, "node_modules/@eslint/eslintrc/node_modules/minimatch": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", @@ -1671,9 +1639,9 @@ } }, "node_modules/@eslint/js": { - "version": "9.31.0", - "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.31.0.tgz", - "integrity": "sha512-LOm5OVt7D4qiKCqoiPbA7LWmI+tbw1VbTUowBcUMgQSuM6poJufkFkYDcQpo5KfgD39TnNySV26QjOh7VFpSyw==", + "version": "9.38.0", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.38.0.tgz", + "integrity": "sha512-UZ1VpFvXf9J06YG9xQBdnzU+kthors6KjhMAl6f4gH4usHyh31rUf2DLGInT8RFYIReYXNSydgPY0V2LuWgl7A==", "dev": true, "license": "MIT", "engines": { @@ -1684,9 +1652,9 @@ } }, "node_modules/@eslint/object-schema": { - "version": "2.1.6", - "resolved": "https://registry.npmjs.org/@eslint/object-schema/-/object-schema-2.1.6.tgz", - "integrity": "sha512-RBMg5FRL0I0gs51M/guSAj5/e14VQ4tpZnQNWwuDT66P14I43ItmPfIZRhO9fUVIPOAQXU47atlywZ/czoqFPA==", + "version": "2.1.7", + "resolved": "https://registry.npmjs.org/@eslint/object-schema/-/object-schema-2.1.7.tgz", + "integrity": "sha512-VtAOaymWVfZcmZbp6E2mympDIHvyjXs/12LqWYjVw6qjrfF+VK+fyG33kChz3nnK+SU5/NeHOqrTEHS8sXO3OA==", "dev": true, "license": "Apache-2.0", "engines": { @@ -1694,13 +1662,13 @@ } }, "node_modules/@eslint/plugin-kit": { - "version": "0.3.4", - "resolved": "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.3.4.tgz", - "integrity": "sha512-Ul5l+lHEcw3L5+k8POx6r74mxEYKG5kOb6Xpy2gCRW6zweT6TEhAf8vhxGgjhqrd/VO/Dirhsb+1hNpD1ue9hw==", + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.4.0.tgz", + "integrity": "sha512-sB5uyeq+dwCWyPi31B2gQlVlo+j5brPlWx4yZBrEaRo/nhdDE8Xke1gsGgtiBdaBTxuTkceLVuVt/pclrasb0A==", "dev": true, "license": "Apache-2.0", "dependencies": { - "@eslint/core": "^0.15.1", + "@eslint/core": "^0.16.0", "levn": "^0.4.1" }, "engines": { @@ -1763,9 +1731,9 @@ } }, "node_modules/@firebase/ai": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/@firebase/ai/-/ai-2.2.1.tgz", - "integrity": "sha512-0VWlkGB18oDhwMqsgxpt/usMsyjnH3a7hTvQPcAbk7VhFg0QZMDX60mQKfLTFKrB5VwmlaIdVsSZznsTY2S0wA==", + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/@firebase/ai/-/ai-2.4.0.tgz", + "integrity": "sha512-YilG6AJ/nYpCKtxZyvEzBRAQv5bU+2tBOKX4Ps0rNNSdxN39aT37kGhjATbk1kq1z5Lq7mkWglw/ajAF3lOWUg==", "license": "Apache-2.0", "dependencies": { "@firebase/app-check-interop-types": "0.3.3", @@ -1783,9 +1751,9 @@ } }, "node_modules/@firebase/analytics": { - "version": "0.10.18", - "resolved": "https://registry.npmjs.org/@firebase/analytics/-/analytics-0.10.18.tgz", - "integrity": "sha512-iN7IgLvM06iFk8BeFoWqvVpRFW3Z70f+Qe2PfCJ7vPIgLPjHXDE774DhCT5Y2/ZU/ZbXPDPD60x/XPWEoZLNdg==", + "version": "0.10.19", + "resolved": "https://registry.npmjs.org/@firebase/analytics/-/analytics-0.10.19.tgz", + "integrity": "sha512-3wU676fh60gaiVYQEEXsbGS4HbF2XsiBphyvvqDbtC1U4/dO4coshbYktcCHq+HFaGIK07iHOh4pME0hEq1fcg==", "license": "Apache-2.0", "dependencies": { "@firebase/component": "0.7.0", @@ -1799,12 +1767,12 @@ } }, "node_modules/@firebase/analytics-compat": { - "version": "0.2.24", - "resolved": "https://registry.npmjs.org/@firebase/analytics-compat/-/analytics-compat-0.2.24.tgz", - "integrity": "sha512-jE+kJnPG86XSqGQGhXXYt1tpTbCTED8OQJ/PQ90SEw14CuxRxx/H+lFbWA1rlFtFSsTCptAJtgyRBwr/f00vsw==", + "version": "0.2.25", + "resolved": "https://registry.npmjs.org/@firebase/analytics-compat/-/analytics-compat-0.2.25.tgz", + "integrity": "sha512-fdzoaG0BEKbqksRDhmf4JoyZf16Wosrl0Y7tbZtJyVDOOwziE0vrFjmZuTdviL0yhak+Nco6rMsUUbkbD+qb6Q==", "license": "Apache-2.0", "dependencies": { - "@firebase/analytics": "0.10.18", + "@firebase/analytics": "0.10.19", "@firebase/analytics-types": "0.8.3", "@firebase/component": "0.7.0", "@firebase/util": "1.13.0", @@ -1821,9 +1789,9 @@ "license": "Apache-2.0" }, "node_modules/@firebase/app": { - "version": "0.14.2", - "resolved": "https://registry.npmjs.org/@firebase/app/-/app-0.14.2.tgz", - "integrity": "sha512-Ecx2ig/JLC9ayIQwZHqm41Tzlf4c1WUuFhFUZB1y+JIJqDRE579x7Uil7tKT8MwDpOPwrK5ZtpxdSsrfy/LF8Q==", + "version": "0.14.4", + "resolved": "https://registry.npmjs.org/@firebase/app/-/app-0.14.4.tgz", + "integrity": "sha512-pUxEGmR+uu21OG/icAovjlu1fcYJzyVhhT0rsCrn+zi+nHtrS43Bp9KPn9KGa4NMspCUE++nkyiqziuIvJdwzw==", "license": "Apache-2.0", "dependencies": { "@firebase/component": "0.7.0", @@ -1887,12 +1855,12 @@ "license": "Apache-2.0" }, "node_modules/@firebase/app-compat": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/@firebase/app-compat/-/app-compat-0.5.2.tgz", - "integrity": "sha512-cn+U27GDaBS/irsbvrfnPZdcCzeZPRGKieSlyb7vV6LSOL6mdECnB86PgYjYGxSNg8+U48L/NeevTV1odU+mOQ==", + "version": "0.5.4", + "resolved": "https://registry.npmjs.org/@firebase/app-compat/-/app-compat-0.5.4.tgz", + "integrity": "sha512-T7ifGmb+awJEcp542Ek4HtNfBxcBrnuk1ggUdqyFEdsXHdq7+wVlhvE6YukTL7NS8hIkEfL7TMAPx/uCNqt30g==", "license": "Apache-2.0", "dependencies": { - "@firebase/app": "0.14.2", + "@firebase/app": "0.14.4", "@firebase/component": "0.7.0", "@firebase/logger": "0.5.0", "@firebase/util": "1.13.0", @@ -2048,15 +2016,15 @@ } }, "node_modules/@firebase/firestore": { - "version": "4.9.1", - "resolved": "https://registry.npmjs.org/@firebase/firestore/-/firestore-4.9.1.tgz", - "integrity": "sha512-PYVUTkhC9y8pydrqC3O1Oc4AMfkGSWdmuH9xgPJjiEbpUIUPQ4J8wJhyuash+o2u+axmyNRFP8ULNUKb+WzBzQ==", + "version": "4.9.2", + "resolved": "https://registry.npmjs.org/@firebase/firestore/-/firestore-4.9.2.tgz", + "integrity": "sha512-iuA5+nVr/IV/Thm0Luoqf2mERUvK9g791FZpUJV1ZGXO6RL2/i/WFJUj5ZTVXy5pRjpWYO+ZzPcReNrlilmztA==", "license": "Apache-2.0", "dependencies": { "@firebase/component": "0.7.0", "@firebase/logger": "0.5.0", "@firebase/util": "1.13.0", - "@firebase/webchannel-wrapper": "1.0.4", + "@firebase/webchannel-wrapper": "1.0.5", "@grpc/grpc-js": "~1.9.0", "@grpc/proto-loader": "^0.7.8", "tslib": "^2.1.0" @@ -2069,13 +2037,13 @@ } }, "node_modules/@firebase/firestore-compat": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/@firebase/firestore-compat/-/firestore-compat-0.4.1.tgz", - "integrity": "sha512-BjalPTDh/K0vmR/M/DE148dpIqbcfvtFVTietbUDWDWYIl9YH0TTVp/EwXRbZwswPxyjx4GdHW61GB2AYVz1SQ==", + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/@firebase/firestore-compat/-/firestore-compat-0.4.2.tgz", + "integrity": "sha512-cy7ov6SpFBx+PHwFdOOjbI7kH00uNKmIFurAn560WiPCZXy9EMnil1SOG7VF4hHZKdenC+AHtL4r3fNpirpm0w==", "license": "Apache-2.0", "dependencies": { "@firebase/component": "0.7.0", - "@firebase/firestore": "4.9.1", + "@firebase/firestore": "4.9.2", "@firebase/firestore-types": "3.0.3", "@firebase/util": "1.13.0", "tslib": "^2.1.0" @@ -2285,9 +2253,9 @@ "license": "Apache-2.0" }, "node_modules/@firebase/remote-config": { - "version": "0.6.6", - "resolved": "https://registry.npmjs.org/@firebase/remote-config/-/remote-config-0.6.6.tgz", - "integrity": "sha512-Yelp5xd8hM4NO1G1SuWrIk4h5K42mNwC98eWZ9YLVu6Z0S6hFk1mxotAdCRmH2luH8FASlYgLLq6OQLZ4nbnCA==", + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/@firebase/remote-config/-/remote-config-0.7.0.tgz", + "integrity": "sha512-dX95X6WlW7QlgNd7aaGdjAIZUiQkgWgNS+aKNu4Wv92H1T8Ue/NDUjZHd9xb8fHxLXIHNZeco9/qbZzr500MjQ==", "license": "Apache-2.0", "dependencies": { "@firebase/component": "0.7.0", @@ -2301,15 +2269,15 @@ } }, "node_modules/@firebase/remote-config-compat": { - "version": "0.2.19", - "resolved": "https://registry.npmjs.org/@firebase/remote-config-compat/-/remote-config-compat-0.2.19.tgz", - "integrity": "sha512-y7PZAb0l5+5oIgLJr88TNSelxuASGlXyAKj+3pUc4fDuRIdPNBoONMHaIUa9rlffBR5dErmaD2wUBJ7Z1a513Q==", + "version": "0.2.20", + "resolved": "https://registry.npmjs.org/@firebase/remote-config-compat/-/remote-config-compat-0.2.20.tgz", + "integrity": "sha512-P/ULS9vU35EL9maG7xp66uljkZgcPMQOxLj3Zx2F289baTKSInE6+YIkgHEi1TwHoddC/AFePXPpshPlEFkbgg==", "license": "Apache-2.0", "dependencies": { "@firebase/component": "0.7.0", "@firebase/logger": "0.5.0", - "@firebase/remote-config": "0.6.6", - "@firebase/remote-config-types": "0.4.0", + "@firebase/remote-config": "0.7.0", + "@firebase/remote-config-types": "0.5.0", "@firebase/util": "1.13.0", "tslib": "^2.1.0" }, @@ -2318,9 +2286,9 @@ } }, "node_modules/@firebase/remote-config-types": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/@firebase/remote-config-types/-/remote-config-types-0.4.0.tgz", - "integrity": "sha512-7p3mRE/ldCNYt8fmWMQ/MSGRmXYlJ15Rvs9Rk17t8p0WwZDbeK7eRmoI1tvCPaDzn9Oqh+yD6Lw+sGLsLg4kKg==", + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/@firebase/remote-config-types/-/remote-config-types-0.5.0.tgz", + "integrity": "sha512-vI3bqLoF14L/GchtgayMiFpZJF+Ao3uR8WCde0XpYNkSokDpAKca2DxvcfeZv7lZUqkUwQPL2wD83d3vQ4vvrg==", "license": "Apache-2.0" }, "node_modules/@firebase/storage": { @@ -2383,9 +2351,9 @@ } }, "node_modules/@firebase/webchannel-wrapper": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/@firebase/webchannel-wrapper/-/webchannel-wrapper-1.0.4.tgz", - "integrity": "sha512-6m8+P+dE/RPl4OPzjTxcTbQ0rGeRyeTvAi9KwIffBVCiAMKrfXfLZaqD1F+m8t4B5/Q5aHsMozOgirkH1F5oMQ==", + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/@firebase/webchannel-wrapper/-/webchannel-wrapper-1.0.5.tgz", + "integrity": "sha512-+uGNN7rkfn41HLO0vekTFhTxk61eKa8mTpRGLO0QSqlQdKvIoGAvLp3ppdVIWbTGYJWM6Kp0iN+PjMIOcnVqTw==", "license": "Apache-2.0" }, "node_modules/@grpc/grpc-js": { @@ -2623,6 +2591,17 @@ "node": ">=6.0.0" } }, + "node_modules/@jridgewell/remapping": { + "version": "2.3.5", + "resolved": "https://registry.npmjs.org/@jridgewell/remapping/-/remapping-2.3.5.tgz", + "integrity": "sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.24" + } + }, "node_modules/@jridgewell/resolve-uri": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz", @@ -2676,47 +2655,100 @@ "license": "MIT" }, "node_modules/@libp2p/bootstrap": { - "version": "11.0.39", - "resolved": "https://registry.npmjs.org/@libp2p/bootstrap/-/bootstrap-11.0.39.tgz", - "integrity": "sha512-OoReVQhJNPb9EzAWPd0O/GBMGVWmeylH/M6ohx5ONzHynmqwT7+f6TiDtDIGey8APdBURzBPgy6Z1gGU6lourQ==", + "version": "11.0.42", + "resolved": "https://registry.npmjs.org/@libp2p/bootstrap/-/bootstrap-11.0.42.tgz", + "integrity": "sha512-xe5LMZrXR2cnFcR69ax/cHqNCc8zwSvqDWOf82u/ifAsUae7M0eeoEVi15lfrPewWst4YPkTqYDkZSPWC65I3Q==", "license": "Apache-2.0 OR MIT", "dependencies": { - "@libp2p/interface": "^2.10.3", - "@libp2p/interface-internal": "^2.3.15", - "@libp2p/peer-id": "^5.1.6", + "@libp2p/interface": "^2.10.4", + "@libp2p/interface-internal": "^2.3.17", + "@libp2p/peer-id": "^5.1.7", "@multiformats/mafmt": "^12.1.6", - "@multiformats/multiaddr": "^12.4.0", + "@multiformats/multiaddr": "^12.4.4", "main-event": "^1.0.1" } }, "node_modules/@libp2p/crypto": { - "version": "5.1.8", - "resolved": "https://registry.npmjs.org/@libp2p/crypto/-/crypto-5.1.8.tgz", - "integrity": "sha512-zkfWd2x12E0NbSRU52Wb0A5I9v5a1uLgCauR8uuTqnC21OVznXUGkMg4A2Xoj90M98lReDHo+Khc/hlQFbJ5Vw==", + "version": "5.1.13", + "resolved": "https://registry.npmjs.org/@libp2p/crypto/-/crypto-5.1.13.tgz", + "integrity": "sha512-8NN9cQP3jDn+p9+QE9ByiEoZ2lemDFf/unTgiKmS3JF93ph240EUVdbCyyEgOMfykzb0okTM4gzvwfx9osJebQ==", "license": "Apache-2.0 OR MIT", "dependencies": { - "@libp2p/interface": "^2.11.0", - "@noble/curves": "^1.9.1", - "@noble/hashes": "^1.8.0", - "multiformats": "^13.3.6", - "protons-runtime": "^5.5.0", + "@libp2p/interface": "^3.1.0", + "@noble/curves": "^2.0.1", + "@noble/hashes": "^2.0.1", + "multiformats": "^13.4.0", + "protons-runtime": "^5.6.0", "uint8arraylist": "^2.4.8", "uint8arrays": "^5.1.0" } }, - "node_modules/@libp2p/identify": { - "version": "3.0.33", - "resolved": "https://registry.npmjs.org/@libp2p/identify/-/identify-3.0.33.tgz", - "integrity": "sha512-cwMwXcQC4h1msBayTBS49yPwnoJUjXcxMm2orxAb96gVbzGW7h+OIFikZR23yOcDEcOPO8wHTurL1SXrr3O/SQ==", + "node_modules/@libp2p/crypto/node_modules/@libp2p/interface": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@libp2p/interface/-/interface-3.1.0.tgz", + "integrity": "sha512-RE7/XyvC47fQBe1cHxhMvepYKa5bFCUyFrrpj8PuM0E7JtzxU7F+Du5j4VXbg2yLDcToe0+j8mB7jvwE2AThYw==", "license": "Apache-2.0 OR MIT", "dependencies": { - "@libp2p/crypto": "^5.1.5", - "@libp2p/interface": "^2.10.3", - "@libp2p/interface-internal": "^2.3.15", - "@libp2p/peer-id": "^5.1.6", - "@libp2p/peer-record": "^8.0.31", - "@libp2p/utils": "^6.6.6", - "@multiformats/multiaddr": "^12.4.0", + "@multiformats/dns": "^1.0.6", + "@multiformats/multiaddr": "^13.0.1", + "main-event": "^1.0.1", + "multiformats": "^13.4.0", + "progress-events": "^1.0.1", + "uint8arraylist": "^2.4.8" + } + }, + "node_modules/@libp2p/crypto/node_modules/@multiformats/multiaddr": { + "version": "13.0.1", + "resolved": "https://registry.npmjs.org/@multiformats/multiaddr/-/multiaddr-13.0.1.tgz", + "integrity": "sha512-XToN915cnfr6Lr9EdGWakGJbPT0ghpg/850HvdC+zFX8XvpLZElwa8synCiwa8TuvKNnny6m8j8NVBNCxhIO3g==", + "license": "Apache-2.0 OR MIT", + "dependencies": { + "@chainsafe/is-ip": "^2.0.1", + "multiformats": "^13.0.0", + "uint8-varint": "^2.0.1", + "uint8arrays": "^5.0.0" + } + }, + "node_modules/@libp2p/crypto/node_modules/@noble/curves": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@noble/curves/-/curves-2.0.1.tgz", + "integrity": "sha512-vs1Az2OOTBiP4q0pwjW5aF0xp9n4MxVrmkFBxc6EKZc6ddYx5gaZiAsZoq0uRRXWbi3AT/sBqn05eRPtn1JCPw==", + "license": "MIT", + "dependencies": { + "@noble/hashes": "2.0.1" + }, + "engines": { + "node": ">= 20.19.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/@libp2p/crypto/node_modules/@noble/hashes": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-2.0.1.tgz", + "integrity": "sha512-XlOlEbQcE9fmuXxrVTXCTlG2nlRXa9Rj3rr5Ue/+tX+nmkgbX720YHh0VR3hBF9xDvwnb8D2shVGOwNx+ulArw==", + "license": "MIT", + "engines": { + "node": ">= 20.19.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/@libp2p/identify": { + "version": "3.0.36", + "resolved": "https://registry.npmjs.org/@libp2p/identify/-/identify-3.0.36.tgz", + "integrity": "sha512-swpgKzZ8SihHeguIEf3LxYlEcD7C9cSB7DE1XGTuCxNXkXksv2ieQTSiJ2xURMRw0nwe0wEGS5vzmshJh3kzrA==", + "license": "Apache-2.0 OR MIT", + "dependencies": { + "@libp2p/crypto": "^5.1.6", + "@libp2p/interface": "^2.10.4", + "@libp2p/interface-internal": "^2.3.17", + "@libp2p/peer-id": "^5.1.7", + "@libp2p/peer-record": "^8.0.33", + "@libp2p/utils": "^6.7.0", + "@multiformats/multiaddr": "^12.4.4", "@multiformats/multiaddr-matcher": "^1.7.2", "it-drain": "^3.0.9", "it-parallel": "^3.0.11", @@ -2769,13 +2801,13 @@ } }, "node_modules/@libp2p/mplex": { - "version": "11.0.39", - "resolved": "https://registry.npmjs.org/@libp2p/mplex/-/mplex-11.0.39.tgz", - "integrity": "sha512-zda6ksYkOT3gdq7x1gBQip8xEB8p/uXZ5VBqsYNn9OVp+L2VBm3QbXK3Jw3P4VtZ79quK8IPhL26Yz//Edmrvw==", + "version": "11.0.42", + "resolved": "https://registry.npmjs.org/@libp2p/mplex/-/mplex-11.0.42.tgz", + "integrity": "sha512-06HXNQS02GOEx1796Nsk640tIHwnHtJvd4TWnslUEeVi7SxLA8LqCttT7qJ2P3Y1tmm3E2a74kxtHqaJDqypig==", "license": "Apache-2.0 OR MIT", "dependencies": { - "@libp2p/interface": "^2.10.3", - "@libp2p/utils": "^6.6.6", + "@libp2p/interface": "^2.10.4", + "@libp2p/utils": "^6.7.0", "it-pipe": "^3.0.1", "it-pushable": "^3.2.3", "it-stream-types": "^2.0.2", @@ -2801,60 +2833,6 @@ "uint8arrays": "^5.1.0" } }, - "node_modules/@libp2p/multistream-select/node_modules/it-byte-stream": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/it-byte-stream/-/it-byte-stream-2.0.3.tgz", - "integrity": "sha512-h7FFcn4DWiWsJw1dCJhuPdiY8cGi1z8g4aLAfFspTaJbwQxvEMlEBFG/f8lIVGwM8YK26ClM4/9lxLVhF33b8g==", - "license": "Apache-2.0 OR MIT", - "dependencies": { - "abort-error": "^1.0.1", - "it-queueless-pushable": "^2.0.0", - "it-stream-types": "^2.0.2", - "race-signal": "^1.1.3", - "uint8arraylist": "^2.4.8" - } - }, - "node_modules/@libp2p/multistream-select/node_modules/it-length-prefixed": { - "version": "10.0.1", - "resolved": "https://registry.npmjs.org/it-length-prefixed/-/it-length-prefixed-10.0.1.tgz", - "integrity": "sha512-BhyluvGps26u9a7eQIpOI1YN7mFgi8lFwmiPi07whewbBARKAG9LE09Odc8s1Wtbt2MB6rNUrl7j9vvfXTJwdQ==", - "license": "Apache-2.0 OR MIT", - "dependencies": { - "it-reader": "^6.0.1", - "it-stream-types": "^2.0.1", - "uint8-varint": "^2.0.1", - "uint8arraylist": "^2.0.0", - "uint8arrays": "^5.0.1" - }, - "engines": { - "node": ">=16.0.0", - "npm": ">=7.0.0" - } - }, - "node_modules/@libp2p/multistream-select/node_modules/it-length-prefixed-stream": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/it-length-prefixed-stream/-/it-length-prefixed-stream-2.0.3.tgz", - "integrity": "sha512-Ns3jNFy2mcFnV59llCYitJnFHapg8wIcOsWkEaAwOkG9v4HBCk24nze/zGDQjiJdDTyFXTT5GOY3M/uaksot3w==", - "license": "Apache-2.0 OR MIT", - "dependencies": { - "abort-error": "^1.0.1", - "it-byte-stream": "^2.0.0", - "it-stream-types": "^2.0.2", - "uint8-varint": "^2.0.4", - "uint8arraylist": "^2.4.8" - } - }, - "node_modules/@libp2p/multistream-select/node_modules/it-queueless-pushable": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/it-queueless-pushable/-/it-queueless-pushable-2.0.2.tgz", - "integrity": "sha512-2BqIt7XvDdgEgudLAdJkdseAwbVSBc0yAd8yPVHrll4eBuJPWIj9+8C3OIxzEKwhswLtd3bi+yLrzgw9gCyxMA==", - "license": "Apache-2.0 OR MIT", - "dependencies": { - "abort-error": "^1.0.1", - "p-defer": "^4.0.1", - "race-signal": "^1.1.3" - } - }, "node_modules/@libp2p/peer-collections": { "version": "6.0.35", "resolved": "https://registry.npmjs.org/@libp2p/peer-collections/-/peer-collections-6.0.35.tgz", @@ -2920,17 +2898,17 @@ } }, "node_modules/@libp2p/ping": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/@libp2p/ping/-/ping-2.0.1.tgz", - "integrity": "sha512-KWbzFRDBJyZDd8FziW1N9UKHBcOm2RIVyX7sQh1tFeJ0XpWkNT3IcljOG1STikXTuCXIZmMgan/LrZ+SvJSIGw==", + "version": "2.0.35", + "resolved": "https://registry.npmjs.org/@libp2p/ping/-/ping-2.0.35.tgz", + "integrity": "sha512-f9z5drqjaRRTu1dK/3gshtth/xdE2YwZ6qhBUpqLX4x5s3k/X8ds4aRx2lzvznQMmOMaT8e1VEjhbfFlcJmUOA==", "license": "Apache-2.0 OR MIT", "dependencies": { - "@libp2p/crypto": "^5.0.1", - "@libp2p/interface": "^2.0.1", - "@libp2p/interface-internal": "^2.0.1", - "@multiformats/multiaddr": "^12.2.3", - "it-first": "^3.0.6", - "it-pipe": "^3.0.1", + "@libp2p/crypto": "^5.1.6", + "@libp2p/interface": "^2.10.4", + "@libp2p/interface-internal": "^2.3.17", + "@multiformats/multiaddr": "^12.4.4", + "it-byte-stream": "^2.0.2", + "main-event": "^1.0.1", "uint8arrays": "^5.1.0" } }, @@ -2966,14 +2944,14 @@ } }, "node_modules/@libp2p/websockets": { - "version": "9.2.14", - "resolved": "https://registry.npmjs.org/@libp2p/websockets/-/websockets-9.2.14.tgz", - "integrity": "sha512-7KeylINdxW76fFkKuM7/axxz8J3kHlNgrlcQYfrwZSj7JDZG19IqJJZmVOcQBa6RgAnPjjz2F1TFFWQhvSIGJA==", + "version": "9.2.16", + "resolved": "https://registry.npmjs.org/@libp2p/websockets/-/websockets-9.2.16.tgz", + "integrity": "sha512-jD96ClKeaZvTs+YyGJxOOQSWVe9e9SHmacJ9uE9dqWZjCbPICdCJnOj2pLg258WxVrc+/MRFKSHE/v5f2ZJGCA==", "license": "Apache-2.0 OR MIT", "dependencies": { - "@libp2p/interface": "^2.10.3", - "@libp2p/utils": "^6.6.6", - "@multiformats/multiaddr": "^12.4.0", + "@libp2p/interface": "^2.10.4", + "@libp2p/utils": "^6.7.0", + "@multiformats/multiaddr": "^12.4.4", "@multiformats/multiaddr-matcher": "^1.7.2", "@multiformats/multiaddr-to-uri": "^11.0.0", "@types/ws": "^8.18.1", @@ -2987,16 +2965,15 @@ } }, "node_modules/@multiformats/dns": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/@multiformats/dns/-/dns-1.0.6.tgz", - "integrity": "sha512-nt/5UqjMPtyvkG9BQYdJ4GfLK3nMqGpFZOzf4hAmIa0sJh2LlS9YKXZ4FgwBDsaHvzZqR/rUFIywIc7pkHNNuw==", + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/@multiformats/dns/-/dns-1.0.10.tgz", + "integrity": "sha512-6X200ceQLns0b/CU0S/So16tGjB5eIXHJ1xvJMPoWaKFHWSgfpW2EhkWJrqap4U3+c37zcowVR0ToPXeYEL7Vw==", "license": "Apache-2.0 OR MIT", "dependencies": { - "@types/dns-packet": "^5.6.5", "buffer": "^6.0.3", "dns-packet": "^5.6.1", "hashlru": "^2.3.0", - "p-queue": "^8.0.1", + "p-queue": "^9.0.0", "progress-events": "^1.0.0", "uint8arrays": "^5.0.2" } @@ -3037,27 +3014,30 @@ } }, "node_modules/@multiformats/multiaddr-to-uri": { - "version": "11.0.0", - "resolved": "https://registry.npmjs.org/@multiformats/multiaddr-to-uri/-/multiaddr-to-uri-11.0.0.tgz", - "integrity": "sha512-9RNmlIGwZbBLsHekT50dbt4o4u8Iciw9kGjv+WHiGxQdsJ6xKKjU1+C0Vbas6RilMbaVOAOnEyfNcXbUmTkLxQ==", + "version": "11.0.2", + "resolved": "https://registry.npmjs.org/@multiformats/multiaddr-to-uri/-/multiaddr-to-uri-11.0.2.tgz", + "integrity": "sha512-SiLFD54zeOJ0qMgo9xv1Tl9O5YktDKAVDP4q4hL16mSq4O4sfFNagNADz8eAofxd6TfQUzGQ3TkRRG9IY2uHRg==", "license": "Apache-2.0 OR MIT", "dependencies": { "@multiformats/multiaddr": "^12.3.0" } }, "node_modules/@noble/ciphers": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/@noble/ciphers/-/ciphers-0.6.0.tgz", - "integrity": "sha512-mIbq/R9QXk5/cTfESb1OKtyFnk7oc1Om/8onA1158K9/OZUQFDEVy55jVTato+xmp3XX6F6Qh0zz0Nc1AxAlRQ==", + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@noble/ciphers/-/ciphers-1.3.0.tgz", + "integrity": "sha512-2I0gnIVPtfnMw9ee9h1dJG7tp81+8Ob3OJb3Mv37rx5L40/b0i7djjCVvGOVqc9AEIQyvyu1i6ypKdFw8R8gQw==", "license": "MIT", + "engines": { + "node": "^14.21.3 || >=16" + }, "funding": { "url": "https://paulmillr.com/funding/" } }, "node_modules/@noble/curves": { - "version": "1.9.2", - "resolved": "https://registry.npmjs.org/@noble/curves/-/curves-1.9.2.tgz", - "integrity": "sha512-HxngEd2XUcg9xi20JkwlLCtYwfoFw4JGkuZpT+WlsPD4gB/cxkvTD8fSsoAnphGZhFdZYKeQIPCuFlWPm1uE0g==", + "version": "1.9.7", + "resolved": "https://registry.npmjs.org/@noble/curves/-/curves-1.9.7.tgz", + "integrity": "sha512-gbKGcRUYIjA3/zCCNaWDciTMFI0dCkvou3TL8Zmy5Nc7sJ47a0jtOeZoTaMxkuqRo9cRhjOdZJXegxYE5FN/xw==", "license": "MIT", "dependencies": { "@noble/hashes": "1.8.0" @@ -3208,6 +3188,336 @@ "integrity": "sha512-Vvn3zZrhQZkkBE8LSuW3em98c0FwgO4nxzv6OdSxPKJIEKY2bGbHn+mhGIPerzI4twdxaP8/0+06HBpwf345Lw==", "license": "BSD-3-Clause" }, + "node_modules/@rollup/rollup-android-arm-eabi": { + "version": "4.52.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.52.5.tgz", + "integrity": "sha512-8c1vW4ocv3UOMp9K+gToY5zL2XiiVw3k7f1ksf4yO1FlDFQ1C2u72iACFnSOceJFsWskc2WZNqeRhFRPzv+wtQ==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "peer": true + }, + "node_modules/@rollup/rollup-android-arm64": { + "version": "4.52.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.52.5.tgz", + "integrity": "sha512-mQGfsIEFcu21mvqkEKKu2dYmtuSZOBMmAl5CFlPGLY94Vlcm+zWApK7F/eocsNzp8tKmbeBP8yXyAbx0XHsFNA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "peer": true + }, + "node_modules/@rollup/rollup-darwin-arm64": { + "version": "4.52.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.52.5.tgz", + "integrity": "sha512-takF3CR71mCAGA+v794QUZ0b6ZSrgJkArC+gUiG6LB6TQty9T0Mqh3m2ImRBOxS2IeYBo4lKWIieSvnEk2OQWA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "peer": true + }, + "node_modules/@rollup/rollup-darwin-x64": { + "version": "4.52.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.52.5.tgz", + "integrity": "sha512-W901Pla8Ya95WpxDn//VF9K9u2JbocwV/v75TE0YIHNTbhqUTv9w4VuQ9MaWlNOkkEfFwkdNhXgcLqPSmHy0fA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "peer": true + }, + "node_modules/@rollup/rollup-freebsd-arm64": { + "version": "4.52.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.52.5.tgz", + "integrity": "sha512-QofO7i7JycsYOWxe0GFqhLmF6l1TqBswJMvICnRUjqCx8b47MTo46W8AoeQwiokAx3zVryVnxtBMcGcnX12LvA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "peer": true + }, + "node_modules/@rollup/rollup-freebsd-x64": { + "version": "4.52.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.52.5.tgz", + "integrity": "sha512-jr21b/99ew8ujZubPo9skbrItHEIE50WdV86cdSoRkKtmWa+DDr6fu2c/xyRT0F/WazZpam6kk7IHBerSL7LDQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "peer": true + }, + "node_modules/@rollup/rollup-linux-arm-gnueabihf": { + "version": "4.52.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.52.5.tgz", + "integrity": "sha512-PsNAbcyv9CcecAUagQefwX8fQn9LQ4nZkpDboBOttmyffnInRy8R8dSg6hxxl2Re5QhHBf6FYIDhIj5v982ATQ==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "peer": true + }, + "node_modules/@rollup/rollup-linux-arm-musleabihf": { + "version": "4.52.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.52.5.tgz", + "integrity": "sha512-Fw4tysRutyQc/wwkmcyoqFtJhh0u31K+Q6jYjeicsGJJ7bbEq8LwPWV/w0cnzOqR2m694/Af6hpFayLJZkG2VQ==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "peer": true + }, + "node_modules/@rollup/rollup-linux-arm64-gnu": { + "version": "4.52.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.52.5.tgz", + "integrity": "sha512-a+3wVnAYdQClOTlyapKmyI6BLPAFYs0JM8HRpgYZQO02rMR09ZcV9LbQB+NL6sljzG38869YqThrRnfPMCDtZg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "peer": true + }, + "node_modules/@rollup/rollup-linux-arm64-musl": { + "version": "4.52.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.52.5.tgz", + "integrity": "sha512-AvttBOMwO9Pcuuf7m9PkC1PUIKsfaAJ4AYhy944qeTJgQOqJYJ9oVl2nYgY7Rk0mkbsuOpCAYSs6wLYB2Xiw0Q==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "peer": true + }, + "node_modules/@rollup/rollup-linux-loong64-gnu": { + "version": "4.52.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-gnu/-/rollup-linux-loong64-gnu-4.52.5.tgz", + "integrity": "sha512-DkDk8pmXQV2wVrF6oq5tONK6UHLz/XcEVow4JTTerdeV1uqPeHxwcg7aFsfnSm9L+OO8WJsWotKM2JJPMWrQtA==", + "cpu": [ + "loong64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "peer": true + }, + "node_modules/@rollup/rollup-linux-ppc64-gnu": { + "version": "4.52.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-gnu/-/rollup-linux-ppc64-gnu-4.52.5.tgz", + "integrity": "sha512-W/b9ZN/U9+hPQVvlGwjzi+Wy4xdoH2I8EjaCkMvzpI7wJUs8sWJ03Rq96jRnHkSrcHTpQe8h5Tg3ZzUPGauvAw==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "peer": true + }, + "node_modules/@rollup/rollup-linux-riscv64-gnu": { + "version": "4.52.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.52.5.tgz", + "integrity": "sha512-sjQLr9BW7R/ZiXnQiWPkErNfLMkkWIoCz7YMn27HldKsADEKa5WYdobaa1hmN6slu9oWQbB6/jFpJ+P2IkVrmw==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "peer": true + }, + "node_modules/@rollup/rollup-linux-riscv64-musl": { + "version": "4.52.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.52.5.tgz", + "integrity": "sha512-hq3jU/kGyjXWTvAh2awn8oHroCbrPm8JqM7RUpKjalIRWWXE01CQOf/tUNWNHjmbMHg/hmNCwc/Pz3k1T/j/Lg==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "peer": true + }, + "node_modules/@rollup/rollup-linux-s390x-gnu": { + "version": "4.52.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.52.5.tgz", + "integrity": "sha512-gn8kHOrku8D4NGHMK1Y7NA7INQTRdVOntt1OCYypZPRt6skGbddska44K8iocdpxHTMMNui5oH4elPH4QOLrFQ==", + "cpu": [ + "s390x" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "peer": true + }, + "node_modules/@rollup/rollup-linux-x64-gnu": { + "version": "4.52.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.52.5.tgz", + "integrity": "sha512-hXGLYpdhiNElzN770+H2nlx+jRog8TyynpTVzdlc6bndktjKWyZyiCsuDAlpd+j+W+WNqfcyAWz9HxxIGfZm1Q==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "peer": true + }, + "node_modules/@rollup/rollup-linux-x64-musl": { + "version": "4.52.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.52.5.tgz", + "integrity": "sha512-arCGIcuNKjBoKAXD+y7XomR9gY6Mw7HnFBv5Rw7wQRvwYLR7gBAgV7Mb2QTyjXfTveBNFAtPt46/36vV9STLNg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "peer": true + }, + "node_modules/@rollup/rollup-openharmony-arm64": { + "version": "4.52.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-openharmony-arm64/-/rollup-openharmony-arm64-4.52.5.tgz", + "integrity": "sha512-QoFqB6+/9Rly/RiPjaomPLmR/13cgkIGfA40LHly9zcH1S0bN2HVFYk3a1eAyHQyjs3ZJYlXvIGtcCs5tko9Cw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openharmony" + ], + "peer": true + }, + "node_modules/@rollup/rollup-win32-arm64-msvc": { + "version": "4.52.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.52.5.tgz", + "integrity": "sha512-w0cDWVR6MlTstla1cIfOGyl8+qb93FlAVutcor14Gf5Md5ap5ySfQ7R9S/NjNaMLSFdUnKGEasmVnu3lCMqB7w==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "peer": true + }, + "node_modules/@rollup/rollup-win32-ia32-msvc": { + "version": "4.52.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.52.5.tgz", + "integrity": "sha512-Aufdpzp7DpOTULJCuvzqcItSGDH73pF3ko/f+ckJhxQyHtp67rHw3HMNxoIdDMUITJESNE6a8uh4Lo4SLouOUg==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "peer": true + }, + "node_modules/@rollup/rollup-win32-x64-gnu": { + "version": "4.52.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-gnu/-/rollup-win32-x64-gnu-4.52.5.tgz", + "integrity": "sha512-UGBUGPFp1vkj6p8wCRraqNhqwX/4kNQPS57BCFc8wYh0g94iVIW33wJtQAx3G7vrjjNtRaxiMUylM0ktp/TRSQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "peer": true + }, + "node_modules/@rollup/rollup-win32-x64-msvc": { + "version": "4.52.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.52.5.tgz", + "integrity": "sha512-TAcgQh2sSkykPRWLrdyy2AiceMckNf5loITqXxFI5VuQjS5tSuw3WlwdN8qv8vzjLAUTvYaH/mVjSFpbkFbpTg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "peer": true + }, "node_modules/@rtsao/scc": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/@rtsao/scc/-/scc-1.1.0.tgz", @@ -3974,21 +4284,23 @@ } }, "node_modules/@supabase/auth-js": { - "version": "2.70.0", - "resolved": "https://registry.npmjs.org/@supabase/auth-js/-/auth-js-2.70.0.tgz", - "integrity": "sha512-BaAK/tOAZFJtzF1sE3gJ2FwTjLf4ky3PSvcvLGEgEmO4BSBkwWKu8l67rLLIBZPDnCyV7Owk2uPyKHa0kj5QGg==", + "version": "2.77.0", + "resolved": "https://registry.npmjs.org/@supabase/auth-js/-/auth-js-2.77.0.tgz", + "integrity": "sha512-IRxyj2l46EutSX7AbGkHA7LSmrgqnXjPfKouBlGT6NqS1YOm+jMMwfdhf6zP5EZ4giUfdt2u+yHIBgyXU/LEtg==", "license": "MIT", "dependencies": { - "@supabase/node-fetch": "^2.6.14" + "@supabase/node-fetch": "2.6.15", + "tslib": "2.8.1" } }, "node_modules/@supabase/functions-js": { - "version": "2.4.4", - "resolved": "https://registry.npmjs.org/@supabase/functions-js/-/functions-js-2.4.4.tgz", - "integrity": "sha512-WL2p6r4AXNGwop7iwvul2BvOtuJ1YQy8EbOd0dhG1oN1q8el/BIRSFCFnWAMM/vJJlHWLi4ad22sKbKr9mvjoA==", + "version": "2.77.0", + "resolved": "https://registry.npmjs.org/@supabase/functions-js/-/functions-js-2.77.0.tgz", + "integrity": "sha512-MxNW3YoQysbiVEiLAozCTqk1urswtVjAZggeZ5Sw+vJ+u1EvFNmTnirzwTj7M8XjTOMmorheruPmNtfHEwudvw==", "license": "MIT", "dependencies": { - "@supabase/node-fetch": "^2.6.14" + "@supabase/node-fetch": "2.6.15", + "tslib": "2.8.1" } }, "node_modules/@supabase/node-fetch": { @@ -4004,47 +4316,50 @@ } }, "node_modules/@supabase/postgrest-js": { - "version": "1.19.4", - "resolved": "https://registry.npmjs.org/@supabase/postgrest-js/-/postgrest-js-1.19.4.tgz", - "integrity": "sha512-O4soKqKtZIW3olqmbXXbKugUtByD2jPa8kL2m2c1oozAO11uCcGrRhkZL0kVxjBLrXHE0mdSkFsMj7jDSfyNpw==", + "version": "2.77.0", + "resolved": "https://registry.npmjs.org/@supabase/postgrest-js/-/postgrest-js-2.77.0.tgz", + "integrity": "sha512-Ly8C48x875JcUXBdML7SPRjO1Bpmjo6Sax/Tz4Ij6YU5paCrGKxEYDBVLP2eHKkQvf+LQ+GIbRFF1DorRvyfwQ==", "license": "MIT", "dependencies": { - "@supabase/node-fetch": "^2.6.14" + "@supabase/node-fetch": "2.6.15", + "tslib": "2.8.1" } }, "node_modules/@supabase/realtime-js": { - "version": "2.11.10", - "resolved": "https://registry.npmjs.org/@supabase/realtime-js/-/realtime-js-2.11.10.tgz", - "integrity": "sha512-SJKVa7EejnuyfImrbzx+HaD9i6T784khuw1zP+MBD7BmJYChegGxYigPzkKX8CK8nGuDntmeSD3fvriaH0EGZA==", + "version": "2.77.0", + "resolved": "https://registry.npmjs.org/@supabase/realtime-js/-/realtime-js-2.77.0.tgz", + "integrity": "sha512-Ycv2VZ8yTjvlR2NQecGJUlP0Dh4LhF1Y1oZ3IMQcjjTbDriWSQgfc9HSLIQUaY/eTdtfXfyVKOGE+tieWneV8Q==", "license": "MIT", "dependencies": { - "@supabase/node-fetch": "^2.6.13", + "@supabase/node-fetch": "2.6.15", "@types/phoenix": "^1.6.6", "@types/ws": "^8.18.1", + "tslib": "2.8.1", "ws": "^8.18.2" } }, "node_modules/@supabase/storage-js": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/@supabase/storage-js/-/storage-js-2.7.1.tgz", - "integrity": "sha512-asYHcyDR1fKqrMpytAS1zjyEfvxuOIp1CIXX7ji4lHHcJKqyk+sLl/Vxgm4sN6u8zvuUtae9e4kDxQP2qrwWBA==", + "version": "2.77.0", + "resolved": "https://registry.npmjs.org/@supabase/storage-js/-/storage-js-2.77.0.tgz", + "integrity": "sha512-4+OpVA4U0C4HM1QuINlgjqFxnRsmqPnuurTDN4m6nRanafuqQQ/UtMjdUU57iygBo70IGBlBefZ8gGNWzD1sLg==", "license": "MIT", "dependencies": { - "@supabase/node-fetch": "^2.6.14" + "@supabase/node-fetch": "2.6.15", + "tslib": "2.8.1" } }, "node_modules/@supabase/supabase-js": { - "version": "2.50.0", - "resolved": "https://registry.npmjs.org/@supabase/supabase-js/-/supabase-js-2.50.0.tgz", - "integrity": "sha512-M1Gd5tPaaghYZ9OjeO1iORRqbTWFEz/cF3pPubRnMPzA+A8SiUsXXWDP+DWsASZcjEcVEcVQIAF38i5wrijYOg==", + "version": "2.77.0", + "resolved": "https://registry.npmjs.org/@supabase/supabase-js/-/supabase-js-2.77.0.tgz", + "integrity": "sha512-s6OQ8RZ0ioQCwVDh2Tv502XaUQCuRbbjpujYJB1h0JWELRsqjLDsgB5kZUkETPgtTAjJk7z97YPUsRg80PohfA==", "license": "MIT", "dependencies": { - "@supabase/auth-js": "2.70.0", - "@supabase/functions-js": "2.4.4", + "@supabase/auth-js": "2.77.0", + "@supabase/functions-js": "2.77.0", "@supabase/node-fetch": "2.6.15", - "@supabase/postgrest-js": "1.19.4", - "@supabase/realtime-js": "2.11.10", - "@supabase/storage-js": "2.7.1" + "@supabase/postgrest-js": "2.77.0", + "@supabase/realtime-js": "2.77.0", + "@supabase/storage-js": "2.77.0" } }, "node_modules/@sveltejs/acorn-typescript": { @@ -4057,11 +4372,51 @@ "acorn": "^8.9.0" } }, + "node_modules/@sveltejs/vite-plugin-svelte": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/@sveltejs/vite-plugin-svelte/-/vite-plugin-svelte-6.2.1.tgz", + "integrity": "sha512-YZs/OSKOQAQCnJvM/P+F1URotNnYNeU3P2s4oIpzm1uFaqUEqRxUB0g5ejMjEb5Gjb9/PiBI5Ktrq4rUUF8UVQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@sveltejs/vite-plugin-svelte-inspector": "^5.0.0", + "debug": "^4.4.1", + "deepmerge": "^4.3.1", + "magic-string": "^0.30.17", + "vitefu": "^1.1.1" + }, + "engines": { + "node": "^20.19 || ^22.12 || >=24" + }, + "peerDependencies": { + "svelte": "^5.0.0", + "vite": "^6.3.0 || ^7.0.0" + } + }, + "node_modules/@sveltejs/vite-plugin-svelte-inspector": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/@sveltejs/vite-plugin-svelte-inspector/-/vite-plugin-svelte-inspector-5.0.1.tgz", + "integrity": "sha512-ubWshlMk4bc8mkwWbg6vNvCeT7lGQojE3ijDh3QTR6Zr/R+GXxsGbyH4PExEPpiFmqPhYiVSVmHBjUcVc1JIrA==", + "dev": true, + "license": "MIT", + "dependencies": { + "debug": "^4.4.1" + }, + "engines": { + "node": "^20.19 || ^22.12 || >=24" + }, + "peerDependencies": { + "@sveltejs/vite-plugin-svelte": "^6.0.0-next.0", + "svelte": "^5.0.0", + "vite": "^6.3.0 || ^7.0.0" + } + }, "node_modules/@tsconfig/svelte": { - "version": "5.0.4", - "resolved": "https://registry.npmjs.org/@tsconfig/svelte/-/svelte-5.0.4.tgz", - "integrity": "sha512-BV9NplVgLmSi4mwKzD8BD/NQ8erOY/nUE/GpgWe2ckx+wIQF5RyRirn/QsSSCPeulVpc3RA/iJt6DpfTIZps0Q==", - "dev": true + "version": "5.0.5", + "resolved": "https://registry.npmjs.org/@tsconfig/svelte/-/svelte-5.0.5.tgz", + "integrity": "sha512-48fAnUjKye38FvMiNOj0J9I/4XlQQiZlpe9xaNPfe8vy2Y1hFBt8g1yqf2EGjVvHavo4jf2lC+TQyENCr4BJBQ==", + "dev": true, + "license": "MIT" }, "node_modules/@types/codemirror": { "version": "5.60.8", @@ -4094,19 +4449,10 @@ "integrity": "sha512-xFdR6tkm0MWvBfO8xXCSsinYxHcqkQUlcHeSpMC2ukzOb6lwQAfDmW+Qt0AvlGd8HpsS28qKsB+oPeJn9I39jg==", "dev": true }, - "node_modules/@types/dns-packet": { - "version": "5.6.5", - "resolved": "https://registry.npmjs.org/@types/dns-packet/-/dns-packet-5.6.5.tgz", - "integrity": "sha512-qXOC7XLOEe43ehtWJCMnQXvgcIpv6rPmQ1jXT98Ad8A3TB1Ue50jsCbSSSyuazScEuZ/Q026vHbrOTVkmwA+7Q==", - "license": "MIT", - "dependencies": { - "@types/node": "*" - } - }, "node_modules/@types/estree": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.6.tgz", - "integrity": "sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==", + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.8.tgz", + "integrity": "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==", "dev": true, "license": "MIT" }, @@ -4123,6 +4469,21 @@ "integrity": "sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==", "dev": true }, + "node_modules/@types/lodash": { + "version": "4.17.20", + "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.17.20.tgz", + "integrity": "sha512-H3MHACvFUEiujabxhaI/ImO6gUrd8oOurg7LQtS7mbwIXA/cUqWrvBsaeJ23aZEPk1TAYkurjfMbSELfoCXlGA==", + "license": "MIT" + }, + "node_modules/@types/lodash.debounce": { + "version": "4.0.9", + "resolved": "https://registry.npmjs.org/@types/lodash.debounce/-/lodash.debounce-4.0.9.tgz", + "integrity": "sha512-Ma5JcgTREwpLRwMM+XwBR7DaWe96nC38uCBDFKZWbNKD+osjVzdpnUSwBcqCptrp16sSOLBAUb50Car5I0TCsQ==", + "license": "MIT", + "dependencies": { + "@types/lodash": "*" + } + }, "node_modules/@types/ms": { "version": "0.7.31", "resolved": "https://registry.npmjs.org/@types/ms/-/ms-0.7.31.tgz", @@ -4326,9 +4687,9 @@ } }, "node_modules/@types/readable-stream": { - "version": "4.0.21", - "resolved": "https://registry.npmjs.org/@types/readable-stream/-/readable-stream-4.0.21.tgz", - "integrity": "sha512-19eKVv9tugr03IgfXlA9UVUVRbW6IuqRO5B92Dl4a6pT7K8uaGrNS0GkxiZD0BOk6PLuXl5FhWl//eX/pzYdTQ==", + "version": "4.0.22", + "resolved": "https://registry.npmjs.org/@types/readable-stream/-/readable-stream-4.0.22.tgz", + "integrity": "sha512-/FFhJpfCLAPwAcN3mFycNUa77ddnr8jTgF5VmSNetaemWB2cIlfCA9t0YTM3JAT0wOcv8D4tjPo7pkDhK3EJIg==", "license": "MIT", "dependencies": { "@types/node": "*" @@ -4368,21 +4729,21 @@ } }, "node_modules/@typescript-eslint/eslint-plugin": { - "version": "8.25.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.25.0.tgz", - "integrity": "sha512-VM7bpzAe7JO/BFf40pIT1lJqS/z1F8OaSsUB3rpFJucQA4cOSuH2RVVVkFULN+En0Djgr29/jb4EQnedUo95KA==", + "version": "8.46.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.46.2.tgz", + "integrity": "sha512-ZGBMToy857/NIPaaCucIUQgqueOiq7HeAKkhlvqVV4lm089zUFW6ikRySx2v+cAhKeUCPuWVHeimyk6Dw1iY3w==", "dev": true, "license": "MIT", "dependencies": { "@eslint-community/regexpp": "^4.10.0", - "@typescript-eslint/scope-manager": "8.25.0", - "@typescript-eslint/type-utils": "8.25.0", - "@typescript-eslint/utils": "8.25.0", - "@typescript-eslint/visitor-keys": "8.25.0", + "@typescript-eslint/scope-manager": "8.46.2", + "@typescript-eslint/type-utils": "8.46.2", + "@typescript-eslint/utils": "8.46.2", + "@typescript-eslint/visitor-keys": "8.46.2", "graphemer": "^1.4.0", - "ignore": "^5.3.1", + "ignore": "^7.0.0", "natural-compare": "^1.4.0", - "ts-api-utils": "^2.0.1" + "ts-api-utils": "^2.1.0" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -4392,22 +4753,32 @@ "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "@typescript-eslint/parser": "^8.0.0 || ^8.0.0-alpha.0", + "@typescript-eslint/parser": "^8.46.2", "eslint": "^8.57.0 || ^9.0.0", - "typescript": ">=4.8.4 <5.8.0" + "typescript": ">=4.8.4 <6.0.0" + } + }, + "node_modules/@typescript-eslint/eslint-plugin/node_modules/ignore": { + "version": "7.0.5", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-7.0.5.tgz", + "integrity": "sha512-Hs59xBNfUIunMFgWAbGX5cq6893IbWg4KnrjbYwX3tx0ztorVgTDA6B2sxf8ejHJ4wz8BqGUMYlnzNBer5NvGg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 4" } }, "node_modules/@typescript-eslint/parser": { - "version": "8.25.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.25.0.tgz", - "integrity": "sha512-4gbs64bnbSzu4FpgMiQ1A+D+urxkoJk/kqlDJ2W//5SygaEiAP2B4GoS7TEdxgwol2el03gckFV9lJ4QOMiiHg==", + "version": "8.46.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.46.2.tgz", + "integrity": "sha512-BnOroVl1SgrPLywqxyqdJ4l3S2MsKVLDVxZvjI1Eoe8ev2r3kGDo+PcMihNmDE+6/KjkTubSJnmqGZZjQSBq/g==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/scope-manager": "8.25.0", - "@typescript-eslint/types": "8.25.0", - "@typescript-eslint/typescript-estree": "8.25.0", - "@typescript-eslint/visitor-keys": "8.25.0", + "@typescript-eslint/scope-manager": "8.46.2", + "@typescript-eslint/types": "8.46.2", + "@typescript-eslint/typescript-estree": "8.46.2", + "@typescript-eslint/visitor-keys": "8.46.2", "debug": "^4.3.4" }, "engines": { @@ -4419,18 +4790,40 @@ }, "peerDependencies": { "eslint": "^8.57.0 || ^9.0.0", - "typescript": ">=4.8.4 <5.8.0" + "typescript": ">=4.8.4 <6.0.0" } }, - "node_modules/@typescript-eslint/scope-manager": { - "version": "8.25.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.25.0.tgz", - "integrity": "sha512-6PPeiKIGbgStEyt4NNXa2ru5pMzQ8OYKO1hX1z53HMomrmiSB+R5FmChgQAP1ro8jMtNawz+TRQo/cSXrauTpg==", + "node_modules/@typescript-eslint/project-service": { + "version": "8.46.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/project-service/-/project-service-8.46.2.tgz", + "integrity": "sha512-PULOLZ9iqwI7hXcmL4fVfIsBi6AN9YxRc0frbvmg8f+4hQAjQ5GYNKK0DIArNo+rOKmR/iBYwkpBmnIwin4wBg==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/types": "8.25.0", - "@typescript-eslint/visitor-keys": "8.25.0" + "@typescript-eslint/tsconfig-utils": "^8.46.2", + "@typescript-eslint/types": "^8.46.2", + "debug": "^4.3.4" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "typescript": ">=4.8.4 <6.0.0" + } + }, + "node_modules/@typescript-eslint/scope-manager": { + "version": "8.46.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.46.2.tgz", + "integrity": "sha512-LF4b/NmGvdWEHD2H4MsHD8ny6JpiVNDzrSZr3CsckEgCbAGZbYM4Cqxvi9L+WqDMT+51Ozy7lt2M+d0JLEuBqA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/types": "8.46.2", + "@typescript-eslint/visitor-keys": "8.46.2" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -4440,17 +4833,35 @@ "url": "https://opencollective.com/typescript-eslint" } }, + "node_modules/@typescript-eslint/tsconfig-utils": { + "version": "8.46.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.46.2.tgz", + "integrity": "sha512-a7QH6fw4S57+F5y2FIxxSDyi5M4UfGF+Jl1bCGd7+L4KsaUY80GsiF/t0UoRFDHAguKlBaACWJRmdrc6Xfkkag==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "typescript": ">=4.8.4 <6.0.0" + } + }, "node_modules/@typescript-eslint/type-utils": { - "version": "8.25.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.25.0.tgz", - "integrity": "sha512-d77dHgHWnxmXOPJuDWO4FDWADmGQkN5+tt6SFRZz/RtCWl4pHgFl3+WdYCn16+3teG09DY6XtEpf3gGD0a186g==", + "version": "8.46.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.46.2.tgz", + "integrity": "sha512-HbPM4LbaAAt/DjxXaG9yiS9brOOz6fabal4uvUmaUYe6l3K1phQDMQKBRUrr06BQkxkvIZVVHttqiybM9nJsLA==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/typescript-estree": "8.25.0", - "@typescript-eslint/utils": "8.25.0", + "@typescript-eslint/types": "8.46.2", + "@typescript-eslint/typescript-estree": "8.46.2", + "@typescript-eslint/utils": "8.46.2", "debug": "^4.3.4", - "ts-api-utils": "^2.0.1" + "ts-api-utils": "^2.1.0" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -4461,13 +4872,13 @@ }, "peerDependencies": { "eslint": "^8.57.0 || ^9.0.0", - "typescript": ">=4.8.4 <5.8.0" + "typescript": ">=4.8.4 <6.0.0" } }, "node_modules/@typescript-eslint/types": { - "version": "8.25.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.25.0.tgz", - "integrity": "sha512-+vUe0Zb4tkNgznQwicsvLUJgZIRs6ITeWSCclX1q85pR1iOiaj+4uZJIUp//Z27QWu5Cseiw3O3AR8hVpax7Aw==", + "version": "8.46.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.46.2.tgz", + "integrity": "sha512-lNCWCbq7rpg7qDsQrd3D6NyWYu+gkTENkG5IKYhUIcxSb59SQC/hEQ+MrG4sTgBVghTonNWq42bA/d4yYumldQ==", "dev": true, "license": "MIT", "engines": { @@ -4479,20 +4890,22 @@ } }, "node_modules/@typescript-eslint/typescript-estree": { - "version": "8.25.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.25.0.tgz", - "integrity": "sha512-ZPaiAKEZ6Blt/TPAx5Ot0EIB/yGtLI2EsGoY6F7XKklfMxYQyvtL+gT/UCqkMzO0BVFHLDlzvFqQzurYahxv9Q==", + "version": "8.46.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.46.2.tgz", + "integrity": "sha512-f7rW7LJ2b7Uh2EiQ+7sza6RDZnajbNbemn54Ob6fRwQbgcIn+GWfyuHDHRYgRoZu1P4AayVScrRW+YfbTvPQoQ==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/types": "8.25.0", - "@typescript-eslint/visitor-keys": "8.25.0", + "@typescript-eslint/project-service": "8.46.2", + "@typescript-eslint/tsconfig-utils": "8.46.2", + "@typescript-eslint/types": "8.46.2", + "@typescript-eslint/visitor-keys": "8.46.2", "debug": "^4.3.4", "fast-glob": "^3.3.2", "is-glob": "^4.0.3", "minimatch": "^9.0.4", "semver": "^7.6.0", - "ts-api-utils": "^2.0.1" + "ts-api-utils": "^2.1.0" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -4502,7 +4915,17 @@ "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "typescript": ">=4.8.4 <5.8.0" + "typescript": ">=4.8.4 <6.0.0" + } + }, + "node_modules/@typescript-eslint/typescript-estree/node_modules/brace-expansion": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", + "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0" } }, "node_modules/@typescript-eslint/typescript-estree/node_modules/minimatch": { @@ -4522,16 +4945,16 @@ } }, "node_modules/@typescript-eslint/utils": { - "version": "8.25.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.25.0.tgz", - "integrity": "sha512-syqRbrEv0J1wywiLsK60XzHnQe/kRViI3zwFALrNEgnntn1l24Ra2KvOAWwWbWZ1lBZxZljPDGOq967dsl6fkA==", + "version": "8.46.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.46.2.tgz", + "integrity": "sha512-sExxzucx0Tud5tE0XqR0lT0psBQvEpnpiul9XbGUB1QwpWJJAps1O/Z7hJxLGiZLBKMCutjTzDgmd1muEhBnVg==", "dev": true, "license": "MIT", "dependencies": { - "@eslint-community/eslint-utils": "^4.4.0", - "@typescript-eslint/scope-manager": "8.25.0", - "@typescript-eslint/types": "8.25.0", - "@typescript-eslint/typescript-estree": "8.25.0" + "@eslint-community/eslint-utils": "^4.7.0", + "@typescript-eslint/scope-manager": "8.46.2", + "@typescript-eslint/types": "8.46.2", + "@typescript-eslint/typescript-estree": "8.46.2" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -4542,18 +4965,18 @@ }, "peerDependencies": { "eslint": "^8.57.0 || ^9.0.0", - "typescript": ">=4.8.4 <5.8.0" + "typescript": ">=4.8.4 <6.0.0" } }, "node_modules/@typescript-eslint/visitor-keys": { - "version": "8.25.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.25.0.tgz", - "integrity": "sha512-kCYXKAum9CecGVHGij7muybDfTS2sD3t0L4bJsEZLkyrXUImiCTq1M3LG2SRtOhiHFwMR9wAFplpT6XHYjTkwQ==", + "version": "8.46.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.46.2.tgz", + "integrity": "sha512-tUFMXI4gxzzMXt4xpGJEsBsTox0XbNQ1y94EwlD/CuZwFcQP79xfQqMhau9HsRc/J0cAPA/HZt1dZPtGn9V/7w==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/types": "8.25.0", - "eslint-visitor-keys": "^4.2.0" + "@typescript-eslint/types": "8.46.2", + "eslint-visitor-keys": "^4.2.1" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -4576,37 +4999,18 @@ "url": "https://opencollective.com/eslint" } }, - "node_modules/@waku/discovery": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/@waku/discovery/-/discovery-0.0.8.tgz", - "integrity": "sha512-Yh1pNlGasRuq7LHB5bfa5VUkvfy4vT2xWfOOYU8LD6r+5w4WIkBI18hDrOQlGtXHdNLfcoTQK7YWqqEPFNNxlg==", + "node_modules/@waku/core": { + "version": "0.0.39", + "resolved": "https://registry.npmjs.org/@waku/core/-/core-0.0.39.tgz", + "integrity": "sha512-Vgb52md4GOzM5z9xfULzjN2tvVHKszFmj5zc2mVDoIgySH4cFBgDTHtVtGEwrFRFWadWYKBtpKBdmG3X+W7SNA==", "license": "MIT OR Apache-2.0", "dependencies": { - "@waku/core": "0.0.35", - "@waku/enr": "0.0.29", - "@waku/interfaces": "0.0.30", - "@waku/proto": "^0.0.10", - "@waku/utils": "0.0.23", - "debug": "^4.3.4", - "dns-over-http-resolver": "^3.0.8", - "hi-base32": "^0.5.1", - "uint8arrays": "^5.0.1" - }, - "engines": { - "node": ">=20" - } - }, - "node_modules/@waku/discovery/node_modules/@waku/core": { - "version": "0.0.35", - "resolved": "https://registry.npmjs.org/@waku/core/-/core-0.0.35.tgz", - "integrity": "sha512-UbAgBznjewZed4ZAd30BUTq6OsiqTgVQkFD1PnJxw+K4hn0AUKHjPYRTYOzkJvxg7nXd7Y6LCZ7s6XeujwrR4w==", - "license": "MIT OR Apache-2.0", - "dependencies": { - "@libp2p/ping": "2.0.1", - "@waku/enr": "^0.0.29", - "@waku/interfaces": "0.0.30", - "@waku/proto": "0.0.10", - "@waku/utils": "0.0.23", + "@libp2p/ping": "2.0.35", + "@noble/hashes": "^1.3.2", + "@waku/enr": "^0.0.33", + "@waku/interfaces": "0.0.34", + "@waku/proto": "0.0.14", + "@waku/utils": "0.0.27", "debug": "^4.3.4", "it-all": "^3.0.4", "it-length-prefixed": "^9.0.4", @@ -4615,11 +5019,11 @@ "uuid": "^9.0.0" }, "engines": { - "node": ">=20" + "node": ">=22" }, "peerDependencies": { "@multiformats/multiaddr": "^12.0.0", - "libp2p": "2.1.8" + "libp2p": "2.8.11" }, "peerDependenciesMeta": { "@multiformats/multiaddr": { @@ -4630,43 +5034,24 @@ } } }, - "node_modules/@waku/discovery/node_modules/libp2p": { - "version": "2.1.8", - "resolved": "https://registry.npmjs.org/libp2p/-/libp2p-2.1.8.tgz", - "integrity": "sha512-OzUUgAs6983lP2FDqc3oABeUAyvd3iJ/BlYjwmjddpUwQO6gemuJFpWujagj2Vtj+oPosGrrPGWqv+WPnTkHUA==", + "node_modules/@waku/core/node_modules/it-length-prefixed": { + "version": "9.1.1", + "resolved": "https://registry.npmjs.org/it-length-prefixed/-/it-length-prefixed-9.1.1.tgz", + "integrity": "sha512-O88nBweT6M9ozsmok68/auKH7ik/slNM4pYbM9lrfy2z5QnpokW5SlrepHZDKtN71llhG2sZvd6uY4SAl+lAQg==", "license": "Apache-2.0 OR MIT", - "optional": true, - "peer": true, "dependencies": { - "@libp2p/crypto": "^5.0.5", - "@libp2p/interface": "^2.1.3", - "@libp2p/interface-internal": "^2.0.8", - "@libp2p/logger": "^5.1.1", - "@libp2p/multistream-select": "^6.0.6", - "@libp2p/peer-collections": "^6.0.8", - "@libp2p/peer-id": "^5.0.5", - "@libp2p/peer-store": "^11.0.8", - "@libp2p/utils": "^6.1.1", - "@multiformats/dns": "^1.0.6", - "@multiformats/multiaddr": "^12.2.3", - "@multiformats/multiaddr-matcher": "^1.2.1", - "any-signal": "^4.1.1", - "datastore-core": "^10.0.0", - "interface-datastore": "^8.3.0", - "it-byte-stream": "^1.0.12", - "it-merge": "^3.0.5", - "it-parallel": "^3.0.7", - "merge-options": "^3.0.4", - "multiformats": "^13.1.0", - "p-defer": "^4.0.1", - "p-retry": "^6.2.0", - "progress-events": "^1.0.0", - "race-event": "^1.3.0", - "race-signal": "^1.0.2", - "uint8arrays": "^5.1.0" + "it-reader": "^6.0.1", + "it-stream-types": "^2.0.1", + "uint8-varint": "^2.0.1", + "uint8arraylist": "^2.0.0", + "uint8arrays": "^5.0.1" + }, + "engines": { + "node": ">=16.0.0", + "npm": ">=7.0.0" } }, - "node_modules/@waku/discovery/node_modules/uuid": { + "node_modules/@waku/core/node_modules/uuid": { "version": "9.0.1", "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.1.tgz", "integrity": "sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==", @@ -4679,23 +5064,43 @@ "uuid": "dist/bin/uuid" } }, + "node_modules/@waku/discovery": { + "version": "0.0.12", + "resolved": "https://registry.npmjs.org/@waku/discovery/-/discovery-0.0.12.tgz", + "integrity": "sha512-4ItzLMQA79xveu5I9ymx3Q1A/Aj0fGjdi8TnPnb9xnm2O927w71efnkxmHo3rwATEYonXiB34NpMN2ecAp1enA==", + "license": "MIT OR Apache-2.0", + "dependencies": { + "@waku/core": "0.0.39", + "@waku/enr": "0.0.33", + "@waku/interfaces": "0.0.34", + "@waku/proto": "^0.0.14", + "@waku/utils": "0.0.27", + "debug": "^4.3.4", + "dns-over-http-resolver": "^3.0.8", + "hi-base32": "^0.5.1", + "uint8arrays": "^5.0.1" + }, + "engines": { + "node": ">=22" + } + }, "node_modules/@waku/enr": { - "version": "0.0.29", - "resolved": "https://registry.npmjs.org/@waku/enr/-/enr-0.0.29.tgz", - "integrity": "sha512-q7vQmD4tDi5o4o6VNDhSLLzUcZNQxbs4whbgz6L+M2swPsQ6vS3dS2PNmR3qt3ixvHUpEwWGEfVp9meMBxvVBA==", + "version": "0.0.33", + "resolved": "https://registry.npmjs.org/@waku/enr/-/enr-0.0.33.tgz", + "integrity": "sha512-OVZoCXc9Lto2tUfo+iSqQ61pmRm/QikYSJWc3InKmsL3qtfpMShiChK/X/PafwdRFVA28b46itm++KUqMjGi+A==", "license": "MIT OR Apache-2.0", "dependencies": { "@ethersproject/rlp": "^5.7.0", - "@libp2p/crypto": "^5.0.1", - "@libp2p/peer-id": "^5.0.1", + "@libp2p/crypto": "5.1.6", + "@libp2p/peer-id": "5.1.7", "@multiformats/multiaddr": "^12.0.0", "@noble/secp256k1": "^1.7.1", - "@waku/utils": "0.0.23", + "@waku/utils": "0.0.27", "debug": "^4.3.4", "js-sha3": "^0.9.2" }, "engines": { - "node": ">=20" + "node": ">=22" }, "peerDependencies": { "@multiformats/multiaddr": "^12.0.0" @@ -4706,163 +5111,196 @@ } } }, - "node_modules/@waku/interfaces": { - "version": "0.0.30", - "resolved": "https://registry.npmjs.org/@waku/interfaces/-/interfaces-0.0.30.tgz", - "integrity": "sha512-2cR8+u0CePmUFBB4vVL1zw403Rki5hK+7rKQH0WikDT4SD4lJTdMV4j3q3+YBfPTsMJrFCVFhLcqpeBADgavAw==", - "license": "MIT OR Apache-2.0", + "node_modules/@waku/enr/node_modules/@libp2p/crypto": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/@libp2p/crypto/-/crypto-5.1.6.tgz", + "integrity": "sha512-hCNDInAsjfFTOr1ZlVTVuRKpkGEbR1GC+cDbmn2Vslwd0dHZHqhKv5ye7l6NZaiNUxxqUCVmqvJIWqVLuTPDdg==", + "license": "Apache-2.0 OR MIT", "dependencies": { - "@waku/proto": "^0.0.10" - }, - "engines": { - "node": ">=20" + "@libp2p/interface": "^2.10.4", + "@noble/curves": "^1.9.1", + "@noble/hashes": "^1.8.0", + "multiformats": "^13.3.6", + "protons-runtime": "^5.5.0", + "uint8arraylist": "^2.4.8", + "uint8arrays": "^5.1.0" } }, - "node_modules/@waku/message-hash": { - "version": "0.1.19", - "resolved": "https://registry.npmjs.org/@waku/message-hash/-/message-hash-0.1.19.tgz", - "integrity": "sha512-fl+qky3MQK8l3HTT5wq23NcdYFYNqVcUVwBblX9/IArcDlDNjEEdK68K3n8rFWxBBd2JAK0RxU7MMkLiK3vWUA==", - "license": "MIT OR Apache-2.0", + "node_modules/@waku/enr/node_modules/@libp2p/peer-id": { + "version": "5.1.7", + "resolved": "https://registry.npmjs.org/@libp2p/peer-id/-/peer-id-5.1.7.tgz", + "integrity": "sha512-KBT8Edx/Sqxj0vKe5mPM2PQx06VDmGzx2BZ1M+LiDAM94q9Sag4tyaUugHyTrJKGG8V+7lx1Fz46kfbezuwR9g==", + "license": "Apache-2.0 OR MIT", "dependencies": { - "@noble/hashes": "^1.3.2", - "@waku/utils": "0.0.23" - }, + "@libp2p/crypto": "^5.1.6", + "@libp2p/interface": "^2.10.4", + "multiformats": "^13.3.6", + "uint8arrays": "^5.1.0" + } + }, + "node_modules/@waku/interfaces": { + "version": "0.0.34", + "resolved": "https://registry.npmjs.org/@waku/interfaces/-/interfaces-0.0.34.tgz", + "integrity": "sha512-15+SOfr8cKk5J2ukSucy/T6j23jIudRt1hr/N09YaNUvQ19iXofjne5MU/P8otmgP8daedCijCagRB0rwoHKKQ==", + "license": "MIT OR Apache-2.0", "engines": { - "node": ">=20" + "node": ">=22" } }, "node_modules/@waku/proto": { - "version": "0.0.10", - "resolved": "https://registry.npmjs.org/@waku/proto/-/proto-0.0.10.tgz", - "integrity": "sha512-dgBOjwRtduZSHxmr2IqDfrzgDnog8f/qiseLV39W1WNDkVLqpNT7K2bPDPz5/e2e7EtVtTAzbGPZPakOswn5FQ==", + "version": "0.0.14", + "resolved": "https://registry.npmjs.org/@waku/proto/-/proto-0.0.14.tgz", + "integrity": "sha512-8zKVHrKzzKQfZBVnpSmJ6G8H1Zd4Gqms1tj3L6K2WCE/NQDR8wJtFwziab3dJ/5rKUTjfPAWFJ57RN97ltzxGA==", "license": "MIT OR Apache-2.0", "dependencies": { "protons-runtime": "^5.4.0" }, "engines": { - "node": ">=20" + "node": ">=22" } }, "node_modules/@waku/sdk": { - "version": "0.0.31", - "resolved": "https://registry.npmjs.org/@waku/sdk/-/sdk-0.0.31.tgz", - "integrity": "sha512-vlKXitHYMsu8fOXwN+9A7N71Xh3/zVUTO4CEh0zc2ihjtQcazqkU0rX0sOsAJr/XmDZDUAzkQX6aCWULyYRXMw==", - "license": "MIT OR Apache-2.0", - "dependencies": { - "@chainsafe/libp2p-noise": "16.0.0", - "@libp2p/bootstrap": "^11.0.1", - "@libp2p/identify": "^3.0.1", - "@libp2p/mplex": "^11.0.1", - "@libp2p/ping": "2.0.1", - "@libp2p/websockets": "^9.0.1", - "@noble/hashes": "^1.3.3", - "@waku/core": "0.0.35", - "@waku/discovery": "0.0.8", - "@waku/interfaces": "0.0.30", - "@waku/message-hash": "0.1.19", - "@waku/proto": "^0.0.10", - "@waku/utils": "0.0.23", - "libp2p": "2.1.8" - }, - "engines": { - "node": ">=20" - } - }, - "node_modules/@waku/sdk/node_modules/@waku/core": { "version": "0.0.35", - "resolved": "https://registry.npmjs.org/@waku/core/-/core-0.0.35.tgz", - "integrity": "sha512-UbAgBznjewZed4ZAd30BUTq6OsiqTgVQkFD1PnJxw+K4hn0AUKHjPYRTYOzkJvxg7nXd7Y6LCZ7s6XeujwrR4w==", + "resolved": "https://registry.npmjs.org/@waku/sdk/-/sdk-0.0.35.tgz", + "integrity": "sha512-bnXl5b8BDCOKSrJ7V6PiJshc3bsBWaGweWy20IsGlXalCJj7257wK31lZxEP62lTFKHS8tPfG+EvDwrPK4oxKA==", "license": "MIT OR Apache-2.0", "dependencies": { - "@libp2p/ping": "2.0.1", - "@waku/enr": "^0.0.29", - "@waku/interfaces": "0.0.30", - "@waku/proto": "0.0.10", - "@waku/utils": "0.0.23", - "debug": "^4.3.4", - "it-all": "^3.0.4", - "it-length-prefixed": "^9.0.4", - "it-pipe": "^3.0.1", - "uint8arraylist": "^2.4.3", - "uuid": "^9.0.0" + "@chainsafe/libp2p-noise": "16.1.3", + "@libp2p/bootstrap": "11.0.42", + "@libp2p/identify": "3.0.36", + "@libp2p/mplex": "11.0.42", + "@libp2p/ping": "2.0.35", + "@libp2p/websockets": "9.2.16", + "@noble/hashes": "^1.3.3", + "@types/lodash.debounce": "^4.0.9", + "@waku/core": "0.0.39", + "@waku/discovery": "0.0.12", + "@waku/interfaces": "0.0.34", + "@waku/proto": "^0.0.14", + "@waku/sds": "^0.0.7", + "@waku/utils": "0.0.27", + "libp2p": "2.8.11", + "lodash.debounce": "^4.0.8" }, "engines": { - "node": ">=20" - }, - "peerDependencies": { - "@multiformats/multiaddr": "^12.0.0", - "libp2p": "2.1.8" - }, - "peerDependenciesMeta": { - "@multiformats/multiaddr": { - "optional": true - }, - "libp2p": { - "optional": true - } + "node": ">=22" } }, - "node_modules/@waku/sdk/node_modules/libp2p": { - "version": "2.1.8", - "resolved": "https://registry.npmjs.org/libp2p/-/libp2p-2.1.8.tgz", - "integrity": "sha512-OzUUgAs6983lP2FDqc3oABeUAyvd3iJ/BlYjwmjddpUwQO6gemuJFpWujagj2Vtj+oPosGrrPGWqv+WPnTkHUA==", + "node_modules/@waku/sds": { + "version": "0.0.7", + "resolved": "https://registry.npmjs.org/@waku/sds/-/sds-0.0.7.tgz", + "integrity": "sha512-wPZASJ1iH9K5gSgHMvmahRdnD/yNrNj/35R4H0SZGhUaViOyUGMooJH0YewZmVc1Dvy2L9mDitHurJWqLoWbcg==", + "license": "MIT OR Apache-2.0", + "dependencies": { + "@libp2p/interface": "2.10.4", + "@noble/hashes": "^1.7.1", + "@waku/proto": "^0.0.14", + "@waku/utils": "^0.0.27", + "chai": "^5.1.2", + "lodash": "^4.17.21" + }, + "engines": { + "node": ">=22" + } + }, + "node_modules/@waku/sds/node_modules/@libp2p/interface": { + "version": "2.10.4", + "resolved": "https://registry.npmjs.org/@libp2p/interface/-/interface-2.10.4.tgz", + "integrity": "sha512-FX3uujZgjH9bb7mDSNR54j3JzJnF/ngnQH20GQ1wPk5irIeHDvmzRlUj3bJ3hHQmdB2MxLZNT6e39O1es10LFA==", "license": "Apache-2.0 OR MIT", "dependencies": { - "@libp2p/crypto": "^5.0.5", - "@libp2p/interface": "^2.1.3", - "@libp2p/interface-internal": "^2.0.8", - "@libp2p/logger": "^5.1.1", - "@libp2p/multistream-select": "^6.0.6", - "@libp2p/peer-collections": "^6.0.8", - "@libp2p/peer-id": "^5.0.5", - "@libp2p/peer-store": "^11.0.8", - "@libp2p/utils": "^6.1.1", - "@multiformats/dns": "^1.0.6", - "@multiformats/multiaddr": "^12.2.3", - "@multiformats/multiaddr-matcher": "^1.2.1", - "any-signal": "^4.1.1", - "datastore-core": "^10.0.0", - "interface-datastore": "^8.3.0", - "it-byte-stream": "^1.0.12", - "it-merge": "^3.0.5", - "it-parallel": "^3.0.7", - "merge-options": "^3.0.4", - "multiformats": "^13.1.0", - "p-defer": "^4.0.1", - "p-retry": "^6.2.0", - "progress-events": "^1.0.0", - "race-event": "^1.3.0", - "race-signal": "^1.0.2", - "uint8arrays": "^5.1.0" - } - }, - "node_modules/@waku/sdk/node_modules/uuid": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.1.tgz", - "integrity": "sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==", - "funding": [ - "https://github.com/sponsors/broofa", - "https://github.com/sponsors/ctavan" - ], - "license": "MIT", - "bin": { - "uuid": "dist/bin/uuid" + "@multiformats/multiaddr": "^12.4.4", + "it-pushable": "^3.2.3", + "it-stream-types": "^2.0.2", + "main-event": "^1.0.1", + "multiformats": "^13.3.6", + "progress-events": "^1.0.1", + "uint8arraylist": "^2.4.8" } }, "node_modules/@waku/utils": { - "version": "0.0.23", - "resolved": "https://registry.npmjs.org/@waku/utils/-/utils-0.0.23.tgz", - "integrity": "sha512-8abBIAI7hq1kb5WVpv0o6CCW5Go3bwxo1xovKXfTZfdERwgV7/R6VcijKaUWOHF9SYIskyJuC98TFx/1HgrUBw==", + "version": "0.0.27", + "resolved": "https://registry.npmjs.org/@waku/utils/-/utils-0.0.27.tgz", + "integrity": "sha512-kIS/EN9Xoc5ik2c4MweqcvV3NEcl+CDmg09jpVUVG7fB2/yxVRakBlROytGn+vALR4pcHom1tW2dW1vtofCfFw==", "license": "MIT OR Apache-2.0", "dependencies": { "@noble/hashes": "^1.3.2", - "@waku/interfaces": "0.0.30", + "@waku/interfaces": "0.0.34", "chai": "^4.3.10", "debug": "^4.3.4", "uint8arrays": "^5.0.1" }, "engines": { - "node": ">=20" + "node": ">=22" + } + }, + "node_modules/@waku/utils/node_modules/assertion-error": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-1.1.0.tgz", + "integrity": "sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==", + "license": "MIT", + "engines": { + "node": "*" + } + }, + "node_modules/@waku/utils/node_modules/chai": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/chai/-/chai-4.5.0.tgz", + "integrity": "sha512-RITGBfijLkBddZvnn8jdqoTypxvqbOLYQkGGxXzeFjVHvudaPw0HNFD9x928/eUwYWd2dPCugVqspGALTZZQKw==", + "license": "MIT", + "dependencies": { + "assertion-error": "^1.1.0", + "check-error": "^1.0.3", + "deep-eql": "^4.1.3", + "get-func-name": "^2.0.2", + "loupe": "^2.3.6", + "pathval": "^1.1.1", + "type-detect": "^4.1.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@waku/utils/node_modules/check-error": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/check-error/-/check-error-1.0.3.tgz", + "integrity": "sha512-iKEoDYaRmd1mxM90a2OEfWhjsjPpYPuQ+lMYsoxB126+t8fw7ySEO48nmDg5COTjxDI65/Y2OWpeEHk3ZOe8zg==", + "license": "MIT", + "dependencies": { + "get-func-name": "^2.0.2" + }, + "engines": { + "node": "*" + } + }, + "node_modules/@waku/utils/node_modules/deep-eql": { + "version": "4.1.4", + "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-4.1.4.tgz", + "integrity": "sha512-SUwdGfqdKOwxCPeVYjwSyRpJ7Z+fhpwIAtmCUdZIWZ/YP5R9WAsyuSgpLVDi9bjWoN2LXHNss/dk3urXtdQxGg==", + "license": "MIT", + "dependencies": { + "type-detect": "^4.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/@waku/utils/node_modules/loupe": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/loupe/-/loupe-2.3.7.tgz", + "integrity": "sha512-zSMINGVYkdpYSOBmLi0D1Uo7JU9nVdQKrHxC8eYlV+9YKK9WePqAlL7lSlorG/U2Fw1w0hTBmaa/jrQ3UbPHtA==", + "license": "MIT", + "dependencies": { + "get-func-name": "^2.0.1" + } + }, + "node_modules/@waku/utils/node_modules/pathval": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/pathval/-/pathval-1.1.1.tgz", + "integrity": "sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==", + "license": "MIT", + "engines": { + "node": "*" } }, "node_modules/abort-controller": { @@ -4985,13 +5423,14 @@ } }, "node_modules/array-buffer-byte-length": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.1.tgz", - "integrity": "sha512-ahC5W1xgou+KTXix4sAO8Ki12Q+jf4i0+tmk3sC+zgcynshkHxzpXdImBehiUYKKKDwvfFiJl1tZt6ewscS1Mg==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.2.tgz", + "integrity": "sha512-LHE+8BuR7RYGDKvnrmcuSq3tDcKv9OFEXQt/HpbZhY7V6h0zlUXutnAD82GiFx9rdieCMjkvtcsPqBwgUl1Iiw==", "dev": true, + "license": "MIT", "dependencies": { - "call-bind": "^1.0.5", - "is-array-buffer": "^3.0.4" + "call-bound": "^1.0.3", + "is-array-buffer": "^3.0.5" }, "engines": { "node": ">= 0.4" @@ -5001,18 +5440,20 @@ } }, "node_modules/array-includes": { - "version": "3.1.8", - "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.8.tgz", - "integrity": "sha512-itaWrbYbqpGXkGhZPGUulwnhVf5Hpy1xiCFsGqyIGglbBxmG5vSjxQen3/WGOjPpNEv1RtBLKxbmVXm8HpJStQ==", + "version": "3.1.9", + "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.9.tgz", + "integrity": "sha512-FmeCCAenzH0KH381SPT5FZmiA/TmpndpcaShhfgEN9eCVjnFBqq3l1xrI42y8+PPLI6hypzou4GXw00WHmPBLQ==", "dev": true, "license": "MIT", "dependencies": { - "call-bind": "^1.0.7", + "call-bind": "^1.0.8", + "call-bound": "^1.0.4", "define-properties": "^1.2.1", - "es-abstract": "^1.23.2", - "es-object-atoms": "^1.0.0", - "get-intrinsic": "^1.2.4", - "is-string": "^1.0.7" + "es-abstract": "^1.24.0", + "es-object-atoms": "^1.1.1", + "get-intrinsic": "^1.3.0", + "is-string": "^1.1.1", + "math-intrinsics": "^1.1.0" }, "engines": { "node": ">= 0.4" @@ -5022,18 +5463,19 @@ } }, "node_modules/array.prototype.findlastindex": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.5.tgz", - "integrity": "sha512-zfETvRFA8o7EiNn++N5f/kaCw221hrpGsDmcpndVupkPzEc1Wuf3VgC0qby1BbHs7f5DVYjgtEU2LLh5bqeGfQ==", + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.6.tgz", + "integrity": "sha512-F/TKATkzseUExPlfvmwQKGITM3DGTK+vkAsCZoDc5daVygbJBnjEUCbgkAvVFsgfXfX4YIqZ/27G3k3tdXrTxQ==", "dev": true, "license": "MIT", "dependencies": { - "call-bind": "^1.0.7", + "call-bind": "^1.0.8", + "call-bound": "^1.0.4", "define-properties": "^1.2.1", - "es-abstract": "^1.23.2", + "es-abstract": "^1.23.9", "es-errors": "^1.3.0", - "es-object-atoms": "^1.0.0", - "es-shim-unscopables": "^1.0.2" + "es-object-atoms": "^1.1.1", + "es-shim-unscopables": "^1.1.0" }, "engines": { "node": ">= 0.4" @@ -5043,15 +5485,16 @@ } }, "node_modules/array.prototype.flat": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.2.tgz", - "integrity": "sha512-djYB+Zx2vLewY8RWlNCUdHjDXs2XOgm602S9E7P/UpHgfeHL00cRiIF+IN/G/aUJ7kGPb6yO/ErDI5V2s8iycA==", + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.3.tgz", + "integrity": "sha512-rwG/ja1neyLqCuGZ5YYrznA62D4mZXg0i1cIskIUKSiqF3Cje9/wXAls9B9s1Wa2fomMsIv8czB8jZcPmxCXFg==", "dev": true, + "license": "MIT", "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1", - "es-shim-unscopables": "^1.0.0" + "call-bind": "^1.0.8", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.5", + "es-shim-unscopables": "^1.0.2" }, "engines": { "node": ">= 0.4" @@ -5061,15 +5504,16 @@ } }, "node_modules/array.prototype.flatmap": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.2.tgz", - "integrity": "sha512-Ewyx0c9PmpcsByhSW4r+9zDU7sGjFc86qf/kKtuSCRdhfbk0SNLLkaT5qvcHnRGgc5NP/ly/y+qkXkqONX54CQ==", + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.3.tgz", + "integrity": "sha512-Y7Wt51eKJSyi80hFrJCePGGNo5ktJCslFuboqJsbf57CCPcm5zztluPlc4/aD8sWsKvlwatezpV4U1efk8kpjg==", "dev": true, + "license": "MIT", "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1", - "es-shim-unscopables": "^1.0.0" + "call-bind": "^1.0.8", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.5", + "es-shim-unscopables": "^1.0.2" }, "engines": { "node": ">= 0.4" @@ -5079,19 +5523,19 @@ } }, "node_modules/arraybuffer.prototype.slice": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.3.tgz", - "integrity": "sha512-bMxMKAjg13EBSVscxTaYA4mRc5t1UAXa2kXiGTNfZ079HIWXEkKmkgFrh/nJqamaLSrXO5H4WFFkPEaLJWbs3A==", + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.4.tgz", + "integrity": "sha512-BNoCY6SXXPQ7gF2opIP4GBE+Xw7U+pHMYKuzjgCN3GwiaIR09UUeKfheyIry77QtrCBlC0KK0q5/TER/tYh3PQ==", "dev": true, + "license": "MIT", "dependencies": { "array-buffer-byte-length": "^1.0.1", - "call-bind": "^1.0.5", + "call-bind": "^1.0.8", "define-properties": "^1.2.1", - "es-abstract": "^1.22.3", - "es-errors": "^1.2.1", - "get-intrinsic": "^1.2.3", - "is-array-buffer": "^3.0.4", - "is-shared-array-buffer": "^1.0.2" + "es-abstract": "^1.23.5", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.6", + "is-array-buffer": "^3.0.4" }, "engines": { "node": ">= 0.4" @@ -5101,12 +5545,22 @@ } }, "node_modules/assertion-error": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-1.1.0.tgz", - "integrity": "sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-2.0.1.tgz", + "integrity": "sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA==", "license": "MIT", "engines": { - "node": "*" + "node": ">=12" + } + }, + "node_modules/async-function": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/async-function/-/async-function-1.0.0.tgz", + "integrity": "sha512-hsU18Ae8CDTR6Kgu9DYf0EbCr/a5iGL0rytQDobUcdpYOKokk8LEjVphnXkDkgpi0wYVsqrXuP0bZxJaTqdgoA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" } }, "node_modules/available-typed-arrays": { @@ -5114,6 +5568,7 @@ "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz", "integrity": "sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==", "dev": true, + "license": "MIT", "dependencies": { "possible-typed-array-names": "^1.0.0" }, @@ -5161,9 +5616,9 @@ "license": "MIT" }, "node_modules/bl": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/bl/-/bl-6.1.0.tgz", - "integrity": "sha512-ClDyJGQkc8ZtzdAAbAwBmhMSpwN/sC9HA8jxdYm6nVUbCfZbe2mgza4qh7AuEYyEPB/c4Kznf9s66bnsKMQDjw==", + "version": "6.1.4", + "resolved": "https://registry.npmjs.org/bl/-/bl-6.1.4.tgz", + "integrity": "sha512-ZV/9asSuknOExbM/zPPA8z00lc1ihPKWaStHkkQrxHNeYx+yY+TmF+v80dpv2G0mv3HVXBu7ryoAsxbFFhf4eg==", "license": "MIT", "dependencies": { "@types/readable-stream": "^4.0.0", @@ -5179,13 +5634,14 @@ "license": "MIT" }, "node_modules/brace-expansion": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", - "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", + "version": "1.1.12", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", + "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==", "dev": true, "license": "MIT", "dependencies": { - "balanced-match": "^1.0.0" + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" } }, "node_modules/braces": { @@ -5201,6 +5657,18 @@ "node": ">=8" } }, + "node_modules/broker-factory": { + "version": "3.1.10", + "resolved": "https://registry.npmjs.org/broker-factory/-/broker-factory-3.1.10.tgz", + "integrity": "sha512-BzqK5GYFhvVFvO13uzPN0SCiOsOQuhMUbsGvTXDJMA2/N4GvIlFdxEuueE+60Zk841bBU5G3+fl2cqYEo0wgGg==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.28.4", + "fast-unique-numbers": "^9.0.24", + "tslib": "^2.8.1", + "worker-factory": "^7.0.46" + } + }, "node_modules/buffer": { "version": "6.0.3", "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", @@ -5244,16 +5712,16 @@ } }, "node_modules/call-bind": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.7.tgz", - "integrity": "sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==", + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.8.tgz", + "integrity": "sha512-oKlSFMcMwpUg2ednkhQ454wfWiU/ul3CkJe/PEHcTKuiX6RpbehUiFMXu13HalGZxfUwCQzZG747YXBn1im9ww==", "dev": true, + "license": "MIT", "dependencies": { + "call-bind-apply-helpers": "^1.0.0", "es-define-property": "^1.0.0", - "es-errors": "^1.3.0", - "function-bind": "^1.1.2", "get-intrinsic": "^1.2.4", - "set-function-length": "^1.2.1" + "set-function-length": "^1.2.2" }, "engines": { "node": ">= 0.4" @@ -5304,21 +5772,19 @@ } }, "node_modules/chai": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/chai/-/chai-4.5.0.tgz", - "integrity": "sha512-RITGBfijLkBddZvnn8jdqoTypxvqbOLYQkGGxXzeFjVHvudaPw0HNFD9x928/eUwYWd2dPCugVqspGALTZZQKw==", + "version": "5.3.3", + "resolved": "https://registry.npmjs.org/chai/-/chai-5.3.3.tgz", + "integrity": "sha512-4zNhdJD/iOjSH0A05ea+Ke6MU5mmpQcbQsSOkgdaUMJ9zTlDTD/GYlwohmIE2u0gaxHYiVHEn1Fw9mZ/ktJWgw==", "license": "MIT", "dependencies": { - "assertion-error": "^1.1.0", - "check-error": "^1.0.3", - "deep-eql": "^4.1.3", - "get-func-name": "^2.0.2", - "loupe": "^2.3.6", - "pathval": "^1.1.1", - "type-detect": "^4.1.0" + "assertion-error": "^2.0.1", + "check-error": "^2.1.1", + "deep-eql": "^5.0.1", + "loupe": "^3.1.0", + "pathval": "^2.0.0" }, "engines": { - "node": ">=4" + "node": ">=18" } }, "node_modules/chalk": { @@ -5338,15 +5804,12 @@ } }, "node_modules/check-error": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/check-error/-/check-error-1.0.3.tgz", - "integrity": "sha512-iKEoDYaRmd1mxM90a2OEfWhjsjPpYPuQ+lMYsoxB126+t8fw7ySEO48nmDg5COTjxDI65/Y2OWpeEHk3ZOe8zg==", + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/check-error/-/check-error-2.1.1.tgz", + "integrity": "sha512-OAlb+T7V4Op9OwdkjmguYRqncdlx5JiofwOAUkmTF+jNdHwzTaTs4sRAGpzLF3oOz5xAyDGrPgeIDFQmDOTiJw==", "license": "MIT", - "dependencies": { - "get-func-name": "^2.0.2" - }, "engines": { - "node": "*" + "node": ">= 16" } }, "node_modules/chokidar": { @@ -5493,15 +5956,15 @@ } }, "node_modules/data-view-buffer": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/data-view-buffer/-/data-view-buffer-1.0.1.tgz", - "integrity": "sha512-0lht7OugA5x3iJLOWFhWK/5ehONdprk0ISXqVFn/NFrDu+cuc8iADFrGQz5BnRK7LLU3JmkbXSxaqX+/mXYtUA==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/data-view-buffer/-/data-view-buffer-1.0.2.tgz", + "integrity": "sha512-EmKO5V3OLXh1rtK2wgXRansaK1/mtVdTUEiEI0W8RkvgT05kfxaH29PliLnpLP73yYO6142Q72QNa8Wx/A5CqQ==", "dev": true, "license": "MIT", "dependencies": { - "call-bind": "^1.0.6", + "call-bound": "^1.0.3", "es-errors": "^1.3.0", - "is-data-view": "^1.0.1" + "is-data-view": "^1.0.2" }, "engines": { "node": ">= 0.4" @@ -5511,31 +5974,31 @@ } }, "node_modules/data-view-byte-length": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/data-view-byte-length/-/data-view-byte-length-1.0.1.tgz", - "integrity": "sha512-4J7wRJD3ABAzr8wP+OcIcqq2dlUKp4DVflx++hs5h5ZKydWMI6/D/fAot+yh6g2tHh8fLFTvNOaVN357NvSrOQ==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/data-view-byte-length/-/data-view-byte-length-1.0.2.tgz", + "integrity": "sha512-tuhGbE6CfTM9+5ANGf+oQb72Ky/0+s3xKUpHvShfiz2RxMFgFPjsXuRLBVMtvMs15awe45SRb83D6wH4ew6wlQ==", "dev": true, "license": "MIT", "dependencies": { - "call-bind": "^1.0.7", + "call-bound": "^1.0.3", "es-errors": "^1.3.0", - "is-data-view": "^1.0.1" + "is-data-view": "^1.0.2" }, "engines": { "node": ">= 0.4" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://github.com/sponsors/inspect-js" } }, "node_modules/data-view-byte-offset": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/data-view-byte-offset/-/data-view-byte-offset-1.0.0.tgz", - "integrity": "sha512-t/Ygsytq+R995EJ5PZlD4Cu56sWa8InXySaViRzw9apusqsOO2bQP+SbYzAhR0pFKoB+43lYy8rWban9JSuXnA==", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/data-view-byte-offset/-/data-view-byte-offset-1.0.1.tgz", + "integrity": "sha512-BS8PfmtDGnrgYdOonGZQdLZslWIeCGFP9tpan0hi1Co2Zr2NKADsvGYA8XxuG/4UWgJ6Cjtv+YJnB6MM69QGlQ==", "dev": true, "license": "MIT", "dependencies": { - "call-bind": "^1.0.6", + "call-bound": "^1.0.2", "es-errors": "^1.3.0", "is-data-view": "^1.0.1" }, @@ -5582,13 +6045,10 @@ } }, "node_modules/deep-eql": { - "version": "4.1.4", - "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-4.1.4.tgz", - "integrity": "sha512-SUwdGfqdKOwxCPeVYjwSyRpJ7Z+fhpwIAtmCUdZIWZ/YP5R9WAsyuSgpLVDi9bjWoN2LXHNss/dk3urXtdQxGg==", + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-5.0.2.tgz", + "integrity": "sha512-h5k/5U50IJJFpzfL6nO9jaaumfjO/f2NjK/oYB2Djzm4p9L+3T9qWpZqZ2hAbLPuuYq9wrU08WQyBTL5GbPk5Q==", "license": "MIT", - "dependencies": { - "type-detect": "^4.0.0" - }, "engines": { "node": ">=6" } @@ -5599,6 +6059,16 @@ "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", "dev": true }, + "node_modules/deepmerge": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz", + "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/deferred-leveldown": { "version": "5.3.0", "resolved": "https://registry.npmjs.org/deferred-leveldown/-/deferred-leveldown-5.3.0.tgz", @@ -5722,9 +6192,9 @@ "integrity": "sha512-IayShXAgj/QMXgB0IWmKx+rOPuGMhqm5w6jvFxmVenXKIzRqTAAsbBPT3kWQeGANj3jGgvcvv4yK6SxqYmikgw==" }, "node_modules/dns-over-http-resolver": { - "version": "3.0.15", - "resolved": "https://registry.npmjs.org/dns-over-http-resolver/-/dns-over-http-resolver-3.0.15.tgz", - "integrity": "sha512-h2Ldu6b8LjW725Q5zjjv7T5s1K3dPjlU3DWvcEFqB3Ksb3QmqC4dHhPKlGlBS/1P47D4T5arZMiE4dD4OIfO6A==", + "version": "3.0.16", + "resolved": "https://registry.npmjs.org/dns-over-http-resolver/-/dns-over-http-resolver-3.0.16.tgz", + "integrity": "sha512-Qnq8HhNRuMnA61pf1lVPlStCAv1BVrraCx0umPESWgYKf995tUMF5oNhW59PKdnf7E8d5yqwHlEoFywXjsNMCw==", "license": "Apache-2.0 OR MIT", "dependencies": { "quick-lru": "^7.0.0", @@ -5792,58 +6262,66 @@ } }, "node_modules/es-abstract": { - "version": "1.23.3", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.23.3.tgz", - "integrity": "sha512-e+HfNH61Bj1X9/jLc5v1owaLYuHdeHHSQlkhCBiTK8rBvKaULl/beGMxwrMXjpYrv4pz22BlY570vVePA2ho4A==", + "version": "1.24.0", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.24.0.tgz", + "integrity": "sha512-WSzPgsdLtTcQwm4CROfS5ju2Wa1QQcVeT37jFjYzdFz1r9ahadC8B8/a4qxJxM+09F18iumCdRmlr96ZYkQvEg==", "dev": true, "license": "MIT", "dependencies": { - "array-buffer-byte-length": "^1.0.1", - "arraybuffer.prototype.slice": "^1.0.3", + "array-buffer-byte-length": "^1.0.2", + "arraybuffer.prototype.slice": "^1.0.4", "available-typed-arrays": "^1.0.7", - "call-bind": "^1.0.7", - "data-view-buffer": "^1.0.1", - "data-view-byte-length": "^1.0.1", - "data-view-byte-offset": "^1.0.0", - "es-define-property": "^1.0.0", + "call-bind": "^1.0.8", + "call-bound": "^1.0.4", + "data-view-buffer": "^1.0.2", + "data-view-byte-length": "^1.0.2", + "data-view-byte-offset": "^1.0.1", + "es-define-property": "^1.0.1", "es-errors": "^1.3.0", - "es-object-atoms": "^1.0.0", - "es-set-tostringtag": "^2.0.3", - "es-to-primitive": "^1.2.1", - "function.prototype.name": "^1.1.6", - "get-intrinsic": "^1.2.4", - "get-symbol-description": "^1.0.2", - "globalthis": "^1.0.3", - "gopd": "^1.0.1", + "es-object-atoms": "^1.1.1", + "es-set-tostringtag": "^2.1.0", + "es-to-primitive": "^1.3.0", + "function.prototype.name": "^1.1.8", + "get-intrinsic": "^1.3.0", + "get-proto": "^1.0.1", + "get-symbol-description": "^1.1.0", + "globalthis": "^1.0.4", + "gopd": "^1.2.0", "has-property-descriptors": "^1.0.2", - "has-proto": "^1.0.3", - "has-symbols": "^1.0.3", + "has-proto": "^1.2.0", + "has-symbols": "^1.1.0", "hasown": "^2.0.2", - "internal-slot": "^1.0.7", - "is-array-buffer": "^3.0.4", + "internal-slot": "^1.1.0", + "is-array-buffer": "^3.0.5", "is-callable": "^1.2.7", - "is-data-view": "^1.0.1", + "is-data-view": "^1.0.2", "is-negative-zero": "^2.0.3", - "is-regex": "^1.1.4", - "is-shared-array-buffer": "^1.0.3", - "is-string": "^1.0.7", - "is-typed-array": "^1.1.13", - "is-weakref": "^1.0.2", - "object-inspect": "^1.13.1", + "is-regex": "^1.2.1", + "is-set": "^2.0.3", + "is-shared-array-buffer": "^1.0.4", + "is-string": "^1.1.1", + "is-typed-array": "^1.1.15", + "is-weakref": "^1.1.1", + "math-intrinsics": "^1.1.0", + "object-inspect": "^1.13.4", "object-keys": "^1.1.1", - "object.assign": "^4.1.5", - "regexp.prototype.flags": "^1.5.2", - "safe-array-concat": "^1.1.2", - "safe-regex-test": "^1.0.3", - "string.prototype.trim": "^1.2.9", - "string.prototype.trimend": "^1.0.8", + "object.assign": "^4.1.7", + "own-keys": "^1.0.1", + "regexp.prototype.flags": "^1.5.4", + "safe-array-concat": "^1.1.3", + "safe-push-apply": "^1.0.0", + "safe-regex-test": "^1.1.0", + "set-proto": "^1.0.0", + "stop-iteration-iterator": "^1.1.0", + "string.prototype.trim": "^1.2.10", + "string.prototype.trimend": "^1.0.9", "string.prototype.trimstart": "^1.0.8", - "typed-array-buffer": "^1.0.2", - "typed-array-byte-length": "^1.0.1", - "typed-array-byte-offset": "^1.0.2", - "typed-array-length": "^1.0.6", - "unbox-primitive": "^1.0.2", - "which-typed-array": "^1.1.15" + "typed-array-buffer": "^1.0.3", + "typed-array-byte-length": "^1.0.3", + "typed-array-byte-offset": "^1.0.4", + "typed-array-length": "^1.0.7", + "unbox-primitive": "^1.1.0", + "which-typed-array": "^1.1.19" }, "engines": { "node": ">= 0.4" @@ -5885,37 +6363,44 @@ } }, "node_modules/es-set-tostringtag": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.3.tgz", - "integrity": "sha512-3T8uNMC3OQTHkFUsFq8r/BwAXLHvU/9O9mE0fBc/MY5iq/8H7ncvO947LmYA6ldWw9Uh8Yhf25zu6n7nML5QWQ==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz", + "integrity": "sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==", "dev": true, + "license": "MIT", "dependencies": { - "get-intrinsic": "^1.2.4", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.6", "has-tostringtag": "^1.0.2", - "hasown": "^2.0.1" + "hasown": "^2.0.2" }, "engines": { "node": ">= 0.4" } }, "node_modules/es-shim-unscopables": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.0.2.tgz", - "integrity": "sha512-J3yBRXCzDu4ULnQwxyToo/OjdMx6akgVC7K6few0a7F/0wLtmKKN7I73AH5T2836UuXRqN7Qg+IIUw/+YJksRw==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.1.0.tgz", + "integrity": "sha512-d9T8ucsEhh8Bi1woXCf+TIKDIROLG5WCkxg8geBCbvk22kzwC5G2OnXVMO6FUsvQlgUUXQ2itephWDLqDzbeCw==", "dev": true, + "license": "MIT", "dependencies": { - "hasown": "^2.0.0" + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" } }, "node_modules/es-to-primitive": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", - "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.3.0.tgz", + "integrity": "sha512-w+5mJ3GuFL+NjVtJlvydShqE1eN3h3PbI7/5LAsYJP/2qtuMXjfL2LpHSRqo4b4eSF5K/DH1JXKUAHSB2UW50g==", "dev": true, + "license": "MIT", "dependencies": { - "is-callable": "^1.1.4", - "is-date-object": "^1.0.1", - "is-symbol": "^1.0.2" + "is-callable": "^1.2.7", + "is-date-object": "^1.0.5", + "is-symbol": "^1.0.4" }, "engines": { "node": ">= 0.4" @@ -5976,9 +6461,9 @@ } }, "node_modules/esbuild-svelte": { - "version": "0.9.2", - "resolved": "https://registry.npmjs.org/esbuild-svelte/-/esbuild-svelte-0.9.2.tgz", - "integrity": "sha512-8Jq6+rh+g1E2mkBOZKdYZ8JtlbtDq2Fydwvn+/cBvUX9S0cdKv6AISZcEbErKQ0TpLC/Cv04l1vKaqXOBO8+VQ==", + "version": "0.9.3", + "resolved": "https://registry.npmjs.org/esbuild-svelte/-/esbuild-svelte-0.9.3.tgz", + "integrity": "sha512-CgEcGY1r/d16+aggec3czoFBEBaYIrFOnMxpsO6fWNaNEqHregPN5DLAPZDqrL7rXDNplW+WMu8s3GMq9FqgJA==", "dev": true, "license": "MIT", "dependencies": { @@ -6014,25 +6499,24 @@ } }, "node_modules/eslint": { - "version": "9.31.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.31.0.tgz", - "integrity": "sha512-QldCVh/ztyKJJZLr4jXNUByx3gR+TDYZCRXEktiZoUR3PGy4qCmSbkxcIle8GEwGpb5JBZazlaJ/CxLidXdEbQ==", + "version": "9.38.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.38.0.tgz", + "integrity": "sha512-t5aPOpmtJcZcz5UJyY2GbvpDlsK5E8JqRqoKtfiKE3cNh437KIqfJr3A3AKf5k64NPx6d0G3dno6XDY05PqPtw==", "dev": true, "license": "MIT", "dependencies": { - "@eslint-community/eslint-utils": "^4.2.0", + "@eslint-community/eslint-utils": "^4.8.0", "@eslint-community/regexpp": "^4.12.1", - "@eslint/config-array": "^0.21.0", - "@eslint/config-helpers": "^0.3.0", - "@eslint/core": "^0.15.0", + "@eslint/config-array": "^0.21.1", + "@eslint/config-helpers": "^0.4.1", + "@eslint/core": "^0.16.0", "@eslint/eslintrc": "^3.3.1", - "@eslint/js": "9.31.0", - "@eslint/plugin-kit": "^0.3.1", + "@eslint/js": "9.38.0", + "@eslint/plugin-kit": "^0.4.0", "@humanfs/node": "^0.16.6", "@humanwhocodes/module-importer": "^1.0.1", "@humanwhocodes/retry": "^0.4.2", "@types/estree": "^1.0.6", - "@types/json-schema": "^7.0.15", "ajv": "^6.12.4", "chalk": "^4.0.0", "cross-spawn": "^7.0.6", @@ -6095,9 +6579,9 @@ } }, "node_modules/eslint-module-utils": { - "version": "2.12.0", - "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.12.0.tgz", - "integrity": "sha512-wALZ0HFoytlyh/1+4wuZ9FJCD/leWHQzzrxJ8+rebyReSLk7LApMyd3WJaLVoN+D5+WIdJyDK1c6JnE65V4Zyg==", + "version": "2.12.1", + "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.12.1.tgz", + "integrity": "sha512-L8jSWTze7K2mTg0vos/RuLRS5soomksDPoJLXIslC7c8Wmut3bx7CPpJijDcBZtxQ5lrbUdM+s0OlNbz0DCDNw==", "dev": true, "license": "MIT", "dependencies": { @@ -6123,30 +6607,30 @@ } }, "node_modules/eslint-plugin-import": { - "version": "2.31.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.31.0.tgz", - "integrity": "sha512-ixmkI62Rbc2/w8Vfxyh1jQRTdRTF52VxwRVHl/ykPAmqG+Nb7/kNn+byLP0LxPgI7zWA16Jt82SybJInmMia3A==", + "version": "2.32.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.32.0.tgz", + "integrity": "sha512-whOE1HFo/qJDyX4SnXzP4N6zOWn79WhnCUY/iDR0mPfQZO8wcYE4JClzI2oZrhBnnMUCBCHZhO6VQyoBU95mZA==", "dev": true, "license": "MIT", "dependencies": { "@rtsao/scc": "^1.1.0", - "array-includes": "^3.1.8", - "array.prototype.findlastindex": "^1.2.5", - "array.prototype.flat": "^1.3.2", - "array.prototype.flatmap": "^1.3.2", + "array-includes": "^3.1.9", + "array.prototype.findlastindex": "^1.2.6", + "array.prototype.flat": "^1.3.3", + "array.prototype.flatmap": "^1.3.3", "debug": "^3.2.7", "doctrine": "^2.1.0", "eslint-import-resolver-node": "^0.3.9", - "eslint-module-utils": "^2.12.0", + "eslint-module-utils": "^2.12.1", "hasown": "^2.0.2", - "is-core-module": "^2.15.1", + "is-core-module": "^2.16.1", "is-glob": "^4.0.3", "minimatch": "^3.1.2", "object.fromentries": "^2.0.8", "object.groupby": "^1.0.3", - "object.values": "^1.2.0", + "object.values": "^1.2.1", "semver": "^6.3.1", - "string.prototype.trimend": "^1.0.8", + "string.prototype.trimend": "^1.0.9", "tsconfig-paths": "^3.15.0" }, "engines": { @@ -6156,17 +6640,6 @@ "eslint": "^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8 || ^9" } }, - "node_modules/eslint-plugin-import/node_modules/brace-expansion": { - "version": "1.1.12", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", - "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==", - "dev": true, - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, "node_modules/eslint-plugin-import/node_modules/debug": { "version": "3.2.7", "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", @@ -6210,21 +6683,22 @@ } }, "node_modules/eslint-plugin-svelte": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-svelte/-/eslint-plugin-svelte-3.6.0.tgz", - "integrity": "sha512-IIf6Cj6yQuCwL7Qd8bX13BZspz+DQsOkClozMF9EkW20FSxI75Ndd5ZzbviCn32DdXRo9FUWXn+YMIL46qPOOg==", + "version": "3.12.5", + "resolved": "https://registry.npmjs.org/eslint-plugin-svelte/-/eslint-plugin-svelte-3.12.5.tgz", + "integrity": "sha512-4KRG84eAHQfYd9OjZ1K7sCHy0nox+9KwT+s5WCCku3jTim5RV4tVENob274nCwIaApXsYPKAUAZFBxKZ3Wyfjw==", "dev": true, "license": "MIT", "dependencies": { - "@eslint-community/eslint-utils": "^4.4.1", + "@eslint-community/eslint-utils": "^4.6.1", "@jridgewell/sourcemap-codec": "^1.5.0", "esutils": "^2.0.3", - "known-css-properties": "^0.36.0", + "globals": "^16.0.0", + "known-css-properties": "^0.37.0", "postcss": "^8.4.49", "postcss-load-config": "^3.1.4", "postcss-safe-parser": "^7.0.0", "semver": "^7.6.3", - "svelte-eslint-parser": "^1.1.1" + "svelte-eslint-parser": "^1.4.0" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -6242,6 +6716,19 @@ } } }, + "node_modules/eslint-plugin-svelte/node_modules/globals": { + "version": "16.5.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-16.5.0.tgz", + "integrity": "sha512-c/c15i26VrJ4IRt5Z89DnIzCGDn9EcebibhAOjw5ibqEHsE1wLUgkPn9RDmNcUKyU87GeaL633nyJ+pplFR2ZQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/eslint-plugin-svelte/node_modules/lilconfig": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.1.0.tgz", @@ -6321,17 +6808,6 @@ "url": "https://opencollective.com/eslint" } }, - "node_modules/eslint/node_modules/brace-expansion": { - "version": "1.1.12", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", - "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==", - "dev": true, - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, "node_modules/eslint/node_modules/eslint-visitor-keys": { "version": "4.2.1", "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.1.tgz", @@ -6408,9 +6884,9 @@ } }, "node_modules/esrap": { - "version": "1.4.6", - "resolved": "https://registry.npmjs.org/esrap/-/esrap-1.4.6.tgz", - "integrity": "sha512-F/D2mADJ9SHY3IwksD4DAXjTt7qt7GWUf3/8RhCNWmC/67tyb55dpimHmy7EplakFaflV0R/PC+fdSPqrRHAQw==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/esrap/-/esrap-2.1.0.tgz", + "integrity": "sha512-yzmPNpl7TBbMRC5Lj2JlJZNPml0tzqoqP5B1JXycNUwtqma9AKCO0M2wHrdgsHcy1WRW7S9rJknAMtByg3usgA==", "dev": true, "license": "MIT", "dependencies": { @@ -6528,16 +7004,16 @@ "dev": true }, "node_modules/fast-unique-numbers": { - "version": "8.0.13", - "resolved": "https://registry.npmjs.org/fast-unique-numbers/-/fast-unique-numbers-8.0.13.tgz", - "integrity": "sha512-7OnTFAVPefgw2eBJ1xj2PGGR9FwYzSUso9decayHgCDX4sJkHLdcsYTytTg+tYv+wKF3U8gJuSBz2jJpQV4u/g==", + "version": "9.0.24", + "resolved": "https://registry.npmjs.org/fast-unique-numbers/-/fast-unique-numbers-9.0.24.tgz", + "integrity": "sha512-Dv0BYn4waOWse94j16rsZ5w/0zoaCa74O3q6IZjMqaXbtT92Q+Sb6pPk+phGzD8Xh+nueQmSRI3tSCaHKidzKw==", "license": "MIT", "dependencies": { - "@babel/runtime": "^7.23.8", - "tslib": "^2.6.2" + "@babel/runtime": "^7.28.4", + "tslib": "^2.8.1" }, "engines": { - "node": ">=16.1.0" + "node": ">=18.2.0" } }, "node_modules/fast-xml-parser": { @@ -6659,26 +7135,26 @@ } }, "node_modules/firebase": { - "version": "12.2.1", - "resolved": "https://registry.npmjs.org/firebase/-/firebase-12.2.1.tgz", - "integrity": "sha512-UkuW2ZYaq/QuOQ24bfaqmkVqoBFhkA/ptATfPuRtc5vdm+zhwc3mfZBwFe6LqH9yrCN/6rAblgxKz2/0tDvA7w==", + "version": "12.4.0", + "resolved": "https://registry.npmjs.org/firebase/-/firebase-12.4.0.tgz", + "integrity": "sha512-/chNgDQ6ppPPGOQO4jctxOa/5JeQxuhaxA7Y90K0I+n/wPfoO8mRveedhVUdo7ExLcWUivnnow/ouSLYSI5Icw==", "license": "Apache-2.0", "dependencies": { - "@firebase/ai": "2.2.1", - "@firebase/analytics": "0.10.18", - "@firebase/analytics-compat": "0.2.24", - "@firebase/app": "0.14.2", + "@firebase/ai": "2.4.0", + "@firebase/analytics": "0.10.19", + "@firebase/analytics-compat": "0.2.25", + "@firebase/app": "0.14.4", "@firebase/app-check": "0.11.0", "@firebase/app-check-compat": "0.4.0", - "@firebase/app-compat": "0.5.2", + "@firebase/app-compat": "0.5.4", "@firebase/app-types": "0.9.3", "@firebase/auth": "1.11.0", "@firebase/auth-compat": "0.6.0", "@firebase/data-connect": "0.3.11", "@firebase/database": "1.1.0", "@firebase/database-compat": "2.1.0", - "@firebase/firestore": "4.9.1", - "@firebase/firestore-compat": "0.4.1", + "@firebase/firestore": "4.9.2", + "@firebase/firestore-compat": "0.4.2", "@firebase/functions": "0.13.1", "@firebase/functions-compat": "0.4.1", "@firebase/installations": "0.6.19", @@ -6687,8 +7163,8 @@ "@firebase/messaging-compat": "0.2.23", "@firebase/performance": "0.7.9", "@firebase/performance-compat": "0.2.22", - "@firebase/remote-config": "0.6.6", - "@firebase/remote-config-compat": "0.2.19", + "@firebase/remote-config": "0.7.0", + "@firebase/remote-config-compat": "0.2.20", "@firebase/storage": "0.14.0", "@firebase/storage-compat": "0.4.0", "@firebase/util": "1.13.0" @@ -6716,12 +7192,19 @@ "license": "ISC" }, "node_modules/for-each": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", - "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==", + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.5.tgz", + "integrity": "sha512-dKx12eRCVIzqCxFGplyFKJMPvLEWgmNtUrpTiJIR5u97zEhRG8ySrtboPHZXx7daLxQVrl643cTzbab2tkQjxg==", "dev": true, + "license": "MIT", "dependencies": { - "is-callable": "^1.1.3" + "is-callable": "^1.2.7" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, "node_modules/foreground-child": { @@ -6766,15 +7249,18 @@ } }, "node_modules/function.prototype.name": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.6.tgz", - "integrity": "sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg==", + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.8.tgz", + "integrity": "sha512-e5iwyodOHhbMr/yNrc7fDYG4qlbIvI5gajyzPnb5TCwyhjApznQh1BMFou9b30SevY43gCJKXycoCBjMbsuW0Q==", "dev": true, + "license": "MIT", "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1", - "functions-have-names": "^1.2.3" + "call-bind": "^1.0.8", + "call-bound": "^1.0.3", + "define-properties": "^1.2.1", + "functions-have-names": "^1.2.3", + "hasown": "^2.0.2", + "is-callable": "^1.2.7" }, "engines": { "node": ">= 0.4" @@ -6795,10 +7281,21 @@ "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==", "dev": true, + "license": "MIT", "funding": { "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/generator-function": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/generator-function/-/generator-function-2.0.1.tgz", + "integrity": "sha512-SFdFmIJi+ybC0vjlHN0ZGVGHc3lgE0DxPAT0djjVg+kjOnSqclqmj0KQ7ykTOLP6YxoqOvuAODGdcHJn+43q3g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, "node_modules/get-caller-file": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", @@ -6863,14 +7360,15 @@ } }, "node_modules/get-symbol-description": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.2.tgz", - "integrity": "sha512-g0QYk1dZBxGwk+Ngc+ltRH2IBp2f7zBkBMBJZCDerh6EhlhSR6+9irMCuT/09zD6qkarHUSn529sK/yL4S27mg==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.1.0.tgz", + "integrity": "sha512-w9UMqWwJxHNOvoNzSJ2oPF5wvYcvP7jUvYzhp67yEhTi17ZDBBC1z9pTdGuzjD+EFIqLSYRweZjqfiPzQ06Ebg==", "dev": true, + "license": "MIT", "dependencies": { - "call-bind": "^1.0.5", + "call-bound": "^1.0.3", "es-errors": "^1.3.0", - "get-intrinsic": "^1.2.4" + "get-intrinsic": "^1.2.6" }, "engines": { "node": ">= 0.4" @@ -6942,12 +7440,14 @@ } }, "node_modules/globalthis": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.3.tgz", - "integrity": "sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==", + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.4.tgz", + "integrity": "sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==", "dev": true, + "license": "MIT", "dependencies": { - "define-properties": "^1.1.3" + "define-properties": "^1.2.1", + "gopd": "^1.0.1" }, "engines": { "node": ">= 0.4" @@ -6976,10 +7476,14 @@ "dev": true }, "node_modules/has-bigints": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz", - "integrity": "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.1.0.tgz", + "integrity": "sha512-R3pbpkcIqv2Pm3dUwgjclDRVmWpTJW2DcMzcIhEXEx1oh/CEMObMm3KLmRJOdvhM7o4uQBnwr8pzRK2sJWIqfg==", "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, "funding": { "url": "https://github.com/sponsors/ljharb" } @@ -7006,10 +7510,14 @@ } }, "node_modules/has-proto": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.3.tgz", - "integrity": "sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+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": { + "dunder-proto": "^1.0.0" + }, "engines": { "node": ">= 0.4" }, @@ -7035,6 +7543,7 @@ "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", "dev": true, + "license": "MIT", "dependencies": { "has-symbols": "^1.0.3" }, @@ -7108,10 +7617,11 @@ "license": "BSD-3-Clause" }, "node_modules/ignore": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.1.tgz", - "integrity": "sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw==", + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", + "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==", "dev": true, + "license": "MIT", "engines": { "node": ">= 4" } @@ -7171,40 +7681,59 @@ "license": "Apache-2.0 OR MIT" }, "node_modules/internal-slot": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.7.tgz", - "integrity": "sha512-NGnrKwXzSms2qUUih/ILZ5JBqNTSa1+ZmP6flaIp6KmSElgE9qdndzS3cqjrDovwFdmwsGsLdeFgB6suw+1e9g==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.1.0.tgz", + "integrity": "sha512-4gd7VpWNQNB4UKKCFFVcp1AVv+FMOgs9NKzjHKusc8jTMhd5eL1NqQqOpE0KzMds804/yHlglp3uxgluOqAPLw==", "dev": true, + "license": "MIT", "dependencies": { "es-errors": "^1.3.0", - "hasown": "^2.0.0", - "side-channel": "^1.0.4" + "hasown": "^2.0.2", + "side-channel": "^1.1.0" }, "engines": { "node": ">= 0.4" } }, "node_modules/ip-address": { - "version": "9.0.5", - "resolved": "https://registry.npmjs.org/ip-address/-/ip-address-9.0.5.tgz", - "integrity": "sha512-zHtQzGojZXTwZTHQqra+ETKd4Sn3vgi7uBmlPoXVWZqYvuKmtI0l/VZTjqGmJY9x88GGOaZ9+G9ES8hC4T4X8g==", + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/ip-address/-/ip-address-10.0.1.tgz", + "integrity": "sha512-NWv9YLW4PoW2B7xtzaS3NCot75m6nK7Icdv0o3lfMceJVRfSoQwqD4wEH5rLwoKJwUiZ/rfpiVBhnaF0FK4HoA==", "license": "MIT", - "dependencies": { - "jsbn": "1.1.0", - "sprintf-js": "^1.1.3" - }, "engines": { "node": ">= 12" } }, "node_modules/is-array-buffer": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.4.tgz", - "integrity": "sha512-wcjaerHw0ydZwfhiKbXJWLDY8A7yV7KhjQOpb83hGgGfId/aQa4TOvwyzn2PuswW2gPCYEL/nEAiSVpdOj1lXw==", + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.5.tgz", + "integrity": "sha512-DDfANUiiG2wC1qawP66qlTugJeL5HyzMpfr8lLK+jMQirGzNod0B12cFB/9q838Ru27sBwfw78/rdoU7RERz6A==", "dev": true, + "license": "MIT", "dependencies": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.2.1" + "call-bind": "^1.0.8", + "call-bound": "^1.0.3", + "get-intrinsic": "^1.2.6" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-async-function": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-async-function/-/is-async-function-2.1.1.tgz", + "integrity": "sha512-9dgM/cZBnNvjzaMYHVoxxfPj2QXt22Ev7SuuPrs+xav0ukGB0S6d4ydZdEiM48kLx5kDV+QBPrpVnFyefL8kkQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "async-function": "^1.0.0", + "call-bound": "^1.0.3", + "get-proto": "^1.0.1", + "has-tostringtag": "^1.0.2", + "safe-regex-test": "^1.1.0" }, "engines": { "node": ">= 0.4" @@ -7214,25 +7743,30 @@ } }, "node_modules/is-bigint": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz", - "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.1.0.tgz", + "integrity": "sha512-n4ZT37wG78iz03xPRKJrHTdZbe3IicyucEtdRsV5yglwc3GyUfbAfpSeD0FJ41NbUNSt5wbhqfp1fS+BgnvDFQ==", "dev": true, + "license": "MIT", "dependencies": { - "has-bigints": "^1.0.1" + "has-bigints": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/is-boolean-object": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz", - "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==", + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.2.2.tgz", + "integrity": "sha512-wa56o2/ElJMYqjCjGkXri7it5FbebW5usLw/nPmCMs5DeZ7eziSYZhSmPRn0txqeW4LnAmQQU7FgqLpsEFKM4A==", "dev": true, + "license": "MIT", "dependencies": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" + "call-bound": "^1.0.3", + "has-tostringtag": "^1.0.2" }, "engines": { "node": ">= 0.4" @@ -7246,6 +7780,7 @@ "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.4" }, @@ -7254,9 +7789,9 @@ } }, "node_modules/is-core-module": { - "version": "2.15.1", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.15.1.tgz", - "integrity": "sha512-z0vtXSwucUJtANQWldhbtbt7BnL0vxiFjIdDLAatwhDYty2bad6s+rijD6Ri4YuYJubLzIJLUidCh09e1djEVQ==", + "version": "2.16.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.16.1.tgz", + "integrity": "sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==", "dev": true, "license": "MIT", "dependencies": { @@ -7270,12 +7805,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": { @@ -7286,12 +7823,14 @@ } }, "node_modules/is-date-object": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", - "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.1.0.tgz", + "integrity": "sha512-PwwhEakHVKTdRNVOw+/Gyh0+MzlCl4R6qKvkhuvLtPMggI1WAHt9sOwZxQLSGpUaDnrdyDsomoRgNnCfKNSXXg==", "dev": true, + "license": "MIT", "dependencies": { - "has-tostringtag": "^1.0.0" + "call-bound": "^1.0.2", + "has-tostringtag": "^1.0.2" }, "engines": { "node": ">= 0.4" @@ -7315,6 +7854,22 @@ "node": ">=0.10.0" } }, + "node_modules/is-finalizationregistry": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-finalizationregistry/-/is-finalizationregistry-1.1.1.tgz", + "integrity": "sha512-1pC6N8qWJbWoPtEjgcL2xyhQOP491EQjeUo3qTKcmV8YSDDJrOepfG8pcC7h/QgnQHYSv0mJ3Z/ZWxmatVrysg==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/is-fullwidth-code-point": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", @@ -7324,6 +7879,26 @@ "node": ">=8" } }, + "node_modules/is-generator-function": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.1.2.tgz", + "integrity": "sha512-upqt1SkGkODW9tsGNG5mtXTXtECizwtS2kA161M+gJPc1xdb/Ax629af6YrTwcOeQHbewrPNlE5Dx7kzvXTizA==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.4", + "generator-function": "^2.0.0", + "get-proto": "^1.0.1", + "has-tostringtag": "^1.0.2", + "safe-regex-test": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/is-glob": { "version": "4.0.3", "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", @@ -7342,6 +7917,19 @@ "integrity": "sha512-26POf2KRCno/KTNL5Q0b/9TYnL00xEsSaLfiFRmjM7m7Lw7ZMmFybzzuX4CcsLAluZGd+niLUiMRxEooVE3aqg==", "license": "MIT" }, + "node_modules/is-map": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/is-map/-/is-map-2.0.3.tgz", + "integrity": "sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/is-negative-zero": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.3.tgz", @@ -7355,9 +7943,9 @@ } }, "node_modules/is-network-error": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-network-error/-/is-network-error-1.1.0.tgz", - "integrity": "sha512-tUdRRAnhT+OtCZR/LxZelH/C7QtjtFrTu5tXCA8pl55eTUElUHT+GPYV8MBMBvea/j+NxQqVt3LbWMRir7Gx9g==", + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/is-network-error/-/is-network-error-1.3.0.tgz", + "integrity": "sha512-6oIwpsgRfnDiyEDLMay/GqCl3HoAtH5+RUKW29gYkL0QA+ipzpDLA16yQs7/RHCSu+BwgbJaOUqa4A99qNVQVw==", "license": "MIT", "engines": { "node": ">=16" @@ -7377,12 +7965,14 @@ } }, "node_modules/is-number-object": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz", - "integrity": "sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.1.1.tgz", + "integrity": "sha512-lZhclumE1G6VYD8VHe35wFaIif+CTy5SJIi5+3y4psDgWu4wPDoBhF8NxUOinEc7pHgiTsT6MaBb92rKhhD+Xw==", "dev": true, + "license": "MIT", "dependencies": { - "has-tostringtag": "^1.0.0" + "call-bound": "^1.0.3", + "has-tostringtag": "^1.0.2" }, "engines": { "node": ">= 0.4" @@ -7414,13 +8004,16 @@ } }, "node_modules/is-regex": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", - "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", + "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.2", - "has-tostringtag": "^1.0.0" + "call-bound": "^1.0.2", + "gopd": "^1.2.0", + "has-tostringtag": "^1.0.2", + "hasown": "^2.0.2" }, "engines": { "node": ">= 0.4" @@ -7429,13 +8022,27 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/is-shared-array-buffer": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.3.tgz", - "integrity": "sha512-nA2hv5XIhLR3uVzDDfCIknerhx8XUKnstuOERPNNIinXG7v9u+ohXF67vxm4TPTEPU6lm61ZkwP3c9PCB97rhg==", + "node_modules/is-set": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/is-set/-/is-set-2.0.3.tgz", + "integrity": "sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg==", "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-shared-array-buffer": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.4.tgz", + "integrity": "sha512-ISWac8drv4ZGfwKl5slpHG9OwPNty4jOWPRIhBpxOoD+hqITiwuipOQ2bNthAzwA3B4fIjO4Nln74N0S9byq8A==", + "dev": true, + "license": "MIT", "dependencies": { - "call-bind": "^1.0.7" + "call-bound": "^1.0.3" }, "engines": { "node": ">= 0.4" @@ -7445,12 +8052,14 @@ } }, "node_modules/is-string": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", - "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.1.1.tgz", + "integrity": "sha512-BtEeSsoaQjlSPBemMQIrY1MY0uM6vnS1g5fmufYOtnxLGUZM2178PKbhsk7Ffv58IX+ZtcvoGwccYsh0PglkAA==", "dev": true, + "license": "MIT", "dependencies": { - "has-tostringtag": "^1.0.0" + "call-bound": "^1.0.3", + "has-tostringtag": "^1.0.2" }, "engines": { "node": ">= 0.4" @@ -7460,12 +8069,15 @@ } }, "node_modules/is-symbol": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", - "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.1.1.tgz", + "integrity": "sha512-9gGx6GTtCQM73BgmHQXfDmLtfjjTUDSyoxTCbp5WtoixAhfgsDirWIcVQ/IHpvI5Vgd5i/J5F7B9cN/WlVbC/w==", "dev": true, + "license": "MIT", "dependencies": { - "has-symbols": "^1.0.2" + "call-bound": "^1.0.2", + "has-symbols": "^1.1.0", + "safe-regex-test": "^1.1.0" }, "engines": { "node": ">= 0.4" @@ -7475,12 +8087,13 @@ } }, "node_modules/is-typed-array": { - "version": "1.1.13", - "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.13.tgz", - "integrity": "sha512-uZ25/bUAlUY5fR4OKT4rZQEBrzQWYV9ZJYGGsUmEJ6thodVJ1HX64ePQ6Z0qPWP+m+Uq6e9UugrE38jeYsDSMw==", + "version": "1.1.15", + "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.15.tgz", + "integrity": "sha512-p3EcsicXjit7SaskXHs1hA91QxgTw46Fv6EFKKGS5DRFLD8yKnohjF3hxoju94b/OcMZoQukzpPpBE9uLVKzgQ==", "dev": true, + "license": "MIT", "dependencies": { - "which-typed-array": "^1.1.14" + "which-typed-array": "^1.1.16" }, "engines": { "node": ">= 0.4" @@ -7489,13 +8102,47 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/is-weakref": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz", - "integrity": "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==", + "node_modules/is-weakmap": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-weakmap/-/is-weakmap-2.0.2.tgz", + "integrity": "sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w==", "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-weakref": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.1.1.tgz", + "integrity": "sha512-6i9mGWSlqzNMEqpCp93KwRS1uUOodk2OJ6b+sq7ZPDSy2WuI5NFIxp/254TytR8ftefexkWn5xNiHUNpPOfSew==", + "dev": true, + "license": "MIT", "dependencies": { - "call-bind": "^1.0.2" + "call-bound": "^1.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-weakset": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/is-weakset/-/is-weakset-2.0.4.tgz", + "integrity": "sha512-mfcwb6IzQyOKTs84CQMrOwW4gQcaTOAWJ0zzJCl2WSPDrWk/OzDaImWFH3djXhb24g4eudZfLRozAvPGw4d9hQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "get-intrinsic": "^1.2.6" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -7505,7 +8152,8 @@ "version": "2.0.5", "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/isexe": { "version": "2.0.0", @@ -7521,13 +8169,15 @@ "license": "Apache-2.0 OR MIT" }, "node_modules/it-byte-stream": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/it-byte-stream/-/it-byte-stream-1.1.1.tgz", - "integrity": "sha512-OIOb8PvK9ZV7MHvyxIDNyN3jmrxrJdx99G0RIYYb3Tzo1OWv+O1C6mfg7nnlDuuTQz2POYFXe87AShKAEl+POw==", + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/it-byte-stream/-/it-byte-stream-2.0.3.tgz", + "integrity": "sha512-h7FFcn4DWiWsJw1dCJhuPdiY8cGi1z8g4aLAfFspTaJbwQxvEMlEBFG/f8lIVGwM8YK26ClM4/9lxLVhF33b8g==", "license": "Apache-2.0 OR MIT", "dependencies": { - "it-queueless-pushable": "^1.0.0", + "abort-error": "^1.0.1", + "it-queueless-pushable": "^2.0.0", "it-stream-types": "^2.0.2", + "race-signal": "^1.1.3", "uint8arraylist": "^2.4.8" } }, @@ -7546,12 +8196,6 @@ "it-peekable": "^3.0.0" } }, - "node_modules/it-first": { - "version": "3.0.9", - "resolved": "https://registry.npmjs.org/it-first/-/it-first-3.0.9.tgz", - "integrity": "sha512-ZWYun273Gbl7CwiF6kK5xBtIKR56H1NoRaiJek2QzDirgen24u8XZ0Nk+jdnJSuCTPxC2ul1TuXKxu/7eK6NuA==", - "license": "Apache-2.0 OR MIT" - }, "node_modules/it-foreach": { "version": "2.1.4", "resolved": "https://registry.npmjs.org/it-foreach/-/it-foreach-2.1.4.tgz", @@ -7562,9 +8206,9 @@ } }, "node_modules/it-length-prefixed": { - "version": "9.1.1", - "resolved": "https://registry.npmjs.org/it-length-prefixed/-/it-length-prefixed-9.1.1.tgz", - "integrity": "sha512-O88nBweT6M9ozsmok68/auKH7ik/slNM4pYbM9lrfy2z5QnpokW5SlrepHZDKtN71llhG2sZvd6uY4SAl+lAQg==", + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/it-length-prefixed/-/it-length-prefixed-10.0.1.tgz", + "integrity": "sha512-BhyluvGps26u9a7eQIpOI1YN7mFgi8lFwmiPi07whewbBARKAG9LE09Odc8s1Wtbt2MB6rNUrl7j9vvfXTJwdQ==", "license": "Apache-2.0 OR MIT", "dependencies": { "it-reader": "^6.0.1", @@ -7579,12 +8223,13 @@ } }, "node_modules/it-length-prefixed-stream": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/it-length-prefixed-stream/-/it-length-prefixed-stream-1.2.1.tgz", - "integrity": "sha512-FYqlxc2toUoK+aPO5r3KDBIUG1mOvk2DzmjQcsfLUTHRWMJP4Va9855tVzg/22Bj+VUUaT7gxBg7HmbiCxTK4w==", + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/it-length-prefixed-stream/-/it-length-prefixed-stream-2.0.3.tgz", + "integrity": "sha512-Ns3jNFy2mcFnV59llCYitJnFHapg8wIcOsWkEaAwOkG9v4HBCk24nze/zGDQjiJdDTyFXTT5GOY3M/uaksot3w==", "license": "Apache-2.0 OR MIT", "dependencies": { - "it-byte-stream": "^1.0.0", + "abort-error": "^1.0.1", + "it-byte-stream": "^2.0.0", "it-stream-types": "^2.0.2", "uint8-varint": "^2.0.4", "uint8arraylist": "^2.4.8" @@ -7608,17 +8253,6 @@ "it-queueless-pushable": "^2.0.0" } }, - "node_modules/it-merge/node_modules/it-queueless-pushable": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/it-queueless-pushable/-/it-queueless-pushable-2.0.2.tgz", - "integrity": "sha512-2BqIt7XvDdgEgudLAdJkdseAwbVSBc0yAd8yPVHrll4eBuJPWIj9+8C3OIxzEKwhswLtd3bi+yLrzgw9gCyxMA==", - "license": "Apache-2.0 OR MIT", - "dependencies": { - "abort-error": "^1.0.1", - "p-defer": "^4.0.1", - "race-signal": "^1.1.3" - } - }, "node_modules/it-pair": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/it-pair/-/it-pair-2.0.6.tgz", @@ -7675,43 +8309,6 @@ "uint8arraylist": "^2.4.8" } }, - "node_modules/it-protobuf-stream/node_modules/it-byte-stream": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/it-byte-stream/-/it-byte-stream-2.0.3.tgz", - "integrity": "sha512-h7FFcn4DWiWsJw1dCJhuPdiY8cGi1z8g4aLAfFspTaJbwQxvEMlEBFG/f8lIVGwM8YK26ClM4/9lxLVhF33b8g==", - "license": "Apache-2.0 OR MIT", - "dependencies": { - "abort-error": "^1.0.1", - "it-queueless-pushable": "^2.0.0", - "it-stream-types": "^2.0.2", - "race-signal": "^1.1.3", - "uint8arraylist": "^2.4.8" - } - }, - "node_modules/it-protobuf-stream/node_modules/it-length-prefixed-stream": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/it-length-prefixed-stream/-/it-length-prefixed-stream-2.0.3.tgz", - "integrity": "sha512-Ns3jNFy2mcFnV59llCYitJnFHapg8wIcOsWkEaAwOkG9v4HBCk24nze/zGDQjiJdDTyFXTT5GOY3M/uaksot3w==", - "license": "Apache-2.0 OR MIT", - "dependencies": { - "abort-error": "^1.0.1", - "it-byte-stream": "^2.0.0", - "it-stream-types": "^2.0.2", - "uint8-varint": "^2.0.4", - "uint8arraylist": "^2.4.8" - } - }, - "node_modules/it-protobuf-stream/node_modules/it-queueless-pushable": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/it-queueless-pushable/-/it-queueless-pushable-2.0.2.tgz", - "integrity": "sha512-2BqIt7XvDdgEgudLAdJkdseAwbVSBc0yAd8yPVHrll4eBuJPWIj9+8C3OIxzEKwhswLtd3bi+yLrzgw9gCyxMA==", - "license": "Apache-2.0 OR MIT", - "dependencies": { - "abort-error": "^1.0.1", - "p-defer": "^4.0.1", - "race-signal": "^1.1.3" - } - }, "node_modules/it-pushable": { "version": "3.2.3", "resolved": "https://registry.npmjs.org/it-pushable/-/it-pushable-3.2.3.tgz", @@ -7735,11 +8332,12 @@ } }, "node_modules/it-queueless-pushable": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/it-queueless-pushable/-/it-queueless-pushable-1.0.2.tgz", - "integrity": "sha512-BFIm48C4O8+i+oVEPQpZ70+CaAsVUircvZtZCrpG2Q64933aLp+tDmas1mTBwqVBfIUUlg09d+e6SWW1CBuykQ==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/it-queueless-pushable/-/it-queueless-pushable-2.0.2.tgz", + "integrity": "sha512-2BqIt7XvDdgEgudLAdJkdseAwbVSBc0yAd8yPVHrll4eBuJPWIj9+8C3OIxzEKwhswLtd3bi+yLrzgw9gCyxMA==", "license": "Apache-2.0 OR MIT", "dependencies": { + "abort-error": "^1.0.1", "p-defer": "^4.0.1", "race-signal": "^1.1.3" } @@ -7841,12 +8439,6 @@ "js-yaml": "bin/js-yaml.js" } }, - "node_modules/jsbn": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-1.1.0.tgz", - "integrity": "sha512-4bYVV3aAMtDTTu4+xsDYa6sy9GyJ69/amsu9sYF2zqjiEoZA5xJi3BrfX3uY+/IekIu7MwdObdbDWpoZdBv3/A==", - "license": "MIT" - }, "node_modules/json-buffer": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", @@ -7890,9 +8482,9 @@ } }, "node_modules/known-css-properties": { - "version": "0.36.0", - "resolved": "https://registry.npmjs.org/known-css-properties/-/known-css-properties-0.36.0.tgz", - "integrity": "sha512-A+9jP+IUmuQsNdsLdcg6Yt7voiMF/D4K83ew0OpJtpu+l34ef7LaohWV0Rc6KNvzw6ZDizkqfyB5JznZnzuKQA==", + "version": "0.37.0", + "resolved": "https://registry.npmjs.org/known-css-properties/-/known-css-properties-0.37.0.tgz", + "integrity": "sha512-JCDrsP4Z1Sb9JwG0aJ8Eo2r7k4Ou5MwmThS/6lcIe1ICyb7UBJKGRIUUdqc2ASdE/42lgz6zFUnzAIhtXnBVrQ==", "dev": true, "license": "MIT" }, @@ -8035,25 +8627,25 @@ } }, "node_modules/libp2p": { - "version": "2.10.0", - "resolved": "https://registry.npmjs.org/libp2p/-/libp2p-2.10.0.tgz", - "integrity": "sha512-tgDz7YuGg1XX7UfxebCUii+IGsly/8V0ZRZdFJSDySY2i3UuqpCTsEbRApH3cBKFhcAf00nx9xj8GL9zfo+XWw==", + "version": "2.8.11", + "resolved": "https://registry.npmjs.org/libp2p/-/libp2p-2.8.11.tgz", + "integrity": "sha512-EjkyN0CI6uP+e4OOkEcZvhbZtlwFl4Y0rkkMvDbXmcfILX4E4n/jKE4Ppoc1qhNufxToxVWCMDS2ipniQgiYaw==", "license": "Apache-2.0 OR MIT", "dependencies": { "@chainsafe/is-ip": "^2.1.0", "@chainsafe/netmask": "^2.0.0", - "@libp2p/crypto": "^5.1.8", - "@libp2p/interface": "^2.11.0", - "@libp2p/interface-internal": "^2.3.19", - "@libp2p/logger": "^5.2.0", - "@libp2p/multistream-select": "^6.0.29", - "@libp2p/peer-collections": "^6.0.35", - "@libp2p/peer-id": "^5.1.9", - "@libp2p/peer-store": "^11.2.7", - "@libp2p/utils": "^6.7.2", + "@libp2p/crypto": "^5.1.6", + "@libp2p/interface": "^2.10.4", + "@libp2p/interface-internal": "^2.3.17", + "@libp2p/logger": "^5.1.20", + "@libp2p/multistream-select": "^6.0.27", + "@libp2p/peer-collections": "^6.0.33", + "@libp2p/peer-id": "^5.1.7", + "@libp2p/peer-store": "^11.2.5", + "@libp2p/utils": "^6.7.0", "@multiformats/dns": "^1.0.6", "@multiformats/multiaddr": "^12.4.4", - "@multiformats/multiaddr-matcher": "^2.0.0", + "@multiformats/multiaddr-matcher": "^1.7.2", "any-signal": "^4.1.1", "datastore-core": "^10.0.2", "interface-datastore": "^8.3.1", @@ -8070,39 +8662,6 @@ "uint8arrays": "^5.1.0" } }, - "node_modules/libp2p/node_modules/@multiformats/multiaddr-matcher": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/@multiformats/multiaddr-matcher/-/multiaddr-matcher-2.0.2.tgz", - "integrity": "sha512-si7EZCI93mfBJKKRkh+u2bB9W6W5APVN3XfdwuseEJ0OS7ysg0Jno9SuAi0bRzsl5OEFESoF71SjsRqgp8PXAA==", - "license": "Apache-2.0 OR MIT", - "dependencies": { - "@multiformats/multiaddr": "^12.0.0" - } - }, - "node_modules/libp2p/node_modules/it-byte-stream": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/it-byte-stream/-/it-byte-stream-2.0.3.tgz", - "integrity": "sha512-h7FFcn4DWiWsJw1dCJhuPdiY8cGi1z8g4aLAfFspTaJbwQxvEMlEBFG/f8lIVGwM8YK26ClM4/9lxLVhF33b8g==", - "license": "Apache-2.0 OR MIT", - "dependencies": { - "abort-error": "^1.0.1", - "it-queueless-pushable": "^2.0.0", - "it-stream-types": "^2.0.2", - "race-signal": "^1.1.3", - "uint8arraylist": "^2.4.8" - } - }, - "node_modules/libp2p/node_modules/it-queueless-pushable": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/it-queueless-pushable/-/it-queueless-pushable-2.0.2.tgz", - "integrity": "sha512-2BqIt7XvDdgEgudLAdJkdseAwbVSBc0yAd8yPVHrll4eBuJPWIj9+8C3OIxzEKwhswLtd3bi+yLrzgw9gCyxMA==", - "license": "Apache-2.0 OR MIT", - "dependencies": { - "abort-error": "^1.0.1", - "p-defer": "^4.0.1", - "race-signal": "^1.1.3" - } - }, "node_modules/lilconfig": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-3.1.3.tgz", @@ -8137,12 +8696,24 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", + "license": "MIT" + }, "node_modules/lodash.camelcase": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz", "integrity": "sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==", "license": "MIT" }, + "node_modules/lodash.debounce": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", + "integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==", + "license": "MIT" + }, "node_modules/lodash.merge": { "version": "4.6.2", "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", @@ -8156,13 +8727,10 @@ "license": "Apache-2.0" }, "node_modules/loupe": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/loupe/-/loupe-2.3.7.tgz", - "integrity": "sha512-zSMINGVYkdpYSOBmLi0D1Uo7JU9nVdQKrHxC8eYlV+9YKK9WePqAlL7lSlorG/U2Fw1w0hTBmaa/jrQ3UbPHtA==", - "license": "MIT", - "dependencies": { - "get-func-name": "^2.0.1" - } + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/loupe/-/loupe-3.2.1.tgz", + "integrity": "sha512-CdzqowRJCeLU72bHvWqwRBBlLcMEtIvGrlvef74kMnV2AolS9Y8xUv1I0U/MNAWMhBlKIoyuEgoJ0t/bbwHbLQ==", + "license": "MIT" }, "node_modules/lru-cache": { "version": "10.4.3", @@ -8250,27 +8818,6 @@ "dev": true, "license": "MIT" }, - "node_modules/merge-options": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/merge-options/-/merge-options-3.0.4.tgz", - "integrity": "sha512-2Sug1+knBjkaMsMgf1ctR1Ujx+Ayku4EdJN4Z+C2+JzoeF7A3OZ9KM2GY0CpQS51NR61LTurMJrRKPhSs3ZRTQ==", - "license": "MIT", - "dependencies": { - "is-plain-obj": "^2.1.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/merge-options/node_modules/is-plain-obj": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", - "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, "node_modules/merge2": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", @@ -8319,10 +8866,10 @@ } }, "node_modules/minimatch": { - "version": "10.0.3", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.0.3.tgz", - "integrity": "sha512-IPZ167aShDZZUMdRk66cyQAW3qr0WzbHkPdMYa8bzZhlHhO3jALbKdxcaak7W9FfT2rZNpQuUu4Od7ILEpXSaw==", - "license": "ISC", + "version": "10.1.1", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.1.1.tgz", + "integrity": "sha512-enIvLvRAFZYXJzkCYG5RKmPfrFArdLv+R+lbQ53BmIMLIry74bjKzX6iHAm8WYamJkhSSEabrWN5D97XnKObjQ==", + "license": "BlueOak-1.0.0", "dependencies": { "@isaacs/brace-expansion": "^5.0.0" }, @@ -8373,14 +8920,16 @@ } }, "node_modules/mqtt": { - "version": "5.13.1", - "resolved": "https://registry.npmjs.org/mqtt/-/mqtt-5.13.1.tgz", - "integrity": "sha512-g+4G+ma0UeL3Pgu1y1si2NHb4VLIEUCtF789WrG99lLG0XZyoab2EJoy58YgGSg/1yFdthDBH0+4llsZZD/vug==", + "version": "5.14.1", + "resolved": "https://registry.npmjs.org/mqtt/-/mqtt-5.14.1.tgz", + "integrity": "sha512-NxkPxE70Uq3Ph7goefQa7ggSsVzHrayCD0OyxlJgITN/EbzlZN+JEPmaAZdxP1LsIT5FamDyILoQTF72W7Nnbw==", "license": "MIT", "dependencies": { + "@types/readable-stream": "^4.0.21", + "@types/ws": "^8.18.1", "commist": "^3.2.0", "concat-stream": "^2.0.0", - "debug": "^4.4.0", + "debug": "^4.4.1", "help-me": "^5.0.0", "lru-cache": "^10.4.3", "minimist": "^1.2.8", @@ -8388,10 +8937,10 @@ "number-allocator": "^1.0.14", "readable-stream": "^4.7.0", "rfdc": "^1.4.1", - "socks": "^2.8.3", + "socks": "^2.8.6", "split2": "^4.2.0", - "worker-timers": "^7.1.8", - "ws": "^8.18.0" + "worker-timers": "^8.0.23", + "ws": "^8.18.3" }, "bin": { "mqtt": "build/bin/mqtt.js", @@ -8429,15 +8978,15 @@ "license": "MIT" }, "node_modules/multiformats": { - "version": "13.3.6", - "resolved": "https://registry.npmjs.org/multiformats/-/multiformats-13.3.6.tgz", - "integrity": "sha512-yakbt9cPYj8d3vi/8o/XWm61MrOILo7fsTL0qxNx6zS0Nso6K5JqqS2WV7vK/KSuDBvrW3KfCwAdAgarAgOmww==", + "version": "13.4.1", + "resolved": "https://registry.npmjs.org/multiformats/-/multiformats-13.4.1.tgz", + "integrity": "sha512-VqO6OSvLrFVAYYjgsr8tyv62/rCQhPgsZUXLTqoFLSgdkgiUYKYeArbt1uWLlEpkjxQe+P0+sHlbPEte1Bi06Q==", "license": "Apache-2.0 OR MIT" }, "node_modules/nanoid": { - "version": "3.3.8", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.8.tgz", - "integrity": "sha512-WNLf5Sd8oZxOm+TzppcYk8gVOgP+l58xNy58D0nbUnOxOWRWvlcCV4kUF7ltmI6PsrLl/BgKEyS4mqsGChFN0w==", + "version": "3.3.11", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.11.tgz", + "integrity": "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==", "dev": true, "funding": [ { @@ -8445,6 +8994,7 @@ "url": "https://github.com/sponsors/ai" } ], + "license": "MIT", "bin": { "nanoid": "bin/nanoid.cjs" }, @@ -8520,14 +9070,17 @@ } }, "node_modules/object.assign": { - "version": "4.1.5", - "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.5.tgz", - "integrity": "sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ==", + "version": "4.1.7", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.7.tgz", + "integrity": "sha512-nK28WOo+QIjBkDduTINE4JkF/UJJKyf2EJxvJKfblDpyg0Q+pkOHNTL0Qwy6NP6FhE/EnzV73BxxqcJaXY9anw==", "dev": true, + "license": "MIT", "dependencies": { - "call-bind": "^1.0.5", + "call-bind": "^1.0.8", + "call-bound": "^1.0.3", "define-properties": "^1.2.1", - "has-symbols": "^1.0.3", + "es-object-atoms": "^1.0.0", + "has-symbols": "^1.1.0", "object-keys": "^1.1.1" }, "engines": { @@ -8572,13 +9125,14 @@ } }, "node_modules/object.values": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.2.0.tgz", - "integrity": "sha512-yBYjY9QX2hnRmZHAjG/f13MzmBzxzYgQhFrke06TTyKY5zSTEqkOeukBzIdVA3j3ulu8Qa3MbVFShV7T2RmGtQ==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.2.1.tgz", + "integrity": "sha512-gXah6aZrcUxjWg2zR2MwouP2eHlCBzdV4pygudehaKXSGW4v2AsRQUK+lwwXhii6KFZcunEnmSUoYp5CXibxtA==", "dev": true, "license": "MIT", "dependencies": { - "call-bind": "^1.0.7", + "call-bind": "^1.0.8", + "call-bound": "^1.0.3", "define-properties": "^1.2.1", "es-object-atoms": "^1.0.0" }, @@ -8605,9 +9159,9 @@ } }, "node_modules/octagonal-wheels": { - "version": "0.1.41", - "resolved": "https://registry.npmjs.org/octagonal-wheels/-/octagonal-wheels-0.1.41.tgz", - "integrity": "sha512-cIvdXsyiSCxknyxTwGrNnDKsaYpgZdXeKAy9cXIAk2Jy7T1z6bLjU4s5z47OySNPVPSr32x5r8hSz7hAYYv7qA==", + "version": "0.1.42", + "resolved": "https://registry.npmjs.org/octagonal-wheels/-/octagonal-wheels-0.1.42.tgz", + "integrity": "sha512-Hc2GWCtmG4+OzY9flY5vHjozUPuwsQoY7osG+I2QzACs8iTWrlAcw1re8FgU4vDC/to9rFogWfYWI8bNbr5j2w==", "license": "MIT", "dependencies": { "idb": "^8.0.3" @@ -8630,6 +9184,24 @@ "node": ">= 0.8.0" } }, + "node_modules/own-keys": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/own-keys/-/own-keys-1.0.1.tgz", + "integrity": "sha512-qFOyK5PjiWZd+QQIh+1jhdb9LpxTF0qs7Pm8o5QHYZ0M3vKqSqzsZaEB6oWlxZ+q2sJBMI/Ktgd2N5ZwQoRHfg==", + "dev": true, + "license": "MIT", + "dependencies": { + "get-intrinsic": "^1.2.6", + "object-keys": "^1.1.1", + "safe-push-apply": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/p-defer": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/p-defer/-/p-defer-4.0.1.tgz", @@ -8688,16 +9260,28 @@ } }, "node_modules/p-queue": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/p-queue/-/p-queue-8.1.0.tgz", - "integrity": "sha512-mxLDbbGIBEXTJL0zEx8JIylaj3xQ7Z/7eEVjcF9fJX4DBiH9oqe+oahYnlKKxm0Ci9TlWTyhSHgygxMxjIB2jw==", + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/p-queue/-/p-queue-9.0.0.tgz", + "integrity": "sha512-KO1RyxstL9g1mK76530TExamZC/S2Glm080Nx8PE5sTd7nlduDQsAfEl4uXX+qZjLiwvDauvzXavufy3+rJ9zQ==", "license": "MIT", "dependencies": { "eventemitter3": "^5.0.1", - "p-timeout": "^6.1.2" + "p-timeout": "^7.0.0" }, "engines": { - "node": ">=18" + "node": ">=20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-queue/node_modules/p-timeout": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-7.0.1.tgz", + "integrity": "sha512-AxTM2wDGORHGEkPCt8yqxOTMgpfbEHqF51f/5fJCmwFC3C/zNcGT63SymH2ttOAaiIws2zVg4+izQCjrakcwHg==", + "license": "MIT", + "engines": { + "node": ">=20" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" @@ -8814,12 +9398,12 @@ } }, "node_modules/pathval": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/pathval/-/pathval-1.1.1.tgz", - "integrity": "sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/pathval/-/pathval-2.0.1.tgz", + "integrity": "sha512-//nshmD55c46FuFw26xV/xFAaB5HF9Xdap7HJBBnrKdAd6/GxDBaNA1870O79+9ueg61cZLSVc+OaFlfmObYVQ==", "license": "MIT", "engines": { - "node": "*" + "node": ">= 14.16" } }, "node_modules/picocolors": { @@ -8907,18 +9491,19 @@ } }, "node_modules/possible-typed-array-names": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/possible-typed-array-names/-/possible-typed-array-names-1.0.0.tgz", - "integrity": "sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/possible-typed-array-names/-/possible-typed-array-names-1.1.0.tgz", + "integrity": "sha512-/+5VFTchJDoVj3bhoqi6UeymcD00DAwb1nJwamzPvHEszJ4FpF6SNNbUbOS8yI56qHzdV8eK0qEfOSiodkTdxg==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.4" } }, "node_modules/postcss": { - "version": "8.5.3", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.3.tgz", - "integrity": "sha512-dle9A3yYxlBSrt8Fu+IpjGT8SY8hN0mlaA6GY8t0P5PjIOZemULz/E2Bnm/2dcUOena75OTNkHI76uZBNUUq3A==", + "version": "8.5.6", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.6.tgz", + "integrity": "sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==", "dev": true, "funding": [ { @@ -8936,7 +9521,7 @@ ], "license": "MIT", "dependencies": { - "nanoid": "^3.3.8", + "nanoid": "^3.3.11", "picocolors": "^1.1.1", "source-map-js": "^1.2.1" }, @@ -9401,9 +9986,9 @@ } }, "node_modules/protons-runtime": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/protons-runtime/-/protons-runtime-5.5.0.tgz", - "integrity": "sha512-EsALjF9QsrEk6gbCx3lmfHxVN0ah7nG3cY7GySD4xf4g8cr7g543zB88Foh897Sr1RQJ9yDCUsoT1i1H/cVUFA==", + "version": "5.6.0", + "resolved": "https://registry.npmjs.org/protons-runtime/-/protons-runtime-5.6.0.tgz", + "integrity": "sha512-/Kde+sB9DsMFrddJT/UZWe6XqvL7SL5dbag/DBCElFKhkwDj7XKt53S+mzLyaDP5OqS0wXjV5SA572uWDaT0Hg==", "license": "Apache-2.0 OR MIT", "dependencies": { "uint8-varint": "^2.0.2", @@ -9467,9 +10052,9 @@ "license": "MIT" }, "node_modules/quick-lru": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-7.0.1.tgz", - "integrity": "sha512-kLjThirJMkWKutUKbZ8ViqFc09tDQhlbQo2MNuVeLWbRauqYP96Sm6nzlQ24F0HFjUNZ4i9+AgldJ9H6DZXi7g==", + "version": "7.3.0", + "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-7.3.0.tgz", + "integrity": "sha512-k9lSsjl36EJdK7I06v7APZCbyGT2vMTsYSRX1Q2nbYmnkBqgUhRkAuzH08Ciotteu/PLJmIF2+tti7o3C/ts2g==", "license": "MIT", "engines": { "node": ">=18" @@ -9479,10 +10064,13 @@ } }, "node_modules/race-event": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/race-event/-/race-event-1.3.0.tgz", - "integrity": "sha512-kaLm7axfOnahIqD3jQ4l1e471FIFcEGebXEnhxyLscuUzV8C94xVHtWEqDDXxll7+yu/6lW0w1Ff4HbtvHvOHg==", - "license": "Apache-2.0 OR MIT" + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/race-event/-/race-event-1.6.1.tgz", + "integrity": "sha512-vi7WH5g5KoTFpu2mme/HqZiWH14XSOtg5rfp6raBskBHl7wnmy3F/biAIyY5MsK+BHWhoPhxtZ1Y2R7OHHaWyQ==", + "license": "Apache-2.0 OR MIT", + "dependencies": { + "abort-error": "^1.0.1" + } }, "node_modules/race-signal": { "version": "1.1.3", @@ -9519,16 +10107,42 @@ "url": "https://paulmillr.com/funding/" } }, - "node_modules/regexp.prototype.flags": { - "version": "1.5.2", - "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.2.tgz", - "integrity": "sha512-NcDiDkTLuPR+++OCKB0nWafEmhg/Da8aUPLPMQbK+bxKKCm1/S5he+AqYa4PlMCVBalb4/yxIRub6qkEx5yJbw==", + "node_modules/reflect.getprototypeof": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/reflect.getprototypeof/-/reflect.getprototypeof-1.0.10.tgz", + "integrity": "sha512-00o4I+DVrefhv+nX0ulyi3biSHCPDe+yLv5o/p6d/UVlirijB8E16FtfwSAi4g3tcqrQ4lRAqQSoFEZJehYEcw==", "dev": true, + "license": "MIT", "dependencies": { - "call-bind": "^1.0.6", + "call-bind": "^1.0.8", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.9", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0", + "get-intrinsic": "^1.2.7", + "get-proto": "^1.0.1", + "which-builtin-type": "^1.2.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/regexp.prototype.flags": { + "version": "1.5.4", + "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.4.tgz", + "integrity": "sha512-dYqgNSZbDwkaJ2ceRd9ojCGjBq+mOm9LmtXnAnEGyHhN/5R7iDW2TRw3h+o/jCFxus3P2LfWIIiwowAjANm7IA==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", "define-properties": "^1.2.1", "es-errors": "^1.3.0", - "set-function-name": "^2.0.1" + "get-proto": "^1.0.1", + "gopd": "^1.2.0", + "set-function-name": "^2.0.2" }, "engines": { "node": ">= 0.4" @@ -9615,6 +10229,49 @@ "integrity": "sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA==", "license": "MIT" }, + "node_modules/rollup": { + "version": "4.52.5", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.52.5.tgz", + "integrity": "sha512-3GuObel8h7Kqdjt0gxkEzaifHTqLVW56Y/bjN7PSQtkKr0w3V/QYSdt6QWYtd7A1xUtYQigtdUfgj1RvWVtorw==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@types/estree": "1.0.8" + }, + "bin": { + "rollup": "dist/bin/rollup" + }, + "engines": { + "node": ">=18.0.0", + "npm": ">=8.0.0" + }, + "optionalDependencies": { + "@rollup/rollup-android-arm-eabi": "4.52.5", + "@rollup/rollup-android-arm64": "4.52.5", + "@rollup/rollup-darwin-arm64": "4.52.5", + "@rollup/rollup-darwin-x64": "4.52.5", + "@rollup/rollup-freebsd-arm64": "4.52.5", + "@rollup/rollup-freebsd-x64": "4.52.5", + "@rollup/rollup-linux-arm-gnueabihf": "4.52.5", + "@rollup/rollup-linux-arm-musleabihf": "4.52.5", + "@rollup/rollup-linux-arm64-gnu": "4.52.5", + "@rollup/rollup-linux-arm64-musl": "4.52.5", + "@rollup/rollup-linux-loong64-gnu": "4.52.5", + "@rollup/rollup-linux-ppc64-gnu": "4.52.5", + "@rollup/rollup-linux-riscv64-gnu": "4.52.5", + "@rollup/rollup-linux-riscv64-musl": "4.52.5", + "@rollup/rollup-linux-s390x-gnu": "4.52.5", + "@rollup/rollup-linux-x64-gnu": "4.52.5", + "@rollup/rollup-linux-x64-musl": "4.52.5", + "@rollup/rollup-openharmony-arm64": "4.52.5", + "@rollup/rollup-win32-arm64-msvc": "4.52.5", + "@rollup/rollup-win32-ia32-msvc": "4.52.5", + "@rollup/rollup-win32-x64-gnu": "4.52.5", + "@rollup/rollup-win32-x64-msvc": "4.52.5", + "fsevents": "~2.3.2" + } + }, "node_modules/run-parallel": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", @@ -9652,14 +10309,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": { @@ -9689,15 +10348,33 @@ ], "license": "MIT" }, - "node_modules/safe-regex-test": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.3.tgz", - "integrity": "sha512-CdASjNJPvRa7roO6Ra/gLYBTzYzzPyyBXxIMdGW3USQLyjWEls2RgW5UBTXaQVp+OrpeCK3bLem8smtmheoRuw==", + "node_modules/safe-push-apply": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/safe-push-apply/-/safe-push-apply-1.0.0.tgz", + "integrity": "sha512-iKE9w/Z7xCzUMIZqdBsp6pEQvwuEebH4vdpjcDWnyzaI6yl6O9FHvVpmGelvEHNsoY6wGblkxR6Zty/h00WiSA==", "dev": true, + "license": "MIT", "dependencies": { - "call-bind": "^1.0.6", "es-errors": "^1.3.0", - "is-regex": "^1.1.4" + "isarray": "^2.0.5" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/safe-regex-test": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.1.0.tgz", + "integrity": "sha512-x/+Cz4YrimQxQccJf5mKEbIa1NzeCRNI5Ecl/ekmlYaampdNLPalVyIcCZNNH3MvmqBugV5TMYZXv0ljslUlaw==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "is-regex": "^1.2.1" }, "engines": { "node": ">= 0.4" @@ -9747,6 +10424,7 @@ "resolved": "https://registry.npmjs.org/set-function-name/-/set-function-name-2.0.2.tgz", "integrity": "sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==", "dev": true, + "license": "MIT", "dependencies": { "define-data-property": "^1.1.4", "es-errors": "^1.3.0", @@ -9757,6 +10435,21 @@ "node": ">= 0.4" } }, + "node_modules/set-proto": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/set-proto/-/set-proto-1.0.0.tgz", + "integrity": "sha512-RJRdvCo6IAnPdsvP/7m6bsQqNnn1FCBX5ZNtFL98MmFF/4xAIJTIg1YbHW5DC2W5SKZanrC6i4HsJqlajw/dZw==", + "dev": true, + "license": "MIT", + "dependencies": { + "dunder-proto": "^1.0.1", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/shebang-command": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", @@ -9880,12 +10573,12 @@ } }, "node_modules/socks": { - "version": "2.8.4", - "resolved": "https://registry.npmjs.org/socks/-/socks-2.8.4.tgz", - "integrity": "sha512-D3YaD0aRxR3mEcqnidIs7ReYJFVzWdd6fXJYUM8ixcQcJRGTka/b3saV0KflYhyVJXKhb947GndU35SxYNResQ==", + "version": "2.8.7", + "resolved": "https://registry.npmjs.org/socks/-/socks-2.8.7.tgz", + "integrity": "sha512-HLpt+uLy/pxB+bum/9DzAgiKS8CX1EvbWxI4zlmgGCExImLdiad2iCwXT5Z4c9c3Eq8rP2318mPW2c+QbtjK8A==", "license": "MIT", "dependencies": { - "ip-address": "^9.0.5", + "ip-address": "^10.0.1", "smart-buffer": "^4.2.0" }, "engines": { @@ -9937,11 +10630,19 @@ "node": ">= 10.x" } }, - "node_modules/sprintf-js": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.1.3.tgz", - "integrity": "sha512-Oo+0REFV59/rz3gfJNKQiBlwfHaSESl1pcGyABQsnnIfWOFt6JNj5gCog2U6MLZ//IGYD+nA8nI+mTShREReaA==", - "license": "BSD-3-Clause" + "node_modules/stop-iteration-iterator": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/stop-iteration-iterator/-/stop-iteration-iterator-1.1.0.tgz", + "integrity": "sha512-eLoXW/DHyl62zxY4SCaIgnRhuMr6ri4juEYARS8E6sCEqzKpOiE521Ucofdx+KnDZl5xmvGYaaKCk5FEOxJCoQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "internal-slot": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + } }, "node_modules/string_decoder": { "version": "1.3.0", @@ -9983,16 +10684,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" @@ -10002,16 +10706,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" } @@ -10165,13 +10873,13 @@ } }, "node_modules/svelte": { - "version": "5.28.6", - "resolved": "https://registry.npmjs.org/svelte/-/svelte-5.28.6.tgz", - "integrity": "sha512-9qqr7mw8YR9PAnxGFfzCK6PUlNGtns7wVavrhnxyf3fpB1mP/Ol55Z2UnIapsSzNNl3k9qw7cZ22PdE8+xT/jQ==", + "version": "5.41.1", + "resolved": "https://registry.npmjs.org/svelte/-/svelte-5.41.1.tgz", + "integrity": "sha512-0a/huwc8e2es+7KFi70esqsReRfRbrT8h1cJSY/+z1lF0yKM6TT+//HYu28Yxstr50H7ifaqZRDGd0KuKDxP7w==", "dev": true, "license": "MIT", "dependencies": { - "@ampproject/remapping": "^2.3.0", + "@jridgewell/remapping": "^2.3.4", "@jridgewell/sourcemap-codec": "^1.5.0", "@sveltejs/acorn-typescript": "^1.0.5", "@types/estree": "^1.0.5", @@ -10180,7 +10888,7 @@ "axobject-query": "^4.1.0", "clsx": "^2.1.1", "esm-env": "^1.2.1", - "esrap": "^1.4.6", + "esrap": "^2.1.0", "is-reference": "^3.0.3", "locate-character": "^3.0.0", "magic-string": "^0.30.11", @@ -10191,9 +10899,9 @@ } }, "node_modules/svelte-check": { - "version": "4.1.7", - "resolved": "https://registry.npmjs.org/svelte-check/-/svelte-check-4.1.7.tgz", - "integrity": "sha512-1jX4BzXrQJhC/Jt3SqYf6Ntu//vmfc6VWp07JkRfK2nn+22yIblspVUo96gzMkg0Zov8lQicxhxsMzOctwcMQQ==", + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/svelte-check/-/svelte-check-4.3.3.tgz", + "integrity": "sha512-RYP0bEwenDXzfv0P1sKAwjZSlaRyqBn0Fz1TVni58lqyEiqgwztTpmodJrGzP6ZT2aHl4MbTvWP6gbmQ3FOnBg==", "dev": true, "license": "MIT", "dependencies": { @@ -10215,10 +10923,14 @@ } }, "node_modules/svelte-check/node_modules/fdir": { - "version": "6.4.0", - "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.4.0.tgz", - "integrity": "sha512-3oB133prH1o4j/L5lLW7uOCF1PlD+/It2L0eL/iAqWMB91RBbqTewABqxhj0ibBd90EEmWZq7ntIWzVaWcXTGQ==", + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz", + "integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==", "dev": true, + "license": "MIT", + "engines": { + "node": ">=12.0.0" + }, "peerDependencies": { "picomatch": "^3 || ^4" }, @@ -10244,9 +10956,9 @@ } }, "node_modules/svelte-eslint-parser": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/svelte-eslint-parser/-/svelte-eslint-parser-1.1.3.tgz", - "integrity": "sha512-DUc/z/vk+AFVoxGv54+BOBFqUrmUgNg2gSO2YqrE3OL6ro19/0azPmQj/4wN3s9RxuF5l7G0162q/Ddk4LJhZA==", + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/svelte-eslint-parser/-/svelte-eslint-parser-1.4.0.tgz", + "integrity": "sha512-fjPzOfipR5S7gQ/JvI9r2H8y9gMGXO3JtmrylHLLyahEMquXI0lrebcjT+9/hNgDej0H7abTyox5HpHmW1PSWA==", "dev": true, "license": "MIT", "dependencies": { @@ -10258,7 +10970,8 @@ "postcss-selector-parser": "^7.0.0" }, "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0", + "pnpm": "10.18.3" }, "funding": { "url": "https://github.com/sponsors/ota-meshi" @@ -10386,6 +11099,57 @@ "node": ">= 6" } }, + "node_modules/tinyglobby": { + "version": "0.2.15", + "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.15.tgz", + "integrity": "sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "fdir": "^6.5.0", + "picomatch": "^4.0.3" + }, + "engines": { + "node": ">=12.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/SuperchupuDev" + } + }, + "node_modules/tinyglobby/node_modules/fdir": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz", + "integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">=12.0.0" + }, + "peerDependencies": { + "picomatch": "^3 || ^4" + }, + "peerDependenciesMeta": { + "picomatch": { + "optional": true + } + } + }, + "node_modules/tinyglobby/node_modules/picomatch": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz", + "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, "node_modules/to-regex-range": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", @@ -10429,18 +11193,16 @@ } }, "node_modules/trystero": { - "version": "0.21.8", - "resolved": "git+ssh://git@github.com/vrtmrz/trystero.git#9e892a93ec14eeb57ce806d272fbb7c3935256d8", - "integrity": "sha512-LUlmTTSxgomyYvU1K05snl18+GLAxqO4W8P9lePLbRnZVJyGZUVXMM4/aW9384GtIf0VLJquloWqz9PriJZg2w==", + "version": "0.22.0", + "resolved": "https://registry.npmjs.org/trystero/-/trystero-0.22.0.tgz", + "integrity": "sha512-VscO7kaTFWNLmuxu1Au1kIxX6FzkVeXcL3+mhb9MaCSz8fm4T5MFWkdfDOujMtNK4iztupQ5AGEqGniP/I8Gvw==", "license": "MIT", "dependencies": { "@noble/secp256k1": "^3.0.0", - "@supabase/supabase-js": "^2.49.8", - "@waku/discovery": "^0.0.8", - "@waku/sdk": "^0.0.31", - "firebase": "^12.2.1", - "libp2p": "^2.8.8", - "mqtt": "^5.13.0" + "@supabase/supabase-js": "^2.75.0", + "@waku/sdk": "^0.0.35", + "firebase": "^12.4.0", + "mqtt": "^5.14.1" } }, "node_modules/trystero/node_modules/@noble/secp256k1": { @@ -10453,9 +11215,9 @@ } }, "node_modules/ts-api-utils": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-2.0.1.tgz", - "integrity": "sha512-dnlgjFSVetynI8nzgJ+qF62efpglpWRk8isUEWZGWlJYySCTD6aKvbUDu+zbPeDakk3bg5H4XpitHukgfL1m9w==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-2.1.0.tgz", + "integrity": "sha512-CUgTZL1irw8u29bzrOD/nH85jqyc74D6SshFgujOIA7osm2Rz7dYH77agkx7H4FBNxDq7Cjf+IjaX/8zwFW+ZQ==", "dev": true, "license": "MIT", "engines": { @@ -10484,9 +11246,9 @@ "license": "0BSD" }, "node_modules/tsx": { - "version": "4.19.4", - "resolved": "https://registry.npmjs.org/tsx/-/tsx-4.19.4.tgz", - "integrity": "sha512-gK5GVzDkJK1SI1zwHf32Mqxf2tSJkNx+eYcNly5+nHvWqXUJYUkWBQtKauoESz3ymezAI++ZwT855x5p5eop+Q==", + "version": "4.20.6", + "resolved": "https://registry.npmjs.org/tsx/-/tsx-4.20.6.tgz", + "integrity": "sha512-ytQKuwgmrrkDTFP4LjR0ToE2nqgy886GpvRSpU0JAnrdBYppuY5rLkRUYPU1yCryb24SsKBTL/hlDQAEFVwtZg==", "dev": true, "license": "MIT", "dependencies": { @@ -10525,30 +11287,32 @@ } }, "node_modules/typed-array-buffer": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.2.tgz", - "integrity": "sha512-gEymJYKZtKXzzBzM4jqa9w6Q1Jjm7x2d+sh19AdsD4wqnMPDYyvwpsIc2Q/835kHuo3BEQ7CjelGhfTsoBb2MQ==", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.3.tgz", + "integrity": "sha512-nAYYwfY3qnzX30IkA6AQZjVbtK6duGontcQm1WSG1MD94YLqK0515GNApXkoxKOWMusVssAHWLh9SeaoefYFGw==", "dev": true, + "license": "MIT", "dependencies": { - "call-bind": "^1.0.7", + "call-bound": "^1.0.3", "es-errors": "^1.3.0", - "is-typed-array": "^1.1.13" + "is-typed-array": "^1.1.14" }, "engines": { "node": ">= 0.4" } }, "node_modules/typed-array-byte-length": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.1.tgz", - "integrity": "sha512-3iMJ9q0ao7WE9tWcaYKIptkNBuOIcZCCT0d4MRvuuH88fEoEH62IuQe0OtraD3ebQEoTRk8XCBoknUNc1Y67pw==", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.3.tgz", + "integrity": "sha512-BaXgOuIxz8n8pIq3e7Atg/7s+DpiYrxn4vdot3w9KbnBhcRQq6o3xemQdIfynqSeXeDrF32x+WvfzmOjPiY9lg==", "dev": true, + "license": "MIT", "dependencies": { - "call-bind": "^1.0.7", + "call-bind": "^1.0.8", "for-each": "^0.3.3", - "gopd": "^1.0.1", - "has-proto": "^1.0.3", - "is-typed-array": "^1.1.13" + "gopd": "^1.2.0", + "has-proto": "^1.2.0", + "is-typed-array": "^1.1.14" }, "engines": { "node": ">= 0.4" @@ -10558,17 +11322,19 @@ } }, "node_modules/typed-array-byte-offset": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.2.tgz", - "integrity": "sha512-Ous0vodHa56FviZucS2E63zkgtgrACj7omjwd/8lTEMEPFFyjfixMZ1ZXenpgCFBBt4EC1J2XsyVS2gkG0eTFA==", + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.4.tgz", + "integrity": "sha512-bTlAFB/FBYMcuX81gbL4OcpH5PmlFHqlCCpAl8AlEzMz5k53oNDvN8p1PNOWLEmI2x4orp3raOFB51tv9X+MFQ==", "dev": true, + "license": "MIT", "dependencies": { "available-typed-arrays": "^1.0.7", - "call-bind": "^1.0.7", + "call-bind": "^1.0.8", "for-each": "^0.3.3", - "gopd": "^1.0.1", - "has-proto": "^1.0.3", - "is-typed-array": "^1.1.13" + "gopd": "^1.2.0", + "has-proto": "^1.2.0", + "is-typed-array": "^1.1.15", + "reflect.getprototypeof": "^1.0.9" }, "engines": { "node": ">= 0.4" @@ -10578,18 +11344,18 @@ } }, "node_modules/typed-array-length": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.6.tgz", - "integrity": "sha512-/OxDN6OtAk5KBpGb28T+HZc2M+ADtvRxXrKKbUwtsLgdoxgX13hyy7ek6bFRl5+aBs2yZzB0c4CnQfAtVypW/g==", + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.7.tgz", + "integrity": "sha512-3KS2b+kL7fsuk/eJZ7EQdnEmQoaho/r6KUef7hxvltNA5DR8NAUM+8wJMbJyZ4G9/7i3v5zPBIMN5aybAh2/Jg==", "dev": true, "license": "MIT", "dependencies": { "call-bind": "^1.0.7", "for-each": "^0.3.3", "gopd": "^1.0.1", - "has-proto": "^1.0.3", "is-typed-array": "^1.1.13", - "possible-typed-array-names": "^1.0.0" + "possible-typed-array-names": "^1.0.0", + "reflect.getprototypeof": "^1.0.6" }, "engines": { "node": ">= 0.4" @@ -10605,9 +11371,9 @@ "license": "MIT" }, "node_modules/typescript": { - "version": "5.7.3", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.7.3.tgz", - "integrity": "sha512-84MVSjMEHP+FQRPy3pX9sTVV/INIex71s9TL2Gm5FG/WG1SqXeKyZ0k7/blY/4FdOzI12CBy1vGc4og/eus0fw==", + "version": "5.9.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.9.3.tgz", + "integrity": "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==", "dev": true, "license": "Apache-2.0", "bin": { @@ -10647,15 +11413,19 @@ } }, "node_modules/unbox-primitive": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz", - "integrity": "sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.1.0.tgz", + "integrity": "sha512-nWJ91DjeOkej/TA8pXQ3myruKpKEYgqvpw9lz4OPHj/NWFNluYrjbz9j01CJ8yKQd2g4jFoOkINCTW2I5LEEyw==", "dev": true, + "license": "MIT", "dependencies": { - "call-bind": "^1.0.2", + "call-bound": "^1.0.3", "has-bigints": "^1.0.2", - "has-symbols": "^1.0.3", - "which-boxed-primitive": "^1.0.2" + "has-symbols": "^1.1.0", + "which-boxed-primitive": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -10711,6 +11481,135 @@ "uuid": "dist/bin/uuid" } }, + "node_modules/vite": { + "version": "7.1.11", + "resolved": "https://registry.npmjs.org/vite/-/vite-7.1.11.tgz", + "integrity": "sha512-uzcxnSDVjAopEUjljkWh8EIrg6tlzrjFUfMcR1EVsRDGwf/ccef0qQPRyOrROwhrTDaApueq+ja+KLPlzR/zdg==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "esbuild": "^0.25.0", + "fdir": "^6.5.0", + "picomatch": "^4.0.3", + "postcss": "^8.5.6", + "rollup": "^4.43.0", + "tinyglobby": "^0.2.15" + }, + "bin": { + "vite": "bin/vite.js" + }, + "engines": { + "node": "^20.19.0 || >=22.12.0" + }, + "funding": { + "url": "https://github.com/vitejs/vite?sponsor=1" + }, + "optionalDependencies": { + "fsevents": "~2.3.3" + }, + "peerDependencies": { + "@types/node": "^20.19.0 || >=22.12.0", + "jiti": ">=1.21.0", + "less": "^4.0.0", + "lightningcss": "^1.21.0", + "sass": "^1.70.0", + "sass-embedded": "^1.70.0", + "stylus": ">=0.54.8", + "sugarss": "^5.0.0", + "terser": "^5.16.0", + "tsx": "^4.8.1", + "yaml": "^2.4.2" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + }, + "jiti": { + "optional": true + }, + "less": { + "optional": true + }, + "lightningcss": { + "optional": true + }, + "sass": { + "optional": true + }, + "sass-embedded": { + "optional": true + }, + "stylus": { + "optional": true + }, + "sugarss": { + "optional": true + }, + "terser": { + "optional": true + }, + "tsx": { + "optional": true + }, + "yaml": { + "optional": true + } + } + }, + "node_modules/vite/node_modules/fdir": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz", + "integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">=12.0.0" + }, + "peerDependencies": { + "picomatch": "^3 || ^4" + }, + "peerDependenciesMeta": { + "picomatch": { + "optional": true + } + } + }, + "node_modules/vite/node_modules/picomatch": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz", + "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/vitefu": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/vitefu/-/vitefu-1.1.1.tgz", + "integrity": "sha512-B/Fegf3i8zh0yFbpzZ21amWzHmuNlLlmJT6n7bu5e+pCHUKQIfXSYokrqOBGEMMe9UG2sostKQF9mml/vYaWJQ==", + "dev": true, + "license": "MIT", + "workspaces": [ + "tests/deps/*", + "tests/projects/*", + "tests/projects/workspace/packages/*" + ], + "peerDependencies": { + "vite": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0-beta.0" + }, + "peerDependenciesMeta": { + "vite": { + "optional": true + } + } + }, "node_modules/vuvuzela": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/vuvuzela/-/vuvuzela-1.0.3.tgz", @@ -10725,13 +11624,13 @@ "peer": true }, "node_modules/weald": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/weald/-/weald-1.0.4.tgz", - "integrity": "sha512-+kYTuHonJBwmFhP1Z4YQK/dGi3jAnJGCYhyODFpHK73rbxnp9lnZQj7a2m+WVgn8fXr5bJaxUpF6l8qZpPeNWQ==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/weald/-/weald-1.1.1.tgz", + "integrity": "sha512-PaEQShzMCz8J/AD2N3dJMc1hTZWkJeLKS2NMeiVkV5KDHwgZe7qXLEzyodsT/SODxWDdXJJqocuwf3kHzcXhSQ==", "license": "Apache-2.0 OR MIT", "dependencies": { "ms": "^3.0.0-canary.1", - "supports-color": "^9.4.0" + "supports-color": "^10.0.0" } }, "node_modules/weald/node_modules/ms": { @@ -10744,12 +11643,12 @@ } }, "node_modules/weald/node_modules/supports-color": { - "version": "9.4.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-9.4.0.tgz", - "integrity": "sha512-VL+lNrEoIXww1coLPOmiEmK/0sGigko5COxI09KzHc2VJXJsQ37UaQ+8quuxjDeA7+KnLGTWRyOXSLLR2Wb4jw==", + "version": "10.2.2", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-10.2.2.tgz", + "integrity": "sha512-SS+jx45GF1QjgEXQx4NJZV9ImqmO2NPz5FNsIHrsDjh2YsHnawpan7SNQ1o8NuhrbHZy9AZhIoCUiCeaW/C80g==", "license": "MIT", "engines": { - "node": ">=12" + "node": ">=18" }, "funding": { "url": "https://github.com/chalk/supports-color?sponsor=1" @@ -10828,31 +11727,85 @@ } }, "node_modules/which-boxed-primitive": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", - "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.1.1.tgz", + "integrity": "sha512-TbX3mj8n0odCBFVlY8AxkqcHASw3L60jIuF8jFP78az3C2YhmGvqbHBpAjTRH2/xqYunrJ9g1jSyjCjpoWzIAA==", "dev": true, + "license": "MIT", "dependencies": { - "is-bigint": "^1.0.1", - "is-boolean-object": "^1.1.0", - "is-number-object": "^1.0.4", - "is-string": "^1.0.5", - "is-symbol": "^1.0.3" + "is-bigint": "^1.1.0", + "is-boolean-object": "^1.2.1", + "is-number-object": "^1.1.1", + "is-string": "^1.1.1", + "is-symbol": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/which-builtin-type": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/which-builtin-type/-/which-builtin-type-1.2.1.tgz", + "integrity": "sha512-6iBczoX+kDQ7a3+YJBnh3T+KZRxM/iYNPXicqk66/Qfm1b93iu+yOImkg0zHbj5LNOcNv1TEADiZ0xa34B4q6Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "function.prototype.name": "^1.1.6", + "has-tostringtag": "^1.0.2", + "is-async-function": "^2.0.0", + "is-date-object": "^1.1.0", + "is-finalizationregistry": "^1.1.0", + "is-generator-function": "^1.0.10", + "is-regex": "^1.2.1", + "is-weakref": "^1.0.2", + "isarray": "^2.0.5", + "which-boxed-primitive": "^1.1.0", + "which-collection": "^1.0.2", + "which-typed-array": "^1.1.16" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/which-collection": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/which-collection/-/which-collection-1.0.2.tgz", + "integrity": "sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-map": "^2.0.3", + "is-set": "^2.0.3", + "is-weakmap": "^2.0.2", + "is-weakset": "^2.0.3" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/which-typed-array": { - "version": "1.1.15", - "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.15.tgz", - "integrity": "sha512-oV0jmFtUky6CXfkqehVvBP/LSWJ2sy4vWMioiENyJLePrBO/yKyV9OyJySfAKosh+RYkIl5zJCNZ8/4JncrpdA==", + "version": "1.1.19", + "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.19.tgz", + "integrity": "sha512-rEvr90Bck4WZt9HHFC4DJMsjvu7x+r6bImz0/BrbWb7A2djJ8hnZMrWnHo9F8ssv0OMErasDhftrfROTyqSDrw==", "dev": true, + "license": "MIT", "dependencies": { "available-typed-arrays": "^1.0.7", - "call-bind": "^1.0.7", - "for-each": "^0.3.3", - "gopd": "^1.0.1", + "call-bind": "^1.0.8", + "call-bound": "^1.0.4", + "for-each": "^0.3.5", + "get-proto": "^1.0.1", + "gopd": "^1.2.0", "has-tostringtag": "^1.0.2" }, "engines": { @@ -10862,38 +11815,51 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/worker-timers": { - "version": "7.1.8", - "resolved": "https://registry.npmjs.org/worker-timers/-/worker-timers-7.1.8.tgz", - "integrity": "sha512-R54psRKYVLuzff7c1OTFcq/4Hue5Vlz4bFtNEIarpSiCYhpifHU3aIQI29S84o1j87ePCYqbmEJPqwBTf+3sfw==", + "node_modules/worker-factory": { + "version": "7.0.46", + "resolved": "https://registry.npmjs.org/worker-factory/-/worker-factory-7.0.46.tgz", + "integrity": "sha512-Sr1hq2FMgNa04UVhYQacsw+i58BtMimzDb4+CqYphZ97OfefRpURu0UZ+JxMr/H36VVJBfuVkxTK7MytsanC3w==", "license": "MIT", "dependencies": { - "@babel/runtime": "^7.24.5", - "tslib": "^2.6.2", - "worker-timers-broker": "^6.1.8", - "worker-timers-worker": "^7.0.71" + "@babel/runtime": "^7.28.4", + "fast-unique-numbers": "^9.0.24", + "tslib": "^2.8.1" + } + }, + "node_modules/worker-timers": { + "version": "8.0.25", + "resolved": "https://registry.npmjs.org/worker-timers/-/worker-timers-8.0.25.tgz", + "integrity": "sha512-X7Z5dmM6PlrEnaadtFQOyXHGD/IysPA3HZzaC2koqsU1VI+RvyGmjiiLiUBQixK8PH5R7ilkOzZupWskNRaXmA==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.28.4", + "tslib": "^2.8.1", + "worker-timers-broker": "^8.0.11", + "worker-timers-worker": "^9.0.11" } }, "node_modules/worker-timers-broker": { - "version": "6.1.8", - "resolved": "https://registry.npmjs.org/worker-timers-broker/-/worker-timers-broker-6.1.8.tgz", - "integrity": "sha512-FUCJu9jlK3A8WqLTKXM9E6kAmI/dR1vAJ8dHYLMisLNB/n3GuaFIjJ7pn16ZcD1zCOf7P6H62lWIEBi+yz/zQQ==", + "version": "8.0.11", + "resolved": "https://registry.npmjs.org/worker-timers-broker/-/worker-timers-broker-8.0.11.tgz", + "integrity": "sha512-uwhxKru8BI9m2tsogxr2fB6POZ8LB2xH+Pu3R0mvQnAZLPgLD6K3IX4LNKPTEgTJ/j5VsuQPB+gLI1NBNKkPlg==", "license": "MIT", "dependencies": { - "@babel/runtime": "^7.24.5", - "fast-unique-numbers": "^8.0.13", - "tslib": "^2.6.2", - "worker-timers-worker": "^7.0.71" + "@babel/runtime": "^7.28.4", + "broker-factory": "^3.1.10", + "fast-unique-numbers": "^9.0.24", + "tslib": "^2.8.1", + "worker-timers-worker": "^9.0.11" } }, "node_modules/worker-timers-worker": { - "version": "7.0.71", - "resolved": "https://registry.npmjs.org/worker-timers-worker/-/worker-timers-worker-7.0.71.tgz", - "integrity": "sha512-ks/5YKwZsto1c2vmljroppOKCivB/ma97g9y77MAAz2TBBjPPgpoOiS1qYQKIgvGTr2QYPT3XhJWIB6Rj2MVPQ==", + "version": "9.0.11", + "resolved": "https://registry.npmjs.org/worker-timers-worker/-/worker-timers-worker-9.0.11.tgz", + "integrity": "sha512-pArb5xtgHWImYpXhjg1OFv7JFG0ubmccb73TFoXHXjG830fFj+16N57q9YeBnZX52dn+itRrMoJZ9HaZBVzDaA==", "license": "MIT", "dependencies": { - "@babel/runtime": "^7.24.5", - "tslib": "^2.6.2" + "@babel/runtime": "^7.28.4", + "tslib": "^2.8.1", + "worker-factory": "^7.0.46" } }, "node_modules/wrap-ansi": { @@ -10933,9 +11899,9 @@ } }, "node_modules/ws": { - "version": "8.18.2", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.18.2.tgz", - "integrity": "sha512-DMricUmwGZUVr++AEAe2uiVM7UoO9MAVZMDu05UQOaUII0lp+zOzLLU4Xqh/JvTqklB1T4uELaaPBKyjE1r4fQ==", + "version": "8.18.3", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.18.3.tgz", + "integrity": "sha512-PEIGCY5tSlUt50cqyMXfCzX+oOPqN0vuGqWzbcJ2xvnkzkq46oOpz7dQaTDBdfICb4N14+GARUDw2XV2N4tvzg==", "license": "MIT", "engines": { "node": ">=10.0.0" @@ -11058,16 +12024,6 @@ "integrity": "sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA==", "dev": true }, - "@ampproject/remapping": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.3.0.tgz", - "integrity": "sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==", - "dev": true, - "requires": { - "@jridgewell/gen-mapping": "^0.3.5", - "@jridgewell/trace-mapping": "^0.3.24" - } - }, "@aws-crypto/crc32": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/@aws-crypto/crc32/-/crc32-5.2.0.tgz", @@ -11747,9 +12703,9 @@ } }, "@babel/runtime": { - "version": "7.27.6", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.27.6.tgz", - "integrity": "sha512-vbavdySgbTTrmFE+EsiqUTzlOr5bzlnJtUv9PynGCAKvfQqjIXbvFdumPM/GxMDfyuGMJaJAU6TO4zc1Jf1i8Q==" + "version": "7.28.4", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.28.4.tgz", + "integrity": "sha512-Q/N6JNWvIvPnLDvjlE1OUBLPQHH6l3CltCEsHIujp45zQUSSh8K+gHnaEX45yAT1nyngnINhvWtzN+Nb9D8RAQ==" }, "@chainsafe/as-chacha20poly1305": { "version": "0.1.0", @@ -11757,9 +12713,9 @@ "integrity": "sha512-BpNcL8/lji/GM3+vZ/bgRWqJ1q5kwvTFmGPk7pxm/QQZDbaMI98waOHjEymTjq2JmdD/INdNBFOVSyJofXg7ew==" }, "@chainsafe/as-sha256": { - "version": "0.4.2", - "resolved": "https://registry.npmjs.org/@chainsafe/as-sha256/-/as-sha256-0.4.2.tgz", - "integrity": "sha512-HJ8GZBRjLeWtRsAXf3EbNsNzmTGpzTFjfpSf4yHkLYC+E52DhT6hwz+7qpj6I/EmFzSUm5tYYvT9K8GZokLQCQ==" + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@chainsafe/as-sha256/-/as-sha256-1.2.0.tgz", + "integrity": "sha512-H2BNHQ5C3RS+H0ZvOdovK6GjFAyq5T6LClad8ivwj9Oaiy28uvdsGVS7gNJKuZmg0FGHAI+n7F0Qju6U0QkKDA==" }, "@chainsafe/is-ip": { "version": "2.1.0", @@ -11767,20 +12723,20 @@ "integrity": "sha512-KIjt+6IfysQ4GCv66xihEitBjvhU/bixbbbFxdJ1sqCp4uJ0wuZiYBPhksZoy4lfaF0k9cwNzY5upEW/VWdw3w==" }, "@chainsafe/libp2p-noise": { - "version": "16.0.0", - "resolved": "https://registry.npmjs.org/@chainsafe/libp2p-noise/-/libp2p-noise-16.0.0.tgz", - "integrity": "sha512-8rqr8V1RD2/lVbfL0Bb//N8iPOFof11cUe8v8z8xJT7fUhCAbtCCSM4jbwI4HCnw0MvHLmcpmAfDCFRwcWzoeA==", + "version": "16.1.3", + "resolved": "https://registry.npmjs.org/@chainsafe/libp2p-noise/-/libp2p-noise-16.1.3.tgz", + "integrity": "sha512-YLonKdIUFk/0keKRfzlmdrsObi8r0EaZC14Vjh3qdLy4+W7NaQAs1sSMt8aDP07oE78pa51NyejmQLKOnt7tOw==", "requires": { "@chainsafe/as-chacha20poly1305": "^0.1.0", - "@chainsafe/as-sha256": "^0.4.1", + "@chainsafe/as-sha256": "^1.0.0", "@libp2p/crypto": "^5.0.0", - "@libp2p/interface": "^2.0.0", + "@libp2p/interface": "^2.9.0", "@libp2p/peer-id": "^5.0.0", - "@noble/ciphers": "^0.6.0", + "@noble/ciphers": "^1.1.3", "@noble/curves": "^1.1.0", "@noble/hashes": "^1.3.1", - "it-length-prefixed": "^9.0.1", - "it-length-prefixed-stream": "^1.0.0", + "it-length-prefixed": "^10.0.1", + "it-length-prefixed-stream": "^2.0.1", "it-pair": "^2.0.6", "it-pipe": "^3.0.1", "it-stream-types": "^2.0.1", @@ -12040,9 +12996,9 @@ "optional": true }, "@eslint-community/eslint-utils": { - "version": "4.7.0", - "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.7.0.tgz", - "integrity": "sha512-dyybb3AcajC7uha6CvhdVRJqaKyn7w2YKqKyAN37NKYgZT36w+iRb0Dymmc5qEJ549c/S31cMMSFd75bteCpCw==", + "version": "4.9.0", + "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.9.0.tgz", + "integrity": "sha512-ayVFHdtZ+hsq1t2Dy24wCmGXGe4q9Gu3smhLYALJrr473ZH27MsnSL+LKUlimp4BWJqMDMLmPpx/Q9R3OAlL4g==", "dev": true, "requires": { "eslint-visitor-keys": "^3.4.3" @@ -12062,26 +13018,16 @@ "requires": {} }, "@eslint/config-array": { - "version": "0.21.0", - "resolved": "https://registry.npmjs.org/@eslint/config-array/-/config-array-0.21.0.tgz", - "integrity": "sha512-ENIdc4iLu0d93HeYirvKmrzshzofPw6VkZRKQGe9Nv46ZnWUzcF1xV01dcvEg/1wXUR61OmmlSfyeyO7EvjLxQ==", + "version": "0.21.1", + "resolved": "https://registry.npmjs.org/@eslint/config-array/-/config-array-0.21.1.tgz", + "integrity": "sha512-aw1gNayWpdI/jSYVgzN5pL0cfzU02GT3NBpeT/DXbx1/1x7ZKxFPd9bwrzygx/qiwIQiJ1sw/zD8qY/kRvlGHA==", "dev": true, "requires": { - "@eslint/object-schema": "^2.1.6", + "@eslint/object-schema": "^2.1.7", "debug": "^4.3.1", "minimatch": "^3.1.2" }, "dependencies": { - "brace-expansion": { - "version": "1.1.12", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", - "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==", - "dev": true, - "requires": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, "minimatch": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", @@ -12094,15 +13040,18 @@ } }, "@eslint/config-helpers": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/@eslint/config-helpers/-/config-helpers-0.3.0.tgz", - "integrity": "sha512-ViuymvFmcJi04qdZeDc2whTHryouGcDlaxPqarTD0ZE10ISpxGUVZGZDx4w01upyIynL3iu6IXH2bS1NhclQMw==", - "dev": true + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/@eslint/config-helpers/-/config-helpers-0.4.1.tgz", + "integrity": "sha512-csZAzkNhsgwb0I/UAV6/RGFTbiakPCf0ZrGmrIxQpYvGZ00PhTkSnyKNolphgIvmnJeGw6rcGVEXfTzUnFuEvw==", + "dev": true, + "requires": { + "@eslint/core": "^0.16.0" + } }, "@eslint/core": { - "version": "0.15.1", - "resolved": "https://registry.npmjs.org/@eslint/core/-/core-0.15.1.tgz", - "integrity": "sha512-bkOp+iumZCCbt1K1CmWf0R9pM5yKpDv+ZXtvSyQpudrI9kuFLp+bM2WOPXImuD/ceQuaa8f5pj93Y7zyECIGNA==", + "version": "0.16.0", + "resolved": "https://registry.npmjs.org/@eslint/core/-/core-0.16.0.tgz", + "integrity": "sha512-nmC8/totwobIiFcGkDza3GIKfAw1+hLiYVrh3I1nIomQ8PEr5cxg34jnkmGawul/ep52wGRAcyeDCNtWKSOj4Q==", "dev": true, "requires": { "@types/json-schema": "^7.0.15" @@ -12125,16 +13074,6 @@ "strip-json-comments": "^3.1.1" }, "dependencies": { - "brace-expansion": { - "version": "1.1.12", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", - "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==", - "dev": true, - "requires": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, "minimatch": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", @@ -12147,24 +13086,24 @@ } }, "@eslint/js": { - "version": "9.31.0", - "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.31.0.tgz", - "integrity": "sha512-LOm5OVt7D4qiKCqoiPbA7LWmI+tbw1VbTUowBcUMgQSuM6poJufkFkYDcQpo5KfgD39TnNySV26QjOh7VFpSyw==", + "version": "9.38.0", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.38.0.tgz", + "integrity": "sha512-UZ1VpFvXf9J06YG9xQBdnzU+kthors6KjhMAl6f4gH4usHyh31rUf2DLGInT8RFYIReYXNSydgPY0V2LuWgl7A==", "dev": true }, "@eslint/object-schema": { - "version": "2.1.6", - "resolved": "https://registry.npmjs.org/@eslint/object-schema/-/object-schema-2.1.6.tgz", - "integrity": "sha512-RBMg5FRL0I0gs51M/guSAj5/e14VQ4tpZnQNWwuDT66P14I43ItmPfIZRhO9fUVIPOAQXU47atlywZ/czoqFPA==", + "version": "2.1.7", + "resolved": "https://registry.npmjs.org/@eslint/object-schema/-/object-schema-2.1.7.tgz", + "integrity": "sha512-VtAOaymWVfZcmZbp6E2mympDIHvyjXs/12LqWYjVw6qjrfF+VK+fyG33kChz3nnK+SU5/NeHOqrTEHS8sXO3OA==", "dev": true }, "@eslint/plugin-kit": { - "version": "0.3.4", - "resolved": "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.3.4.tgz", - "integrity": "sha512-Ul5l+lHEcw3L5+k8POx6r74mxEYKG5kOb6Xpy2gCRW6zweT6TEhAf8vhxGgjhqrd/VO/Dirhsb+1hNpD1ue9hw==", + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.4.0.tgz", + "integrity": "sha512-sB5uyeq+dwCWyPi31B2gQlVlo+j5brPlWx4yZBrEaRo/nhdDE8Xke1gsGgtiBdaBTxuTkceLVuVt/pclrasb0A==", "dev": true, "requires": { - "@eslint/core": "^0.15.1", + "@eslint/core": "^0.16.0", "levn": "^0.4.1" } }, @@ -12191,9 +13130,9 @@ } }, "@firebase/ai": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/@firebase/ai/-/ai-2.2.1.tgz", - "integrity": "sha512-0VWlkGB18oDhwMqsgxpt/usMsyjnH3a7hTvQPcAbk7VhFg0QZMDX60mQKfLTFKrB5VwmlaIdVsSZznsTY2S0wA==", + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/@firebase/ai/-/ai-2.4.0.tgz", + "integrity": "sha512-YilG6AJ/nYpCKtxZyvEzBRAQv5bU+2tBOKX4Ps0rNNSdxN39aT37kGhjATbk1kq1z5Lq7mkWglw/ajAF3lOWUg==", "requires": { "@firebase/app-check-interop-types": "0.3.3", "@firebase/component": "0.7.0", @@ -12203,9 +13142,9 @@ } }, "@firebase/analytics": { - "version": "0.10.18", - "resolved": "https://registry.npmjs.org/@firebase/analytics/-/analytics-0.10.18.tgz", - "integrity": "sha512-iN7IgLvM06iFk8BeFoWqvVpRFW3Z70f+Qe2PfCJ7vPIgLPjHXDE774DhCT5Y2/ZU/ZbXPDPD60x/XPWEoZLNdg==", + "version": "0.10.19", + "resolved": "https://registry.npmjs.org/@firebase/analytics/-/analytics-0.10.19.tgz", + "integrity": "sha512-3wU676fh60gaiVYQEEXsbGS4HbF2XsiBphyvvqDbtC1U4/dO4coshbYktcCHq+HFaGIK07iHOh4pME0hEq1fcg==", "requires": { "@firebase/component": "0.7.0", "@firebase/installations": "0.6.19", @@ -12215,11 +13154,11 @@ } }, "@firebase/analytics-compat": { - "version": "0.2.24", - "resolved": "https://registry.npmjs.org/@firebase/analytics-compat/-/analytics-compat-0.2.24.tgz", - "integrity": "sha512-jE+kJnPG86XSqGQGhXXYt1tpTbCTED8OQJ/PQ90SEw14CuxRxx/H+lFbWA1rlFtFSsTCptAJtgyRBwr/f00vsw==", + "version": "0.2.25", + "resolved": "https://registry.npmjs.org/@firebase/analytics-compat/-/analytics-compat-0.2.25.tgz", + "integrity": "sha512-fdzoaG0BEKbqksRDhmf4JoyZf16Wosrl0Y7tbZtJyVDOOwziE0vrFjmZuTdviL0yhak+Nco6rMsUUbkbD+qb6Q==", "requires": { - "@firebase/analytics": "0.10.18", + "@firebase/analytics": "0.10.19", "@firebase/analytics-types": "0.8.3", "@firebase/component": "0.7.0", "@firebase/util": "1.13.0", @@ -12232,9 +13171,9 @@ "integrity": "sha512-VrIp/d8iq2g501qO46uGz3hjbDb8xzYMrbu8Tp0ovzIzrvJZ2fvmj649gTjge/b7cCCcjT0H37g1gVtlNhnkbg==" }, "@firebase/app": { - "version": "0.14.2", - "resolved": "https://registry.npmjs.org/@firebase/app/-/app-0.14.2.tgz", - "integrity": "sha512-Ecx2ig/JLC9ayIQwZHqm41Tzlf4c1WUuFhFUZB1y+JIJqDRE579x7Uil7tKT8MwDpOPwrK5ZtpxdSsrfy/LF8Q==", + "version": "0.14.4", + "resolved": "https://registry.npmjs.org/@firebase/app/-/app-0.14.4.tgz", + "integrity": "sha512-pUxEGmR+uu21OG/icAovjlu1fcYJzyVhhT0rsCrn+zi+nHtrS43Bp9KPn9KGa4NMspCUE++nkyiqziuIvJdwzw==", "requires": { "@firebase/component": "0.7.0", "@firebase/logger": "0.5.0", @@ -12285,11 +13224,11 @@ "integrity": "sha512-hyl5rKSj0QmwPdsAxrI5x1otDlByQ7bvNvVt8G/XPO2CSwE++rmSVf3VEhaeOR4J8ZFaF0Z0NDSmLejPweZ3ng==" }, "@firebase/app-compat": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/@firebase/app-compat/-/app-compat-0.5.2.tgz", - "integrity": "sha512-cn+U27GDaBS/irsbvrfnPZdcCzeZPRGKieSlyb7vV6LSOL6mdECnB86PgYjYGxSNg8+U48L/NeevTV1odU+mOQ==", + "version": "0.5.4", + "resolved": "https://registry.npmjs.org/@firebase/app-compat/-/app-compat-0.5.4.tgz", + "integrity": "sha512-T7ifGmb+awJEcp542Ek4HtNfBxcBrnuk1ggUdqyFEdsXHdq7+wVlhvE6YukTL7NS8hIkEfL7TMAPx/uCNqt30g==", "requires": { - "@firebase/app": "0.14.2", + "@firebase/app": "0.14.4", "@firebase/component": "0.7.0", "@firebase/logger": "0.5.0", "@firebase/util": "1.13.0", @@ -12393,26 +13332,26 @@ } }, "@firebase/firestore": { - "version": "4.9.1", - "resolved": "https://registry.npmjs.org/@firebase/firestore/-/firestore-4.9.1.tgz", - "integrity": "sha512-PYVUTkhC9y8pydrqC3O1Oc4AMfkGSWdmuH9xgPJjiEbpUIUPQ4J8wJhyuash+o2u+axmyNRFP8ULNUKb+WzBzQ==", + "version": "4.9.2", + "resolved": "https://registry.npmjs.org/@firebase/firestore/-/firestore-4.9.2.tgz", + "integrity": "sha512-iuA5+nVr/IV/Thm0Luoqf2mERUvK9g791FZpUJV1ZGXO6RL2/i/WFJUj5ZTVXy5pRjpWYO+ZzPcReNrlilmztA==", "requires": { "@firebase/component": "0.7.0", "@firebase/logger": "0.5.0", "@firebase/util": "1.13.0", - "@firebase/webchannel-wrapper": "1.0.4", + "@firebase/webchannel-wrapper": "1.0.5", "@grpc/grpc-js": "~1.9.0", "@grpc/proto-loader": "^0.7.8", "tslib": "^2.1.0" } }, "@firebase/firestore-compat": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/@firebase/firestore-compat/-/firestore-compat-0.4.1.tgz", - "integrity": "sha512-BjalPTDh/K0vmR/M/DE148dpIqbcfvtFVTietbUDWDWYIl9YH0TTVp/EwXRbZwswPxyjx4GdHW61GB2AYVz1SQ==", + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/@firebase/firestore-compat/-/firestore-compat-0.4.2.tgz", + "integrity": "sha512-cy7ov6SpFBx+PHwFdOOjbI7kH00uNKmIFurAn560WiPCZXy9EMnil1SOG7VF4hHZKdenC+AHtL4r3fNpirpm0w==", "requires": { "@firebase/component": "0.7.0", - "@firebase/firestore": "4.9.1", + "@firebase/firestore": "4.9.2", "@firebase/firestore-types": "3.0.3", "@firebase/util": "1.13.0", "tslib": "^2.1.0" @@ -12566,9 +13505,9 @@ "integrity": "sha512-IgkyTz6QZVPAq8GSkLYJvwSLr3LS9+V6vNPQr0x4YozZJiLF5jYixj0amDtATf1X0EtYHqoPO48a9ija8GocxQ==" }, "@firebase/remote-config": { - "version": "0.6.6", - "resolved": "https://registry.npmjs.org/@firebase/remote-config/-/remote-config-0.6.6.tgz", - "integrity": "sha512-Yelp5xd8hM4NO1G1SuWrIk4h5K42mNwC98eWZ9YLVu6Z0S6hFk1mxotAdCRmH2luH8FASlYgLLq6OQLZ4nbnCA==", + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/@firebase/remote-config/-/remote-config-0.7.0.tgz", + "integrity": "sha512-dX95X6WlW7QlgNd7aaGdjAIZUiQkgWgNS+aKNu4Wv92H1T8Ue/NDUjZHd9xb8fHxLXIHNZeco9/qbZzr500MjQ==", "requires": { "@firebase/component": "0.7.0", "@firebase/installations": "0.6.19", @@ -12578,22 +13517,22 @@ } }, "@firebase/remote-config-compat": { - "version": "0.2.19", - "resolved": "https://registry.npmjs.org/@firebase/remote-config-compat/-/remote-config-compat-0.2.19.tgz", - "integrity": "sha512-y7PZAb0l5+5oIgLJr88TNSelxuASGlXyAKj+3pUc4fDuRIdPNBoONMHaIUa9rlffBR5dErmaD2wUBJ7Z1a513Q==", + "version": "0.2.20", + "resolved": "https://registry.npmjs.org/@firebase/remote-config-compat/-/remote-config-compat-0.2.20.tgz", + "integrity": "sha512-P/ULS9vU35EL9maG7xp66uljkZgcPMQOxLj3Zx2F289baTKSInE6+YIkgHEi1TwHoddC/AFePXPpshPlEFkbgg==", "requires": { "@firebase/component": "0.7.0", "@firebase/logger": "0.5.0", - "@firebase/remote-config": "0.6.6", - "@firebase/remote-config-types": "0.4.0", + "@firebase/remote-config": "0.7.0", + "@firebase/remote-config-types": "0.5.0", "@firebase/util": "1.13.0", "tslib": "^2.1.0" } }, "@firebase/remote-config-types": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/@firebase/remote-config-types/-/remote-config-types-0.4.0.tgz", - "integrity": "sha512-7p3mRE/ldCNYt8fmWMQ/MSGRmXYlJ15Rvs9Rk17t8p0WwZDbeK7eRmoI1tvCPaDzn9Oqh+yD6Lw+sGLsLg4kKg==" + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/@firebase/remote-config-types/-/remote-config-types-0.5.0.tgz", + "integrity": "sha512-vI3bqLoF14L/GchtgayMiFpZJF+Ao3uR8WCde0XpYNkSokDpAKca2DxvcfeZv7lZUqkUwQPL2wD83d3vQ4vvrg==" }, "@firebase/storage": { "version": "0.14.0", @@ -12632,9 +13571,9 @@ } }, "@firebase/webchannel-wrapper": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/@firebase/webchannel-wrapper/-/webchannel-wrapper-1.0.4.tgz", - "integrity": "sha512-6m8+P+dE/RPl4OPzjTxcTbQ0rGeRyeTvAi9KwIffBVCiAMKrfXfLZaqD1F+m8t4B5/Q5aHsMozOgirkH1F5oMQ==" + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/@firebase/webchannel-wrapper/-/webchannel-wrapper-1.0.5.tgz", + "integrity": "sha512-+uGNN7rkfn41HLO0vekTFhTxk61eKa8mTpRGLO0QSqlQdKvIoGAvLp3ppdVIWbTGYJWM6Kp0iN+PjMIOcnVqTw==" }, "@grpc/grpc-js": { "version": "1.9.15", @@ -12781,6 +13720,16 @@ "@jridgewell/trace-mapping": "^0.3.24" } }, + "@jridgewell/remapping": { + "version": "2.3.5", + "resolved": "https://registry.npmjs.org/@jridgewell/remapping/-/remapping-2.3.5.tgz", + "integrity": "sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ==", + "dev": true, + "requires": { + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.24" + } + }, "@jridgewell/resolve-uri": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz", @@ -12825,44 +13774,83 @@ "integrity": "sha512-Vo+PSpZG2/fmgmiNzYK9qWRh8h/CHrwD0mo1h1DzL4yzHNSfWYujGTYsWGreD000gcgmZ7K4Ys6Tx9TxtsKdDw==" }, "@libp2p/bootstrap": { - "version": "11.0.39", - "resolved": "https://registry.npmjs.org/@libp2p/bootstrap/-/bootstrap-11.0.39.tgz", - "integrity": "sha512-OoReVQhJNPb9EzAWPd0O/GBMGVWmeylH/M6ohx5ONzHynmqwT7+f6TiDtDIGey8APdBURzBPgy6Z1gGU6lourQ==", + "version": "11.0.42", + "resolved": "https://registry.npmjs.org/@libp2p/bootstrap/-/bootstrap-11.0.42.tgz", + "integrity": "sha512-xe5LMZrXR2cnFcR69ax/cHqNCc8zwSvqDWOf82u/ifAsUae7M0eeoEVi15lfrPewWst4YPkTqYDkZSPWC65I3Q==", "requires": { - "@libp2p/interface": "^2.10.3", - "@libp2p/interface-internal": "^2.3.15", - "@libp2p/peer-id": "^5.1.6", + "@libp2p/interface": "^2.10.4", + "@libp2p/interface-internal": "^2.3.17", + "@libp2p/peer-id": "^5.1.7", "@multiformats/mafmt": "^12.1.6", - "@multiformats/multiaddr": "^12.4.0", + "@multiformats/multiaddr": "^12.4.4", "main-event": "^1.0.1" } }, "@libp2p/crypto": { - "version": "5.1.8", - "resolved": "https://registry.npmjs.org/@libp2p/crypto/-/crypto-5.1.8.tgz", - "integrity": "sha512-zkfWd2x12E0NbSRU52Wb0A5I9v5a1uLgCauR8uuTqnC21OVznXUGkMg4A2Xoj90M98lReDHo+Khc/hlQFbJ5Vw==", + "version": "5.1.13", + "resolved": "https://registry.npmjs.org/@libp2p/crypto/-/crypto-5.1.13.tgz", + "integrity": "sha512-8NN9cQP3jDn+p9+QE9ByiEoZ2lemDFf/unTgiKmS3JF93ph240EUVdbCyyEgOMfykzb0okTM4gzvwfx9osJebQ==", "requires": { - "@libp2p/interface": "^2.11.0", - "@noble/curves": "^1.9.1", - "@noble/hashes": "^1.8.0", - "multiformats": "^13.3.6", - "protons-runtime": "^5.5.0", + "@libp2p/interface": "^3.1.0", + "@noble/curves": "^2.0.1", + "@noble/hashes": "^2.0.1", + "multiformats": "^13.4.0", + "protons-runtime": "^5.6.0", "uint8arraylist": "^2.4.8", "uint8arrays": "^5.1.0" + }, + "dependencies": { + "@libp2p/interface": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@libp2p/interface/-/interface-3.1.0.tgz", + "integrity": "sha512-RE7/XyvC47fQBe1cHxhMvepYKa5bFCUyFrrpj8PuM0E7JtzxU7F+Du5j4VXbg2yLDcToe0+j8mB7jvwE2AThYw==", + "requires": { + "@multiformats/dns": "^1.0.6", + "@multiformats/multiaddr": "^13.0.1", + "main-event": "^1.0.1", + "multiformats": "^13.4.0", + "progress-events": "^1.0.1", + "uint8arraylist": "^2.4.8" + } + }, + "@multiformats/multiaddr": { + "version": "13.0.1", + "resolved": "https://registry.npmjs.org/@multiformats/multiaddr/-/multiaddr-13.0.1.tgz", + "integrity": "sha512-XToN915cnfr6Lr9EdGWakGJbPT0ghpg/850HvdC+zFX8XvpLZElwa8synCiwa8TuvKNnny6m8j8NVBNCxhIO3g==", + "requires": { + "@chainsafe/is-ip": "^2.0.1", + "multiformats": "^13.0.0", + "uint8-varint": "^2.0.1", + "uint8arrays": "^5.0.0" + } + }, + "@noble/curves": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@noble/curves/-/curves-2.0.1.tgz", + "integrity": "sha512-vs1Az2OOTBiP4q0pwjW5aF0xp9n4MxVrmkFBxc6EKZc6ddYx5gaZiAsZoq0uRRXWbi3AT/sBqn05eRPtn1JCPw==", + "requires": { + "@noble/hashes": "2.0.1" + } + }, + "@noble/hashes": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-2.0.1.tgz", + "integrity": "sha512-XlOlEbQcE9fmuXxrVTXCTlG2nlRXa9Rj3rr5Ue/+tX+nmkgbX720YHh0VR3hBF9xDvwnb8D2shVGOwNx+ulArw==" + } } }, "@libp2p/identify": { - "version": "3.0.33", - "resolved": "https://registry.npmjs.org/@libp2p/identify/-/identify-3.0.33.tgz", - "integrity": "sha512-cwMwXcQC4h1msBayTBS49yPwnoJUjXcxMm2orxAb96gVbzGW7h+OIFikZR23yOcDEcOPO8wHTurL1SXrr3O/SQ==", + "version": "3.0.36", + "resolved": "https://registry.npmjs.org/@libp2p/identify/-/identify-3.0.36.tgz", + "integrity": "sha512-swpgKzZ8SihHeguIEf3LxYlEcD7C9cSB7DE1XGTuCxNXkXksv2ieQTSiJ2xURMRw0nwe0wEGS5vzmshJh3kzrA==", "requires": { - "@libp2p/crypto": "^5.1.5", - "@libp2p/interface": "^2.10.3", - "@libp2p/interface-internal": "^2.3.15", - "@libp2p/peer-id": "^5.1.6", - "@libp2p/peer-record": "^8.0.31", - "@libp2p/utils": "^6.6.6", - "@multiformats/multiaddr": "^12.4.0", + "@libp2p/crypto": "^5.1.6", + "@libp2p/interface": "^2.10.4", + "@libp2p/interface-internal": "^2.3.17", + "@libp2p/peer-id": "^5.1.7", + "@libp2p/peer-record": "^8.0.33", + "@libp2p/utils": "^6.7.0", + "@multiformats/multiaddr": "^12.4.4", "@multiformats/multiaddr-matcher": "^1.7.2", "it-drain": "^3.0.9", "it-parallel": "^3.0.11", @@ -12912,12 +13900,12 @@ } }, "@libp2p/mplex": { - "version": "11.0.39", - "resolved": "https://registry.npmjs.org/@libp2p/mplex/-/mplex-11.0.39.tgz", - "integrity": "sha512-zda6ksYkOT3gdq7x1gBQip8xEB8p/uXZ5VBqsYNn9OVp+L2VBm3QbXK3Jw3P4VtZ79quK8IPhL26Yz//Edmrvw==", + "version": "11.0.42", + "resolved": "https://registry.npmjs.org/@libp2p/mplex/-/mplex-11.0.42.tgz", + "integrity": "sha512-06HXNQS02GOEx1796Nsk640tIHwnHtJvd4TWnslUEeVi7SxLA8LqCttT7qJ2P3Y1tmm3E2a74kxtHqaJDqypig==", "requires": { - "@libp2p/interface": "^2.10.3", - "@libp2p/utils": "^6.6.6", + "@libp2p/interface": "^2.10.4", + "@libp2p/utils": "^6.7.0", "it-pipe": "^3.0.1", "it-pushable": "^3.2.3", "it-stream-types": "^2.0.2", @@ -12940,54 +13928,6 @@ "uint8-varint": "^2.0.4", "uint8arraylist": "^2.4.8", "uint8arrays": "^5.1.0" - }, - "dependencies": { - "it-byte-stream": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/it-byte-stream/-/it-byte-stream-2.0.3.tgz", - "integrity": "sha512-h7FFcn4DWiWsJw1dCJhuPdiY8cGi1z8g4aLAfFspTaJbwQxvEMlEBFG/f8lIVGwM8YK26ClM4/9lxLVhF33b8g==", - "requires": { - "abort-error": "^1.0.1", - "it-queueless-pushable": "^2.0.0", - "it-stream-types": "^2.0.2", - "race-signal": "^1.1.3", - "uint8arraylist": "^2.4.8" - } - }, - "it-length-prefixed": { - "version": "10.0.1", - "resolved": "https://registry.npmjs.org/it-length-prefixed/-/it-length-prefixed-10.0.1.tgz", - "integrity": "sha512-BhyluvGps26u9a7eQIpOI1YN7mFgi8lFwmiPi07whewbBARKAG9LE09Odc8s1Wtbt2MB6rNUrl7j9vvfXTJwdQ==", - "requires": { - "it-reader": "^6.0.1", - "it-stream-types": "^2.0.1", - "uint8-varint": "^2.0.1", - "uint8arraylist": "^2.0.0", - "uint8arrays": "^5.0.1" - } - }, - "it-length-prefixed-stream": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/it-length-prefixed-stream/-/it-length-prefixed-stream-2.0.3.tgz", - "integrity": "sha512-Ns3jNFy2mcFnV59llCYitJnFHapg8wIcOsWkEaAwOkG9v4HBCk24nze/zGDQjiJdDTyFXTT5GOY3M/uaksot3w==", - "requires": { - "abort-error": "^1.0.1", - "it-byte-stream": "^2.0.0", - "it-stream-types": "^2.0.2", - "uint8-varint": "^2.0.4", - "uint8arraylist": "^2.4.8" - } - }, - "it-queueless-pushable": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/it-queueless-pushable/-/it-queueless-pushable-2.0.2.tgz", - "integrity": "sha512-2BqIt7XvDdgEgudLAdJkdseAwbVSBc0yAd8yPVHrll4eBuJPWIj9+8C3OIxzEKwhswLtd3bi+yLrzgw9gCyxMA==", - "requires": { - "abort-error": "^1.0.1", - "p-defer": "^4.0.1", - "race-signal": "^1.1.3" - } - } } }, "@libp2p/peer-collections": { @@ -13051,16 +13991,16 @@ } }, "@libp2p/ping": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/@libp2p/ping/-/ping-2.0.1.tgz", - "integrity": "sha512-KWbzFRDBJyZDd8FziW1N9UKHBcOm2RIVyX7sQh1tFeJ0XpWkNT3IcljOG1STikXTuCXIZmMgan/LrZ+SvJSIGw==", + "version": "2.0.35", + "resolved": "https://registry.npmjs.org/@libp2p/ping/-/ping-2.0.35.tgz", + "integrity": "sha512-f9z5drqjaRRTu1dK/3gshtth/xdE2YwZ6qhBUpqLX4x5s3k/X8ds4aRx2lzvznQMmOMaT8e1VEjhbfFlcJmUOA==", "requires": { - "@libp2p/crypto": "^5.0.1", - "@libp2p/interface": "^2.0.1", - "@libp2p/interface-internal": "^2.0.1", - "@multiformats/multiaddr": "^12.2.3", - "it-first": "^3.0.6", - "it-pipe": "^3.0.1", + "@libp2p/crypto": "^5.1.6", + "@libp2p/interface": "^2.10.4", + "@libp2p/interface-internal": "^2.3.17", + "@multiformats/multiaddr": "^12.4.4", + "it-byte-stream": "^2.0.2", + "main-event": "^1.0.1", "uint8arrays": "^5.1.0" } }, @@ -13095,13 +14035,13 @@ } }, "@libp2p/websockets": { - "version": "9.2.14", - "resolved": "https://registry.npmjs.org/@libp2p/websockets/-/websockets-9.2.14.tgz", - "integrity": "sha512-7KeylINdxW76fFkKuM7/axxz8J3kHlNgrlcQYfrwZSj7JDZG19IqJJZmVOcQBa6RgAnPjjz2F1TFFWQhvSIGJA==", + "version": "9.2.16", + "resolved": "https://registry.npmjs.org/@libp2p/websockets/-/websockets-9.2.16.tgz", + "integrity": "sha512-jD96ClKeaZvTs+YyGJxOOQSWVe9e9SHmacJ9uE9dqWZjCbPICdCJnOj2pLg258WxVrc+/MRFKSHE/v5f2ZJGCA==", "requires": { - "@libp2p/interface": "^2.10.3", - "@libp2p/utils": "^6.6.6", - "@multiformats/multiaddr": "^12.4.0", + "@libp2p/interface": "^2.10.4", + "@libp2p/utils": "^6.7.0", + "@multiformats/multiaddr": "^12.4.4", "@multiformats/multiaddr-matcher": "^1.7.2", "@multiformats/multiaddr-to-uri": "^11.0.0", "@types/ws": "^8.18.1", @@ -13115,15 +14055,14 @@ } }, "@multiformats/dns": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/@multiformats/dns/-/dns-1.0.6.tgz", - "integrity": "sha512-nt/5UqjMPtyvkG9BQYdJ4GfLK3nMqGpFZOzf4hAmIa0sJh2LlS9YKXZ4FgwBDsaHvzZqR/rUFIywIc7pkHNNuw==", + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/@multiformats/dns/-/dns-1.0.10.tgz", + "integrity": "sha512-6X200ceQLns0b/CU0S/So16tGjB5eIXHJ1xvJMPoWaKFHWSgfpW2EhkWJrqap4U3+c37zcowVR0ToPXeYEL7Vw==", "requires": { - "@types/dns-packet": "^5.6.5", "buffer": "^6.0.3", "dns-packet": "^5.6.1", "hashlru": "^2.3.0", - "p-queue": "^8.0.1", + "p-queue": "^9.0.0", "progress-events": "^1.0.0", "uint8arrays": "^5.0.2" } @@ -13161,22 +14100,22 @@ } }, "@multiformats/multiaddr-to-uri": { - "version": "11.0.0", - "resolved": "https://registry.npmjs.org/@multiformats/multiaddr-to-uri/-/multiaddr-to-uri-11.0.0.tgz", - "integrity": "sha512-9RNmlIGwZbBLsHekT50dbt4o4u8Iciw9kGjv+WHiGxQdsJ6xKKjU1+C0Vbas6RilMbaVOAOnEyfNcXbUmTkLxQ==", + "version": "11.0.2", + "resolved": "https://registry.npmjs.org/@multiformats/multiaddr-to-uri/-/multiaddr-to-uri-11.0.2.tgz", + "integrity": "sha512-SiLFD54zeOJ0qMgo9xv1Tl9O5YktDKAVDP4q4hL16mSq4O4sfFNagNADz8eAofxd6TfQUzGQ3TkRRG9IY2uHRg==", "requires": { "@multiformats/multiaddr": "^12.3.0" } }, "@noble/ciphers": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/@noble/ciphers/-/ciphers-0.6.0.tgz", - "integrity": "sha512-mIbq/R9QXk5/cTfESb1OKtyFnk7oc1Om/8onA1158K9/OZUQFDEVy55jVTato+xmp3XX6F6Qh0zz0Nc1AxAlRQ==" + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@noble/ciphers/-/ciphers-1.3.0.tgz", + "integrity": "sha512-2I0gnIVPtfnMw9ee9h1dJG7tp81+8Ob3OJb3Mv37rx5L40/b0i7djjCVvGOVqc9AEIQyvyu1i6ypKdFw8R8gQw==" }, "@noble/curves": { - "version": "1.9.2", - "resolved": "https://registry.npmjs.org/@noble/curves/-/curves-1.9.2.tgz", - "integrity": "sha512-HxngEd2XUcg9xi20JkwlLCtYwfoFw4JGkuZpT+WlsPD4gB/cxkvTD8fSsoAnphGZhFdZYKeQIPCuFlWPm1uE0g==", + "version": "1.9.7", + "resolved": "https://registry.npmjs.org/@noble/curves/-/curves-1.9.7.tgz", + "integrity": "sha512-gbKGcRUYIjA3/zCCNaWDciTMFI0dCkvou3TL8Zmy5Nc7sJ47a0jtOeZoTaMxkuqRo9cRhjOdZJXegxYE5FN/xw==", "requires": { "@noble/hashes": "1.8.0" } @@ -13280,6 +14219,182 @@ "resolved": "https://registry.npmjs.org/@protobufjs/utf8/-/utf8-1.1.0.tgz", "integrity": "sha512-Vvn3zZrhQZkkBE8LSuW3em98c0FwgO4nxzv6OdSxPKJIEKY2bGbHn+mhGIPerzI4twdxaP8/0+06HBpwf345Lw==" }, + "@rollup/rollup-android-arm-eabi": { + "version": "4.52.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.52.5.tgz", + "integrity": "sha512-8c1vW4ocv3UOMp9K+gToY5zL2XiiVw3k7f1ksf4yO1FlDFQ1C2u72iACFnSOceJFsWskc2WZNqeRhFRPzv+wtQ==", + "dev": true, + "optional": true, + "peer": true + }, + "@rollup/rollup-android-arm64": { + "version": "4.52.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.52.5.tgz", + "integrity": "sha512-mQGfsIEFcu21mvqkEKKu2dYmtuSZOBMmAl5CFlPGLY94Vlcm+zWApK7F/eocsNzp8tKmbeBP8yXyAbx0XHsFNA==", + "dev": true, + "optional": true, + "peer": true + }, + "@rollup/rollup-darwin-arm64": { + "version": "4.52.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.52.5.tgz", + "integrity": "sha512-takF3CR71mCAGA+v794QUZ0b6ZSrgJkArC+gUiG6LB6TQty9T0Mqh3m2ImRBOxS2IeYBo4lKWIieSvnEk2OQWA==", + "dev": true, + "optional": true, + "peer": true + }, + "@rollup/rollup-darwin-x64": { + "version": "4.52.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.52.5.tgz", + "integrity": "sha512-W901Pla8Ya95WpxDn//VF9K9u2JbocwV/v75TE0YIHNTbhqUTv9w4VuQ9MaWlNOkkEfFwkdNhXgcLqPSmHy0fA==", + "dev": true, + "optional": true, + "peer": true + }, + "@rollup/rollup-freebsd-arm64": { + "version": "4.52.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.52.5.tgz", + "integrity": "sha512-QofO7i7JycsYOWxe0GFqhLmF6l1TqBswJMvICnRUjqCx8b47MTo46W8AoeQwiokAx3zVryVnxtBMcGcnX12LvA==", + "dev": true, + "optional": true, + "peer": true + }, + "@rollup/rollup-freebsd-x64": { + "version": "4.52.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.52.5.tgz", + "integrity": "sha512-jr21b/99ew8ujZubPo9skbrItHEIE50WdV86cdSoRkKtmWa+DDr6fu2c/xyRT0F/WazZpam6kk7IHBerSL7LDQ==", + "dev": true, + "optional": true, + "peer": true + }, + "@rollup/rollup-linux-arm-gnueabihf": { + "version": "4.52.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.52.5.tgz", + "integrity": "sha512-PsNAbcyv9CcecAUagQefwX8fQn9LQ4nZkpDboBOttmyffnInRy8R8dSg6hxxl2Re5QhHBf6FYIDhIj5v982ATQ==", + "dev": true, + "optional": true, + "peer": true + }, + "@rollup/rollup-linux-arm-musleabihf": { + "version": "4.52.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.52.5.tgz", + "integrity": "sha512-Fw4tysRutyQc/wwkmcyoqFtJhh0u31K+Q6jYjeicsGJJ7bbEq8LwPWV/w0cnzOqR2m694/Af6hpFayLJZkG2VQ==", + "dev": true, + "optional": true, + "peer": true + }, + "@rollup/rollup-linux-arm64-gnu": { + "version": "4.52.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.52.5.tgz", + "integrity": "sha512-a+3wVnAYdQClOTlyapKmyI6BLPAFYs0JM8HRpgYZQO02rMR09ZcV9LbQB+NL6sljzG38869YqThrRnfPMCDtZg==", + "dev": true, + "optional": true, + "peer": true + }, + "@rollup/rollup-linux-arm64-musl": { + "version": "4.52.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.52.5.tgz", + "integrity": "sha512-AvttBOMwO9Pcuuf7m9PkC1PUIKsfaAJ4AYhy944qeTJgQOqJYJ9oVl2nYgY7Rk0mkbsuOpCAYSs6wLYB2Xiw0Q==", + "dev": true, + "optional": true, + "peer": true + }, + "@rollup/rollup-linux-loong64-gnu": { + "version": "4.52.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-gnu/-/rollup-linux-loong64-gnu-4.52.5.tgz", + "integrity": "sha512-DkDk8pmXQV2wVrF6oq5tONK6UHLz/XcEVow4JTTerdeV1uqPeHxwcg7aFsfnSm9L+OO8WJsWotKM2JJPMWrQtA==", + "dev": true, + "optional": true, + "peer": true + }, + "@rollup/rollup-linux-ppc64-gnu": { + "version": "4.52.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-gnu/-/rollup-linux-ppc64-gnu-4.52.5.tgz", + "integrity": "sha512-W/b9ZN/U9+hPQVvlGwjzi+Wy4xdoH2I8EjaCkMvzpI7wJUs8sWJ03Rq96jRnHkSrcHTpQe8h5Tg3ZzUPGauvAw==", + "dev": true, + "optional": true, + "peer": true + }, + "@rollup/rollup-linux-riscv64-gnu": { + "version": "4.52.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.52.5.tgz", + "integrity": "sha512-sjQLr9BW7R/ZiXnQiWPkErNfLMkkWIoCz7YMn27HldKsADEKa5WYdobaa1hmN6slu9oWQbB6/jFpJ+P2IkVrmw==", + "dev": true, + "optional": true, + "peer": true + }, + "@rollup/rollup-linux-riscv64-musl": { + "version": "4.52.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.52.5.tgz", + "integrity": "sha512-hq3jU/kGyjXWTvAh2awn8oHroCbrPm8JqM7RUpKjalIRWWXE01CQOf/tUNWNHjmbMHg/hmNCwc/Pz3k1T/j/Lg==", + "dev": true, + "optional": true, + "peer": true + }, + "@rollup/rollup-linux-s390x-gnu": { + "version": "4.52.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.52.5.tgz", + "integrity": "sha512-gn8kHOrku8D4NGHMK1Y7NA7INQTRdVOntt1OCYypZPRt6skGbddska44K8iocdpxHTMMNui5oH4elPH4QOLrFQ==", + "dev": true, + "optional": true, + "peer": true + }, + "@rollup/rollup-linux-x64-gnu": { + "version": "4.52.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.52.5.tgz", + "integrity": "sha512-hXGLYpdhiNElzN770+H2nlx+jRog8TyynpTVzdlc6bndktjKWyZyiCsuDAlpd+j+W+WNqfcyAWz9HxxIGfZm1Q==", + "dev": true, + "optional": true, + "peer": true + }, + "@rollup/rollup-linux-x64-musl": { + "version": "4.52.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.52.5.tgz", + "integrity": "sha512-arCGIcuNKjBoKAXD+y7XomR9gY6Mw7HnFBv5Rw7wQRvwYLR7gBAgV7Mb2QTyjXfTveBNFAtPt46/36vV9STLNg==", + "dev": true, + "optional": true, + "peer": true + }, + "@rollup/rollup-openharmony-arm64": { + "version": "4.52.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-openharmony-arm64/-/rollup-openharmony-arm64-4.52.5.tgz", + "integrity": "sha512-QoFqB6+/9Rly/RiPjaomPLmR/13cgkIGfA40LHly9zcH1S0bN2HVFYk3a1eAyHQyjs3ZJYlXvIGtcCs5tko9Cw==", + "dev": true, + "optional": true, + "peer": true + }, + "@rollup/rollup-win32-arm64-msvc": { + "version": "4.52.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.52.5.tgz", + "integrity": "sha512-w0cDWVR6MlTstla1cIfOGyl8+qb93FlAVutcor14Gf5Md5ap5ySfQ7R9S/NjNaMLSFdUnKGEasmVnu3lCMqB7w==", + "dev": true, + "optional": true, + "peer": true + }, + "@rollup/rollup-win32-ia32-msvc": { + "version": "4.52.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.52.5.tgz", + "integrity": "sha512-Aufdpzp7DpOTULJCuvzqcItSGDH73pF3ko/f+ckJhxQyHtp67rHw3HMNxoIdDMUITJESNE6a8uh4Lo4SLouOUg==", + "dev": true, + "optional": true, + "peer": true + }, + "@rollup/rollup-win32-x64-gnu": { + "version": "4.52.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-gnu/-/rollup-win32-x64-gnu-4.52.5.tgz", + "integrity": "sha512-UGBUGPFp1vkj6p8wCRraqNhqwX/4kNQPS57BCFc8wYh0g94iVIW33wJtQAx3G7vrjjNtRaxiMUylM0ktp/TRSQ==", + "dev": true, + "optional": true, + "peer": true + }, + "@rollup/rollup-win32-x64-msvc": { + "version": "4.52.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.52.5.tgz", + "integrity": "sha512-TAcgQh2sSkykPRWLrdyy2AiceMckNf5loITqXxFI5VuQjS5tSuw3WlwdN8qv8vzjLAUTvYaH/mVjSFpbkFbpTg==", + "dev": true, + "optional": true, + "peer": true + }, "@rtsao/scc": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/@rtsao/scc/-/scc-1.1.0.tgz", @@ -13828,19 +14943,21 @@ } }, "@supabase/auth-js": { - "version": "2.70.0", - "resolved": "https://registry.npmjs.org/@supabase/auth-js/-/auth-js-2.70.0.tgz", - "integrity": "sha512-BaAK/tOAZFJtzF1sE3gJ2FwTjLf4ky3PSvcvLGEgEmO4BSBkwWKu8l67rLLIBZPDnCyV7Owk2uPyKHa0kj5QGg==", + "version": "2.77.0", + "resolved": "https://registry.npmjs.org/@supabase/auth-js/-/auth-js-2.77.0.tgz", + "integrity": "sha512-IRxyj2l46EutSX7AbGkHA7LSmrgqnXjPfKouBlGT6NqS1YOm+jMMwfdhf6zP5EZ4giUfdt2u+yHIBgyXU/LEtg==", "requires": { - "@supabase/node-fetch": "^2.6.14" + "@supabase/node-fetch": "2.6.15", + "tslib": "2.8.1" } }, "@supabase/functions-js": { - "version": "2.4.4", - "resolved": "https://registry.npmjs.org/@supabase/functions-js/-/functions-js-2.4.4.tgz", - "integrity": "sha512-WL2p6r4AXNGwop7iwvul2BvOtuJ1YQy8EbOd0dhG1oN1q8el/BIRSFCFnWAMM/vJJlHWLi4ad22sKbKr9mvjoA==", + "version": "2.77.0", + "resolved": "https://registry.npmjs.org/@supabase/functions-js/-/functions-js-2.77.0.tgz", + "integrity": "sha512-MxNW3YoQysbiVEiLAozCTqk1urswtVjAZggeZ5Sw+vJ+u1EvFNmTnirzwTj7M8XjTOMmorheruPmNtfHEwudvw==", "requires": { - "@supabase/node-fetch": "^2.6.14" + "@supabase/node-fetch": "2.6.15", + "tslib": "2.8.1" } }, "@supabase/node-fetch": { @@ -13852,43 +14969,46 @@ } }, "@supabase/postgrest-js": { - "version": "1.19.4", - "resolved": "https://registry.npmjs.org/@supabase/postgrest-js/-/postgrest-js-1.19.4.tgz", - "integrity": "sha512-O4soKqKtZIW3olqmbXXbKugUtByD2jPa8kL2m2c1oozAO11uCcGrRhkZL0kVxjBLrXHE0mdSkFsMj7jDSfyNpw==", + "version": "2.77.0", + "resolved": "https://registry.npmjs.org/@supabase/postgrest-js/-/postgrest-js-2.77.0.tgz", + "integrity": "sha512-Ly8C48x875JcUXBdML7SPRjO1Bpmjo6Sax/Tz4Ij6YU5paCrGKxEYDBVLP2eHKkQvf+LQ+GIbRFF1DorRvyfwQ==", "requires": { - "@supabase/node-fetch": "^2.6.14" + "@supabase/node-fetch": "2.6.15", + "tslib": "2.8.1" } }, "@supabase/realtime-js": { - "version": "2.11.10", - "resolved": "https://registry.npmjs.org/@supabase/realtime-js/-/realtime-js-2.11.10.tgz", - "integrity": "sha512-SJKVa7EejnuyfImrbzx+HaD9i6T784khuw1zP+MBD7BmJYChegGxYigPzkKX8CK8nGuDntmeSD3fvriaH0EGZA==", + "version": "2.77.0", + "resolved": "https://registry.npmjs.org/@supabase/realtime-js/-/realtime-js-2.77.0.tgz", + "integrity": "sha512-Ycv2VZ8yTjvlR2NQecGJUlP0Dh4LhF1Y1oZ3IMQcjjTbDriWSQgfc9HSLIQUaY/eTdtfXfyVKOGE+tieWneV8Q==", "requires": { - "@supabase/node-fetch": "^2.6.13", + "@supabase/node-fetch": "2.6.15", "@types/phoenix": "^1.6.6", "@types/ws": "^8.18.1", + "tslib": "2.8.1", "ws": "^8.18.2" } }, "@supabase/storage-js": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/@supabase/storage-js/-/storage-js-2.7.1.tgz", - "integrity": "sha512-asYHcyDR1fKqrMpytAS1zjyEfvxuOIp1CIXX7ji4lHHcJKqyk+sLl/Vxgm4sN6u8zvuUtae9e4kDxQP2qrwWBA==", + "version": "2.77.0", + "resolved": "https://registry.npmjs.org/@supabase/storage-js/-/storage-js-2.77.0.tgz", + "integrity": "sha512-4+OpVA4U0C4HM1QuINlgjqFxnRsmqPnuurTDN4m6nRanafuqQQ/UtMjdUU57iygBo70IGBlBefZ8gGNWzD1sLg==", "requires": { - "@supabase/node-fetch": "^2.6.14" + "@supabase/node-fetch": "2.6.15", + "tslib": "2.8.1" } }, "@supabase/supabase-js": { - "version": "2.50.0", - "resolved": "https://registry.npmjs.org/@supabase/supabase-js/-/supabase-js-2.50.0.tgz", - "integrity": "sha512-M1Gd5tPaaghYZ9OjeO1iORRqbTWFEz/cF3pPubRnMPzA+A8SiUsXXWDP+DWsASZcjEcVEcVQIAF38i5wrijYOg==", + "version": "2.77.0", + "resolved": "https://registry.npmjs.org/@supabase/supabase-js/-/supabase-js-2.77.0.tgz", + "integrity": "sha512-s6OQ8RZ0ioQCwVDh2Tv502XaUQCuRbbjpujYJB1h0JWELRsqjLDsgB5kZUkETPgtTAjJk7z97YPUsRg80PohfA==", "requires": { - "@supabase/auth-js": "2.70.0", - "@supabase/functions-js": "2.4.4", + "@supabase/auth-js": "2.77.0", + "@supabase/functions-js": "2.77.0", "@supabase/node-fetch": "2.6.15", - "@supabase/postgrest-js": "1.19.4", - "@supabase/realtime-js": "2.11.10", - "@supabase/storage-js": "2.7.1" + "@supabase/postgrest-js": "2.77.0", + "@supabase/realtime-js": "2.77.0", + "@supabase/storage-js": "2.77.0" } }, "@sveltejs/acorn-typescript": { @@ -13898,10 +15018,32 @@ "dev": true, "requires": {} }, + "@sveltejs/vite-plugin-svelte": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/@sveltejs/vite-plugin-svelte/-/vite-plugin-svelte-6.2.1.tgz", + "integrity": "sha512-YZs/OSKOQAQCnJvM/P+F1URotNnYNeU3P2s4oIpzm1uFaqUEqRxUB0g5ejMjEb5Gjb9/PiBI5Ktrq4rUUF8UVQ==", + "dev": true, + "requires": { + "@sveltejs/vite-plugin-svelte-inspector": "^5.0.0", + "debug": "^4.4.1", + "deepmerge": "^4.3.1", + "magic-string": "^0.30.17", + "vitefu": "^1.1.1" + } + }, + "@sveltejs/vite-plugin-svelte-inspector": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/@sveltejs/vite-plugin-svelte-inspector/-/vite-plugin-svelte-inspector-5.0.1.tgz", + "integrity": "sha512-ubWshlMk4bc8mkwWbg6vNvCeT7lGQojE3ijDh3QTR6Zr/R+GXxsGbyH4PExEPpiFmqPhYiVSVmHBjUcVc1JIrA==", + "dev": true, + "requires": { + "debug": "^4.4.1" + } + }, "@tsconfig/svelte": { - "version": "5.0.4", - "resolved": "https://registry.npmjs.org/@tsconfig/svelte/-/svelte-5.0.4.tgz", - "integrity": "sha512-BV9NplVgLmSi4mwKzD8BD/NQ8erOY/nUE/GpgWe2ckx+wIQF5RyRirn/QsSSCPeulVpc3RA/iJt6DpfTIZps0Q==", + "version": "5.0.5", + "resolved": "https://registry.npmjs.org/@tsconfig/svelte/-/svelte-5.0.5.tgz", + "integrity": "sha512-48fAnUjKye38FvMiNOj0J9I/4XlQQiZlpe9xaNPfe8vy2Y1hFBt8g1yqf2EGjVvHavo4jf2lC+TQyENCr4BJBQ==", "dev": true }, "@types/codemirror": { @@ -13934,18 +15076,10 @@ "integrity": "sha512-xFdR6tkm0MWvBfO8xXCSsinYxHcqkQUlcHeSpMC2ukzOb6lwQAfDmW+Qt0AvlGd8HpsS28qKsB+oPeJn9I39jg==", "dev": true }, - "@types/dns-packet": { - "version": "5.6.5", - "resolved": "https://registry.npmjs.org/@types/dns-packet/-/dns-packet-5.6.5.tgz", - "integrity": "sha512-qXOC7XLOEe43ehtWJCMnQXvgcIpv6rPmQ1jXT98Ad8A3TB1Ue50jsCbSSSyuazScEuZ/Q026vHbrOTVkmwA+7Q==", - "requires": { - "@types/node": "*" - } - }, "@types/estree": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.6.tgz", - "integrity": "sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==", + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.8.tgz", + "integrity": "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==", "dev": true }, "@types/json-schema": { @@ -13960,6 +15094,19 @@ "integrity": "sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==", "dev": true }, + "@types/lodash": { + "version": "4.17.20", + "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.17.20.tgz", + "integrity": "sha512-H3MHACvFUEiujabxhaI/ImO6gUrd8oOurg7LQtS7mbwIXA/cUqWrvBsaeJ23aZEPk1TAYkurjfMbSELfoCXlGA==" + }, + "@types/lodash.debounce": { + "version": "4.0.9", + "resolved": "https://registry.npmjs.org/@types/lodash.debounce/-/lodash.debounce-4.0.9.tgz", + "integrity": "sha512-Ma5JcgTREwpLRwMM+XwBR7DaWe96nC38uCBDFKZWbNKD+osjVzdpnUSwBcqCptrp16sSOLBAUb50Car5I0TCsQ==", + "requires": { + "@types/lodash": "*" + } + }, "@types/ms": { "version": "0.7.31", "resolved": "https://registry.npmjs.org/@types/ms/-/ms-0.7.31.tgz", @@ -14160,9 +15307,9 @@ } }, "@types/readable-stream": { - "version": "4.0.21", - "resolved": "https://registry.npmjs.org/@types/readable-stream/-/readable-stream-4.0.21.tgz", - "integrity": "sha512-19eKVv9tugr03IgfXlA9UVUVRbW6IuqRO5B92Dl4a6pT7K8uaGrNS0GkxiZD0BOk6PLuXl5FhWl//eX/pzYdTQ==", + "version": "4.0.22", + "resolved": "https://registry.npmjs.org/@types/readable-stream/-/readable-stream-4.0.22.tgz", + "integrity": "sha512-/FFhJpfCLAPwAcN3mFycNUa77ddnr8jTgF5VmSNetaemWB2cIlfCA9t0YTM3JAT0wOcv8D4tjPo7pkDhK3EJIg==", "requires": { "@types/node": "*" } @@ -14199,79 +15346,117 @@ } }, "@typescript-eslint/eslint-plugin": { - "version": "8.25.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.25.0.tgz", - "integrity": "sha512-VM7bpzAe7JO/BFf40pIT1lJqS/z1F8OaSsUB3rpFJucQA4cOSuH2RVVVkFULN+En0Djgr29/jb4EQnedUo95KA==", + "version": "8.46.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.46.2.tgz", + "integrity": "sha512-ZGBMToy857/NIPaaCucIUQgqueOiq7HeAKkhlvqVV4lm089zUFW6ikRySx2v+cAhKeUCPuWVHeimyk6Dw1iY3w==", "dev": true, "requires": { "@eslint-community/regexpp": "^4.10.0", - "@typescript-eslint/scope-manager": "8.25.0", - "@typescript-eslint/type-utils": "8.25.0", - "@typescript-eslint/utils": "8.25.0", - "@typescript-eslint/visitor-keys": "8.25.0", + "@typescript-eslint/scope-manager": "8.46.2", + "@typescript-eslint/type-utils": "8.46.2", + "@typescript-eslint/utils": "8.46.2", + "@typescript-eslint/visitor-keys": "8.46.2", "graphemer": "^1.4.0", - "ignore": "^5.3.1", + "ignore": "^7.0.0", "natural-compare": "^1.4.0", - "ts-api-utils": "^2.0.1" + "ts-api-utils": "^2.1.0" + }, + "dependencies": { + "ignore": { + "version": "7.0.5", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-7.0.5.tgz", + "integrity": "sha512-Hs59xBNfUIunMFgWAbGX5cq6893IbWg4KnrjbYwX3tx0ztorVgTDA6B2sxf8ejHJ4wz8BqGUMYlnzNBer5NvGg==", + "dev": true + } } }, "@typescript-eslint/parser": { - "version": "8.25.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.25.0.tgz", - "integrity": "sha512-4gbs64bnbSzu4FpgMiQ1A+D+urxkoJk/kqlDJ2W//5SygaEiAP2B4GoS7TEdxgwol2el03gckFV9lJ4QOMiiHg==", + "version": "8.46.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.46.2.tgz", + "integrity": "sha512-BnOroVl1SgrPLywqxyqdJ4l3S2MsKVLDVxZvjI1Eoe8ev2r3kGDo+PcMihNmDE+6/KjkTubSJnmqGZZjQSBq/g==", "dev": true, "requires": { - "@typescript-eslint/scope-manager": "8.25.0", - "@typescript-eslint/types": "8.25.0", - "@typescript-eslint/typescript-estree": "8.25.0", - "@typescript-eslint/visitor-keys": "8.25.0", + "@typescript-eslint/scope-manager": "8.46.2", + "@typescript-eslint/types": "8.46.2", + "@typescript-eslint/typescript-estree": "8.46.2", + "@typescript-eslint/visitor-keys": "8.46.2", + "debug": "^4.3.4" + } + }, + "@typescript-eslint/project-service": { + "version": "8.46.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/project-service/-/project-service-8.46.2.tgz", + "integrity": "sha512-PULOLZ9iqwI7hXcmL4fVfIsBi6AN9YxRc0frbvmg8f+4hQAjQ5GYNKK0DIArNo+rOKmR/iBYwkpBmnIwin4wBg==", + "dev": true, + "requires": { + "@typescript-eslint/tsconfig-utils": "^8.46.2", + "@typescript-eslint/types": "^8.46.2", "debug": "^4.3.4" } }, "@typescript-eslint/scope-manager": { - "version": "8.25.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.25.0.tgz", - "integrity": "sha512-6PPeiKIGbgStEyt4NNXa2ru5pMzQ8OYKO1hX1z53HMomrmiSB+R5FmChgQAP1ro8jMtNawz+TRQo/cSXrauTpg==", + "version": "8.46.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.46.2.tgz", + "integrity": "sha512-LF4b/NmGvdWEHD2H4MsHD8ny6JpiVNDzrSZr3CsckEgCbAGZbYM4Cqxvi9L+WqDMT+51Ozy7lt2M+d0JLEuBqA==", "dev": true, "requires": { - "@typescript-eslint/types": "8.25.0", - "@typescript-eslint/visitor-keys": "8.25.0" + "@typescript-eslint/types": "8.46.2", + "@typescript-eslint/visitor-keys": "8.46.2" } }, + "@typescript-eslint/tsconfig-utils": { + "version": "8.46.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.46.2.tgz", + "integrity": "sha512-a7QH6fw4S57+F5y2FIxxSDyi5M4UfGF+Jl1bCGd7+L4KsaUY80GsiF/t0UoRFDHAguKlBaACWJRmdrc6Xfkkag==", + "dev": true, + "requires": {} + }, "@typescript-eslint/type-utils": { - "version": "8.25.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.25.0.tgz", - "integrity": "sha512-d77dHgHWnxmXOPJuDWO4FDWADmGQkN5+tt6SFRZz/RtCWl4pHgFl3+WdYCn16+3teG09DY6XtEpf3gGD0a186g==", + "version": "8.46.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.46.2.tgz", + "integrity": "sha512-HbPM4LbaAAt/DjxXaG9yiS9brOOz6fabal4uvUmaUYe6l3K1phQDMQKBRUrr06BQkxkvIZVVHttqiybM9nJsLA==", "dev": true, "requires": { - "@typescript-eslint/typescript-estree": "8.25.0", - "@typescript-eslint/utils": "8.25.0", + "@typescript-eslint/types": "8.46.2", + "@typescript-eslint/typescript-estree": "8.46.2", + "@typescript-eslint/utils": "8.46.2", "debug": "^4.3.4", - "ts-api-utils": "^2.0.1" + "ts-api-utils": "^2.1.0" } }, "@typescript-eslint/types": { - "version": "8.25.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.25.0.tgz", - "integrity": "sha512-+vUe0Zb4tkNgznQwicsvLUJgZIRs6ITeWSCclX1q85pR1iOiaj+4uZJIUp//Z27QWu5Cseiw3O3AR8hVpax7Aw==", + "version": "8.46.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.46.2.tgz", + "integrity": "sha512-lNCWCbq7rpg7qDsQrd3D6NyWYu+gkTENkG5IKYhUIcxSb59SQC/hEQ+MrG4sTgBVghTonNWq42bA/d4yYumldQ==", "dev": true }, "@typescript-eslint/typescript-estree": { - "version": "8.25.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.25.0.tgz", - "integrity": "sha512-ZPaiAKEZ6Blt/TPAx5Ot0EIB/yGtLI2EsGoY6F7XKklfMxYQyvtL+gT/UCqkMzO0BVFHLDlzvFqQzurYahxv9Q==", + "version": "8.46.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.46.2.tgz", + "integrity": "sha512-f7rW7LJ2b7Uh2EiQ+7sza6RDZnajbNbemn54Ob6fRwQbgcIn+GWfyuHDHRYgRoZu1P4AayVScrRW+YfbTvPQoQ==", "dev": true, "requires": { - "@typescript-eslint/types": "8.25.0", - "@typescript-eslint/visitor-keys": "8.25.0", + "@typescript-eslint/project-service": "8.46.2", + "@typescript-eslint/tsconfig-utils": "8.46.2", + "@typescript-eslint/types": "8.46.2", + "@typescript-eslint/visitor-keys": "8.46.2", "debug": "^4.3.4", "fast-glob": "^3.3.2", "is-glob": "^4.0.3", "minimatch": "^9.0.4", "semver": "^7.6.0", - "ts-api-utils": "^2.0.1" + "ts-api-utils": "^2.1.0" }, "dependencies": { + "brace-expansion": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", + "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", + "dev": true, + "requires": { + "balanced-match": "^1.0.0" + } + }, "minimatch": { "version": "9.0.5", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", @@ -14284,25 +15469,25 @@ } }, "@typescript-eslint/utils": { - "version": "8.25.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.25.0.tgz", - "integrity": "sha512-syqRbrEv0J1wywiLsK60XzHnQe/kRViI3zwFALrNEgnntn1l24Ra2KvOAWwWbWZ1lBZxZljPDGOq967dsl6fkA==", + "version": "8.46.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.46.2.tgz", + "integrity": "sha512-sExxzucx0Tud5tE0XqR0lT0psBQvEpnpiul9XbGUB1QwpWJJAps1O/Z7hJxLGiZLBKMCutjTzDgmd1muEhBnVg==", "dev": true, "requires": { - "@eslint-community/eslint-utils": "^4.4.0", - "@typescript-eslint/scope-manager": "8.25.0", - "@typescript-eslint/types": "8.25.0", - "@typescript-eslint/typescript-estree": "8.25.0" + "@eslint-community/eslint-utils": "^4.7.0", + "@typescript-eslint/scope-manager": "8.46.2", + "@typescript-eslint/types": "8.46.2", + "@typescript-eslint/typescript-estree": "8.46.2" } }, "@typescript-eslint/visitor-keys": { - "version": "8.25.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.25.0.tgz", - "integrity": "sha512-kCYXKAum9CecGVHGij7muybDfTS2sD3t0L4bJsEZLkyrXUImiCTq1M3LG2SRtOhiHFwMR9wAFplpT6XHYjTkwQ==", + "version": "8.46.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.46.2.tgz", + "integrity": "sha512-tUFMXI4gxzzMXt4xpGJEsBsTox0XbNQ1y94EwlD/CuZwFcQP79xfQqMhau9HsRc/J0cAPA/HZt1dZPtGn9V/7w==", "dev": true, "requires": { - "@typescript-eslint/types": "8.25.0", - "eslint-visitor-keys": "^4.2.0" + "@typescript-eslint/types": "8.46.2", + "eslint-visitor-keys": "^4.2.1" }, "dependencies": { "eslint-visitor-keys": { @@ -14313,73 +15498,35 @@ } } }, - "@waku/discovery": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/@waku/discovery/-/discovery-0.0.8.tgz", - "integrity": "sha512-Yh1pNlGasRuq7LHB5bfa5VUkvfy4vT2xWfOOYU8LD6r+5w4WIkBI18hDrOQlGtXHdNLfcoTQK7YWqqEPFNNxlg==", + "@waku/core": { + "version": "0.0.39", + "resolved": "https://registry.npmjs.org/@waku/core/-/core-0.0.39.tgz", + "integrity": "sha512-Vgb52md4GOzM5z9xfULzjN2tvVHKszFmj5zc2mVDoIgySH4cFBgDTHtVtGEwrFRFWadWYKBtpKBdmG3X+W7SNA==", "requires": { - "@waku/core": "0.0.35", - "@waku/enr": "0.0.29", - "@waku/interfaces": "0.0.30", - "@waku/proto": "^0.0.10", - "@waku/utils": "0.0.23", + "@libp2p/ping": "2.0.35", + "@noble/hashes": "^1.3.2", + "@waku/enr": "^0.0.33", + "@waku/interfaces": "0.0.34", + "@waku/proto": "0.0.14", + "@waku/utils": "0.0.27", "debug": "^4.3.4", - "dns-over-http-resolver": "^3.0.8", - "hi-base32": "^0.5.1", - "uint8arrays": "^5.0.1" + "it-all": "^3.0.4", + "it-length-prefixed": "^9.0.4", + "it-pipe": "^3.0.1", + "uint8arraylist": "^2.4.3", + "uuid": "^9.0.0" }, "dependencies": { - "@waku/core": { - "version": "0.0.35", - "resolved": "https://registry.npmjs.org/@waku/core/-/core-0.0.35.tgz", - "integrity": "sha512-UbAgBznjewZed4ZAd30BUTq6OsiqTgVQkFD1PnJxw+K4hn0AUKHjPYRTYOzkJvxg7nXd7Y6LCZ7s6XeujwrR4w==", + "it-length-prefixed": { + "version": "9.1.1", + "resolved": "https://registry.npmjs.org/it-length-prefixed/-/it-length-prefixed-9.1.1.tgz", + "integrity": "sha512-O88nBweT6M9ozsmok68/auKH7ik/slNM4pYbM9lrfy2z5QnpokW5SlrepHZDKtN71llhG2sZvd6uY4SAl+lAQg==", "requires": { - "@libp2p/ping": "2.0.1", - "@waku/enr": "^0.0.29", - "@waku/interfaces": "0.0.30", - "@waku/proto": "0.0.10", - "@waku/utils": "0.0.23", - "debug": "^4.3.4", - "it-all": "^3.0.4", - "it-length-prefixed": "^9.0.4", - "it-pipe": "^3.0.1", - "uint8arraylist": "^2.4.3", - "uuid": "^9.0.0" - } - }, - "libp2p": { - "version": "2.1.8", - "resolved": "https://registry.npmjs.org/libp2p/-/libp2p-2.1.8.tgz", - "integrity": "sha512-OzUUgAs6983lP2FDqc3oABeUAyvd3iJ/BlYjwmjddpUwQO6gemuJFpWujagj2Vtj+oPosGrrPGWqv+WPnTkHUA==", - "optional": true, - "peer": true, - "requires": { - "@libp2p/crypto": "^5.0.5", - "@libp2p/interface": "^2.1.3", - "@libp2p/interface-internal": "^2.0.8", - "@libp2p/logger": "^5.1.1", - "@libp2p/multistream-select": "^6.0.6", - "@libp2p/peer-collections": "^6.0.8", - "@libp2p/peer-id": "^5.0.5", - "@libp2p/peer-store": "^11.0.8", - "@libp2p/utils": "^6.1.1", - "@multiformats/dns": "^1.0.6", - "@multiformats/multiaddr": "^12.2.3", - "@multiformats/multiaddr-matcher": "^1.2.1", - "any-signal": "^4.1.1", - "datastore-core": "^10.0.0", - "interface-datastore": "^8.3.0", - "it-byte-stream": "^1.0.12", - "it-merge": "^3.0.5", - "it-parallel": "^3.0.7", - "merge-options": "^3.0.4", - "multiformats": "^13.1.0", - "p-defer": "^4.0.1", - "p-retry": "^6.2.0", - "progress-events": "^1.0.0", - "race-event": "^1.3.0", - "race-signal": "^1.0.2", - "uint8arrays": "^5.1.0" + "it-reader": "^6.0.1", + "it-stream-types": "^2.0.1", + "uint8-varint": "^2.0.1", + "uint8arraylist": "^2.0.0", + "uint8arrays": "^5.0.1" } }, "uuid": { @@ -14389,135 +15536,189 @@ } } }, + "@waku/discovery": { + "version": "0.0.12", + "resolved": "https://registry.npmjs.org/@waku/discovery/-/discovery-0.0.12.tgz", + "integrity": "sha512-4ItzLMQA79xveu5I9ymx3Q1A/Aj0fGjdi8TnPnb9xnm2O927w71efnkxmHo3rwATEYonXiB34NpMN2ecAp1enA==", + "requires": { + "@waku/core": "0.0.39", + "@waku/enr": "0.0.33", + "@waku/interfaces": "0.0.34", + "@waku/proto": "^0.0.14", + "@waku/utils": "0.0.27", + "debug": "^4.3.4", + "dns-over-http-resolver": "^3.0.8", + "hi-base32": "^0.5.1", + "uint8arrays": "^5.0.1" + } + }, "@waku/enr": { - "version": "0.0.29", - "resolved": "https://registry.npmjs.org/@waku/enr/-/enr-0.0.29.tgz", - "integrity": "sha512-q7vQmD4tDi5o4o6VNDhSLLzUcZNQxbs4whbgz6L+M2swPsQ6vS3dS2PNmR3qt3ixvHUpEwWGEfVp9meMBxvVBA==", + "version": "0.0.33", + "resolved": "https://registry.npmjs.org/@waku/enr/-/enr-0.0.33.tgz", + "integrity": "sha512-OVZoCXc9Lto2tUfo+iSqQ61pmRm/QikYSJWc3InKmsL3qtfpMShiChK/X/PafwdRFVA28b46itm++KUqMjGi+A==", "requires": { "@ethersproject/rlp": "^5.7.0", - "@libp2p/crypto": "^5.0.1", - "@libp2p/peer-id": "^5.0.1", + "@libp2p/crypto": "5.1.6", + "@libp2p/peer-id": "5.1.7", "@multiformats/multiaddr": "^12.0.0", "@noble/secp256k1": "^1.7.1", - "@waku/utils": "0.0.23", + "@waku/utils": "0.0.27", "debug": "^4.3.4", "js-sha3": "^0.9.2" + }, + "dependencies": { + "@libp2p/crypto": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/@libp2p/crypto/-/crypto-5.1.6.tgz", + "integrity": "sha512-hCNDInAsjfFTOr1ZlVTVuRKpkGEbR1GC+cDbmn2Vslwd0dHZHqhKv5ye7l6NZaiNUxxqUCVmqvJIWqVLuTPDdg==", + "requires": { + "@libp2p/interface": "^2.10.4", + "@noble/curves": "^1.9.1", + "@noble/hashes": "^1.8.0", + "multiformats": "^13.3.6", + "protons-runtime": "^5.5.0", + "uint8arraylist": "^2.4.8", + "uint8arrays": "^5.1.0" + } + }, + "@libp2p/peer-id": { + "version": "5.1.7", + "resolved": "https://registry.npmjs.org/@libp2p/peer-id/-/peer-id-5.1.7.tgz", + "integrity": "sha512-KBT8Edx/Sqxj0vKe5mPM2PQx06VDmGzx2BZ1M+LiDAM94q9Sag4tyaUugHyTrJKGG8V+7lx1Fz46kfbezuwR9g==", + "requires": { + "@libp2p/crypto": "^5.1.6", + "@libp2p/interface": "^2.10.4", + "multiformats": "^13.3.6", + "uint8arrays": "^5.1.0" + } + } } }, "@waku/interfaces": { - "version": "0.0.30", - "resolved": "https://registry.npmjs.org/@waku/interfaces/-/interfaces-0.0.30.tgz", - "integrity": "sha512-2cR8+u0CePmUFBB4vVL1zw403Rki5hK+7rKQH0WikDT4SD4lJTdMV4j3q3+YBfPTsMJrFCVFhLcqpeBADgavAw==", - "requires": { - "@waku/proto": "^0.0.10" - } - }, - "@waku/message-hash": { - "version": "0.1.19", - "resolved": "https://registry.npmjs.org/@waku/message-hash/-/message-hash-0.1.19.tgz", - "integrity": "sha512-fl+qky3MQK8l3HTT5wq23NcdYFYNqVcUVwBblX9/IArcDlDNjEEdK68K3n8rFWxBBd2JAK0RxU7MMkLiK3vWUA==", - "requires": { - "@noble/hashes": "^1.3.2", - "@waku/utils": "0.0.23" - } + "version": "0.0.34", + "resolved": "https://registry.npmjs.org/@waku/interfaces/-/interfaces-0.0.34.tgz", + "integrity": "sha512-15+SOfr8cKk5J2ukSucy/T6j23jIudRt1hr/N09YaNUvQ19iXofjne5MU/P8otmgP8daedCijCagRB0rwoHKKQ==" }, "@waku/proto": { - "version": "0.0.10", - "resolved": "https://registry.npmjs.org/@waku/proto/-/proto-0.0.10.tgz", - "integrity": "sha512-dgBOjwRtduZSHxmr2IqDfrzgDnog8f/qiseLV39W1WNDkVLqpNT7K2bPDPz5/e2e7EtVtTAzbGPZPakOswn5FQ==", + "version": "0.0.14", + "resolved": "https://registry.npmjs.org/@waku/proto/-/proto-0.0.14.tgz", + "integrity": "sha512-8zKVHrKzzKQfZBVnpSmJ6G8H1Zd4Gqms1tj3L6K2WCE/NQDR8wJtFwziab3dJ/5rKUTjfPAWFJ57RN97ltzxGA==", "requires": { "protons-runtime": "^5.4.0" } }, "@waku/sdk": { - "version": "0.0.31", - "resolved": "https://registry.npmjs.org/@waku/sdk/-/sdk-0.0.31.tgz", - "integrity": "sha512-vlKXitHYMsu8fOXwN+9A7N71Xh3/zVUTO4CEh0zc2ihjtQcazqkU0rX0sOsAJr/XmDZDUAzkQX6aCWULyYRXMw==", + "version": "0.0.35", + "resolved": "https://registry.npmjs.org/@waku/sdk/-/sdk-0.0.35.tgz", + "integrity": "sha512-bnXl5b8BDCOKSrJ7V6PiJshc3bsBWaGweWy20IsGlXalCJj7257wK31lZxEP62lTFKHS8tPfG+EvDwrPK4oxKA==", "requires": { - "@chainsafe/libp2p-noise": "16.0.0", - "@libp2p/bootstrap": "^11.0.1", - "@libp2p/identify": "^3.0.1", - "@libp2p/mplex": "^11.0.1", - "@libp2p/ping": "2.0.1", - "@libp2p/websockets": "^9.0.1", + "@chainsafe/libp2p-noise": "16.1.3", + "@libp2p/bootstrap": "11.0.42", + "@libp2p/identify": "3.0.36", + "@libp2p/mplex": "11.0.42", + "@libp2p/ping": "2.0.35", + "@libp2p/websockets": "9.2.16", "@noble/hashes": "^1.3.3", - "@waku/core": "0.0.35", - "@waku/discovery": "0.0.8", - "@waku/interfaces": "0.0.30", - "@waku/message-hash": "0.1.19", - "@waku/proto": "^0.0.10", - "@waku/utils": "0.0.23", - "libp2p": "2.1.8" + "@types/lodash.debounce": "^4.0.9", + "@waku/core": "0.0.39", + "@waku/discovery": "0.0.12", + "@waku/interfaces": "0.0.34", + "@waku/proto": "^0.0.14", + "@waku/sds": "^0.0.7", + "@waku/utils": "0.0.27", + "libp2p": "2.8.11", + "lodash.debounce": "^4.0.8" + } + }, + "@waku/sds": { + "version": "0.0.7", + "resolved": "https://registry.npmjs.org/@waku/sds/-/sds-0.0.7.tgz", + "integrity": "sha512-wPZASJ1iH9K5gSgHMvmahRdnD/yNrNj/35R4H0SZGhUaViOyUGMooJH0YewZmVc1Dvy2L9mDitHurJWqLoWbcg==", + "requires": { + "@libp2p/interface": "2.10.4", + "@noble/hashes": "^1.7.1", + "@waku/proto": "^0.0.14", + "@waku/utils": "^0.0.27", + "chai": "^5.1.2", + "lodash": "^4.17.21" }, "dependencies": { - "@waku/core": { - "version": "0.0.35", - "resolved": "https://registry.npmjs.org/@waku/core/-/core-0.0.35.tgz", - "integrity": "sha512-UbAgBznjewZed4ZAd30BUTq6OsiqTgVQkFD1PnJxw+K4hn0AUKHjPYRTYOzkJvxg7nXd7Y6LCZ7s6XeujwrR4w==", + "@libp2p/interface": { + "version": "2.10.4", + "resolved": "https://registry.npmjs.org/@libp2p/interface/-/interface-2.10.4.tgz", + "integrity": "sha512-FX3uujZgjH9bb7mDSNR54j3JzJnF/ngnQH20GQ1wPk5irIeHDvmzRlUj3bJ3hHQmdB2MxLZNT6e39O1es10LFA==", "requires": { - "@libp2p/ping": "2.0.1", - "@waku/enr": "^0.0.29", - "@waku/interfaces": "0.0.30", - "@waku/proto": "0.0.10", - "@waku/utils": "0.0.23", - "debug": "^4.3.4", - "it-all": "^3.0.4", - "it-length-prefixed": "^9.0.4", - "it-pipe": "^3.0.1", - "uint8arraylist": "^2.4.3", - "uuid": "^9.0.0" + "@multiformats/multiaddr": "^12.4.4", + "it-pushable": "^3.2.3", + "it-stream-types": "^2.0.2", + "main-event": "^1.0.1", + "multiformats": "^13.3.6", + "progress-events": "^1.0.1", + "uint8arraylist": "^2.4.8" } - }, - "libp2p": { - "version": "2.1.8", - "resolved": "https://registry.npmjs.org/libp2p/-/libp2p-2.1.8.tgz", - "integrity": "sha512-OzUUgAs6983lP2FDqc3oABeUAyvd3iJ/BlYjwmjddpUwQO6gemuJFpWujagj2Vtj+oPosGrrPGWqv+WPnTkHUA==", - "requires": { - "@libp2p/crypto": "^5.0.5", - "@libp2p/interface": "^2.1.3", - "@libp2p/interface-internal": "^2.0.8", - "@libp2p/logger": "^5.1.1", - "@libp2p/multistream-select": "^6.0.6", - "@libp2p/peer-collections": "^6.0.8", - "@libp2p/peer-id": "^5.0.5", - "@libp2p/peer-store": "^11.0.8", - "@libp2p/utils": "^6.1.1", - "@multiformats/dns": "^1.0.6", - "@multiformats/multiaddr": "^12.2.3", - "@multiformats/multiaddr-matcher": "^1.2.1", - "any-signal": "^4.1.1", - "datastore-core": "^10.0.0", - "interface-datastore": "^8.3.0", - "it-byte-stream": "^1.0.12", - "it-merge": "^3.0.5", - "it-parallel": "^3.0.7", - "merge-options": "^3.0.4", - "multiformats": "^13.1.0", - "p-defer": "^4.0.1", - "p-retry": "^6.2.0", - "progress-events": "^1.0.0", - "race-event": "^1.3.0", - "race-signal": "^1.0.2", - "uint8arrays": "^5.1.0" - } - }, - "uuid": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.1.tgz", - "integrity": "sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==" } } }, "@waku/utils": { - "version": "0.0.23", - "resolved": "https://registry.npmjs.org/@waku/utils/-/utils-0.0.23.tgz", - "integrity": "sha512-8abBIAI7hq1kb5WVpv0o6CCW5Go3bwxo1xovKXfTZfdERwgV7/R6VcijKaUWOHF9SYIskyJuC98TFx/1HgrUBw==", + "version": "0.0.27", + "resolved": "https://registry.npmjs.org/@waku/utils/-/utils-0.0.27.tgz", + "integrity": "sha512-kIS/EN9Xoc5ik2c4MweqcvV3NEcl+CDmg09jpVUVG7fB2/yxVRakBlROytGn+vALR4pcHom1tW2dW1vtofCfFw==", "requires": { "@noble/hashes": "^1.3.2", - "@waku/interfaces": "0.0.30", + "@waku/interfaces": "0.0.34", "chai": "^4.3.10", "debug": "^4.3.4", "uint8arrays": "^5.0.1" + }, + "dependencies": { + "assertion-error": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-1.1.0.tgz", + "integrity": "sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==" + }, + "chai": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/chai/-/chai-4.5.0.tgz", + "integrity": "sha512-RITGBfijLkBddZvnn8jdqoTypxvqbOLYQkGGxXzeFjVHvudaPw0HNFD9x928/eUwYWd2dPCugVqspGALTZZQKw==", + "requires": { + "assertion-error": "^1.1.0", + "check-error": "^1.0.3", + "deep-eql": "^4.1.3", + "get-func-name": "^2.0.2", + "loupe": "^2.3.6", + "pathval": "^1.1.1", + "type-detect": "^4.1.0" + } + }, + "check-error": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/check-error/-/check-error-1.0.3.tgz", + "integrity": "sha512-iKEoDYaRmd1mxM90a2OEfWhjsjPpYPuQ+lMYsoxB126+t8fw7ySEO48nmDg5COTjxDI65/Y2OWpeEHk3ZOe8zg==", + "requires": { + "get-func-name": "^2.0.2" + } + }, + "deep-eql": { + "version": "4.1.4", + "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-4.1.4.tgz", + "integrity": "sha512-SUwdGfqdKOwxCPeVYjwSyRpJ7Z+fhpwIAtmCUdZIWZ/YP5R9WAsyuSgpLVDi9bjWoN2LXHNss/dk3urXtdQxGg==", + "requires": { + "type-detect": "^4.0.0" + } + }, + "loupe": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/loupe/-/loupe-2.3.7.tgz", + "integrity": "sha512-zSMINGVYkdpYSOBmLi0D1Uo7JU9nVdQKrHxC8eYlV+9YKK9WePqAlL7lSlorG/U2Fw1w0hTBmaa/jrQ3UbPHtA==", + "requires": { + "get-func-name": "^2.0.1" + } + }, + "pathval": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/pathval/-/pathval-1.1.1.tgz", + "integrity": "sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==" + } } }, "abort-controller": { @@ -14598,87 +15799,95 @@ "dev": true }, "array-buffer-byte-length": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.1.tgz", - "integrity": "sha512-ahC5W1xgou+KTXix4sAO8Ki12Q+jf4i0+tmk3sC+zgcynshkHxzpXdImBehiUYKKKDwvfFiJl1tZt6ewscS1Mg==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.2.tgz", + "integrity": "sha512-LHE+8BuR7RYGDKvnrmcuSq3tDcKv9OFEXQt/HpbZhY7V6h0zlUXutnAD82GiFx9rdieCMjkvtcsPqBwgUl1Iiw==", "dev": true, "requires": { - "call-bind": "^1.0.5", - "is-array-buffer": "^3.0.4" + "call-bound": "^1.0.3", + "is-array-buffer": "^3.0.5" } }, "array-includes": { - "version": "3.1.8", - "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.8.tgz", - "integrity": "sha512-itaWrbYbqpGXkGhZPGUulwnhVf5Hpy1xiCFsGqyIGglbBxmG5vSjxQen3/WGOjPpNEv1RtBLKxbmVXm8HpJStQ==", + "version": "3.1.9", + "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.9.tgz", + "integrity": "sha512-FmeCCAenzH0KH381SPT5FZmiA/TmpndpcaShhfgEN9eCVjnFBqq3l1xrI42y8+PPLI6hypzou4GXw00WHmPBLQ==", "dev": true, "requires": { - "call-bind": "^1.0.7", + "call-bind": "^1.0.8", + "call-bound": "^1.0.4", "define-properties": "^1.2.1", - "es-abstract": "^1.23.2", - "es-object-atoms": "^1.0.0", - "get-intrinsic": "^1.2.4", - "is-string": "^1.0.7" + "es-abstract": "^1.24.0", + "es-object-atoms": "^1.1.1", + "get-intrinsic": "^1.3.0", + "is-string": "^1.1.1", + "math-intrinsics": "^1.1.0" } }, "array.prototype.findlastindex": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.5.tgz", - "integrity": "sha512-zfETvRFA8o7EiNn++N5f/kaCw221hrpGsDmcpndVupkPzEc1Wuf3VgC0qby1BbHs7f5DVYjgtEU2LLh5bqeGfQ==", + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.6.tgz", + "integrity": "sha512-F/TKATkzseUExPlfvmwQKGITM3DGTK+vkAsCZoDc5daVygbJBnjEUCbgkAvVFsgfXfX4YIqZ/27G3k3tdXrTxQ==", "dev": true, "requires": { - "call-bind": "^1.0.7", + "call-bind": "^1.0.8", + "call-bound": "^1.0.4", "define-properties": "^1.2.1", - "es-abstract": "^1.23.2", + "es-abstract": "^1.23.9", "es-errors": "^1.3.0", - "es-object-atoms": "^1.0.0", - "es-shim-unscopables": "^1.0.2" + "es-object-atoms": "^1.1.1", + "es-shim-unscopables": "^1.1.0" } }, "array.prototype.flat": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.2.tgz", - "integrity": "sha512-djYB+Zx2vLewY8RWlNCUdHjDXs2XOgm602S9E7P/UpHgfeHL00cRiIF+IN/G/aUJ7kGPb6yO/ErDI5V2s8iycA==", + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.3.tgz", + "integrity": "sha512-rwG/ja1neyLqCuGZ5YYrznA62D4mZXg0i1cIskIUKSiqF3Cje9/wXAls9B9s1Wa2fomMsIv8czB8jZcPmxCXFg==", "dev": true, "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1", - "es-shim-unscopables": "^1.0.0" + "call-bind": "^1.0.8", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.5", + "es-shim-unscopables": "^1.0.2" } }, "array.prototype.flatmap": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.2.tgz", - "integrity": "sha512-Ewyx0c9PmpcsByhSW4r+9zDU7sGjFc86qf/kKtuSCRdhfbk0SNLLkaT5qvcHnRGgc5NP/ly/y+qkXkqONX54CQ==", + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.3.tgz", + "integrity": "sha512-Y7Wt51eKJSyi80hFrJCePGGNo5ktJCslFuboqJsbf57CCPcm5zztluPlc4/aD8sWsKvlwatezpV4U1efk8kpjg==", "dev": true, "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1", - "es-shim-unscopables": "^1.0.0" + "call-bind": "^1.0.8", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.5", + "es-shim-unscopables": "^1.0.2" } }, "arraybuffer.prototype.slice": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.3.tgz", - "integrity": "sha512-bMxMKAjg13EBSVscxTaYA4mRc5t1UAXa2kXiGTNfZ079HIWXEkKmkgFrh/nJqamaLSrXO5H4WFFkPEaLJWbs3A==", + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.4.tgz", + "integrity": "sha512-BNoCY6SXXPQ7gF2opIP4GBE+Xw7U+pHMYKuzjgCN3GwiaIR09UUeKfheyIry77QtrCBlC0KK0q5/TER/tYh3PQ==", "dev": true, "requires": { "array-buffer-byte-length": "^1.0.1", - "call-bind": "^1.0.5", + "call-bind": "^1.0.8", "define-properties": "^1.2.1", - "es-abstract": "^1.22.3", - "es-errors": "^1.2.1", - "get-intrinsic": "^1.2.3", - "is-array-buffer": "^3.0.4", - "is-shared-array-buffer": "^1.0.2" + "es-abstract": "^1.23.5", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.6", + "is-array-buffer": "^3.0.4" } }, "assertion-error": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-1.1.0.tgz", - "integrity": "sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==" + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-2.0.1.tgz", + "integrity": "sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA==" + }, + "async-function": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/async-function/-/async-function-1.0.0.tgz", + "integrity": "sha512-hsU18Ae8CDTR6Kgu9DYf0EbCr/a5iGL0rytQDobUcdpYOKokk8LEjVphnXkDkgpi0wYVsqrXuP0bZxJaTqdgoA==", + "dev": true }, "available-typed-arrays": { "version": "1.0.7", @@ -14707,9 +15916,9 @@ "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==" }, "bl": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/bl/-/bl-6.1.0.tgz", - "integrity": "sha512-ClDyJGQkc8ZtzdAAbAwBmhMSpwN/sC9HA8jxdYm6nVUbCfZbe2mgza4qh7AuEYyEPB/c4Kznf9s66bnsKMQDjw==", + "version": "6.1.4", + "resolved": "https://registry.npmjs.org/bl/-/bl-6.1.4.tgz", + "integrity": "sha512-ZV/9asSuknOExbM/zPPA8z00lc1ihPKWaStHkkQrxHNeYx+yY+TmF+v80dpv2G0mv3HVXBu7ryoAsxbFFhf4eg==", "requires": { "@types/readable-stream": "^4.0.0", "buffer": "^6.0.3", @@ -14723,12 +15932,13 @@ "integrity": "sha512-AlcaJBi/pqqJBIQ8U9Mcpc9i8Aqxn88Skv5d+xBX006BY5u8N3mGLHa5Lgppa7L/HfwgwLgZ6NYs+Ag6uUmJRA==" }, "brace-expansion": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", - "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", + "version": "1.1.12", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", + "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==", "dev": true, "requires": { - "balanced-match": "^1.0.0" + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" } }, "braces": { @@ -14740,6 +15950,17 @@ "fill-range": "^7.1.1" } }, + "broker-factory": { + "version": "3.1.10", + "resolved": "https://registry.npmjs.org/broker-factory/-/broker-factory-3.1.10.tgz", + "integrity": "sha512-BzqK5GYFhvVFvO13uzPN0SCiOsOQuhMUbsGvTXDJMA2/N4GvIlFdxEuueE+60Zk841bBU5G3+fl2cqYEo0wgGg==", + "requires": { + "@babel/runtime": "^7.28.4", + "fast-unique-numbers": "^9.0.24", + "tslib": "^2.8.1", + "worker-factory": "^7.0.46" + } + }, "buffer": { "version": "6.0.3", "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", @@ -14761,16 +15982,15 @@ "dev": true }, "call-bind": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.7.tgz", - "integrity": "sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==", + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.8.tgz", + "integrity": "sha512-oKlSFMcMwpUg2ednkhQ454wfWiU/ul3CkJe/PEHcTKuiX6RpbehUiFMXu13HalGZxfUwCQzZG747YXBn1im9ww==", "dev": true, "requires": { + "call-bind-apply-helpers": "^1.0.0", "es-define-property": "^1.0.0", - "es-errors": "^1.3.0", - "function-bind": "^1.1.2", "get-intrinsic": "^1.2.4", - "set-function-length": "^1.2.1" + "set-function-length": "^1.2.2" } }, "call-bind-apply-helpers": { @@ -14800,17 +16020,15 @@ "dev": true }, "chai": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/chai/-/chai-4.5.0.tgz", - "integrity": "sha512-RITGBfijLkBddZvnn8jdqoTypxvqbOLYQkGGxXzeFjVHvudaPw0HNFD9x928/eUwYWd2dPCugVqspGALTZZQKw==", + "version": "5.3.3", + "resolved": "https://registry.npmjs.org/chai/-/chai-5.3.3.tgz", + "integrity": "sha512-4zNhdJD/iOjSH0A05ea+Ke6MU5mmpQcbQsSOkgdaUMJ9zTlDTD/GYlwohmIE2u0gaxHYiVHEn1Fw9mZ/ktJWgw==", "requires": { - "assertion-error": "^1.1.0", - "check-error": "^1.0.3", - "deep-eql": "^4.1.3", - "get-func-name": "^2.0.2", - "loupe": "^2.3.6", - "pathval": "^1.1.1", - "type-detect": "^4.1.0" + "assertion-error": "^2.0.1", + "check-error": "^2.1.1", + "deep-eql": "^5.0.1", + "loupe": "^3.1.0", + "pathval": "^2.0.0" } }, "chalk": { @@ -14824,12 +16042,9 @@ } }, "check-error": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/check-error/-/check-error-1.0.3.tgz", - "integrity": "sha512-iKEoDYaRmd1mxM90a2OEfWhjsjPpYPuQ+lMYsoxB126+t8fw7ySEO48nmDg5COTjxDI65/Y2OWpeEHk3ZOe8zg==", - "requires": { - "get-func-name": "^2.0.2" - } + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/check-error/-/check-error-2.1.1.tgz", + "integrity": "sha512-OAlb+T7V4Op9OwdkjmguYRqncdlx5JiofwOAUkmTF+jNdHwzTaTs4sRAGpzLF3oOz5xAyDGrPgeIDFQmDOTiJw==" }, "chokidar": { "version": "4.0.1", @@ -14939,34 +16154,34 @@ "dev": true }, "data-view-buffer": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/data-view-buffer/-/data-view-buffer-1.0.1.tgz", - "integrity": "sha512-0lht7OugA5x3iJLOWFhWK/5ehONdprk0ISXqVFn/NFrDu+cuc8iADFrGQz5BnRK7LLU3JmkbXSxaqX+/mXYtUA==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/data-view-buffer/-/data-view-buffer-1.0.2.tgz", + "integrity": "sha512-EmKO5V3OLXh1rtK2wgXRansaK1/mtVdTUEiEI0W8RkvgT05kfxaH29PliLnpLP73yYO6142Q72QNa8Wx/A5CqQ==", "dev": true, "requires": { - "call-bind": "^1.0.6", + "call-bound": "^1.0.3", "es-errors": "^1.3.0", - "is-data-view": "^1.0.1" + "is-data-view": "^1.0.2" } }, "data-view-byte-length": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/data-view-byte-length/-/data-view-byte-length-1.0.1.tgz", - "integrity": "sha512-4J7wRJD3ABAzr8wP+OcIcqq2dlUKp4DVflx++hs5h5ZKydWMI6/D/fAot+yh6g2tHh8fLFTvNOaVN357NvSrOQ==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/data-view-byte-length/-/data-view-byte-length-1.0.2.tgz", + "integrity": "sha512-tuhGbE6CfTM9+5ANGf+oQb72Ky/0+s3xKUpHvShfiz2RxMFgFPjsXuRLBVMtvMs15awe45SRb83D6wH4ew6wlQ==", "dev": true, "requires": { - "call-bind": "^1.0.7", + "call-bound": "^1.0.3", "es-errors": "^1.3.0", - "is-data-view": "^1.0.1" + "is-data-view": "^1.0.2" } }, "data-view-byte-offset": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/data-view-byte-offset/-/data-view-byte-offset-1.0.0.tgz", - "integrity": "sha512-t/Ygsytq+R995EJ5PZlD4Cu56sWa8InXySaViRzw9apusqsOO2bQP+SbYzAhR0pFKoB+43lYy8rWban9JSuXnA==", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/data-view-byte-offset/-/data-view-byte-offset-1.0.1.tgz", + "integrity": "sha512-BS8PfmtDGnrgYdOonGZQdLZslWIeCGFP9tpan0hi1Co2Zr2NKADsvGYA8XxuG/4UWgJ6Cjtv+YJnB6MM69QGlQ==", "dev": true, "requires": { - "call-bind": "^1.0.6", + "call-bound": "^1.0.2", "es-errors": "^1.3.0", "is-data-view": "^1.0.1" } @@ -14997,12 +16212,9 @@ } }, "deep-eql": { - "version": "4.1.4", - "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-4.1.4.tgz", - "integrity": "sha512-SUwdGfqdKOwxCPeVYjwSyRpJ7Z+fhpwIAtmCUdZIWZ/YP5R9WAsyuSgpLVDi9bjWoN2LXHNss/dk3urXtdQxGg==", - "requires": { - "type-detect": "^4.0.0" - } + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-5.0.2.tgz", + "integrity": "sha512-h5k/5U50IJJFpzfL6nO9jaaumfjO/f2NjK/oYB2Djzm4p9L+3T9qWpZqZ2hAbLPuuYq9wrU08WQyBTL5GbPk5Q==" }, "deep-is": { "version": "0.1.4", @@ -15010,6 +16222,12 @@ "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", "dev": true }, + "deepmerge": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz", + "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==", + "dev": true + }, "deferred-leveldown": { "version": "5.3.0", "resolved": "https://registry.npmjs.org/deferred-leveldown/-/deferred-leveldown-5.3.0.tgz", @@ -15084,9 +16302,9 @@ "integrity": "sha512-IayShXAgj/QMXgB0IWmKx+rOPuGMhqm5w6jvFxmVenXKIzRqTAAsbBPT3kWQeGANj3jGgvcvv4yK6SxqYmikgw==" }, "dns-over-http-resolver": { - "version": "3.0.15", - "resolved": "https://registry.npmjs.org/dns-over-http-resolver/-/dns-over-http-resolver-3.0.15.tgz", - "integrity": "sha512-h2Ldu6b8LjW725Q5zjjv7T5s1K3dPjlU3DWvcEFqB3Ksb3QmqC4dHhPKlGlBS/1P47D4T5arZMiE4dD4OIfO6A==", + "version": "3.0.16", + "resolved": "https://registry.npmjs.org/dns-over-http-resolver/-/dns-over-http-resolver-3.0.16.tgz", + "integrity": "sha512-Qnq8HhNRuMnA61pf1lVPlStCAv1BVrraCx0umPESWgYKf995tUMF5oNhW59PKdnf7E8d5yqwHlEoFywXjsNMCw==", "requires": { "quick-lru": "^7.0.0", "weald": "^1.0.2" @@ -15138,57 +16356,65 @@ } }, "es-abstract": { - "version": "1.23.3", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.23.3.tgz", - "integrity": "sha512-e+HfNH61Bj1X9/jLc5v1owaLYuHdeHHSQlkhCBiTK8rBvKaULl/beGMxwrMXjpYrv4pz22BlY570vVePA2ho4A==", + "version": "1.24.0", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.24.0.tgz", + "integrity": "sha512-WSzPgsdLtTcQwm4CROfS5ju2Wa1QQcVeT37jFjYzdFz1r9ahadC8B8/a4qxJxM+09F18iumCdRmlr96ZYkQvEg==", "dev": true, "requires": { - "array-buffer-byte-length": "^1.0.1", - "arraybuffer.prototype.slice": "^1.0.3", + "array-buffer-byte-length": "^1.0.2", + "arraybuffer.prototype.slice": "^1.0.4", "available-typed-arrays": "^1.0.7", - "call-bind": "^1.0.7", - "data-view-buffer": "^1.0.1", - "data-view-byte-length": "^1.0.1", - "data-view-byte-offset": "^1.0.0", - "es-define-property": "^1.0.0", + "call-bind": "^1.0.8", + "call-bound": "^1.0.4", + "data-view-buffer": "^1.0.2", + "data-view-byte-length": "^1.0.2", + "data-view-byte-offset": "^1.0.1", + "es-define-property": "^1.0.1", "es-errors": "^1.3.0", - "es-object-atoms": "^1.0.0", - "es-set-tostringtag": "^2.0.3", - "es-to-primitive": "^1.2.1", - "function.prototype.name": "^1.1.6", - "get-intrinsic": "^1.2.4", - "get-symbol-description": "^1.0.2", - "globalthis": "^1.0.3", - "gopd": "^1.0.1", + "es-object-atoms": "^1.1.1", + "es-set-tostringtag": "^2.1.0", + "es-to-primitive": "^1.3.0", + "function.prototype.name": "^1.1.8", + "get-intrinsic": "^1.3.0", + "get-proto": "^1.0.1", + "get-symbol-description": "^1.1.0", + "globalthis": "^1.0.4", + "gopd": "^1.2.0", "has-property-descriptors": "^1.0.2", - "has-proto": "^1.0.3", - "has-symbols": "^1.0.3", + "has-proto": "^1.2.0", + "has-symbols": "^1.1.0", "hasown": "^2.0.2", - "internal-slot": "^1.0.7", - "is-array-buffer": "^3.0.4", + "internal-slot": "^1.1.0", + "is-array-buffer": "^3.0.5", "is-callable": "^1.2.7", - "is-data-view": "^1.0.1", + "is-data-view": "^1.0.2", "is-negative-zero": "^2.0.3", - "is-regex": "^1.1.4", - "is-shared-array-buffer": "^1.0.3", - "is-string": "^1.0.7", - "is-typed-array": "^1.1.13", - "is-weakref": "^1.0.2", - "object-inspect": "^1.13.1", + "is-regex": "^1.2.1", + "is-set": "^2.0.3", + "is-shared-array-buffer": "^1.0.4", + "is-string": "^1.1.1", + "is-typed-array": "^1.1.15", + "is-weakref": "^1.1.1", + "math-intrinsics": "^1.1.0", + "object-inspect": "^1.13.4", "object-keys": "^1.1.1", - "object.assign": "^4.1.5", - "regexp.prototype.flags": "^1.5.2", - "safe-array-concat": "^1.1.2", - "safe-regex-test": "^1.0.3", - "string.prototype.trim": "^1.2.9", - "string.prototype.trimend": "^1.0.8", + "object.assign": "^4.1.7", + "own-keys": "^1.0.1", + "regexp.prototype.flags": "^1.5.4", + "safe-array-concat": "^1.1.3", + "safe-push-apply": "^1.0.0", + "safe-regex-test": "^1.1.0", + "set-proto": "^1.0.0", + "stop-iteration-iterator": "^1.1.0", + "string.prototype.trim": "^1.2.10", + "string.prototype.trimend": "^1.0.9", "string.prototype.trimstart": "^1.0.8", - "typed-array-buffer": "^1.0.2", - "typed-array-byte-length": "^1.0.1", - "typed-array-byte-offset": "^1.0.2", - "typed-array-length": "^1.0.6", - "unbox-primitive": "^1.0.2", - "which-typed-array": "^1.1.15" + "typed-array-buffer": "^1.0.3", + "typed-array-byte-length": "^1.0.3", + "typed-array-byte-offset": "^1.0.4", + "typed-array-length": "^1.0.7", + "unbox-primitive": "^1.1.0", + "which-typed-array": "^1.1.19" } }, "es-define-property": { @@ -15213,34 +16439,35 @@ } }, "es-set-tostringtag": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.3.tgz", - "integrity": "sha512-3T8uNMC3OQTHkFUsFq8r/BwAXLHvU/9O9mE0fBc/MY5iq/8H7ncvO947LmYA6ldWw9Uh8Yhf25zu6n7nML5QWQ==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz", + "integrity": "sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==", "dev": true, "requires": { - "get-intrinsic": "^1.2.4", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.6", "has-tostringtag": "^1.0.2", - "hasown": "^2.0.1" + "hasown": "^2.0.2" } }, "es-shim-unscopables": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.0.2.tgz", - "integrity": "sha512-J3yBRXCzDu4ULnQwxyToo/OjdMx6akgVC7K6few0a7F/0wLtmKKN7I73AH5T2836UuXRqN7Qg+IIUw/+YJksRw==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.1.0.tgz", + "integrity": "sha512-d9T8ucsEhh8Bi1woXCf+TIKDIROLG5WCkxg8geBCbvk22kzwC5G2OnXVMO6FUsvQlgUUXQ2itephWDLqDzbeCw==", "dev": true, "requires": { - "hasown": "^2.0.0" + "hasown": "^2.0.2" } }, "es-to-primitive": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", - "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.3.0.tgz", + "integrity": "sha512-w+5mJ3GuFL+NjVtJlvydShqE1eN3h3PbI7/5LAsYJP/2qtuMXjfL2LpHSRqo4b4eSF5K/DH1JXKUAHSB2UW50g==", "dev": true, "requires": { - "is-callable": "^1.1.4", - "is-date-object": "^1.0.1", - "is-symbol": "^1.0.2" + "is-callable": "^1.2.7", + "is-date-object": "^1.0.5", + "is-symbol": "^1.0.4" } }, "esbuild": { @@ -15287,9 +16514,9 @@ } }, "esbuild-svelte": { - "version": "0.9.2", - "resolved": "https://registry.npmjs.org/esbuild-svelte/-/esbuild-svelte-0.9.2.tgz", - "integrity": "sha512-8Jq6+rh+g1E2mkBOZKdYZ8JtlbtDq2Fydwvn+/cBvUX9S0cdKv6AISZcEbErKQ0TpLC/Cv04l1vKaqXOBO8+VQ==", + "version": "0.9.3", + "resolved": "https://registry.npmjs.org/esbuild-svelte/-/esbuild-svelte-0.9.3.tgz", + "integrity": "sha512-CgEcGY1r/d16+aggec3czoFBEBaYIrFOnMxpsO6fWNaNEqHregPN5DLAPZDqrL7rXDNplW+WMu8s3GMq9FqgJA==", "dev": true, "requires": { "@jridgewell/trace-mapping": "^0.3.19" @@ -15307,24 +16534,23 @@ "dev": true }, "eslint": { - "version": "9.31.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.31.0.tgz", - "integrity": "sha512-QldCVh/ztyKJJZLr4jXNUByx3gR+TDYZCRXEktiZoUR3PGy4qCmSbkxcIle8GEwGpb5JBZazlaJ/CxLidXdEbQ==", + "version": "9.38.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.38.0.tgz", + "integrity": "sha512-t5aPOpmtJcZcz5UJyY2GbvpDlsK5E8JqRqoKtfiKE3cNh437KIqfJr3A3AKf5k64NPx6d0G3dno6XDY05PqPtw==", "dev": true, "requires": { - "@eslint-community/eslint-utils": "^4.2.0", + "@eslint-community/eslint-utils": "^4.8.0", "@eslint-community/regexpp": "^4.12.1", - "@eslint/config-array": "^0.21.0", - "@eslint/config-helpers": "^0.3.0", - "@eslint/core": "^0.15.0", + "@eslint/config-array": "^0.21.1", + "@eslint/config-helpers": "^0.4.1", + "@eslint/core": "^0.16.0", "@eslint/eslintrc": "^3.3.1", - "@eslint/js": "9.31.0", - "@eslint/plugin-kit": "^0.3.1", + "@eslint/js": "9.38.0", + "@eslint/plugin-kit": "^0.4.0", "@humanfs/node": "^0.16.6", "@humanwhocodes/module-importer": "^1.0.1", "@humanwhocodes/retry": "^0.4.2", "@types/estree": "^1.0.6", - "@types/json-schema": "^7.0.15", "ajv": "^6.12.4", "chalk": "^4.0.0", "cross-spawn": "^7.0.6", @@ -15349,16 +16575,6 @@ "optionator": "^0.9.3" }, "dependencies": { - "brace-expansion": { - "version": "1.1.12", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", - "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==", - "dev": true, - "requires": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, "eslint-visitor-keys": { "version": "4.2.1", "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.1.tgz", @@ -15399,9 +16615,9 @@ } }, "eslint-module-utils": { - "version": "2.12.0", - "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.12.0.tgz", - "integrity": "sha512-wALZ0HFoytlyh/1+4wuZ9FJCD/leWHQzzrxJ8+rebyReSLk7LApMyd3WJaLVoN+D5+WIdJyDK1c6JnE65V4Zyg==", + "version": "2.12.1", + "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.12.1.tgz", + "integrity": "sha512-L8jSWTze7K2mTg0vos/RuLRS5soomksDPoJLXIslC7c8Wmut3bx7CPpJijDcBZtxQ5lrbUdM+s0OlNbz0DCDNw==", "dev": true, "requires": { "debug": "^3.2.7" @@ -15419,42 +16635,32 @@ } }, "eslint-plugin-import": { - "version": "2.31.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.31.0.tgz", - "integrity": "sha512-ixmkI62Rbc2/w8Vfxyh1jQRTdRTF52VxwRVHl/ykPAmqG+Nb7/kNn+byLP0LxPgI7zWA16Jt82SybJInmMia3A==", + "version": "2.32.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.32.0.tgz", + "integrity": "sha512-whOE1HFo/qJDyX4SnXzP4N6zOWn79WhnCUY/iDR0mPfQZO8wcYE4JClzI2oZrhBnnMUCBCHZhO6VQyoBU95mZA==", "dev": true, "requires": { "@rtsao/scc": "^1.1.0", - "array-includes": "^3.1.8", - "array.prototype.findlastindex": "^1.2.5", - "array.prototype.flat": "^1.3.2", - "array.prototype.flatmap": "^1.3.2", + "array-includes": "^3.1.9", + "array.prototype.findlastindex": "^1.2.6", + "array.prototype.flat": "^1.3.3", + "array.prototype.flatmap": "^1.3.3", "debug": "^3.2.7", "doctrine": "^2.1.0", "eslint-import-resolver-node": "^0.3.9", - "eslint-module-utils": "^2.12.0", + "eslint-module-utils": "^2.12.1", "hasown": "^2.0.2", - "is-core-module": "^2.15.1", + "is-core-module": "^2.16.1", "is-glob": "^4.0.3", "minimatch": "^3.1.2", "object.fromentries": "^2.0.8", "object.groupby": "^1.0.3", - "object.values": "^1.2.0", + "object.values": "^1.2.1", "semver": "^6.3.1", - "string.prototype.trimend": "^1.0.8", + "string.prototype.trimend": "^1.0.9", "tsconfig-paths": "^3.15.0" }, "dependencies": { - "brace-expansion": { - "version": "1.1.12", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", - "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==", - "dev": true, - "requires": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, "debug": { "version": "3.2.7", "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", @@ -15491,22 +16697,29 @@ } }, "eslint-plugin-svelte": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-svelte/-/eslint-plugin-svelte-3.6.0.tgz", - "integrity": "sha512-IIf6Cj6yQuCwL7Qd8bX13BZspz+DQsOkClozMF9EkW20FSxI75Ndd5ZzbviCn32DdXRo9FUWXn+YMIL46qPOOg==", + "version": "3.12.5", + "resolved": "https://registry.npmjs.org/eslint-plugin-svelte/-/eslint-plugin-svelte-3.12.5.tgz", + "integrity": "sha512-4KRG84eAHQfYd9OjZ1K7sCHy0nox+9KwT+s5WCCku3jTim5RV4tVENob274nCwIaApXsYPKAUAZFBxKZ3Wyfjw==", "dev": true, "requires": { - "@eslint-community/eslint-utils": "^4.4.1", + "@eslint-community/eslint-utils": "^4.6.1", "@jridgewell/sourcemap-codec": "^1.5.0", "esutils": "^2.0.3", - "known-css-properties": "^0.36.0", + "globals": "^16.0.0", + "known-css-properties": "^0.37.0", "postcss": "^8.4.49", "postcss-load-config": "^3.1.4", "postcss-safe-parser": "^7.0.0", "semver": "^7.6.3", - "svelte-eslint-parser": "^1.1.1" + "svelte-eslint-parser": "^1.4.0" }, "dependencies": { + "globals": { + "version": "16.5.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-16.5.0.tgz", + "integrity": "sha512-c/c15i26VrJ4IRt5Z89DnIzCGDn9EcebibhAOjw5ibqEHsE1wLUgkPn9RDmNcUKyU87GeaL633nyJ+pplFR2ZQ==", + "dev": true + }, "lilconfig": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.1.0.tgz", @@ -15582,9 +16795,9 @@ } }, "esrap": { - "version": "1.4.6", - "resolved": "https://registry.npmjs.org/esrap/-/esrap-1.4.6.tgz", - "integrity": "sha512-F/D2mADJ9SHY3IwksD4DAXjTt7qt7GWUf3/8RhCNWmC/67tyb55dpimHmy7EplakFaflV0R/PC+fdSPqrRHAQw==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/esrap/-/esrap-2.1.0.tgz", + "integrity": "sha512-yzmPNpl7TBbMRC5Lj2JlJZNPml0tzqoqP5B1JXycNUwtqma9AKCO0M2wHrdgsHcy1WRW7S9rJknAMtByg3usgA==", "dev": true, "requires": { "@jridgewell/sourcemap-codec": "^1.4.15" @@ -15674,12 +16887,12 @@ "dev": true }, "fast-unique-numbers": { - "version": "8.0.13", - "resolved": "https://registry.npmjs.org/fast-unique-numbers/-/fast-unique-numbers-8.0.13.tgz", - "integrity": "sha512-7OnTFAVPefgw2eBJ1xj2PGGR9FwYzSUso9decayHgCDX4sJkHLdcsYTytTg+tYv+wKF3U8gJuSBz2jJpQV4u/g==", + "version": "9.0.24", + "resolved": "https://registry.npmjs.org/fast-unique-numbers/-/fast-unique-numbers-9.0.24.tgz", + "integrity": "sha512-Dv0BYn4waOWse94j16rsZ5w/0zoaCa74O3q6IZjMqaXbtT92Q+Sb6pPk+phGzD8Xh+nueQmSRI3tSCaHKidzKw==", "requires": { - "@babel/runtime": "^7.23.8", - "tslib": "^2.6.2" + "@babel/runtime": "^7.28.4", + "tslib": "^2.8.1" } }, "fast-xml-parser": { @@ -15762,25 +16975,25 @@ } }, "firebase": { - "version": "12.2.1", - "resolved": "https://registry.npmjs.org/firebase/-/firebase-12.2.1.tgz", - "integrity": "sha512-UkuW2ZYaq/QuOQ24bfaqmkVqoBFhkA/ptATfPuRtc5vdm+zhwc3mfZBwFe6LqH9yrCN/6rAblgxKz2/0tDvA7w==", + "version": "12.4.0", + "resolved": "https://registry.npmjs.org/firebase/-/firebase-12.4.0.tgz", + "integrity": "sha512-/chNgDQ6ppPPGOQO4jctxOa/5JeQxuhaxA7Y90K0I+n/wPfoO8mRveedhVUdo7ExLcWUivnnow/ouSLYSI5Icw==", "requires": { - "@firebase/ai": "2.2.1", - "@firebase/analytics": "0.10.18", - "@firebase/analytics-compat": "0.2.24", - "@firebase/app": "0.14.2", + "@firebase/ai": "2.4.0", + "@firebase/analytics": "0.10.19", + "@firebase/analytics-compat": "0.2.25", + "@firebase/app": "0.14.4", "@firebase/app-check": "0.11.0", "@firebase/app-check-compat": "0.4.0", - "@firebase/app-compat": "0.5.2", + "@firebase/app-compat": "0.5.4", "@firebase/app-types": "0.9.3", "@firebase/auth": "1.11.0", "@firebase/auth-compat": "0.6.0", "@firebase/data-connect": "0.3.11", "@firebase/database": "1.1.0", "@firebase/database-compat": "2.1.0", - "@firebase/firestore": "4.9.1", - "@firebase/firestore-compat": "0.4.1", + "@firebase/firestore": "4.9.2", + "@firebase/firestore-compat": "0.4.2", "@firebase/functions": "0.13.1", "@firebase/functions-compat": "0.4.1", "@firebase/installations": "0.6.19", @@ -15789,8 +17002,8 @@ "@firebase/messaging-compat": "0.2.23", "@firebase/performance": "0.7.9", "@firebase/performance-compat": "0.2.22", - "@firebase/remote-config": "0.6.6", - "@firebase/remote-config-compat": "0.2.19", + "@firebase/remote-config": "0.7.0", + "@firebase/remote-config-compat": "0.2.20", "@firebase/storage": "0.14.0", "@firebase/storage-compat": "0.4.0", "@firebase/util": "1.13.0" @@ -15813,12 +17026,12 @@ "dev": true }, "for-each": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", - "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==", + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.5.tgz", + "integrity": "sha512-dKx12eRCVIzqCxFGplyFKJMPvLEWgmNtUrpTiJIR5u97zEhRG8ySrtboPHZXx7daLxQVrl643cTzbab2tkQjxg==", "dev": true, "requires": { - "is-callable": "^1.1.3" + "is-callable": "^1.2.7" } }, "foreground-child": { @@ -15845,15 +17058,17 @@ "dev": true }, "function.prototype.name": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.6.tgz", - "integrity": "sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg==", + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.8.tgz", + "integrity": "sha512-e5iwyodOHhbMr/yNrc7fDYG4qlbIvI5gajyzPnb5TCwyhjApznQh1BMFou9b30SevY43gCJKXycoCBjMbsuW0Q==", "dev": true, "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1", - "functions-have-names": "^1.2.3" + "call-bind": "^1.0.8", + "call-bound": "^1.0.3", + "define-properties": "^1.2.1", + "functions-have-names": "^1.2.3", + "hasown": "^2.0.2", + "is-callable": "^1.2.7" } }, "functional-red-black-tree": { @@ -15868,6 +17083,12 @@ "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==", "dev": true }, + "generator-function": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/generator-function/-/generator-function-2.0.1.tgz", + "integrity": "sha512-SFdFmIJi+ybC0vjlHN0ZGVGHc3lgE0DxPAT0djjVg+kjOnSqclqmj0KQ7ykTOLP6YxoqOvuAODGdcHJn+43q3g==", + "dev": true + }, "get-caller-file": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", @@ -15912,14 +17133,14 @@ } }, "get-symbol-description": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.2.tgz", - "integrity": "sha512-g0QYk1dZBxGwk+Ngc+ltRH2IBp2f7zBkBMBJZCDerh6EhlhSR6+9irMCuT/09zD6qkarHUSn529sK/yL4S27mg==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.1.0.tgz", + "integrity": "sha512-w9UMqWwJxHNOvoNzSJ2oPF5wvYcvP7jUvYzhp67yEhTi17ZDBBC1z9pTdGuzjD+EFIqLSYRweZjqfiPzQ06Ebg==", "dev": true, "requires": { - "call-bind": "^1.0.5", + "call-bound": "^1.0.3", "es-errors": "^1.3.0", - "get-intrinsic": "^1.2.4" + "get-intrinsic": "^1.2.6" } }, "get-tsconfig": { @@ -15961,12 +17182,13 @@ "dev": true }, "globalthis": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.3.tgz", - "integrity": "sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==", + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.4.tgz", + "integrity": "sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==", "dev": true, "requires": { - "define-properties": "^1.1.3" + "define-properties": "^1.2.1", + "gopd": "^1.0.1" } }, "gopd": { @@ -15982,9 +17204,9 @@ "dev": true }, "has-bigints": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz", - "integrity": "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.1.0.tgz", + "integrity": "sha512-R3pbpkcIqv2Pm3dUwgjclDRVmWpTJW2DcMzcIhEXEx1oh/CEMObMm3KLmRJOdvhM7o4uQBnwr8pzRK2sJWIqfg==", "dev": true }, "has-flag": { @@ -16003,10 +17225,13 @@ } }, "has-proto": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.3.tgz", - "integrity": "sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==", - "dev": true + "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, + "requires": { + "dunder-proto": "^1.0.0" + } }, "has-symbols": { "version": "1.1.0", @@ -16063,9 +17288,9 @@ "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==" }, "ignore": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.1.tgz", - "integrity": "sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw==", + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", + "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==", "dev": true }, "immediate": { @@ -16110,52 +17335,62 @@ "integrity": "sha512-+WvfEZnFUhRwFxgz+QCQi7UC6o9AM0EHM9bpIe2Nhqb100NHCsTvNAn4eJgvgV2/tmLo1MP9nGxQKEcZTAueLA==" }, "internal-slot": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.7.tgz", - "integrity": "sha512-NGnrKwXzSms2qUUih/ILZ5JBqNTSa1+ZmP6flaIp6KmSElgE9qdndzS3cqjrDovwFdmwsGsLdeFgB6suw+1e9g==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.1.0.tgz", + "integrity": "sha512-4gd7VpWNQNB4UKKCFFVcp1AVv+FMOgs9NKzjHKusc8jTMhd5eL1NqQqOpE0KzMds804/yHlglp3uxgluOqAPLw==", "dev": true, "requires": { "es-errors": "^1.3.0", - "hasown": "^2.0.0", - "side-channel": "^1.0.4" + "hasown": "^2.0.2", + "side-channel": "^1.1.0" } }, "ip-address": { - "version": "9.0.5", - "resolved": "https://registry.npmjs.org/ip-address/-/ip-address-9.0.5.tgz", - "integrity": "sha512-zHtQzGojZXTwZTHQqra+ETKd4Sn3vgi7uBmlPoXVWZqYvuKmtI0l/VZTjqGmJY9x88GGOaZ9+G9ES8hC4T4X8g==", - "requires": { - "jsbn": "1.1.0", - "sprintf-js": "^1.1.3" - } + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/ip-address/-/ip-address-10.0.1.tgz", + "integrity": "sha512-NWv9YLW4PoW2B7xtzaS3NCot75m6nK7Icdv0o3lfMceJVRfSoQwqD4wEH5rLwoKJwUiZ/rfpiVBhnaF0FK4HoA==" }, "is-array-buffer": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.4.tgz", - "integrity": "sha512-wcjaerHw0ydZwfhiKbXJWLDY8A7yV7KhjQOpb83hGgGfId/aQa4TOvwyzn2PuswW2gPCYEL/nEAiSVpdOj1lXw==", + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.5.tgz", + "integrity": "sha512-DDfANUiiG2wC1qawP66qlTugJeL5HyzMpfr8lLK+jMQirGzNod0B12cFB/9q838Ru27sBwfw78/rdoU7RERz6A==", "dev": true, "requires": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.2.1" + "call-bind": "^1.0.8", + "call-bound": "^1.0.3", + "get-intrinsic": "^1.2.6" + } + }, + "is-async-function": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-async-function/-/is-async-function-2.1.1.tgz", + "integrity": "sha512-9dgM/cZBnNvjzaMYHVoxxfPj2QXt22Ev7SuuPrs+xav0ukGB0S6d4ydZdEiM48kLx5kDV+QBPrpVnFyefL8kkQ==", + "dev": true, + "requires": { + "async-function": "^1.0.0", + "call-bound": "^1.0.3", + "get-proto": "^1.0.1", + "has-tostringtag": "^1.0.2", + "safe-regex-test": "^1.1.0" } }, "is-bigint": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz", - "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.1.0.tgz", + "integrity": "sha512-n4ZT37wG78iz03xPRKJrHTdZbe3IicyucEtdRsV5yglwc3GyUfbAfpSeD0FJ41NbUNSt5wbhqfp1fS+BgnvDFQ==", "dev": true, "requires": { - "has-bigints": "^1.0.1" + "has-bigints": "^1.0.2" } }, "is-boolean-object": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz", - "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==", + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.2.2.tgz", + "integrity": "sha512-wa56o2/ElJMYqjCjGkXri7it5FbebW5usLw/nPmCMs5DeZ7eziSYZhSmPRn0txqeW4LnAmQQU7FgqLpsEFKM4A==", "dev": true, "requires": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" + "call-bound": "^1.0.3", + "has-tostringtag": "^1.0.2" } }, "is-callable": { @@ -16165,30 +17400,33 @@ "dev": true }, "is-core-module": { - "version": "2.15.1", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.15.1.tgz", - "integrity": "sha512-z0vtXSwucUJtANQWldhbtbt7BnL0vxiFjIdDLAatwhDYty2bad6s+rijD6Ri4YuYJubLzIJLUidCh09e1djEVQ==", + "version": "2.16.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.16.1.tgz", + "integrity": "sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==", "dev": true, "requires": { "hasown": "^2.0.2" } }, "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, "requires": { + "call-bound": "^1.0.2", + "get-intrinsic": "^1.2.6", "is-typed-array": "^1.1.13" } }, "is-date-object": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", - "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.1.0.tgz", + "integrity": "sha512-PwwhEakHVKTdRNVOw+/Gyh0+MzlCl4R6qKvkhuvLtPMggI1WAHt9sOwZxQLSGpUaDnrdyDsomoRgNnCfKNSXXg==", "dev": true, "requires": { - "has-tostringtag": "^1.0.0" + "call-bound": "^1.0.2", + "has-tostringtag": "^1.0.2" } }, "is-electron": { @@ -16202,11 +17440,33 @@ "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", "dev": true }, + "is-finalizationregistry": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-finalizationregistry/-/is-finalizationregistry-1.1.1.tgz", + "integrity": "sha512-1pC6N8qWJbWoPtEjgcL2xyhQOP491EQjeUo3qTKcmV8YSDDJrOepfG8pcC7h/QgnQHYSv0mJ3Z/ZWxmatVrysg==", + "dev": true, + "requires": { + "call-bound": "^1.0.3" + } + }, "is-fullwidth-code-point": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==" }, + "is-generator-function": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.1.2.tgz", + "integrity": "sha512-upqt1SkGkODW9tsGNG5mtXTXtECizwtS2kA161M+gJPc1xdb/Ax629af6YrTwcOeQHbewrPNlE5Dx7kzvXTizA==", + "dev": true, + "requires": { + "call-bound": "^1.0.4", + "generator-function": "^2.0.0", + "get-proto": "^1.0.1", + "has-tostringtag": "^1.0.2", + "safe-regex-test": "^1.1.0" + } + }, "is-glob": { "version": "4.0.3", "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", @@ -16221,6 +17481,12 @@ "resolved": "https://registry.npmjs.org/is-loopback-addr/-/is-loopback-addr-2.0.2.tgz", "integrity": "sha512-26POf2KRCno/KTNL5Q0b/9TYnL00xEsSaLfiFRmjM7m7Lw7ZMmFybzzuX4CcsLAluZGd+niLUiMRxEooVE3aqg==" }, + "is-map": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/is-map/-/is-map-2.0.3.tgz", + "integrity": "sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw==", + "dev": true + }, "is-negative-zero": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.3.tgz", @@ -16228,9 +17494,9 @@ "dev": true }, "is-network-error": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-network-error/-/is-network-error-1.1.0.tgz", - "integrity": "sha512-tUdRRAnhT+OtCZR/LxZelH/C7QtjtFrTu5tXCA8pl55eTUElUHT+GPYV8MBMBvea/j+NxQqVt3LbWMRir7Gx9g==" + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/is-network-error/-/is-network-error-1.3.0.tgz", + "integrity": "sha512-6oIwpsgRfnDiyEDLMay/GqCl3HoAtH5+RUKW29gYkL0QA+ipzpDLA16yQs7/RHCSu+BwgbJaOUqa4A99qNVQVw==" }, "is-number": { "version": "7.0.0", @@ -16239,12 +17505,13 @@ "dev": true }, "is-number-object": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz", - "integrity": "sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.1.1.tgz", + "integrity": "sha512-lZhclumE1G6VYD8VHe35wFaIif+CTy5SJIi5+3y4psDgWu4wPDoBhF8NxUOinEc7pHgiTsT6MaBb92rKhhD+Xw==", "dev": true, "requires": { - "has-tostringtag": "^1.0.0" + "call-bound": "^1.0.3", + "has-tostringtag": "^1.0.2" } }, "is-plain-obj": { @@ -16262,58 +17529,85 @@ } }, "is-regex": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", - "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", + "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, "requires": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" + "call-bound": "^1.0.2", + "gopd": "^1.2.0", + "has-tostringtag": "^1.0.2", + "hasown": "^2.0.2" } }, + "is-set": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/is-set/-/is-set-2.0.3.tgz", + "integrity": "sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg==", + "dev": true + }, "is-shared-array-buffer": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.3.tgz", - "integrity": "sha512-nA2hv5XIhLR3uVzDDfCIknerhx8XUKnstuOERPNNIinXG7v9u+ohXF67vxm4TPTEPU6lm61ZkwP3c9PCB97rhg==", + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.4.tgz", + "integrity": "sha512-ISWac8drv4ZGfwKl5slpHG9OwPNty4jOWPRIhBpxOoD+hqITiwuipOQ2bNthAzwA3B4fIjO4Nln74N0S9byq8A==", "dev": true, "requires": { - "call-bind": "^1.0.7" + "call-bound": "^1.0.3" } }, "is-string": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", - "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.1.1.tgz", + "integrity": "sha512-BtEeSsoaQjlSPBemMQIrY1MY0uM6vnS1g5fmufYOtnxLGUZM2178PKbhsk7Ffv58IX+ZtcvoGwccYsh0PglkAA==", "dev": true, "requires": { - "has-tostringtag": "^1.0.0" + "call-bound": "^1.0.3", + "has-tostringtag": "^1.0.2" } }, "is-symbol": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", - "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.1.1.tgz", + "integrity": "sha512-9gGx6GTtCQM73BgmHQXfDmLtfjjTUDSyoxTCbp5WtoixAhfgsDirWIcVQ/IHpvI5Vgd5i/J5F7B9cN/WlVbC/w==", "dev": true, "requires": { - "has-symbols": "^1.0.2" + "call-bound": "^1.0.2", + "has-symbols": "^1.1.0", + "safe-regex-test": "^1.1.0" } }, "is-typed-array": { - "version": "1.1.13", - "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.13.tgz", - "integrity": "sha512-uZ25/bUAlUY5fR4OKT4rZQEBrzQWYV9ZJYGGsUmEJ6thodVJ1HX64ePQ6Z0qPWP+m+Uq6e9UugrE38jeYsDSMw==", + "version": "1.1.15", + "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.15.tgz", + "integrity": "sha512-p3EcsicXjit7SaskXHs1hA91QxgTw46Fv6EFKKGS5DRFLD8yKnohjF3hxoju94b/OcMZoQukzpPpBE9uLVKzgQ==", "dev": true, "requires": { - "which-typed-array": "^1.1.14" + "which-typed-array": "^1.1.16" } }, + "is-weakmap": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-weakmap/-/is-weakmap-2.0.2.tgz", + "integrity": "sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w==", + "dev": true + }, "is-weakref": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz", - "integrity": "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.1.1.tgz", + "integrity": "sha512-6i9mGWSlqzNMEqpCp93KwRS1uUOodk2OJ6b+sq7ZPDSy2WuI5NFIxp/254TytR8ftefexkWn5xNiHUNpPOfSew==", "dev": true, "requires": { - "call-bind": "^1.0.2" + "call-bound": "^1.0.3" + } + }, + "is-weakset": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/is-weakset/-/is-weakset-2.0.4.tgz", + "integrity": "sha512-mfcwb6IzQyOKTs84CQMrOwW4gQcaTOAWJ0zzJCl2WSPDrWk/OzDaImWFH3djXhb24g4eudZfLRozAvPGw4d9hQ==", + "dev": true, + "requires": { + "call-bound": "^1.0.3", + "get-intrinsic": "^1.2.6" } }, "isarray": { @@ -16334,12 +17628,14 @@ "integrity": "sha512-fz1oJJ36ciGnu2LntAlE6SA97bFZpW7Rnt0uEc1yazzR2nKokZLr8lIRtgnpex4NsmaBcvHF+Z9krljWFy/mmg==" }, "it-byte-stream": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/it-byte-stream/-/it-byte-stream-1.1.1.tgz", - "integrity": "sha512-OIOb8PvK9ZV7MHvyxIDNyN3jmrxrJdx99G0RIYYb3Tzo1OWv+O1C6mfg7nnlDuuTQz2POYFXe87AShKAEl+POw==", + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/it-byte-stream/-/it-byte-stream-2.0.3.tgz", + "integrity": "sha512-h7FFcn4DWiWsJw1dCJhuPdiY8cGi1z8g4aLAfFspTaJbwQxvEMlEBFG/f8lIVGwM8YK26ClM4/9lxLVhF33b8g==", "requires": { - "it-queueless-pushable": "^1.0.0", + "abort-error": "^1.0.1", + "it-queueless-pushable": "^2.0.0", "it-stream-types": "^2.0.2", + "race-signal": "^1.1.3", "uint8arraylist": "^2.4.8" } }, @@ -16356,11 +17652,6 @@ "it-peekable": "^3.0.0" } }, - "it-first": { - "version": "3.0.9", - "resolved": "https://registry.npmjs.org/it-first/-/it-first-3.0.9.tgz", - "integrity": "sha512-ZWYun273Gbl7CwiF6kK5xBtIKR56H1NoRaiJek2QzDirgen24u8XZ0Nk+jdnJSuCTPxC2ul1TuXKxu/7eK6NuA==" - }, "it-foreach": { "version": "2.1.4", "resolved": "https://registry.npmjs.org/it-foreach/-/it-foreach-2.1.4.tgz", @@ -16370,9 +17661,9 @@ } }, "it-length-prefixed": { - "version": "9.1.1", - "resolved": "https://registry.npmjs.org/it-length-prefixed/-/it-length-prefixed-9.1.1.tgz", - "integrity": "sha512-O88nBweT6M9ozsmok68/auKH7ik/slNM4pYbM9lrfy2z5QnpokW5SlrepHZDKtN71llhG2sZvd6uY4SAl+lAQg==", + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/it-length-prefixed/-/it-length-prefixed-10.0.1.tgz", + "integrity": "sha512-BhyluvGps26u9a7eQIpOI1YN7mFgi8lFwmiPi07whewbBARKAG9LE09Odc8s1Wtbt2MB6rNUrl7j9vvfXTJwdQ==", "requires": { "it-reader": "^6.0.1", "it-stream-types": "^2.0.1", @@ -16382,11 +17673,12 @@ } }, "it-length-prefixed-stream": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/it-length-prefixed-stream/-/it-length-prefixed-stream-1.2.1.tgz", - "integrity": "sha512-FYqlxc2toUoK+aPO5r3KDBIUG1mOvk2DzmjQcsfLUTHRWMJP4Va9855tVzg/22Bj+VUUaT7gxBg7HmbiCxTK4w==", + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/it-length-prefixed-stream/-/it-length-prefixed-stream-2.0.3.tgz", + "integrity": "sha512-Ns3jNFy2mcFnV59llCYitJnFHapg8wIcOsWkEaAwOkG9v4HBCk24nze/zGDQjiJdDTyFXTT5GOY3M/uaksot3w==", "requires": { - "it-byte-stream": "^1.0.0", + "abort-error": "^1.0.1", + "it-byte-stream": "^2.0.0", "it-stream-types": "^2.0.2", "uint8-varint": "^2.0.4", "uint8arraylist": "^2.4.8" @@ -16406,18 +17698,6 @@ "integrity": "sha512-nnnFSUxKlkZVZD7c0jYw6rDxCcAQYcMsFj27thf7KkDhpj0EA0g9KHPxbFzHuDoc6US2EPS/MtplkNj8sbCx4Q==", "requires": { "it-queueless-pushable": "^2.0.0" - }, - "dependencies": { - "it-queueless-pushable": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/it-queueless-pushable/-/it-queueless-pushable-2.0.2.tgz", - "integrity": "sha512-2BqIt7XvDdgEgudLAdJkdseAwbVSBc0yAd8yPVHrll4eBuJPWIj9+8C3OIxzEKwhswLtd3bi+yLrzgw9gCyxMA==", - "requires": { - "abort-error": "^1.0.1", - "p-defer": "^4.0.1", - "race-signal": "^1.1.3" - } - } } }, "it-pair": { @@ -16461,42 +17741,6 @@ "it-length-prefixed-stream": "^2.0.0", "it-stream-types": "^2.0.2", "uint8arraylist": "^2.4.8" - }, - "dependencies": { - "it-byte-stream": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/it-byte-stream/-/it-byte-stream-2.0.3.tgz", - "integrity": "sha512-h7FFcn4DWiWsJw1dCJhuPdiY8cGi1z8g4aLAfFspTaJbwQxvEMlEBFG/f8lIVGwM8YK26ClM4/9lxLVhF33b8g==", - "requires": { - "abort-error": "^1.0.1", - "it-queueless-pushable": "^2.0.0", - "it-stream-types": "^2.0.2", - "race-signal": "^1.1.3", - "uint8arraylist": "^2.4.8" - } - }, - "it-length-prefixed-stream": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/it-length-prefixed-stream/-/it-length-prefixed-stream-2.0.3.tgz", - "integrity": "sha512-Ns3jNFy2mcFnV59llCYitJnFHapg8wIcOsWkEaAwOkG9v4HBCk24nze/zGDQjiJdDTyFXTT5GOY3M/uaksot3w==", - "requires": { - "abort-error": "^1.0.1", - "it-byte-stream": "^2.0.0", - "it-stream-types": "^2.0.2", - "uint8-varint": "^2.0.4", - "uint8arraylist": "^2.4.8" - } - }, - "it-queueless-pushable": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/it-queueless-pushable/-/it-queueless-pushable-2.0.2.tgz", - "integrity": "sha512-2BqIt7XvDdgEgudLAdJkdseAwbVSBc0yAd8yPVHrll4eBuJPWIj9+8C3OIxzEKwhswLtd3bi+yLrzgw9gCyxMA==", - "requires": { - "abort-error": "^1.0.1", - "p-defer": "^4.0.1", - "race-signal": "^1.1.3" - } - } } }, "it-pushable": { @@ -16520,10 +17764,11 @@ } }, "it-queueless-pushable": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/it-queueless-pushable/-/it-queueless-pushable-1.0.2.tgz", - "integrity": "sha512-BFIm48C4O8+i+oVEPQpZ70+CaAsVUircvZtZCrpG2Q64933aLp+tDmas1mTBwqVBfIUUlg09d+e6SWW1CBuykQ==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/it-queueless-pushable/-/it-queueless-pushable-2.0.2.tgz", + "integrity": "sha512-2BqIt7XvDdgEgudLAdJkdseAwbVSBc0yAd8yPVHrll4eBuJPWIj9+8C3OIxzEKwhswLtd3bi+yLrzgw9gCyxMA==", "requires": { + "abort-error": "^1.0.1", "p-defer": "^4.0.1", "race-signal": "^1.1.3" } @@ -16595,11 +17840,6 @@ "argparse": "^2.0.1" } }, - "jsbn": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-1.1.0.tgz", - "integrity": "sha512-4bYVV3aAMtDTTu4+xsDYa6sy9GyJ69/amsu9sYF2zqjiEoZA5xJi3BrfX3uY+/IekIu7MwdObdbDWpoZdBv3/A==" - }, "json-buffer": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", @@ -16637,9 +17877,9 @@ } }, "known-css-properties": { - "version": "0.36.0", - "resolved": "https://registry.npmjs.org/known-css-properties/-/known-css-properties-0.36.0.tgz", - "integrity": "sha512-A+9jP+IUmuQsNdsLdcg6Yt7voiMF/D4K83ew0OpJtpu+l34ef7LaohWV0Rc6KNvzw6ZDizkqfyB5JznZnzuKQA==", + "version": "0.37.0", + "resolved": "https://registry.npmjs.org/known-css-properties/-/known-css-properties-0.37.0.tgz", + "integrity": "sha512-JCDrsP4Z1Sb9JwG0aJ8Eo2r7k4Ou5MwmThS/6lcIe1ICyb7UBJKGRIUUdqc2ASdE/42lgz6zFUnzAIhtXnBVrQ==", "dev": true }, "level-codec": { @@ -16735,24 +17975,24 @@ } }, "libp2p": { - "version": "2.10.0", - "resolved": "https://registry.npmjs.org/libp2p/-/libp2p-2.10.0.tgz", - "integrity": "sha512-tgDz7YuGg1XX7UfxebCUii+IGsly/8V0ZRZdFJSDySY2i3UuqpCTsEbRApH3cBKFhcAf00nx9xj8GL9zfo+XWw==", + "version": "2.8.11", + "resolved": "https://registry.npmjs.org/libp2p/-/libp2p-2.8.11.tgz", + "integrity": "sha512-EjkyN0CI6uP+e4OOkEcZvhbZtlwFl4Y0rkkMvDbXmcfILX4E4n/jKE4Ppoc1qhNufxToxVWCMDS2ipniQgiYaw==", "requires": { "@chainsafe/is-ip": "^2.1.0", "@chainsafe/netmask": "^2.0.0", - "@libp2p/crypto": "^5.1.8", - "@libp2p/interface": "^2.11.0", - "@libp2p/interface-internal": "^2.3.19", - "@libp2p/logger": "^5.2.0", - "@libp2p/multistream-select": "^6.0.29", - "@libp2p/peer-collections": "^6.0.35", - "@libp2p/peer-id": "^5.1.9", - "@libp2p/peer-store": "^11.2.7", - "@libp2p/utils": "^6.7.2", + "@libp2p/crypto": "^5.1.6", + "@libp2p/interface": "^2.10.4", + "@libp2p/interface-internal": "^2.3.17", + "@libp2p/logger": "^5.1.20", + "@libp2p/multistream-select": "^6.0.27", + "@libp2p/peer-collections": "^6.0.33", + "@libp2p/peer-id": "^5.1.7", + "@libp2p/peer-store": "^11.2.5", + "@libp2p/utils": "^6.7.0", "@multiformats/dns": "^1.0.6", "@multiformats/multiaddr": "^12.4.4", - "@multiformats/multiaddr-matcher": "^2.0.0", + "@multiformats/multiaddr-matcher": "^1.7.2", "any-signal": "^4.1.1", "datastore-core": "^10.0.2", "interface-datastore": "^8.3.1", @@ -16767,38 +18007,6 @@ "race-event": "^1.3.0", "race-signal": "^1.1.3", "uint8arrays": "^5.1.0" - }, - "dependencies": { - "@multiformats/multiaddr-matcher": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/@multiformats/multiaddr-matcher/-/multiaddr-matcher-2.0.2.tgz", - "integrity": "sha512-si7EZCI93mfBJKKRkh+u2bB9W6W5APVN3XfdwuseEJ0OS7ysg0Jno9SuAi0bRzsl5OEFESoF71SjsRqgp8PXAA==", - "requires": { - "@multiformats/multiaddr": "^12.0.0" - } - }, - "it-byte-stream": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/it-byte-stream/-/it-byte-stream-2.0.3.tgz", - "integrity": "sha512-h7FFcn4DWiWsJw1dCJhuPdiY8cGi1z8g4aLAfFspTaJbwQxvEMlEBFG/f8lIVGwM8YK26ClM4/9lxLVhF33b8g==", - "requires": { - "abort-error": "^1.0.1", - "it-queueless-pushable": "^2.0.0", - "it-stream-types": "^2.0.2", - "race-signal": "^1.1.3", - "uint8arraylist": "^2.4.8" - } - }, - "it-queueless-pushable": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/it-queueless-pushable/-/it-queueless-pushable-2.0.2.tgz", - "integrity": "sha512-2BqIt7XvDdgEgudLAdJkdseAwbVSBc0yAd8yPVHrll4eBuJPWIj9+8C3OIxzEKwhswLtd3bi+yLrzgw9gCyxMA==", - "requires": { - "abort-error": "^1.0.1", - "p-defer": "^4.0.1", - "race-signal": "^1.1.3" - } - } } }, "lilconfig": { @@ -16822,11 +18030,21 @@ "p-locate": "^5.0.0" } }, + "lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" + }, "lodash.camelcase": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz", "integrity": "sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==" }, + "lodash.debounce": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", + "integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==" + }, "lodash.merge": { "version": "4.6.2", "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", @@ -16839,12 +18057,9 @@ "integrity": "sha512-mNAgZ1GmyNhD7AuqnTG3/VQ26o760+ZYBPKjPvugO8+nLbYfX6TVpJPseBvopbdY+qpZ/lKUnmEc1LeZYS3QAA==" }, "loupe": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/loupe/-/loupe-2.3.7.tgz", - "integrity": "sha512-zSMINGVYkdpYSOBmLi0D1Uo7JU9nVdQKrHxC8eYlV+9YKK9WePqAlL7lSlorG/U2Fw1w0hTBmaa/jrQ3UbPHtA==", - "requires": { - "get-func-name": "^2.0.1" - } + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/loupe/-/loupe-3.2.1.tgz", + "integrity": "sha512-CdzqowRJCeLU72bHvWqwRBBlLcMEtIvGrlvef74kMnV2AolS9Y8xUv1I0U/MNAWMhBlKIoyuEgoJ0t/bbwHbLQ==" }, "lru-cache": { "version": "10.4.3", @@ -16916,21 +18131,6 @@ } } }, - "merge-options": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/merge-options/-/merge-options-3.0.4.tgz", - "integrity": "sha512-2Sug1+knBjkaMsMgf1ctR1Ujx+Ayku4EdJN4Z+C2+JzoeF7A3OZ9KM2GY0CpQS51NR61LTurMJrRKPhSs3ZRTQ==", - "requires": { - "is-plain-obj": "^2.1.0" - }, - "dependencies": { - "is-plain-obj": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", - "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==" - } - } - }, "merge2": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", @@ -16963,9 +18163,9 @@ } }, "minimatch": { - "version": "10.0.3", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.0.3.tgz", - "integrity": "sha512-IPZ167aShDZZUMdRk66cyQAW3qr0WzbHkPdMYa8bzZhlHhO3jALbKdxcaak7W9FfT2rZNpQuUu4Od7ILEpXSaw==", + "version": "10.1.1", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.1.1.tgz", + "integrity": "sha512-enIvLvRAFZYXJzkCYG5RKmPfrFArdLv+R+lbQ53BmIMLIry74bjKzX6iHAm8WYamJkhSSEabrWN5D97XnKObjQ==", "requires": { "@isaacs/brace-expansion": "^5.0.0" } @@ -16998,13 +18198,15 @@ } }, "mqtt": { - "version": "5.13.1", - "resolved": "https://registry.npmjs.org/mqtt/-/mqtt-5.13.1.tgz", - "integrity": "sha512-g+4G+ma0UeL3Pgu1y1si2NHb4VLIEUCtF789WrG99lLG0XZyoab2EJoy58YgGSg/1yFdthDBH0+4llsZZD/vug==", + "version": "5.14.1", + "resolved": "https://registry.npmjs.org/mqtt/-/mqtt-5.14.1.tgz", + "integrity": "sha512-NxkPxE70Uq3Ph7goefQa7ggSsVzHrayCD0OyxlJgITN/EbzlZN+JEPmaAZdxP1LsIT5FamDyILoQTF72W7Nnbw==", "requires": { + "@types/readable-stream": "^4.0.21", + "@types/ws": "^8.18.1", "commist": "^3.2.0", "concat-stream": "^2.0.0", - "debug": "^4.4.0", + "debug": "^4.4.1", "help-me": "^5.0.0", "lru-cache": "^10.4.3", "minimist": "^1.2.8", @@ -17012,10 +18214,10 @@ "number-allocator": "^1.0.14", "readable-stream": "^4.7.0", "rfdc": "^1.4.1", - "socks": "^2.8.3", + "socks": "^2.8.6", "split2": "^4.2.0", - "worker-timers": "^7.1.8", - "ws": "^8.18.0" + "worker-timers": "^8.0.23", + "ws": "^8.18.3" } }, "mqtt-packet": { @@ -17040,14 +18242,14 @@ "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" }, "multiformats": { - "version": "13.3.6", - "resolved": "https://registry.npmjs.org/multiformats/-/multiformats-13.3.6.tgz", - "integrity": "sha512-yakbt9cPYj8d3vi/8o/XWm61MrOILo7fsTL0qxNx6zS0Nso6K5JqqS2WV7vK/KSuDBvrW3KfCwAdAgarAgOmww==" + "version": "13.4.1", + "resolved": "https://registry.npmjs.org/multiformats/-/multiformats-13.4.1.tgz", + "integrity": "sha512-VqO6OSvLrFVAYYjgsr8tyv62/rCQhPgsZUXLTqoFLSgdkgiUYKYeArbt1uWLlEpkjxQe+P0+sHlbPEte1Bi06Q==" }, "nanoid": { - "version": "3.3.8", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.8.tgz", - "integrity": "sha512-WNLf5Sd8oZxOm+TzppcYk8gVOgP+l58xNy58D0nbUnOxOWRWvlcCV4kUF7ltmI6PsrLl/BgKEyS4mqsGChFN0w==", + "version": "3.3.11", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.11.tgz", + "integrity": "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==", "dev": true }, "natural-compare": { @@ -17092,14 +18294,16 @@ "dev": true }, "object.assign": { - "version": "4.1.5", - "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.5.tgz", - "integrity": "sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ==", + "version": "4.1.7", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.7.tgz", + "integrity": "sha512-nK28WOo+QIjBkDduTINE4JkF/UJJKyf2EJxvJKfblDpyg0Q+pkOHNTL0Qwy6NP6FhE/EnzV73BxxqcJaXY9anw==", "dev": true, "requires": { - "call-bind": "^1.0.5", + "call-bind": "^1.0.8", + "call-bound": "^1.0.3", "define-properties": "^1.2.1", - "has-symbols": "^1.0.3", + "es-object-atoms": "^1.0.0", + "has-symbols": "^1.1.0", "object-keys": "^1.1.1" } }, @@ -17127,12 +18331,13 @@ } }, "object.values": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.2.0.tgz", - "integrity": "sha512-yBYjY9QX2hnRmZHAjG/f13MzmBzxzYgQhFrke06TTyKY5zSTEqkOeukBzIdVA3j3ulu8Qa3MbVFShV7T2RmGtQ==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.2.1.tgz", + "integrity": "sha512-gXah6aZrcUxjWg2zR2MwouP2eHlCBzdV4pygudehaKXSGW4v2AsRQUK+lwwXhii6KFZcunEnmSUoYp5CXibxtA==", "dev": true, "requires": { - "call-bind": "^1.0.7", + "call-bind": "^1.0.8", + "call-bound": "^1.0.3", "define-properties": "^1.2.1", "es-object-atoms": "^1.0.0" } @@ -17148,9 +18353,9 @@ } }, "octagonal-wheels": { - "version": "0.1.41", - "resolved": "https://registry.npmjs.org/octagonal-wheels/-/octagonal-wheels-0.1.41.tgz", - "integrity": "sha512-cIvdXsyiSCxknyxTwGrNnDKsaYpgZdXeKAy9cXIAk2Jy7T1z6bLjU4s5z47OySNPVPSr32x5r8hSz7hAYYv7qA==", + "version": "0.1.42", + "resolved": "https://registry.npmjs.org/octagonal-wheels/-/octagonal-wheels-0.1.42.tgz", + "integrity": "sha512-Hc2GWCtmG4+OzY9flY5vHjozUPuwsQoY7osG+I2QzACs8iTWrlAcw1re8FgU4vDC/to9rFogWfYWI8bNbr5j2w==", "requires": { "idb": "^8.0.3" } @@ -17169,6 +18374,17 @@ "type-check": "^0.4.0" } }, + "own-keys": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/own-keys/-/own-keys-1.0.1.tgz", + "integrity": "sha512-qFOyK5PjiWZd+QQIh+1jhdb9LpxTF0qs7Pm8o5QHYZ0M3vKqSqzsZaEB6oWlxZ+q2sJBMI/Ktgd2N5ZwQoRHfg==", + "dev": true, + "requires": { + "get-intrinsic": "^1.2.6", + "object-keys": "^1.1.1", + "safe-push-apply": "^1.0.0" + } + }, "p-defer": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/p-defer/-/p-defer-4.0.1.tgz", @@ -17201,12 +18417,19 @@ } }, "p-queue": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/p-queue/-/p-queue-8.1.0.tgz", - "integrity": "sha512-mxLDbbGIBEXTJL0zEx8JIylaj3xQ7Z/7eEVjcF9fJX4DBiH9oqe+oahYnlKKxm0Ci9TlWTyhSHgygxMxjIB2jw==", + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/p-queue/-/p-queue-9.0.0.tgz", + "integrity": "sha512-KO1RyxstL9g1mK76530TExamZC/S2Glm080Nx8PE5sTd7nlduDQsAfEl4uXX+qZjLiwvDauvzXavufy3+rJ9zQ==", "requires": { "eventemitter3": "^5.0.1", - "p-timeout": "^6.1.2" + "p-timeout": "^7.0.0" + }, + "dependencies": { + "p-timeout": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-7.0.1.tgz", + "integrity": "sha512-AxTM2wDGORHGEkPCt8yqxOTMgpfbEHqF51f/5fJCmwFC3C/zNcGT63SymH2ttOAaiIws2zVg4+izQCjrakcwHg==" + } } }, "p-retry": { @@ -17282,9 +18505,9 @@ } }, "pathval": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/pathval/-/pathval-1.1.1.tgz", - "integrity": "sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==" + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/pathval/-/pathval-2.0.1.tgz", + "integrity": "sha512-//nshmD55c46FuFw26xV/xFAaB5HF9Xdap7HJBBnrKdAd6/GxDBaNA1870O79+9ueg61cZLSVc+OaFlfmObYVQ==" }, "picocolors": { "version": "1.1.1", @@ -17347,18 +18570,18 @@ } }, "possible-typed-array-names": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/possible-typed-array-names/-/possible-typed-array-names-1.0.0.tgz", - "integrity": "sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/possible-typed-array-names/-/possible-typed-array-names-1.1.0.tgz", + "integrity": "sha512-/+5VFTchJDoVj3bhoqi6UeymcD00DAwb1nJwamzPvHEszJ4FpF6SNNbUbOS8yI56qHzdV8eK0qEfOSiodkTdxg==", "dev": true }, "postcss": { - "version": "8.5.3", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.3.tgz", - "integrity": "sha512-dle9A3yYxlBSrt8Fu+IpjGT8SY8hN0mlaA6GY8t0P5PjIOZemULz/E2Bnm/2dcUOena75OTNkHI76uZBNUUq3A==", + "version": "8.5.6", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.6.tgz", + "integrity": "sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==", "dev": true, "requires": { - "nanoid": "^3.3.8", + "nanoid": "^3.3.11", "picocolors": "^1.1.1", "source-map-js": "^1.2.1" } @@ -17716,9 +18939,9 @@ } }, "protons-runtime": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/protons-runtime/-/protons-runtime-5.5.0.tgz", - "integrity": "sha512-EsALjF9QsrEk6gbCx3lmfHxVN0ah7nG3cY7GySD4xf4g8cr7g543zB88Foh897Sr1RQJ9yDCUsoT1i1H/cVUFA==", + "version": "5.6.0", + "resolved": "https://registry.npmjs.org/protons-runtime/-/protons-runtime-5.6.0.tgz", + "integrity": "sha512-/Kde+sB9DsMFrddJT/UZWe6XqvL7SL5dbag/DBCElFKhkwDj7XKt53S+mzLyaDP5OqS0wXjV5SA572uWDaT0Hg==", "requires": { "uint8-varint": "^2.0.2", "uint8arraylist": "^2.4.3", @@ -17761,14 +18984,17 @@ "dev": true }, "quick-lru": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-7.0.1.tgz", - "integrity": "sha512-kLjThirJMkWKutUKbZ8ViqFc09tDQhlbQo2MNuVeLWbRauqYP96Sm6nzlQ24F0HFjUNZ4i9+AgldJ9H6DZXi7g==" + "version": "7.3.0", + "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-7.3.0.tgz", + "integrity": "sha512-k9lSsjl36EJdK7I06v7APZCbyGT2vMTsYSRX1Q2nbYmnkBqgUhRkAuzH08Ciotteu/PLJmIF2+tti7o3C/ts2g==" }, "race-event": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/race-event/-/race-event-1.3.0.tgz", - "integrity": "sha512-kaLm7axfOnahIqD3jQ4l1e471FIFcEGebXEnhxyLscuUzV8C94xVHtWEqDDXxll7+yu/6lW0w1Ff4HbtvHvOHg==" + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/race-event/-/race-event-1.6.1.tgz", + "integrity": "sha512-vi7WH5g5KoTFpu2mme/HqZiWH14XSOtg5rfp6raBskBHl7wnmy3F/biAIyY5MsK+BHWhoPhxtZ1Y2R7OHHaWyQ==", + "requires": { + "abort-error": "^1.0.1" + } }, "race-signal": { "version": "1.1.3", @@ -17793,16 +19019,34 @@ "integrity": "sha512-yDMz9g+VaZkqBYS/ozoBJwaBhTbZo3UNYQHNRw1D3UFQB8oHB4uS/tAODO+ZLjGWmUbKnIlOWO+aaIiAxrUWHA==", "dev": true }, - "regexp.prototype.flags": { - "version": "1.5.2", - "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.2.tgz", - "integrity": "sha512-NcDiDkTLuPR+++OCKB0nWafEmhg/Da8aUPLPMQbK+bxKKCm1/S5he+AqYa4PlMCVBalb4/yxIRub6qkEx5yJbw==", + "reflect.getprototypeof": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/reflect.getprototypeof/-/reflect.getprototypeof-1.0.10.tgz", + "integrity": "sha512-00o4I+DVrefhv+nX0ulyi3biSHCPDe+yLv5o/p6d/UVlirijB8E16FtfwSAi4g3tcqrQ4lRAqQSoFEZJehYEcw==", "dev": true, "requires": { - "call-bind": "^1.0.6", + "call-bind": "^1.0.8", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.9", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0", + "get-intrinsic": "^1.2.7", + "get-proto": "^1.0.1", + "which-builtin-type": "^1.2.1" + } + }, + "regexp.prototype.flags": { + "version": "1.5.4", + "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.4.tgz", + "integrity": "sha512-dYqgNSZbDwkaJ2ceRd9ojCGjBq+mOm9LmtXnAnEGyHhN/5R7iDW2TRw3h+o/jCFxus3P2LfWIIiwowAjANm7IA==", + "dev": true, + "requires": { + "call-bind": "^1.0.8", "define-properties": "^1.2.1", "es-errors": "^1.3.0", - "set-function-name": "^2.0.1" + "get-proto": "^1.0.1", + "gopd": "^1.2.0", + "set-function-name": "^2.0.2" } }, "require-directory": { @@ -17855,6 +19099,39 @@ "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.4.1.tgz", "integrity": "sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA==" }, + "rollup": { + "version": "4.52.5", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.52.5.tgz", + "integrity": "sha512-3GuObel8h7Kqdjt0gxkEzaifHTqLVW56Y/bjN7PSQtkKr0w3V/QYSdt6QWYtd7A1xUtYQigtdUfgj1RvWVtorw==", + "dev": true, + "peer": true, + "requires": { + "@rollup/rollup-android-arm-eabi": "4.52.5", + "@rollup/rollup-android-arm64": "4.52.5", + "@rollup/rollup-darwin-arm64": "4.52.5", + "@rollup/rollup-darwin-x64": "4.52.5", + "@rollup/rollup-freebsd-arm64": "4.52.5", + "@rollup/rollup-freebsd-x64": "4.52.5", + "@rollup/rollup-linux-arm-gnueabihf": "4.52.5", + "@rollup/rollup-linux-arm-musleabihf": "4.52.5", + "@rollup/rollup-linux-arm64-gnu": "4.52.5", + "@rollup/rollup-linux-arm64-musl": "4.52.5", + "@rollup/rollup-linux-loong64-gnu": "4.52.5", + "@rollup/rollup-linux-ppc64-gnu": "4.52.5", + "@rollup/rollup-linux-riscv64-gnu": "4.52.5", + "@rollup/rollup-linux-riscv64-musl": "4.52.5", + "@rollup/rollup-linux-s390x-gnu": "4.52.5", + "@rollup/rollup-linux-x64-gnu": "4.52.5", + "@rollup/rollup-linux-x64-musl": "4.52.5", + "@rollup/rollup-openharmony-arm64": "4.52.5", + "@rollup/rollup-win32-arm64-msvc": "4.52.5", + "@rollup/rollup-win32-ia32-msvc": "4.52.5", + "@rollup/rollup-win32-x64-gnu": "4.52.5", + "@rollup/rollup-win32-x64-msvc": "4.52.5", + "@types/estree": "1.0.8", + "fsevents": "~2.3.2" + } + }, "run-parallel": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", @@ -17874,14 +19151,15 @@ } }, "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, "requires": { - "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" } }, @@ -17890,15 +19168,25 @@ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==" }, - "safe-regex-test": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.3.tgz", - "integrity": "sha512-CdASjNJPvRa7roO6Ra/gLYBTzYzzPyyBXxIMdGW3USQLyjWEls2RgW5UBTXaQVp+OrpeCK3bLem8smtmheoRuw==", + "safe-push-apply": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/safe-push-apply/-/safe-push-apply-1.0.0.tgz", + "integrity": "sha512-iKE9w/Z7xCzUMIZqdBsp6pEQvwuEebH4vdpjcDWnyzaI6yl6O9FHvVpmGelvEHNsoY6wGblkxR6Zty/h00WiSA==", "dev": true, "requires": { - "call-bind": "^1.0.6", "es-errors": "^1.3.0", - "is-regex": "^1.1.4" + "isarray": "^2.0.5" + } + }, + "safe-regex-test": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.1.0.tgz", + "integrity": "sha512-x/+Cz4YrimQxQccJf5mKEbIa1NzeCRNI5Ecl/ekmlYaampdNLPalVyIcCZNNH3MvmqBugV5TMYZXv0ljslUlaw==", + "dev": true, + "requires": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "is-regex": "^1.2.1" } }, "semver": { @@ -17939,6 +19227,17 @@ "has-property-descriptors": "^1.0.2" } }, + "set-proto": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/set-proto/-/set-proto-1.0.0.tgz", + "integrity": "sha512-RJRdvCo6IAnPdsvP/7m6bsQqNnn1FCBX5ZNtFL98MmFF/4xAIJTIg1YbHW5DC2W5SKZanrC6i4HsJqlajw/dZw==", + "dev": true, + "requires": { + "dunder-proto": "^1.0.1", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0" + } + }, "shebang-command": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", @@ -18014,11 +19313,11 @@ "integrity": "sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==" }, "socks": { - "version": "2.8.4", - "resolved": "https://registry.npmjs.org/socks/-/socks-2.8.4.tgz", - "integrity": "sha512-D3YaD0aRxR3mEcqnidIs7ReYJFVzWdd6fXJYUM8ixcQcJRGTka/b3saV0KflYhyVJXKhb947GndU35SxYNResQ==", + "version": "2.8.7", + "resolved": "https://registry.npmjs.org/socks/-/socks-2.8.7.tgz", + "integrity": "sha512-HLpt+uLy/pxB+bum/9DzAgiKS8CX1EvbWxI4zlmgGCExImLdiad2iCwXT5Z4c9c3Eq8rP2318mPW2c+QbtjK8A==", "requires": { - "ip-address": "^9.0.5", + "ip-address": "^10.0.1", "smart-buffer": "^4.2.0" } }, @@ -18055,10 +19354,15 @@ "resolved": "https://registry.npmjs.org/split2/-/split2-4.2.0.tgz", "integrity": "sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg==" }, - "sprintf-js": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.1.3.tgz", - "integrity": "sha512-Oo+0REFV59/rz3gfJNKQiBlwfHaSESl1pcGyABQsnnIfWOFt6JNj5gCog2U6MLZ//IGYD+nA8nI+mTShREReaA==" + "stop-iteration-iterator": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/stop-iteration-iterator/-/stop-iteration-iterator-1.1.0.tgz", + "integrity": "sha512-eLoXW/DHyl62zxY4SCaIgnRhuMr6ri4juEYARS8E6sCEqzKpOiE521Ucofdx+KnDZl5xmvGYaaKCk5FEOxJCoQ==", + "dev": true, + "requires": { + "es-errors": "^1.3.0", + "internal-slot": "^1.1.0" + } }, "string_decoder": { "version": "1.3.0", @@ -18090,24 +19394,28 @@ } }, "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, "requires": { - "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" } }, "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, "requires": { - "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" } @@ -18217,12 +19525,12 @@ "dev": true }, "svelte": { - "version": "5.28.6", - "resolved": "https://registry.npmjs.org/svelte/-/svelte-5.28.6.tgz", - "integrity": "sha512-9qqr7mw8YR9PAnxGFfzCK6PUlNGtns7wVavrhnxyf3fpB1mP/Ol55Z2UnIapsSzNNl3k9qw7cZ22PdE8+xT/jQ==", + "version": "5.41.1", + "resolved": "https://registry.npmjs.org/svelte/-/svelte-5.41.1.tgz", + "integrity": "sha512-0a/huwc8e2es+7KFi70esqsReRfRbrT8h1cJSY/+z1lF0yKM6TT+//HYu28Yxstr50H7ifaqZRDGd0KuKDxP7w==", "dev": true, "requires": { - "@ampproject/remapping": "^2.3.0", + "@jridgewell/remapping": "^2.3.4", "@jridgewell/sourcemap-codec": "^1.5.0", "@sveltejs/acorn-typescript": "^1.0.5", "@types/estree": "^1.0.5", @@ -18231,7 +19539,7 @@ "axobject-query": "^4.1.0", "clsx": "^2.1.1", "esm-env": "^1.2.1", - "esrap": "^1.4.6", + "esrap": "^2.1.0", "is-reference": "^3.0.3", "locate-character": "^3.0.0", "magic-string": "^0.30.11", @@ -18239,9 +19547,9 @@ } }, "svelte-check": { - "version": "4.1.7", - "resolved": "https://registry.npmjs.org/svelte-check/-/svelte-check-4.1.7.tgz", - "integrity": "sha512-1jX4BzXrQJhC/Jt3SqYf6Ntu//vmfc6VWp07JkRfK2nn+22yIblspVUo96gzMkg0Zov8lQicxhxsMzOctwcMQQ==", + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/svelte-check/-/svelte-check-4.3.3.tgz", + "integrity": "sha512-RYP0bEwenDXzfv0P1sKAwjZSlaRyqBn0Fz1TVni58lqyEiqgwztTpmodJrGzP6ZT2aHl4MbTvWP6gbmQ3FOnBg==", "dev": true, "requires": { "@jridgewell/trace-mapping": "^0.3.25", @@ -18252,9 +19560,9 @@ }, "dependencies": { "fdir": { - "version": "6.4.0", - "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.4.0.tgz", - "integrity": "sha512-3oB133prH1o4j/L5lLW7uOCF1PlD+/It2L0eL/iAqWMB91RBbqTewABqxhj0ibBd90EEmWZq7ntIWzVaWcXTGQ==", + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz", + "integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==", "dev": true, "requires": {} }, @@ -18269,9 +19577,9 @@ } }, "svelte-eslint-parser": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/svelte-eslint-parser/-/svelte-eslint-parser-1.1.3.tgz", - "integrity": "sha512-DUc/z/vk+AFVoxGv54+BOBFqUrmUgNg2gSO2YqrE3OL6ro19/0azPmQj/4wN3s9RxuF5l7G0162q/Ddk4LJhZA==", + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/svelte-eslint-parser/-/svelte-eslint-parser-1.4.0.tgz", + "integrity": "sha512-fjPzOfipR5S7gQ/JvI9r2H8y9gMGXO3JtmrylHLLyahEMquXI0lrebcjT+9/hNgDej0H7abTyox5HpHmW1PSWA==", "dev": true, "requires": { "eslint-scope": "^8.2.0", @@ -18332,6 +19640,34 @@ } } }, + "tinyglobby": { + "version": "0.2.15", + "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.15.tgz", + "integrity": "sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==", + "dev": true, + "peer": true, + "requires": { + "fdir": "^6.5.0", + "picomatch": "^4.0.3" + }, + "dependencies": { + "fdir": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz", + "integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==", + "dev": true, + "peer": true, + "requires": {} + }, + "picomatch": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz", + "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==", + "dev": true, + "peer": true + } + } + }, "to-regex-range": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", @@ -18368,17 +19704,15 @@ } }, "trystero": { - "version": "git+ssh://git@github.com/vrtmrz/trystero.git#9e892a93ec14eeb57ce806d272fbb7c3935256d8", - "integrity": "sha512-LUlmTTSxgomyYvU1K05snl18+GLAxqO4W8P9lePLbRnZVJyGZUVXMM4/aW9384GtIf0VLJquloWqz9PriJZg2w==", - "from": "trystero@github:vrtmrz/trystero#9e892a93ec14eeb57ce806d272fbb7c3935256d8", + "version": "0.22.0", + "resolved": "https://registry.npmjs.org/trystero/-/trystero-0.22.0.tgz", + "integrity": "sha512-VscO7kaTFWNLmuxu1Au1kIxX6FzkVeXcL3+mhb9MaCSz8fm4T5MFWkdfDOujMtNK4iztupQ5AGEqGniP/I8Gvw==", "requires": { "@noble/secp256k1": "^3.0.0", - "@supabase/supabase-js": "^2.49.8", - "@waku/discovery": "^0.0.8", - "@waku/sdk": "^0.0.31", - "firebase": "^12.2.1", - "libp2p": "^2.8.8", - "mqtt": "^5.13.0" + "@supabase/supabase-js": "^2.75.0", + "@waku/sdk": "^0.0.35", + "firebase": "^12.4.0", + "mqtt": "^5.14.1" }, "dependencies": { "@noble/secp256k1": { @@ -18389,9 +19723,9 @@ } }, "ts-api-utils": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-2.0.1.tgz", - "integrity": "sha512-dnlgjFSVetynI8nzgJ+qF62efpglpWRk8isUEWZGWlJYySCTD6aKvbUDu+zbPeDakk3bg5H4XpitHukgfL1m9w==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-2.1.0.tgz", + "integrity": "sha512-CUgTZL1irw8u29bzrOD/nH85jqyc74D6SshFgujOIA7osm2Rz7dYH77agkx7H4FBNxDq7Cjf+IjaX/8zwFW+ZQ==", "dev": true, "requires": {} }, @@ -18413,9 +19747,9 @@ "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==" }, "tsx": { - "version": "4.19.4", - "resolved": "https://registry.npmjs.org/tsx/-/tsx-4.19.4.tgz", - "integrity": "sha512-gK5GVzDkJK1SI1zwHf32Mqxf2tSJkNx+eYcNly5+nHvWqXUJYUkWBQtKauoESz3ymezAI++ZwT855x5p5eop+Q==", + "version": "4.20.6", + "resolved": "https://registry.npmjs.org/tsx/-/tsx-4.20.6.tgz", + "integrity": "sha512-ytQKuwgmrrkDTFP4LjR0ToE2nqgy886GpvRSpU0JAnrdBYppuY5rLkRUYPU1yCryb24SsKBTL/hlDQAEFVwtZg==", "dev": true, "requires": { "esbuild": "~0.25.0", @@ -18438,55 +19772,56 @@ "integrity": "sha512-Acylog8/luQ8L7il+geoSxhEkazvkslg7PSNKOX59mbB9cOveP5aq9h74Y7YU8yDpJwetzQQrfIwtf4Wp4LKcw==" }, "typed-array-buffer": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.2.tgz", - "integrity": "sha512-gEymJYKZtKXzzBzM4jqa9w6Q1Jjm7x2d+sh19AdsD4wqnMPDYyvwpsIc2Q/835kHuo3BEQ7CjelGhfTsoBb2MQ==", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.3.tgz", + "integrity": "sha512-nAYYwfY3qnzX30IkA6AQZjVbtK6duGontcQm1WSG1MD94YLqK0515GNApXkoxKOWMusVssAHWLh9SeaoefYFGw==", "dev": true, "requires": { - "call-bind": "^1.0.7", + "call-bound": "^1.0.3", "es-errors": "^1.3.0", - "is-typed-array": "^1.1.13" + "is-typed-array": "^1.1.14" } }, "typed-array-byte-length": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.1.tgz", - "integrity": "sha512-3iMJ9q0ao7WE9tWcaYKIptkNBuOIcZCCT0d4MRvuuH88fEoEH62IuQe0OtraD3ebQEoTRk8XCBoknUNc1Y67pw==", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.3.tgz", + "integrity": "sha512-BaXgOuIxz8n8pIq3e7Atg/7s+DpiYrxn4vdot3w9KbnBhcRQq6o3xemQdIfynqSeXeDrF32x+WvfzmOjPiY9lg==", "dev": true, "requires": { - "call-bind": "^1.0.7", + "call-bind": "^1.0.8", "for-each": "^0.3.3", - "gopd": "^1.0.1", - "has-proto": "^1.0.3", - "is-typed-array": "^1.1.13" + "gopd": "^1.2.0", + "has-proto": "^1.2.0", + "is-typed-array": "^1.1.14" } }, "typed-array-byte-offset": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.2.tgz", - "integrity": "sha512-Ous0vodHa56FviZucS2E63zkgtgrACj7omjwd/8lTEMEPFFyjfixMZ1ZXenpgCFBBt4EC1J2XsyVS2gkG0eTFA==", + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.4.tgz", + "integrity": "sha512-bTlAFB/FBYMcuX81gbL4OcpH5PmlFHqlCCpAl8AlEzMz5k53oNDvN8p1PNOWLEmI2x4orp3raOFB51tv9X+MFQ==", "dev": true, "requires": { "available-typed-arrays": "^1.0.7", - "call-bind": "^1.0.7", + "call-bind": "^1.0.8", "for-each": "^0.3.3", - "gopd": "^1.0.1", - "has-proto": "^1.0.3", - "is-typed-array": "^1.1.13" + "gopd": "^1.2.0", + "has-proto": "^1.2.0", + "is-typed-array": "^1.1.15", + "reflect.getprototypeof": "^1.0.9" } }, "typed-array-length": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.6.tgz", - "integrity": "sha512-/OxDN6OtAk5KBpGb28T+HZc2M+ADtvRxXrKKbUwtsLgdoxgX13hyy7ek6bFRl5+aBs2yZzB0c4CnQfAtVypW/g==", + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.7.tgz", + "integrity": "sha512-3KS2b+kL7fsuk/eJZ7EQdnEmQoaho/r6KUef7hxvltNA5DR8NAUM+8wJMbJyZ4G9/7i3v5zPBIMN5aybAh2/Jg==", "dev": true, "requires": { "call-bind": "^1.0.7", "for-each": "^0.3.3", "gopd": "^1.0.1", - "has-proto": "^1.0.3", "is-typed-array": "^1.1.13", - "possible-typed-array-names": "^1.0.0" + "possible-typed-array-names": "^1.0.0", + "reflect.getprototypeof": "^1.0.6" } }, "typedarray": { @@ -18495,9 +19830,9 @@ "integrity": "sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==" }, "typescript": { - "version": "5.7.3", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.7.3.tgz", - "integrity": "sha512-84MVSjMEHP+FQRPy3pX9sTVV/INIex71s9TL2Gm5FG/WG1SqXeKyZ0k7/blY/4FdOzI12CBy1vGc4og/eus0fw==", + "version": "5.9.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.9.3.tgz", + "integrity": "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==", "dev": true }, "uint8-varint": { @@ -18526,15 +19861,15 @@ } }, "unbox-primitive": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz", - "integrity": "sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.1.0.tgz", + "integrity": "sha512-nWJ91DjeOkej/TA8pXQ3myruKpKEYgqvpw9lz4OPHj/NWFNluYrjbz9j01CJ8yKQd2g4jFoOkINCTW2I5LEEyw==", "dev": true, "requires": { - "call-bind": "^1.0.2", + "call-bound": "^1.0.3", "has-bigints": "^1.0.2", - "has-symbols": "^1.0.3", - "which-boxed-primitive": "^1.0.2" + "has-symbols": "^1.1.0", + "which-boxed-primitive": "^1.1.1" } }, "undici-types": { @@ -18578,6 +19913,46 @@ "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", "dev": true }, + "vite": { + "version": "7.1.11", + "resolved": "https://registry.npmjs.org/vite/-/vite-7.1.11.tgz", + "integrity": "sha512-uzcxnSDVjAopEUjljkWh8EIrg6tlzrjFUfMcR1EVsRDGwf/ccef0qQPRyOrROwhrTDaApueq+ja+KLPlzR/zdg==", + "dev": true, + "peer": true, + "requires": { + "esbuild": "^0.25.0", + "fdir": "^6.5.0", + "fsevents": "~2.3.3", + "picomatch": "^4.0.3", + "postcss": "^8.5.6", + "rollup": "^4.43.0", + "tinyglobby": "^0.2.15" + }, + "dependencies": { + "fdir": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz", + "integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==", + "dev": true, + "peer": true, + "requires": {} + }, + "picomatch": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz", + "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==", + "dev": true, + "peer": true + } + } + }, + "vitefu": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/vitefu/-/vitefu-1.1.1.tgz", + "integrity": "sha512-B/Fegf3i8zh0yFbpzZ21amWzHmuNlLlmJT6n7bu5e+pCHUKQIfXSYokrqOBGEMMe9UG2sostKQF9mml/vYaWJQ==", + "dev": true, + "requires": {} + }, "vuvuzela": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/vuvuzela/-/vuvuzela-1.0.3.tgz", @@ -18592,12 +19967,12 @@ "peer": true }, "weald": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/weald/-/weald-1.0.4.tgz", - "integrity": "sha512-+kYTuHonJBwmFhP1Z4YQK/dGi3jAnJGCYhyODFpHK73rbxnp9lnZQj7a2m+WVgn8fXr5bJaxUpF6l8qZpPeNWQ==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/weald/-/weald-1.1.1.tgz", + "integrity": "sha512-PaEQShzMCz8J/AD2N3dJMc1hTZWkJeLKS2NMeiVkV5KDHwgZe7qXLEzyodsT/SODxWDdXJJqocuwf3kHzcXhSQ==", "requires": { "ms": "^3.0.0-canary.1", - "supports-color": "^9.4.0" + "supports-color": "^10.0.0" }, "dependencies": { "ms": { @@ -18606,9 +19981,9 @@ "integrity": "sha512-NotsCoUCIUkojWCzQff4ttdCfIPoA1UGZsyQbi7KmqkNRfKCrvga8JJi2PknHymHOuor0cJSn/ylj52Cbt2IrQ==" }, "supports-color": { - "version": "9.4.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-9.4.0.tgz", - "integrity": "sha512-VL+lNrEoIXww1coLPOmiEmK/0sGigko5COxI09KzHc2VJXJsQ37UaQ+8quuxjDeA7+KnLGTWRyOXSLLR2Wb4jw==" + "version": "10.2.2", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-10.2.2.tgz", + "integrity": "sha512-SS+jx45GF1QjgEXQx4NJZV9ImqmO2NPz5FNsIHrsDjh2YsHnawpan7SNQ1o8NuhrbHZy9AZhIoCUiCeaW/C80g==" } } }, @@ -18664,60 +20039,107 @@ } }, "which-boxed-primitive": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", - "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.1.1.tgz", + "integrity": "sha512-TbX3mj8n0odCBFVlY8AxkqcHASw3L60jIuF8jFP78az3C2YhmGvqbHBpAjTRH2/xqYunrJ9g1jSyjCjpoWzIAA==", "dev": true, "requires": { - "is-bigint": "^1.0.1", - "is-boolean-object": "^1.1.0", - "is-number-object": "^1.0.4", - "is-string": "^1.0.5", - "is-symbol": "^1.0.3" + "is-bigint": "^1.1.0", + "is-boolean-object": "^1.2.1", + "is-number-object": "^1.1.1", + "is-string": "^1.1.1", + "is-symbol": "^1.1.1" + } + }, + "which-builtin-type": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/which-builtin-type/-/which-builtin-type-1.2.1.tgz", + "integrity": "sha512-6iBczoX+kDQ7a3+YJBnh3T+KZRxM/iYNPXicqk66/Qfm1b93iu+yOImkg0zHbj5LNOcNv1TEADiZ0xa34B4q6Q==", + "dev": true, + "requires": { + "call-bound": "^1.0.2", + "function.prototype.name": "^1.1.6", + "has-tostringtag": "^1.0.2", + "is-async-function": "^2.0.0", + "is-date-object": "^1.1.0", + "is-finalizationregistry": "^1.1.0", + "is-generator-function": "^1.0.10", + "is-regex": "^1.2.1", + "is-weakref": "^1.0.2", + "isarray": "^2.0.5", + "which-boxed-primitive": "^1.1.0", + "which-collection": "^1.0.2", + "which-typed-array": "^1.1.16" + } + }, + "which-collection": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/which-collection/-/which-collection-1.0.2.tgz", + "integrity": "sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw==", + "dev": true, + "requires": { + "is-map": "^2.0.3", + "is-set": "^2.0.3", + "is-weakmap": "^2.0.2", + "is-weakset": "^2.0.3" } }, "which-typed-array": { - "version": "1.1.15", - "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.15.tgz", - "integrity": "sha512-oV0jmFtUky6CXfkqehVvBP/LSWJ2sy4vWMioiENyJLePrBO/yKyV9OyJySfAKosh+RYkIl5zJCNZ8/4JncrpdA==", + "version": "1.1.19", + "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.19.tgz", + "integrity": "sha512-rEvr90Bck4WZt9HHFC4DJMsjvu7x+r6bImz0/BrbWb7A2djJ8hnZMrWnHo9F8ssv0OMErasDhftrfROTyqSDrw==", "dev": true, "requires": { "available-typed-arrays": "^1.0.7", - "call-bind": "^1.0.7", - "for-each": "^0.3.3", - "gopd": "^1.0.1", + "call-bind": "^1.0.8", + "call-bound": "^1.0.4", + "for-each": "^0.3.5", + "get-proto": "^1.0.1", + "gopd": "^1.2.0", "has-tostringtag": "^1.0.2" } }, - "worker-timers": { - "version": "7.1.8", - "resolved": "https://registry.npmjs.org/worker-timers/-/worker-timers-7.1.8.tgz", - "integrity": "sha512-R54psRKYVLuzff7c1OTFcq/4Hue5Vlz4bFtNEIarpSiCYhpifHU3aIQI29S84o1j87ePCYqbmEJPqwBTf+3sfw==", + "worker-factory": { + "version": "7.0.46", + "resolved": "https://registry.npmjs.org/worker-factory/-/worker-factory-7.0.46.tgz", + "integrity": "sha512-Sr1hq2FMgNa04UVhYQacsw+i58BtMimzDb4+CqYphZ97OfefRpURu0UZ+JxMr/H36VVJBfuVkxTK7MytsanC3w==", "requires": { - "@babel/runtime": "^7.24.5", - "tslib": "^2.6.2", - "worker-timers-broker": "^6.1.8", - "worker-timers-worker": "^7.0.71" + "@babel/runtime": "^7.28.4", + "fast-unique-numbers": "^9.0.24", + "tslib": "^2.8.1" + } + }, + "worker-timers": { + "version": "8.0.25", + "resolved": "https://registry.npmjs.org/worker-timers/-/worker-timers-8.0.25.tgz", + "integrity": "sha512-X7Z5dmM6PlrEnaadtFQOyXHGD/IysPA3HZzaC2koqsU1VI+RvyGmjiiLiUBQixK8PH5R7ilkOzZupWskNRaXmA==", + "requires": { + "@babel/runtime": "^7.28.4", + "tslib": "^2.8.1", + "worker-timers-broker": "^8.0.11", + "worker-timers-worker": "^9.0.11" } }, "worker-timers-broker": { - "version": "6.1.8", - "resolved": "https://registry.npmjs.org/worker-timers-broker/-/worker-timers-broker-6.1.8.tgz", - "integrity": "sha512-FUCJu9jlK3A8WqLTKXM9E6kAmI/dR1vAJ8dHYLMisLNB/n3GuaFIjJ7pn16ZcD1zCOf7P6H62lWIEBi+yz/zQQ==", + "version": "8.0.11", + "resolved": "https://registry.npmjs.org/worker-timers-broker/-/worker-timers-broker-8.0.11.tgz", + "integrity": "sha512-uwhxKru8BI9m2tsogxr2fB6POZ8LB2xH+Pu3R0mvQnAZLPgLD6K3IX4LNKPTEgTJ/j5VsuQPB+gLI1NBNKkPlg==", "requires": { - "@babel/runtime": "^7.24.5", - "fast-unique-numbers": "^8.0.13", - "tslib": "^2.6.2", - "worker-timers-worker": "^7.0.71" + "@babel/runtime": "^7.28.4", + "broker-factory": "^3.1.10", + "fast-unique-numbers": "^9.0.24", + "tslib": "^2.8.1", + "worker-timers-worker": "^9.0.11" } }, "worker-timers-worker": { - "version": "7.0.71", - "resolved": "https://registry.npmjs.org/worker-timers-worker/-/worker-timers-worker-7.0.71.tgz", - "integrity": "sha512-ks/5YKwZsto1c2vmljroppOKCivB/ma97g9y77MAAz2TBBjPPgpoOiS1qYQKIgvGTr2QYPT3XhJWIB6Rj2MVPQ==", + "version": "9.0.11", + "resolved": "https://registry.npmjs.org/worker-timers-worker/-/worker-timers-worker-9.0.11.tgz", + "integrity": "sha512-pArb5xtgHWImYpXhjg1OFv7JFG0ubmccb73TFoXHXjG830fFj+16N57q9YeBnZX52dn+itRrMoJZ9HaZBVzDaA==", "requires": { - "@babel/runtime": "^7.24.5", - "tslib": "^2.6.2" + "@babel/runtime": "^7.28.4", + "tslib": "^2.8.1", + "worker-factory": "^7.0.46" } }, "wrap-ansi": { @@ -18742,9 +20164,9 @@ } }, "ws": { - "version": "8.18.2", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.18.2.tgz", - "integrity": "sha512-DMricUmwGZUVr++AEAe2uiVM7UoO9MAVZMDu05UQOaUII0lp+zOzLLU4Xqh/JvTqklB1T4uELaaPBKyjE1r4fQ==", + "version": "8.18.3", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.18.3.tgz", + "integrity": "sha512-PEIGCY5tSlUt50cqyMXfCzX+oOPqN0vuGqWzbcJ2xvnkzkq46oOpz7dQaTDBdfICb4N14+GARUDw2XV2N4tvzg==", "requires": {} }, "xtend": { diff --git a/package.json b/package.json index e8bb1ac..0f92c88 100644 --- a/package.json +++ b/package.json @@ -23,7 +23,7 @@ "pretty": "npm run prettyNoWrite -- --write --log-level error", "prettyCheck": "npm run prettyNoWrite -- --check", "prettyNoWrite": "prettier --config ./.prettierrc \"**/*.js\" \"**/*.ts\" \"**/*.json\" ", - "check": "npm run lint && npm run svelte-check && npm run tsc-check", + "check": "npm run lint && npm run svelte-check", "unittest": "deno test -A --no-check --coverage=cov_profile --v8-flags=--expose-gc --trace-leaks ./src/" }, "keywords": [], @@ -34,7 +34,9 @@ "@eslint/compat": "^1.2.7", "@eslint/eslintrc": "^3.3.0", "@eslint/js": "^9.21.0", - "@tsconfig/svelte": "^5.0.4", + "@sveltejs/vite-plugin-svelte": "^6.2.1", + "@tsconfig/svelte": "^5.0.5", + "@types/deno": "^2.3.0", "@types/diff-match-patch": "^1.0.36", "@types/node": "^22.13.8", "@types/pouchdb": "^6.4.2", @@ -45,15 +47,15 @@ "@types/pouchdb-mapreduce": "^6.1.10", "@types/pouchdb-replication": "^6.4.7", "@types/transform-pouch": "^1.0.6", - "@typescript-eslint/eslint-plugin": "8.25.0", - "@typescript-eslint/parser": "8.25.0", + "@typescript-eslint/eslint-plugin": "8.46.2", + "@typescript-eslint/parser": "8.46.2", "builtin-modules": "5.0.0", "esbuild": "0.25.0", "esbuild-plugin-inline-worker": "^0.1.1", - "esbuild-svelte": "^0.9.0", - "eslint": "^9.21.0", - "eslint-plugin-import": "^2.31.0", - "eslint-plugin-svelte": "^3.0.2", + "esbuild-svelte": "^0.9.3", + "eslint": "^9.38.0", + "eslint-plugin-import": "^2.32.0", + "eslint-plugin-svelte": "^3.12.4", "events": "^3.3.0", "glob": "^11.0.3", "obsidian": "^1.8.7", @@ -71,16 +73,15 @@ "pouchdb-replication": "^9.0.0", "pouchdb-utils": "^9.0.0", "prettier": "3.5.2", - "svelte": "5.28.6", - "svelte-check": "^4.1.7", + "svelte": "5.41.1", + "svelte-check": "^4.3.3", "svelte-preprocess": "^6.0.3", "terser": "^5.39.0", "transform-pouch": "^2.0.0", "tslib": "^2.8.1", - "tsx": "^4.19.4", - "typescript": "5.7.3", - "yaml": "^2.8.0", - "@types/deno": "^2.3.0" + "tsx": "^4.20.6", + "typescript": "5.9.3", + "yaml": "^2.8.0" }, "dependencies": { "@aws-sdk/client-s3": "^3.808.0", @@ -93,9 +94,9 @@ "fflate": "^0.8.2", "idb": "^8.0.3", "minimatch": "^10.0.2", - "octagonal-wheels": "^0.1.41", + "octagonal-wheels": "^0.1.42", "qrcode-generator": "^1.4.4", - "trystero": "github:vrtmrz/trystero#9e892a93ec14eeb57ce806d272fbb7c3935256d8", + "trystero": "^0.22.0", "xxhash-wasm-102": "npm:xxhash-wasm@^1.0.2" } } diff --git a/src/features/P2PSync/CmdP2PReplicator.ts b/src/features/P2PSync/CmdP2PReplicator.ts index 16c6298..865df50 100644 --- a/src/features/P2PSync/CmdP2PReplicator.ts +++ b/src/features/P2PSync/CmdP2PReplicator.ts @@ -32,6 +32,7 @@ import type { SimpleStore } from "octagonal-wheels/databases/SimpleStoreBase"; import { getPlatformName } from "../../lib/src/PlatformAPIs/obsidian/Environment.ts"; import type { LiveSyncCore } from "../../main.ts"; import { TrysteroReplicator } from "../../lib/src/replication/trystero/TrysteroReplicator.ts"; +import { SETTING_KEY_P2P_DEVICE_NAME } from "../../lib/src/common/types.ts"; export class P2PReplicator extends LiveSyncCommands implements P2PReplicatorBase, CommandShim { storeP2PStatusLine = reactiveSource(""); @@ -93,14 +94,10 @@ export class P2PReplicator extends LiveSyncCommands implements P2PReplicatorBase } getConfig(key: string) { - const vaultName = this.services.vault.getVaultName(); - const dbKey = `${vaultName}-${key}`; - return localStorage.getItem(dbKey); + return this.services.config.getSmallConfig(key); } setConfig(key: string, value: string) { - const vaultName = this.services.vault.getVaultName(); - const dbKey = `${vaultName}-${key}`; - localStorage.setItem(dbKey, value); + return this.services.config.setSmallConfig(key, value); } enableBroadcastCastings() { return this?._replicatorInstance?.enableBroadcastChanges(); @@ -125,7 +122,8 @@ export class P2PReplicator extends LiveSyncCommands implements P2PReplicatorBase if (!this.settings.P2P_AppID) { this.settings.P2P_AppID = P2P_DEFAULT_SETTINGS.P2P_AppID; } - const getInitialDeviceName = () => this.getConfig("p2p_device_name") || this.services.vault.getVaultName(); + const getInitialDeviceName = () => + this.getConfig(SETTING_KEY_P2P_DEVICE_NAME) || this.services.vault.getVaultName(); const getSettings = () => this.settings; const store = () => this.simpleStore(); diff --git a/src/features/P2PSync/P2PReplicator/P2PReplicatorPane.svelte b/src/features/P2PSync/P2PReplicator/P2PReplicatorPane.svelte index 344b1b5..c1322f0 100644 --- a/src/features/P2PSync/P2PReplicator/P2PReplicatorPane.svelte +++ b/src/features/P2PSync/P2PReplicator/P2PReplicatorPane.svelte @@ -19,6 +19,7 @@ } from "../../../lib/src/replication/trystero/TrysteroReplicatorP2PServer"; import { type P2PReplicatorStatus } from "../../../lib/src/replication/trystero/TrysteroReplicator"; import { $msg as _msg } from "../../../lib/src/common/i18n"; + import { SETTING_KEY_P2P_DEVICE_NAME } from "../../../lib/src/common/types"; interface Props { plugin: PluginShim; @@ -35,7 +36,7 @@ // const vaultName = service.vault.getVaultName(); // const dbKey = `${vaultName}-p2p-device-name`; - const initialDeviceName = cmdSync.getConfig("p2p_device_name") ?? plugin.services.vault.getVaultName(); + const initialDeviceName = cmdSync.getConfig(SETTING_KEY_P2P_DEVICE_NAME) ?? plugin.services.vault.getVaultName(); let deviceName = $state(initialDeviceName); let eP2PEnabled = $state(initialSettings.P2P_Enabled); @@ -84,7 +85,7 @@ P2P_AutoBroadcast: eAutoBroadcast, }; plugin.settings = newSettings; - cmdSync.setConfig("p2p_device_name", eDeviceName); + cmdSync.setConfig(SETTING_KEY_P2P_DEVICE_NAME, eDeviceName); deviceName = eDeviceName; await plugin.saveSettings(); } @@ -250,6 +251,9 @@ }; cmdSync.setConfig(initialDialogStatusKey, JSON.stringify(dialogStatus)); }); + let isObsidian = $derived.by(() => { + return plugin.services.API.getPlatform() === "obsidian"; + });
@@ -265,95 +269,105 @@ {/each}

Connection Settings

-
- {eRelay} - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Enable P2P Replicator - -
Relay settings - -
Room ID - - - - This can isolate your connections between devices. Use the same Room ID for the same - devices. - -
Password - - - This password is used to encrypt the connection. Use something long enough. - -
This device name - - - - Device name to identify the device. Please use shorter one for the stable peer - detection, i.e., "iphone-16" or "macbook-2021". - - -
Auto Connect - -
Start change-broadcasting on Connect - -
- - -
+ + + + + + {/if}

Signaling Server Connection

diff --git a/src/lib b/src/lib index 8fee5ee..08b43da 160000 --- a/src/lib +++ b/src/lib @@ -1 +1 @@ -Subproject commit 8fee5ee0b71a82ad5027aead8764cb5f00064206 +Subproject commit 08b43da7fb564faf3bc0e6640019ff6080fa06d7 diff --git a/src/main.ts b/src/main.ts index d0e37b7..bed288c 100644 --- a/src/main.ts +++ b/src/main.ts @@ -34,6 +34,7 @@ import { ModuleObsidianSettings } from "./modules/features/ModuleObsidianSetting import { ModuleRedFlag } from "./modules/coreFeatures/ModuleRedFlag.ts"; import { ModuleObsidianMenu } from "./modules/essentialObsidian/ModuleObsidianMenu.ts"; import { ModuleSetupObsidian } from "./modules/features/ModuleSetupObsidian.ts"; +import { SetupManager } from "./modules/features/SetupManager.ts"; import type { StorageAccess } from "./modules/interfaces/StorageAccess.ts"; import type { Confirm } from "./lib/src/interfaces/Confirm.ts"; import type { Rebuilder } from "./modules/interfaces/DatabaseRebuilder.ts"; @@ -107,7 +108,7 @@ export default class ObsidianLiveSyncPlugin /** * The service hub for managing all services. */ - _services: InjectableServiceHub = new ObsidianServiceHub(); + _services: InjectableServiceHub = new ObsidianServiceHub(this); get services() { return this._services; } @@ -176,7 +177,15 @@ export default class ObsidianLiveSyncPlugin new ModuleDev(this, this), new ModuleReplicateTest(this, this), new ModuleIntegratedTest(this, this), + new SetupManager(this, this), ] as (IObsidianModule | AbstractModule)[]; + + getModule(constructor: new (...args: any[]) => T): T { + for (const module of this.modules) { + if (module.constructor === constructor) return module as T; + } + throw new Error(`Module ${constructor} not found or not loaded.`); + } // injected = injectModules(this, [...this.modules, ...this.addOns] as ICoreModule[]); // <-- Module System diff --git a/src/modules/core/ModuleRebuilder.ts b/src/modules/core/ModuleRebuilder.ts index 4cefcfd..5e59694 100644 --- a/src/modules/core/ModuleRebuilder.ts +++ b/src/modules/core/ModuleRebuilder.ts @@ -36,6 +36,14 @@ export class ModuleRebuilder extends AbstractModule implements Rebuilder { } } + async informOptionalFeatures() { + await this.core.services.UI.showMarkdownDialog( + "All optional features are disabled", + `Customisation Sync and Hidden File Sync will all be disabled. +Please enable them from the settings screen after setup is complete.`, + ["OK"] + ); + } async askUsingOptionalFeature(opt: { enableFetch?: boolean; enableOverwrite?: boolean }) { if ( (await this.core.confirm.askYesNoDialog( @@ -56,11 +64,12 @@ export class ModuleRebuilder extends AbstractModule implements Rebuilder { await this.services.remote.tryResetDatabase(); await this.services.remote.markLocked(); await delay(500); - await this.askUsingOptionalFeature({ enableOverwrite: true }); + // await this.askUsingOptionalFeature({ enableOverwrite: true }); await delay(1000); await this.services.remote.replicateAllToRemote(true); await delay(1000); await this.services.remote.replicateAllToRemote(true, true); + await this.informOptionalFeatures(); } $rebuildRemote(): Promise { return this.rebuildRemote(); @@ -79,11 +88,12 @@ export class ModuleRebuilder extends AbstractModule implements Rebuilder { await this.services.remote.markLocked(); await delay(500); // We do not have any other devices' data, so we do not need to ask for overwriting. - await this.askUsingOptionalFeature({ enableOverwrite: false }); + // await this.askUsingOptionalFeature({ enableOverwrite: false }); await delay(1000); await this.services.remote.replicateAllToRemote(true); await delay(1000); await this.services.remote.replicateAllToRemote(true, true); + await this.informOptionalFeatures(); } $rebuildEverything(): Promise { @@ -200,7 +210,9 @@ export class ModuleRebuilder extends AbstractModule implements Rebuilder { await delay(1000); await this.services.remote.replicateAllFromRemote(true); await this.resumeReflectingDatabase(); - await this.askUsingOptionalFeature({ enableFetch: true }); + await this.informOptionalFeatures(); + // No longer enable + // await this.askUsingOptionalFeature({ enableFetch: true }); } async fetchLocalWithRebuild() { return await this.fetchLocal(true); diff --git a/src/modules/coreFeatures/ModuleRedFlag.ts b/src/modules/coreFeatures/ModuleRedFlag.ts index 31e0b53..3262412 100644 --- a/src/modules/coreFeatures/ModuleRedFlag.ts +++ b/src/modules/coreFeatures/ModuleRedFlag.ts @@ -1,16 +1,17 @@ -import { LOG_LEVEL_NOTICE, LOG_LEVEL_VERBOSE } from "octagonal-wheels/common/logger"; +import { LOG_LEVEL_INFO, LOG_LEVEL_NOTICE, LOG_LEVEL_VERBOSE } from "octagonal-wheels/common/logger"; import { normalizePath } from "../../deps.ts"; import { - FLAGMD_REDFLAG, - FLAGMD_REDFLAG2, - FLAGMD_REDFLAG2_HR, - FLAGMD_REDFLAG3, - FLAGMD_REDFLAG3_HR, + FlagFilesHumanReadable, + FlagFilesOriginal, + TweakValuesShouldMatchedTemplate, type ObsidianLiveSyncSettings, } from "../../lib/src/common/types.ts"; import { AbstractModule } from "../AbstractModule.ts"; -import { $msg } from "../../lib/src/common/i18n.ts"; import type { LiveSyncCore } from "../../main.ts"; +import { SvelteDialogManager } from "../features/SetupWizard/ObsidianSvelteDialog.ts"; +import FetchEverything from "../features/SetupWizard/dialogs/FetchEverything.svelte"; +import RebuildEverything from "../features/SetupWizard/dialogs/RebuildEverything.svelte"; +import { extractObject } from "octagonal-wheels/object"; export class ModuleRedFlag extends AbstractModule { async isFlagFileExist(path: string) { @@ -33,165 +34,284 @@ export class ModuleRedFlag extends AbstractModule { } } - isRedFlagRaised = async () => await this.isFlagFileExist(FLAGMD_REDFLAG); - isRedFlag2Raised = async () => - (await this.isFlagFileExist(FLAGMD_REDFLAG2)) || (await this.isFlagFileExist(FLAGMD_REDFLAG2_HR)); - isRedFlag3Raised = async () => - (await this.isFlagFileExist(FLAGMD_REDFLAG3)) || (await this.isFlagFileExist(FLAGMD_REDFLAG3_HR)); + isSuspendFlagActive = async () => await this.isFlagFileExist(FlagFilesOriginal.SUSPEND_ALL); + isRebuildFlagActive = async () => + (await this.isFlagFileExist(FlagFilesOriginal.REBUILD_ALL)) || + (await this.isFlagFileExist(FlagFilesHumanReadable.REBUILD_ALL)); + isFetchAllFlagActive = async () => + (await this.isFlagFileExist(FlagFilesOriginal.FETCH_ALL)) || + (await this.isFlagFileExist(FlagFilesHumanReadable.FETCH_ALL)); - async deleteRedFlag2() { - await this.deleteFlagFile(FLAGMD_REDFLAG2); - await this.deleteFlagFile(FLAGMD_REDFLAG2_HR); + async cleanupRebuildFlag() { + await this.deleteFlagFile(FlagFilesOriginal.REBUILD_ALL); + await this.deleteFlagFile(FlagFilesHumanReadable.REBUILD_ALL); } - async deleteRedFlag3() { - await this.deleteFlagFile(FLAGMD_REDFLAG3); - await this.deleteFlagFile(FLAGMD_REDFLAG3_HR); + async cleanupFetchAllFlag() { + await this.deleteFlagFile(FlagFilesOriginal.FETCH_ALL); + await this.deleteFlagFile(FlagFilesHumanReadable.FETCH_ALL); } + dialogManager = new SvelteDialogManager(this.core); + + /** + * Adjust setting to remote if needed. + * @param extra result of dialogues that may contain preventFetchingConfig flag (e.g, from FetchEverything or RebuildEverything) + * @param config current configuration to retrieve remote preferred config + */ + async adjustSettingToRemoteIfNeeded(extra: { preventFetchingConfig: boolean }, config: ObsidianLiveSyncSettings) { + if (extra && extra.preventFetchingConfig) { + return; + } + + // Remote configuration fetched and applied. + if (await this.adjustSettingToRemote(config)) { + config = this.core.settings; + } else { + this._log("Remote configuration not applied.", LOG_LEVEL_NOTICE); + } + console.debug(config); + } + + /** + * Adjust setting to remote configuration. + * @param config current configuration to retrieve remote preferred config + * @returns updated configuration if applied, otherwise null. + */ + async adjustSettingToRemote(config: ObsidianLiveSyncSettings) { + // Fetch remote configuration unless prevented. + const SKIP_FETCH = "Skip and proceed"; + const RETRY_FETCH = "Retry (recommended)"; + let canProceed = false; + do { + const remoteTweaks = await this.services.tweakValue.fetchRemotePreferred(config); + if (!remoteTweaks) { + const choice = await this.core.confirm.askSelectStringDialogue( + "Could not fetch remote configuration. What do you want to do?", + [SKIP_FETCH, RETRY_FETCH] as const, + { + defaultAction: RETRY_FETCH, + timeout: 0, + title: "Fetch Remote Configuration Failed", + } + ); + if (choice === SKIP_FETCH) { + canProceed = true; + } + } else { + const necessary = extractObject(TweakValuesShouldMatchedTemplate, remoteTweaks); + // Check if any necessary tweak value is different from current config. + const differentItems = Object.entries(necessary).filter(([key, value]) => { + return (config as any)[key] !== value; + }); + if (differentItems.length === 0) { + this._log( + "Remote configuration matches local configuration. No changes applied.", + LOG_LEVEL_NOTICE + ); + } else { + await this.core.confirm.askSelectStringDialogue( + "Your settings differed slightly from the server's. The plug-in has supplemented the incompatible parts with the server settings!", + ["OK"] as const, + { + defaultAction: "OK", + timeout: 0, + } + ); + } + + config = { + ...config, + ...Object.fromEntries(differentItems), + } satisfies ObsidianLiveSyncSettings; + this.core.settings = config; + await this.core.services.setting.saveSettingData(); + this._log("Remote configuration applied.", LOG_LEVEL_NOTICE); + canProceed = true; + return this.core.settings; + } + } while (!canProceed); + } + + /** + * Process vault initialisation with suspending file watching and sync. + * @param proc process to be executed during initialisation, should return true if can be continued, false if app is unable to continue the process. + * @param keepSuspending whether to keep suspending file watching after the process. + * @returns result of the process, or false if error occurs. + */ + async processVaultInitialisation(proc: () => Promise, keepSuspending = false) { + try { + // Disable batch saving and file watching during initialisation. + this.settings.batchSave = false; + await this.services.setting.suspendAllSync(); + await this.services.setting.suspendExtraSync(); + this.settings.suspendFileWatching = true; + await this.saveSettings(); + try { + const result = await proc(); + return result; + } catch (ex) { + this._log("Error during vault initialisation process.", LOG_LEVEL_NOTICE); + this._log(ex, LOG_LEVEL_VERBOSE); + return false; + } + } catch (ex) { + this._log("Error during vault initialisation.", LOG_LEVEL_NOTICE); + this._log(ex, LOG_LEVEL_VERBOSE); + return false; + } finally { + if (!keepSuspending) { + // Re-enable file watching after initialisation. + this.settings.suspendFileWatching = false; + await this.saveSettings(); + } + } + } + + /** + * Handle the rebuild everything scheduled operation. + * @returns true if can be continued, false if app restart is needed. + */ + async onRebuildEverythingScheduled() { + const method = await this.dialogManager.openWithExplicitCancel(RebuildEverything); + if (method === "cancelled") { + // Clean up the flag file and restart the app. + this._log("Rebuild everything cancelled by user.", LOG_LEVEL_NOTICE); + await this.cleanupRebuildFlag(); + this.services.appLifecycle.performRestart(); + return false; + } + const { extra } = method; + await this.adjustSettingToRemoteIfNeeded(extra, this.settings); + return await this.processVaultInitialisation(async () => { + await this.core.rebuilder.$rebuildEverything(); + await this.cleanupRebuildFlag(); + this._log("Rebuild everything operation completed.", LOG_LEVEL_NOTICE); + return true; + }); + } + /** + * Handle the fetch all scheduled operation. + * @returns true if can be continued, false if app restart is needed. + */ + async onFetchAllScheduled() { + const method = await this.dialogManager.openWithExplicitCancel(FetchEverything); + if (method === "cancelled") { + this._log("Fetch everything cancelled by user.", LOG_LEVEL_NOTICE); + // Clean up the flag file and restart the app. + await this.cleanupFetchAllFlag(); + this.services.appLifecycle.performRestart(); + return false; + } + const { vault, extra } = method; + + const mapVaultStateToAction = { + identical: { + // If both are identical, no need to make local files/chunks before sync, + // Just for the efficiency, chunks should be made before sync. + makeLocalChunkBeforeSync: true, + makeLocalFilesBeforeSync: false, + }, + independent: { + // If both are independent, nothing needs to be made before sync. + // Respect the remote state. + makeLocalChunkBeforeSync: false, + makeLocalFilesBeforeSync: false, + }, + unbalanced: { + // If both are unbalanced, local files should be made before sync to avoid data loss. + // Then, chunks should be made before sync for the efficiency, but also the metadata made and should be detected as conflicting. + makeLocalChunkBeforeSync: false, + makeLocalFilesBeforeSync: true, + }, + cancelled: { + // Cancelled case, not actually used. + makeLocalChunkBeforeSync: false, + makeLocalFilesBeforeSync: false, + }, + } as const; + + return await this.processVaultInitialisation(async () => { + await this.adjustSettingToRemoteIfNeeded(extra, this.settings); + // Okay, proceed to fetch everything. + const { makeLocalChunkBeforeSync, makeLocalFilesBeforeSync } = mapVaultStateToAction[vault]; + this._log( + `Fetching everything with settings: makeLocalChunkBeforeSync=${makeLocalChunkBeforeSync}, makeLocalFilesBeforeSync=${makeLocalFilesBeforeSync}`, + LOG_LEVEL_INFO + ); + await this.core.rebuilder.$fetchLocal(makeLocalChunkBeforeSync, !makeLocalFilesBeforeSync); + await this.cleanupFetchAllFlag(); + this._log("Fetch everything operation completed. Vault files will be gradually synced.", LOG_LEVEL_NOTICE); + return true; + }); + } + + async onSuspendAllScheduled() { + this._log("SCRAM is detected. All operations are suspended.", LOG_LEVEL_NOTICE); + return await this.processVaultInitialisation(async () => { + this._log( + "All operations are suspended as per SCRAM.\nLogs will be written to the file. This might be a performance impact.", + LOG_LEVEL_NOTICE + ); + this.settings.writeLogToTheFile = true; + await this.core.services.setting.saveSettingData(); + return Promise.resolve(false); + }, true); + } + + async verifyAndUnlockSuspension() { + if (!this.settings.suspendFileWatching) { + return true; + } + if ( + (await this.core.confirm.askYesNoDialog( + "Do you want to resume file and database processing, and restart obsidian now?", + { defaultOption: "Yes", timeout: 15 } + )) != "yes" + ) { + // TODO: Confirm actually proceed to next process. + return true; + } + this.settings.suspendFileWatching = false; + await this.saveSettings(); + this.services.appLifecycle.performRestart(); + return false; + } + + private async processFlagFilesOnStartup(): Promise { + const isFlagSuspensionActive = await this.isSuspendFlagActive(); + const isFlagRebuildActive = await this.isRebuildFlagActive(); + const isFlagFetchAllActive = await this.isFetchAllFlagActive(); + // TODO: Address the case when both flags are active (very unlikely though). + // if(isFlagFetchAllActive && isFlagRebuildActive) { + // const message = "Rebuild everything and Fetch everything flags are both detected."; + // await this.core.confirm.askSelectStringDialogue( + // "Both Rebuild Everything and Fetch Everything flags are detected. Please remove one of them and restart the app.", + // ["OK"] as const,) + if (isFlagFetchAllActive) { + const res = await this.onFetchAllScheduled(); + if (res) { + return await this.verifyAndUnlockSuspension(); + } + return false; + } + if (isFlagRebuildActive) { + const res = await this.onRebuildEverythingScheduled(); + if (res) { + return await this.verifyAndUnlockSuspension(); + } + return false; + } + if (isFlagSuspensionActive) { + const res = await this.onSuspendAllScheduled(); + return res; + } + return true; + } + async _everyOnLayoutReady(): Promise { try { - const isRedFlagRaised = await this.isRedFlagRaised(); - const isRedFlag2Raised = await this.isRedFlag2Raised(); - const isRedFlag3Raised = await this.isRedFlag3Raised(); - - if (isRedFlagRaised || isRedFlag2Raised || isRedFlag3Raised) { - if (isRedFlag2Raised) { - if ( - (await this.core.confirm.askYesNoDialog( - "Rebuild everything has been scheduled! Are you sure to rebuild everything?", - { defaultOption: "Yes", timeout: 0 } - )) !== "yes" - ) { - await this.deleteRedFlag2(); - this.services.appLifecycle.performRestart(); - return false; - } - } - if (isRedFlag3Raised) { - if ( - (await this.core.confirm.askYesNoDialog("Fetch again has been scheduled! Are you sure?", { - defaultOption: "Yes", - timeout: 0, - })) !== "yes" - ) { - await this.deleteRedFlag3(); - this.services.appLifecycle.performRestart(); - return false; - } - } - this.settings.batchSave = false; - await this.services.setting.suspendAllSync(); - await this.services.setting.suspendExtraSync(); - this.settings.suspendFileWatching = true; - await this.saveSettings(); - if (isRedFlag2Raised) { - this._log( - `${FLAGMD_REDFLAG2} or ${FLAGMD_REDFLAG2_HR} has been detected! Self-hosted LiveSync suspends all sync and rebuild everything.`, - LOG_LEVEL_NOTICE - ); - await this.core.rebuilder.$rebuildEverything(); - await this.deleteRedFlag2(); - if ( - (await this.core.confirm.askYesNoDialog( - "Do you want to resume file and database processing, and restart obsidian now?", - { defaultOption: "Yes", timeout: 15 } - )) == "yes" - ) { - this.settings.suspendFileWatching = false; - await this.saveSettings(); - this.services.appLifecycle.performRestart(); - return false; - } - } else if (isRedFlag3Raised) { - this._log( - `${FLAGMD_REDFLAG3} or ${FLAGMD_REDFLAG3_HR} has been detected! Self-hosted LiveSync will discard the local database and fetch everything from the remote once again.`, - LOG_LEVEL_NOTICE - ); - const method1 = $msg("RedFlag.Fetch.Method.FetchSafer"); - const method2 = $msg("RedFlag.Fetch.Method.FetchSmoother"); - const method3 = $msg("RedFlag.Fetch.Method.FetchTraditional"); - - const methods = [method1, method2, method3] as const; - const chunkMode = await this.core.confirm.askSelectStringDialogue( - $msg("RedFlag.Fetch.Method.Desc"), - methods, - { - defaultAction: method1, - timeout: 0, - title: $msg("RedFlag.Fetch.Method.Title"), - } - ); - let makeLocalChunkBeforeSync = false; - let makeLocalFilesBeforeSync = false; - if (chunkMode === method1) { - makeLocalFilesBeforeSync = true; - } else if (chunkMode === method2) { - makeLocalChunkBeforeSync = true; - } else if (chunkMode === method3) { - // Do nothing. - } else { - this._log("Cancelled the fetch operation", LOG_LEVEL_NOTICE); - return false; - } - - const optionFetchRemoteConf = $msg("RedFlag.FetchRemoteConfig.Buttons.Fetch"); - const optionCancel = $msg("RedFlag.FetchRemoteConfig.Buttons.Cancel"); - const fetchRemote = await this.core.confirm.askSelectStringDialogue( - $msg("RedFlag.FetchRemoteConfig.Message"), - [optionFetchRemoteConf, optionCancel], - { - defaultAction: optionFetchRemoteConf, - timeout: 0, - title: $msg("RedFlag.FetchRemoteConfig.Title"), - } - ); - if (fetchRemote === optionFetchRemoteConf) { - this._log("Fetching remote configuration", LOG_LEVEL_NOTICE); - const newSettings = JSON.parse(JSON.stringify(this.core.settings)) as ObsidianLiveSyncSettings; - const remoteConfig = await this.services.tweakValue.fetchRemotePreferred(newSettings); - if (remoteConfig) { - this._log("Remote configuration found.", LOG_LEVEL_NOTICE); - const mergedSettings = { - ...this.core.settings, - ...remoteConfig, - } satisfies ObsidianLiveSyncSettings; - this._log("Remote configuration applied.", LOG_LEVEL_NOTICE); - this.core.settings = mergedSettings; - } else { - this._log("Remote configuration not applied.", LOG_LEVEL_NOTICE); - } - } - - await this.core.rebuilder.$fetchLocal(makeLocalChunkBeforeSync, !makeLocalFilesBeforeSync); - - await this.deleteRedFlag3(); - if (this.settings.suspendFileWatching) { - if ( - (await this.core.confirm.askYesNoDialog( - "Do you want to resume file and database processing, and restart obsidian now?", - { defaultOption: "Yes", timeout: 15 } - )) == "yes" - ) { - this.settings.suspendFileWatching = false; - await this.saveSettings(); - this.services.appLifecycle.performRestart(); - return false; - } - } else { - this._log( - "Your content of files will be synchronised gradually. Please wait for the completion.", - LOG_LEVEL_NOTICE - ); - } - } else { - // Case of FLAGMD_REDFLAG. - this.settings.writeLogToTheFile = true; - // await this.plugin.openDatabase(); - const warningMessage = - "The red flag is raised! The whole initialize steps are skipped, and any file changes are not captured."; - this._log(warningMessage, LOG_LEVEL_NOTICE); - } - } + const flagProcessResult = await this.processFlagFilesOnStartup(); + return flagProcessResult; } catch (ex) { this._log("Something went wrong on FlagFile Handling", LOG_LEVEL_NOTICE); this._log(ex, LOG_LEVEL_VERBOSE); diff --git a/src/modules/essential/ModuleMigration.ts b/src/modules/essential/ModuleMigration.ts index b2bb1ca..5a10803 100644 --- a/src/modules/essential/ModuleMigration.ts +++ b/src/modules/essential/ModuleMigration.ts @@ -3,7 +3,6 @@ import { EVENT_REQUEST_OPEN_P2P, EVENT_REQUEST_OPEN_SETTING_WIZARD, EVENT_REQUEST_OPEN_SETTINGS, - EVENT_REQUEST_OPEN_SETUP_URI, EVENT_REQUEST_RUN_DOCTOR, EVENT_REQUEST_RUN_FIX_INCOMPLETE, eventHub, @@ -16,6 +15,7 @@ import { isMetaEntry } from "../../lib/src/common/types.ts"; import { isDeletedEntry, isDocContentSame, isLoadedEntry, readAsBlob } from "../../lib/src/common/utils.ts"; import { countCompromisedChunks } from "../../lib/src/pouchdb/negotiation.ts"; import type { LiveSyncCore } from "../../main.ts"; +import { SetupManager } from "../features/SetupManager.ts"; type ErrorInfo = { path: string; @@ -66,6 +66,9 @@ export class ModuleMigration extends AbstractModule { } async initialMessage() { + const manager = this.core.getModule(SetupManager); + return await manager.startOnBoarding(); + /* const message = $msg("moduleMigration.msgInitialSetup", { URI_DOC: $msg("moduleMigration.docUri"), }); @@ -83,6 +86,7 @@ export class ModuleMigration extends AbstractModule { return true; } return false; + */ } async askAgainForSetupURI() { @@ -326,8 +330,11 @@ export class ModuleMigration extends AbstractModule { await this.migrateDisableBulkSend(); } if (!this.settings.isConfigured) { - // Case sensitivity - if (!(await this.initialMessage()) || !(await this.askAgainForSetupURI())) { + // if (!(await this.initialMessage()) || !(await this.askAgainForSetupURI())) { + // this._log($msg("moduleMigration.logSetupCancelled"), LOG_LEVEL_NOTICE); + // return false; + // } + if (!(await this.initialMessage())) { this._log($msg("moduleMigration.logSetupCancelled"), LOG_LEVEL_NOTICE); return false; } diff --git a/src/modules/essentialObsidian/ModuleObsidianAPI.ts b/src/modules/essentialObsidian/ModuleObsidianAPI.ts index ac015b8..981b321 100644 --- a/src/modules/essentialObsidian/ModuleObsidianAPI.ts +++ b/src/modules/essentialObsidian/ModuleObsidianAPI.ts @@ -102,7 +102,7 @@ export class ModuleObsidianAPI extends AbstractObsidianModule { compression: boolean, customHeaders: Record, useRequestAPI: boolean, - getPBKDF2Salt: () => Promise + getPBKDF2Salt: () => Promise> ): Promise; info: PouchDB.Core.DatabaseInfo }> { if (!isValidRemoteCouchDBURI(uri)) return "Remote URI is not valid"; if (uri.toLowerCase() != uri) return "Remote URI and database name could not contain capital letters."; diff --git a/src/modules/features/ModuleObsidianSetting.ts b/src/modules/features/ModuleObsidianSetting.ts index 1817041..f250ea9 100644 --- a/src/modules/features/ModuleObsidianSetting.ts +++ b/src/modules/features/ModuleObsidianSetting.ts @@ -9,6 +9,7 @@ import { DEFAULT_SETTINGS, type ObsidianLiveSyncSettings, SALT_OF_PASSPHRASE, + SETTING_KEY_P2P_DEVICE_NAME, } from "../../lib/src/common/types"; import { LOG_LEVEL_NOTICE, LOG_LEVEL_URGENT } from "octagonal-wheels/common/logger"; import { $msg, setLang } from "../../lib/src/common/i18n.ts"; @@ -111,6 +112,11 @@ export class ModuleObsidianSettings extends AbstractObsidianModule { this.services.setting.saveDeviceAndVaultName(); const settings = { ...this.settings }; settings.deviceAndVaultName = ""; + if (settings.P2P_DevicePeerName && settings.P2P_DevicePeerName.trim() !== "") { + console.log("Saving device peer name to small config"); + this.services.config.setSmallConfig(SETTING_KEY_P2P_DEVICE_NAME, settings.P2P_DevicePeerName.trim()); + settings.P2P_DevicePeerName = ""; + } if (this.usedPassphrase == "" && !(await this.getPassphrase(settings))) { this._log("Failed to retrieve passphrase. data.json contains unencrypted items!", LOG_LEVEL_NOTICE); } else { diff --git a/src/modules/features/ModuleSetupObsidian.ts b/src/modules/features/ModuleSetupObsidian.ts index 4d7489c..1073a91 100644 --- a/src/modules/features/ModuleSetupObsidian.ts +++ b/src/modules/features/ModuleSetupObsidian.ts @@ -1,34 +1,38 @@ -import { - type ObsidianLiveSyncSettings, - DEFAULT_SETTINGS, - KeyIndexOfSettings, - LOG_LEVEL_NOTICE, - LOG_LEVEL_VERBOSE, -} from "../../lib/src/common/types.ts"; -import { configURIBase, configURIBaseQR } from "../../common/types.ts"; +import { type ObsidianLiveSyncSettings, LOG_LEVEL_NOTICE } from "../../lib/src/common/types.ts"; +import { configURIBase } from "../../common/types.ts"; // import { PouchDB } from "../../lib/src/pouchdb/pouchdb-browser.js"; import { fireAndForget } from "../../lib/src/common/utils.ts"; import { EVENT_REQUEST_COPY_SETUP_URI, + EVENT_REQUEST_OPEN_P2P_SETTINGS, EVENT_REQUEST_OPEN_SETUP_URI, EVENT_REQUEST_SHOW_SETUP_QR, eventHub, } from "../../common/events.ts"; import { AbstractObsidianModule } from "../AbstractObsidianModule.ts"; -import { decodeAnyArray, encodeAnyArray } from "../../common/utils.ts"; -import qrcode from "qrcode-generator"; import { $msg } from "../../lib/src/common/i18n.ts"; -import { performDoctorConsultation, RebuildOptions } from "@/lib/src/common/configForDoc.ts"; -import { encryptString, decryptString } from "@/lib/src/encryption/stringEncryption.ts"; +// import { performDoctorConsultation, RebuildOptions } from "@/lib/src/common/configForDoc.ts"; import type { LiveSyncCore } from "../../main.ts"; +import { + encodeQR, + encodeSettingsToQRCodeData, + encodeSettingsToSetupURI, + OutputFormat, +} from "../../lib/src/API/processSetting.ts"; +import { SetupManager, UserMode } from "./SetupManager.ts"; export class ModuleSetupObsidian extends AbstractObsidianModule { + private _setupManager!: SetupManager; private _everyOnload(): Promise { + this._setupManager = this.plugin.getModule(SetupManager); this.registerObsidianProtocolHandler("setuplivesync", async (conf: any) => { if (conf.settings) { - await this.setupWizard(conf.settings); + await this._setupManager.onUseSetupURI( + UserMode.Unknown, + `${configURIBase}${encodeURIComponent(conf.settings)}` + ); } else if (conf.settingsQR) { - await this.decodeQR(conf.settingsQR); + await this._setupManager.decodeQR(conf.settingsQR); } }); this.addCommand({ @@ -59,293 +63,134 @@ export class ModuleSetupObsidian extends AbstractObsidianModule { name: "Use the copied setup URI (Formerly Open setup URI)", callback: () => fireAndForget(this.command_openSetupURI()), }); + eventHub.onEvent(EVENT_REQUEST_OPEN_SETUP_URI, () => fireAndForget(() => this.command_openSetupURI())); eventHub.onEvent(EVENT_REQUEST_COPY_SETUP_URI, () => fireAndForget(() => this.command_copySetupURI())); eventHub.onEvent(EVENT_REQUEST_SHOW_SETUP_QR, () => fireAndForget(() => this.encodeQR())); + eventHub.onEvent(EVENT_REQUEST_OPEN_P2P_SETTINGS, () => + fireAndForget(() => { + return this._setupManager.onP2PManualSetup(UserMode.Update, this.settings, false); + }) + ); return Promise.resolve(true); } async encodeQR() { - const settingArr = []; - const fullIndexes = Object.entries(KeyIndexOfSettings) as [keyof ObsidianLiveSyncSettings, number][]; - for (const [settingKey, index] of fullIndexes) { - const settingValue = this.settings[settingKey]; - if (index < 0) { - // This setting should be ignored. - continue; - } - settingArr[index] = settingValue; - } - const w = encodeAnyArray(settingArr); - const qr = qrcode(0, "L"); - const uri = `${configURIBaseQR}${encodeURIComponent(w)}`; - qr.addData(uri); - qr.make(); - const img = qr.createSvgTag(3); - const msg = $msg("Setup.QRCode", { qr_image: img }); + const settingString = encodeSettingsToQRCodeData(this.settings); + const codeSVG = encodeQR(settingString, OutputFormat.SVG); + const msg = $msg("Setup.QRCode", { qr_image: codeSVG }); await this.core.confirm.confirmWithMessage("Settings QR Code", msg, ["OK"], "OK"); - return await Promise.resolve(w); + return await Promise.resolve(codeSVG); } - async decodeQR(qr: string) { - const settingArr = decodeAnyArray(qr); - // console.warn(settingArr); - const fullIndexes = Object.entries(KeyIndexOfSettings) as [keyof ObsidianLiveSyncSettings, number][]; - const newSettings = { ...DEFAULT_SETTINGS } as ObsidianLiveSyncSettings; - for (const [settingKey, index] of fullIndexes) { - if (index < 0) { - // This setting should be ignored. - continue; - } - if (index >= settingArr.length) { - // Possibly a new setting added. - continue; - } - const settingValue = settingArr[index]; - //@ts-ignore - newSettings[settingKey] = settingValue; - } - await this.applySettingWizard(this.settings, newSettings, "QR Code"); + + async askEncryptingPassphrase(): Promise { + const encryptingPassphrase = await this.core.confirm.askString( + "Encrypt your settings", + "The passphrase to encrypt the setup URI", + "", + true + ); + return encryptingPassphrase; } + async command_copySetupURI(stripExtra = true) { - const encryptingPassphrase = await this.core.confirm.askString( - "Encrypt your settings", - "The passphrase to encrypt the setup URI", - "", + const encryptingPassphrase = await this.askEncryptingPassphrase(); + if (encryptingPassphrase === false) return; + const encryptedURI = await encodeSettingsToSetupURI( + this.settings, + encryptingPassphrase, + [...((stripExtra ? ["pluginSyncExtendedSetting"] : []) as (keyof ObsidianLiveSyncSettings)[])], true ); - if (encryptingPassphrase === false) return; - const setting = { - ...this.settings, - configPassphraseStore: "", - encryptedCouchDBConnection: "", - encryptedPassphrase: "", - } as Partial; - if (stripExtra) { - delete setting.pluginSyncExtendedSetting; + if (await this.services.UI.promptCopyToClipboard("Setup URI", encryptedURI)) { + this._log("Setup URI copied to clipboard", LOG_LEVEL_NOTICE); } - const keys = Object.keys(setting) as (keyof ObsidianLiveSyncSettings)[]; - for (const k of keys) { - if ( - JSON.stringify(k in setting ? setting[k] : "") == - JSON.stringify(k in DEFAULT_SETTINGS ? DEFAULT_SETTINGS[k] : "*") - ) { - delete setting[k]; - } - } - const encryptedSetting = encodeURIComponent(await encryptString(JSON.stringify(setting), encryptingPassphrase)); - const uri = `${configURIBase}${encryptedSetting} `; - await navigator.clipboard.writeText(uri); - this._log("Setup URI copied to clipboard", LOG_LEVEL_NOTICE); + // await navigator.clipboard.writeText(encryptedURI); } + async command_copySetupURIFull() { - const encryptingPassphrase = await this.core.confirm.askString( - "Encrypt your settings", - "The passphrase to encrypt the setup URI", - "", - true - ); + const encryptingPassphrase = await this.askEncryptingPassphrase(); if (encryptingPassphrase === false) return; - const setting = { - ...this.settings, - configPassphraseStore: "", - encryptedCouchDBConnection: "", - encryptedPassphrase: "", - }; - const encryptedSetting = encodeURIComponent(await encryptString(JSON.stringify(setting), encryptingPassphrase)); - const uri = `${configURIBase}${encryptedSetting} `; - await navigator.clipboard.writeText(uri); + const encryptedURI = await encodeSettingsToSetupURI(this.settings, encryptingPassphrase, [], false); + await navigator.clipboard.writeText(encryptedURI); this._log("Setup URI copied to clipboard", LOG_LEVEL_NOTICE); } + async command_copySetupURIWithSync() { await this.command_copySetupURI(false); } async command_openSetupURI() { - const setupURI = await this.core.confirm.askString("Easy setup", "Set up URI", `${configURIBase} aaaaa`); - if (setupURI === false) return; - if (!setupURI.startsWith(`${configURIBase}`)) { - this._log("Set up URI looks wrong.", LOG_LEVEL_NOTICE); - return; - } - const config = decodeURIComponent(setupURI.substring(configURIBase.length)); - await this.setupWizard(config); - } - async askSyncWithRemoteConfig(tryingSettings: ObsidianLiveSyncSettings): Promise { - const buttons = { - fetch: $msg("Setup.FetchRemoteConf.Buttons.Fetch"), - no: $msg("Setup.FetchRemoteConf.Buttons.Skip"), - } as const; - const fetchRemoteConf = await this.core.confirm.askSelectStringDialogue( - $msg("Setup.FetchRemoteConf.Message"), - Object.values(buttons), - { defaultAction: buttons.fetch, timeout: 0, title: $msg("Setup.FetchRemoteConf.Title") } - ); - if (fetchRemoteConf == buttons.no) { - return tryingSettings; - } - - const newSettings = JSON.parse(JSON.stringify(tryingSettings)) as ObsidianLiveSyncSettings; - const remoteConfig = await this.services.tweakValue.fetchRemotePreferred(newSettings); - if (remoteConfig) { - this._log("Remote configuration found.", LOG_LEVEL_NOTICE); - const resultSettings = { - ...DEFAULT_SETTINGS, - ...tryingSettings, - ...remoteConfig, - } satisfies ObsidianLiveSyncSettings; - return resultSettings; - } else { - this._log("Remote configuration not applied.", LOG_LEVEL_NOTICE); - return { - ...DEFAULT_SETTINGS, - ...tryingSettings, - } satisfies ObsidianLiveSyncSettings; - } - } - async askPerformDoctor( - tryingSettings: ObsidianLiveSyncSettings - ): Promise<{ settings: ObsidianLiveSyncSettings; shouldRebuild: boolean; isModified: boolean }> { - const buttons = { - yes: $msg("Setup.Doctor.Buttons.Yes"), - no: $msg("Setup.Doctor.Buttons.No"), - } as const; - const performDoctor = await this.core.confirm.askSelectStringDialogue( - $msg("Setup.Doctor.Message"), - Object.values(buttons), - { defaultAction: buttons.yes, timeout: 0, title: $msg("Setup.Doctor.Title") } - ); - if (performDoctor == buttons.no) { - return { settings: tryingSettings, shouldRebuild: false, isModified: false }; - } - - const newSettings = JSON.parse(JSON.stringify(tryingSettings)) as ObsidianLiveSyncSettings; - const { settings, shouldRebuild, isModified } = await performDoctorConsultation(this.core, newSettings, { - localRebuild: RebuildOptions.AutomaticAcceptable, // Because we are in the setup wizard, we can skip the confirmation. - remoteRebuild: RebuildOptions.SkipEvenIfRequired, - activateReason: "New settings from URI", - }); - if (isModified) { - this._log("Doctor has fixed some issues!", LOG_LEVEL_NOTICE); - return { - settings, - shouldRebuild, - isModified, - }; - } else { - this._log("Doctor detected no issues!", LOG_LEVEL_NOTICE); - return { settings: tryingSettings, shouldRebuild: false, isModified: false }; - } + await this._setupManager.onUseSetupURI(UserMode.Unknown); } - async applySettingWizard( - oldConf: ObsidianLiveSyncSettings, - newConf: ObsidianLiveSyncSettings, - method = "Setup URI" - ) { - const result = await this.core.confirm.askYesNoDialog( - "Importing Configuration from the " + method + ". Are you sure to proceed ? ", - {} - ); - if (result == "yes") { - let newSettingW = Object.assign({}, DEFAULT_SETTINGS, newConf) as ObsidianLiveSyncSettings; - this.core.replicator.closeReplication(); - this.settings.suspendFileWatching = true; - newSettingW = await this.askSyncWithRemoteConfig(newSettingW); - const { settings, shouldRebuild, isModified } = await this.askPerformDoctor(newSettingW); - if (isModified) { - newSettingW = settings; - } - // Back into the default method once. - newSettingW.configPassphraseStore = ""; - newSettingW.encryptedPassphrase = ""; - newSettingW.encryptedCouchDBConnection = ""; - newSettingW.additionalSuffixOfDatabaseName = `${"appId" in this.app ? this.app.appId : ""} `; - const setupJustImport = $msg("Setup.Apply.Buttons.OnlyApply"); - const setupAsNew = $msg("Setup.Apply.Buttons.ApplyAndFetch"); - const setupAsMerge = $msg("Setup.Apply.Buttons.ApplyAndMerge"); - const setupAgain = $msg("Setup.Apply.Buttons.ApplyAndRebuild"); - const setupCancel = $msg("Setup.Apply.Buttons.Cancel"); - newSettingW.syncInternalFiles = false; - newSettingW.usePluginSync = false; - newSettingW.isConfigured = true; - // Migrate completely obsoleted configuration. - if (!newSettingW.useIndexedDBAdapter) { - newSettingW.useIndexedDBAdapter = true; - } - const warn = shouldRebuild ? $msg("Setup.Apply.WarningRebuildRecommended") : ""; - const message = $msg("Setup.Apply.Message", { - method, - warn, - }); + // TODO: Where to implement these? + + // async askSyncWithRemoteConfig(tryingSettings: ObsidianLiveSyncSettings): Promise { + // const buttons = { + // fetch: $msg("Setup.FetchRemoteConf.Buttons.Fetch"), + // no: $msg("Setup.FetchRemoteConf.Buttons.Skip"), + // } as const; + // const fetchRemoteConf = await this.core.confirm.askSelectStringDialogue( + // $msg("Setup.FetchRemoteConf.Message"), + // Object.values(buttons), + // { defaultAction: buttons.fetch, timeout: 0, title: $msg("Setup.FetchRemoteConf.Title") } + // ); + // if (fetchRemoteConf == buttons.no) { + // return tryingSettings; + // } + + // const newSettings = JSON.parse(JSON.stringify(tryingSettings)) as ObsidianLiveSyncSettings; + // const remoteConfig = await this.services.tweakValue.fetchRemotePreferred(newSettings); + // if (remoteConfig) { + // this._log("Remote configuration found.", LOG_LEVEL_NOTICE); + // const resultSettings = { + // ...DEFAULT_SETTINGS, + // ...tryingSettings, + // ...remoteConfig, + // } satisfies ObsidianLiveSyncSettings; + // return resultSettings; + // } else { + // this._log("Remote configuration not applied.", LOG_LEVEL_NOTICE); + // return { + // ...DEFAULT_SETTINGS, + // ...tryingSettings, + // } satisfies ObsidianLiveSyncSettings; + // } + // } + // async askPerformDoctor( + // tryingSettings: ObsidianLiveSyncSettings + // ): Promise<{ settings: ObsidianLiveSyncSettings; shouldRebuild: boolean; isModified: boolean }> { + // const buttons = { + // yes: $msg("Setup.Doctor.Buttons.Yes"), + // no: $msg("Setup.Doctor.Buttons.No"), + // } as const; + // const performDoctor = await this.core.confirm.askSelectStringDialogue( + // $msg("Setup.Doctor.Message"), + // Object.values(buttons), + // { defaultAction: buttons.yes, timeout: 0, title: $msg("Setup.Doctor.Title") } + // ); + // if (performDoctor == buttons.no) { + // return { settings: tryingSettings, shouldRebuild: false, isModified: false }; + // } + + // const newSettings = JSON.parse(JSON.stringify(tryingSettings)) as ObsidianLiveSyncSettings; + // const { settings, shouldRebuild, isModified } = await performDoctorConsultation(this.core, newSettings, { + // localRebuild: RebuildOptions.AutomaticAcceptable, // Because we are in the setup wizard, we can skip the confirmation. + // remoteRebuild: RebuildOptions.SkipEvenIfRequired, + // activateReason: "New settings from URI", + // }); + // if (isModified) { + // this._log("Doctor has fixed some issues!", LOG_LEVEL_NOTICE); + // return { + // settings, + // shouldRebuild, + // isModified, + // }; + // } else { + // this._log("Doctor detected no issues!", LOG_LEVEL_NOTICE); + // return { settings: tryingSettings, shouldRebuild: false, isModified: false }; + // } + // } - const setupType = await this.core.confirm.askSelectStringDialogue( - message, - [setupAsNew, setupAsMerge, setupAgain, setupJustImport, setupCancel], - { defaultAction: setupAsNew, title: $msg("Setup.Apply.Title", { method }), timeout: 0 } - ); - if (setupType == setupJustImport) { - this.core.settings = newSettingW; - this.services.setting.clearUsedPassphrase(); - await this.core.saveSettings(); - } else if (setupType == setupAsNew) { - this.core.settings = newSettingW; - this.services.setting.clearUsedPassphrase(); - await this.core.saveSettings(); - await this.core.rebuilder.$fetchLocal(); - } else if (setupType == setupAsMerge) { - this.core.settings = newSettingW; - this.services.setting.clearUsedPassphrase(); - await this.core.saveSettings(); - await this.core.rebuilder.$fetchLocal(true); - } else if (setupType == setupAgain) { - const confirm = - "This operation will rebuild all databases with files on this device. Any files on the remote database not synced here will be lost."; - if ( - (await this.core.confirm.askSelectStringDialogue( - "Are you sure you want to do this?", - ["Cancel", confirm], - { defaultAction: "Cancel" } - )) != confirm - ) { - return; - } - this.core.settings = newSettingW; - await this.core.saveSettings(); - this.services.setting.clearUsedPassphrase(); - await this.core.rebuilder.$rebuildEverything(); - } else { - // Explicitly cancel the operation or the dialog was closed. - this._log("Cancelled", LOG_LEVEL_NOTICE); - this.core.settings = oldConf; - return; - } - this._log("Configuration loaded.", LOG_LEVEL_NOTICE); - } else { - this._log("Cancelled", LOG_LEVEL_NOTICE); - this.core.settings = oldConf; - return; - } - } - async setupWizard(confString: string) { - try { - const oldConf = JSON.parse(JSON.stringify(this.settings)); - const encryptingPassphrase = await this.core.confirm.askString( - "Passphrase", - "The passphrase to decrypt your setup URI", - "", - true - ); - if (encryptingPassphrase === false) return; - const newConf = await JSON.parse(await decryptString(confString, encryptingPassphrase)); - if (newConf) { - await this.applySettingWizard(oldConf, newConf); - this._log("Configuration loaded.", LOG_LEVEL_NOTICE); - } else { - this._log("Cancelled.", LOG_LEVEL_NOTICE); - } - } catch (ex) { - this._log("Couldn't parse or decrypt configuration uri.", LOG_LEVEL_NOTICE); - this._log(ex, LOG_LEVEL_VERBOSE); - } - } onBindFunction(core: LiveSyncCore, services: typeof core.services): void { services.appLifecycle.handleOnLoaded(this._everyOnload.bind(this)); } diff --git a/src/modules/features/SettingDialogue/InfoPanel.svelte b/src/modules/features/SettingDialogue/InfoPanel.svelte new file mode 100644 index 0000000..1a24e44 --- /dev/null +++ b/src/modules/features/SettingDialogue/InfoPanel.svelte @@ -0,0 +1,15 @@ + + + diff --git a/src/modules/features/SettingDialogue/PaneHatch.ts b/src/modules/features/SettingDialogue/PaneHatch.ts index cfc6a01..fa08b35 100644 --- a/src/modules/features/SettingDialogue/PaneHatch.ts +++ b/src/modules/features/SettingDialogue/PaneHatch.ts @@ -143,6 +143,9 @@ export function paneHatch(this: ObsidianLiveSyncSettingTab, paneEl: HTMLElement, pluginConfig.jwtKid = redact(pluginConfig.jwtKid); pluginConfig.bucketCustomHeaders = redact(pluginConfig.bucketCustomHeaders); pluginConfig.couchDB_CustomHeaders = redact(pluginConfig.couchDB_CustomHeaders); + pluginConfig.P2P_turnCredential = redact(pluginConfig.P2P_turnCredential); + pluginConfig.P2P_turnUsername = redact(pluginConfig.P2P_turnUsername); + pluginConfig.P2P_turnServers = `(${pluginConfig.P2P_turnServers.split(",").length} servers configured)`; const endpoint = pluginConfig.endpoint; if (endpoint == "") { pluginConfig.endpoint = "Not configured or AWS"; @@ -170,11 +173,13 @@ ${stringifyYaml({ ...pluginConfig, })}`; console.log(msgConfig); - await navigator.clipboard.writeText(msgConfig); - Logger( - `Generated report has been copied to clipboard. Please report the issue with this! Thank you for your cooperation!`, - LOG_LEVEL_NOTICE - ); + if ((await this.services.UI.promptCopyToClipboard("Generated report", msgConfig)) == true) { + // await navigator.clipboard.writeText(msgConfig); + // Logger( + // `Generated report has been copied to clipboard. Please report the issue with this! Thank you for your cooperation!`, + // LOG_LEVEL_NOTICE + // ); + } }) ); new Setting(paneEl).autoWireToggle("writeLogToTheFile"); diff --git a/src/modules/features/SettingDialogue/PaneMaintenance.ts b/src/modules/features/SettingDialogue/PaneMaintenance.ts index 9afa213..5747209 100644 --- a/src/modules/features/SettingDialogue/PaneMaintenance.ts +++ b/src/modules/features/SettingDialogue/PaneMaintenance.ts @@ -1,6 +1,6 @@ import { LocalDatabaseMaintenance } from "../../../features/LocalDatabaseMainte/CmdLocalDatabaseMainte.ts"; import { LOG_LEVEL_NOTICE, Logger } from "../../../lib/src/common/logger.ts"; -import { FLAGMD_REDFLAG, FLAGMD_REDFLAG2_HR, FLAGMD_REDFLAG3_HR } from "../../../lib/src/common/types.ts"; +import { FlagFilesHumanReadable, FLAGMD_REDFLAG } from "../../../lib/src/common/types.ts"; import { fireAndForget } from "../../../lib/src/common/utils.ts"; import { LiveSyncCouchDBReplicator } from "../../../lib/src/replication/couchdb/LiveSyncReplicator.ts"; import { LiveSyncSetting as Setting } from "./LiveSyncSetting.ts"; @@ -98,6 +98,35 @@ export function paneMaintenance( ); }); + void addPanel(paneEl, "Reset Synchronisation information").then((paneEl) => { + new Setting(paneEl) + .setName("Reset Synchronisation on This Device") + .setDesc("Restore or reconstruct local database from remote.") + .addButton((button) => + button + .setButtonText("Schedule and Restart") + .setCta() + .setDisabled(false) + .onClick(async () => { + await this.plugin.storageAccess.writeFileAuto(FlagFilesHumanReadable.FETCH_ALL, ""); + this.services.appLifecycle.performRestart(); + }) + ); + new Setting(paneEl) + .setName("Overwrite Server Data with This Device's Files") + .setDesc("Rebuild local and remote database with local files.") + .addButton((button) => + button + .setButtonText("Schedule and Restart") + .setCta() + .setDisabled(false) + .onClick(async () => { + await this.plugin.storageAccess.writeFileAuto(FlagFilesHumanReadable.REBUILD_ALL, ""); + this.services.appLifecycle.performRestart(); + }) + ); + }); + void addPanel(paneEl, "Syncing", () => {}, this.onlyOnCouchDBOrMinIO).then((paneEl) => { new Setting(paneEl) .setName("Resend") @@ -244,69 +273,7 @@ export function paneMaintenance( ); } ); - void addPanel(paneEl, "Rebuilding Operations (Local)").then((paneEl) => { - new Setting(paneEl) - .setName("Fetch from remote") - .setDesc("Restore or reconstruct local database from remote.") - .addButton((button) => - button - .setButtonText("Fetch") - .setWarning() - .setDisabled(false) - .onClick(async () => { - await this.plugin.storageAccess.writeFileAuto(FLAGMD_REDFLAG3_HR, ""); - this.services.appLifecycle.performRestart(); - }) - ) - .addButton((button) => - button - .setButtonText("Fetch w/o restarting") - .setWarning() - .setDisabled(false) - .onClick(async () => { - await this.rebuildDB("localOnly"); - }) - ); - new Setting(paneEl) - .setName("Fetch rebuilt DB (Save local documents before)") - .setDesc("Restore or reconstruct local database from remote database but use local chunks.") - .addButton((button) => - button - .setButtonText("Save and Fetch") - .setWarning() - .setDisabled(false) - .onClick(async () => { - await this.rebuildDB("localOnlyWithChunks"); - }) - ) - .addOnUpdate(this.onlyOnCouchDB); - }); - - void addPanel(paneEl, "Total Overhaul", () => {}, this.onlyOnCouchDBOrMinIO).then((paneEl) => { - new Setting(paneEl) - .setName("Rebuild everything") - .setDesc("Rebuild local and remote database with local files.") - .addButton((button) => - button - .setButtonText("Rebuild") - .setWarning() - .setDisabled(false) - .onClick(async () => { - await this.plugin.storageAccess.writeFileAuto(FLAGMD_REDFLAG2_HR, ""); - this.services.appLifecycle.performRestart(); - }) - ) - .addButton((button) => - button - .setButtonText("Rebuild w/o restarting") - .setWarning() - .setDisabled(false) - .onClick(async () => { - await this.rebuildDB("rebuildBothByThisDevice"); - }) - ); - }); void addPanel(paneEl, "Rebuilding Operations (Remote Only)", () => {}, this.onlyOnCouchDBOrMinIO).then((paneEl) => { new Setting(paneEl) .setName("Perform cleanup") diff --git a/src/modules/features/SettingDialogue/PaneRemoteConfig.ts b/src/modules/features/SettingDialogue/PaneRemoteConfig.ts index d8228eb..46c3568 100644 --- a/src/modules/features/SettingDialogue/PaneRemoteConfig.ts +++ b/src/modules/features/SettingDialogue/PaneRemoteConfig.ts @@ -1,742 +1,343 @@ -import { MarkdownRenderer } from "../../../deps.ts"; import { - LOG_LEVEL_NOTICE, - LOG_LEVEL_VERBOSE, - PREFERRED_JOURNAL_SYNC, - PREFERRED_SETTING_CLOUDANT, - PREFERRED_SETTING_SELF_HOSTED, REMOTE_COUCHDB, REMOTE_MINIO, REMOTE_P2P, + type ObsidianLiveSyncSettings, } from "../../../lib/src/common/types.ts"; -import { parseHeaderValues } from "../../../lib/src/common/utils.ts"; -import { LOG_LEVEL_INFO, Logger } from "../../../lib/src/common/logger.ts"; -import { isCloudantURI } from "../../../lib/src/pouchdb/utils_couchdb.ts"; -import { requestToCouchDBWithCredentials } from "../../../common/utils.ts"; import { $msg } from "../../../lib/src/common/i18n.ts"; import { LiveSyncSetting as Setting } from "./LiveSyncSetting.ts"; -import { fireAndForget } from "octagonal-wheels/promises"; -import { generateCredentialObject } from "../../../lib/src/replication/httplib.ts"; import type { ObsidianLiveSyncSettingTab } from "./ObsidianLiveSyncSettingTab.ts"; import type { PageFunctions } from "./SettingPane.ts"; -import { combineOnUpdate, visibleOnly } from "./SettingPane.ts"; -import { getWebCrypto } from "../../../lib/src/mods.ts"; -import { arrayBufferToBase64Single } from "../../../lib/src/string_and_binary/convert.ts"; +// import { visibleOnly } from "./SettingPane.ts"; +import InfoPanel from "./InfoPanel.svelte"; +import { writable } from "svelte/store"; +import { SveltePanel } from "./SveltePanel.ts"; +import { + getBucketConfigSummary, + getP2PConfigSummary, + getCouchDBConfigSummary, + getE2EEConfigSummary, +} from "./settingUtils.ts"; +import { SETTING_KEY_P2P_DEVICE_NAME } from "../../../lib/src/common/types.ts"; +import { SetupManager, UserMode } from "../SetupManager.ts"; +import { OnDialogSettingsDefault, type AllSettings } from "./settingConstants.ts"; + +function getSettingsFromEditingSettings(editingSettings: AllSettings): ObsidianLiveSyncSettings { + const workObj = { ...editingSettings } as ObsidianLiveSyncSettings; + const keys = Object.keys(OnDialogSettingsDefault); + for (const k of keys) { + delete (workObj as any)[k]; + } + return workObj; +} +const toggleActiveSyncClass = (el: HTMLElement, isActive: () => boolean) => { + if (isActive()) { + el.addClass("active-pane"); + } else { + el.removeClass("active-pane"); + } + return {}; +}; + export function paneRemoteConfig( this: ObsidianLiveSyncSettingTab, paneEl: HTMLElement, { addPanel, addPane }: PageFunctions ): void { - let checkResultDiv: HTMLDivElement; - const checkConfig = async (checkResultDiv: HTMLDivElement | undefined) => { - Logger($msg("obsidianLiveSyncSettingTab.logCheckingDbConfig"), LOG_LEVEL_INFO); - let isSuccessful = true; - const emptyDiv = createDiv(); - emptyDiv.innerHTML = ""; - checkResultDiv?.replaceChildren(...[emptyDiv]); - const addResult = (msg: string, classes?: string[]) => { - const tmpDiv = createDiv(); - tmpDiv.addClass("ob-btn-config-fix"); - if (classes) { - tmpDiv.addClasses(classes); - } - tmpDiv.innerHTML = `${msg}`; - checkResultDiv?.appendChild(tmpDiv); + const remoteNameMap = { + [REMOTE_COUCHDB]: $msg("obsidianLiveSyncSettingTab.optionCouchDB"), + [REMOTE_MINIO]: $msg("obsidianLiveSyncSettingTab.optionMinioS3R2"), + [REMOTE_P2P]: "Only Peer-to-Peer", + } as const; + + { + /* E2EE */ + const E2EEInitialProps = { + info: getE2EEConfigSummary({ ...this.editingSettings }), }; - try { - if (isCloudantURI(this.editingSettings.couchDB_URI)) { - Logger($msg("obsidianLiveSyncSettingTab.logCannotUseCloudant"), LOG_LEVEL_NOTICE); - return; - } - // Tip: Add log for cloudant as Logger($msg("obsidianLiveSyncSettingTab.logServerConfigurationCheck")); - const customHeaders = parseHeaderValues(this.editingSettings.couchDB_CustomHeaders); - const credential = generateCredentialObject(this.editingSettings); - const r = await requestToCouchDBWithCredentials( - this.editingSettings.couchDB_URI, - credential, - window.origin, - undefined, - undefined, - undefined, - customHeaders - ); - const responseConfig = r.json; - - const addConfigFixButton = (title: string, key: string, value: string) => { - if (!checkResultDiv) return; - const tmpDiv = createDiv(); - tmpDiv.addClass("ob-btn-config-fix"); - tmpDiv.innerHTML = ``; - const x = checkResultDiv.appendChild(tmpDiv); - x.querySelector("button")?.addEventListener("click", () => { - fireAndForget(async () => { - Logger($msg("obsidianLiveSyncSettingTab.logCouchDbConfigSet", { title, key, value })); - const res = await requestToCouchDBWithCredentials( - this.editingSettings.couchDB_URI, - credential, - undefined, - key, - value, - undefined, - customHeaders - ); - if (res.status == 200) { - Logger( - $msg("obsidianLiveSyncSettingTab.logCouchDbConfigUpdated", { title }), - LOG_LEVEL_NOTICE - ); - checkResultDiv.removeChild(x); - await checkConfig(checkResultDiv); - } else { - Logger( - $msg("obsidianLiveSyncSettingTab.logCouchDbConfigFail", { title }), - LOG_LEVEL_NOTICE - ); - Logger(res.text, LOG_LEVEL_VERBOSE); - } - }); - }); - }; - addResult($msg("obsidianLiveSyncSettingTab.msgNotice"), ["ob-btn-config-head"]); - addResult($msg("obsidianLiveSyncSettingTab.msgIfConfigNotPersistent"), ["ob-btn-config-info"]); - addResult($msg("obsidianLiveSyncSettingTab.msgConfigCheck"), ["ob-btn-config-head"]); - - const serverBanner = r.headers["server"] ?? r.headers["Server"] ?? "unknown"; - addResult($msg("obsidianLiveSyncSettingTab.serverVersion", { info: serverBanner })); - const versionMatch = serverBanner.match(/CouchDB(\/([0-9.]+))?/); - const versionStr = versionMatch ? versionMatch[2] : "0.0.0"; - const versionParts = `${versionStr}.0.0.0`.split("."); - // Compare version string with the target version. - // version must be a string like "3.2.1" or "3.10.2", and must be two or three parts. - function isGreaterThanOrEqual(version: string) { - const targetParts = version.split("."); - for (let i = 0; i < targetParts.length; i++) { - // compare as number if possible (so 3.10 > 3.2, 3.10.1b > 3.10.1a) - const result = versionParts[i].localeCompare(targetParts[i], undefined, { numeric: true }); - if (result > 0) return true; - if (result < 0) return false; - } - return true; - } - // Admin check - // for database creation and deletion - if (!(this.editingSettings.couchDB_USER in responseConfig.admins)) { - addResult($msg("obsidianLiveSyncSettingTab.warnNoAdmin")); - } else { - addResult($msg("obsidianLiveSyncSettingTab.okAdminPrivileges")); - } - if (isGreaterThanOrEqual("3.2.0")) { - // HTTP user-authorization check - if (responseConfig?.chttpd?.require_valid_user != "true") { - isSuccessful = false; - addResult($msg("obsidianLiveSyncSettingTab.errRequireValidUser")); - addConfigFixButton( - $msg("obsidianLiveSyncSettingTab.msgSetRequireValidUser"), - "chttpd/require_valid_user", - "true" - ); - } else { - addResult($msg("obsidianLiveSyncSettingTab.okRequireValidUser")); - } - } else { - if (responseConfig?.chttpd_auth?.require_valid_user != "true") { - isSuccessful = false; - addResult($msg("obsidianLiveSyncSettingTab.errRequireValidUserAuth")); - addConfigFixButton( - $msg("obsidianLiveSyncSettingTab.msgSetRequireValidUserAuth"), - "chttpd_auth/require_valid_user", - "true" - ); - } else { - addResult($msg("obsidianLiveSyncSettingTab.okRequireValidUserAuth")); - } - } - // HTTPD check - // Check Authentication header - if (!responseConfig?.httpd["WWW-Authenticate"]) { - isSuccessful = false; - addResult($msg("obsidianLiveSyncSettingTab.errMissingWwwAuth")); - addConfigFixButton( - $msg("obsidianLiveSyncSettingTab.msgSetWwwAuth"), - "httpd/WWW-Authenticate", - 'Basic realm="couchdb"' - ); - } else { - addResult($msg("obsidianLiveSyncSettingTab.okWwwAuth")); - } - if (isGreaterThanOrEqual("3.2.0")) { - if (responseConfig?.chttpd?.enable_cors != "true") { - isSuccessful = false; - addResult($msg("obsidianLiveSyncSettingTab.errEnableCorsChttpd")); - addConfigFixButton( - $msg("obsidianLiveSyncSettingTab.msgEnableCorsChttpd"), - "chttpd/enable_cors", - "true" - ); - } else { - addResult($msg("obsidianLiveSyncSettingTab.okEnableCorsChttpd")); - } - } else { - if (responseConfig?.httpd?.enable_cors != "true") { - isSuccessful = false; - addResult($msg("obsidianLiveSyncSettingTab.errEnableCors")); - addConfigFixButton($msg("obsidianLiveSyncSettingTab.msgEnableCors"), "httpd/enable_cors", "true"); - } else { - addResult($msg("obsidianLiveSyncSettingTab.okEnableCors")); - } - } - // If the server is not cloudant, configure request size - if (!isCloudantURI(this.editingSettings.couchDB_URI)) { - // REQUEST SIZE - if (Number(responseConfig?.chttpd?.max_http_request_size ?? 0) < 4294967296) { - isSuccessful = false; - addResult($msg("obsidianLiveSyncSettingTab.errMaxRequestSize")); - addConfigFixButton( - $msg("obsidianLiveSyncSettingTab.msgSetMaxRequestSize"), - "chttpd/max_http_request_size", - "4294967296" - ); - } else { - addResult($msg("obsidianLiveSyncSettingTab.okMaxRequestSize")); - } - if (Number(responseConfig?.couchdb?.max_document_size ?? 0) < 50000000) { - isSuccessful = false; - addResult($msg("obsidianLiveSyncSettingTab.errMaxDocumentSize")); - addConfigFixButton( - $msg("obsidianLiveSyncSettingTab.msgSetMaxDocSize"), - "couchdb/max_document_size", - "50000000" - ); - } else { - addResult($msg("obsidianLiveSyncSettingTab.okMaxDocumentSize")); - } - } - // CORS check - // checking connectivity for mobile - if (responseConfig?.cors?.credentials != "true") { - isSuccessful = false; - addResult($msg("obsidianLiveSyncSettingTab.errCorsCredentials")); - addConfigFixButton( - $msg("obsidianLiveSyncSettingTab.msgSetCorsCredentials"), - "cors/credentials", - "true" - ); - } else { - addResult($msg("obsidianLiveSyncSettingTab.okCorsCredentials")); - } - const ConfiguredOrigins = ((responseConfig?.cors?.origins ?? "") + "").split(","); - if ( - responseConfig?.cors?.origins == "*" || - (ConfiguredOrigins.indexOf("app://obsidian.md") !== -1 && - ConfiguredOrigins.indexOf("capacitor://localhost") !== -1 && - ConfiguredOrigins.indexOf("http://localhost") !== -1) - ) { - addResult($msg("obsidianLiveSyncSettingTab.okCorsOrigins")); - } else { - const fixedValue = [ - ...new Set([ - ...ConfiguredOrigins.map((e) => e.trim()), - "app://obsidian.md", - "capacitor://localhost", - "http://localhost", - ]), - ].join(","); - addResult($msg("obsidianLiveSyncSettingTab.errCorsOrigins")); - addConfigFixButton($msg("obsidianLiveSyncSettingTab.msgSetCorsOrigins"), "cors/origins", fixedValue); - isSuccessful = false; - } - addResult($msg("obsidianLiveSyncSettingTab.msgConnectionCheck"), ["ob-btn-config-head"]); - addResult($msg("obsidianLiveSyncSettingTab.msgCurrentOrigin", { origin: window.location.origin })); - - // Request header check - const origins = ["app://obsidian.md", "capacitor://localhost", "http://localhost"]; - for (const org of origins) { - const rr = await requestToCouchDBWithCredentials( - this.editingSettings.couchDB_URI, - credential, - org, - undefined, - undefined, - undefined, - customHeaders - ); - const responseHeaders = Object.fromEntries( - Object.entries(rr.headers).map((e) => { - e[0] = `${e[0]}`.toLowerCase(); - return e; - }) - ); - addResult($msg("obsidianLiveSyncSettingTab.msgOriginCheck", { org })); - if (responseHeaders["access-control-allow-credentials"] != "true") { - addResult($msg("obsidianLiveSyncSettingTab.errCorsNotAllowingCredentials")); - isSuccessful = false; - } else { - addResult($msg("obsidianLiveSyncSettingTab.okCorsCredentialsForOrigin")); - } - if (responseHeaders["access-control-allow-origin"] != org) { - addResult( - $msg("obsidianLiveSyncSettingTab.warnCorsOriginUnmatched", { - from: origin, - to: responseHeaders["access-control-allow-origin"], - }) - ); - } else { - addResult($msg("obsidianLiveSyncSettingTab.okCorsOriginMatched")); - } - } - addResult($msg("obsidianLiveSyncSettingTab.msgDone"), ["ob-btn-config-head"]); - addResult($msg("obsidianLiveSyncSettingTab.msgConnectionProxyNote"), ["ob-btn-config-info"]); - Logger($msg("obsidianLiveSyncSettingTab.logCheckingConfigDone"), LOG_LEVEL_INFO); - } catch (ex: any) { - if (ex?.status == 401) { - isSuccessful = false; - addResult($msg("obsidianLiveSyncSettingTab.errAccessForbidden")); - addResult($msg("obsidianLiveSyncSettingTab.errCannotContinueTest")); - Logger($msg("obsidianLiveSyncSettingTab.logCheckingConfigDone"), LOG_LEVEL_INFO); - } else { - Logger($msg("obsidianLiveSyncSettingTab.logCheckingConfigFailed"), LOG_LEVEL_NOTICE); - Logger(ex); - isSuccessful = false; - } - } - return isSuccessful; - }; - void addPanel(paneEl, $msg("obsidianLiveSyncSettingTab.titleRemoteServer")).then((paneEl) => { - // const containerRemoteDatabaseEl = containerEl.createDiv(); - this.createEl( - paneEl, - "div", - { - text: $msg("obsidianLiveSyncSettingTab.msgSettingsUnchangeableDuringSync"), - }, - undefined, - visibleOnly(() => this.isAnySyncEnabled()) - ).addClass("op-warn-info"); - new Setting(paneEl).autoWireDropDown("remoteType", { - holdValue: true, - options: { - [REMOTE_COUCHDB]: $msg("obsidianLiveSyncSettingTab.optionCouchDB"), - [REMOTE_MINIO]: $msg("obsidianLiveSyncSettingTab.optionMinioS3R2"), - [REMOTE_P2P]: "Only Peer-to-Peer", - }, - onUpdate: this.enableOnlySyncDisabled, - }); - }); - - void addPanel(paneEl, "Peer-to-Peer", undefined, this.onlyOnOnlyP2P).then((paneEl) => { - const syncWarnP2P = this.createEl(paneEl, "div", { - text: "", - }); - const p2pMessage = `This feature is a Work In Progress, and configurable on \`P2P Replicator\` Pane. -The pane also can be launched by \`P2P Replicator\` command from the Command Palette. -`; - - void MarkdownRenderer.render(this.plugin.app, p2pMessage, syncWarnP2P, "/", this.plugin); - syncWarnP2P.addClass("op-warn-info"); - new Setting(paneEl).setName("Apply Settings").setClass("wizardHidden").addApplyButton(["remoteType"]); - // .addOnUpdate(onlyOnMinIO); - // new Setting(paneEl).addButton((button) => - // button - // .setButtonText("Open P2P Replicator") - // .onClick(() => { - // const addOn = this.plugin.getAddOn(P2PReplicator.name); - // void addOn?.openPane(); - // this.closeSetting(); - // }) - // ); - }); - void addPanel(paneEl, $msg("obsidianLiveSyncSettingTab.titleMinioS3R2"), undefined, this.onlyOnMinIO).then( - (paneEl) => { - const syncWarnMinio = this.createEl(paneEl, "div", { - text: "", + const E2EESummaryWritable = writable(E2EEInitialProps); + const updateE2EESummary = () => { + E2EESummaryWritable.set({ + info: getE2EEConfigSummary(this.editingSettings), }); - const ObjectStorageMessage = $msg("obsidianLiveSyncSettingTab.msgObjectStorageWarning"); - - void MarkdownRenderer.render(this.plugin.app, ObjectStorageMessage, syncWarnMinio, "/", this.plugin); - syncWarnMinio.addClass("op-warn-info"); - - new Setting(paneEl).autoWireText("endpoint", { holdValue: true }); - new Setting(paneEl).autoWireToggle("forcePathStyle", { holdValue: true }); - new Setting(paneEl).autoWireText("accessKey", { holdValue: true }); - - new Setting(paneEl).autoWireText("secretKey", { - holdValue: true, - isPassword: true, - }); - - new Setting(paneEl).autoWireText("region", { holdValue: true }); - - new Setting(paneEl).autoWireText("bucket", { holdValue: true }); - new Setting(paneEl).autoWireText("bucketPrefix", { - holdValue: true, - placeHolder: "vaultname/", - }); - - new Setting(paneEl).autoWireToggle("useCustomRequestHandler", { holdValue: true }); - new Setting(paneEl).autoWireTextArea("bucketCustomHeaders", { - holdValue: true, - placeHolder: "x-custom-header: value\n x-custom-header2: value2", - }); - new Setting(paneEl).setName($msg("obsidianLiveSyncSettingTab.nameTestConnection")).addButton((button) => - button - .setButtonText($msg("obsidianLiveSyncSettingTab.btnTest")) - .setDisabled(false) - .onClick(async () => { - await this.testConnection(this.editingSettings); - }) - ); - new Setting(paneEl) - .setName($msg("obsidianLiveSyncSettingTab.nameApplySettings")) - .setClass("wizardHidden") - .addApplyButton([ - "remoteType", - "endpoint", - "region", - "accessKey", - "secretKey", - "bucket", - "useCustomRequestHandler", - "bucketCustomHeaders", - "bucketPrefix", - ]) - .addOnUpdate(this.onlyOnMinIO); - } - ); - - void addPanel(paneEl, $msg("obsidianLiveSyncSettingTab.titleCouchDB"), undefined, this.onlyOnCouchDB).then( - (paneEl) => { - if (this.services.API.isMobile()) { - this.createEl( - paneEl, - "div", - { - text: $msg("obsidianLiveSyncSettingTab.msgNonHTTPSWarning"), - }, - undefined, - visibleOnly(() => !this.editingSettings.couchDB_URI.startsWith("https://")) - ).addClass("op-warn"); - } else { - this.createEl( - paneEl, - "div", - { - text: $msg("obsidianLiveSyncSettingTab.msgNonHTTPSInfo"), - }, - undefined, - visibleOnly(() => !this.editingSettings.couchDB_URI.startsWith("https://")) - ).addClass("op-warn-info"); - } - - new Setting(paneEl).autoWireText("couchDB_URI", { - holdValue: true, - onUpdate: this.enableOnlySyncDisabled, - }); - new Setting(paneEl).autoWireToggle("useJWT", { - holdValue: true, - onUpdate: this.enableOnlySyncDisabled, - }); - new Setting(paneEl).autoWireText("couchDB_USER", { - holdValue: true, - onUpdate: combineOnUpdate( - this.enableOnlySyncDisabled, - visibleOnly(() => !this.editingSettings.useJWT) - ), - }); - new Setting(paneEl).autoWireText("couchDB_PASSWORD", { - holdValue: true, - isPassword: true, - onUpdate: combineOnUpdate( - this.enableOnlySyncDisabled, - visibleOnly(() => !this.editingSettings.useJWT) - ), - }); - const algorithms = { - ["HS256"]: "HS256", - ["HS512"]: "HS512", - ["ES256"]: "ES256", - ["ES512"]: "ES512", - } as const; - new Setting(paneEl).autoWireDropDown("jwtAlgorithm", { - options: algorithms, - onUpdate: combineOnUpdate( - this.enableOnlySyncDisabled, - visibleOnly(() => this.editingSettings.useJWT) - ), - }); - new Setting(paneEl).autoWireTextArea("jwtKey", { - holdValue: true, - onUpdate: combineOnUpdate( - this.enableOnlySyncDisabled, - visibleOnly(() => this.editingSettings.useJWT) - ), - }); - // eslint-disable-next-line prefer-const - let generatedKeyDivEl: HTMLDivElement; - new Setting(paneEl) - .setDesc("Generate ES256 Keypair for testing") + }; + void addPanel(paneEl, "E2EE Configuration", () => {}).then((paneEl) => { + new SveltePanel(InfoPanel, paneEl, E2EESummaryWritable); + const setupButton = new Setting(paneEl).setName("Configure E2EE"); + setupButton .addButton((button) => - button.setButtonText("Generate").onClick(async () => { - const crypto = await getWebCrypto(); - const keyPair = await crypto.subtle.generateKey({ name: "ECDSA", namedCurve: "P-256" }, true, [ - "sign", - "verify", - ]); - const pubKey = await crypto.subtle.exportKey("spki", keyPair.publicKey); - const privateKey = await crypto.subtle.exportKey("pkcs8", keyPair.privateKey); - const encodedPublicKey = await arrayBufferToBase64Single(pubKey); - const encodedPrivateKey = await arrayBufferToBase64Single(privateKey); - - const privateKeyPem = `> -----BEGIN PRIVATE KEY-----\n> ${encodedPrivateKey}\n> -----END PRIVATE KEY-----`; - const publicKeyPem = `> -----BEGIN PUBLIC KEY-----\\n${encodedPublicKey}\\n-----END PUBLIC KEY-----`; - - const title = $msg("Setting.GenerateKeyPair.Title"); - const msg = $msg("Setting.GenerateKeyPair.Desc", { - public_key: publicKeyPem, - private_key: privateKeyPem, - }); - await MarkdownRenderer.render( - this.plugin.app, - "## " + title + "\n\n" + msg, - generatedKeyDivEl, - "/", - this.plugin - ); - }) + button + .onClick(async () => { + const setupManager = this.plugin.getModule(SetupManager); + const originalSettings = getSettingsFromEditingSettings(this.editingSettings); + await setupManager.onlyE2EEConfiguration(UserMode.Update, originalSettings); + updateE2EESummary(); + }) + .setButtonText("Configure") + .setWarning() ) - .addOnUpdate( - combineOnUpdate( - this.enableOnlySyncDisabled, - visibleOnly(() => this.editingSettings.useJWT) + .addButton((button) => + button + .onClick(async () => { + const setupManager = this.plugin.getModule(SetupManager); + const originalSettings = getSettingsFromEditingSettings(this.editingSettings); + await setupManager.onConfigureManually(originalSettings, UserMode.Update); + updateE2EESummary(); + }) + .setButtonText("Configure And Change Remote") + .setWarning() + ); + updateE2EESummary(); + }); + } + { + void addPanel(paneEl, $msg("obsidianLiveSyncSettingTab.titleRemoteServer"), () => {}).then((paneEl) => { + const setting = new Setting(paneEl).setName("Active Remote Configuration"); + + const el = setting.controlEl.createDiv({}); + el.setText(`${remoteNameMap[this.editingSettings.remoteType] || " - "}`); + setting.addButton((button) => + button + .setButtonText("Change Remote and Setup") + .setCta() + .onClick(async () => { + const setupManager = this.plugin.getModule(SetupManager); + const originalSettings = getSettingsFromEditingSettings(this.editingSettings); + await setupManager.onSelectServer(originalSettings, UserMode.Update); + }) + ); + }); + } + { + const initialProps = { + info: getCouchDBConfigSummary(this.editingSettings), + }; + const summaryWritable = writable(initialProps); + const updateSummary = () => { + summaryWritable.set({ + info: getCouchDBConfigSummary(this.editingSettings), + }); + }; + void addPanel(paneEl, $msg("obsidianLiveSyncSettingTab.titleCouchDB"), () => {}).then((paneEl) => { + new SveltePanel(InfoPanel, paneEl, summaryWritable); + const setupButton = new Setting(paneEl).setName("Configure Remote"); + setupButton + .addButton((button) => + button + .setButtonText("Configure") + .setCta() + .onClick(async () => { + const setupManager = this.plugin.getModule(SetupManager); + const originalSettings = getSettingsFromEditingSettings(this.editingSettings); + await setupManager.onCouchDBManualSetup( + UserMode.Update, + originalSettings, + this.editingSettings.remoteType === REMOTE_COUCHDB + ); + + updateSummary(); + }) + ) + .addOnUpdate(() => + toggleActiveSyncClass(paneEl, () => this.editingSettings.remoteType === REMOTE_COUCHDB) + ); + }); + } + { + const initialProps = { + info: getBucketConfigSummary(this.editingSettings), + }; + const summaryWritable = writable(initialProps); + const updateSummary = () => { + summaryWritable.set({ + info: getBucketConfigSummary(this.editingSettings), + }); + }; + void addPanel(paneEl, $msg("obsidianLiveSyncSettingTab.titleMinioS3R2"), () => {}).then((paneEl) => { + new SveltePanel(InfoPanel, paneEl, summaryWritable); + const setupButton = new Setting(paneEl).setName("Configure Remote"); + setupButton + .addButton((button) => + button + .setButtonText("Configure") + .setCta() + .onClick(async () => { + const setupManager = this.plugin.getModule(SetupManager); + const originalSettings = getSettingsFromEditingSettings(this.editingSettings); + await setupManager.onBucketManualSetup( + UserMode.Update, + originalSettings, + this.editingSettings.remoteType === REMOTE_MINIO + ); + //TODO + updateSummary(); + }) + ) + .addOnUpdate(() => + toggleActiveSyncClass(paneEl, () => this.editingSettings.remoteType === REMOTE_MINIO) + ); + }); + } + { + const getDevicePeerId = () => this.services.config.getSmallConfig(SETTING_KEY_P2P_DEVICE_NAME) || ""; + const initialProps = { + info: getP2PConfigSummary(this.editingSettings, { + "Device Peer ID": getDevicePeerId(), + }), + }; + const summaryWritable = writable(initialProps); + const updateSummary = () => { + summaryWritable.set({ + info: getP2PConfigSummary(this.editingSettings, { + "Device Peer ID": getDevicePeerId(), + }), + }); + }; + void addPanel(paneEl, "Peer-to-Peer Synchronisation", () => {}).then((paneEl) => { + new SveltePanel(InfoPanel, paneEl, summaryWritable); + const setupButton = new Setting(paneEl).setName("Configure Remote"); + setupButton + .addButton((button) => + button + .setButtonText("Configure") + .setCta() + .onClick(async () => { + const setupManager = this.plugin.getModule(SetupManager); + const originalSettings = getSettingsFromEditingSettings(this.editingSettings); + await setupManager.onP2PManualSetup( + UserMode.Update, + originalSettings, + this.editingSettings.remoteType === REMOTE_P2P + ); + //TODO + updateSummary(); + }) + ) + .addOnUpdate(() => + toggleActiveSyncClass( + paneEl, + () => this.editingSettings.remoteType === REMOTE_P2P || this.editingSettings.P2P_Enabled ) ); - generatedKeyDivEl = this.createEl( - paneEl, - "div", - { text: "" }, - (el) => {}, - visibleOnly(() => this.editingSettings.useJWT) - ); - - new Setting(paneEl).autoWireText("jwtKid", { - holdValue: true, - onUpdate: combineOnUpdate( - this.enableOnlySyncDisabled, - visibleOnly(() => this.editingSettings.useJWT) - ), - }); - new Setting(paneEl).autoWireText("jwtSub", { - holdValue: true, - onUpdate: combineOnUpdate( - this.enableOnlySyncDisabled, - visibleOnly(() => this.editingSettings.useJWT) - ), - }); - new Setting(paneEl).autoWireNumeric("jwtExpDuration", { - holdValue: true, - onUpdate: combineOnUpdate( - this.enableOnlySyncDisabled, - visibleOnly(() => this.editingSettings.useJWT) - ), - }); - new Setting(paneEl).autoWireText("couchDB_DBNAME", { - holdValue: true, - onUpdate: this.enableOnlySyncDisabled, - }); - new Setting(paneEl).autoWireTextArea("couchDB_CustomHeaders", { holdValue: true }); - new Setting(paneEl).autoWireToggle("useRequestAPI", { - holdValue: true, - onUpdate: this.enableOnlySyncDisabled, - }); - new Setting(paneEl) - .setName($msg("obsidianLiveSyncSettingTab.nameTestDatabaseConnection")) - .setClass("wizardHidden") - .setDesc($msg("obsidianLiveSyncSettingTab.descTestDatabaseConnection")) - .addButton((button) => - button - .setButtonText($msg("obsidianLiveSyncSettingTab.btnTest")) - .setDisabled(false) - .onClick(async () => { - await this.testConnection(); - }) - ); - - new Setting(paneEl) - .setName($msg("obsidianLiveSyncSettingTab.nameValidateDatabaseConfig")) - .setDesc($msg("obsidianLiveSyncSettingTab.descValidateDatabaseConfig")) - .addButton((button) => - button - .setButtonText($msg("obsidianLiveSyncSettingTab.btnCheck")) - .setDisabled(false) - .onClick(async () => { - await checkConfig(checkResultDiv); - }) - ); - checkResultDiv = this.createEl(paneEl, "div", { - text: "", - }); - - new Setting(paneEl) - .setName($msg("obsidianLiveSyncSettingTab.nameApplySettings")) - .setClass("wizardHidden") - .addApplyButton([ - "remoteType", - "couchDB_URI", - "couchDB_USER", - "couchDB_PASSWORD", - "couchDB_DBNAME", - "jwtAlgorithm", - "jwtExpDuration", - "jwtKey", - "jwtSub", - "jwtKid", - "useJWT", - "couchDB_CustomHeaders", - "useRequestAPI", - ]) - .addOnUpdate(this.onlyOnCouchDB); - } - ); - void addPanel(paneEl, $msg("obsidianLiveSyncSettingTab.titleNotification"), () => {}, this.onlyOnCouchDB).then( - (paneEl) => { - paneEl.addClass("wizardHidden"); - new Setting(paneEl).autoWireNumeric("notifyThresholdOfRemoteStorageSize", {}).setClass("wizardHidden"); - } - ); - - void addPanel(paneEl, $msg("obsidianLiveSyncSettingTab.panelPrivacyEncryption")).then((paneEl) => { - new Setting(paneEl).autoWireToggle("encrypt", { holdValue: true }); - - const isEncryptEnabled = visibleOnly(() => this.isConfiguredAs("encrypt", true)); - - new Setting(paneEl).autoWireText("passphrase", { - holdValue: true, - isPassword: true, - onUpdate: isEncryptEnabled, }); + } - new Setting(paneEl).autoWireToggle("usePathObfuscation", { - holdValue: true, - onUpdate: isEncryptEnabled, - }); + // new Setting(paneEl) + // .setDesc("Generate ES256 Keypair for testing") + // .addButton((button) => + // button.setButtonText("Generate").onClick(async () => { + // const crypto = await getWebCrypto(); + // const keyPair = await crypto.subtle.generateKey({ name: "ECDSA", namedCurve: "P-256" }, true, [ + // "sign", + // "verify", + // ]); + // const pubKey = await crypto.subtle.exportKey("spki", keyPair.publicKey); + // const privateKey = await crypto.subtle.exportKey("pkcs8", keyPair.privateKey); + // const encodedPublicKey = await arrayBufferToBase64Single(pubKey); + // const encodedPrivateKey = await arrayBufferToBase64Single(privateKey); + + // const privateKeyPem = `> -----BEGIN PRIVATE KEY-----\n> ${encodedPrivateKey}\n> -----END PRIVATE KEY-----`; + // const publicKeyPem = `> -----BEGIN PUBLIC KEY-----\\n${encodedPublicKey}\\n-----END PUBLIC KEY-----`; + + // const title = $msg("Setting.GenerateKeyPair.Title"); + // const msg = $msg("Setting.GenerateKeyPair.Desc", { + // public_key: publicKeyPem, + // private_key: privateKeyPem, + // }); + // await MarkdownRenderer.render( + // this.plugin.app, + // "## " + title + "\n\n" + msg, + // generatedKeyDivEl, + // "/", + // this.plugin + // ); + // }) + // ) + // .addOnUpdate( + // combineOnUpdate( + // this.enableOnlySyncDisabled, + // visibleOnly(() => this.editingSettings.useJWT) + // ) + // ); + + void addPanel(paneEl, $msg("obsidianLiveSyncSettingTab.titleNotification"), () => {}).then((paneEl) => { + paneEl.addClass("wizardHidden"); + new Setting(paneEl).autoWireNumeric("notifyThresholdOfRemoteStorageSize", {}).setClass("wizardHidden"); }); - void addPanel(paneEl, $msg("obsidianLiveSyncSettingTab.titleFetchSettings")).then((paneEl) => { - new Setting(paneEl) - .setName($msg("obsidianLiveSyncSettingTab.titleFetchConfigFromRemote")) - .setDesc($msg("obsidianLiveSyncSettingTab.descFetchConfigFromRemote")) - .addButton((button) => - button - .setButtonText($msg("obsidianLiveSyncSettingTab.buttonFetch")) - .setDisabled(false) - .onClick(async () => { - const trialSetting = { ...this.initialSettings, ...this.editingSettings }; - const newTweaks = - await this.services.tweakValue.checkAndAskUseRemoteConfiguration(trialSetting); - if (newTweaks.result !== false) { - if (this.inWizard) { - this.editingSettings = { ...this.editingSettings, ...newTweaks.result }; - this.requestUpdate(); - return; - } else { - this.closeSetting(); - this.plugin.settings = { ...this.plugin.settings, ...newTweaks.result }; - if (newTweaks.requireFetch) { - if ( - (await this.plugin.confirm.askYesNoDialog( - $msg("SettingTab.Message.AskRebuild"), - { - defaultOption: "Yes", - } - )) == "no" - ) { - await this.services.setting.saveSettingData(); - return; - } - await this.services.setting.saveSettingData(); - await this.plugin.rebuilder.scheduleFetch(); - this.services.appLifecycle.scheduleRestart(); - return; - } else { - await this.services.setting.saveSettingData(); - } - } - } - }) - ); - }); - new Setting(paneEl).setClass("wizardOnly").addButton((button) => - button - .setButtonText($msg("obsidianLiveSyncSettingTab.buttonNext")) - .setCta() - .setDisabled(false) - .onClick(async () => { - if (!(await checkConfig(checkResultDiv))) { - if ( - (await this.plugin.confirm.askYesNoDialog( - $msg("obsidianLiveSyncSettingTab.msgConfigCheckFailed"), - { - defaultOption: "No", - title: $msg("obsidianLiveSyncSettingTab.titleRemoteConfigCheckFailed"), - } - )) == "no" - ) { - return; - } - } - const isEncryptionFullyEnabled = - !this.editingSettings.encrypt || !this.editingSettings.usePathObfuscation; - if (isEncryptionFullyEnabled) { - if ( - (await this.plugin.confirm.askYesNoDialog( - $msg("obsidianLiveSyncSettingTab.msgEnableEncryptionRecommendation"), - { - defaultOption: "No", - title: $msg("obsidianLiveSyncSettingTab.titleEncryptionNotEnabled"), - } - )) == "no" - ) { - return; - } - } - if (!this.editingSettings.encrypt) { - this.editingSettings.passphrase = ""; - } - if (!(await this.isPassphraseValid())) { - if ( - (await this.plugin.confirm.askYesNoDialog( - $msg("obsidianLiveSyncSettingTab.msgInvalidPassphrase"), - { - defaultOption: "No", - title: $msg("obsidianLiveSyncSettingTab.titleEncryptionPassphraseInvalid"), - } - )) == "no" - ) { - return; - } - } - if (isCloudantURI(this.editingSettings.couchDB_URI)) { - this.editingSettings = { ...this.editingSettings, ...PREFERRED_SETTING_CLOUDANT }; - } else if (this.editingSettings.remoteType == REMOTE_MINIO) { - this.editingSettings = { ...this.editingSettings, ...PREFERRED_JOURNAL_SYNC }; - } else { - this.editingSettings = { ...this.editingSettings, ...PREFERRED_SETTING_SELF_HOSTED }; - } - if ( - (await this.plugin.confirm.askYesNoDialog( - $msg("obsidianLiveSyncSettingTab.msgFetchConfigFromRemote"), - { defaultOption: "Yes", title: $msg("obsidianLiveSyncSettingTab.titleFetchConfig") } - )) == "yes" - ) { - const trialSetting = { ...this.initialSettings, ...this.editingSettings }; - const newTweaks = await this.services.tweakValue.checkAndAskUseRemoteConfiguration(trialSetting); - if (newTweaks.result !== false) { - this.editingSettings = { ...this.editingSettings, ...newTweaks.result }; - this.requestUpdate(); - } else { - // Messages should be already shown. - } - } - this.changeDisplay("30"); - }) - ); + // new Setting(paneEl).setClass("wizardOnly").addButton((button) => + // button + // .setButtonText($msg("obsidianLiveSyncSettingTab.buttonNext")) + // .setCta() + // .setDisabled(false) + // .onClick(async () => { + // if (!(await checkConfig(checkResultDiv))) { + // if ( + // (await this.plugin.confirm.askYesNoDialog( + // $msg("obsidianLiveSyncSettingTab.msgConfigCheckFailed"), + // { + // defaultOption: "No", + // title: $msg("obsidianLiveSyncSettingTab.titleRemoteConfigCheckFailed"), + // } + // )) == "no" + // ) { + // return; + // } + // } + // const isEncryptionFullyEnabled = + // !this.editingSettings.encrypt || !this.editingSettings.usePathObfuscation; + // if (isEncryptionFullyEnabled) { + // if ( + // (await this.plugin.confirm.askYesNoDialog( + // $msg("obsidianLiveSyncSettingTab.msgEnableEncryptionRecommendation"), + // { + // defaultOption: "No", + // title: $msg("obsidianLiveSyncSettingTab.titleEncryptionNotEnabled"), + // } + // )) == "no" + // ) { + // return; + // } + // } + // if (!this.editingSettings.encrypt) { + // this.editingSettings.passphrase = ""; + // } + // if (!(await this.isPassphraseValid())) { + // if ( + // (await this.plugin.confirm.askYesNoDialog( + // $msg("obsidianLiveSyncSettingTab.msgInvalidPassphrase"), + // { + // defaultOption: "No", + // title: $msg("obsidianLiveSyncSettingTab.titleEncryptionPassphraseInvalid"), + // } + // )) == "no" + // ) { + // return; + // } + // } + // if (isCloudantURI(this.editingSettings.couchDB_URI)) { + // this.editingSettings = { ...this.editingSettings, ...PREFERRED_SETTING_CLOUDANT }; + // } else if (this.editingSettings.remoteType == REMOTE_MINIO) { + // this.editingSettings = { ...this.editingSettings, ...PREFERRED_JOURNAL_SYNC }; + // } else { + // this.editingSettings = { ...this.editingSettings, ...PREFERRED_SETTING_SELF_HOSTED }; + // } + // if ( + // (await this.plugin.confirm.askYesNoDialog( + // $msg("obsidianLiveSyncSettingTab.msgFetchConfigFromRemote"), + // { defaultOption: "Yes", title: $msg("obsidianLiveSyncSettingTab.titleFetchConfig") } + // )) == "yes" + // ) { + // const trialSetting = { ...this.initialSettings, ...this.editingSettings }; + // const newTweaks = await this.services.tweakValue.checkAndAskUseRemoteConfiguration(trialSetting); + // if (newTweaks.result !== false) { + // this.editingSettings = { ...this.editingSettings, ...newTweaks.result }; + // this.requestUpdate(); + // } else { + // // Messages should be already shown. + // } + // } + // this.changeDisplay("30"); + // }) + // ); } diff --git a/src/modules/features/SettingDialogue/PaneSetup.ts b/src/modules/features/SettingDialogue/PaneSetup.ts index eade8c6..4e12fd8 100644 --- a/src/modules/features/SettingDialogue/PaneSetup.ts +++ b/src/modules/features/SettingDialogue/PaneSetup.ts @@ -13,6 +13,7 @@ import type { PageFunctions } from "./SettingPane.ts"; import { visibleOnly } from "./SettingPane.ts"; import { DEFAULT_SETTINGS } from "../../../lib/src/common/types.ts"; import { request } from "obsidian"; +import { SetupManager, UserMode } from "../SetupManager.ts"; export function paneSetup( this: ObsidianLiveSyncSettingTab, paneEl: HTMLElement, @@ -30,11 +31,13 @@ export function paneSetup( }); new Setting(paneEl) - .setName($msg("obsidianLiveSyncSettingTab.nameManualSetup")) - .setDesc($msg("obsidianLiveSyncSettingTab.descManualSetup")) + .setName("Rerun Onboarding Wizard") + .setDesc("Rerun the onboarding wizard to set up Self-hosted LiveSync again.") .addButton((text) => { - text.setButtonText($msg("obsidianLiveSyncSettingTab.btnStart")).onClick(async () => { - await this.enableMinimalSetup(); + text.setButtonText("Rerun Wizard").onClick(async () => { + const setupManager = this.plugin.getModule(SetupManager); + await setupManager.onOnboard(UserMode.ExistingUser); + // await this.plugin.moduleSetupObsidian.onBoardingWizard(true); }); }); diff --git a/src/modules/features/SettingDialogue/SveltePanel.ts b/src/modules/features/SettingDialogue/SveltePanel.ts new file mode 100644 index 0000000..9dc13a1 --- /dev/null +++ b/src/modules/features/SettingDialogue/SveltePanel.ts @@ -0,0 +1,54 @@ +import { mount, type Component, unmount } from "svelte"; +import { type Writable, writable, get } from "svelte/store"; + +/** + * Props passed to Svelte panels, containing a writable port + * to communicate with the panel + */ +export type SveltePanelProps = { + port: Writable; +}; + +/** + * A class to manage a Svelte panel within Obsidian + * Especially useful for settings panels + */ +export class SveltePanel { + private _mountedComponent: ReturnType; + private _componentValue = writable(undefined); + /** + * Creates a Svelte panel instance + * @param component Component to mount + * @param mountTo HTMLElement to mount the component to + * @param valueStore Optional writable store to bind to the component's port, if not provided a new one will be created + * @returns The SveltePanel instance + */ + constructor(component: Component>, mountTo: HTMLElement, valueStore?: Writable) { + this._componentValue = valueStore ?? writable(undefined); + this._mountedComponent = mount(component, { + target: mountTo, + props: { + port: this._componentValue, + }, + }); + return this; + } + /** + * Destroys the Svelte panel instance by unmounting the component + */ + destroy() { + if (this._mountedComponent) { + void unmount(this._mountedComponent); + } + } + + /** + * Gets or sets the current value of the component's port + */ + get componentValue() { + return get(this._componentValue); + } + set componentValue(value: T | undefined) { + this._componentValue.set(value); + } +} diff --git a/src/modules/features/SettingDialogue/settingUtils.ts b/src/modules/features/SettingDialogue/settingUtils.ts new file mode 100644 index 0000000..99afea5 --- /dev/null +++ b/src/modules/features/SettingDialogue/settingUtils.ts @@ -0,0 +1,78 @@ +import { escapeStringToHTML } from "octagonal-wheels/string"; +import { E2EEAlgorithmNames, type ObsidianLiveSyncSettings } from "../../../lib/src/common/types"; +import { + pickCouchDBSyncSettings, + pickBucketSyncSettings, + pickP2PSyncSettings, + pickEncryptionSettings, +} from "../../../lib/src/common/utils"; +import { getConfig, type AllSettingItemKey } from "./settingConstants"; + +/** + * Generates a summary of P2P configuration settings + * @param setting Settings object + * @param additional Additional summary information to include + * @param showAdvanced Whether to include advanced settings + * @returns Summary object + */ +export function getP2PConfigSummary( + setting: ObsidianLiveSyncSettings, + additional: Record = {}, + showAdvanced = false +) { + const settingTable: Partial = pickP2PSyncSettings(setting); + return { ...getSummaryFromPartialSettings({ ...settingTable }, showAdvanced), ...additional }; +} +/** + * Generates a summary of Object Storage configuration settings + * @param setting Settings object + * @param showAdvanced Whether to include advanced settings + * @returns Summary object + */ +export function getBucketConfigSummary(setting: ObsidianLiveSyncSettings, showAdvanced = false) { + const settingTable: Partial = pickBucketSyncSettings(setting); + return getSummaryFromPartialSettings(settingTable, showAdvanced); +} +/** + * Generates a summary of CouchDB configuration settings + * @param setting Settings object + * @param showAdvanced Whether to include advanced settings + * @returns Summary object + */ +export function getCouchDBConfigSummary(setting: ObsidianLiveSyncSettings, showAdvanced = false) { + const settingTable: Partial = pickCouchDBSyncSettings(setting); + return getSummaryFromPartialSettings(settingTable, showAdvanced); +} + +/** + * Generates a summary of E2EE configuration settings + * @param setting Settings object + * @param showAdvanced Whether to include advanced settings + * @returns Summary object + */ +export function getE2EEConfigSummary(setting: ObsidianLiveSyncSettings, showAdvanced = false) { + const settingTable: Partial = pickEncryptionSettings(setting); + return getSummaryFromPartialSettings(settingTable, showAdvanced); +} + +/** + * Converts partial settings into a summary object + * @param setting Partial settings object + * @param showAdvanced Whether to include advanced settings + * @returns Summary object + */ +export function getSummaryFromPartialSettings(setting: Partial, showAdvanced = false) { + const outputSummary: Record = {}; + for (const key of Object.keys(setting) as (keyof ObsidianLiveSyncSettings)[]) { + const config = getConfig(key as AllSettingItemKey); + if (!config) continue; + if (config.isAdvanced && !showAdvanced) continue; + const value = + key != "E2EEAlgorithm" + ? `${setting[key]}` + : E2EEAlgorithmNames[`${setting[key]}` as keyof typeof E2EEAlgorithmNames]; + const displayValue = config.isHidden ? "•".repeat(value.length) : escapeStringToHTML(value); + outputSummary[config.name] = displayValue; + } + return outputSummary; +} diff --git a/src/modules/features/SettingDialogue/utilFixCouchDBSetting.ts b/src/modules/features/SettingDialogue/utilFixCouchDBSetting.ts new file mode 100644 index 0000000..041c923 --- /dev/null +++ b/src/modules/features/SettingDialogue/utilFixCouchDBSetting.ts @@ -0,0 +1,274 @@ +import { requestToCouchDBWithCredentials } from "../../../common/utils"; +import { $msg } from "../../../lib/src/common/i18n"; +import { LOG_LEVEL_INFO, LOG_LEVEL_NOTICE, LOG_LEVEL_VERBOSE, Logger } from "../../../lib/src/common/logger"; +import type { ObsidianLiveSyncSettings } from "../../../lib/src/common/types"; +import { fireAndForget, parseHeaderValues } from "../../../lib/src/common/utils"; +import { isCloudantURI } from "../../../lib/src/pouchdb/utils_couchdb"; +import { generateCredentialObject } from "../../../lib/src/replication/httplib"; + +export const checkConfig = async ( + checkResultDiv: HTMLDivElement | undefined, + editingSettings: ObsidianLiveSyncSettings +) => { + Logger($msg("obsidianLiveSyncSettingTab.logCheckingDbConfig"), LOG_LEVEL_INFO); + let isSuccessful = true; + const emptyDiv = createDiv(); + emptyDiv.innerHTML = ""; + checkResultDiv?.replaceChildren(...[emptyDiv]); + const addResult = (msg: string, classes?: string[]) => { + const tmpDiv = createDiv(); + tmpDiv.addClass("ob-btn-config-fix"); + if (classes) { + tmpDiv.addClasses(classes); + } + tmpDiv.innerHTML = `${msg}`; + checkResultDiv?.appendChild(tmpDiv); + }; + try { + if (isCloudantURI(editingSettings.couchDB_URI)) { + Logger($msg("obsidianLiveSyncSettingTab.logCannotUseCloudant"), LOG_LEVEL_NOTICE); + return; + } + // Tip: Add log for cloudant as Logger($msg("obsidianLiveSyncSettingTab.logServerConfigurationCheck")); + const customHeaders = parseHeaderValues(editingSettings.couchDB_CustomHeaders); + const credential = generateCredentialObject(editingSettings); + const r = await requestToCouchDBWithCredentials( + editingSettings.couchDB_URI, + credential, + window.origin, + undefined, + undefined, + undefined, + customHeaders + ); + const responseConfig = r.json; + + const addConfigFixButton = (title: string, key: string, value: string) => { + if (!checkResultDiv) return; + const tmpDiv = createDiv(); + tmpDiv.addClass("ob-btn-config-fix"); + tmpDiv.innerHTML = ``; + const x = checkResultDiv.appendChild(tmpDiv); + x.querySelector("button")?.addEventListener("click", () => { + fireAndForget(async () => { + Logger($msg("obsidianLiveSyncSettingTab.logCouchDbConfigSet", { title, key, value })); + const res = await requestToCouchDBWithCredentials( + editingSettings.couchDB_URI, + credential, + undefined, + key, + value, + undefined, + customHeaders + ); + if (res.status == 200) { + Logger($msg("obsidianLiveSyncSettingTab.logCouchDbConfigUpdated", { title }), LOG_LEVEL_NOTICE); + checkResultDiv.removeChild(x); + await checkConfig(checkResultDiv, editingSettings); + } else { + Logger($msg("obsidianLiveSyncSettingTab.logCouchDbConfigFail", { title }), LOG_LEVEL_NOTICE); + Logger(res.text, LOG_LEVEL_VERBOSE); + } + }); + }); + }; + addResult($msg("obsidianLiveSyncSettingTab.msgNotice"), ["ob-btn-config-head"]); + addResult($msg("obsidianLiveSyncSettingTab.msgIfConfigNotPersistent"), ["ob-btn-config-info"]); + addResult($msg("obsidianLiveSyncSettingTab.msgConfigCheck"), ["ob-btn-config-head"]); + + const serverBanner = r.headers["server"] ?? r.headers["Server"] ?? "unknown"; + addResult($msg("obsidianLiveSyncSettingTab.serverVersion", { info: serverBanner })); + const versionMatch = serverBanner.match(/CouchDB(\/([0-9.]+))?/); + const versionStr = versionMatch ? versionMatch[2] : "0.0.0"; + const versionParts = `${versionStr}.0.0.0`.split("."); + // Compare version string with the target version. + // version must be a string like "3.2.1" or "3.10.2", and must be two or three parts. + function isGreaterThanOrEqual(version: string) { + const targetParts = version.split("."); + for (let i = 0; i < targetParts.length; i++) { + // compare as number if possible (so 3.10 > 3.2, 3.10.1b > 3.10.1a) + const result = versionParts[i].localeCompare(targetParts[i], undefined, { numeric: true }); + if (result > 0) return true; + if (result < 0) return false; + } + return true; + } + // Admin check + // for database creation and deletion + if (!(editingSettings.couchDB_USER in responseConfig.admins)) { + addResult($msg("obsidianLiveSyncSettingTab.warnNoAdmin")); + } else { + addResult($msg("obsidianLiveSyncSettingTab.okAdminPrivileges")); + } + if (isGreaterThanOrEqual("3.2.0")) { + // HTTP user-authorization check + if (responseConfig?.chttpd?.require_valid_user != "true") { + isSuccessful = false; + addResult($msg("obsidianLiveSyncSettingTab.errRequireValidUser")); + addConfigFixButton( + $msg("obsidianLiveSyncSettingTab.msgSetRequireValidUser"), + "chttpd/require_valid_user", + "true" + ); + } else { + addResult($msg("obsidianLiveSyncSettingTab.okRequireValidUser")); + } + } else { + if (responseConfig?.chttpd_auth?.require_valid_user != "true") { + isSuccessful = false; + addResult($msg("obsidianLiveSyncSettingTab.errRequireValidUserAuth")); + addConfigFixButton( + $msg("obsidianLiveSyncSettingTab.msgSetRequireValidUserAuth"), + "chttpd_auth/require_valid_user", + "true" + ); + } else { + addResult($msg("obsidianLiveSyncSettingTab.okRequireValidUserAuth")); + } + } + // HTTPD check + // Check Authentication header + if (!responseConfig?.httpd["WWW-Authenticate"]) { + isSuccessful = false; + addResult($msg("obsidianLiveSyncSettingTab.errMissingWwwAuth")); + addConfigFixButton( + $msg("obsidianLiveSyncSettingTab.msgSetWwwAuth"), + "httpd/WWW-Authenticate", + 'Basic realm="couchdb"' + ); + } else { + addResult($msg("obsidianLiveSyncSettingTab.okWwwAuth")); + } + if (isGreaterThanOrEqual("3.2.0")) { + if (responseConfig?.chttpd?.enable_cors != "true") { + isSuccessful = false; + addResult($msg("obsidianLiveSyncSettingTab.errEnableCorsChttpd")); + addConfigFixButton( + $msg("obsidianLiveSyncSettingTab.msgEnableCorsChttpd"), + "chttpd/enable_cors", + "true" + ); + } else { + addResult($msg("obsidianLiveSyncSettingTab.okEnableCorsChttpd")); + } + } else { + if (responseConfig?.httpd?.enable_cors != "true") { + isSuccessful = false; + addResult($msg("obsidianLiveSyncSettingTab.errEnableCors")); + addConfigFixButton($msg("obsidianLiveSyncSettingTab.msgEnableCors"), "httpd/enable_cors", "true"); + } else { + addResult($msg("obsidianLiveSyncSettingTab.okEnableCors")); + } + } + // If the server is not cloudant, configure request size + if (!isCloudantURI(editingSettings.couchDB_URI)) { + // REQUEST SIZE + if (Number(responseConfig?.chttpd?.max_http_request_size ?? 0) < 4294967296) { + isSuccessful = false; + addResult($msg("obsidianLiveSyncSettingTab.errMaxRequestSize")); + addConfigFixButton( + $msg("obsidianLiveSyncSettingTab.msgSetMaxRequestSize"), + "chttpd/max_http_request_size", + "4294967296" + ); + } else { + addResult($msg("obsidianLiveSyncSettingTab.okMaxRequestSize")); + } + if (Number(responseConfig?.couchdb?.max_document_size ?? 0) < 50000000) { + isSuccessful = false; + addResult($msg("obsidianLiveSyncSettingTab.errMaxDocumentSize")); + addConfigFixButton( + $msg("obsidianLiveSyncSettingTab.msgSetMaxDocSize"), + "couchdb/max_document_size", + "50000000" + ); + } else { + addResult($msg("obsidianLiveSyncSettingTab.okMaxDocumentSize")); + } + } + // CORS check + // checking connectivity for mobile + if (responseConfig?.cors?.credentials != "true") { + isSuccessful = false; + addResult($msg("obsidianLiveSyncSettingTab.errCorsCredentials")); + addConfigFixButton($msg("obsidianLiveSyncSettingTab.msgSetCorsCredentials"), "cors/credentials", "true"); + } else { + addResult($msg("obsidianLiveSyncSettingTab.okCorsCredentials")); + } + const ConfiguredOrigins = ((responseConfig?.cors?.origins ?? "") + "").split(","); + if ( + responseConfig?.cors?.origins == "*" || + (ConfiguredOrigins.indexOf("app://obsidian.md") !== -1 && + ConfiguredOrigins.indexOf("capacitor://localhost") !== -1 && + ConfiguredOrigins.indexOf("http://localhost") !== -1) + ) { + addResult($msg("obsidianLiveSyncSettingTab.okCorsOrigins")); + } else { + const fixedValue = [ + ...new Set([ + ...ConfiguredOrigins.map((e) => e.trim()), + "app://obsidian.md", + "capacitor://localhost", + "http://localhost", + ]), + ].join(","); + addResult($msg("obsidianLiveSyncSettingTab.errCorsOrigins")); + addConfigFixButton($msg("obsidianLiveSyncSettingTab.msgSetCorsOrigins"), "cors/origins", fixedValue); + isSuccessful = false; + } + addResult($msg("obsidianLiveSyncSettingTab.msgConnectionCheck"), ["ob-btn-config-head"]); + addResult($msg("obsidianLiveSyncSettingTab.msgCurrentOrigin", { origin: window.location.origin })); + + // Request header check + const origins = ["app://obsidian.md", "capacitor://localhost", "http://localhost"]; + for (const org of origins) { + const rr = await requestToCouchDBWithCredentials( + editingSettings.couchDB_URI, + credential, + org, + undefined, + undefined, + undefined, + customHeaders + ); + const responseHeaders = Object.fromEntries( + Object.entries(rr.headers).map((e) => { + e[0] = `${e[0]}`.toLowerCase(); + return e; + }) + ); + addResult($msg("obsidianLiveSyncSettingTab.msgOriginCheck", { org })); + if (responseHeaders["access-control-allow-credentials"] != "true") { + addResult($msg("obsidianLiveSyncSettingTab.errCorsNotAllowingCredentials")); + isSuccessful = false; + } else { + addResult($msg("obsidianLiveSyncSettingTab.okCorsCredentialsForOrigin")); + } + if (responseHeaders["access-control-allow-origin"] != org) { + addResult( + $msg("obsidianLiveSyncSettingTab.warnCorsOriginUnmatched", { + from: origin, + to: responseHeaders["access-control-allow-origin"], + }) + ); + } else { + addResult($msg("obsidianLiveSyncSettingTab.okCorsOriginMatched")); + } + } + addResult($msg("obsidianLiveSyncSettingTab.msgDone"), ["ob-btn-config-head"]); + addResult($msg("obsidianLiveSyncSettingTab.msgConnectionProxyNote"), ["ob-btn-config-info"]); + Logger($msg("obsidianLiveSyncSettingTab.logCheckingConfigDone"), LOG_LEVEL_INFO); + } catch (ex: any) { + if (ex?.status == 401) { + isSuccessful = false; + addResult($msg("obsidianLiveSyncSettingTab.errAccessForbidden")); + addResult($msg("obsidianLiveSyncSettingTab.errCannotContinueTest")); + Logger($msg("obsidianLiveSyncSettingTab.logCheckingConfigDone"), LOG_LEVEL_INFO); + } else { + Logger($msg("obsidianLiveSyncSettingTab.logCheckingConfigFailed"), LOG_LEVEL_NOTICE); + Logger(ex); + isSuccessful = false; + } + } + return isSuccessful; +}; diff --git a/src/modules/features/SetupManager.ts b/src/modules/features/SetupManager.ts new file mode 100644 index 0000000..83ebbe1 --- /dev/null +++ b/src/modules/features/SetupManager.ts @@ -0,0 +1,378 @@ +import { + type ObsidianLiveSyncSettings, + DEFAULT_SETTINGS, + LOG_LEVEL_NOTICE, + LOG_LEVEL_VERBOSE, + REMOTE_COUCHDB, + REMOTE_MINIO, + REMOTE_P2P, +} from "../../lib/src/common/types.ts"; +import { generatePatchObj, isObjectDifferent } from "../../lib/src/common/utils.ts"; +import { AbstractObsidianModule } from "../AbstractObsidianModule.ts"; +import { SvelteDialogManager } from "./SetupWizard/ObsidianSvelteDialog.ts"; +import Intro from "./SetupWizard/dialogs/Intro.svelte"; +import SelectMethodNewUser from "./SetupWizard/dialogs/SelectMethodNewUser.svelte"; +import SelectMethodExisting from "./SetupWizard/dialogs/SelectMethodExisting.svelte"; +import ScanQRCode from "./SetupWizard/dialogs/ScanQRCode.svelte"; +import UseSetupURI from "./SetupWizard/dialogs/UseSetupURI.svelte"; +import OutroNewUser from "./SetupWizard/dialogs/OutroNewUser.svelte"; +import OutroExistingUser from "./SetupWizard/dialogs/OutroExistingUser.svelte"; +import OutroAskUserMode from "./SetupWizard/dialogs/OutroAskUserMode.svelte"; +import SetupRemote from "./SetupWizard/dialogs/SetupRemote.svelte"; +import SetupRemoteCouchDB from "./SetupWizard/dialogs/SetupRemoteCouchDB.svelte"; +import SetupRemoteBucket from "./SetupWizard/dialogs/SetupRemoteBucket.svelte"; +import SetupRemoteP2P from "./SetupWizard/dialogs/SetupRemoteP2P.svelte"; +import SetupRemoteE2EE from "./SetupWizard/dialogs/SetupRemoteE2EE.svelte"; +import { decodeSettingsFromQRCodeData } from "../../lib/src/API/processSetting.ts"; + +/** + * User modes for onboarding and setup + */ +export const enum UserMode { + /** + * New User Mode - for users who are new to the plugin + */ + NewUser = "new-user", + /** + * Existing User Mode - for users who have used the plugin before, or just configuring again + */ + ExistingUser = "existing-user", + /** + * Unknown User Mode - for cases where the user mode is not determined + */ + Unknown = "unknown", + /** + * Update User Mode - for users who are updating configuration. May be `existing-user` as well, but possibly they want to treat it differently. + */ + // eslint-disable-next-line @typescript-eslint/no-duplicate-enum-values + Update = "unknown", // Alias for Unknown for better readability +} + +/** + * Setup Manager to handle onboarding and configuration setup + */ +export class SetupManager extends AbstractObsidianModule { + /** + * Dialog manager for handling Svelte dialogs + */ + private dialogManager: SvelteDialogManager = new SvelteDialogManager(this.plugin); + + /** + * Starts the onboarding process + * @returns Promise that resolves to true if onboarding completed successfully, false otherwise + */ + async startOnBoarding(): Promise { + const isUserNewOrExisting = await this.dialogManager.openWithExplicitCancel(Intro); + if (isUserNewOrExisting === "new-user") { + await this.onOnboard(UserMode.NewUser); + } else if (isUserNewOrExisting === "existing-user") { + await this.onOnboard(UserMode.ExistingUser); + } else if (isUserNewOrExisting === "cancelled") { + this._log("Onboarding cancelled by user.", LOG_LEVEL_NOTICE); + return false; + } + return false; + } + + /** + * Handles the onboarding process based on user mode + * @param userMode + * @returns Promise that resolves to true if onboarding completed successfully, false otherwise + */ + async onOnboard(userMode: UserMode): Promise { + const originalSetting = userMode === UserMode.NewUser ? DEFAULT_SETTINGS : this.core.settings; + if (userMode === UserMode.NewUser) { + //Ask how to apply initial setup + const method = await this.dialogManager.openWithExplicitCancel(SelectMethodNewUser); + if (method === "use-setup-uri") { + await this.onUseSetupURI(userMode); + } else if (method === "configure-manually") { + await this.onConfigureManually(originalSetting, userMode); + } else if (method === "cancelled") { + this._log("Onboarding cancelled by user.", LOG_LEVEL_NOTICE); + return false; + } + } else if (userMode === UserMode.ExistingUser) { + const method = await this.dialogManager.openWithExplicitCancel(SelectMethodExisting); + if (method === "use-setup-uri") { + await this.onUseSetupURI(userMode); + } else if (method === "configure-manually") { + await this.onConfigureManually(originalSetting, userMode); + } else if (method === "scan-qr-code") { + await this.onPromptQRCodeInstruction(); + } else if (method === "cancelled") { + this._log("Onboarding cancelled by user.", LOG_LEVEL_NOTICE); + return false; + } + } + return false; + } + + /** + * Handles setup using a setup URI + * @param userMode + * @param setupURI + * @returns Promise that resolves to true if onboarding completed successfully, false otherwise + */ + async onUseSetupURI(userMode: UserMode, setupURI: string = ""): Promise { + const newSetting = await this.dialogManager.openWithExplicitCancel(UseSetupURI, setupURI); + if (newSetting === "cancelled") { + this._log("Setup URI dialog cancelled.", LOG_LEVEL_NOTICE); + return false; + } + this._log("Setup URI dialog closed.", LOG_LEVEL_VERBOSE); + return await this.onConfirmApplySettingsFromWizard(newSetting, userMode); + } + + /** + * Handles manual setup for CouchDB + * @param userMode + * @param currentSetting + * @param activate Whether to activate the CouchDB as remote type + * @returns Promise that resolves to true if setup completed successfully, false otherwise + */ + async onCouchDBManualSetup( + userMode: UserMode, + currentSetting: ObsidianLiveSyncSettings, + activate = true + ): Promise { + const originalSetting = JSON.parse(JSON.stringify(currentSetting)) as ObsidianLiveSyncSettings; + const baseSetting = JSON.parse(JSON.stringify(originalSetting)) as ObsidianLiveSyncSettings; + const couchConf = await this.dialogManager.openWithExplicitCancel(SetupRemoteCouchDB, originalSetting); + if (couchConf === "cancelled") { + this._log("Manual configuration cancelled.", LOG_LEVEL_NOTICE); + return await this.onOnboard(userMode); + } + const newSetting = { ...baseSetting, ...couchConf } as ObsidianLiveSyncSettings; + if (activate) { + newSetting.remoteType = REMOTE_COUCHDB; + } + return await this.onConfirmApplySettingsFromWizard(newSetting, userMode, activate); + } + + /** + * Handles manual setup for S3-compatible bucket + * @param userMode + * @param currentSetting + * @param activate Whether to activate the Bucket as remote type + * @returns Promise that resolves to true if setup completed successfully, false otherwise + */ + async onBucketManualSetup( + userMode: UserMode, + currentSetting: ObsidianLiveSyncSettings, + activate = true + ): Promise { + const bucketConf = await this.dialogManager.openWithExplicitCancel(SetupRemoteBucket, currentSetting); + if (bucketConf === "cancelled") { + this._log("Manual configuration cancelled.", LOG_LEVEL_NOTICE); + return await this.onOnboard(userMode); + } + const newSetting = { ...currentSetting, ...bucketConf } as ObsidianLiveSyncSettings; + if (activate) { + newSetting.remoteType = REMOTE_MINIO; + } + return await this.onConfirmApplySettingsFromWizard(newSetting, userMode, activate); + } + + /** + * Handles manual setup for P2P + * @param userMode + * @param currentSetting + * @param activate Whether to activate the P2P as remote type (as P2P Only setup) + * @returns Promise that resolves to true if setup completed successfully, false otherwise + */ + async onP2PManualSetup( + userMode: UserMode, + currentSetting: ObsidianLiveSyncSettings, + activate = true + ): Promise { + const p2pConf = await this.dialogManager.openWithExplicitCancel(SetupRemoteP2P, currentSetting); + if (p2pConf === "cancelled") { + this._log("Manual configuration cancelled.", LOG_LEVEL_NOTICE); + return await this.onOnboard(userMode); + } + const newSetting = { ...currentSetting, ...p2pConf } as ObsidianLiveSyncSettings; + if (activate) { + newSetting.remoteType = REMOTE_P2P; + } + return await this.onConfirmApplySettingsFromWizard(newSetting, userMode, activate); + } + + /** + * Handles only E2EE configuration + * @param userMode + * @param currentSetting + * @returns + */ + async onlyE2EEConfiguration(userMode: UserMode, currentSetting: ObsidianLiveSyncSettings): Promise { + const e2eeConf = await this.dialogManager.openWithExplicitCancel(SetupRemoteE2EE, currentSetting); + if (e2eeConf === "cancelled") { + this._log("E2EE configuration cancelled.", LOG_LEVEL_NOTICE); + return await false; + } + const newSetting = { + ...currentSetting, + ...e2eeConf, + } as ObsidianLiveSyncSettings; + return await this.onConfirmApplySettingsFromWizard(newSetting, userMode); + } + + /** + * Handles manual configuration flow (E2EE + select server) + * @param originalSetting + * @param userMode + * @returns + */ + async onConfigureManually(originalSetting: ObsidianLiveSyncSettings, userMode: UserMode): Promise { + const e2eeConf = await this.dialogManager.openWithExplicitCancel(SetupRemoteE2EE, originalSetting); + if (e2eeConf === "cancelled") { + this._log("Manual configuration cancelled.", LOG_LEVEL_NOTICE); + return await this.onOnboard(userMode); + } + const currentSetting = { + ...originalSetting, + ...e2eeConf, + } as ObsidianLiveSyncSettings; + return await this.onSelectServer(currentSetting, userMode); + } + + /** + * Handles server selection during manual configuration + * @param currentSetting + * @param userMode + * @returns + */ + async onSelectServer(currentSetting: ObsidianLiveSyncSettings, userMode: UserMode): Promise { + const method = await this.dialogManager.openWithExplicitCancel(SetupRemote); + if (method === "couchdb") { + return await this.onCouchDBManualSetup(userMode, currentSetting, true); + } else if (method === "bucket") { + return await this.onBucketManualSetup(userMode, currentSetting, true); + } else if (method === "p2p") { + return await this.onP2PManualSetup(userMode, currentSetting, true); + } else if (method === "cancelled") { + this._log("Manual configuration cancelled.", LOG_LEVEL_NOTICE); + if (userMode !== UserMode.Unknown) { + return await this.onOnboard(userMode); + } + } + // Should not reach here. + return false; + } + /** + * Confirms and applies settings obtained from the wizard + * @param newConf + * @param _userMode + * @param activate Whether to activate the remote type in the new settings + * @param extra Extra function to run before applying settings + * @returns Promise that resolves to true if settings applied successfully, false otherwise + */ + async onConfirmApplySettingsFromWizard( + newConf: ObsidianLiveSyncSettings, + _userMode: UserMode, + activate: boolean = true, + extra: () => void = () => {} + ): Promise { + let userMode = _userMode; + if (userMode === UserMode.Unknown) { + if (isObjectDifferent(this.settings, newConf, true) === false) { + this._log("No changes in settings detected. Skipping applying settings from wizard.", LOG_LEVEL_NOTICE); + return true; + } + const patch = generatePatchObj(this.settings, newConf); + console.log(`Changes:`); + console.dir(patch); + if (!activate) { + extra(); + await this.applySetting(newConf, UserMode.ExistingUser); + this._log("Setting Applied", LOG_LEVEL_NOTICE); + return true; + } + // Check virtual changes + const original = { ...this.settings, P2P_DevicePeerName: "" } as ObsidianLiveSyncSettings; + const modified = { ...newConf, P2P_DevicePeerName: "" } as ObsidianLiveSyncSettings; + const isOnlyVirtualChange = isObjectDifferent(original, modified, true) === false; + if (isOnlyVirtualChange) { + extra(); + await this.applySetting(newConf, UserMode.ExistingUser); + this._log("Settings from wizard applied.", LOG_LEVEL_NOTICE); + return true; + } else { + const userModeResult = await this.dialogManager.openWithExplicitCancel(OutroAskUserMode); + if (userModeResult === "new-user") { + userMode = UserMode.NewUser; + } else if (userModeResult === "existing-user") { + userMode = UserMode.ExistingUser; + } else if (userModeResult === "compatible-existing-user") { + extra(); + await this.applySetting(newConf, UserMode.ExistingUser); + this._log("Settings from wizard applied.", LOG_LEVEL_NOTICE); + return true; + } else if (userModeResult === "cancelled") { + this._log("User cancelled applying settings from wizard.", LOG_LEVEL_NOTICE); + return false; + } + } + } + const component = userMode === UserMode.NewUser ? OutroNewUser : OutroExistingUser; + const confirm = await this.dialogManager.openWithExplicitCancel(component); + if (confirm === "cancelled") { + this._log("User cancelled applying settings from wizard..", LOG_LEVEL_NOTICE); + return false; + } + if (confirm) { + extra(); + await this.applySetting(newConf, userMode); + if (userMode === UserMode.NewUser) { + // For new users, schedule a rebuild everything. + await this.core.rebuilder.scheduleRebuild(); + } else { + // For existing users, schedule a fetch. + await this.core.rebuilder.scheduleFetch(); + } + } + // Settings applied, but may require rebuild to take effect. + return false; + } + + /** + * Prompts the user with QR code scanning instructions + * @returns Promise that resolves to false as QR code instruction dialog does not yield settings directly + */ + + async onPromptQRCodeInstruction(): Promise { + const qrResult = await this.dialogManager.open(ScanQRCode); + this._log("QR Code dialog closed.", LOG_LEVEL_VERBOSE); + // Result is not used, but log it for debugging. + this._log(`QR Code result: ${qrResult}`, LOG_LEVEL_VERBOSE); + // QR Code instruction dialog never yields settings directly. + return false; + } + + /** + * Decodes settings from a QR code string and applies them + * @param qr QR code string containing encoded settings + * @returns Promise that resolves to true if settings applied successfully, false otherwise + */ + async decodeQR(qr: string) { + const newSettings = decodeSettingsFromQRCodeData(qr); + return await this.onConfirmApplySettingsFromWizard(newSettings, UserMode.Unknown); + } + + /** + * Applies the new settings to the core settings and saves them + * @param newConf + * @param userMode + * @returns Promise that resolves to true if settings applied successfully, false otherwise + */ + async applySetting(newConf: ObsidianLiveSyncSettings, userMode: UserMode) { + const newSetting = { + ...this.core.settings, + ...newConf, + }; + this.core.settings = newSetting; + this.services.setting.clearUsedPassphrase(); + await this.services.setting.saveSettingData(); + return true; + } +} diff --git a/src/modules/features/SetupWizard/ObsidianSvelteDialog.ts b/src/modules/features/SetupWizard/ObsidianSvelteDialog.ts new file mode 100644 index 0000000..51e57ad --- /dev/null +++ b/src/modules/features/SetupWizard/ObsidianSvelteDialog.ts @@ -0,0 +1,141 @@ +import { eventHub, EVENT_PLUGIN_UNLOADED } from "@/common/events"; +import { Modal } from "@/deps"; +import type ObsidianLiveSyncPlugin from "@/main"; +import { mount, unmount } from "svelte"; +import DialogHost from "@lib/UI/DialogHost.svelte"; +import { fireAndForget, promiseWithResolvers, type PromiseWithResolvers } from "octagonal-wheels/promises"; +import { LOG_LEVEL_NOTICE, Logger } from "octagonal-wheels/common/logger"; +import { + type DialogControlBase, + type DialogSvelteComponentBaseProps, + type ComponentHasResult, + setupDialogContext, + getDialogContext, + type SvelteDialogManagerBase, +} from "@/lib/src/UI/svelteDialog.ts"; + +export type DialogSvelteComponentProps = DialogSvelteComponentBaseProps & { + plugin: ObsidianLiveSyncPlugin; + services: ObsidianLiveSyncPlugin["services"]; +}; + +export type DialogControls = DialogControlBase & { + plugin: ObsidianLiveSyncPlugin; + services: ObsidianLiveSyncPlugin["services"]; +}; + +export type DialogMessageProps = Record; +// type DialogSvelteComponent = Component,any>; + +export class SvelteDialog extends Modal { + plugin: ObsidianLiveSyncPlugin; + mountedComponent?: ReturnType; + component: ComponentHasResult; + result?: T; + initialData?: U; + title: string = "Obsidian LiveSync - Setup Wizard"; + constructor(plugin: ObsidianLiveSyncPlugin, component: ComponentHasResult, initialData?: U) { + super(plugin.app); + this.plugin = plugin; + this.component = component; + this.initialData = initialData; + } + resolveResult() { + this.resultPromiseWithResolvers?.resolve(this.result); + this.resultPromiseWithResolvers = undefined; + } + resultPromiseWithResolvers?: PromiseWithResolvers; + onOpen() { + const { contentEl } = this; + contentEl.empty(); + // eslint-disable-next-line @typescript-eslint/no-this-alias + const dialog = this; + + if (this.resultPromiseWithResolvers) { + this.resultPromiseWithResolvers.reject("Dialog opened again"); + } + const pr = promiseWithResolvers(); + eventHub.once(EVENT_PLUGIN_UNLOADED, () => { + if (this.resultPromiseWithResolvers === pr) { + pr.reject("Plugin unloaded"); + this.close(); + } + }); + this.resultPromiseWithResolvers = pr; + this.mountedComponent = mount(DialogHost, { + target: contentEl, + props: { + onSetupContext: (props: DialogSvelteComponentBaseProps) => { + setupDialogContext({ + ...props, + plugin: this.plugin, + services: this.plugin.services, + }); + }, + setTitle: (title: string) => { + dialog.setTitle(title); + }, + closeDialog: () => { + dialog.close(); + }, + setResult: (result: T) => { + this.result = result; + }, + getInitialData: () => this.initialData, + mountComponent: this.component, + }, + }); + } + waitForClose(): Promise { + if (!this.resultPromiseWithResolvers) { + throw new Error("Dialog not opened yet"); + } + return this.resultPromiseWithResolvers.promise; + } + onClose() { + this.resolveResult(); + fireAndForget(async () => { + if (this.mountedComponent) { + await unmount(this.mountedComponent); + } + }); + } +} + +export async function openSvelteDialog( + plugin: ObsidianLiveSyncPlugin, + component: ComponentHasResult, + initialData?: U +): Promise { + const dialog = new SvelteDialog(plugin, component, initialData); + dialog.open(); + + return await dialog.waitForClose(); +} + +export class SvelteDialogManager implements SvelteDialogManagerBase { + plugin: ObsidianLiveSyncPlugin; + constructor(plugin: ObsidianLiveSyncPlugin) { + this.plugin = plugin; + } + async open(component: ComponentHasResult, initialData?: U): Promise { + return await openSvelteDialog(this.plugin, component, initialData); + } + async openWithExplicitCancel(component: ComponentHasResult, initialData?: U): Promise { + for (let i = 0; i < 10; i++) { + const ret = await openSvelteDialog(this.plugin, component, initialData); + if (ret !== undefined) { + return ret; + } + if (this.plugin.services.appLifecycle.hasUnloaded()) { + throw new Error("Operation cancelled due to app shutdown."); + } + Logger("Please select 'Cancel' explicitly to cancel this operation.", LOG_LEVEL_NOTICE); + } + throw new Error("Operation Forcibly cancelled by user."); + } +} + +export function getObsidianDialogContext(): DialogControls { + return getDialogContext() as DialogControls; +} diff --git a/src/modules/features/SetupWizard/dialogs/FetchEverything.svelte b/src/modules/features/SetupWizard/dialogs/FetchEverything.svelte new file mode 100644 index 0000000..e704782 --- /dev/null +++ b/src/modules/features/SetupWizard/dialogs/FetchEverything.svelte @@ -0,0 +1,154 @@ + + + +This will rebuild the local database on this device using the most recent data from the server. This action is + designed to resolve synchronisation inconsistencies and restore correct functionality. + + If you have unsynchronised changes in your Vault on this device, they will likely diverge from the server's + versions after the reset. This may result in a large number of file conflicts.
+ Furthermore, if conflicts are already present in the server data, they will be synchronised to this device as they are, + and you will need to resolve them locally. +
+
+ + To minimise the creation of new conflicts, please select the option that best describes the + current state of your Vault. The application will then check your files in the most appropriate way based on + your selection. + + + + + + +
+ + Have you created a backup before proceeding? + + We recommend that you copy your Vault folder to a safe location. This will provide a safeguard in case a large + number of conflicts arise, or if you accidentally synchronise with an incorrect destination. + + + + + + + + + + + + commit()} /> + setResult(TYPE_CANCEL)} /> + diff --git a/src/modules/features/SetupWizard/dialogs/Intro.svelte b/src/modules/features/SetupWizard/dialogs/Intro.svelte new file mode 100644 index 0000000..a1f90de --- /dev/null +++ b/src/modules/features/SetupWizard/dialogs/Intro.svelte @@ -0,0 +1,55 @@ + + + +We will now guide you through a few questions to simplify the synchronisation setup. + + First, please select the option that best describes your current situation. + + + + + + + setResult(userType)} /> + setResult(TYPE_CANCELLED)} /> + diff --git a/src/modules/features/SetupWizard/dialogs/OutroAskUserMode.svelte b/src/modules/features/SetupWizard/dialogs/OutroAskUserMode.svelte new file mode 100644 index 0000000..217e142 --- /dev/null +++ b/src/modules/features/SetupWizard/dialogs/OutroAskUserMode.svelte @@ -0,0 +1,75 @@ + + + + + The connection to the server has been configured successfully. As the next step, the local database, that is to say the synchronisation information, must be reconstituted. + + + Please select your situation. + + + + + + setResult(userType)} /> + setResult(TYPE_CANCELLED)} /> + diff --git a/src/modules/features/SetupWizard/dialogs/OutroExistingUser.svelte b/src/modules/features/SetupWizard/dialogs/OutroExistingUser.svelte new file mode 100644 index 0000000..ef9f5ac --- /dev/null +++ b/src/modules/features/SetupWizard/dialogs/OutroExistingUser.svelte @@ -0,0 +1,37 @@ + + + + +

+ The connection to the server has been configured successfully. As the next step, the latest synchronisation data will be downloaded from the server to this device. +

+

+ PLEASE NOTE +
+ After restarting, the database on this device will be rebuilt using data from the server. If there are any unsynchronised + files in this vault, conflicts may occur with the server data. +

+
+ + Please select the button below to restart and proceed to the data fetching confirmation. + + + setResult(TYPE_APPLY)} /> + setResult(TYPE_CANCELLED)} /> + diff --git a/src/modules/features/SetupWizard/dialogs/OutroNewUser.svelte b/src/modules/features/SetupWizard/dialogs/OutroNewUser.svelte new file mode 100644 index 0000000..ff39c62 --- /dev/null +++ b/src/modules/features/SetupWizard/dialogs/OutroNewUser.svelte @@ -0,0 +1,38 @@ + + + + +

+ The connection to the server has been configured successfully. As the next step, the synchronisation data on the server will be built based on the current data on this device. +

+

+ IMPORTANT +
+ After restarting, the data on this device will be uploaded to the server as the 'master copy'. Please be aware that + any unintended data currently on the server will be completely overwritten. +

+
+ + Please select the button below to restart and proceed to the final confirmation. + + + setResult(TYPE_APPLY)} /> + setResult(TYPE_CANCELLED)} /> + diff --git a/src/modules/features/SetupWizard/dialogs/PanelCouchDBCheck.svelte b/src/modules/features/SetupWizard/dialogs/PanelCouchDBCheck.svelte new file mode 100644 index 0000000..d2cef32 --- /dev/null +++ b/src/modules/features/SetupWizard/dialogs/PanelCouchDBCheck.svelte @@ -0,0 +1,141 @@ + + +{#snippet result(issue: ConfigCheckResult)} +
+
+ {issue.message} +
+ {#if isFixableError(issue)} +
+ +
+ {/if} +
+{/snippet} + + + +
+
+ + {#if detectedIssues.length === 0} + No checks have been performed yet. + {:else if isAllSuccess} + All checks passed successfully! + {:else} + {errorIssueCount} issue(s) detected! + {/if} + + {#if detectedIssues.length > 0} +

Issue detection log:

+ {#each detectedIssues as issue} + {@render result(issue)} + {/each} + {/if} +
+
+ + diff --git a/src/modules/features/SetupWizard/dialogs/RebuildEverything.svelte b/src/modules/features/SetupWizard/dialogs/RebuildEverything.svelte new file mode 100644 index 0000000..93aa834 --- /dev/null +++ b/src/modules/features/SetupWizard/dialogs/RebuildEverything.svelte @@ -0,0 +1,126 @@ + + + +This procedure will first delete all existing synchronisation data from the server. Following this, the server data + will be completely rebuilt, using the current state of your Vault on this device (including its local database) as + the single, authoritative master copy. + + You should perform this operation only in exceptional circumstances, such as when the server data is completely + corrupted, when changes on all other devices are no longer needed, or when the database size has become unusually + large in comparison to the Vault size. + + + + There is a way to resolve this on other devices. + Of course, we can back up the data before proceeding. + + + by resetting the remote, you will be informed on other devices. + + + +
+ + Have you created a backup before proceeding? + + This is an extremely powerful operation. We strongly recommend that you copy your Vault folder to a safe + location. + + + + + + + + + + + + commit()} /> + setResult(TYPE_CANCEL)} /> + diff --git a/src/modules/features/SetupWizard/dialogs/ScanQRCode.svelte b/src/modules/features/SetupWizard/dialogs/ScanQRCode.svelte new file mode 100644 index 0000000..58ad125 --- /dev/null +++ b/src/modules/features/SetupWizard/dialogs/ScanQRCode.svelte @@ -0,0 +1,28 @@ + + + +Please follow the steps below to import settings from your existing device. + + +
    +
  1. On this device, please keep this Vault open.
  2. +
  3. On the source device, open Obsidian.
  4. +
  5. On the source device, from the command palette, run the 'Show settings as a QR code' command.
  6. +
  7. On this device, switch to the camera app or use a QR code scanner to scan the displayed QR code.
  8. +
+
+ + setResult(TYPE_CLOSE)} /> + diff --git a/src/modules/features/SetupWizard/dialogs/SelectMethodExisting.svelte b/src/modules/features/SetupWizard/dialogs/SelectMethodExisting.svelte new file mode 100644 index 0000000..b339d3e --- /dev/null +++ b/src/modules/features/SetupWizard/dialogs/SelectMethodExisting.svelte @@ -0,0 +1,62 @@ + + + +You are adding this device to an existing synchronisation setup. + + Please select a method to import the settings from another device. + + + + + + + + setResult(userType)} /> + setResult(TYPE_CANCELLED)} /> + diff --git a/src/modules/features/SetupWizard/dialogs/SelectMethodNewUser.svelte b/src/modules/features/SetupWizard/dialogs/SelectMethodNewUser.svelte new file mode 100644 index 0000000..2478521 --- /dev/null +++ b/src/modules/features/SetupWizard/dialogs/SelectMethodNewUser.svelte @@ -0,0 +1,57 @@ + + + +We will now proceed with the server configuration. + + How would you like to configure the connection to your server? + + + + + + + setResult(userType)} /> + setResult(TYPE_CANCELLED)} /> + diff --git a/src/modules/features/SetupWizard/dialogs/SetupRemote.svelte b/src/modules/features/SetupWizard/dialogs/SetupRemote.svelte new file mode 100644 index 0000000..74b809b --- /dev/null +++ b/src/modules/features/SetupWizard/dialogs/SetupRemote.svelte @@ -0,0 +1,56 @@ + + + + + Please select the type of server to which you are connecting. + + + + + + + + setResult(userType)} /> + setResult(TYPE_CANCELLED)} /> + diff --git a/src/modules/features/SetupWizard/dialogs/SetupRemoteBucket.svelte b/src/modules/features/SetupWizard/dialogs/SetupRemoteBucket.svelte new file mode 100644 index 0000000..d4f905b --- /dev/null +++ b/src/modules/features/SetupWizard/dialogs/SetupRemoteBucket.svelte @@ -0,0 +1,241 @@ + + + +Please enter the details required to connect to your S3/MinIO/R2 compatible object storage service. + + + +We can use only Secure (HTTPS) connections on Obsidian Mobile. + + + + + + + + + + + + + + + + + + + + + + If you want to store the data in a specific folder within the bucket, you can specify a folder prefix here. + Otherwise, leave it blank to store data at the root of the bucket. + + + + + + If you cannot avoid CORS issues, you might want to try this option. It uses Obsidian's internal API to communicate + with the S3 server. Not compliant with web standards, but works. Note that this might break in future Obsidian + versions. + + + + + + + + + + {error} + + +{#if processing} + Checking connection... Please wait. +{:else} + + checkAndCommit()} /> + commit()} /> + cancel()} /> + +{/if} diff --git a/src/modules/features/SetupWizard/dialogs/SetupRemoteCouchDB.svelte b/src/modules/features/SetupWizard/dialogs/SetupRemoteCouchDB.svelte new file mode 100644 index 0000000..0710214 --- /dev/null +++ b/src/modules/features/SetupWizard/dialogs/SetupRemoteCouchDB.svelte @@ -0,0 +1,284 @@ + + + +Please enter the CouchDB server information below. + + + +We can use only Secure (HTTPS) connections on Obsidian Mobile. + + + + + + + + + + + + You cannot use capital letters, spaces, or special characters in the database name. And not allowed to start with an + underscore (_). + + + + + + If you cannot avoid CORS issues, you might want to try this option. It uses Obsidian's internal API to communicate + with the CouchDB server. Not compliant with web standards, but works. Note that this might break in future Obsidian + versions. + + + + + + + + + + + + + + + + `${syncSetting.jwtExpDuration}`, (v) => (syncSetting.jwtExpDuration = parseInt(v) || 0)} + disabled={!isUseJWT} + /> + + + + + + + + + + + + JWT (JSON Web Token) authentication allows you to securely authenticate with the CouchDB server using tokens. + Ensure that your CouchDB server is configured to accept JWTs and that the provided key and settings match the + server's configuration. Incidentally, I have not verified it very thoroughly. + + + + +
+ + + {error} + + +{#if processing} + Checking connection... Please wait. +{:else} + + checkAndCommit()} /> + commit()} /> + cancel()} /> + +{/if} diff --git a/src/modules/features/SetupWizard/dialogs/SetupRemoteE2EE.svelte b/src/modules/features/SetupWizard/dialogs/SetupRemoteE2EE.svelte new file mode 100644 index 0000000..052e97d --- /dev/null +++ b/src/modules/features/SetupWizard/dialogs/SetupRemoteE2EE.svelte @@ -0,0 +1,123 @@ + + + +Please configure your end-to-end encryption settings. + + + + + + Enabling end-to-end encryption ensures that your data is encrypted on your device before being sent to the remote + server. This means that even if someone gains access to the server, they won't be able to read your data without the + passphrase. Make sure to remember your passphrase, as it will be required to decrypt your data on other devices. +
+ Also, please note that if you are using Peer-to-Peer synchronization, this configuration will be used when you switch + to other methods and connect to a remote server in the future. +
+ + This setting must be the same even when connecting to multiple synchronisation destinations. + + + + + + + Obfuscating properties (e.g., path of file, size, creation and modification dates) adds an additional layer of + security by making it harder to identify the structure and names of your files and folders on the remote server. + This helps protect your privacy and makes it more difficult for unauthorized users to infer information about your + data. + + + + + + + + In most cases, you should stick with the default algorithm ({E2EEAlgorithmNames[ + DEFAULT_SETTINGS.E2EEAlgorithm + ]}), This setting is only required if you have an existing Vault encrypted in a different format. + + + Changing the encryption algorithm will prevent access to any data previously encrypted with a different + algorithm. Ensure that all your devices are configured to use the same algorithm to maintain access to your + data. + + + + +

+ Please be aware that the End-to-End Encryption passphrase is not validated until the synchronisation process + actually commences. This is a security measure designed to protect your data. +

+

+ Therefore, we ask that you exercise extreme caution when configuring server information manually. If an + incorrect passphrase is entered, the data on the server will become corrupted.

+ Please understand that this is intended behaviour. +

+
+ + + commit()} /> + setResult(TYPE_CANCELLED)} /> + diff --git a/src/modules/features/SetupWizard/dialogs/SetupRemoteP2P.svelte b/src/modules/features/SetupWizard/dialogs/SetupRemoteP2P.svelte new file mode 100644 index 0000000..7cfe0fc --- /dev/null +++ b/src/modules/features/SetupWizard/dialogs/SetupRemoteP2P.svelte @@ -0,0 +1,306 @@ + + + +Please enter the Peer-to-Peer Synchronisation information below. + + + + + + + + + + + + + + + + The Group ID and passphrase are used to identify your group of devices. Make sure to use the same Group ID and + passphrase on all devices you want to synchronise.
+ Note that the Group ID is not limited to the generated format; you can use any string as the Group ID. +
+ + + + + + + + If "Auto Start P2P Connection" is enabled, the P2P connection will be started automatically when the plug-in + launches. + + + + + + If "Auto Broadcast Changes" is enabled, changes will be automatically broadcasted to connected peers without + requiring manual intervention. This requests peers to fetch this device's changes. + + + + TURN server settings are only necessary if you are behind a strict NAT or firewall that prevents direct P2P + connections. In most cases, you can leave these fields blank. + + + Using public TURN servers may have privacy implications, as your data will be relayed through third-party + servers. Even if your data are encrypted, your existence may be known to them. Please ensure you trust the TURN + server provider before using their services. Also your `network administrator` too. You should consider setting + up your own TURN server for your FQDN, if possible. + + + + + + + + + + + + + {error} + +{#if processing} + Checking connection... Please wait. +{:else} + + checkAndCommit()} /> + commit()} /> + cancel()} /> + +{/if} diff --git a/src/modules/features/SetupWizard/dialogs/UseSetupURI.svelte b/src/modules/features/SetupWizard/dialogs/UseSetupURI.svelte new file mode 100644 index 0000000..d6152b7 --- /dev/null +++ b/src/modules/features/SetupWizard/dialogs/UseSetupURI.svelte @@ -0,0 +1,96 @@ + + + +Please enter the Setup URI that was generated during server installation or on another device, along with the vault + passphrase.
+ Note that you can generate a new Setup URI by running the "Copy settings as a new Setup URI" command in the command palette.
+ + + + +The Setup-URI is valid and ready to use. + + The Setup-URI does not appear to be valid. Please check that you have copied it correctly. + + + + + + {error} + + + + processSetupURI()} + /> + setResult(TYPE_CANCELLED)} /> + diff --git a/src/modules/features/SetupWizard/dialogs/utilCheckCouchDB.ts b/src/modules/features/SetupWizard/dialogs/utilCheckCouchDB.ts new file mode 100644 index 0000000..62699bc --- /dev/null +++ b/src/modules/features/SetupWizard/dialogs/utilCheckCouchDB.ts @@ -0,0 +1,293 @@ +import { requestToCouchDBWithCredentials } from "../../../../common/utils"; +import { $msg } from "../../../../lib/src/common/i18n"; +import { Logger } from "../../../../lib/src/common/logger"; +import type { ObsidianLiveSyncSettings } from "../../../../lib/src/common/types"; +import { parseHeaderValues } from "../../../../lib/src/common/utils"; +import { isCloudantURI } from "../../../../lib/src/pouchdb/utils_couchdb"; +import { generateCredentialObject } from "../../../../lib/src/replication/httplib"; +export type ResultMessage = { message: string; classes: string[] }; +export type ResultErrorMessage = { message: string; result: "error"; classes: string[] }; +export type ResultOk = { message: string; result: "ok"; value?: any }; +export type ResultError = { message: string; result: "error"; value: any; fixMessage: string; fix(): Promise }; +export type ConfigCheckResult = ResultOk | ResultError | ResultMessage | ResultErrorMessage; +/** + * Compares two version strings to determine if the baseVersion is greater than or equal to the version. + * @param baseVersion a.b.c format + * @param version a.b.c format + * @returns true if baseVersion is greater than or equal to version, false otherwise + */ +function isGreaterThanOrEqual(baseVersion: string, version: string) { + const versionParts = `${baseVersion}.0.0.0`.split("."); + const targetParts = version.split("."); + for (let i = 0; i < targetParts.length; i++) { + // compare as number if possible (so 3.10 > 3.2, 3.10.1b > 3.10.1a) + const result = versionParts[i].localeCompare(targetParts[i], undefined, { numeric: true }); + if (result > 0) return true; + if (result < 0) return false; + } + return true; +} + +/** + * Updates the remote CouchDB setting with the given key and value. + * @param setting Connection settings + * @param key setting key to update + * @param value setting value to update + * @returns true if the update was successful, false otherwise + */ +async function updateRemoteSetting(setting: ObsidianLiveSyncSettings, key: string, value: any) { + const customHeaders = parseHeaderValues(setting.couchDB_CustomHeaders); + const credential = generateCredentialObject(setting); + const res = await requestToCouchDBWithCredentials( + setting.couchDB_URI, + credential, + undefined, + key, + value, + undefined, + customHeaders + ); + if (res.status == 200) { + return true; + } else { + return res.text || "Unknown error"; + } +} + +/** + * Checks the CouchDB configuration and returns the results. + * @param editingSettings + * @returns Array of ConfigCheckResult + */ +export const checkConfig = async (editingSettings: ObsidianLiveSyncSettings) => { + const result = [] as ConfigCheckResult[]; + const addMessage = (msg: string, classes: string[] = []) => { + result.push({ message: msg, classes }); + }; + const addSuccess = (msg: string, value?: any) => { + result.push({ message: msg, result: "ok", value }); + }; + const _addError = (message: string, fixMessage: string, fix: () => Promise, value?: any) => { + result.push({ message, result: "error", fixMessage, fix, value }); + }; + const addErrorMessage = (msg: string, classes: string[] = []) => { + result.push({ message: msg, result: "error", classes }); + }; + + const addError = (message: string, fixMessage: string, key: string, expected: any) => { + _addError(message, fixMessage, async () => { + await updateRemoteSetting(editingSettings, key, expected); + }); + }; + + addMessage($msg("obsidianLiveSyncSettingTab.logCheckingDbConfig")); + + try { + if (isCloudantURI(editingSettings.couchDB_URI)) { + addMessage($msg("obsidianLiveSyncSettingTab.logCannotUseCloudant")); + return result; + } + // Tip: Add log for cloudant as Logger($msg("obsidianLiveSyncSettingTab.logServerConfigurationCheck")); + const customHeaders = parseHeaderValues(editingSettings.couchDB_CustomHeaders); + const credential = generateCredentialObject(editingSettings); + const r = await requestToCouchDBWithCredentials( + editingSettings.couchDB_URI, + credential, + window.origin, + undefined, + undefined, + undefined, + customHeaders + ); + const responseConfig = r.json; + addMessage($msg("obsidianLiveSyncSettingTab.msgNotice"), ["ob-btn-config-head"]); + addMessage($msg("obsidianLiveSyncSettingTab.msgIfConfigNotPersistent"), ["ob-btn-config-info"]); + addMessage($msg("obsidianLiveSyncSettingTab.msgConfigCheck"), ["ob-btn-config-head"]); + + const serverBanner = r.headers["server"] ?? r.headers["Server"] ?? "unknown"; + addMessage($msg("obsidianLiveSyncSettingTab.serverVersion", { info: serverBanner })); + const versionMatch = serverBanner.match(/CouchDB(\/([0-9.]+))?/); + const versionStr = versionMatch ? versionMatch[2] : "0.0.0"; + + // Compare version string with the target version. + // version must be a string like "3.2.1" or "3.10.2", and must be two or three parts. + + // Admin check + // for database creation and deletion + if (!(editingSettings.couchDB_USER in responseConfig.admins)) { + addSuccess($msg("obsidianLiveSyncSettingTab.warnNoAdmin")); + } else { + addSuccess($msg("obsidianLiveSyncSettingTab.okAdminPrivileges")); + } + if (isGreaterThanOrEqual(versionStr, "3.2.0")) { + // HTTP user-authorization check + if (responseConfig?.chttpd?.require_valid_user != "true") { + addError( + $msg("obsidianLiveSyncSettingTab.errRequireValidUser"), + $msg("obsidianLiveSyncSettingTab.msgSetRequireValidUser"), + "chttpd/require_valid_user", + "true" + ); + } else { + addSuccess($msg("obsidianLiveSyncSettingTab.okRequireValidUser")); + } + } else { + if (responseConfig?.chttpd_auth?.require_valid_user != "true") { + addError( + $msg("obsidianLiveSyncSettingTab.errRequireValidUserAuth"), + $msg("obsidianLiveSyncSettingTab.msgSetRequireValidUserAuth"), + "chttpd_auth/require_valid_user", + "true" + ); + } else { + addSuccess($msg("obsidianLiveSyncSettingTab.okRequireValidUserAuth")); + } + } + // HTTPD check + // Check Authentication header + if (!responseConfig?.httpd["WWW-Authenticate"]) { + addError( + $msg("obsidianLiveSyncSettingTab.errMissingWwwAuth"), + $msg("obsidianLiveSyncSettingTab.msgSetWwwAuth"), + "httpd/WWW-Authenticate", + 'Basic realm="couchdb"' + ); + } else { + addSuccess($msg("obsidianLiveSyncSettingTab.okWwwAuth")); + } + if (isGreaterThanOrEqual(versionStr, "3.2.0")) { + if (responseConfig?.chttpd?.enable_cors != "true") { + addError( + $msg("obsidianLiveSyncSettingTab.errEnableCorsChttpd"), + $msg("obsidianLiveSyncSettingTab.msgEnableCorsChttpd"), + "chttpd/enable_cors", + "true" + ); + } else { + addSuccess($msg("obsidianLiveSyncSettingTab.okEnableCorsChttpd")); + } + } else { + if (responseConfig?.httpd?.enable_cors != "true") { + addError( + $msg("obsidianLiveSyncSettingTab.errEnableCors"), + $msg("obsidianLiveSyncSettingTab.msgEnableCors"), + "httpd/enable_cors", + "true" + ); + } else { + addSuccess($msg("obsidianLiveSyncSettingTab.okEnableCors")); + } + } + // If the server is not cloudant, configure request size + if (!isCloudantURI(editingSettings.couchDB_URI)) { + // REQUEST SIZE + if (Number(responseConfig?.chttpd?.max_http_request_size ?? 0) < 4294967296) { + addError( + $msg("obsidianLiveSyncSettingTab.errMaxRequestSize"), + $msg("obsidianLiveSyncSettingTab.msgSetMaxRequestSize"), + "chttpd/max_http_request_size", + "4294967296" + ); + } else { + addSuccess($msg("obsidianLiveSyncSettingTab.okMaxRequestSize")); + } + if (Number(responseConfig?.couchdb?.max_document_size ?? 0) < 50000000) { + addError( + $msg("obsidianLiveSyncSettingTab.errMaxDocumentSize"), + $msg("obsidianLiveSyncSettingTab.msgSetMaxDocSize"), + "couchdb/max_document_size", + "50000000" + ); + } else { + addSuccess($msg("obsidianLiveSyncSettingTab.okMaxDocumentSize")); + } + } + // CORS check + // checking connectivity for mobile + if (responseConfig?.cors?.credentials != "true") { + addError( + $msg("obsidianLiveSyncSettingTab.errCorsCredentials"), + $msg("obsidianLiveSyncSettingTab.msgSetCorsCredentials"), + "cors/credentials", + "true" + ); + } else { + addSuccess($msg("obsidianLiveSyncSettingTab.okCorsCredentials")); + } + const ConfiguredOrigins = ((responseConfig?.cors?.origins ?? "") + "").split(","); + if ( + responseConfig?.cors?.origins == "*" || + (ConfiguredOrigins.indexOf("app://obsidian.md") !== -1 && + ConfiguredOrigins.indexOf("capacitor://localhost") !== -1 && + ConfiguredOrigins.indexOf("http://localhost") !== -1) + ) { + addSuccess($msg("obsidianLiveSyncSettingTab.okCorsOrigins")); + } else { + const fixedValue = [ + ...new Set([ + ...ConfiguredOrigins.map((e) => e.trim()), + "app://obsidian.md", + "capacitor://localhost", + "http://localhost", + ]), + ].join(","); + addError( + $msg("obsidianLiveSyncSettingTab.errCorsOrigins"), + $msg("obsidianLiveSyncSettingTab.msgSetCorsOrigins"), + "cors/origins", + fixedValue + ); + } + addMessage($msg("obsidianLiveSyncSettingTab.msgConnectionCheck"), ["ob-btn-config-head"]); + addMessage($msg("obsidianLiveSyncSettingTab.msgCurrentOrigin", { origin: window.location.origin })); + + // Request header check + const origins = ["app://obsidian.md", "capacitor://localhost", "http://localhost"]; + for (const org of origins) { + const rr = await requestToCouchDBWithCredentials( + editingSettings.couchDB_URI, + credential, + org, + undefined, + undefined, + undefined, + customHeaders + ); + const responseHeaders = Object.fromEntries( + Object.entries(rr.headers).map((e) => { + e[0] = `${e[0]}`.toLowerCase(); + return e; + }) + ); + addMessage($msg("obsidianLiveSyncSettingTab.msgOriginCheck", { org })); + if (responseHeaders["access-control-allow-credentials"] != "true") { + addErrorMessage($msg("obsidianLiveSyncSettingTab.errCorsNotAllowingCredentials")); + } else { + addSuccess($msg("obsidianLiveSyncSettingTab.okCorsCredentialsForOrigin")); + } + if (responseHeaders["access-control-allow-origin"] != org) { + addErrorMessage( + $msg("obsidianLiveSyncSettingTab.warnCorsOriginUnmatched", { + from: origin, + to: responseHeaders["access-control-allow-origin"], + }) + ); + } else { + addSuccess($msg("obsidianLiveSyncSettingTab.okCorsOriginMatched")); + } + } + addMessage($msg("obsidianLiveSyncSettingTab.msgDone"), ["ob-btn-config-head"]); + addMessage($msg("obsidianLiveSyncSettingTab.msgConnectionProxyNote"), ["ob-btn-config-info"]); + addMessage($msg("obsidianLiveSyncSettingTab.logCheckingConfigDone")); + } catch (ex: any) { + if (ex?.status == 401) { + addErrorMessage($msg("obsidianLiveSyncSettingTab.errAccessForbidden")); + addErrorMessage($msg("obsidianLiveSyncSettingTab.errCannotContinueTest")); + addMessage($msg("obsidianLiveSyncSettingTab.logCheckingConfigDone")); + } else { + addErrorMessage($msg("obsidianLiveSyncSettingTab.logCheckingConfigFailed")); + Logger(ex); + } + } + return result; +}; diff --git a/src/modules/services/ObsidianServices.ts b/src/modules/services/ObsidianServices.ts index 3972752..04259e5 100644 --- a/src/modules/services/ObsidianServices.ts +++ b/src/modules/services/ObsidianServices.ts @@ -14,10 +14,17 @@ import { InjectableVaultService, } from "../../lib/src/services/InjectableServices.ts"; import { InjectableServiceHub } from "../../lib/src/services/InjectableServices.ts"; +import { ConfigServiceBrowserCompat } from "../../lib/src/services/Services.ts"; +import type ObsidianLiveSyncPlugin from "../../main.ts"; +import { ObsidianUIService } from "./ObsidianUIService.ts"; // All Services will be migrated to be based on Plain Services, not Injectable Services. // This is a migration step. -export class ObsidianAPIService extends InjectableAPIService {} +export class ObsidianAPIService extends InjectableAPIService { + getPlatform(): string { + return "obsidian"; + } +} export class ObsidianPathService extends InjectablePathService {} export class ObsidianDatabaseService extends InjectableDatabaseService {} @@ -42,6 +49,8 @@ export class ObsidianVaultService extends InjectableVaultService {} // InjectableTestService export class ObsidianTestService extends InjectableTestService {} +export class ObsidianConfigService extends ConfigServiceBrowserCompat {} + // InjectableServiceHub export class ObsidianServiceHub extends InjectableServiceHub { @@ -73,4 +82,14 @@ export class ObsidianServiceHub extends InjectableServiceHub { ); protected _vault: ObsidianVaultService = new ObsidianVaultService(this._serviceBackend, this._throughHole); protected _test: ObsidianTestService = new ObsidianTestService(this._serviceBackend, this._throughHole); + + private _plugin: ObsidianLiveSyncPlugin; + constructor(plugin: ObsidianLiveSyncPlugin) { + const config = new ObsidianConfigService(); + super({ + ui: new ObsidianUIService(plugin), + config: config, + }); + this._plugin = plugin; + } } diff --git a/src/modules/services/ObsidianUIService.ts b/src/modules/services/ObsidianUIService.ts new file mode 100644 index 0000000..1c8c522 --- /dev/null +++ b/src/modules/services/ObsidianUIService.ts @@ -0,0 +1,40 @@ +import { UIService } from "../../lib/src/services/Services"; +import type ObsidianLiveSyncPlugin from "../../main"; +import { SvelteDialogManager } from "../features/SetupWizard/ObsidianSvelteDialog"; +import DialogueToCopy from "../../lib/src/UI/dialogues/DialogueToCopy.svelte"; + +export class ObsidianUIService extends UIService { + private _dialogManager: SvelteDialogManager; + private _plugin: ObsidianLiveSyncPlugin; + get dialogManager() { + return this._dialogManager; + } + constructor(plugin: ObsidianLiveSyncPlugin) { + super(); + this._dialogManager = new SvelteDialogManager(plugin); + this._plugin = plugin; + } + async promptCopyToClipboard(title: string, value: string): Promise { + const param = { + title: title, + dataToCopy: value, + }; + const result = await this._dialogManager.open(DialogueToCopy, param); + if (result !== "ok") { + return false; + } + return true; + } + showMarkdownDialog( + title: string, + contentMD: string, + buttons: T, + defaultAction?: (typeof buttons)[number] + ): Promise<(typeof buttons)[number] | false> { + return this._plugin.confirm.askSelectStringDialogue(contentMD, buttons, { + title, + defaultAction: defaultAction ?? buttons[0], + timeout: 0, + }); + } +} diff --git a/styles.css b/styles.css index 16b68e9..78f5968 100644 --- a/styles.css +++ b/styles.css @@ -393,13 +393,13 @@ span.ls-mark-cr::after { div.workspace-leaf-content[data-type=bases] .livesync-status { top: calc(var(--bases-header-height) + var(--header-height)); padding: 5px; - padding-right:18px; + padding-right: 18px; } .is-mobile div.workspace-leaf-content[data-type=bases] .livesync-status { top: calc(var(--bases-header-height) + var(--view-header-height)); padding: 6px; - padding-right:18px; + padding-right: 18px; } .livesync-status div { @@ -444,6 +444,10 @@ div.workspace-leaf-content[data-type=bases] .livesync-status { padding: 0.5em 1.0em; } +.active-pane .sls-setting-panel-title { + border: 1px solid var(--interactive-accent); +} + .sls-dialogue-note-wrapper { display: flex; justify-content: flex-end; diff --git a/tsconfig.json b/tsconfig.json index 2223967..4ddd5b4 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -13,6 +13,7 @@ "importHelpers": false, "alwaysStrict": true, "allowImportingTsExtensions": true, + "verbatimModuleSyntax": true, "noEmit": true, "lib": ["es2018", "DOM", "ES5", "ES6", "ES7", "es2019.array", "ES2021.WeakRef", "ES2020.BigInt", "ESNext.Intl"], "strictBindCallApply": true, diff --git a/updates.md b/updates.md index 271373f..c2b4dda 100644 --- a/updates.md +++ b/updates.md @@ -4,6 +4,49 @@ Since 19th July, 2025 (beta1 in 0.25.0-beta1, 13th July, 2025) The head note of 0.25 is now in [updates_old.md](https://github.com/vrtmrz/obsidian-livesync/blob/main/updates_old.md). Because 0.25 got a lot of updates, thankfully, compatibility is kept and we do not need breaking changes! In other words, when get enough stabled. The next version will be v1.0.0. Even though it my hope. +## 0.25.24.beta3 + +31st October, 2025 + +### TURN server support and important notice + +TURN server settings are only necessary if you are behind a strict NAT or firewall that prevents direct P2P +connections. In most cases, you do not need to set up a TURN server. + +Using public TURN servers may have privacy implications, as your data will be relayed through third-party +servers. Even if your data are encrypted, your existence may be known to them. Please ensure you trust the TURN +server provider before using their services. Also your `network administrator` too. You should consider setting +up your own TURN server for your FQDN, if possible. + +### Fixed + +- We can enter the fields in some dialogues correctly on mobile devices now. + - The bottom padding is adjusted dynamically according to the keyboard height. + +### New features + +- We can use the TURN server for P2P connections now. + +## ~~0.25.24.beta1~~ 0.25.24.beta2 (For release mistake) + +30th October, 2025 + +### Fixed + +- P2P Replication got more robust and stable. + - Update [Trystero](https://github.com/dmotz/trystero) to the official v0.22.0! + - Fixed a bug that caused P2P connections to drop or (unwanted reconnection to the relay server) unexpectedly in some environments. + - Now, the connection status is more accurately reported. + - While in the background, the connection to the signalling server is now disconnected to save resources. + - When returning to the foreground, it will not reconnect automatically for safety. Please reconnect manually. +- All connection configurations should be edited in each dedicated dialogue now. + +### Breaking changes + +- Sending configuration via Peer-to-Peer connection is not compatible with older versions. + - Please upgrade all devices to v0.25.24.beta1 or later to use this feature again. + - This is due to security improvements in the encryption scheme. + ## 0.25.23 26th October, 2025 @@ -20,6 +63,85 @@ The next version we are preparing (you know that as 0.25.23.beta1) is now still - If not, but while the local file is oversized, it is also ignored. +- We are now able to enable optional features correctly again (#732). +- No longer oversized files have been processed, furthermore. + - Before creating a chunk, the file is verified as the target. + - The behaviour upon receiving replication has been changed as follows: + - If the remote file is oversized, it is ignored. + - If not, but while the local file is oversized, it is also ignored. + +## 0.25.23.beta1 + +22nd October, 2025 + +Since several issues were pointed out, our setup procedure had been quite `system-oriented`. This is not good for users. Therefore, I have changed the procedure to be more `goal-oriented`. I have made extensive use of Svelte, resulting in a very straightforward setup. +While I would like to accelerate documentation and i18n adoption, I do not want to confuse everyone who's already working on it. Therefore, I have decided to release a Beta version at this stage. Significant changes are not expected from this point onward, so I will proceed to stabilise the codebase. (However, this is significant). + +### Fixed (This should be backported to 0.25.22 if the beta phase is prolonged) + +- No longer will larger files create chunks during preparing `Reset Synchronisation on This Device`. + +### Behaviour changes + +- The setup wizard is now more `goal-oriented`. Brand-new screens are introduced. +- `Fetch everything` and `Rebuild everything` are now `Reset Synchronisation on This Device` and `Overwrite Server Data with This Device's Files`. +- Remote configuration and E2EE settings are now separated into each modal dialogue. + - Remote configuration is now more straightforward. And if we need the rebuild (No... `Overwrite Server Data with This Device's Files`), it is now clearly indicated. +- Peer-to-Peer settings are also separated into their own modal dialogue (still in progress, and we need to open a P2P pane, still). +- Setup-URI, and Report for the Issue are now not copied to the clipboard automatically. Instead, there are copy-dialogue and buttons to copy them explicitly. + - This is to avoid confusion for users who do not want to use these features. +- No longer optional features are introduced during the setup, or `Reset Synchronisation on This Device`, `Overwrite Server Data with This Device's Files`. + - This is to avoid confusion for users who do not want to use these features. Instead, we will be informed that optional features are available after the setup is completed. +- We cannot perform `Fetch everything` and `Rebuild everything` (Removed, so the old name) without restarting Obsidian now. + +### Miscellaneous + +- Setup QR Code generation is separated into a src/lib/src/API/processSetting.ts file. Please use it as a subrepository if you want to generate QR codes in your own application. +- Setup-URI is also separated into a src/lib/src/API/processSetting.ts +- Some direct access to web APIs is now wrapped into the services layer. + +### Dependency updates + +- Many dependencies are updated. Please see `package.json`. + - This is the hardest part of this update. I read most of the changes in the dependencies. If you find any extra information, please let me know. +- As upgrading TypeScript, Fixed many UInt8Array and Uint8Array type mismatches. + +## 0.25.23.beta1 + +22nd October, 2025 + +Since several issues pointed, our set-up procedure had been quite `system-oriented`. This is not good for users. Therefore, I have changed the procedure to be more `goal-oriented`. I have made extensive use of Svelte, resulting in a very straightforward setup. +While I would like to accelerate documentation and i18n adoption, I do not want to confuse everyone who's already working on it. Therefore, I have decided to release a Beta version at this stage. Significant changes are not expected from this point onward, so I will proceed to stabilise the codebase. (However, this is the significant). + +### Fixed (This should be backported to 0.25.22 if the beta phase is prolonged) + +- No longer larger files will not create a chunks during preparing `Reset Synchronisation on This Device`. + +### Behaviour changes + +- Setup wizard is now more `goal-oriented`. Brand-new screens are introduced. +- `Fetch everything` and `Rebuild everything` is now `Reset Synchronisation on This Device` and `Overwrite Server Data with This Device's Files`. +- Remote configuration and E2EE settings are now separated to each modal dialogue. + - Remote configuration is now more straightforward. And if we need the rebuild (No... `Overwrite Server Data with This Device's Files`), it is now clearly indicated. +- Peer-to-Peer settings is also separated into its own modal dialogue (still in progress, and we need to open a P2P pane, still). +- Setup-URI, and Report for the Issue are now not copied to clipboard automatically. Instead, there are copy dialogue and buttons to copy them explicitly. + - This is to avoid confusion for users who do not want to use these features. +- No longer optional features are introduced during the setup or `Reset Synchronisation on This Device`, `Overwrite Server Data with This Device's Files`. + - This is to avoid confusion for users who do not want to use these features. Instead, we will noticed that optional features are available after the setup is completed. +- We cannot preform `Fetch everything` and `Rebuild everything` (Removed, so the old name) without restarting Obsidian now. + +### Miscellaneous + +- Setup QR Code generation is separated into a src/lib/src/API/processSetting.ts file. Please use it as a subrepository if you want to generate QR codes in your own application. +- Setup-URI is also separated into a src/lib/src/API/processSetting.ts +- Some direct access to web-APIs are now wrapped into the services layer. + +### Dependency updates + +- Many dependencies are updated. Please see `package.json`. + - This is the hardest part of this update. I read mostly all changes in the dependencies. If you find any extra information, please let me know. +- As upgrading TypeScript, Fixed many UInt8Array and Uint8Array type mismatches. + ## 0.25.22 15th October, 2025 @@ -27,19 +149,21 @@ The next version we are preparing (you know that as 0.25.23.beta1) is now still ### Fixed - Fixed a bug that caused wrong event bindings and flag inversion (#727) - - This caused following issues: - - In some cases, settings changes were not applied or saved correctly. - - Automatic synchronisation did not begin correctly. + - This caused following issues: + - In some cases, settings changes were not applied or saved correctly. + - Automatic synchronisation did not begin correctly. ### Improved + - Too large diffs are not shown in the file comparison view, due to performance reasons. ### Notes + - The checking algorithm implemented in 0.25.20 is also raised as PR (#237). And completely I merged it manually. - - Sorry for lacking merging this PR, and let me say thanks to the great contribution, @bioluks ! + - Sorry for lacking merging this PR, and let me say thanks to the great contribution, @bioluks ! - Known issues: - - Sync on Editor save seems not to work correctly in some cases. - - I am investigating this issue. If you have any information, please let me know. + - Sync on Editor save seems not to work correctly in some cases. + - I am investigating this issue. If you have any information, please let me know. ## 0.25.21 @@ -53,10 +177,12 @@ Now then, this time, moving away from 'convention over configuration', I have ch And, also, we are ready to separate `Features` and `APIs` from `Module`. Features are still in the module, but APIs will be moved to a Service layer. This will make it easier to maintain and extend the codebase in the future. If you have found any issues, please let me know. I am now on the following: + - GitHub [Issues](https://github.com/vrtmrz/obsidian-livesync/issues) Excellent! May the other contributors will help you too. - Twitter [@vorotamoroz](https://twitter.com/vorotamoroz) Quickest! - Matrix [@vrtmrz:matrix.org](https://matrix.to/#/@vrtmrz:matrix.org) Also quick, and if you need to keep it private! - I am creating rooms too, but I'm struggling to figure out how to use them effectively because I cannot tell the difference of use-case between them and discussions. However, if you want to use Discord, this is a answer; We should on E2E encrypted platform. + I am creating rooms too, but I'm struggling to figure out how to use them effectively because I cannot tell the difference of use-case between them and discussions. However, if you want to use Discord, this is a answer; We should on E2E encrypted platform. + ## 0.25.21.beta2 8th October, 2025 @@ -76,72 +202,5 @@ If you have found any issues, please let me know. I am now on the following: - Event handling now does not rely on 'convention over configuration'. - Services.ts now have a proper event handler registration system. -## 0.25.20 - -26th September, 2025 - -### Fixed - -- Chunk fetching no longer reports errors when the fetched chunk could not be saved (#710). - - Just using the fetched chunk temporarily. -- Chunk fetching reports errors when the fetched chunk is surely corrupted (#710, #712). -- It no longer detects files that the plug-in has modified. - - It may reduce unnecessary file comparisons and unexpected file states. - -### Improved - -- Now checking the remote database configuration respecting the CouchDB version (#714). - -## 0.25.19 - -18th September, 2025 - -### Improved - -- Now encoding/decoding for chunk data and encryption/decryption are performed in native functions (if they were available). - - This uses Uint8Array.fromBase64 and Uint8Array.toBase64, which are natively available in iOS 18.2+ and Android with Chrome 140+. - - In Android, WebView is by default updated with Chrome, so it should be available in most cases. - - Note that this is not available in Desktop yet (due to being based on Electron). We are staying tuned for future updates. - - This realised by an external(?) package [octagonal-wheels](https://github.com/vrtmrz/octagonal-wheels). Therefore, this update only updates the dependency. - -## 0.25.18 - -17th September, 2025 - -### Fixed - -- Property encryption detection now works correctly (On Self-hosted LiveSync, it was not broken, but as a library, it was not working correctly). -- Initialising the chunk splitter is now surely performed. -- DirectFileManipulator now works fine (as a library) - - Old `DirectFileManipulatorV1` is now removed. - -### Refactored - -- Removed some unnecessary intermediate files. - -## 0.25.17 - -16th September, 2025 - -### Fixed - -- No longer information-level logs have produced during toggling `Show only notifications` in the settings (#708). -- Ignoring filters for Hidden file sync now works correctly (#709). - -### Refactored - -- Removed some unnecessary intermediate files. - -## 0.25.16 - -4th September, 2025 - -### Improved - -- Improved connectivity for P2P connections -- The connection to the signalling server can now be disconnected while in the background or when explicitly disconnected. - - These features use a patch that has not been incorporated upstream. - - This patch is available at [vrtmrz/trystero](https://github.com/vrtmrz/trystero). - Older notes are in [updates_old.md](https://github.com/vrtmrz/obsidian-livesync/blob/main/updates_old.md). diff --git a/updates_old.md b/updates_old.md index 28c5042..639b227 100644 --- a/updates_old.md +++ b/updates_old.md @@ -10,6 +10,73 @@ As a result, this is the first time in a while that forward compatibility has be --- +## 0.25.20 + +26th September, 2025 + +### Fixed + +- Chunk fetching no longer reports errors when the fetched chunk could not be saved (#710). + - Just using the fetched chunk temporarily. +- Chunk fetching reports errors when the fetched chunk is surely corrupted (#710, #712). +- It no longer detects files that the plug-in has modified. + - It may reduce unnecessary file comparisons and unexpected file states. + +### Improved + +- Now checking the remote database configuration respecting the CouchDB version (#714). + +## 0.25.19 + +18th September, 2025 + +### Improved + +- Now encoding/decoding for chunk data and encryption/decryption are performed in native functions (if they were available). + - This uses Uint8Array.fromBase64 and Uint8Array.toBase64, which are natively available in iOS 18.2+ and Android with Chrome 140+. + - In Android, WebView is by default updated with Chrome, so it should be available in most cases. + - Note that this is not available in Desktop yet (due to being based on Electron). We are staying tuned for future updates. + - This realised by an external(?) package [octagonal-wheels](https://github.com/vrtmrz/octagonal-wheels). Therefore, this update only updates the dependency. + +## 0.25.18 + +17th September, 2025 + +### Fixed + +- Property encryption detection now works correctly (On Self-hosted LiveSync, it was not broken, but as a library, it was not working correctly). +- Initialising the chunk splitter is now surely performed. +- DirectFileManipulator now works fine (as a library) + - Old `DirectFileManipulatorV1` is now removed. + +### Refactored + +- Removed some unnecessary intermediate files. + +## 0.25.17 + +16th September, 2025 + +### Fixed + +- No longer information-level logs have produced during toggling `Show only notifications` in the settings (#708). +- Ignoring filters for Hidden file sync now works correctly (#709). + +### Refactored + +- Removed some unnecessary intermediate files. + +## 0.25.16 + +4th September, 2025 + +### Improved + +- Improved connectivity for P2P connections +- The connection to the signalling server can now be disconnected while in the background or when explicitly disconnected. + - These features use a patch that has not been incorporated upstream. + - This patch is available at [vrtmrz/trystero](https://github.com/vrtmrz/trystero). + ## 0.25.15 3rd September, 2025