diff --git a/package-lock.json b/package-lock.json index 984e24935b..8e05ba7058 100644 --- a/package-lock.json +++ b/package-lock.json @@ -44,6 +44,7 @@ "send-intent": "7.x", "stream-browserify": "^3.0.0", "throttle-debounce": "^2.3.0", + "ts-xxhash": "^1.0.6", "vue": "^2.7.0", "vue-router": "^3.4.9", "vuelidate": "^0.7.6", @@ -1745,18 +1746,18 @@ } }, "node_modules/@capacitor/app": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/@capacitor/app/-/app-7.0.1.tgz", - "integrity": "sha512-ArlVZAAla4MwQoKh26x2AaTDOBh5Vhp1VhMKR3RwqZSsZnazKTFGNrPbr9Ez5r1knnEDfApyjwp1uZnXK1WTYQ==", + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/@capacitor/app/-/app-7.0.2.tgz", + "integrity": "sha512-kRWBF6Wc6OQxhL+N6rsegyfJY37Lj9/VJhtrmgmH+y+rdxQLQwUOpMyxXStym7cF+QzGeVpItyVxyUT9fE5ByQ==", "license": "MIT", "peerDependencies": { "@capacitor/core": ">=7.0.0" } }, "node_modules/@capacitor/browser": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/@capacitor/browser/-/browser-7.0.1.tgz", - "integrity": "sha512-N6KEVLw2enTnourQzYJLvAkSds2Ed21zqsvHnSImrVDenzX8fUj032kMt4EdewmxfxiEwRa911BT1VOPBi0fEA==", + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/@capacitor/browser/-/browser-7.0.2.tgz", + "integrity": "sha512-5kySTunCtH+2sezmTjgDfwvspW7GW/hslQECZeLIRM2qefnxjGTc3fmCTeILYK5EuvcxMs+8sF5BhmzzKqOzuQ==", "license": "MIT", "peerDependencies": { "@capacitor/core": ">=7.0.0" @@ -1816,9 +1817,9 @@ } }, "node_modules/@capacitor/device": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/@capacitor/device/-/device-7.0.1.tgz", - "integrity": "sha512-ImjR2LmCEhbckYtOHXTfi5v6B7d4HPX9uKIAQs7wzzmE+yRRXuUTEzARBQ00dZDInAInkbuyQRdjwPTSHZUpnw==", + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/@capacitor/device/-/device-7.0.2.tgz", + "integrity": "sha512-OMGMBjLbh7ApaqW1oOJIV73iyrFK/T5v2MzuQYq3GLT+jnGvCuj/y82Ofq2Fz9/hlJ2fukztPwG1K80jyk0i6w==", "license": "MIT", "peerDependencies": { "@capacitor/core": ">=7.0.0" @@ -1846,45 +1847,45 @@ } }, "node_modules/@capacitor/network": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/@capacitor/network/-/network-7.0.1.tgz", - "integrity": "sha512-jKyhTUqegKHjHKkK8e3t0TgwAYpKb3ocYpZkJrB3uXL5figkG06UEhQE4Cp25Dfb4LIjDxTSDLLsDEteKarmyg==", + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/@capacitor/network/-/network-7.0.2.tgz", + "integrity": "sha512-KKkiUvGfMVKIcYaG+KlGAxrQtoRnwJtT+9yhTkCFzZWeYrY91sBZKOVOfnNHO8RiOxqbKn5VSUlyFLQQiyyfyg==", "license": "MIT", "peerDependencies": { "@capacitor/core": ">=7.0.0" } }, "node_modules/@capacitor/preferences": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/@capacitor/preferences/-/preferences-7.0.1.tgz", - "integrity": "sha512-XF9jOHzvoIBZLwZr/EX6aVaUO1d8Mx7TwBLQS33pYHOliCW5knT5KUkFOXNNYxh9qqODYesee9xuQIKNJpQBag==", + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/@capacitor/preferences/-/preferences-7.0.2.tgz", + "integrity": "sha512-JVCy0/oc6RsRencLOZ8rMqjNxAlHs7awPJU/MXqangsJ48oO2PnYGHfCvci6WgIJlqyC0QhvWZaO1BR1lVkHWQ==", "license": "MIT", "peerDependencies": { "@capacitor/core": ">=7.0.0" } }, "node_modules/@capacitor/share": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/@capacitor/share/-/share-7.0.1.tgz", - "integrity": "sha512-7GAtWrb2inEWohC8E7mx38qAX6D9yqPDDnUtJaZ8JRpo15jjFRS40Cx388M8h4NlBWjV5NU3qf1sHXnyOBSJ5g==", + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/@capacitor/share/-/share-7.0.2.tgz", + "integrity": "sha512-VyNPo/9831xnL17IMDeft5yNdBjoKNb451P95sRcr69hulRDqHc+kndqOVaMXnaA6IyBdWnnFv/n1HUf4cXpGw==", "license": "MIT", "peerDependencies": { "@capacitor/core": ">=7.0.0" } }, "node_modules/@capacitor/splash-screen": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/@capacitor/splash-screen/-/splash-screen-7.0.1.tgz", - "integrity": "sha512-Nbqw9bEIe7uHj/HOT81mf4jT6uK1YykozpQw/uIKQDueMg6RJYaJK2/TMajIOohLk8fJF4TYIc1i9nGjNLnfGg==", + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/@capacitor/splash-screen/-/splash-screen-7.0.2.tgz", + "integrity": "sha512-bchh4F73CnVONm6XFEgXKEhbSEDQh2CQ0rNSoasIeJ5pf9JqHkkPS3t0Fnm33qHkLVFcaPoKPW69Y9zMpT5Vxg==", "license": "MIT", "peerDependencies": { "@capacitor/core": ">=7.0.0" } }, "node_modules/@capacitor/status-bar": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/@capacitor/status-bar/-/status-bar-7.0.1.tgz", - "integrity": "sha512-iDv3mXYo9CdxYRVwt3/pRyuk25p7Sn4GfaS/zMZyVIqTzsvKLCIIH3GdKK+ta+nsNcAVpCw/t5jFEBt1D18ctA==", + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/@capacitor/status-bar/-/status-bar-7.0.2.tgz", + "integrity": "sha512-fYYkkdzCbQV+MjZVnaQTFl5I4bddnFW8ZrPVxDjNoGVPTUG7H58Ij1+NcuNxHLXjJvZOoZeYJ3w3I16Wb2zssw==", "license": "MIT", "peerDependencies": { "@capacitor/core": ">=7.0.0" @@ -2327,9 +2328,9 @@ } }, "node_modules/@jridgewell/gen-mapping": { - "version": "0.3.12", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.12.tgz", - "integrity": "sha512-OuLGC46TjB5BbN1dH8JULVVZY4WTdkF7tV9Ys6wLL1rubZnCMstOhNHueU5bLCrnRuDhKPDM4g6sw4Bel5Gzqg==", + "version": "0.3.13", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.13.tgz", + "integrity": "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==", "license": "MIT", "dependencies": { "@jridgewell/sourcemap-codec": "^1.5.0", @@ -2346,9 +2347,9 @@ } }, "node_modules/@jridgewell/source-map": { - "version": "0.3.10", - "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.10.tgz", - "integrity": "sha512-0pPkgz9dY+bijgistcTTJ5mR+ocqRXLuhXHYdzoMmmoJ2C9S46RCm2GMUbatPEUK9Yjy26IrAy8D/M00lLkv+Q==", + "version": "0.3.11", + "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.11.tgz", + "integrity": "sha512-ZMp1V8ZFcPG5dIWnQLr3NSI1MiCU7UETdS/A0G8V/XWHvJv3ZsFqutJn1Y5RPmAPX6F3BiE397OqveU/9NCuIA==", "license": "MIT", "dependencies": { "@jridgewell/gen-mapping": "^0.3.5", @@ -2356,15 +2357,15 @@ } }, "node_modules/@jridgewell/sourcemap-codec": { - "version": "1.5.4", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.4.tgz", - "integrity": "sha512-VT2+G1VQs/9oz078bLrYbecdZKs912zQlkelYpuf+SXF+QvZDYJlbx/LSx+meSAwdDFnF8FVXW92AVjjkVmgFw==", + "version": "1.5.5", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz", + "integrity": "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==", "license": "MIT" }, "node_modules/@jridgewell/trace-mapping": { - "version": "0.3.29", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.29.tgz", - "integrity": "sha512-uw6guiW/gcAGPDhLmd77/6lW8QLeiV5RUTsAX46Db6oLhGaVj4lhnPwb184s1bkc8kdVg/+h988dro8GRDpmYQ==", + "version": "0.3.30", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.30.tgz", + "integrity": "sha512-GQ7Nw5G2lTu/BtHTKfXhKHok2WGetd4XYcVKGx00SjAk8GMwgJM3zr6zORiPGuOE+/vkc90KtTosSSvaCjKb2Q==", "license": "MIT", "dependencies": { "@jridgewell/resolve-uri": "^3.1.0", @@ -2734,50 +2735,50 @@ "license": "MIT" }, "node_modules/@sentry-internal/browser-utils": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/@sentry-internal/browser-utils/-/browser-utils-10.1.0.tgz", - "integrity": "sha512-9g9EOlCcBtGipCQKF3Y+8Z+GQFLrc2NxOr7sYnys0uELtcYE4AxZsyHKERz5VNb/sjpNuAscL1i2YBykKp2QeA==", + "version": "10.5.0", + "resolved": "https://registry.npmjs.org/@sentry-internal/browser-utils/-/browser-utils-10.5.0.tgz", + "integrity": "sha512-4KIJdEj/8Ip9yqJleVSFe68r/U5bn5o/lYUwnFNEnDNxmpUbOlr7x3DXYuRFi1sfoMUxK9K1DrjnBkR7YYF00g==", "license": "MIT", "dependencies": { - "@sentry/core": "10.1.0" + "@sentry/core": "10.5.0" }, "engines": { "node": ">=18" } }, "node_modules/@sentry-internal/feedback": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/@sentry-internal/feedback/-/feedback-10.1.0.tgz", - "integrity": "sha512-u4Y3ZBAWbx3UZXOcfMCFR3Qzqozxuj1eQLLURlUTj+jKtCuWrqSYvb5CynuRgo+EDwPFdc5DA8PmNXjGJgvkkA==", + "version": "10.5.0", + "resolved": "https://registry.npmjs.org/@sentry-internal/feedback/-/feedback-10.5.0.tgz", + "integrity": "sha512-x79P4VZwUxb1EGZb9OQ5EEgrDWFCUlrbzHBwV/oocQA5Ss1SFz5u6cP5Ak7yJtILiJtdGzAyAoQOy4GKD13D4Q==", "license": "MIT", "dependencies": { - "@sentry/core": "10.1.0" + "@sentry/core": "10.5.0" }, "engines": { "node": ">=18" } }, "node_modules/@sentry-internal/replay": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/@sentry-internal/replay/-/replay-10.1.0.tgz", - "integrity": "sha512-gfuWCCslNg80XMcKFCV8RU14MR06XrUbJ3CsxrOD4cx9biA5EfBdy06AeA5Q3l3KCYzVzLAZH2rS/Pdvr2hrPA==", + "version": "10.5.0", + "resolved": "https://registry.npmjs.org/@sentry-internal/replay/-/replay-10.5.0.tgz", + "integrity": "sha512-Dp4coE/nPzhFrYH3iVrpVKmhNJ1m/jGXMEDBCNg3wJZRszI41Hrj0jCAM0Y2S3Q4IxYOmFYaFbGtVpAznRyOHg==", "license": "MIT", "dependencies": { - "@sentry-internal/browser-utils": "10.1.0", - "@sentry/core": "10.1.0" + "@sentry-internal/browser-utils": "10.5.0", + "@sentry/core": "10.5.0" }, "engines": { "node": ">=18" } }, "node_modules/@sentry-internal/replay-canvas": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/@sentry-internal/replay-canvas/-/replay-canvas-10.1.0.tgz", - "integrity": "sha512-mfdG6bHqVkvQlcYSlHh72UScJjZdLUqkf0fW4T5qyrK8b4omWX/ieFmr8DwtUdOu0iArr1kN4E/83WFVpRhJfg==", + "version": "10.5.0", + "resolved": "https://registry.npmjs.org/@sentry-internal/replay-canvas/-/replay-canvas-10.5.0.tgz", + "integrity": "sha512-5nrRKd5swefd9+sFXFZ/NeL3bz/VxBls3ubAQ3afak15FikkSyHq3oKRKpMOtDsiYKXE3Bc0y3rF5A+y3OXjIA==", "license": "MIT", "dependencies": { - "@sentry-internal/replay": "10.1.0", - "@sentry/core": "10.1.0" + "@sentry-internal/replay": "10.5.0", + "@sentry/core": "10.5.0" }, "engines": { "node": ">=18" @@ -2793,16 +2794,16 @@ } }, "node_modules/@sentry/browser": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/@sentry/browser/-/browser-10.1.0.tgz", - "integrity": "sha512-KevWtdmcxjREOVkfGUlXhB7Yj2K5AZwIDvdyQg9044MM5M2hxMWWIpsJewF+f2V0rZN4QYgxscpe4NKXg5GBYQ==", + "version": "10.5.0", + "resolved": "https://registry.npmjs.org/@sentry/browser/-/browser-10.5.0.tgz", + "integrity": "sha512-o5pEJeZ/iZ7Fmaz2sIirThfnmSVNiP5ZYhacvcDi0qc288TmBbikCX3fXxq3xiSkhXfe1o5QIbNyovzfutyuVw==", "license": "MIT", "dependencies": { - "@sentry-internal/browser-utils": "10.1.0", - "@sentry-internal/feedback": "10.1.0", - "@sentry-internal/replay": "10.1.0", - "@sentry-internal/replay-canvas": "10.1.0", - "@sentry/core": "10.1.0" + "@sentry-internal/browser-utils": "10.5.0", + "@sentry-internal/feedback": "10.5.0", + "@sentry-internal/replay": "10.5.0", + "@sentry-internal/replay-canvas": "10.5.0", + "@sentry/core": "10.5.0" }, "engines": { "node": ">=18" @@ -2972,22 +2973,22 @@ } }, "node_modules/@sentry/core": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/@sentry/core/-/core-10.1.0.tgz", - "integrity": "sha512-sda76pKjgEgh6VNRNJa9P0WG2egA7N85dTQ8wS/QZ6rD/dNXQZ+ITfL99Jb0b6WhTgvzspJq8bNSl/nRUdbwbQ==", + "version": "10.5.0", + "resolved": "https://registry.npmjs.org/@sentry/core/-/core-10.5.0.tgz", + "integrity": "sha512-jTJ8NhZSKB2yj3QTVRXfCCngQzAOLThQUxCl9A7Mv+XF10tP7xbH/88MVQ5WiOr2IzcmrB9r2nmUe36BnMlLjA==", "license": "MIT", "engines": { "node": ">=18" } }, "node_modules/@sentry/vue": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/@sentry/vue/-/vue-10.1.0.tgz", - "integrity": "sha512-6NdvOhUbwaWDc2x1it1WMtC+/EVyazNkwirz+RaOOdSQD7Qdjz1lRGI4F/qqqQtLsdIG4EFAtzRQbGoOn0+0NQ==", + "version": "10.5.0", + "resolved": "https://registry.npmjs.org/@sentry/vue/-/vue-10.5.0.tgz", + "integrity": "sha512-UbQF7F2C6WaUaDuZEfePiCblZH11nGZfs7/+U/Qt4BRKWL74I0JtXy28tZ3cYI/cM2EenxpnUkjUAMATeZ5/Xg==", "license": "MIT", "dependencies": { - "@sentry/browser": "10.1.0", - "@sentry/core": "10.1.0" + "@sentry/browser": "10.5.0", + "@sentry/core": "10.5.0" }, "engines": { "node": ">=18" @@ -3058,6 +3059,12 @@ "@types/responselike": "^1.0.0" } }, + "node_modules/@types/cuint": { + "version": "0.2.4", + "resolved": "https://registry.npmjs.org/@types/cuint/-/cuint-0.2.4.tgz", + "integrity": "sha512-u1zJ4cGGIrG4MVRMh9cY+LI4gVFpaGoPIOXWrrIZ1xTYQzyvs1uu7FnN/vIH++flpbefrqjkpHesDAgM0tuWhA==", + "license": "MIT" + }, "node_modules/@types/eslint": { "version": "9.6.1", "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-9.6.1.tgz", @@ -5015,9 +5022,9 @@ } }, "node_modules/browserslist": { - "version": "4.25.1", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.25.1.tgz", - "integrity": "sha512-KGj0KoOMXLpSNkkEI6Z6mShmQy0bc1I+T7K9N81k4WWMrfz+6fQ6es80B/YLAeRoKvjYE1YSHHOW1qe9xIVzHw==", + "version": "4.25.2", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.25.2.tgz", + "integrity": "sha512-0si2SJK3ooGzIawRu61ZdPCO1IncZwS8IzuX73sPZsXW6EQ/w/DAfPyKI8l1ETTCr2MnvqWitmlCUxgdul45jA==", "funding": [ { "type": "opencollective", @@ -5034,8 +5041,8 @@ ], "license": "MIT", "dependencies": { - "caniuse-lite": "^1.0.30001726", - "electron-to-chromium": "^1.5.173", + "caniuse-lite": "^1.0.30001733", + "electron-to-chromium": "^1.5.199", "node-releases": "^2.0.19", "update-browserslist-db": "^1.1.3" }, @@ -5269,9 +5276,9 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001731", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001731.tgz", - "integrity": "sha512-lDdp2/wrOmTRWuoB5DpfNkC0rJDU8DqRa6nYL6HK6sytw70QMopt/NIc/9SM7ylItlBWfACXk0tEn37UWM/+mg==", + "version": "1.0.30001734", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001734.tgz", + "integrity": "sha512-uhE1Ye5vgqju6OI71HTQqcBCZrvHugk0MjLak7Q+HfoBgoq5Bi+5YnwjP4fjDgrtYr/l8MVRBvzz9dPD4KyK0A==", "funding": [ { "type": "opencollective", @@ -6086,6 +6093,12 @@ "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==", "license": "MIT" }, + "node_modules/cuint": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/cuint/-/cuint-0.2.2.tgz", + "integrity": "sha512-d4ZVpCW31eWwCMe1YT3ur7mUDnTXbgwyzaL320DrcRT45rfjYxkt5QWLrmOJ+/UEAI2+fQgKe/fCjR8l4TpRgw==", + "license": "MIT" + }, "node_modules/cycle": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/cycle/-/cycle-1.0.3.tgz", @@ -6602,9 +6615,9 @@ "license": "MIT" }, "node_modules/electron-to-chromium": { - "version": "1.5.195", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.195.tgz", - "integrity": "sha512-URclP0iIaDUzqcAyV1v2PgduJ9N0IdXmWsnPzPfelvBmjmZzEy6xJcjb1cXj+TbYqXgtLrjHEoaSIdTYhw4ezg==", + "version": "1.5.200", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.200.tgz", + "integrity": "sha512-rFCxROw7aOe4uPTfIAx+rXv9cEcGx+buAF4npnhtTqCJk5KDFRnh3+KYj7rdVh6lsFt5/aPs+Irj9rZ33WMA7w==", "license": "ISC" }, "node_modules/elementtree": { @@ -8422,9 +8435,9 @@ } }, "node_modules/fs-extra": { - "version": "11.3.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.3.0.tgz", - "integrity": "sha512-Z4XaCL6dUDHfP/jT25jJKMmtxvuwbkrD1vNSMFlo9lNLY2c5FHYSQgHPRZUjAB26TpDEoW9HCOgplrdbaPV/ew==", + "version": "11.3.1", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.3.1.tgz", + "integrity": "sha512-eXvGGwZ5CL17ZSwHWd3bbgk7UUpF6IFHtP57NYYakPvHOs8GDgDe5KJI36jIJzDkJ6eJjuzRA8eBQb6SkKue0g==", "license": "MIT", "dependencies": { "graceful-fs": "^4.2.0", @@ -10489,9 +10502,9 @@ } }, "node_modules/isomorphic-git": { - "version": "1.32.2", - "resolved": "https://registry.npmjs.org/isomorphic-git/-/isomorphic-git-1.32.2.tgz", - "integrity": "sha512-pThiJmMDyPD5f4S8fpt3Zoq2P1pehetQNjAks7fco1N+UT3HFo3dRUYxxhrPqfBwrkYi7dguv25mZTt9DO/S+w==", + "version": "1.32.3", + "resolved": "https://registry.npmjs.org/isomorphic-git/-/isomorphic-git-1.32.3.tgz", + "integrity": "sha512-gTcJH3JaUdj7WFGnPKnn7XpO1qAeu3nsiC7m2vEdHEsJx8fmBVQ8ji4FQG26JJArFd3MYyuA43pA7bk0DI6+Ww==", "license": "MIT", "dependencies": { "async-lock": "^1.4.1", @@ -10598,9 +10611,9 @@ } }, "node_modules/js-base64": { - "version": "3.7.7", - "resolved": "https://registry.npmjs.org/js-base64/-/js-base64-3.7.7.tgz", - "integrity": "sha512-7rCnleh0z2CkXhH67J8K1Ytz0b2Y+yxTPL+/KOJoa20hfnVQ/3/T6W/KflYI4bRHRagNeXeU2bkNGI3v1oS/lw==", + "version": "3.7.8", + "resolved": "https://registry.npmjs.org/js-base64/-/js-base64-3.7.8.tgz", + "integrity": "sha512-hNngCeKxIUQiEUN3GPJOkz4wF/YvdUdbNL9hsBcMQTkKzboD7T/q3OYOuuPZLUE6dBxSGpwhk5mwuDud7JVAow==", "license": "BSD-3-Clause" }, "node_modules/js-tokens": { @@ -10697,9 +10710,9 @@ } }, "node_modules/jsonfile": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", - "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.2.0.tgz", + "integrity": "sha512-FGuPw30AdOIUTRMC2OMRtQV+jkVj2cfPqSeWXv1NEAJ1qZ5zb1X6z1mFhbfOB/iy3ssJCD+3KuZ8r8C3uVFlAg==", "license": "MIT", "dependencies": { "universalify": "^2.0.0" @@ -14791,9 +14804,9 @@ "license": "MIT" }, "node_modules/sass": { - "version": "1.89.2", - "resolved": "https://registry.npmjs.org/sass/-/sass-1.89.2.tgz", - "integrity": "sha512-xCmtksBKd/jdJ9Bt9p7nPKiuqrlBMBuuGkQlkhZjjQk3Ty48lv93k5Dq6OPkKt4XwxDJ7tvlfrTa1MPA9bf+QA==", + "version": "1.90.0", + "resolved": "https://registry.npmjs.org/sass/-/sass-1.90.0.tgz", + "integrity": "sha512-9GUyuksjw70uNpb1MTYWsH9MQHOHY6kwfnkafC24+7aOMZn9+rVMBxRbLvw756mrBFbIsFg6Xw9IkR2Fnn3k+Q==", "dev": true, "license": "MIT", "dependencies": { @@ -14912,9 +14925,9 @@ "license": "MIT" }, "node_modules/selenium-webdriver": { - "version": "4.34.0", - "resolved": "https://registry.npmjs.org/selenium-webdriver/-/selenium-webdriver-4.34.0.tgz", - "integrity": "sha512-zGfQFcsASAv3KrYzYh+iw4fFqB7iZAgHW7BU6rRz7isK1i1X4x3LvjmZad4bUUgHDwTnAhlqTzDh21byB+zHMg==", + "version": "4.35.0", + "resolved": "https://registry.npmjs.org/selenium-webdriver/-/selenium-webdriver-4.35.0.tgz", + "integrity": "sha512-Baaeiuyu7BIIsSYf0SI7Mi55gsNmdI00KM0Hcofw1RnAY+0QEVpdh5yAxueDxgTZS8vcbGZFU0NJ6Qc1riIrLg==", "dev": true, "funding": [ { @@ -14938,9 +14951,9 @@ } }, "node_modules/selenium-webdriver/node_modules/tmp": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.3.tgz", - "integrity": "sha512-nZD7m9iCPC5g0pYmcaxogYKggSfLsdxl8of3Q/oIbqCqLLIO9IAF0GWjX1z9NZRHPiXv8Wex4yDCaZsgEw0Y8w==", + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.5.tgz", + "integrity": "sha512-voyz6MApa1rQGUxT3E+BK7/ROe8itEx7vD8/HEvt4xwXucvQ5G5oeEiHkmHZJuBO21RpOf+YYm9MOivj709jow==", "dev": true, "license": "MIT", "engines": { @@ -15512,9 +15525,9 @@ } }, "node_modules/spdx-license-ids": { - "version": "3.0.21", - "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.21.tgz", - "integrity": "sha512-Bvg/8F5XephndSK3JffaRqdT+gyhfqIPwDHpX80tJrF8QQRYMo8sNMeaZ2Dp5+jhwKnUmIOyFFQfHRkjJm5nXg==", + "version": "3.0.22", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.22.tgz", + "integrity": "sha512-4PRT4nh1EImPbt2jASOKHX7PB7I+e4IWNLvkKFDxNhJlfjbYlleYQh285Z/3mPTHSAK/AvdMmw5BNNuYH8ShgQ==", "dev": true, "license": "CC0-1.0" }, @@ -16395,9 +16408,9 @@ } }, "node_modules/ts-loader/node_modules/enhanced-resolve": { - "version": "5.18.2", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.18.2.tgz", - "integrity": "sha512-6Jw4sE1maoRJo3q8MsSIn2onJFbLTOjY9hlx4DZXmOKvLRd1Ok2kXmAGXaafL2+ijsJZ1ClYbl/pmqr9+k4iUQ==", + "version": "5.18.3", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.18.3.tgz", + "integrity": "sha512-d4lC8xfavMeBjzGr2vECC3fsGXziXZQyJxD868h2M/mBI3PwAuODxAkLkq5HYuvrPYcUtiLzsTo8U3PgX3Ocww==", "dev": true, "license": "MIT", "dependencies": { @@ -16441,6 +16454,16 @@ "node": ">=6" } }, + "node_modules/ts-xxhash": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/ts-xxhash/-/ts-xxhash-1.0.6.tgz", + "integrity": "sha512-mCNjrUhfluG7qkPpbGo/4nBHPcd4U73jzvsGvKGBAbVYh77A9pswvxjNncF5tqawo/7tIkE+UgYOgohWgLaPdQ==", + "license": "All rights reserved.", + "dependencies": { + "@types/cuint": "^0.2.1", + "cuint": "^0.2.2" + } + }, "node_modules/tsconfig-paths": { "version": "3.15.0", "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.15.0.tgz", @@ -17617,9 +17640,9 @@ "license": "BSD-2-Clause" }, "node_modules/webpack": { - "version": "5.101.0", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.101.0.tgz", - "integrity": "sha512-B4t+nJqytPeuZlHuIKTbalhljIFXeNRqrUGAQgTGlfOl2lXXKXw+yZu6bicycP+PUlM44CxBjCFD6aciKFT3LQ==", + "version": "5.101.1", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.101.1.tgz", + "integrity": "sha512-rHY3vHXRbkSfhG6fH8zYQdth/BtDgXXuR2pHF++1f/EBkI8zkgM5XWfsC3BvOoW9pr1CvZ1qQCxhCEsbNgT50g==", "license": "MIT", "dependencies": { "@types/eslint-scope": "^3.7.7", @@ -17632,7 +17655,7 @@ "acorn-import-phases": "^1.0.3", "browserslist": "^4.24.0", "chrome-trace-event": "^1.0.2", - "enhanced-resolve": "^5.17.2", + "enhanced-resolve": "^5.17.3", "es-module-lexer": "^1.2.1", "eslint-scope": "5.1.1", "events": "^3.2.0", @@ -17838,9 +17861,9 @@ } }, "node_modules/webpack/node_modules/enhanced-resolve": { - "version": "5.18.2", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.18.2.tgz", - "integrity": "sha512-6Jw4sE1maoRJo3q8MsSIn2onJFbLTOjY9hlx4DZXmOKvLRd1Ok2kXmAGXaafL2+ijsJZ1ClYbl/pmqr9+k4iUQ==", + "version": "5.18.3", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.18.3.tgz", + "integrity": "sha512-d4lC8xfavMeBjzGr2vECC3fsGXziXZQyJxD868h2M/mBI3PwAuODxAkLkq5HYuvrPYcUtiLzsTo8U3PgX3Ocww==", "license": "MIT", "dependencies": { "graceful-fs": "^4.2.4", diff --git a/package.json b/package.json index 43310fc293..e265430de0 100644 --- a/package.json +++ b/package.json @@ -111,6 +111,7 @@ "send-intent": "7.x", "stream-browserify": "^3.0.0", "throttle-debounce": "^2.3.0", + "ts-xxhash": "^1.0.6", "vue": "^2.7.0", "vue-router": "^3.4.9", "vuelidate": "^0.7.6", diff --git a/src/lib/Crypto.ts b/src/lib/Crypto.ts index 3c743fd1d7..63a1651ef2 100644 --- a/src/lib/Crypto.ts +++ b/src/lib/Crypto.ts @@ -1,10 +1,15 @@ import { fromUint8Array, toUint8Array } from 'js-base64' import { murmurhash3_32_gc } from './murmurhash3' +import { XXHash32 } from 'ts-xxhash' export default class Crypto { static iterations = 250000 static ivLength = 16 + static async xxhash32(message: string): Promise { + return XXHash32.hash(0, message).toString(16) + } + static async murmurHash3(message: string): Promise { const buf32 = new Uint32Array([murmurhash3_32_gc(message, 0)]) const buf8 = new Uint8Array(buf32.buffer) diff --git a/src/lib/LocalTabs.ts b/src/lib/LocalTabs.ts index 871cb4f519..b396131193 100644 --- a/src/lib/LocalTabs.ts +++ b/src/lib/LocalTabs.ts @@ -506,7 +506,7 @@ export default class LocalTabs implements OrderFolderResource { return { preserveOrder: true, - hashFn: ['murmur3', 'sha256'] + hashFn: ['xxhash3', 'murmur3', 'sha256'] } } diff --git a/src/lib/Tree.ts b/src/lib/Tree.ts index caf48d49ae..fc3e24cc7d 100644 --- a/src/lib/Tree.ts +++ b/src/lib/Tree.ts @@ -84,12 +84,14 @@ export class Bookmark { this.hashValue[cacheKey] = value } - async hash({preserveOrder = false, hashFn = 'sha256'}):Promise { + async hash({preserveOrder = false, hashFn = 'sha256'}: IHashSettings = {preserveOrder: false, hashFn: 'sha256'}):Promise { if (!this.hashValue) { this.hashValue = {} const json = JSON.stringify({ title: this.title, url: this.url }) if (hashFn === 'sha256') { this.hashValue[hashFn] = await Crypto.sha256(json) + } else if (hashFn === 'xxhash3') { + this.hashValue[hashFn] = await Crypto.xxhash32(json) } else if (hashFn === 'murmur3') { this.hashValue[hashFn] = await Crypto.murmurHash3(json) } else { @@ -361,6 +363,8 @@ export class Folder { this.hashValue[cacheKey] = await Crypto.sha256(json) } else if (hashFn === 'murmur3') { this.hashValue[cacheKey] = await Crypto.murmurHash3(json) + } else if (hashFn === 'xxhash3') { + this.hashValue[cacheKey] = await Crypto.xxhash32(json) } else { throw new Error('Unsupported hash function specified') } diff --git a/src/lib/adapters/Caching.ts b/src/lib/adapters/Caching.ts index 5708d99109..3870573744 100644 --- a/src/lib/adapters/Caching.ts +++ b/src/lib/adapters/Caching.ts @@ -250,7 +250,7 @@ export default class CachingAdapter implements Adapter, BulkImportResource { return { preserveOrder: true, - hashFn: ['murmur3', 'sha256'], + hashFn: ['xxhash3', 'murmur3', 'sha256'], } } diff --git a/src/lib/adapters/Karakeep.ts b/src/lib/adapters/Karakeep.ts index 2410e8d367..5dfecd3657 100644 --- a/src/lib/adapters/Karakeep.ts +++ b/src/lib/adapters/Karakeep.ts @@ -569,7 +569,7 @@ export default class KarakeepAdapter implements Adapter, IResource { return { preserveOrder: false, - hashFn: ['murmur3', 'sha256'], + hashFn: ['xxhash3', 'murmur3', 'sha256'], } } diff --git a/src/lib/adapters/Linkwarden.ts b/src/lib/adapters/Linkwarden.ts index a1bf33dcb4..2a8b7f9f4f 100644 --- a/src/lib/adapters/Linkwarden.ts +++ b/src/lib/adapters/Linkwarden.ts @@ -371,7 +371,7 @@ export default class LinkwardenAdapter implements Adapter, IResource { return { preserveOrder: false, - hashFn: ['murmur3', 'sha256'], + hashFn: ['xxhash3', 'murmur3', 'sha256'], } } diff --git a/src/lib/browser/BrowserTree.ts b/src/lib/browser/BrowserTree.ts index 472499017d..0fed951053 100644 --- a/src/lib/browser/BrowserTree.ts +++ b/src/lib/browser/BrowserTree.ts @@ -397,7 +397,7 @@ export default class BrowserTree implements IResource async getCapabilities(): Promise { return { preserveOrder: true, - hashFn: ['murmur3', 'sha256'] + hashFn: ['xxhash3', 'murmur3', 'sha256'] } } diff --git a/src/lib/interfaces/Resource.ts b/src/lib/interfaces/Resource.ts index 541191b530..df3fbcce09 100644 --- a/src/lib/interfaces/Resource.ts +++ b/src/lib/interfaces/Resource.ts @@ -1,7 +1,7 @@ import { Bookmark, Folder, ItemLocation, TItem, TItemLocation } from '../Tree' import Ordering from './Ordering' -export type THashFunction = 'sha256' | 'murmur3' +export type THashFunction = 'sha256' | 'murmur3' | 'xxhash3' export interface ICapabilities { preserveOrder: boolean,