aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAdam Soltys <[email protected]>2026-02-03 13:46:15 -0800
committerAdam Soltys <[email protected]>2026-02-11 15:34:01 -0800
commit918f4b29bc66be343914fd4c9284375825c57fdf (patch)
tree68f1b93ee8f1d60400988fd71231295ca886bad6
parent44f09f89eb8f69dbb9bba76e0a55125093e7ecc0 (diff)
downloadcoinos-ui-918f4b29bc66be343914fd4c9284375825c57fdf.tar.gz
coinos-ui-918f4b29bc66be343914fd4c9284375825c57fdf.zip
cleanup
-rw-r--r--bun.lock114
-rw-r--r--package.json8
-rw-r--r--src/components/Account.svelte4
-rw-r--r--src/components/AppForm.svelte4
-rw-r--r--src/components/LocationsMap.svelte42
-rw-r--r--src/components/Nostr.svelte6
-rw-r--r--src/components/Slider.svelte3
-rw-r--r--src/components/Success.svelte62
-rw-r--r--src/lib/ark.ts5
-rw-r--r--src/lib/nostr.ts39
-rw-r--r--src/lib/parse.ts8
-rw-r--r--src/lib/utils.ts2
-rw-r--r--src/routes/(app)/account/[id]/+page.svelte2
-rw-r--r--src/routes/(app)/account/ark/+page.svelte6
-rw-r--r--src/routes/(app)/account/pass/+page.svelte2
-rw-r--r--src/routes/(app)/firehose/+page.svelte2
-rw-r--r--src/routes/(app)/messages/[recipient]/+page.svelte2
-rw-r--r--src/routes/(app)/pos/+page.svelte6
-rw-r--r--src/routes/(app)/printer/+page.svelte6
-rw-r--r--src/routes/(app)/scan/+page.svelte10
-rw-r--r--src/routes/(app)/send/bitcoin/[address]/[amount]/[...feeRate]/+page.svelte14
-rw-r--r--vite.config.js48
22 files changed, 214 insertions, 181 deletions
diff --git a/bun.lock b/bun.lock
index c5ccc8e0..d3bebd9d 100644
--- a/bun.lock
+++ b/bun.lock
@@ -18,7 +18,6 @@
"@capacitor/cli": "^7.4.3",
"@capacitor/core": "^7.4.3",
"@capacitor/ios": "^7.4.3",
- "@cashu/cashu-ts": "^2.7.1",
"@iconify/iconify": "^3.1.1",
"@scure/base": "^2.0.0",
"@scure/bip39": "^2.0.0",
@@ -36,19 +35,15 @@
"daisyui": "^5.1.9",
"date-fns": "^4.1.0",
"esptool-js": "^0.5.7",
- "html5-qrcode": "^2.3.8",
"iconify-icon": "^3.0.0",
"js-cookie": "^3.0.5",
- "leaflet": "^1.9.4",
- "leaflet.markercluster": "^1.5.3",
- "maplibre-gl": "^5.7.1",
"nostr-tools": "^2.16.2",
"prettier": "^3.6.2",
"prettier-plugin-svelte": "^3.4.0",
- "qr-code-styling": "1.9.2",
"qr-scanner": "^1.4.2",
"qrcode-base64": "^1.0.1",
"rollup": "^4.50.1",
+ "rollup-plugin-visualizer": "^5.14.0",
"screenfull": "^6.0.2",
"svelte": "^5.38.8",
"svelte-adapter-bun": "^0.5.2",
@@ -56,7 +51,6 @@
"svelte-dnd-action": "^0.9.65",
"svelte-outclick": "^4.1.2",
"svelte-preprocess": "^6.0.3",
- "svelte-virtual-scroll-list": "^1.3.0",
"sveltekit-i18n": "^2.4.2",
"tailwind-scrollbar": "^4.0.2",
"tailwindcss": "^4.1.18",
@@ -90,8 +84,6 @@
"@capacitor/status-bar": ["@capacitor/[email protected]", "", { "peerDependencies": { "@capacitor/core": ">=7.0.0" } }, "sha512-JyRpVnKwHij9hgPWolF6PK+HT3e2HSPjN11/h2OmKxq8GAdPGARFLv+97eZl0pvuvm0Kka/LpiLb5whXISBg7Q=="],
- "@cashu/cashu-ts": ["@cashu/[email protected]", "", { "dependencies": { "@noble/curves": "^1.9.5", "@noble/hashes": "^1.5.0", "@scure/bip32": "^1.5.0", "buffer": "^6.0.3" } }, "sha512-JtH1OGpMBSnJ1by6wylbXdGHT1jc8h3GPVFD5vPUSbgBjDhgz9gLEH64QpWRw5O2h56GDUgoaTzkDy184qjQlw=="],
-
"@cspotcode/source-map-support": ["@cspotcode/[email protected]", "", { "dependencies": { "@jridgewell/trace-mapping": "0.3.9" } }, "sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw=="],
"@esbuild/aix-ppc64": ["@esbuild/[email protected]", "", { "os": "aix", "cpu": "ppc64" }, "sha512-OaGtL73Jck6pBKjNIe24BnFE6agGl+6KxDtTfHhy1HmhthfKouEcOhqpSL64K4/0WCtbKFLOdzD/44cJ4k9opA=="],
@@ -184,29 +176,11 @@
"@jridgewell/trace-mapping": ["@jridgewell/[email protected]", "", { "dependencies": { "@jridgewell/resolve-uri": "^3.1.0", "@jridgewell/sourcemap-codec": "^1.4.14" } }, "sha512-GQ7Nw5G2lTu/BtHTKfXhKHok2WGetd4XYcVKGx00SjAk8GMwgJM3zr6zORiPGuOE+/vkc90KtTosSSvaCjKb2Q=="],
- "@mapbox/geojson-rewind": ["@mapbox/[email protected]", "", { "dependencies": { "get-stream": "^6.0.1", "minimist": "^1.2.6" }, "bin": { "geojson-rewind": "geojson-rewind" } }, "sha512-tJaT+RbYGJYStt7wI3cq4Nl4SXxG8W7JDG5DMJu97V25RnbNg3QtQtf+KD+VLjNpWKYsRvXDNmNrBgEETr1ifA=="],
-
- "@mapbox/jsonlint-lines-primitives": ["@mapbox/[email protected]", "", {}, "sha512-rY0o9A5ECsTQRVhv7tL/OyDpGAoUB4tTvLiW1DSzQGq4bvTPhNw1VpSNjDJc5GFZ2XuyOtSWSVN05qOtcD71qQ=="],
-
- "@mapbox/point-geometry": ["@mapbox/[email protected]", "", {}, "sha512-YGcBz1cg4ATXDCM/71L9xveh4dynfGmcLDqufR+nQQy3fKwsAZsWd/x4621/6uJaeB9mwOHE6hPeDgXz9uViUQ=="],
-
- "@mapbox/tiny-sdf": ["@mapbox/[email protected]", "", {}, "sha512-25gQLQMcpivjOSA40g3gO6qgiFPDpWRoMfd+G/GoppPIeP6JDaMMkMrEJnMZhKyyS6iKwVt5YKu02vCUyJM3Ug=="],
-
- "@mapbox/unitbezier": ["@mapbox/[email protected]", "", {}, "sha512-nMkuDXFv60aBr9soUG5q+GvZYL+2KZHVvsqFCzqnkGEf46U2fvmytHaEVc1/YZbiLn8X+eR3QzX1+dwDO1lxlw=="],
-
- "@mapbox/vector-tile": ["@mapbox/[email protected]", "", { "dependencies": { "@mapbox/point-geometry": "~1.1.0", "@types/geojson": "^7946.0.16", "pbf": "^4.0.1" } }, "sha512-AkOLcbgGTdXScosBWwmmD7cDlvOjkg/DetGva26pIRiZPdeJYjYKarIlb4uxVzi6bwHO6EWH82eZ5Nuv4T5DUg=="],
-
- "@mapbox/whoots-js": ["@mapbox/[email protected]", "", {}, "sha512-Es6WcD0nO5l+2BOQS4uLfNPYQaNDfbot3X1XUoloz+x0mPDS3eeORZJl06HXjwBG1fOGwCRnzK88LMdxKRrd6Q=="],
-
- "@maplibre/maplibre-gl-style-spec": ["@maplibre/[email protected]", "", { "dependencies": { "@mapbox/jsonlint-lines-primitives": "~2.0.2", "@mapbox/unitbezier": "^0.0.1", "json-stringify-pretty-compact": "^4.0.0", "minimist": "^1.2.8", "quickselect": "^3.0.0", "rw": "^1.3.3", "tinyqueue": "^3.0.0" }, "bin": { "gl-style-format": "dist/gl-style-format.mjs", "gl-style-migrate": "dist/gl-style-migrate.mjs", "gl-style-validate": "dist/gl-style-validate.mjs" } }, "sha512-IGJtuBbaGzOUgODdBRg66p8stnwj9iDXkgbYKoYcNiiQmaez5WVRfXm4b03MCDwmZyX93csbfHFWEJJYHnn5oA=="],
-
- "@maplibre/vt-pbf": ["@maplibre/[email protected]", "", { "dependencies": { "@mapbox/point-geometry": "^1.1.0", "@mapbox/vector-tile": "^2.0.4", "@types/geojson-vt": "3.2.5", "@types/supercluster": "^7.1.3", "geojson-vt": "^4.0.2", "pbf": "^4.0.1", "supercluster": "^8.0.1" } }, "sha512-YsW99BwnT+ukJRkseBcLuZHfITB4puJoxnqPVjo72rhW/TaawVYsgQHcqWLzTxqknttYoDpgyERzWSa/XrETdA=="],
-
"@noble/ciphers": ["@noble/[email protected]", "", {}, "sha512-B0+6IIHiqEs3BPMT0hcRmHvEj2QHOLu+uwt+tqDDeVd0oyVzh7BPrDcPjRnV1PV/5LaknXJJQvOuRGR0zQJz+w=="],
- "@noble/curves": ["@noble/[email protected]", "", { "dependencies": { "@noble/hashes": "1.8.0" } }, "sha512-gbKGcRUYIjA3/zCCNaWDciTMFI0dCkvou3TL8Zmy5Nc7sJ47a0jtOeZoTaMxkuqRo9cRhjOdZJXegxYE5FN/xw=="],
+ "@noble/curves": ["@noble/[email protected]", "", { "dependencies": { "@noble/hashes": "2.0.0" } }, "sha512-RiwZZeJnsTnhT+/gg2KvITJZhK5oagQrpZo+yQyd3mv3D5NAG2qEeEHpw7IkXRlpkoD45wl2o4ydHAvY9wyEfw=="],
- "@noble/hashes": ["@noble/[email protected]", "", {}, "sha512-jCs9ldd7NwzpgXDIf6P3+NrHh9/sD6CQdxHyjQI+h/6rDNo88ypBxxz45UDuZHz9r3tNz7N/VInSVoVdtXEI4A=="],
+ "@noble/hashes": ["@noble/[email protected]", "", {}, "sha512-h8VUBlE8R42+XIDO229cgisD287im3kdY6nbNZJFjc6ZvKIXPYXe6Vc/t+kyjFdMFyt5JpapzTsEg8n63w5/lw=="],
"@noble/secp256k1": ["@noble/[email protected]", "", {}, "sha512-NJBaR352KyIvj3t6sgT/+7xrNyF9Xk9QlLSIqUGVUYlsnDTAUqY8LOmwpcgEx4AMJXRITQ5XEVHD+mMaPfr3mg=="],
@@ -274,7 +248,7 @@
"@scure/base": ["@scure/[email protected]", "", {}, "sha512-3E1kpuZginKkek01ovG8krQ0Z44E3DHPjc5S2rjJw9lZn3KSQOs8S7wqikF/AH7iRanHypj85uGyxk0XAyC37w=="],
- "@scure/bip32": ["@scure/[email protected]", "", { "dependencies": { "@noble/curves": "~1.9.0", "@noble/hashes": "~1.8.0", "@scure/base": "~1.2.5" } }, "sha512-E4FFX/N3f4B80AKWp5dP6ow+flD1LQZo/w8UnLGYZO674jS6YnYeepycOOksv+vLPSpgN35wgKgy+ybfTb2SMw=="],
+ "@scure/bip32": ["@scure/[email protected]", "", { "dependencies": { "@noble/curves": "~1.1.0", "@noble/hashes": "~1.3.1", "@scure/base": "~1.1.0" } }, "sha512-osvveYtyzdEVbt3OfwwXFr4P2iVBL5u1Q3q4ONBfDY/UpOuXmOlbgwc1xECEboY8wIays8Yt6onaWMUdUbfl0A=="],
"@scure/bip39": ["@scure/[email protected]", "", { "dependencies": { "@noble/hashes": "2.0.0", "@scure/base": "2.0.0" } }, "sha512-F2Tza4KyTSFO/13JymY6a6UHfSLzx0YGbkQGz7wjGx2BYJLyG/qXELKnFFsDfeIK+WfV2v2+5XOQftvL4d8RBA=="],
@@ -348,10 +322,6 @@
"@types/fs-extra": ["@types/[email protected]", "", { "dependencies": { "@types/node": "*" } }, "sha512-0dzKcwO+S8s2kuF5Z9oUWatQJj5Uq/iqphEtE3GQJVRRYm/tD1LglU2UnXi2A8jLq5umkGouOXOR9y0n613ZwQ=="],
- "@types/geojson": ["@types/[email protected]", "", {}, "sha512-6C8nqWur3j98U6+lXDfTUWIfgvZU+EumvpHKcYjujKH7woYyLj2sUmff0tRhrqM7BohUw7Pz3ZB1jj2gW9Fvmg=="],
-
- "@types/geojson-vt": ["@types/[email protected]", "", { "dependencies": { "@types/geojson": "*" } }, "sha512-qDO7wqtprzlpe8FfQ//ClPV9xiuoh2nkIgiouIptON9w5jvD/fA4szvP9GBlDVdJ5dldAl0kX/sy3URbWwLx0g=="],
-
"@types/minimist": ["@types/[email protected]", "", {}, "sha512-hov8bUuiLiyFPGyFPE1lwWhmzYbirOXQNNo40+y3zow8aFVTeyn3VWL0VFFfdNddA8S4Vf0Tc062rzyNr7Paag=="],
"@types/node": ["@types/[email protected]", "", { "dependencies": { "undici-types": "~7.10.0" } }, "sha512-3vXmQDXy+woz+gnrTvuvNrPzekOi+Ds0ReMxw0LzBiK3a+1k0kQn9f2NWk+lgD4rJehFUmYy2gMhJ2ZI+7YP9g=="],
@@ -366,8 +336,6 @@
"@types/slice-ansi": ["@types/[email protected]", "", {}, "sha512-+OpjSaq85gvlZAYINyzKpLeiFkSC4EsC6IIiT6v6TLSU5k5U83fHGj9Lel8oKEXM0HqgrMVCjXPDPVICtxF7EQ=="],
- "@types/supercluster": ["@types/[email protected]", "", { "dependencies": { "@types/geojson": "*" } }, "sha512-Z0pOY34GDFl3Q6hUFYf3HkTwKEE02e7QgtJppBt+beEAxnyOpJua+voGFvxINBHa06GwLFFym7gRPY2SiKIfIA=="],
-
"@types/uuid": ["@types/[email protected]", "", {}, "sha512-7gqG38EyHgyP1S+7+xomFtL+ZNHcKv6DwNaCZmJmo1vgMugyF3TCnXVg4t1uk89mLNwnLtnY3TpOpCOyp1/xHQ=="],
"@xml-tools/parser": ["@xml-tools/[email protected]", "", { "dependencies": { "chevrotain": "7.1.1" } }, "sha512-aKqQ077XnR+oQtHJlrAflaZaL7qZsulWc/i/ZEooar5JiWj1eLt0+Wg28cpa+XLney107wXqneC+oG1IZvxkTA=="],
@@ -586,8 +554,6 @@
"dot-prop": ["[email protected]", "", { "dependencies": { "is-obj": "^2.0.0" } }, "sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q=="],
- "earcut": ["[email protected]", "", {}, "sha512-X7hshQbLyMJ/3RPhyObLARM2sNxxmRALLKx1+NVFFnQ9gKzmCrxm9+uLIAdBcvc8FNLpctqlQ2V6AE92Ol9UDQ=="],
-
"eastasianwidth": ["[email protected]", "", {}, "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA=="],
"elementtree": ["[email protected]", "", { "dependencies": { "sax": "1.1.4" } }, "sha512-wkgGT6kugeQk/P6VZ/f4T+4HB41BVgNBq5CDIZVbQ02nvTVqAiVTbskxxu3eA/X96lMlfYOwnLQpN2v5E1zDEg=="],
@@ -652,14 +618,10 @@
"function-bind": ["[email protected]", "", {}, "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA=="],
- "geojson-vt": ["[email protected]", "", {}, "sha512-AV9ROqlNqoZEIJGfm1ncNjEXfkz2hdFlZf0qkVfmkwdKa8vj7H16YUOT81rJw1rdFhyEDlN2Tds91p/glzbl5A=="],
-
"get-caller-file": ["[email protected]", "", {}, "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg=="],
"get-pkg-repo": ["[email protected]", "", { "dependencies": { "@hutson/parse-repository-url": "^3.0.0", "hosted-git-info": "^4.0.0", "through2": "^2.0.0", "yargs": "^16.2.0" }, "bin": { "get-pkg-repo": "src/cli.js" } }, "sha512-2+QbHjFRfGB74v/pYWjd5OhU3TDIC2Gv/YKUTk/tCvAz0pkn/Mz6P3uByuBimLOcPvN2jYdScl3xGFSrx0jEcA=="],
- "get-stream": ["[email protected]", "", {}, "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg=="],
-
"git-raw-commits": ["[email protected]", "", { "dependencies": { "dargs": "^7.0.0", "lodash": "^4.17.15", "meow": "^8.0.0", "split2": "^3.0.0", "through2": "^4.0.0" }, "bin": { "git-raw-commits": "cli.js" } }, "sha512-VnctFhw+xfj8Va1xtfEqCUD2XDrbAPSJx+hSrE5K7fGdjZruW7XV+QOrN7LF/RJyvspRiD2I0asWsxFp0ya26A=="],
"git-remote-origin-url": ["[email protected]", "", { "dependencies": { "gitconfiglocal": "^1.0.0", "pify": "^2.3.0" } }, "sha512-eU+GGrZgccNJcsDH5LkXR3PB9M958hxc7sbA8DFJjrv9j4L2P/eZfKhM+QD6wyzpiv+b1BpK0XrYCxkovtjSLw=="],
@@ -670,8 +632,6 @@
"github-from-package": ["[email protected]", "", {}, "sha512-SyHy3T1v2NUXn29OsWdxmK6RwHD+vkj3v8en8AOBZ1wBQ/hCAQ5bAQTD02kW4W9tUp/3Qh6J8r9EvntiyCmOOw=="],
- "gl-matrix": ["[email protected]", "", {}, "sha512-latSnyDNt/8zYUB6VIJ6PCh2jBjJX6gnDsoCZ7LyW7GkqrD51EWwa9qCoGixj8YqBtETQK/xY7OmpTF8xz1DdQ=="],
-
"glob": ["[email protected]", "", { "dependencies": { "foreground-child": "^3.3.1", "jackspeak": "^4.1.1", "minimatch": "^10.0.3", "minipass": "^7.1.2", "package-json-from-dist": "^1.0.0", "path-scurry": "^2.0.0" }, "bin": { "glob": "dist/esm/bin.mjs" } }, "sha512-2Nim7dha1KVkaiF4q6Dj+ngPPMdfvLJEOpZk/jKiUAkqKebpGAWQXAq9z1xu9HKu5lWfqw/FASuccEjyznjPaA=="],
"glob-parent": ["[email protected]", "", { "dependencies": { "is-glob": "^4.0.1" } }, "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow=="],
@@ -698,8 +658,6 @@
"hosted-git-info": ["[email protected]", "", { "dependencies": { "lru-cache": "^6.0.0" } }, "sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA=="],
- "html5-qrcode": ["[email protected]", "", {}, "sha512-jsr4vafJhwoLVEDW3n1KvPnCCXWaQfRng0/EEYk1vNcQGcG/htAdhJX0be8YyqMoSz7+hZvOZSTAepsabiuhiQ=="],
-
"iconify-icon": ["[email protected]", "", { "dependencies": { "@iconify/types": "^2.0.0" } }, "sha512-yPcnpkn8HUEUckrxxJBOer3jbGv3bqozHsLMLBRxhk3As1X76BgV2mS2a1HTNOIagR8nUs30H3qAd9GLe8Mnlg=="],
"ieee754": ["[email protected]", "", {}, "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA=="],
@@ -762,24 +720,16 @@
"json-parse-even-better-errors": ["[email protected]", "", {}, "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w=="],
- "json-stringify-pretty-compact": ["[email protected]", "", {}, "sha512-3CNZ2DnrpByG9Nqj6Xo8vqbjT4F6N+tb4Gb28ESAZjYZ5yqvmc56J+/kuIwkaAMOyblTQhUW7PxMkUb8Q36N3Q=="],
-
"json-stringify-safe": ["[email protected]", "", {}, "sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA=="],
"jsonfile": ["[email protected]", "", { "dependencies": { "universalify": "^2.0.0" }, "optionalDependencies": { "graceful-fs": "^4.1.6" } }, "sha512-FGuPw30AdOIUTRMC2OMRtQV+jkVj2cfPqSeWXv1NEAJ1qZ5zb1X6z1mFhbfOB/iy3ssJCD+3KuZ8r8C3uVFlAg=="],
"jsonparse": ["[email protected]", "", {}, "sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg=="],
- "kdbush": ["[email protected]", "", {}, "sha512-WbCVYJ27Sz8zi9Q7Q0xHC+05iwkm3Znipc2XTlrnJbsHMYktW4hPhXUE8Ys1engBrvffoSCqbil1JQAa7clRpA=="],
-
"kind-of": ["[email protected]", "", {}, "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw=="],
"kleur": ["[email protected]", "", {}, "sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ=="],
- "leaflet": ["[email protected]", "", {}, "sha512-nxS1ynzJOmOlHp+iL3FyWqK89GtNL8U8rvlMOsQdTTssxZwCXh8N2NB3GDQOL+YR3XnWyZAxwQixURb+FA74PA=="],
-
- "leaflet.markercluster": ["[email protected]", "", { "peerDependencies": { "leaflet": "^1.3.1" } }, "sha512-vPTw/Bndq7eQHjLBVlWpnGeLa3t+3zGiuM7fJwCkiMFq+nmRuG3RI3f7f4N4TDX7T4NpbAXpR2+NTRSEGfCSeA=="],
-
"lightningcss": ["[email protected]", "", { "dependencies": { "detect-libc": "^2.0.3" }, "optionalDependencies": { "lightningcss-darwin-arm64": "1.30.1", "lightningcss-darwin-x64": "1.30.1", "lightningcss-freebsd-x64": "1.30.1", "lightningcss-linux-arm-gnueabihf": "1.30.1", "lightningcss-linux-arm64-gnu": "1.30.1", "lightningcss-linux-arm64-musl": "1.30.1", "lightningcss-linux-x64-gnu": "1.30.1", "lightningcss-linux-x64-musl": "1.30.1", "lightningcss-win32-arm64-msvc": "1.30.1", "lightningcss-win32-x64-msvc": "1.30.1" } }, "sha512-xi6IyHML+c9+Q3W0S4fCQJOym42pyurFiJUHEcEyHS0CeKzia4yZDEsLlqOFykxOdHpNy0NmvVO31vcSqAxJCg=="],
"lightningcss-android-arm64": ["[email protected]", "", { "os": "android", "cpu": "arm64" }, "sha512-BH9sEdOCahSgmkVhBLeU7Hc9DWeZ1Eb6wNS6Da8igvUwAe0sqROHddIlvU06q3WyXVEOYDZ6ykBZQnjTbmo4+A=="],
@@ -826,8 +776,6 @@
"map-obj": ["[email protected]", "", {}, "sha512-hdN1wVrZbb29eBGiGjJbeP8JbKjq1urkHJ/LIP/NY48MZ1QVXUsQBV1G1zvYFHn1XE06cwjBsOI2K3Ulnj1YXQ=="],
- "maplibre-gl": ["[email protected]", "", { "dependencies": { "@mapbox/geojson-rewind": "^0.5.2", "@mapbox/jsonlint-lines-primitives": "^2.0.2", "@mapbox/point-geometry": "^1.1.0", "@mapbox/tiny-sdf": "^2.0.7", "@mapbox/unitbezier": "^0.0.1", "@mapbox/vector-tile": "^2.0.4", "@mapbox/whoots-js": "^3.1.0", "@maplibre/maplibre-gl-style-spec": "^23.3.0", "@maplibre/vt-pbf": "^4.0.3", "@types/geojson": "^7946.0.16", "@types/geojson-vt": "3.2.5", "@types/supercluster": "^7.1.3", "earcut": "^3.0.2", "geojson-vt": "^4.0.2", "gl-matrix": "^3.4.4", "kdbush": "^4.0.2", "murmurhash-js": "^1.0.0", "pbf": "^4.0.1", "potpack": "^2.1.0", "quickselect": "^3.0.0", "supercluster": "^8.0.1", "tinyqueue": "^3.0.0" } }, "sha512-iCOQB6W/EGgQx8aU4SyfU5a5/GR2E+ELF92NMsqYfs3x+vnY+8mARmz4gor6XZHCz3tv19mnotVDRlRTMNKyGw=="],
-
"meow": ["[email protected]", "", { "dependencies": { "@types/minimist": "^1.2.0", "camelcase-keys": "^6.2.2", "decamelize-keys": "^1.1.0", "hard-rejection": "^2.1.0", "minimist-options": "4.1.0", "normalize-package-data": "^3.0.0", "read-pkg-up": "^7.0.1", "redent": "^3.0.0", "trim-newlines": "^3.0.0", "type-fest": "^0.18.0", "yargs-parser": "^20.2.3" } }, "sha512-r85E3NdZ+mpYk1C6RjPFEMSE+s1iZMuHtsHAqY0DT3jZczl0diWUZ8g6oU7h0M9cD2EL+PzaYghhCLzR0ZNn5Q=="],
"merge2": ["[email protected]", "", {}, "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg=="],
@@ -864,8 +812,6 @@
"ms": ["[email protected]", "", {}, "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="],
- "murmurhash-js": ["[email protected]", "", {}, "sha512-TvmkNhkv8yct0SVBSy+o8wYzXjE4Zz3PCesbfs8HiCXXdcTuocApFv11UWlNFWKYsP2okqrhb7JNlSm9InBhIw=="],
-
"nanoid": ["[email protected]", "", { "bin": { "nanoid": "bin/nanoid.cjs" } }, "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w=="],
"napi-build-utils": ["[email protected]", "", {}, "sha512-GEbrYkbfF7MoNaoh2iGG84Mnf/WZfB0GdGEsM8wz7Expx/LlWf5U8t9nvJKXSp3qr5IsEbK04cBGhol/KwOsWA=="],
@@ -920,8 +866,6 @@
"path-type": ["[email protected]", "", { "dependencies": { "pify": "^3.0.0" } }, "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg=="],
- "pbf": ["[email protected]", "", { "dependencies": { "resolve-protobuf-schema": "^2.1.0" }, "bin": { "pbf": "bin/pbf" } }, "sha512-SuLdBvS42z33m8ejRbInMapQe8n0D3vN/Xd5fmWM3tufNgRQFBpaW2YVJxQZV4iPNqb0vEFvssMEo5w9c6BTIA=="],
-
"pend": ["[email protected]", "", {}, "sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg=="],
"picocolors": ["[email protected]", "", {}, "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA=="],
@@ -936,8 +880,6 @@
"postcss": ["[email protected]", "", { "dependencies": { "nanoid": "^3.3.11", "picocolors": "^1.1.1", "source-map-js": "^1.2.1" } }, "sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg=="],
- "potpack": ["[email protected]", "", {}, "sha512-pcaShQc1Shq0y+E7GqJqvZj8DTthWV1KeHGdi0Z6IAin2Oi3JnLCOfwnCo84qc+HAp52wT9nK9H7FAJp5a44GQ=="],
-
"prebuild-install": ["[email protected]", "", { "dependencies": { "detect-libc": "^2.0.0", "expand-template": "^2.0.3", "github-from-package": "0.0.0", "minimist": "^1.2.3", "mkdirp-classic": "^0.5.3", "napi-build-utils": "^2.0.0", "node-abi": "^3.3.0", "pump": "^3.0.0", "rc": "^1.2.7", "simple-get": "^4.0.0", "tar-fs": "^2.0.0", "tunnel-agent": "^0.6.0" }, "bin": { "prebuild-install": "bin.js" } }, "sha512-8Mf2cbV7x1cXPUILADGI3wuhfqWvtiLA1iclTDbFRZkgRQS0NqsPZphna9V+HyTEadheuPmjaJMsbzKQFOzLug=="],
"prettier": ["[email protected]", "", { "bin": { "prettier": "bin/prettier.cjs" } }, "sha512-I7AIg5boAr5R0FFtJ6rCfD+LFsWHp81dolrFD8S79U9tb8Az2nGrJncnMSnys+bpQJfRUzqs9hnA81OAA3hCuQ=="],
@@ -950,30 +892,22 @@
"prompts": ["[email protected]", "", { "dependencies": { "kleur": "^3.0.3", "sisteransi": "^1.0.5" } }, "sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q=="],
- "protocol-buffers-schema": ["[email protected]", "", {}, "sha512-TdDRD+/QNdrCGCE7v8340QyuXd4kIWIgapsE2+n/SaGiSSbomYl4TjHlvIoCWRpE7wFt02EpB35VVA2ImcBVqw=="],
-
"pump": ["[email protected]", "", { "dependencies": { "end-of-stream": "^1.1.0", "once": "^1.3.1" } }, "sha512-todwxLMY7/heScKmntwQG8CXVkWUOdYxIvY2s0VWAAMh/nd8SoYiRaKjlr7+iCs984f2P8zvrfWcDDYVb73NfA=="],
"q": ["[email protected]", "", {}, "sha512-kV/CThkXo6xyFEZUugw/+pIOywXcDbFYgSct5cT3gqlbkBE1SJdwy6UQoZvodiWF/ckQLZyDE/Bu1M6gVu5lVw=="],
- "qr-code-styling": ["[email protected]", "", { "dependencies": { "qrcode-generator": "^1.4.4" } }, "sha512-RgJaZJ1/RrXJ6N0j7a+pdw3zMBmzZU4VN2dtAZf8ZggCfRB5stEQ3IoDNGaNhYY3nnZKYlYSLl5YkfWN5dPutg=="],
-
"qr-scanner": ["[email protected]", "", { "dependencies": { "@types/offscreencanvas": "^2019.6.4" } }, "sha512-kV1yQUe2FENvn59tMZW6mOVfpq9mGxGf8l6+EGaXUOd4RBOLg7tRC83OrirM5AtDvZRpdjdlXURsHreAOSPOUw=="],
"qrcode": ["[email protected]", "", { "dependencies": { "dijkstrajs": "^1.0.1", "pngjs": "^5.0.0", "yargs": "^15.3.1" }, "bin": { "qrcode": "bin/qrcode" } }, "sha512-1ca71Zgiu6ORjHqFBDpnSMTR2ReToX4l1Au1VFLyVeBTFavzQnv5JxMFr3ukHVKpSrSA2MCk0lNJSykjUfz7Zg=="],
"qrcode-base64": ["[email protected]", "", {}, "sha512-B0BDmnRSvbj47Nq/+IeZjj22afNrf4rwIloNrSXN6OwnkoO+Q0hsUa53gCEfqNQjx+OcytF3azvQhi6wV2Tk6g=="],
- "qrcode-generator": ["[email protected]", "", {}, "sha512-pItrW0Z9HnDBnFmgiNrY1uxRdri32Uh9EjNYLPVC2zZ3ZRIIEqBoDgm4DkvDwNNDHTK7FNkmr8zAa77BYc9xNw=="],
-
"query-string": ["[email protected]", "", { "dependencies": { "decode-uri-component": "^0.4.1", "filter-obj": "^5.1.0", "split-on-first": "^3.0.0" } }, "sha512-IQHOQ9aauHAApwAaUYifpEyLHv6fpVGVkMOnwPzcDScLjbLj8tLsILn6unSW79NafOw1llh8oK7Gd0VwmXBFmA=="],
"queue-microtask": ["[email protected]", "", {}, "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A=="],
"quick-lru": ["[email protected]", "", {}, "sha512-ARhCpm70fzdcvNQfPoy49IaanKkTlRWF2JMzqhcJbhSFRZv7nPTvZJdcY7301IPmvW+/p0RgIWnQDLJxifsQ7g=="],
- "quickselect": ["[email protected]", "", {}, "sha512-XdjUArbK4Bm5fLLvlm5KpTFOiOThgfWWI4axAZDWg4E/0mKdZyI9tNEfds27qCi1ze/vwTR16kvmmGhRra3c2g=="],
-
"rc": ["[email protected]", "", { "dependencies": { "deep-extend": "^0.6.0", "ini": "~1.3.0", "minimist": "^1.2.0", "strip-json-comments": "~2.0.1" }, "bin": { "rc": "./cli.js" } }, "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw=="],
"react": ["[email protected]", "", {}, "sha512-w8nqGImo45dmMIfljjMwOGtbmC/mk4CMYhWIicdSflH91J9TyCyczcPFXJzrZ/ZXcgGRFeP6BU0BEJTw6tZdfQ=="],
@@ -996,17 +930,15 @@
"resolve": ["[email protected]", "", { "dependencies": { "is-core-module": "^2.16.0", "path-parse": "^1.0.7", "supports-preserve-symlinks-flag": "^1.0.0" }, "bin": { "resolve": "bin/resolve" } }, "sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w=="],
- "resolve-protobuf-schema": ["[email protected]", "", { "dependencies": { "protocol-buffers-schema": "^3.3.1" } }, "sha512-kI5ffTiZWmJaS/huM8wZfEMer1eRd7oJQhDuxeCLe3t7N7mX3z94CN0xPxBQxFYQTSNz9T0i+v6inKqSdK8xrQ=="],
-
"reusify": ["[email protected]", "", {}, "sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw=="],
"rimraf": ["[email protected]", "", { "dependencies": { "glob": "^11.0.0", "package-json-from-dist": "^1.0.0" }, "bin": { "rimraf": "dist/esm/bin.mjs" } }, "sha512-9dkvaxAsk/xNXSJzMgFqqMCuFgt2+KsOFek3TMLfo8NCPfWpBmqwyNn5Y+NX56QUYfCtsyhF3ayiboEoUmJk/A=="],
"rollup": ["[email protected]", "", { "dependencies": { "@types/estree": "1.0.8" }, "optionalDependencies": { "@rollup/rollup-android-arm-eabi": "4.50.1", "@rollup/rollup-android-arm64": "4.50.1", "@rollup/rollup-darwin-arm64": "4.50.1", "@rollup/rollup-darwin-x64": "4.50.1", "@rollup/rollup-freebsd-arm64": "4.50.1", "@rollup/rollup-freebsd-x64": "4.50.1", "@rollup/rollup-linux-arm-gnueabihf": "4.50.1", "@rollup/rollup-linux-arm-musleabihf": "4.50.1", "@rollup/rollup-linux-arm64-gnu": "4.50.1", "@rollup/rollup-linux-arm64-musl": "4.50.1", "@rollup/rollup-linux-loongarch64-gnu": "4.50.1", "@rollup/rollup-linux-ppc64-gnu": "4.50.1", "@rollup/rollup-linux-riscv64-gnu": "4.50.1", "@rollup/rollup-linux-riscv64-musl": "4.50.1", "@rollup/rollup-linux-s390x-gnu": "4.50.1", "@rollup/rollup-linux-x64-gnu": "4.50.1", "@rollup/rollup-linux-x64-musl": "4.50.1", "@rollup/rollup-openharmony-arm64": "4.50.1", "@rollup/rollup-win32-arm64-msvc": "4.50.1", "@rollup/rollup-win32-ia32-msvc": "4.50.1", "@rollup/rollup-win32-x64-msvc": "4.50.1", "fsevents": "~2.3.2" }, "bin": { "rollup": "dist/bin/rollup" } }, "sha512-78E9voJHwnXQMiQdiqswVLZwJIzdBKJ1GdI5Zx6XwoFKUIk09/sSrr+05QFzvYb8q6Y9pPV45zzDuYa3907TZA=="],
- "run-parallel": ["[email protected]", "", { "dependencies": { "queue-microtask": "^1.2.2" } }, "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA=="],
+ "rollup-plugin-visualizer": ["[email protected]", "", { "dependencies": { "open": "^8.4.0", "picomatch": "^4.0.2", "source-map": "^0.7.4", "yargs": "^17.5.1" }, "peerDependencies": { "rolldown": "1.x", "rollup": "2.x || 3.x || 4.x" }, "optionalPeers": ["rolldown", "rollup"], "bin": { "rollup-plugin-visualizer": "dist/bin/cli.js" } }, "sha512-VlDXneTDaKsHIw8yzJAFWtrzguoJ/LnQ+lMpoVfYJ3jJF4Ihe5oYLAqLklIK/35lgUY+1yEzCkHyZ1j4A5w5fA=="],
- "rw": ["[email protected]", "", {}, "sha512-PdhdWy89SiZogBLaw42zdeqtRJ//zFd2PgQavcICDUgJT5oW10QCRKbJ6bg4r0/UY2M6BWd5tkxuGFRvCkgfHQ=="],
+ "run-parallel": ["[email protected]", "", { "dependencies": { "queue-microtask": "^1.2.2" } }, "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA=="],
"sade": ["[email protected]", "", { "dependencies": { "mri": "^1.1.0" } }, "sha512-xal3CZX1Xlo/k4ApwCFrHVACi9fBqJ7V+mwhBsuf/1IOKbBy098Fex+Wa/5QMubw09pSZ/u8EY8PWgevJsXp1A=="],
@@ -1048,7 +980,7 @@
"slice-ansi": ["[email protected]", "", { "dependencies": { "ansi-styles": "^4.0.0", "astral-regex": "^2.0.0", "is-fullwidth-code-point": "^3.0.0" } }, "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ=="],
- "source-map": ["[email protected]", "", {}, "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g=="],
+ "source-map": ["[email protected]", "", {}, "sha512-i5uvt8C3ikiWeNZSVZNWcfZPItFQOsYTUAOkcUPGd8DqDy1uOUikjt5dG+uRlwyvR108Fb9DOd4GvXfT0N2/uQ=="],
"source-map-js": ["[email protected]", "", {}, "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA=="],
@@ -1086,8 +1018,6 @@
"strip-json-comments": ["[email protected]", "", {}, "sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ=="],
- "supercluster": ["[email protected]", "", { "dependencies": { "kdbush": "^4.0.2" } }, "sha512-IiOea5kJ9iqzD2t7QJq/cREyLHTtSmUT6gQsweojg9WH2sYJqZK9SswTu6jrscO6D1G5v5vYZ9ru/eq85lXeZQ=="],
-
"supports-color": ["[email protected]", "", { "dependencies": { "has-flag": "^3.0.0" } }, "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow=="],
"supports-preserve-symlinks-flag": ["[email protected]", "", {}, "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w=="],
@@ -1104,8 +1034,6 @@
"svelte-preprocess": ["[email protected]", "", { "peerDependencies": { "@babel/core": "^7.10.2", "coffeescript": "^2.5.1", "less": "^3.11.3 || ^4.0.0", "postcss": "^7 || ^8", "postcss-load-config": ">=3", "pug": "^3.0.0", "sass": "^1.26.8", "stylus": ">=0.55", "sugarss": "^2.0.0 || ^3.0.0 || ^4.0.0", "svelte": "^4.0.0 || ^5.0.0-next.100 || ^5.0.0", "typescript": "^5.0.0" }, "optionalPeers": ["@babel/core", "coffeescript", "less", "postcss", "postcss-load-config", "pug", "sass", "stylus", "sugarss", "typescript"] }, "sha512-PLG2k05qHdhmRG7zR/dyo5qKvakhm8IJ+hD2eFRQmMLHp7X3eJnjeupUtvuRpbNiF31RjVw45W+abDwHEmP5OA=="],
- "svelte-virtual-scroll-list": ["[email protected]", "", { "peerDependencies": { "svelte": ">=3.5.0" } }, "sha512-rkU993mMsTboFRlygExhYeLJwysaFxyzfTsAfOtDklGIyd0wB31eZtYSAHAcz/WaZCEwjn+GKXfx5jM1xUv3GQ=="],
-
"sveltekit-i18n": ["[email protected]", "", { "dependencies": { "@sveltekit-i18n/base": "~1.3.0", "@sveltekit-i18n/parser-default": "~1.1.0" }, "peerDependencies": { "svelte": ">=3.49.0" } }, "sha512-hjRWn4V4DBL8JQKJoJa3MRvn6d32Zo+rWkoSP5bsQ/XIAguPdQUZJ8LMe6Nc1rST8WEVdu9+vZI3aFdKYGR3+Q=="],
"tailwind-scrollbar": ["[email protected]", "", { "dependencies": { "prism-react-renderer": "^2.4.1" }, "peerDependencies": { "tailwindcss": "4.x" } }, "sha512-wAQiIxAPqk0MNTPptVe/xoyWi27y+NRGnTwvn4PQnbvB9kp8QUBiGl/wsfoVBHnQxTmhXJSNt9NHTmcz9EivFA=="],
@@ -1136,8 +1064,6 @@
"tinyglobby": ["[email protected]", "", { "dependencies": { "fdir": "^6.5.0", "picomatch": "^4.0.3" } }, "sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ=="],
- "tinyqueue": ["[email protected]", "", {}, "sha512-gRa9gwYU3ECmQYv3lslts5hxuIa90veaEcxDYuu3QGOIAEM2mOZkVHp48ANJuu1CURtRdHKUBY5Lm1tHV+sD4g=="],
-
"tmp": ["[email protected]", "", {}, "sha512-voyz6MApa1rQGUxT3E+BK7/ROe8itEx7vD8/HEvt4xwXucvQ5G5oeEiHkmHZJuBO21RpOf+YYm9MOivj709jow=="],
"to-regex-range": ["[email protected]", "", { "dependencies": { "is-number": "^7.0.0" } }, "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ=="],
@@ -1232,8 +1158,6 @@
"zxing-wasm": ["[email protected]", "", { "dependencies": { "@types/emscripten": "^1.40.1", "type-fest": "^4.41.0" } }, "sha512-RyHxVaAHsLSDzmwcAG05IF8sVOE5Ta2JT1dRDh0mzVZOIiDXZstsjkqvKHasN1n4lvFSbX7ngkHDufnt/XI07Q=="],
- "@arkade-os/sdk/@noble/curves": ["@noble/[email protected]", "", { "dependencies": { "@noble/hashes": "2.0.0" } }, "sha512-RiwZZeJnsTnhT+/gg2KvITJZhK5oagQrpZo+yQyd3mv3D5NAG2qEeEHpw7IkXRlpkoD45wl2o4ydHAvY9wyEfw=="],
-
"@capacitor/assets/@capacitor/cli": ["@capacitor/[email protected]", "", { "dependencies": { "@ionic/cli-framework-output": "^2.2.5", "@ionic/utils-fs": "^3.1.6", "@ionic/utils-subprocess": "^2.1.11", "@ionic/utils-terminal": "^2.3.3", "commander": "^9.3.0", "debug": "^4.3.4", "env-paths": "^2.2.0", "kleur": "^4.1.4", "native-run": "^2.0.0", "open": "^8.4.0", "plist": "^3.0.5", "prompts": "^2.4.2", "rimraf": "^4.4.1", "semver": "^7.3.7", "tar": "^6.1.11", "tslib": "^2.4.0", "xml2js": "^0.5.0" }, "bin": { "cap": "bin/capacitor", "capacitor": "bin/capacitor" } }, "sha512-qN8LDlREMhrYhOvVXahoJVNkP8LP55/YPRJrzTAFrMqlNJC18L3CzgWYIblFPnuwfbH/RxbfoZT/ydkwgVpMrw=="],
"@capacitor/cli/commander": ["[email protected]", "", {}, "sha512-Vw8qHK3bZM9y/P10u3Vib8o/DdkvA2OtPtZvD871QKjy74Wj1WSKFILMPRPSdUSx5RFK1arlJzEtA4PkFgnbuA=="],
@@ -1288,15 +1212,15 @@
"@isaacs/cliui/wrap-ansi": ["[email protected]", "", { "dependencies": { "ansi-styles": "^6.1.0", "string-width": "^5.0.1", "strip-ansi": "^7.0.1" } }, "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ=="],
- "@rollup/plugin-commonjs/is-reference": ["[email protected]", "", { "dependencies": { "@types/estree": "*" } }, "sha512-U82MsXXiFIrjCK4otLT+o2NA2Cd2g5MLoOVXUZjIOhLurrRxpEXzI8O0KZHr3IjLvlAH1kTPYSuqer5T9ZVBKQ=="],
+ "@paralleldrive/cuid2/@noble/hashes": ["@noble/[email protected]", "", {}, "sha512-jCs9ldd7NwzpgXDIf6P3+NrHh9/sD6CQdxHyjQI+h/6rDNo88ypBxxz45UDuZHz9r3tNz7N/VInSVoVdtXEI4A=="],
- "@scure/bip32/@scure/base": ["@scure/[email protected]", "", {}, "sha512-g/nm5FgUa//MCj1gV09zTJTaM6KBAHqLN907YVQqf7zC49+DcO4B1so4ZX07Ef10Twr6nuqYEH9GEggFXA4Fmg=="],
+ "@rollup/plugin-commonjs/is-reference": ["[email protected]", "", { "dependencies": { "@types/estree": "*" } }, "sha512-U82MsXXiFIrjCK4otLT+o2NA2Cd2g5MLoOVXUZjIOhLurrRxpEXzI8O0KZHr3IjLvlAH1kTPYSuqer5T9ZVBKQ=="],
- "@scure/bip39/@noble/hashes": ["@noble/[email protected]", "", {}, "sha512-h8VUBlE8R42+XIDO229cgisD287im3kdY6nbNZJFjc6ZvKIXPYXe6Vc/t+kyjFdMFyt5JpapzTsEg8n63w5/lw=="],
+ "@scure/bip32/@noble/curves": ["@noble/[email protected]", "", { "dependencies": { "@noble/hashes": "1.3.1" } }, "sha512-091oBExgENk/kGj3AZmtBDMpxQPDtxQABR2B9lb1JbVTs6ytdzZNwvhxQ4MWasRNEzlbEH8jCWFCwhF/Obj5AA=="],
- "@scure/btc-signer/@noble/curves": ["@noble/[email protected]", "", { "dependencies": { "@noble/hashes": "2.0.0" } }, "sha512-RiwZZeJnsTnhT+/gg2KvITJZhK5oagQrpZo+yQyd3mv3D5NAG2qEeEHpw7IkXRlpkoD45wl2o4ydHAvY9wyEfw=="],
+ "@scure/bip32/@noble/hashes": ["@noble/[email protected]", "", {}, "sha512-MVC8EAQp7MvEcm30KWENFjgR+Mkmf+D189XJTkFIlwohU5hcBbn1ZkKq7KVTi2Hme3PMGF390DaL52beVrIihQ=="],
- "@scure/btc-signer/@noble/hashes": ["@noble/[email protected]", "", {}, "sha512-h8VUBlE8R42+XIDO229cgisD287im3kdY6nbNZJFjc6ZvKIXPYXe6Vc/t+kyjFdMFyt5JpapzTsEg8n63w5/lw=="],
+ "@scure/bip32/@scure/base": ["@scure/[email protected]", "", {}, "sha512-ZxOhsSyxYwLJj3pLZCefNitxsj093tb2vq90mp2txoYeBqbcjDjqFhyM8eUjq/uFm6zJ+mUuqxlS2FkuSY1MTA=="],
"@sveltejs/vite-plugin-svelte/debug": ["[email protected]", "", { "dependencies": { "ms": "^2.1.3" } }, "sha512-KcKCqiftBJcZr++7ykoDIEwSa3XWowTfNPo92BYxjXiyYEVrUQh2aLyhxBCwww+heortUFxEJYcRzosstTEBYQ=="],
@@ -1364,6 +1288,8 @@
"glob/minipass": ["[email protected]", "", {}, "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw=="],
+ "handlebars/source-map": ["[email protected]", "", {}, "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g=="],
+
"hosted-git-info/lru-cache": ["[email protected]", "", { "dependencies": { "yallist": "^4.0.0" } }, "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA=="],
"load-json-file/pify": ["[email protected]", "", {}, "sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg=="],
@@ -1392,8 +1318,6 @@
"nostr-tools/@scure/base": ["@scure/[email protected]", "", {}, "sha512-ZxOhsSyxYwLJj3pLZCefNitxsj093tb2vq90mp2txoYeBqbcjDjqFhyM8eUjq/uFm6zJ+mUuqxlS2FkuSY1MTA=="],
- "nostr-tools/@scure/bip32": ["@scure/[email protected]", "", { "dependencies": { "@noble/curves": "~1.1.0", "@noble/hashes": "~1.3.1", "@scure/base": "~1.1.0" } }, "sha512-osvveYtyzdEVbt3OfwwXFr4P2iVBL5u1Q3q4ONBfDY/UpOuXmOlbgwc1xECEboY8wIays8Yt6onaWMUdUbfl0A=="],
-
"nostr-tools/@scure/bip39": ["@scure/[email protected]", "", { "dependencies": { "@noble/hashes": "~1.3.0", "@scure/base": "~1.1.0" } }, "sha512-Z3/Fsz1yr904dduJD0NpiyRHhRYHdcnyh73FZWiV+/qhWi83wNJ3NWolYqCEN+ZWsUz2TWwajJggcRE9r1zUYg=="],
"path-scurry/minipass": ["[email protected]", "", {}, "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw=="],
@@ -1428,8 +1352,6 @@
"xml2js/xmlbuilder": ["[email protected]", "", {}, "sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA=="],
- "@arkade-os/sdk/@noble/curves/@noble/hashes": ["@noble/[email protected]", "", {}, "sha512-h8VUBlE8R42+XIDO229cgisD287im3kdY6nbNZJFjc6ZvKIXPYXe6Vc/t+kyjFdMFyt5JpapzTsEg8n63w5/lw=="],
-
"@capacitor/assets/@capacitor/cli/@ionic/utils-subprocess": ["@ionic/[email protected]", "", { "dependencies": { "@ionic/utils-array": "2.1.6", "@ionic/utils-fs": "3.1.7", "@ionic/utils-process": "2.1.11", "@ionic/utils-stream": "3.1.6", "@ionic/utils-terminal": "2.3.4", "cross-spawn": "^7.0.3", "debug": "^4.0.0", "tslib": "^2.0.1" } }, "sha512-nGYvyGVjU0kjPUcSRFr4ROTraT3w/7r502f5QJEsMRKTqa4eEzCshtwRk+/mpASm0kgBN5rrjYA5A/OZg8ahqg=="],
"@capacitor/assets/@capacitor/cli/commander": ["[email protected]", "", {}, "sha512-KRs7WVDKg86PWiuAqhDrAQnTXZKraVcCc6vFdL14qrZ/DcWwuRo7VoiYXalXO7S5GKpqYiVEwCbgFDfxNHKJBQ=="],
@@ -1466,6 +1388,8 @@
"@isaacs/cliui/wrap-ansi/ansi-styles": ["[email protected]", "", {}, "sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg=="],
+ "@scure/bip32/@noble/curves/@noble/hashes": ["@noble/[email protected]", "", {}, "sha512-EbqwksQwz9xDRGfDST86whPBgM65E0OH/pCgqW0GBVzO22bNE+NuIbeTb714+IfSjU3aRk47EUvXIb5bTsenKA=="],
+
"@sveltejs/vite-plugin-svelte-inspector/debug/ms": ["[email protected]", "", {}, "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA=="],
"@sveltejs/vite-plugin-svelte/debug/ms": ["[email protected]", "", {}, "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA=="],
@@ -1518,10 +1442,6 @@
"nostr-tools/@noble/curves/@noble/hashes": ["@noble/[email protected]", "", {}, "sha512-MVC8EAQp7MvEcm30KWENFjgR+Mkmf+D189XJTkFIlwohU5hcBbn1ZkKq7KVTi2Hme3PMGF390DaL52beVrIihQ=="],
- "nostr-tools/@scure/bip32/@noble/curves": ["@noble/[email protected]", "", { "dependencies": { "@noble/hashes": "1.3.1" } }, "sha512-091oBExgENk/kGj3AZmtBDMpxQPDtxQABR2B9lb1JbVTs6ytdzZNwvhxQ4MWasRNEzlbEH8jCWFCwhF/Obj5AA=="],
-
- "nostr-tools/@scure/bip32/@noble/hashes": ["@noble/[email protected]", "", {}, "sha512-MVC8EAQp7MvEcm30KWENFjgR+Mkmf+D189XJTkFIlwohU5hcBbn1ZkKq7KVTi2Hme3PMGF390DaL52beVrIihQ=="],
-
"prebuild-install/tar-fs/chownr": ["[email protected]", "", {}, "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg=="],
"prebuild-install/tar-fs/tar-stream": ["[email protected]", "", { "dependencies": { "bl": "^4.0.3", "end-of-stream": "^1.4.1", "fs-constants": "^1.0.0", "inherits": "^2.0.3", "readable-stream": "^3.1.1" } }, "sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ=="],
@@ -1572,8 +1492,6 @@
"meow/read-pkg-up/read-pkg/type-fest": ["[email protected]", "", {}, "sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg=="],
- "nostr-tools/@scure/bip32/@noble/curves/@noble/hashes": ["@noble/[email protected]", "", {}, "sha512-EbqwksQwz9xDRGfDST86whPBgM65E0OH/pCgqW0GBVzO22bNE+NuIbeTb714+IfSjU3aRk47EUvXIb5bTsenKA=="],
-
"qrcode/yargs/cliui/wrap-ansi": ["[email protected]", "", { "dependencies": { "ansi-styles": "^4.0.0", "string-width": "^4.1.0", "strip-ansi": "^6.0.0" } }, "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA=="],
"read-pkg-up/find-up/locate-path/p-locate": ["[email protected]", "", { "dependencies": { "p-limit": "^1.1.0" } }, "sha512-nQja7m7gSKuewoVRen45CtVfODR3crN3goVQ0DDZ9N3yHxgpkuBhZqsaiotSQRrADUrne346peY7kT3TSACykg=="],
diff --git a/package.json b/package.json
index 19ea437b..87543a99 100644
--- a/package.json
+++ b/package.json
@@ -7,7 +7,6 @@
"@capacitor/cli": "^7.4.3",
"@capacitor/core": "^7.4.3",
"@capacitor/ios": "^7.4.3",
- "@cashu/cashu-ts": "^2.7.1",
"@iconify/iconify": "^3.1.1",
"@scure/base": "^2.0.0",
"@scure/bip39": "^2.0.0",
@@ -25,19 +24,15 @@
"daisyui": "^5.1.9",
"date-fns": "^4.1.0",
"esptool-js": "^0.5.7",
- "html5-qrcode": "^2.3.8",
"iconify-icon": "^3.0.0",
"js-cookie": "^3.0.5",
- "leaflet": "^1.9.4",
- "leaflet.markercluster": "^1.5.3",
- "maplibre-gl": "^5.7.1",
"nostr-tools": "^2.16.2",
"prettier": "^3.6.2",
"prettier-plugin-svelte": "^3.4.0",
- "qr-code-styling": "1.9.2",
"qr-scanner": "^1.4.2",
"qrcode-base64": "^1.0.1",
"rollup": "^4.50.1",
+ "rollup-plugin-visualizer": "^5.14.0",
"screenfull": "^6.0.2",
"svelte": "^5.38.8",
"svelte-adapter-bun": "^0.5.2",
@@ -45,7 +40,6 @@
"svelte-dnd-action": "^0.9.65",
"svelte-outclick": "^4.1.2",
"svelte-preprocess": "^6.0.3",
- "svelte-virtual-scroll-list": "^1.3.0",
"sveltekit-i18n": "^2.4.2",
"tailwind-scrollbar": "^4.0.2",
"tailwindcss": "^4.1.18",
diff --git a/src/components/Account.svelte b/src/components/Account.svelte
index 7c231219..12fa8100 100644
--- a/src/components/Account.svelte
+++ b/src/components/Account.svelte
@@ -7,7 +7,6 @@
import Icon from "$comp/Icon.svelte";
import Balance from "$comp/Balance.svelte";
import { t } from "$lib/translations";
- import { decrypt } from "nostr-tools/nip49";
import { arkkey } from "$lib/ark";
let { user, rate, account, last } = $props();
@@ -43,7 +42,8 @@
}
};
- let submitPassword = () => {
+ let submitPassword = async () => {
+ const { decrypt } = await import("nostr-tools/nip49");
$arkkey = hex.encode(decrypt(seed, password));
passwordPrompt = false;
if (pendingUrl) {
diff --git a/src/components/AppForm.svelte b/src/components/AppForm.svelte
index f5b8afaa..f9491f38 100644
--- a/src/components/AppForm.svelte
+++ b/src/components/AppForm.svelte
@@ -5,7 +5,6 @@
import AmountField from "$comp/AmountField.svelte";
import Numpad from "$comp/Numpad.svelte";
import Toggle from "$comp/Toggle.svelte";
- import { getPublicKey } from "nostr-tools";
import { onMount, tick } from "svelte";
import { bytesToHex, randomBytes } from "@noble/hashes/utils.js";
import { goto } from "$app/navigation";
@@ -35,8 +34,9 @@
if (!budget_renewal) budget_renewal = "never";
});
- let generate = () => {
+ let generate = async () => {
secret = bytesToHex(randomBytes(32));
+ const { getPublicKey } = await import("nostr-tools");
pubkey = getPublicKey(secret);
};
diff --git a/src/components/LocationsMap.svelte b/src/components/LocationsMap.svelte
index 5de5ac56..eec704a8 100644
--- a/src/components/LocationsMap.svelte
+++ b/src/components/LocationsMap.svelte
@@ -4,8 +4,6 @@
import Popup from "$comp/Popup.svelte";
import { back } from "$lib/utils";
- import "maplibre-gl/dist/maplibre-gl.css";
-
let { locations } = $props();
let map;
let mapContainer = $state(),
@@ -172,10 +170,46 @@
let locationMarkers = {};
let popups = {};
let counter = 0;
+ let maplibrePromise;
+
+ const loadMaplibre = async () => {
+ if (window.maplibregl) return window.maplibregl;
+ if (maplibrePromise) return maplibrePromise;
+
+ maplibrePromise = new Promise((resolve, reject) => {
+ const existing = document.querySelector("script[data-maplibre]");
+ if (existing) {
+ if (window.maplibregl) return resolve(window.maplibregl);
+ existing.addEventListener("load", () => resolve(window.maplibregl));
+ existing.addEventListener("error", reject);
+ return;
+ }
+
+ const css = document.createElement("link");
+ css.rel = "stylesheet";
+ css.href =
+ "https://unpkg.com/[email protected]/dist/maplibre-gl.css";
+ document.head.appendChild(css);
+
+ const script = document.createElement("script");
+ script.src =
+ "https://unpkg.com/[email protected]/dist/maplibre-gl.js";
+ script.async = true;
+ script.defer = true;
+ script.dataset.maplibre = "true";
+ script.onload = () => resolve(window.maplibregl);
+ script.onerror = reject;
+ document.head.appendChild(script);
+ });
+
+ return maplibrePromise;
+ };
- onMount(() => {
+ onMount(async () => {
if (browser) {
- import("maplibre-gl").then(({ default: maplibre }) => {
+ await tick();
+ if (!mapContainer) return;
+ loadMaplibre().then((maplibre) => {
map = new maplibre.Map({
container: mapContainer,
style: "https://tiles.stadiamaps.com/styles/stamen_toner.json",
diff --git a/src/components/Nostr.svelte b/src/components/Nostr.svelte
index fc85100c..4f45da9f 100644
--- a/src/components/Nostr.svelte
+++ b/src/components/Nostr.svelte
@@ -40,6 +40,11 @@
let connectUrl = $state();
let nostrConnect = async () => {
+ const { Relay } = await import("nostr-tools/relay");
+ const { nip04, generateSecretKey, getPublicKey } = await import(
+ "nostr-tools"
+ );
+ const { getConversationKey, decrypt } = await import("nostr-tools/nip44");
let connectionSecret = crypto.randomUUID();
let sk = generateSecretKey();
@@ -89,6 +94,7 @@
};
let nsecSign = async () => {
+ const { nip19, getPublicKey } = await import("nostr-tools");
let sk;
if (nsec.startsWith("nsec")) sk = nip19.decode(nsec).data as Uint8Array;
else sk = hexToBytes(nsec);
diff --git a/src/components/Slider.svelte b/src/components/Slider.svelte
index 401b415a..5b1573f7 100644
--- a/src/components/Slider.svelte
+++ b/src/components/Slider.svelte
@@ -15,8 +15,7 @@
{min}
{max}
bind:value
- class="range"
+ class="range w-full"
oninput={handle}
/>
-
diff --git a/src/components/Success.svelte b/src/components/Success.svelte
index b2e126b3..d7561081 100644
--- a/src/components/Success.svelte
+++ b/src/components/Success.svelte
@@ -2,9 +2,9 @@
import { browser } from "$app/environment";
import { scale } from "svelte/transition";
import Amount from "$comp/Amount.svelte";
- import { Confetti } from "svelte-confetti";
const { amount, tip, rate, currency, locale, title } = $props();
+ let ConfettiComp = $state(null);
let loaded = $state(false);
$effect(() => {
if (browser)
@@ -12,38 +12,46 @@
loaded = true;
});
});
+
+ $effect(async () => {
+ if (!browser || !loaded || ConfettiComp) return;
+ const mod = await import("svelte-confetti");
+ ConfettiComp = mod.Confetti;
+ });
</script>
<div class="text-center mt-20 md:mt-0">
{#if loaded}
<div class="relative flex justify-center">
<div class="absolute top-64 pointer-events-none">
- <Confetti
- amount="20"
- size="40"
- duration="1600"
- delay={[0, 500]}
- fallDistance="50px"
- colorArray={["url(/images/bolt.svg)"]}
- />
- <Confetti
- amount="40"
- delay={[0, 500]}
- size="15"
- fallDistance="50px"
- duration="1600"
- colorArray={[
- "#FFD700", // Gold
- "#FF6F61", // Coral
- "#6BCB77", // Mint green
- "#4D96FF", // Light blue
- "#FF9CEE", // Light pink
- "#FFD580", // Soft orange
- "#87CEEB", // Sky blue
- "#FFB6C1", // Light coral pink
- "#C1C7FF", // Lavender
- ]}
- />
+ {#if ConfettiComp}
+ <ConfettiComp
+ amount="20"
+ size="40"
+ duration="1600"
+ delay={[0, 500]}
+ fallDistance="50px"
+ colorArray={["url(/images/bolt.svg)"]}
+ />
+ <ConfettiComp
+ amount="40"
+ delay={[0, 500]}
+ size="15"
+ fallDistance="50px"
+ duration="1600"
+ colorArray={[
+ "#FFD700", // Gold
+ "#FF6F61", // Coral
+ "#6BCB77", // Mint green
+ "#4D96FF", // Light blue
+ "#FF9CEE", // Light pink
+ "#FFD580", // Soft orange
+ "#87CEEB", // Sky blue
+ "#FFB6C1", // Light coral pink
+ "#C1C7FF", // Lavender
+ ]}
+ />
+ {/if}
</div>
</div>
diff --git a/src/lib/ark.ts b/src/lib/ark.ts
index b1098ee3..d0f16d78 100644
--- a/src/lib/ark.ts
+++ b/src/lib/ark.ts
@@ -1,14 +1,17 @@
import { persistLocal } from "$lib/store";
import { post } from "$lib/utils";
-import { SingleKey, Wallet } from "@arkade-os/sdk";
import { get } from "svelte/store";
export const arkServerUrl = "http://localhost:7070";
export const arkkey = persistLocal("arkkey", "");
+let arkSdkPromise: Promise<typeof import("@arkade-os/sdk")> | undefined;
+const loadArkSdk = () => (arkSdkPromise ||= import("@arkade-os/sdk"));
+
export const getWallet = async () => {
const key = get(arkkey);
if (!key) return;
+ const { SingleKey, Wallet } = await loadArkSdk();
const identity = SingleKey.fromHex(key);
return Wallet.create({
diff --git a/src/lib/nostr.ts b/src/lib/nostr.ts
index 6343bc9e..85c90051 100644
--- a/src/lib/nostr.ts
+++ b/src/lib/nostr.ts
@@ -21,10 +21,18 @@ import { decrypt as nip44decrypt, getConversationKey } from "nostr-tools/nip44";
import { Relay } from "nostr-tools/relay";
import { get } from "svelte/store";
-import {
- decrypt as nip49decrypt,
- encrypt as nip49encrypt,
-} from "nostr-tools/nip49";
+let nostrToolsPromise:
+ | Promise<typeof import("nostr-tools")>
+ | undefined;
+let nip44Promise: Promise<typeof import("nostr-tools/nip44")> | undefined;
+let relayPromise: Promise<typeof import("nostr-tools/relay")> | undefined;
+let nip49Promise: Promise<typeof import("nostr-tools/nip49")> | undefined;
+
+const loadNostrTools = () =>
+ (nostrToolsPromise ||= import("nostr-tools"));
+const loadNip44 = () => (nip44Promise ||= import("nostr-tools/nip44"));
+const loadRelay = () => (relayPromise ||= import("nostr-tools/relay"));
+const loadNip49 = () => (nip49Promise ||= import("nostr-tools/nip49"));
type User = {
[key: string]: any;
@@ -38,6 +46,7 @@ type EncryptParams = {
export const encrypt = async ({ message, recipient, user }: EncryptParams) => {
const sk = await getPrivateKey(user);
+ const { nip04 } = await loadNostrTools();
return nip04.encrypt(sk, recipient, message);
};
@@ -48,6 +57,7 @@ export const decrypt = async ({ event, user }) => {
if (cache[id]) return cache[id];
if (pubkey === user.pubkey) pubkey = event.tags[0][1];
+ const { nip04 } = await loadNostrTools();
const message = await nip04.decrypt(
await getPrivateKey(user),
pubkey,
@@ -68,6 +78,7 @@ export const getPrivateKey = async (user: User): Promise<Uint8Array> => {
if (browser) {
k = localStorage.getItem("nsec");
if (k) {
+ const { nip19 } = await loadNostrTools();
return nip19.decode(k).data as Uint8Array;
}
}
@@ -75,38 +86,45 @@ export const getPrivateKey = async (user: User): Promise<Uint8Array> => {
const { nsec } = user;
if (nsec) {
+ const { decrypt: nip49decrypt } = await loadNip49();
k = nip49decrypt(nsec, await getPassword());
} else {
throw new Error("nsec not available");
}
+ const { nip19 } = await loadNostrTools();
localStorage.setItem("nsec", nip19.nsecEncode(k));
return k;
};
-const decodeNsec = (nsec: string): Uint8Array => {
+const decodeNsec = async (nsec: string): Promise<Uint8Array> => {
+ const { nip19 } = await loadNostrTools();
const { type, data } = nip19.decode(nsec);
if (type === "nsec" && data instanceof Uint8Array) return data;
throw new Error("invalid nsec");
};
export const getNsec = async (user: User) => {
+ const { nip19 } = await loadNostrTools();
return nip19.nsecEncode(await getPrivateKey(user));
};
export const setNsec = async (user: User, nsec: string) => {
- user.pubkey = getPublicKey(decodeNsec(nsec));
+ const { getPublicKey } = await loadNostrTools();
+ user.pubkey = getPublicKey(await decodeNsec(nsec));
user.nsec = await encryptNsec(nsec);
};
export const encryptNsec = async (nsec: string) => {
- const d = decodeNsec(nsec);
+ const { encrypt: nip49encrypt } = await loadNip49();
+ const d = await decodeNsec(nsec);
return nip49encrypt(d, await getPassword());
};
export const sign = async (event, user) => {
if (user?.nsec && !get($signer)?.ready) {
const sk = await getPrivateKey(user);
+ const { getPublicKey } = await loadNostrTools();
$signer.set({
method: "nsec",
@@ -154,6 +172,7 @@ const signingMethods = {
params: [JSON.stringify(event)],
};
+ const { nip04, finalizeEvent } = await loadNostrTools();
const content = await nip04.encrypt(sk, pk, JSON.stringify(signEvent));
const signedSignEvent = finalizeEvent(
@@ -167,6 +186,7 @@ const signingMethods = {
sk,
);
+ const { Relay } = await loadRelay();
const relay = await Relay.connect(nostrConnectRelay);
relay.publish(signedSignEvent);
@@ -177,8 +197,11 @@ const signingMethods = {
try {
let response;
try {
+ const { nip04 } = await loadNostrTools();
response = JSON.parse(await nip04.decrypt(sk, pk, event.content));
} catch (e) {
+ const { getConversationKey, decrypt: nip44decrypt } =
+ await loadNip44();
const ck = await getConversationKey(sk, pk);
response = JSON.parse(await nip44decrypt(event.content, ck));
}
@@ -193,6 +216,7 @@ const signingMethods = {
},
async nsec(event, { sk }) {
+ const { finalizeEvent } = await loadNostrTools();
return finalizeEvent(event, sk);
},
@@ -202,6 +226,7 @@ const signingMethods = {
async signer(event, { pubkey, sig }) {
event.pubkey = pubkey;
+ const { getEventHash } = await loadNostrTools();
const signedEvent = {
...event,
id: getEventHash(event),
diff --git a/src/lib/parse.ts b/src/lib/parse.ts
index bbcab429..8520c27a 100644
--- a/src/lib/parse.ts
+++ b/src/lib/parse.ts
@@ -2,7 +2,12 @@ import { PUBLIC_DOMAIN } from "$env/static/public";
import { decode } from "$lib/bip21";
import { auth, get, isLiquid, post, sats } from "$lib/utils";
import { redirect } from "@sveltejs/kit";
-import { validate } from "bitcoin-address-validation";
+
+let validatePromise:
+ | Promise<typeof import("bitcoin-address-validation")>
+ | undefined;
+const loadValidate = () =>
+ (validatePromise ||= import("bitcoin-address-validation"));
export default async (s, host, cookies) => {
if (!s) return;
@@ -49,6 +54,7 @@ export default async (s, host, cookies) => {
} = decode(t));
}
+ const { validate } = await loadValidate();
if (validate(t) || isLiquid(t)) {
let r = `/send/bitcoin/${t}`;
if (amount) r += `/${Math.round(amount * sats)}`;
diff --git a/src/lib/utils.ts b/src/lib/utils.ts
index d3333280..33737b50 100644
--- a/src/lib/utils.ts
+++ b/src/lib/utils.ts
@@ -11,7 +11,6 @@ import {
differenceInMinutes,
differenceInSeconds,
} from "date-fns";
-import { decrypt } from "nostr-tools/nip49";
import { get as getStore } from "svelte/store";
export function scroll(section: any) {
@@ -207,6 +206,7 @@ export const login = async (
cookies.set("token", token, opts);
if (u.nsec) {
try {
+ const { decrypt } = await import("nostr-tools/nip49");
cookies.set("sk", bytesToHex(decrypt(u.nsec, user.password)), {
...opts,
httpOnly: false,
diff --git a/src/routes/(app)/account/[id]/+page.svelte b/src/routes/(app)/account/[id]/+page.svelte
index 258912d6..bda81cbc 100644
--- a/src/routes/(app)/account/[id]/+page.svelte
+++ b/src/routes/(app)/account/[id]/+page.svelte
@@ -6,7 +6,6 @@
import { copy, fail, focus, post } from "$lib/utils";
import { enhance } from "$app/forms";
import { t } from "$lib/translations";
- import { decrypt } from "nostr-tools/nip49";
import { entropyToMnemonic, mnemonicToSeed } from "@scure/bip39";
import { wordlist } from "@scure/bip39/wordlists/english.js";
import {
@@ -27,6 +26,7 @@
let submit = $state(async () => {
toggle();
+ const { decrypt } = await import("nostr-tools/nip49");
let entropy = await decrypt(seed, password);
mnemonic = entropyToMnemonic(entropy, wordlist);
});
diff --git a/src/routes/(app)/account/ark/+page.svelte b/src/routes/(app)/account/ark/+page.svelte
index 4036d140..6d16556c 100644
--- a/src/routes/(app)/account/ark/+page.svelte
+++ b/src/routes/(app)/account/ark/+page.svelte
@@ -3,13 +3,10 @@
import { tick, onMount } from "svelte";
import { t } from "$lib/translations";
import Spinner from "$comp/Spinner.svelte";
- import { encrypt } from "nostr-tools/nip49";
import { bytesToHex, randomBytes } from "@noble/hashes/utils";
- import { nip19 } from "nostr-tools";
import { hex } from "@scure/base";
import { focus, fail, post, copy } from "$lib/utils";
import { goto } from "$app/navigation";
- import { SingleKey, Wallet } from "@arkade-os/sdk";
import { arkServerUrl } from "$lib/ark";
let { data } = $props();
@@ -35,6 +32,8 @@
});
let generateKey = async () => {
+ const { nip19 } = await import("nostr-tools");
+ const { SingleKey, Wallet } = await import("@arkade-os/sdk");
privateKey = bytesToHex(randomBytes(32));
nsec = nip19.nsecEncode(hex.decode(privateKey));
showNsec = false;
@@ -70,6 +69,7 @@
try {
// Encrypt the private key using NIP-49
+ const { encrypt } = await import("nostr-tools/nip49");
let seed = await encrypt(hex.decode(privateKey), password);
await post("/account", { name, seed, type, arkAddress });
diff --git a/src/routes/(app)/account/pass/+page.svelte b/src/routes/(app)/account/pass/+page.svelte
index 7de18184..5e681033 100644
--- a/src/routes/(app)/account/pass/+page.svelte
+++ b/src/routes/(app)/account/pass/+page.svelte
@@ -5,7 +5,6 @@
import { t } from "$lib/translations";
import { mnemonic } from "$lib/store";
import Spinner from "$comp/Spinner.svelte";
- import { encrypt } from "nostr-tools/nip49";
import {
mnemonicToSeed,
mnemonicToEntropy,
@@ -41,6 +40,7 @@
}
try {
+ const { encrypt } = await import("nostr-tools/nip49");
let seed = await encrypt(
mnemonicToEntropy($mnemonic, wordlist),
password,
diff --git a/src/routes/(app)/firehose/+page.svelte b/src/routes/(app)/firehose/+page.svelte
index 1cf2324e..d56e6425 100644
--- a/src/routes/(app)/firehose/+page.svelte
+++ b/src/routes/(app)/firehose/+page.svelte
@@ -2,7 +2,6 @@
import Event from "$comp/Event.svelte";
import { get, post } from "$lib/utils";
import { onMount } from "svelte";
- import { Relay } from "nostr-tools/relay";
import { ignore } from "$lib/store";
let events = $state([]);
@@ -19,6 +18,7 @@
};
onMount(async () => {
+ const { Relay } = await import("nostr-tools/relay");
const relay = await Relay.connect("wss://relay.primal.net");
const subscription = relay.subscribe([{ kinds: [1], limit: 20 }], {
async onevent(event) {
diff --git a/src/routes/(app)/messages/[recipient]/+page.svelte b/src/routes/(app)/messages/[recipient]/+page.svelte
index 9c916d3d..b47f9089 100644
--- a/src/routes/(app)/messages/[recipient]/+page.svelte
+++ b/src/routes/(app)/messages/[recipient]/+page.svelte
@@ -13,7 +13,6 @@
import { sign, send, encrypt, decrypt } from "$lib/nostr";
import { event as e, password } from "$lib/store";
import { tick, onMount } from "svelte";
- import { getEventHash } from "nostr-tools";
let { data } = $props();
@@ -90,6 +89,7 @@
recipient: recipient.pubkey,
user,
});
+ const { getEventHash } = await import("nostr-tools");
event.id = getEventHash(event);
await sign(event);
await send(event);
diff --git a/src/routes/(app)/pos/+page.svelte b/src/routes/(app)/pos/+page.svelte
index 2a072f5a..199cef43 100644
--- a/src/routes/(app)/pos/+page.svelte
+++ b/src/routes/(app)/pos/+page.svelte
@@ -1,6 +1,5 @@
<script>
import { enhance } from "$app/forms";
- import { ESPLoader, Transport } from "esptool-js";
import { hex } from "@scure/base";
// Convert Uint8Array → JS "binary string" in safe chunks
@@ -28,6 +27,8 @@
let chip, transport;
let connected = $state(false);
let portInfo = $state("");
+ let ESPLoader;
+ let Transport;
// --- Existing config path (generated server-side to hex in form.bytes) ---
let bytes = $derived(form ? hex.decode(form.bytes) : undefined);
@@ -49,6 +50,9 @@
let connect = async () => {
try {
+ if (!ESPLoader || !Transport) {
+ ({ ESPLoader, Transport } = await import("esptool-js"));
+ }
const device = await navigator.serial.requestPort({});
transport = new Transport(device, true);
esploader = new ESPLoader({
diff --git a/src/routes/(app)/printer/+page.svelte b/src/routes/(app)/printer/+page.svelte
index c1e6ee82..c9295a54 100644
--- a/src/routes/(app)/printer/+page.svelte
+++ b/src/routes/(app)/printer/+page.svelte
@@ -1,6 +1,5 @@
<script>
import { enhance } from "$app/forms";
- import { ESPLoader, Transport } from "esptool-js";
import { hex } from "@scure/base";
function bs(uint8Array) {
@@ -29,9 +28,14 @@
let data = $derived(form ? hex.decode(form.data) : undefined);
let chip, transport;
+ let ESPLoader;
+ let Transport;
// let data = $state();
let connect = async () => {
try {
+ if (!ESPLoader || !Transport) {
+ ({ ESPLoader, Transport } = await import("esptool-js"));
+ }
let device = await navigator.serial.requestPort({});
transport = new Transport(device, true);
diff --git a/src/routes/(app)/scan/+page.svelte b/src/routes/(app)/scan/+page.svelte
index b21a7458..655346c8 100644
--- a/src/routes/(app)/scan/+page.svelte
+++ b/src/routes/(app)/scan/+page.svelte
@@ -1,15 +1,15 @@
<script>
import { tick } from "svelte";
import Icon from "$comp/Icon.svelte";
- import QrScanner from "qr-scanner";
import { onMount, onDestroy } from "svelte";
import { back } from "$lib/utils";
import { goto } from "$app/navigation";
- import { BarcodeDetector } from "barcode-detector/ponyfill";
let scanner,
vid = $state(),
resizing;
+ let QrScanner;
+ let BarcodeDetector;
let resize = () => {
if (resizing) clearTimeout(resizing);
@@ -17,6 +17,12 @@
};
let initialize = async () => {
+ if (!QrScanner) {
+ ({ default: QrScanner } = await import("qr-scanner"));
+ }
+ if (!BarcodeDetector) {
+ ({ BarcodeDetector } = await import("barcode-detector/ponyfill"));
+ }
if (scanner) {
scanner.stop();
await new Promise((r) => setTimeout(r, 1000));
diff --git a/src/routes/(app)/send/bitcoin/[address]/[amount]/[...feeRate]/+page.svelte b/src/routes/(app)/send/bitcoin/[address]/[amount]/[...feeRate]/+page.svelte
index ac904304..70e68c79 100644
--- a/src/routes/(app)/send/bitcoin/[address]/[amount]/[...feeRate]/+page.svelte
+++ b/src/routes/(app)/send/bitcoin/[address]/[amount]/[...feeRate]/+page.svelte
@@ -42,13 +42,25 @@
};
let signTx = async () => {
+ const { decrypt } = await import("nostr-tools/nip49");
+ const [
+ { Transaction },
+ { HDKey },
+ { entropyToMnemonic, mnemonicToSeed },
+ { wordlist },
+ ] = await Promise.all([
+ import("@scure/btc-signer"),
+ import("@scure/bip32"),
+ import("@scure/bip39"),
+ import("@scure/bip39/wordlists/english"),
+ ]);
let entropy = await decrypt(account.seed, password);
let mnemonic = entropyToMnemonic(entropy, wordlist);
let seed = await mnemonicToSeed(mnemonic, password);
let master = HDKey.fromMasterSeed(seed, network);
let child = master.derive("m/84'/0'/0'");
- let tx = btc.Transaction.fromRaw(decode(hex));
+ let tx = Transaction.fromRaw(decode(hex));
for (let [i, input] of tx.inputs.entries()) {
let { witnessUtxo, path } = inputs[i];
diff --git a/vite.config.js b/vite.config.js
index 32732454..e54ff9b1 100644
--- a/vite.config.js
+++ b/vite.config.js
@@ -1,10 +1,23 @@
import { sveltekit } from "@sveltejs/kit/vite";
import tailwindcss from "@tailwindcss/vite";
-
+import { visualizer } from "rollup-plugin-visualizer";
import { defineConfig } from "vite";
-export default defineConfig({
- plugins: [tailwindcss({ optimize: false }), sveltekit()],
+export default defineConfig(() => {
+ const analyze = process.env.ANALYZE === "true";
+
+ return {
+ plugins: [
+ tailwindcss({ optimize: false }),
+ sveltekit(),
+ analyze &&
+ visualizer({
+ filename: "build/stats.html",
+ gzipSize: true,
+ brotliSize: true,
+ template: "treemap",
+ }),
+ ].filter(Boolean),
css: {
transformer: "postcss",
},
@@ -26,21 +39,22 @@ export default defineConfig({
}
: undefined,
},
- build: {
- cssMinify: "esbuild",
- chunkSizeWarningLimit: 1000,
- rollupOptions: {
- output: {
- manualChunks(id) {
- if (id.includes("node_modules")) {
- const parts = id.split("node_modules/")[1].split("/");
- const pkg = parts[0].startsWith("@")
- ? `${parts[0]}/${parts[1]}`
- : parts[0];
- return `vendor-${pkg}`;
- }
+ build: {
+ cssMinify: "esbuild",
+ chunkSizeWarningLimit: 1000,
+ rollupOptions: {
+ output: {
+ manualChunks(id) {
+ if (id.includes("node_modules")) {
+ const parts = id.split("node_modules/")[1].split("/");
+ const pkg = parts[0].startsWith("@")
+ ? `${parts[0]}/${parts[1]}`
+ : parts[0];
+ return `vendor-${pkg}`;
+ }
+ },
},
},
},
- },
+ };
});