feat: only query from local database and other improvements

This commit is contained in:
reya 2024-10-09 09:15:49 +07:00
parent c40762cc04
commit 106c627ec4
11 changed files with 508 additions and 397 deletions

View File

@ -21,10 +21,10 @@
"@radix-ui/react-tooltip": "^1.1.3",
"@tanstack/query-persist-client-core": "^5.59.0",
"@tanstack/react-query": "^5.59.0",
"@tanstack/react-router": "^1.58.16",
"@tanstack/react-router": "^1.63.5",
"@tanstack/react-store": "^0.5.5",
"@tanstack/store": "^0.5.5",
"@tauri-apps/api": "^2.0.1",
"@tauri-apps/api": "^2.0.2",
"@tauri-apps/plugin-clipboard-manager": "^2.0.0",
"@tauri-apps/plugin-dialog": "^2.0.0",
"@tauri-apps/plugin-fs": "^2.0.0",
@ -39,7 +39,7 @@
"bitcoin-units": "^1.0.0",
"dayjs": "^1.11.13",
"embla-carousel-react": "^8.3.0",
"i18next": "^23.15.1",
"i18next": "^23.15.2",
"i18next-resources-to-backend": "^1.2.1",
"light-bolt11-decoder": "^3.2.0",
"minidenticons": "^4.2.1",
@ -60,9 +60,9 @@
"@evilmartians/harmony": "^1.2.0",
"@tailwindcss/forms": "^0.5.9",
"@tailwindcss/typography": "^0.5.15",
"@tanstack/router-devtools": "^1.58.16",
"@tanstack/router-plugin": "^1.58.12",
"@tauri-apps/cli": "^2.0.0",
"@tanstack/router-devtools": "^1.63.5",
"@tanstack/router-plugin": "^1.63.5",
"@tauri-apps/cli": "^2.0.2",
"@types/react": "npm:types-react@19.0.0-rc.1",
"@types/react-dom": "npm:types-react-dom@19.0.0-rc.1",
"@vitejs/plugin-react": "^4.3.2",
@ -71,11 +71,11 @@
"clsx": "^2.1.1",
"postcss": "^8.4.47",
"tailwind-gradient-mask-image": "^1.2.0",
"tailwind-merge": "^2.5.2",
"tailwind-merge": "^2.5.3",
"tailwind-scrollbar": "^3.1.0",
"tailwindcss": "^3.4.13",
"tailwindcss-content-visibility": "^1.0.0",
"typescript": "^5.6.2",
"typescript": "^5.6.3",
"vite": "^5.4.8",
"vite-tsconfig-paths": "^5.0.1"
},

272
pnpm-lock.yaml generated
View File

@ -10,7 +10,7 @@ importers:
dependencies:
'@getalby/bitcoin-connect-react':
specifier: ^3.6.2
version: 3.6.2(immer@10.1.1)(react@19.0.0-rc-d025ddd3-20240722)(types-react@19.0.0-rc.1)(typescript@5.6.2)
version: 3.6.2(immer@10.1.1)(react@19.0.0-rc-d025ddd3-20240722)(types-react@19.0.0-rc.1)(typescript@5.6.3)
'@phosphor-icons/react':
specifier: ^2.1.7
version: 2.1.7(react-dom@19.0.0-rc-d025ddd3-20240722(react@19.0.0-rc-d025ddd3-20240722))(react@19.0.0-rc-d025ddd3-20240722)
@ -42,8 +42,8 @@ importers:
specifier: ^5.59.0
version: 5.59.0(react@19.0.0-rc-d025ddd3-20240722)
'@tanstack/react-router':
specifier: ^1.58.16
version: 1.58.16(@tanstack/router-generator@1.58.12)(react-dom@19.0.0-rc-d025ddd3-20240722(react@19.0.0-rc-d025ddd3-20240722))(react@19.0.0-rc-d025ddd3-20240722)
specifier: ^1.63.5
version: 1.63.5(@tanstack/router-generator@1.63.5)(react-dom@19.0.0-rc-d025ddd3-20240722(react@19.0.0-rc-d025ddd3-20240722))(react@19.0.0-rc-d025ddd3-20240722)
'@tanstack/react-store':
specifier: ^0.5.5
version: 0.5.5(react-dom@19.0.0-rc-d025ddd3-20240722(react@19.0.0-rc-d025ddd3-20240722))(react@19.0.0-rc-d025ddd3-20240722)
@ -51,8 +51,8 @@ importers:
specifier: ^0.5.5
version: 0.5.5
'@tauri-apps/api':
specifier: ^2.0.1
version: 2.0.1
specifier: ^2.0.2
version: 2.0.2
'@tauri-apps/plugin-clipboard-manager':
specifier: ^2.0.0
version: 2.0.0
@ -96,8 +96,8 @@ importers:
specifier: ^8.3.0
version: 8.3.0(react@19.0.0-rc-d025ddd3-20240722)
i18next:
specifier: ^23.15.1
version: 23.15.1
specifier: ^23.15.2
version: 23.15.2
i18next-resources-to-backend:
specifier: ^1.2.1
version: 1.2.1
@ -112,7 +112,7 @@ importers:
version: 5.0.7
nostr-tools:
specifier: ^2.7.2
version: 2.7.2(typescript@5.6.2)
version: 2.7.2(typescript@5.6.3)
react:
specifier: 19.0.0-rc-d025ddd3-20240722
version: 19.0.0-rc-d025ddd3-20240722
@ -127,7 +127,7 @@ importers:
version: 7.53.0(react@19.0.0-rc-d025ddd3-20240722)
react-i18next:
specifier: ^15.0.2
version: 15.0.2(i18next@23.15.1)(react-dom@19.0.0-rc-d025ddd3-20240722(react@19.0.0-rc-d025ddd3-20240722))(react@19.0.0-rc-d025ddd3-20240722)
version: 15.0.2(i18next@23.15.2)(react-dom@19.0.0-rc-d025ddd3-20240722(react@19.0.0-rc-d025ddd3-20240722))(react@19.0.0-rc-d025ddd3-20240722)
react-string-replace:
specifier: ^1.1.1
version: 1.1.1
@ -154,14 +154,14 @@ importers:
specifier: ^0.5.15
version: 0.5.15(tailwindcss@3.4.13)
'@tanstack/router-devtools':
specifier: ^1.58.16
version: 1.58.16(@tanstack/react-router@1.58.16(@tanstack/router-generator@1.58.12)(react-dom@19.0.0-rc-d025ddd3-20240722(react@19.0.0-rc-d025ddd3-20240722))(react@19.0.0-rc-d025ddd3-20240722))(csstype@3.1.3)(react-dom@19.0.0-rc-d025ddd3-20240722(react@19.0.0-rc-d025ddd3-20240722))(react@19.0.0-rc-d025ddd3-20240722)
specifier: ^1.63.5
version: 1.63.5(@tanstack/react-router@1.63.5(@tanstack/router-generator@1.63.5)(react-dom@19.0.0-rc-d025ddd3-20240722(react@19.0.0-rc-d025ddd3-20240722))(react@19.0.0-rc-d025ddd3-20240722))(csstype@3.1.3)(react-dom@19.0.0-rc-d025ddd3-20240722(react@19.0.0-rc-d025ddd3-20240722))(react@19.0.0-rc-d025ddd3-20240722)
'@tanstack/router-plugin':
specifier: ^1.58.12
version: 1.58.12(vite@5.4.8)(webpack-sources@3.2.3)
specifier: ^1.63.5
version: 1.63.5(vite@5.4.8)(webpack-sources@3.2.3)
'@tauri-apps/cli':
specifier: ^2.0.0
version: 2.0.0
specifier: ^2.0.2
version: 2.0.2
'@types/react':
specifier: npm:types-react@19.0.0-rc.1
version: types-react@19.0.0-rc.1
@ -187,8 +187,8 @@ importers:
specifier: ^1.2.0
version: 1.2.0
tailwind-merge:
specifier: ^2.5.2
version: 2.5.2
specifier: ^2.5.3
version: 2.5.3
tailwind-scrollbar:
specifier: ^3.1.0
version: 3.1.0(tailwindcss@3.4.13)
@ -199,14 +199,14 @@ importers:
specifier: ^1.0.0
version: 1.0.0(tailwindcss@3.4.13)
typescript:
specifier: ^5.6.2
version: 5.6.2
specifier: ^5.6.3
version: 5.6.3
vite:
specifier: ^5.4.8
version: 5.4.8
vite-tsconfig-paths:
specifier: ^5.0.1
version: 5.0.1(typescript@5.6.2)(vite@5.4.8)
version: 5.0.1(typescript@5.6.3)(vite@5.4.8)
packages:
@ -1223,8 +1223,8 @@ packages:
peerDependencies:
tailwindcss: '>=3.0.0 || insiders || >=4.0.0-alpha.20'
'@tanstack/history@1.58.15':
resolution: {integrity: sha512-M36Ke2Q2v8Iv4Cx0xw04iVkixuOligiFLOifH35DqGnzXe9PAtTHIooieQowqYkAjC09KuLo5j6sgvwKTZ+U5Q==}
'@tanstack/history@1.61.1':
resolution: {integrity: sha512-2CqERleeqO3hkhJmyJm37tiL3LYgeOpmo8szqdjgtnnG0z7ZpvzkZz6HkfOr9Ca/ha7mhAiouSvLYuLkM37AMg==}
engines: {node: '>=12'}
'@tanstack/query-core@5.59.0':
@ -1238,11 +1238,11 @@ packages:
peerDependencies:
react: ^18 || ^19
'@tanstack/react-router@1.58.16':
resolution: {integrity: sha512-3kRTNNI+xgpXHhpI5xMw/S0/6ff23k2ubKvkf0LPv1X4B/WzctnH1nfFPpQq9DK0HBtgG8TIk7+gIJx0mV8KOA==}
'@tanstack/react-router@1.63.5':
resolution: {integrity: sha512-478jbiHNLcS6K1G8YNZ1tzpdh07GjUr0b3IP9bqaFhHIDChDviyGvA/fq+zhcTITBSgU3+LgCAwRWt05hp961w==}
engines: {node: '>=12'}
peerDependencies:
'@tanstack/router-generator': 1.58.12
'@tanstack/router-generator': 1.63.5
react: '>=18'
react-dom: '>=18'
peerDependenciesMeta:
@ -1255,20 +1255,20 @@ packages:
react: ^17.0.0 || ^18.0.0
react-dom: ^17.0.0 || ^18.0.0
'@tanstack/router-devtools@1.58.16':
resolution: {integrity: sha512-dpAfsTdeABqRdZyDaKbNNfQKEE29evX3G/YspUNzSxGwVQH1mMgliUJoNQe/J3EEPSlJFaRVBJ25SrwfE685OQ==}
'@tanstack/router-devtools@1.63.5':
resolution: {integrity: sha512-kG3ei8q7XVKOE60eniK3Dn5NDiRjs0KrktM4Av8tlgIFd/89BLiXkMnYqWlDd2fp7yxmEiX3GiQv7pNedfaMiA==}
engines: {node: '>=12'}
peerDependencies:
'@tanstack/react-router': ^1.58.16
'@tanstack/react-router': ^1.63.5
react: '>=18'
react-dom: '>=18'
'@tanstack/router-generator@1.58.12':
resolution: {integrity: sha512-Ovzb+zCbiRgJAg6awTXWQjn1uRkVyiBc4jiIk7ll2hg0bHjIOsgiegwx/F2YKycY98vWj9TLv/U4Hoo4rmK0IA==}
'@tanstack/router-generator@1.63.5':
resolution: {integrity: sha512-vhSlnztluTFqnGMN4lFJFpCYtW1jUlFW6hBl93/QlV03mbtAwBTpPT/BkGk3wZkvsUMgDP86tCyu1ytQDZwi3w==}
engines: {node: '>=12'}
'@tanstack/router-plugin@1.58.12':
resolution: {integrity: sha512-WVR5UupNcvj7lvCrle7CrmHm6aezTG98g3N81oNPaCS0U3cEUaUiNqna0cWk4M4WuzAzUbpbQ81xBapIMc8Thw==}
'@tanstack/router-plugin@1.63.5':
resolution: {integrity: sha512-PdGy1iHCkYp8Kj7m0uFRsKYPzy+V8QQNHXuXB9mxcKx5I+hgkqWkEu5gtvrunjemsaxxp7duvKJ3/tC8C4k/ZQ==}
engines: {node: '>=12'}
peerDependencies:
'@rsbuild/core': '>=1.0.2'
@ -1289,71 +1289,71 @@ packages:
resolution: {integrity: sha512-fBUj+lbSaw+VxoBN4J/WFE7dTx8x4XCTRAQvbiIyPJ8MY1KRVkdZV6cbLvg7MeDP6CxUcj6XNvWU6h0ic1Ipyg==}
engines: {node: '>=12'}
'@tauri-apps/api@2.0.1':
resolution: {integrity: sha512-eoQWT+Tq1qSwQpHV+nw1eNYe5B/nm1PoRjQCRiEOS12I1b+X4PUcREfXVX8dPcBT6GrzWGDtaecY0+1p0Rfqlw==}
'@tauri-apps/api@2.0.2':
resolution: {integrity: sha512-3wSwmG+1kr6WrgAFKK5ijkNFPp8TT3FLj3YHUb5EwMO+3FxX4uWlfSWkeeBy+Kc1RsKzugtYLuuya+98Flj+3w==}
'@tauri-apps/cli-darwin-arm64@2.0.0':
resolution: {integrity: sha512-+agYqg2c77imaMfKw7mzqecVIDGcwr6bZMdglJ808O2UjTFzMwnAam1sU26YBYU+IyIjwOu00fm9Azpal+N/Ew==}
'@tauri-apps/cli-darwin-arm64@2.0.2':
resolution: {integrity: sha512-B+/a8Q6wAqmB4A4HVeK0oQP5TdQGKW60ZLOI9O2ktH2HPr9ETr3XkwXPuJ2uAOuGEgtRZHBgFOIgG000vMnKlg==}
engines: {node: '>= 10'}
cpu: [arm64]
os: [darwin]
'@tauri-apps/cli-darwin-x64@2.0.0':
resolution: {integrity: sha512-keN2PLTTcZmbWwFMup/NGcshmvyLnhRPChO8lbm9C5a0IY7zUNQUD7/o/zIulQdLJqDxkdpWJ1j2jTycAtvtKQ==}
'@tauri-apps/cli-darwin-x64@2.0.2':
resolution: {integrity: sha512-kaurhn6XT4gAVCPAQSSHl/CHFxTS0ljc47N7iGTSlYJ03sCWPRZeNuVa/bn6rolz9MA2JfnRnFqB1pUL6jzp9Q==}
engines: {node: '>= 10'}
cpu: [x64]
os: [darwin]
'@tauri-apps/cli-linux-arm-gnueabihf@2.0.0':
resolution: {integrity: sha512-FQJNrlCUBb9E7Fhp5ARy+Or8lSvorG41aVrfi0cGNvv1QlIGSj77TN7SKK+L1jAGzKj1Bl2kCZIESF6Zi8N/+Q==}
'@tauri-apps/cli-linux-arm-gnueabihf@2.0.2':
resolution: {integrity: sha512-bVrofjlacMxmGMcqK18iBW05tsZXOd19/MnqruFFcHSVjvkGGIXHMtUbMXnZNXBPkHDsnfytNtkY9SZGfCFaBA==}
engines: {node: '>= 10'}
cpu: [arm]
os: [linux]
'@tauri-apps/cli-linux-arm64-gnu@2.0.0':
resolution: {integrity: sha512-TK3VrZG5LK1NGueKwnZA1/3gj/qkwry001MNCHXjT6394dwrDv+digCc9Qc569h+xeH/FF71jyoiRIu3gRE6iA==}
'@tauri-apps/cli-linux-arm64-gnu@2.0.2':
resolution: {integrity: sha512-7XCBn0TTBVQGnV42dXcbHPLg/9W8kJoVzuliIozvNGyRWxfXqDbQYzpI48HUQG3LgHMabcw8+pVZAfGhevLrCA==}
engines: {node: '>= 10'}
cpu: [arm64]
os: [linux]
'@tauri-apps/cli-linux-arm64-musl@2.0.0':
resolution: {integrity: sha512-E3hRmS/0m8YUYMTKZtBExpk/284CTi2nymks0dK0L1j+3KjffL7DiilnIfNFmTvWBgMrs0cVCtoaN/ba/A9mNA==}
'@tauri-apps/cli-linux-arm64-musl@2.0.2':
resolution: {integrity: sha512-1xi2SreGVlpAL68MCsDUY63rdItUdPZreXIAcOVqvUehcJRYOa1XGSBhrV0YXRgZeh0AtKC19z6PRzcv4rosZA==}
engines: {node: '>= 10'}
cpu: [arm64]
os: [linux]
'@tauri-apps/cli-linux-x64-gnu@2.0.0':
resolution: {integrity: sha512-veX4BJp5xnW8KmxVjchWt4oZEIvKGhuSR7qU1WpqTR21e/eTe/ksGsdXPsqOKQvv/w1X6jhqmlPvhnFmDwUJ/w==}
'@tauri-apps/cli-linux-x64-gnu@2.0.2':
resolution: {integrity: sha512-WVjwYzPWFqZVg1fx6KSU5w47Q0VbMyaCp34qs5EcS8EIU0/RnofdzqUoOYqvgGVgNgoz7Pj5dXK2SkS8BHXMmA==}
engines: {node: '>= 10'}
cpu: [x64]
os: [linux]
'@tauri-apps/cli-linux-x64-musl@2.0.0':
resolution: {integrity: sha512-9Eso/8wbsWbOyd9PZEIzN/48ZQJrUGQqGZtglcjUku0lO76mnX0fOnit4nQ57Oj0wezJPhv4mgSseG1OsTIVzw==}
'@tauri-apps/cli-linux-x64-musl@2.0.2':
resolution: {integrity: sha512-h5miE2mctgaQNn/BbG9o1pnJcrx+VGBi2A6JFqGu934lFgSV5+s28M8Gc8AF2JgFH4hQV4IuMkeSw8Chu5Dodg==}
engines: {node: '>= 10'}
cpu: [x64]
os: [linux]
'@tauri-apps/cli-win32-arm64-msvc@2.0.0':
resolution: {integrity: sha512-ky8vWAuDUf8WGt9+a0G/EbU0OhdIkogelh9qjIYGHbyEYAJqXfN5P40aHUEg3y8ngQ0YGwRX5ePsQsSZiiR5PQ==}
'@tauri-apps/cli-win32-arm64-msvc@2.0.2':
resolution: {integrity: sha512-2b8oO0+dYonahG5PfA/zoq0zlafLclfmXgqoWDZ++UiPtQHJNpNeEQ8GWbSFKGHQ494Jo6jHvazOojGRE1kqAg==}
engines: {node: '>= 10'}
cpu: [arm64]
os: [win32]
'@tauri-apps/cli-win32-ia32-msvc@2.0.0':
resolution: {integrity: sha512-uD45cLZ/EBaT8o4a27tHW7t5UKFplnvDLt/uSUaCpJ3NyOTV6nMXOUrJBe+hH9hSBohqNAF7LEyYo1p932DWFg==}
'@tauri-apps/cli-win32-ia32-msvc@2.0.2':
resolution: {integrity: sha512-axgICLunFi0To3EibdCBgbST5RocsSmtM4c04+CbcX8WQQosJ9ziWlCSrrOTRr+gJERAMSvEyVUS98f6bWMw9A==}
engines: {node: '>= 10'}
cpu: [ia32]
os: [win32]
'@tauri-apps/cli-win32-x64-msvc@2.0.0':
resolution: {integrity: sha512-oFlo14YMsvyhJHmmHgRuOpJ1L9w15193c1Nfj1DksS2LHj6tLzirI7YrAF9inY/XjHFjNHzYPmBpABibkf/9wQ==}
'@tauri-apps/cli-win32-x64-msvc@2.0.2':
resolution: {integrity: sha512-JR17cM6+DyExZRgpXr2/DdqvcFYi/EKvQt8dI5R1/uQoesWd8jeNnrU7c1FG1Zmw9+pTzDztsNqEKsrNq2sNIg==}
engines: {node: '>= 10'}
cpu: [x64]
os: [win32]
'@tauri-apps/cli@2.0.0':
resolution: {integrity: sha512-xxmPllRa6w/LRRcPczST3yHrYoi8l6ZZmzwabEmM0cgDdhVDmX+Y4oDJkiKD+8cVdxwwEzIuIKuaCwsX8iNsgA==}
'@tauri-apps/cli@2.0.2':
resolution: {integrity: sha512-R4ontHZvXORArERAHIidp5zRfZEshZczTiK+poslBv7AGKpQZoMw+E49zns7mOmP64i2Cq9Ci0pJvi4Rm8Okzw==}
engines: {node: '>= 10'}
hasBin: true
@ -1517,8 +1517,8 @@ packages:
resolution: {integrity: sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==}
engines: {node: '>= 6'}
caniuse-lite@1.0.30001666:
resolution: {integrity: sha512-gD14ICmoV5ZZM1OdzPWmpx+q4GyefaK06zi8hmfHV5xe4/2nOQX3+Dw5o+fSqOws2xVwL9j+anOPFwHzdEdV4g==}
caniuse-lite@1.0.30001667:
resolution: {integrity: sha512-7LTwJjcRkzKFmtqGsibMeuXmvFDfZq/nzIjnmgCGzKKRVzjD72selLDK1oPF/Oxzmt4fNcPvTDvGqSDG4tCALw==}
chalk@2.4.2:
resolution: {integrity: sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==}
@ -1595,8 +1595,8 @@ packages:
eastasianwidth@0.2.0:
resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==}
electron-to-chromium@1.5.31:
resolution: {integrity: sha512-QcDoBbQeYt0+3CWcK/rEbuHvwpbT/8SV9T3OSgs6cX1FlcUAkgrkqbg9zLnDrMM/rLamzQwal4LYFCiWk861Tg==}
electron-to-chromium@1.5.33:
resolution: {integrity: sha512-+cYTcFB1QqD4j4LegwLfpCNxifb6dDFUAwk6RsLusCwIaZI6or2f+q8rs5tTB2YC53HhOlIbEaqHMAAC8IOIwA==}
embla-carousel-react@8.3.0:
resolution: {integrity: sha512-P1FlinFDcIvggcErRjNuVqnUR8anyo8vLMIH8Rthgofw7Nj8qTguCa2QjFAbzxAUTQTPNNjNL7yt0BGGinVdFw==}
@ -1694,8 +1694,8 @@ packages:
globrex@0.1.2:
resolution: {integrity: sha512-uHJgbwAMwNFf5mLst7IWLNg14x1CkeqglJb/K3doi4dw6q2IvAAmM/Y81kevy83wP+Sst+nutFTYOGg3d1lsxg==}
goober@2.1.14:
resolution: {integrity: sha512-4UpC0NdGyAFqLNPnhCT2iHpza2q+RAY3GV85a/mRPdzyPQMsj0KmMMuetdIkzWRbJ+Hgau1EZztq8ImmiMGhsg==}
goober@2.1.15:
resolution: {integrity: sha512-LP0xChUqgLlr5ORa1m4LobVy++/dhP4Kta2gVla9i2pc30XvtpEFrye4JtcD265g1tEFLOjYIQEiTa+9bGGQ/g==}
peerDependencies:
csstype: ^3.0.10
@ -1717,8 +1717,8 @@ packages:
i18next-resources-to-backend@1.2.1:
resolution: {integrity: sha512-okHbVA+HZ7n1/76MsfhPqDou0fptl2dAlhRDu2ideXloRRduzHsqDOznJBef+R3DFZnbvWoBW+KxJ7fnFjd6Yw==}
i18next@23.15.1:
resolution: {integrity: sha512-wB4abZ3uK7EWodYisHl/asf8UYEhrI/vj/8aoSsrj/ZDxj4/UXPOa1KvFt1Fq5hkUHquNqwFlDprmjZ8iySgYA==}
i18next@23.15.2:
resolution: {integrity: sha512-zcPSWzCvw6uKnuYHIqs4W7hTuB9e3AFcSdZgvCWoPXIZsBjBd4djN2/2uOHIB+1DFFkQnMBXvhNg7J3WyCuywQ==}
immer@10.1.1:
resolution: {integrity: sha512-s2MPrmjovJcoMaHtx6K11Ra7oD05NT97w1IC5zpMkT6Atjr7H8LjaDd81iIxUYpMKSRRNMJE703M1Fhr/TctHw==}
@ -2152,8 +2152,8 @@ packages:
tailwind-gradient-mask-image@1.2.0:
resolution: {integrity: sha512-tUJaGhvqbJFiVKJu6EU5n//KvGdVvY3L3VOFNqjztk13+ifAk00pcSNHBTgHfUiBGOEzDn0gFRbSmsftUV1lXA==}
tailwind-merge@2.5.2:
resolution: {integrity: sha512-kjEBm+pvD+6eAwzJL2Bi+02/9LFLal1Gs61+QB7HvTfQQ0aXwC5LGT8PEt1gS0CWKktKe6ysPTAy3cBC5MeiIg==}
tailwind-merge@2.5.3:
resolution: {integrity: sha512-d9ZolCAIzom1nf/5p4LdD5zvjmgSxY0BGgdSvmXIoMYAiPdAW/dSpP7joCDYFY7r/HkEa2qmPtkgsu0xjQeQtw==}
tailwind-scrollbar@3.1.0:
resolution: {integrity: sha512-pmrtDIZeHyu2idTejfV59SbaJyvp1VRjYxAjZBH0jnyrPRo6HL1kD5Glz8VPagasqr6oAx6M05+Tuw429Z8jxg==}
@ -2223,8 +2223,8 @@ packages:
types-react@19.0.0-rc.1:
resolution: {integrity: sha512-RshndUfqTW6K3STLPis8BtAYCGOkMbtvYsi90gmVNDZBXUyUc5juf2PE9LfS/JmOlUIRO8cWTS/1MTnmhjDqyQ==}
typescript@5.6.2:
resolution: {integrity: sha512-NW8ByodCSNCwZeghjN3o+JX5OFH0Ojg6sadjEKY4huZ52TqbJTJnDo5+Tw98lSy63NZvi4n+ez5m2u5d4PkZyw==}
typescript@5.6.3:
resolution: {integrity: sha512-hjcS1mhfuyi4WW8IWtjP7brDrG2cuDZukyrYrSauoXGNgx0S7zceP07adYkJycEr56BOUTNPzbInooiN3fn1qw==}
engines: {node: '>=14.17'}
hasBin: true
@ -2742,19 +2742,19 @@ snapshots:
'@floating-ui/utils@0.2.8': {}
'@getalby/bitcoin-connect-react@3.6.2(immer@10.1.1)(react@19.0.0-rc-d025ddd3-20240722)(types-react@19.0.0-rc.1)(typescript@5.6.2)':
'@getalby/bitcoin-connect-react@3.6.2(immer@10.1.1)(react@19.0.0-rc-d025ddd3-20240722)(types-react@19.0.0-rc.1)(typescript@5.6.3)':
dependencies:
'@getalby/bitcoin-connect': 3.6.2(immer@10.1.1)(react@19.0.0-rc-d025ddd3-20240722)(types-react@19.0.0-rc.1)(typescript@5.6.2)
'@getalby/bitcoin-connect': 3.6.2(immer@10.1.1)(react@19.0.0-rc-d025ddd3-20240722)(types-react@19.0.0-rc.1)(typescript@5.6.3)
react: 19.0.0-rc-d025ddd3-20240722
transitivePeerDependencies:
- '@types/react'
- immer
- typescript
'@getalby/bitcoin-connect@3.6.2(immer@10.1.1)(react@19.0.0-rc-d025ddd3-20240722)(types-react@19.0.0-rc.1)(typescript@5.6.2)':
'@getalby/bitcoin-connect@3.6.2(immer@10.1.1)(react@19.0.0-rc-d025ddd3-20240722)(types-react@19.0.0-rc.1)(typescript@5.6.3)':
dependencies:
'@getalby/lightning-tools': 5.0.3
'@getalby/sdk': 3.7.1(typescript@5.6.2)
'@getalby/sdk': 3.7.1(typescript@5.6.3)
'@lightninglabs/lnc-web': 0.3.1-alpha
qrcode-generator: 1.4.4
zustand: 4.5.5(immer@10.1.1)(react@19.0.0-rc-d025ddd3-20240722)(types-react@19.0.0-rc.1)
@ -2766,10 +2766,10 @@ snapshots:
'@getalby/lightning-tools@5.0.3': {}
'@getalby/sdk@3.7.1(typescript@5.6.2)':
'@getalby/sdk@3.7.1(typescript@5.6.3)':
dependencies:
eventemitter3: 5.0.1
nostr-tools: 1.17.0(typescript@5.6.2)
nostr-tools: 1.17.0(typescript@5.6.3)
transitivePeerDependencies:
- typescript
@ -3255,7 +3255,7 @@ snapshots:
postcss-selector-parser: 6.0.10
tailwindcss: 3.4.13
'@tanstack/history@1.58.15': {}
'@tanstack/history@1.61.1': {}
'@tanstack/query-core@5.59.0': {}
@ -3268,16 +3268,16 @@ snapshots:
'@tanstack/query-core': 5.59.0
react: 19.0.0-rc-d025ddd3-20240722
'@tanstack/react-router@1.58.16(@tanstack/router-generator@1.58.12)(react-dom@19.0.0-rc-d025ddd3-20240722(react@19.0.0-rc-d025ddd3-20240722))(react@19.0.0-rc-d025ddd3-20240722)':
'@tanstack/react-router@1.63.5(@tanstack/router-generator@1.63.5)(react-dom@19.0.0-rc-d025ddd3-20240722(react@19.0.0-rc-d025ddd3-20240722))(react@19.0.0-rc-d025ddd3-20240722)':
dependencies:
'@tanstack/history': 1.58.15
'@tanstack/history': 1.61.1
'@tanstack/react-store': 0.5.5(react-dom@19.0.0-rc-d025ddd3-20240722(react@19.0.0-rc-d025ddd3-20240722))(react@19.0.0-rc-d025ddd3-20240722)
react: 19.0.0-rc-d025ddd3-20240722
react-dom: 19.0.0-rc-d025ddd3-20240722(react@19.0.0-rc-d025ddd3-20240722)
tiny-invariant: 1.3.3
tiny-warning: 1.0.3
optionalDependencies:
'@tanstack/router-generator': 1.58.12
'@tanstack/router-generator': 1.63.5
'@tanstack/react-store@0.5.5(react-dom@19.0.0-rc-d025ddd3-20240722(react@19.0.0-rc-d025ddd3-20240722))(react@19.0.0-rc-d025ddd3-20240722)':
dependencies:
@ -3286,24 +3286,24 @@ snapshots:
react-dom: 19.0.0-rc-d025ddd3-20240722(react@19.0.0-rc-d025ddd3-20240722)
use-sync-external-store: 1.2.2(react@19.0.0-rc-d025ddd3-20240722)
'@tanstack/router-devtools@1.58.16(@tanstack/react-router@1.58.16(@tanstack/router-generator@1.58.12)(react-dom@19.0.0-rc-d025ddd3-20240722(react@19.0.0-rc-d025ddd3-20240722))(react@19.0.0-rc-d025ddd3-20240722))(csstype@3.1.3)(react-dom@19.0.0-rc-d025ddd3-20240722(react@19.0.0-rc-d025ddd3-20240722))(react@19.0.0-rc-d025ddd3-20240722)':
'@tanstack/router-devtools@1.63.5(@tanstack/react-router@1.63.5(@tanstack/router-generator@1.63.5)(react-dom@19.0.0-rc-d025ddd3-20240722(react@19.0.0-rc-d025ddd3-20240722))(react@19.0.0-rc-d025ddd3-20240722))(csstype@3.1.3)(react-dom@19.0.0-rc-d025ddd3-20240722(react@19.0.0-rc-d025ddd3-20240722))(react@19.0.0-rc-d025ddd3-20240722)':
dependencies:
'@tanstack/react-router': 1.58.16(@tanstack/router-generator@1.58.12)(react-dom@19.0.0-rc-d025ddd3-20240722(react@19.0.0-rc-d025ddd3-20240722))(react@19.0.0-rc-d025ddd3-20240722)
'@tanstack/react-router': 1.63.5(@tanstack/router-generator@1.63.5)(react-dom@19.0.0-rc-d025ddd3-20240722(react@19.0.0-rc-d025ddd3-20240722))(react@19.0.0-rc-d025ddd3-20240722)
clsx: 2.1.1
goober: 2.1.14(csstype@3.1.3)
goober: 2.1.15(csstype@3.1.3)
react: 19.0.0-rc-d025ddd3-20240722
react-dom: 19.0.0-rc-d025ddd3-20240722(react@19.0.0-rc-d025ddd3-20240722)
transitivePeerDependencies:
- csstype
'@tanstack/router-generator@1.58.12':
'@tanstack/router-generator@1.63.5':
dependencies:
'@tanstack/virtual-file-routes': 1.56.0
prettier: 3.3.3
tsx: 4.19.1
zod: 3.23.8
'@tanstack/router-plugin@1.58.12(vite@5.4.8)(webpack-sources@3.2.3)':
'@tanstack/router-plugin@1.63.5(vite@5.4.8)(webpack-sources@3.2.3)':
dependencies:
'@babel/core': 7.25.7
'@babel/generator': 7.25.7
@ -3313,7 +3313,7 @@ snapshots:
'@babel/template': 7.25.7
'@babel/traverse': 7.25.7
'@babel/types': 7.25.7
'@tanstack/router-generator': 1.58.12
'@tanstack/router-generator': 1.63.5
'@tanstack/virtual-file-routes': 1.56.0
'@types/babel__core': 7.20.5
'@types/babel__generator': 7.6.8
@ -3333,94 +3333,94 @@ snapshots:
'@tanstack/virtual-file-routes@1.56.0': {}
'@tauri-apps/api@2.0.1': {}
'@tauri-apps/api@2.0.2': {}
'@tauri-apps/cli-darwin-arm64@2.0.0':
'@tauri-apps/cli-darwin-arm64@2.0.2':
optional: true
'@tauri-apps/cli-darwin-x64@2.0.0':
'@tauri-apps/cli-darwin-x64@2.0.2':
optional: true
'@tauri-apps/cli-linux-arm-gnueabihf@2.0.0':
'@tauri-apps/cli-linux-arm-gnueabihf@2.0.2':
optional: true
'@tauri-apps/cli-linux-arm64-gnu@2.0.0':
'@tauri-apps/cli-linux-arm64-gnu@2.0.2':
optional: true
'@tauri-apps/cli-linux-arm64-musl@2.0.0':
'@tauri-apps/cli-linux-arm64-musl@2.0.2':
optional: true
'@tauri-apps/cli-linux-x64-gnu@2.0.0':
'@tauri-apps/cli-linux-x64-gnu@2.0.2':
optional: true
'@tauri-apps/cli-linux-x64-musl@2.0.0':
'@tauri-apps/cli-linux-x64-musl@2.0.2':
optional: true
'@tauri-apps/cli-win32-arm64-msvc@2.0.0':
'@tauri-apps/cli-win32-arm64-msvc@2.0.2':
optional: true
'@tauri-apps/cli-win32-ia32-msvc@2.0.0':
'@tauri-apps/cli-win32-ia32-msvc@2.0.2':
optional: true
'@tauri-apps/cli-win32-x64-msvc@2.0.0':
'@tauri-apps/cli-win32-x64-msvc@2.0.2':
optional: true
'@tauri-apps/cli@2.0.0':
'@tauri-apps/cli@2.0.2':
optionalDependencies:
'@tauri-apps/cli-darwin-arm64': 2.0.0
'@tauri-apps/cli-darwin-x64': 2.0.0
'@tauri-apps/cli-linux-arm-gnueabihf': 2.0.0
'@tauri-apps/cli-linux-arm64-gnu': 2.0.0
'@tauri-apps/cli-linux-arm64-musl': 2.0.0
'@tauri-apps/cli-linux-x64-gnu': 2.0.0
'@tauri-apps/cli-linux-x64-musl': 2.0.0
'@tauri-apps/cli-win32-arm64-msvc': 2.0.0
'@tauri-apps/cli-win32-ia32-msvc': 2.0.0
'@tauri-apps/cli-win32-x64-msvc': 2.0.0
'@tauri-apps/cli-darwin-arm64': 2.0.2
'@tauri-apps/cli-darwin-x64': 2.0.2
'@tauri-apps/cli-linux-arm-gnueabihf': 2.0.2
'@tauri-apps/cli-linux-arm64-gnu': 2.0.2
'@tauri-apps/cli-linux-arm64-musl': 2.0.2
'@tauri-apps/cli-linux-x64-gnu': 2.0.2
'@tauri-apps/cli-linux-x64-musl': 2.0.2
'@tauri-apps/cli-win32-arm64-msvc': 2.0.2
'@tauri-apps/cli-win32-ia32-msvc': 2.0.2
'@tauri-apps/cli-win32-x64-msvc': 2.0.2
'@tauri-apps/plugin-clipboard-manager@2.0.0':
dependencies:
'@tauri-apps/api': 2.0.1
'@tauri-apps/api': 2.0.2
'@tauri-apps/plugin-dialog@2.0.0':
dependencies:
'@tauri-apps/api': 2.0.1
'@tauri-apps/api': 2.0.2
'@tauri-apps/plugin-fs@2.0.0':
dependencies:
'@tauri-apps/api': 2.0.1
'@tauri-apps/api': 2.0.2
'@tauri-apps/plugin-http@2.0.0':
dependencies:
'@tauri-apps/api': 2.0.1
'@tauri-apps/api': 2.0.2
'@tauri-apps/plugin-os@2.0.0':
dependencies:
'@tauri-apps/api': 2.0.1
'@tauri-apps/api': 2.0.2
'@tauri-apps/plugin-process@2.0.0':
dependencies:
'@tauri-apps/api': 2.0.1
'@tauri-apps/api': 2.0.2
'@tauri-apps/plugin-shell@2.0.0':
dependencies:
'@tauri-apps/api': 2.0.1
'@tauri-apps/api': 2.0.2
'@tauri-apps/plugin-store@2.0.0':
dependencies:
'@tauri-apps/api': 2.0.1
'@tauri-apps/api': 2.0.2
'@tauri-apps/plugin-updater@2.0.0':
dependencies:
'@tauri-apps/api': 2.0.1
'@tauri-apps/api': 2.0.2
'@tauri-apps/plugin-upload@2.0.0':
dependencies:
'@tauri-apps/api': 2.0.1
'@tauri-apps/api': 2.0.2
'@tauri-apps/plugin-window-state@2.0.0':
dependencies:
'@tauri-apps/api': 2.0.1
'@tauri-apps/api': 2.0.2
'@types/babel__core@7.20.5':
dependencies:
@ -3514,7 +3514,7 @@ snapshots:
autoprefixer@10.4.20(postcss@8.4.47):
dependencies:
browserslist: 4.24.0
caniuse-lite: 1.0.30001666
caniuse-lite: 1.0.30001667
fraction.js: 4.3.7
normalize-range: 0.1.2
picocolors: 1.1.0
@ -3560,14 +3560,14 @@ snapshots:
browserslist@4.24.0:
dependencies:
caniuse-lite: 1.0.30001666
electron-to-chromium: 1.5.31
caniuse-lite: 1.0.30001667
electron-to-chromium: 1.5.33
node-releases: 2.0.18
update-browserslist-db: 1.1.1(browserslist@4.24.0)
camelcase-css@2.0.1: {}
caniuse-lite@1.0.30001666: {}
caniuse-lite@1.0.30001667: {}
chalk@2.4.2:
dependencies:
@ -3636,7 +3636,7 @@ snapshots:
eastasianwidth@0.2.0: {}
electron-to-chromium@1.5.31: {}
electron-to-chromium@1.5.33: {}
embla-carousel-react@8.3.0(react@19.0.0-rc-d025ddd3-20240722):
dependencies:
@ -3770,7 +3770,7 @@ snapshots:
globrex@0.1.2: {}
goober@2.1.14(csstype@3.1.3):
goober@2.1.15(csstype@3.1.3):
dependencies:
csstype: 3.1.3
@ -3790,7 +3790,7 @@ snapshots:
dependencies:
'@babel/runtime': 7.25.7
i18next@23.15.1:
i18next@23.15.2:
dependencies:
'@babel/runtime': 7.25.7
@ -3900,7 +3900,7 @@ snapshots:
normalize-range@0.1.2: {}
nostr-tools@1.17.0(typescript@5.6.2):
nostr-tools@1.17.0(typescript@5.6.3):
dependencies:
'@noble/ciphers': 0.2.0
'@noble/curves': 1.1.0
@ -3909,9 +3909,9 @@ snapshots:
'@scure/bip32': 1.3.1
'@scure/bip39': 1.2.1
optionalDependencies:
typescript: 5.6.2
typescript: 5.6.3
nostr-tools@2.7.2(typescript@5.6.2):
nostr-tools@2.7.2(typescript@5.6.3):
dependencies:
'@noble/ciphers': 0.5.3
'@noble/curves': 1.2.0
@ -3921,7 +3921,7 @@ snapshots:
'@scure/bip39': 1.2.1
optionalDependencies:
nostr-wasm: 0.1.0
typescript: 5.6.2
typescript: 5.6.3
nostr-wasm@0.1.0:
optional: true
@ -4017,11 +4017,11 @@ snapshots:
dependencies:
react: 19.0.0-rc-d025ddd3-20240722
react-i18next@15.0.2(i18next@23.15.1)(react-dom@19.0.0-rc-d025ddd3-20240722(react@19.0.0-rc-d025ddd3-20240722))(react@19.0.0-rc-d025ddd3-20240722):
react-i18next@15.0.2(i18next@23.15.2)(react-dom@19.0.0-rc-d025ddd3-20240722(react@19.0.0-rc-d025ddd3-20240722))(react@19.0.0-rc-d025ddd3-20240722):
dependencies:
'@babel/runtime': 7.25.7
html-parse-stringify: 3.0.1
i18next: 23.15.1
i18next: 23.15.2
react: 19.0.0-rc-d025ddd3-20240722
optionalDependencies:
react-dom: 19.0.0-rc-d025ddd3-20240722(react@19.0.0-rc-d025ddd3-20240722)
@ -4170,7 +4170,7 @@ snapshots:
tailwind-gradient-mask-image@1.2.0: {}
tailwind-merge@2.5.2: {}
tailwind-merge@2.5.3: {}
tailwind-scrollbar@3.1.0(tailwindcss@3.4.13):
dependencies:
@ -4229,9 +4229,9 @@ snapshots:
ts-interface-checker@0.1.13: {}
tsconfck@3.1.3(typescript@5.6.2):
tsconfck@3.1.3(typescript@5.6.3):
optionalDependencies:
typescript: 5.6.2
typescript: 5.6.3
tslib@2.7.0: {}
@ -4250,7 +4250,7 @@ snapshots:
dependencies:
csstype: 3.1.3
typescript@5.6.2: {}
typescript@5.6.3: {}
unplugin@1.14.1(webpack-sources@3.2.3):
dependencies:
@ -4295,11 +4295,11 @@ snapshots:
react: 19.0.0-rc-d025ddd3-20240722
react-dom: 19.0.0-rc-d025ddd3-20240722(react@19.0.0-rc-d025ddd3-20240722)
vite-tsconfig-paths@5.0.1(typescript@5.6.2)(vite@5.4.8):
vite-tsconfig-paths@5.0.1(typescript@5.6.3)(vite@5.4.8):
dependencies:
debug: 4.3.7
globrex: 0.1.2
tsconfck: 3.1.3(typescript@5.6.2)
tsconfck: 3.1.3(typescript@5.6.3)
optionalDependencies:
vite: 5.4.8
transitivePeerDependencies:

274
src-tauri/Cargo.lock generated
View File

@ -54,9 +54,9 @@ dependencies = [
[[package]]
name = "addr2line"
version = "0.24.1"
version = "0.24.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f5fb1d8e4442bd405fdfd1dacb42792696b0cf9cb15882e5d097b742a676d375"
checksum = "dfbe277e56a376000877090da837660b4427aad530e3028d44e0bffe4f89a1c1"
dependencies = [
"gimli",
]
@ -100,18 +100,6 @@ version = "0.4.8"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "0453232ace82dee0dd0b4c87a59bd90f7b53b314f3e0f61fe2ee7c8a16482289"
[[package]]
name = "ahash"
version = "0.8.11"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e89da841a80418a9b391ebaea17f5c112ffaaa96f621d2c285b5174da76b9011"
dependencies = [
"cfg-if",
"once_cell",
"version_check",
"zerocopy",
]
[[package]]
name = "aho-corasick"
version = "1.1.3"
@ -496,7 +484,7 @@ version = "0.1.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "2c8d66485a3a2ea485c1913c4572ce0256067a5377ac8c75c4960e1cda98605f"
dependencies = [
"bitcoin-internals",
"bitcoin-internals 0.3.0",
"bitcoin_hashes 0.14.0",
]
@ -526,11 +514,11 @@ checksum = "d965446196e3b7decd44aa7ee49e31d630118f90ef12f97900f262eb915c951d"
[[package]]
name = "bip39"
version = "2.0.0"
version = "2.1.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "93f2635620bf0b9d4576eb7bb9a38a55df78bd1205d26fa994b25911a69f212f"
checksum = "33415e24172c1b7d6066f6d999545375ab8e1d95421d6784bdfff9496f292387"
dependencies = [
"bitcoin_hashes 0.11.0",
"bitcoin_hashes 0.13.0",
"serde",
"unicode-normalization",
]
@ -549,16 +537,22 @@ checksum = "0032b0e8ead7074cda7fc4f034409607e3f03a6f71d66ade8a307f79b4d99e73"
dependencies = [
"base58ck",
"bech32",
"bitcoin-internals",
"bitcoin-internals 0.3.0",
"bitcoin-io",
"bitcoin-units",
"bitcoin_hashes 0.14.0",
"hex-conservative",
"hex-conservative 0.2.1",
"hex_lit",
"secp256k1",
"serde",
]
[[package]]
name = "bitcoin-internals"
version = "0.2.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "9425c3bf7089c983facbae04de54513cce73b41c7f9ff8c845b54e7bc64ebbfb"
[[package]]
name = "bitcoin-internals"
version = "0.3.0"
@ -580,15 +574,19 @@ version = "0.1.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "5285c8bcaa25876d07f37e3d30c303f2609179716e11d688f51e8f1fe70063e2"
dependencies = [
"bitcoin-internals",
"bitcoin-internals 0.3.0",
"serde",
]
[[package]]
name = "bitcoin_hashes"
version = "0.11.0"
version = "0.13.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "90064b8dee6815a6470d60bad07bbbaee885c0e12d04177138fa3291a01b7bc4"
checksum = "1930a4dabfebb8d7d9992db18ebe3ae2876f0a305fab206fd168df931ede293b"
dependencies = [
"bitcoin-internals 0.2.0",
"hex-conservative 0.1.2",
]
[[package]]
name = "bitcoin_hashes"
@ -597,7 +595,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "bb18c03d0db0247e147a21a6faafd5a7eb851c743db062de72018b6b7e8e4d16"
dependencies = [
"bitcoin-io",
"hex-conservative",
"hex-conservative 0.2.1",
"serde",
]
@ -671,7 +669,7 @@ dependencies = [
[[package]]
name = "border"
version = "0.1.0"
source = "git+https://github.com/ahkohd/tauri-toolkit?branch=v2#c01421cdd17334fd00dad77700fc7b84d19fc285"
source = "git+https://github.com/ahkohd/tauri-toolkit?branch=v2#8c770af8cecb1b88dcd4b61f3878aa4079e336c5"
dependencies = [
"cocoa 0.25.0",
"color",
@ -819,9 +817,9 @@ dependencies = [
[[package]]
name = "cc"
version = "1.1.24"
version = "1.1.28"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "812acba72f0a070b003d3697490d2b55b837230ae7c6c6497f05cc2ddbb8d938"
checksum = "2e80e3b6a3ab07840e1cae9b0666a63970dc28e8ed5ffbcdacbfc760c281bfc1"
dependencies = [
"jobserver",
"libc",
@ -987,7 +985,7 @@ dependencies = [
[[package]]
name = "color"
version = "0.1.0"
source = "git+https://github.com/ahkohd/tauri-toolkit?branch=v2#c01421cdd17334fd00dad77700fc7b84d19fc285"
source = "git+https://github.com/ahkohd/tauri-toolkit?branch=v2#8c770af8cecb1b88dcd4b61f3878aa4079e336c5"
dependencies = [
"cocoa 0.25.0",
"objc",
@ -1730,6 +1728,12 @@ version = "1.0.7"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1"
[[package]]
name = "foldhash"
version = "0.1.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f81ec6369c545a7d40e4589b5597581fa1c441fe1cce96dd1de43159910a36a2"
[[package]]
name = "foreign-types"
version = "0.3.2"
@ -1803,9 +1807,9 @@ dependencies = [
[[package]]
name = "futures"
version = "0.3.30"
version = "0.3.31"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "645c6916888f6cb6350d2550b80fb63e734897a8498abe35cfb732b6487804b0"
checksum = "65bc07b1a8bc7c85c5f2e110c476c7389b4554ba72af57d8445ea63a576b0876"
dependencies = [
"futures-channel",
"futures-core",
@ -1818,9 +1822,9 @@ dependencies = [
[[package]]
name = "futures-channel"
version = "0.3.30"
version = "0.3.31"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "eac8f7d7865dcb88bd4373ab671c8cf4508703796caa2b1985a9ca867b3fcb78"
checksum = "2dff15bf788c671c1934e366d07e30c1814a8ef514e1af724a602e8a2fbe1b10"
dependencies = [
"futures-core",
"futures-sink",
@ -1828,15 +1832,15 @@ dependencies = [
[[package]]
name = "futures-core"
version = "0.3.30"
version = "0.3.31"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "dfc6580bb841c5a68e9ef15c77ccc837b40a7504914d52e47b8b0e9bbda25a1d"
checksum = "05f29059c0c2090612e8d742178b0580d2dc940c837851ad723096f87af6663e"
[[package]]
name = "futures-executor"
version = "0.3.30"
version = "0.3.31"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "a576fc72ae164fca6b9db127eaa9a9dda0d61316034f33a0a0d4eda41f02b01d"
checksum = "1e28d1d997f585e54aebc3f97d39e72338912123a67330d723fdbb564d646c9f"
dependencies = [
"futures-core",
"futures-task",
@ -1845,9 +1849,9 @@ dependencies = [
[[package]]
name = "futures-io"
version = "0.3.30"
version = "0.3.31"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "a44623e20b9681a318efdd71c299b6b222ed6f231972bfe2f224ebad6311f0c1"
checksum = "9e5c1b78ca4aae1ac06c48a526a655760685149f0d465d21f37abfe57ce075c6"
[[package]]
name = "futures-lite"
@ -1864,9 +1868,9 @@ dependencies = [
[[package]]
name = "futures-macro"
version = "0.3.30"
version = "0.3.31"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "87750cf4b7a4c0625b1529e4c543c2182106e4dedc60a2a6455e00d212c489ac"
checksum = "162ee34ebcb7c64a8abebc059ce0fee27c2262618d7b60ed8faf72fef13c3650"
dependencies = [
"proc-macro2",
"quote",
@ -1875,21 +1879,21 @@ dependencies = [
[[package]]
name = "futures-sink"
version = "0.3.30"
version = "0.3.31"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "9fb8e00e87438d937621c1c6269e53f536c14d3fbd6a042bb24879e57d474fb5"
checksum = "e575fab7d1e0dcb8d0c7bcf9a63ee213816ab51902e6d244a95819acacf1d4f7"
[[package]]
name = "futures-task"
version = "0.3.30"
version = "0.3.31"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "38d84fa142264698cdce1a9f9172cf383a0c82de1bddcf3092901442c4097004"
checksum = "f90f7dce0722e95104fcb095585910c0977252f286e354b5e3bd38902cd99988"
[[package]]
name = "futures-util"
version = "0.3.30"
version = "0.3.31"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "3d6401deb83407ab3da39eba7e33987a73c3df0c82b4bb5813ee871c19c41d48"
checksum = "9fa08315bb612088cc391249efdc3bc77536f16c91f6cf495e6fbe85b20a4a81"
dependencies = [
"futures-channel",
"futures-core",
@ -2077,9 +2081,9 @@ dependencies = [
[[package]]
name = "gimli"
version = "0.31.0"
version = "0.31.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "32085ea23f3234fc7846555e85283ba4de91e21016dc0455a16286d87a292d64"
checksum = "07e28edb80900c19c28f1072f2e8aeca7fa06b23cd4169cefe1af5aa3260783f"
[[package]]
name = "gio"
@ -2276,7 +2280,7 @@ version = "0.9.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d7afe4a420e3fe79967a00898cc1f4db7c8a49a9333a29f8a4bd76a253d5cd04"
dependencies = [
"ahash 0.4.8",
"ahash",
]
[[package]]
@ -2285,21 +2289,16 @@ version = "0.12.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888"
[[package]]
name = "hashbrown"
version = "0.14.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e5274423e17b7c9fc20b6e7e208532f9b19825d82dfd615708b70edd83df41f1"
dependencies = [
"ahash 0.8.11",
"allocator-api2",
]
[[package]]
name = "hashbrown"
version = "0.15.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "1e087f84d4f86bf4b218b927129862374b72199ae7d8657835f1e89000eea4fb"
dependencies = [
"allocator-api2",
"equivalent",
"foldhash",
]
[[package]]
name = "heck"
@ -2365,6 +2364,12 @@ version = "0.4.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70"
[[package]]
name = "hex-conservative"
version = "0.1.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "212ab92002354b4819390025006c897e8140934349e8635c9b077f47b4dcbd20"
[[package]]
name = "hex-conservative"
version = "0.2.1"
@ -2695,9 +2700,9 @@ dependencies = [
[[package]]
name = "ipnet"
version = "2.10.0"
version = "2.10.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "187674a687eed5fe42285b40c6291f9a01517d415fad1c3cbc6a9f778af7fcd4"
checksum = "ddc24109865250148c2e0f3d25d4f0f479571723792d3802153c60922a4fb708"
[[package]]
name = "is-docker"
@ -3072,11 +3077,11 @@ dependencies = [
[[package]]
name = "lru"
version = "0.12.4"
version = "0.12.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "37ee39891760e7d94734f6f63fedc29a2e4a152f836120753a72503f09fcf904"
checksum = "234cf4f4a04dc1f57e24b96cc0cd600cf2af460d4161ac5ecdd0af8e1f3b2a38"
dependencies = [
"hashbrown 0.14.5",
"hashbrown 0.15.0",
]
[[package]]
@ -3212,7 +3217,7 @@ dependencies = [
[[package]]
name = "monitor"
version = "0.1.0"
source = "git+https://github.com/ahkohd/tauri-toolkit?branch=v2#c01421cdd17334fd00dad77700fc7b84d19fc285"
source = "git+https://github.com/ahkohd/tauri-toolkit?branch=v2#8c770af8cecb1b88dcd4b61f3878aa4079e336c5"
dependencies = [
"cocoa 0.25.0",
"core-foundation 0.9.4",
@ -3357,7 +3362,7 @@ checksum = "0676bb32a98c1a483ce53e500a81ad9c3d5b3f7c920c28c24e9cb0980d0b5bc8"
[[package]]
name = "nostr"
version = "0.35.0"
source = "git+https://github.com/rust-nostr/nostr#a9d62917acd12d2b6108a2805971ea64400d593c"
source = "git+https://github.com/rust-nostr/nostr#82f39b5655bd58f045194b14a2cda5ef119acef1"
dependencies = [
"aes",
"base64 0.22.1",
@ -3387,7 +3392,7 @@ dependencies = [
[[package]]
name = "nostr-database"
version = "0.35.0"
source = "git+https://github.com/rust-nostr/nostr#a9d62917acd12d2b6108a2805971ea64400d593c"
source = "git+https://github.com/rust-nostr/nostr#82f39b5655bd58f045194b14a2cda5ef119acef1"
dependencies = [
"async-trait",
"flatbuffers",
@ -3401,7 +3406,7 @@ dependencies = [
[[package]]
name = "nostr-lmdb"
version = "0.35.0"
source = "git+https://github.com/rust-nostr/nostr#a9d62917acd12d2b6108a2805971ea64400d593c"
source = "git+https://github.com/rust-nostr/nostr#82f39b5655bd58f045194b14a2cda5ef119acef1"
dependencies = [
"heed",
"nostr",
@ -3414,7 +3419,7 @@ dependencies = [
[[package]]
name = "nostr-relay-builder"
version = "0.35.0"
source = "git+https://github.com/rust-nostr/nostr#a9d62917acd12d2b6108a2805971ea64400d593c"
source = "git+https://github.com/rust-nostr/nostr#82f39b5655bd58f045194b14a2cda5ef119acef1"
dependencies = [
"async-utility",
"async-wsocket",
@ -3429,7 +3434,7 @@ dependencies = [
[[package]]
name = "nostr-relay-pool"
version = "0.35.0"
source = "git+https://github.com/rust-nostr/nostr#a9d62917acd12d2b6108a2805971ea64400d593c"
source = "git+https://github.com/rust-nostr/nostr#82f39b5655bd58f045194b14a2cda5ef119acef1"
dependencies = [
"async-utility",
"async-wsocket",
@ -3447,7 +3452,7 @@ dependencies = [
[[package]]
name = "nostr-sdk"
version = "0.35.0"
source = "git+https://github.com/rust-nostr/nostr#a9d62917acd12d2b6108a2805971ea64400d593c"
source = "git+https://github.com/rust-nostr/nostr#82f39b5655bd58f045194b14a2cda5ef119acef1"
dependencies = [
"async-utility",
"atomic-destructor",
@ -3467,7 +3472,7 @@ dependencies = [
[[package]]
name = "nostr-signer"
version = "0.35.0"
source = "git+https://github.com/rust-nostr/nostr#a9d62917acd12d2b6108a2805971ea64400d593c"
source = "git+https://github.com/rust-nostr/nostr#82f39b5655bd58f045194b14a2cda5ef119acef1"
dependencies = [
"async-utility",
"nostr",
@ -3480,7 +3485,7 @@ dependencies = [
[[package]]
name = "nostr-zapper"
version = "0.35.0"
source = "git+https://github.com/rust-nostr/nostr#a9d62917acd12d2b6108a2805971ea64400d593c"
source = "git+https://github.com/rust-nostr/nostr#82f39b5655bd58f045194b14a2cda5ef119acef1"
dependencies = [
"async-trait",
"nostr",
@ -3624,7 +3629,7 @@ dependencies = [
[[package]]
name = "nwc"
version = "0.35.0"
source = "git+https://github.com/rust-nostr/nostr#a9d62917acd12d2b6108a2805971ea64400d593c"
source = "git+https://github.com/rust-nostr/nostr#82f39b5655bd58f045194b14a2cda5ef119acef1"
dependencies = [
"async-utility",
"nostr",
@ -3775,21 +3780,18 @@ dependencies = [
[[package]]
name = "object"
version = "0.36.4"
version = "0.36.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "084f1a5821ac4c651660a94a7153d27ac9d8a53736203f58b31945ded098070a"
checksum = "aedf0a2d09c573ed1d8d85b30c119153926a2b36dce0ab28322c09a117a4683e"
dependencies = [
"memchr",
]
[[package]]
name = "once_cell"
version = "1.20.1"
version = "1.20.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "82881c4be219ab5faaf2ad5e5e5ecdff8c66bd7402ca3160975c93b24961afd1"
dependencies = [
"portable-atomic",
]
checksum = "1261fe7e33c73b354eab43b1273a57c8f967d0391e80353e51f764ac02cf6775"
[[package]]
name = "opaque-debug"
@ -4223,12 +4225,6 @@ dependencies = [
"universal-hash",
]
[[package]]
name = "portable-atomic"
version = "1.9.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "cc9c68a3f6da06753e9335d63e27f6b9754dd1920d941135b7ea8224f141adb2"
[[package]]
name = "powerfmt"
version = "0.2.0"
@ -4302,9 +4298,9 @@ checksum = "dc375e1527247fe1a97d8b7156678dfe7c1af2fc075c9a4db3690ecd2a148068"
[[package]]
name = "proc-macro2"
version = "1.0.86"
version = "1.0.87"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "5e719e8df665df0d1c8fbfd238015744736151d4445ec0836b8e628aae103b77"
checksum = "b3e4daa0dcf6feba26f985457cdf104d4b4256fc5a09547140f3631bb076b19a"
dependencies = [
"unicode-ident",
]
@ -4805,9 +4801,9 @@ dependencies = [
[[package]]
name = "rustls"
version = "0.23.13"
version = "0.23.14"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f2dabaac7466917e566adb06783a81ca48944c6898a1b08b9374106dd671f4c8"
checksum = "415d9944693cb90382053259f89fbb077ea730ad7273047ec63b19bc9b160ba8"
dependencies = [
"once_cell",
"ring",
@ -4875,9 +4871,9 @@ dependencies = [
[[package]]
name = "schannel"
version = "0.1.24"
version = "0.1.26"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e9aaafd5a2b6e3d657ff009d82fbd630b6bd54dd4eb06f21693925cdf80f9b8b"
checksum = "01227be5826fa0690321a2ba6c5cd57a19cf3f6a09e76973b58e61de6ab9d1c1"
dependencies = [
"windows-sys 0.59.0",
]
@ -5114,9 +5110,9 @@ dependencies = [
[[package]]
name = "serde_with"
version = "3.10.0"
version = "3.11.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "9720086b3357bcb44fce40117d769a4d068c70ecfa190850a980a71755f66fcc"
checksum = "8e28bdad6db2b8340e449f7108f020b3b092e8583a9e3fb82713e1d4e71fe817"
dependencies = [
"base64 0.22.1",
"chrono",
@ -5132,9 +5128,9 @@ dependencies = [
[[package]]
name = "serde_with_macros"
version = "3.10.0"
version = "3.11.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "5f1abbfe725f27678f4663bcacb75a83e829fd464c25d78dd038a3a29e307cec"
checksum = "9d846214a9854ef724f3da161b426242d8de7c1fc7de2f89bb1efcb154dca79d"
dependencies = [
"darling",
"proc-macro2",
@ -5545,9 +5541,9 @@ dependencies = [
[[package]]
name = "tao"
version = "0.30.2"
version = "0.30.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "06e48d7c56b3f7425d061886e8ce3b6acfab1993682ed70bef50fd133d721ee6"
checksum = "a0dbbebe82d02044dfa481adca1550d6dd7bd16e086bc34fa0fbecceb5a63751"
dependencies = [
"bitflags 2.6.0",
"cocoa 0.26.0",
@ -5612,9 +5608,9 @@ checksum = "61c41af27dd6d1e27b1b16b489db798443478cef1f06a660c96db617ba5de3b1"
[[package]]
name = "tauri"
version = "2.0.0"
version = "2.0.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "3c9c08beea86d5095b6f5fb1c788fe8759b23c3f71927c66a69e725a91d089cd"
checksum = "5920aad0804ea5e86808d4b6e8753d3bcbae7efc8f4e41a4da00b45427559868"
dependencies = [
"anyhow",
"bytes",
@ -5664,9 +5660,9 @@ dependencies = [
[[package]]
name = "tauri-build"
version = "2.0.0"
version = "2.0.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "93bb649a284aec2ab43e8df6831b8c8060d231ec8ddf05bf021d58cb67570e1f"
checksum = "935f9b3c49b22b3e2e485a57f46d61cd1ae07b1cbb2ba87387a387caf2d8c4e7"
dependencies = [
"anyhow",
"cargo_toml",
@ -5686,9 +5682,9 @@ dependencies = [
[[package]]
name = "tauri-codegen"
version = "2.0.0"
version = "2.0.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "a4511912612ba0da11aeb300e18e18b2c7067fd14aa886eac46bdcc43b4fa3ee"
checksum = "95d7443dd4f0b597704b6a14b964ee2ed16e99928d8e6292ae9825f09fbcd30e"
dependencies = [
"base64 0.22.1",
"brotli",
@ -5713,9 +5709,9 @@ dependencies = [
[[package]]
name = "tauri-macros"
version = "2.0.0"
version = "2.0.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "62ee976578a14b779996d7b6879d7e625c8ce674bc87e223953664f37def2eef"
checksum = "4d2c0963ccfc3f5194415f2cce7acc975942a8797fbabfb0aa1ed6f59326ae7f"
dependencies = [
"heck 0.5.0",
"proc-macro2",
@ -5743,9 +5739,9 @@ dependencies = [
[[package]]
name = "tauri-plugin"
version = "2.0.0"
version = "2.0.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "774d084450b7ec8e445ad119079307f935b7bf3d736da139a8664eb1d4909aa5"
checksum = "b2e6660a409963e4d57b9bfab4addd141eeff41bd3a7fb14e13004a832cf7ef6"
dependencies = [
"anyhow",
"glob",
@ -5760,9 +5756,9 @@ dependencies = [
[[package]]
name = "tauri-plugin-clipboard-manager"
version = "2.0.0"
version = "2.0.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "8336820003f8fac414d444a7aeeb9b927760b529e39736d3344852fd4ff776f0"
checksum = "78b7d556886c15849198c0948fd7f4c880492f0461539176da0a8a70272e2904"
dependencies = [
"arboard",
"image",
@ -5792,9 +5788,9 @@ dependencies = [
[[package]]
name = "tauri-plugin-dialog"
version = "2.0.0"
version = "2.0.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "6da13d0dd431efe6b5e40a3314d7a33d7bce8f8ed34e2bf044f95ccad82f10ec"
checksum = "ddb2fe88b602461c118722c574e2775ab26a4e68886680583874b2f6520608b7"
dependencies = [
"log",
"raw-window-handle",
@ -5810,9 +5806,9 @@ dependencies = [
[[package]]
name = "tauri-plugin-fs"
version = "2.0.0"
version = "2.0.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "6ba59d7880ffdc24f72350b48bec374482803e167b7275655f6bd8426b7fc9c3"
checksum = "ab300488ebec3487ca5f56289692e7e45feb07eea8d5e1dba497f7dc9dd9c407"
dependencies = [
"anyhow",
"dunce",
@ -5831,9 +5827,9 @@ dependencies = [
[[package]]
name = "tauri-plugin-http"
version = "2.0.0"
version = "2.0.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "9a7125717a0cb61603a4395e299c47516b5843d71ae17139e4c92a71fa013270"
checksum = "784333f1632d96c94346e8145bfe52970923a38a0e6eacd3dccaa12289275acf"
dependencies = [
"data-url",
"http",
@ -5853,9 +5849,9 @@ dependencies = [
[[package]]
name = "tauri-plugin-notification"
version = "2.0.0"
version = "2.0.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "85e26a56dd9666275f43fbfd4b803e64a5d9ea39e0d1754f4bee87456af01e67"
checksum = "ef492a2d19b6376bb4c9e0c4fab3f3bf8a220ea112d24f35027b737ff55de20c"
dependencies = [
"log",
"notify-rust",
@ -5872,9 +5868,9 @@ dependencies = [
[[package]]
name = "tauri-plugin-os"
version = "2.0.0"
version = "2.0.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "fac65dc1cf2276651d6a53976a3be618434aacfd5a39eeecc4be9ea74e07f4fb"
checksum = "fbc5f23a86f37687c7f4fecfdc706b279087bc44f7a46702f7307ff1551ee03a"
dependencies = [
"gethostname 0.5.0",
"log",
@ -5905,9 +5901,9 @@ dependencies = [
[[package]]
name = "tauri-plugin-process"
version = "2.0.0"
version = "2.0.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "73a682de610de60cfeea5212cbbaca9a6c25bd48854067f2aee3c27ee87ae65c"
checksum = "ae06a00087c148962a52814a2d7265b1a0505bced5ffb74f8c284a5f96a4d03d"
dependencies = [
"tauri",
"tauri-plugin",
@ -5915,9 +5911,9 @@ dependencies = [
[[package]]
name = "tauri-plugin-shell"
version = "2.0.0"
version = "2.0.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "2929bb35edb7255949e0cbcb2285ff6b02371bf826ad03471077b6b3bf4e6d60"
checksum = "371fb9aca2823990a2d0db7970573be5fdf07881fcaa2b835b29631feb84aec1"
dependencies = [
"encoding_rs",
"log",
@ -5936,9 +5932,9 @@ dependencies = [
[[package]]
name = "tauri-plugin-store"
version = "2.0.0"
version = "2.0.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "c824c56d35d3aeb97eda0f827c9c419d8fd153a2958f3f40e8e9f34ecc564e6d"
checksum = "5058f179f7215390fc5a68eeffcb805b7e2681d6e817a5d08094fae7ab649e68"
dependencies = [
"dunce",
"log",
@ -5952,9 +5948,9 @@ dependencies = [
[[package]]
name = "tauri-plugin-updater"
version = "2.0.1"
version = "2.0.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "67634d7fb3d5f4c7a85c35d1522c6c60d70b4b0d598c7e60bbcaddb853b970f6"
checksum = "1dd3d2fe0f02bf52eebb5a9d23b987fffac6684646ab6fd683d706dafb18da87"
dependencies = [
"base64 0.22.1",
"dirs",
@ -5982,9 +5978,9 @@ dependencies = [
[[package]]
name = "tauri-plugin-upload"
version = "2.0.0"
version = "2.0.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "1f650dfcbf1dd90936dac4c5676f4fe9bb501d5b9f561f4158141ff6abbf114f"
checksum = "116754130d3f95cf73552a0723376186a8f21607ac5ff350980af87a0eccba73"
dependencies = [
"futures-util",
"log",
@ -6001,9 +5997,9 @@ dependencies = [
[[package]]
name = "tauri-plugin-window-state"
version = "2.0.0"
version = "2.0.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "47f5bdd802302c72e6e52f786d4d7abc976a8a7938b05c121ae689106bcd4a40"
checksum = "fd1cef203a15b4772898e7bc8e57c1f34696e39848987dfcd294d51ba0525650"
dependencies = [
"bitflags 2.6.0",
"log",
@ -6016,9 +6012,9 @@ dependencies = [
[[package]]
name = "tauri-runtime"
version = "2.0.0"
version = "2.0.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "2570e1f33f332a2d2d9967ebb3903bc4e1f92b9c47e4d1b302c10ea4153fcdbb"
checksum = "af12ad1af974b274ef1d32a94e6eba27a312b429ef28fcb98abc710df7f9151d"
dependencies = [
"dpi",
"gtk",
@ -6035,9 +6031,9 @@ dependencies = [
[[package]]
name = "tauri-runtime-wry"
version = "2.0.0"
version = "2.0.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "8147d8f9ed418d83a90af3d64fbdca5e0e924ae28e5351da88f9568169db8665"
checksum = "e45e88aa0b11b302d836e6ea3e507a6359044c4a8bc86b865ba99868c695753d"
dependencies = [
"gtk",
"http",
@ -6089,9 +6085,9 @@ dependencies = [
[[package]]
name = "tauri-utils"
version = "2.0.0"
version = "2.0.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f87856e9d7fa91fd710362f3c73fccbf6bfd036934908791e65bd803d54dc8a8"
checksum = "c38b0230d6880cf6dd07b6d7dd7789a0869f98ac12146e0d18d1c1049215a045"
dependencies = [
"brotli",
"cargo_metadata",

View File

@ -5,7 +5,7 @@ use specta::Type;
use std::{str::FromStr, time::Duration};
use tauri::State;
use crate::common::{create_tags, parse_event, process_event, Meta};
use crate::common::{create_tags, get_latest_event, parse_event, process_event, Meta};
use crate::{Nostr, DEFAULT_DIFFICULTY, FETCH_LIMIT};
#[derive(Debug, Clone, Serialize, Type)]
@ -30,7 +30,7 @@ pub async fn get_event(id: String, state: State<'_, Nostr>) -> Result<RichEvent,
match client.database().query(vec![filter.clone()]).await {
Ok(events) => {
if let Some(event) = events.first() {
if let Some(event) = get_latest_event(&events) {
let raw = event.as_json();
let parsed = if event.kind == Kind::TextNote {
Some(parse_event(&event.content).await)
@ -40,26 +40,25 @@ pub async fn get_event(id: String, state: State<'_, Nostr>) -> Result<RichEvent,
Ok(RichEvent { raw, parsed })
} else {
println!("Not found, getting event from relays...");
match client
.get_events_of(
vec![filter],
EventSource::relays(Some(Duration::from_secs(5))),
)
.stream_events_of(vec![filter], Some(Duration::from_secs(10)))
.await
{
Ok(events) => {
if let Some(event) = events.first() {
let raw = event.as_json();
let parsed = if event.kind == Kind::TextNote {
Ok(mut rx) => {
let mut raw: String = String::new();
let mut parsed: Option<Meta> = None;
while let Some(event) = rx.next().await {
raw = event.as_json();
parsed = if event.kind == Kind::TextNote {
Some(parse_event(&event.content).await)
} else {
None
};
Ok(RichEvent { raw, parsed })
} else {
Err("Cannot found this event with current relay list".into())
}
Ok(RichEvent { raw, parsed })
}
Err(err) => Err(err.to_string()),
}
@ -548,31 +547,11 @@ pub async fn user_to_bech32(user: String, state: State<'_, Nostr>) -> Result<Str
#[tauri::command]
#[specta::specta]
pub async fn search(
query: String,
until: Option<String>,
state: State<'_, Nostr>,
) -> Result<Vec<RichEvent>, String> {
pub async fn search(query: String, state: State<'_, Nostr>) -> Result<Vec<RichEvent>, String> {
let client = &state.client;
let filter = Filter::new().search(query);
let timestamp = match until {
Some(str) => Timestamp::from_str(&str).map_err(|err| err.to_string())?,
None => Timestamp::now(),
};
let filter = Filter::new()
.kinds(vec![Kind::TextNote, Kind::Metadata])
.search(query)
.until(timestamp)
.limit(FETCH_LIMIT);
match client
.get_events_of(
vec![filter],
EventSource::both(Some(Duration::from_secs(5))),
)
.await
{
match client.database().query(vec![filter]).await {
Ok(events) => Ok(process_event(client, events).await),
Err(e) => Err(e.to_string()),
}

View File

@ -6,7 +6,10 @@ use std::{str::FromStr, time::Duration};
use tauri::{Emitter, Manager, State};
use tauri_specta::Event;
use crate::{common::get_latest_event, NewSettings, Nostr, Settings};
use crate::{
common::{get_latest_event, process_event},
NewSettings, Nostr, RichEvent, Settings,
};
#[derive(Clone, Serialize, Deserialize, Type)]
pub struct Profile {
@ -55,23 +58,23 @@ pub async fn get_profile(id: Option<String>, state: State<'_, Nostr>) -> Result<
Err("Parse metadata failed".into())
}
} else {
println!("Not found, getting event from relays...");
match client
.get_events_of(
vec![filter],
EventSource::relays(Some(Duration::from_secs(5))),
)
.stream_events_of(vec![filter], Some(Duration::from_secs(10)))
.await
{
Ok(events) => {
if let Some(event) = get_latest_event(&events) {
if let Ok(metadata) = Metadata::from_json(&event.content) {
Ok(metadata.as_json())
} else {
Err("Parse metadata failed".into())
Ok(mut rx) => {
let mut metadata: String = Metadata::new().as_json();
while let Some(event) = rx.next().await {
println!("Event: {}", event.as_json());
if let Ok(m) = Metadata::from_json(&event.content) {
metadata = m.as_json();
break;
}
} else {
Ok(Metadata::new().as_json())
}
Ok(metadata)
}
Err(e) => Err(e.to_string()),
}
@ -106,7 +109,6 @@ pub async fn set_contact_list(
#[specta::specta]
pub async fn get_contact_list(state: State<'_, Nostr>) -> Result<Vec<String>, String> {
let contact_list = state.contact_list.lock().await.clone();
println!("Total contacts: {}", contact_list.len());
let vec: Vec<String> = contact_list
.into_iter()
.map(|f| f.public_key.to_hex())
@ -255,13 +257,7 @@ pub async fn get_group(id: String, state: State<'_, Nostr>) -> Result<String, St
let event_id = EventId::from_str(&id).map_err(|e| e.to_string())?;
let filter = Filter::new().kind(Kind::FollowSet).id(event_id);
match client
.get_events_of(
vec![filter],
EventSource::both(Some(Duration::from_secs(5))),
)
.await
{
match client.database().query(vec![filter]).await {
Ok(events) => match get_latest_event(&events) {
Some(ev) => Ok(ev.as_json()),
None => Err("Not found.".to_string()),
@ -272,20 +268,14 @@ pub async fn get_group(id: String, state: State<'_, Nostr>) -> Result<String, St
#[tauri::command]
#[specta::specta]
pub async fn get_all_groups(state: State<'_, Nostr>) -> Result<Vec<String>, String> {
pub async fn get_all_groups(state: State<'_, Nostr>) -> Result<Vec<RichEvent>, String> {
let client = &state.client;
let signer = client.signer().await.map_err(|e| e.to_string())?;
let public_key = signer.public_key().await.map_err(|e| e.to_string())?;
let filter = Filter::new().kind(Kind::FollowSet).author(public_key);
match client
.get_events_of(vec![filter], EventSource::Database)
.await
{
Ok(events) => {
let data: Vec<String> = events.iter().map(|ev| ev.as_json()).collect();
Ok(data)
}
match client.database().query(vec![filter]).await {
Ok(events) => Ok(process_event(client, events).await),
Err(e) => Err(e.to_string()),
}
}
@ -347,13 +337,7 @@ pub async fn get_interest(id: String, state: State<'_, Nostr>) -> Result<String,
.kinds(vec![Kind::Interests, Kind::InterestSet])
.id(event_id);
match client
.get_events_of(
vec![filter],
EventSource::both(Some(Duration::from_secs(5))),
)
.await
{
match client.database().query(vec![filter]).await {
Ok(events) => match get_latest_event(&events) {
Some(ev) => Ok(ev.as_json()),
None => Err("Not found.".to_string()),
@ -364,7 +348,7 @@ pub async fn get_interest(id: String, state: State<'_, Nostr>) -> Result<String,
#[tauri::command]
#[specta::specta]
pub async fn get_all_interests(state: State<'_, Nostr>) -> Result<Vec<String>, String> {
pub async fn get_all_interests(state: State<'_, Nostr>) -> Result<Vec<RichEvent>, String> {
let client = &state.client;
let signer = client.signer().await.map_err(|e| e.to_string())?;
let public_key = signer.public_key().await.map_err(|e| e.to_string())?;
@ -372,14 +356,8 @@ pub async fn get_all_interests(state: State<'_, Nostr>) -> Result<Vec<String>, S
.kinds(vec![Kind::InterestSet, Kind::Interests])
.author(public_key);
match client
.get_events_of(vec![filter], EventSource::Database)
.await
{
Ok(events) => {
let data: Vec<String> = events.iter().map(|ev| ev.as_json()).collect();
Ok(data)
}
match client.database().query(vec![filter]).await {
Ok(events) => Ok(process_event(client, events).await),
Err(e) => Err(e.to_string()),
}
}

View File

@ -182,7 +182,7 @@ async getGroup(id: string) : Promise<Result<string, string>> {
else return { status: "error", error: e as any };
}
},
async getAllGroups() : Promise<Result<string[], string>> {
async getAllGroups() : Promise<Result<RichEvent[], string>> {
try {
return { status: "ok", data: await TAURI_INVOKE("get_all_groups") };
} catch (e) {
@ -206,7 +206,7 @@ async getInterest(id: string) : Promise<Result<string, string>> {
else return { status: "error", error: e as any };
}
},
async getAllInterests() : Promise<Result<string[], string>> {
async getAllInterests() : Promise<Result<RichEvent[], string>> {
try {
return { status: "ok", data: await TAURI_INVOKE("get_all_interests") };
} catch (e) {
@ -398,9 +398,9 @@ async requestDelete(id: string) : Promise<Result<null, string>> {
else return { status: "error", error: e as any };
}
},
async search(query: string, until: string | null) : Promise<Result<RichEvent[], string>> {
async search(query: string) : Promise<Result<RichEvent[], string>> {
try {
return { status: "ok", data: await TAURI_INVOKE("search", { query, until }) };
return { status: "ok", data: await TAURI_INVOKE("search", { query }) };
} catch (e) {
if(e instanceof Error) throw e;
else return { status: "error", error: e as any };

View File

@ -2,7 +2,11 @@ import { replyTime } from "@/commons";
import { Note, Spinner } from "@/components";
import { User } from "@/components/user";
import { LumeWindow, useEvent } from "@/system";
import { memo } from "react";
import { nip19 } from "nostr-tools";
import { type ReactNode, memo, useMemo } from "react";
import reactStringReplace from "react-string-replace";
import { Hashtag } from "./hashtag";
import { MentionUser } from "./user";
export const MentionNote = memo(function MentionNote({
eventId,
@ -36,9 +40,11 @@ export const MentionNote = memo(function MentionNote({
/>
</User.Root>
<div className="pl-2 inline select-text text-balance content-break overflow-hidden">
{event.content.length > 120
? `${event.content.substring(0, 120)}...`
: event.content}
{event.content.length > 300 ? (
`${event.content.substring(0, 300)}...`
) : (
<Content text={event.content} className="inline" />
)}
</div>
</div>
<div className="flex-1 flex items-center justify-between">
@ -66,3 +72,64 @@ export const MentionNote = memo(function MentionNote({
</div>
);
});
function Content({ text, className }: { text: string; className?: string }) {
const content = useMemo(() => {
let replacedText: ReactNode[] | string = text.trim();
const nostr = replacedText
.split(/\s+/)
.filter((w) => w.startsWith("nostr:"));
replacedText = reactStringReplace(text, /(https?:\/\/\S+)/g, (match, i) => (
<a
key={match + i}
href={match}
target="_blank"
rel="noreferrer"
className="text-blue-600 dark:text-blue-400 !underline"
>
{match}
</a>
));
replacedText = reactStringReplace(replacedText, /#(\w+)/g, (match, i) => (
<Hashtag key={match + i} tag={match} />
));
for (const word of nostr) {
const bech32 = word.replace("nostr:", "");
const data = nip19.decode(bech32);
switch (data.type) {
case "npub":
replacedText = reactStringReplace(replacedText, word, (match, i) => (
<MentionUser key={match + i} pubkey={data.data} />
));
break;
case "nprofile":
replacedText = reactStringReplace(replacedText, word, (match, i) => (
<MentionUser key={match + i} pubkey={data.data.pubkey} />
));
break;
default:
replacedText = reactStringReplace(replacedText, word, (match, i) => (
<a
key={match + i}
href={`https://njump.me/${bech32}`}
target="_blank"
rel="noreferrer"
className="text-blue-600 dark:text-blue-400 !underline"
>
{match}
</a>
));
break;
}
}
return replacedText;
}, [text]);
return <div className={className}>{content}</div>;
}

View File

@ -1,4 +1,5 @@
import { commands } from "@/commands.gen";
import { toLumeEvents } from "@/commons";
import { Spinner, User } from "@/components";
import { LumeWindow } from "@/system";
import type { LumeColumn, NostrEvent } from "@/types";
@ -8,6 +9,7 @@ import { useQuery } from "@tanstack/react-query";
import { createLazyFileRoute } from "@tanstack/react-router";
import { resolveResource } from "@tauri-apps/api/path";
import { readTextFile } from "@tauri-apps/plugin-fs";
import { nanoid } from "nanoid";
import { useCallback } from "react";
export const Route = createLazyFileRoute("/columns/_layout/launchpad")({
@ -101,7 +103,7 @@ function MyGroups() {
const res = await commands.getAllGroups();
if (res.status === "ok") {
const data = res.data.map((item) => JSON.parse(item) as NostrEvent);
const data = toLumeEvents(res.data);
return data;
} else {
throw new Error(res.error);
@ -118,6 +120,7 @@ function MyGroups() {
(item: NostrEvent) => {
const name =
item.tags.find((tag) => tag[0] === "title")?.[1] || "Unnamed";
const label = item.tags.find((tag) => tag[0] === "d")?.[1] || nanoid();
return (
<div
@ -144,7 +147,7 @@ function MyGroups() {
type="button"
onClick={() =>
LumeWindow.openColumn({
label: name,
label,
name,
url: `/columns/groups/${item.id}`,
})
@ -211,7 +214,7 @@ function MyInterests() {
const res = await commands.getAllInterests();
if (res.status === "ok") {
const data = res.data.map((item) => JSON.parse(item) as NostrEvent);
const data = toLumeEvents(res.data);
return data;
} else {
throw new Error(res.error);
@ -228,6 +231,8 @@ function MyInterests() {
(item: NostrEvent) => {
const name =
item.tags.find((tag) => tag[0] === "title")?.[1] || "Unnamed";
const label =
item.tags.find((tag) => tag[0] === "label")?.[1] || nanoid();
return (
<div
@ -250,7 +255,7 @@ function MyInterests() {
type="button"
onClick={() =>
LumeWindow.openColumn({
label: name,
label,
name,
url: `/columns/interests/${item.id}`,
})

View File

@ -27,12 +27,18 @@ function Screen() {
switch (event.kind) {
case Kind.Text:
return <TextNote key={event.id} event={event} className="mb-3" />;
return (
<TextNote
key={event.id}
event={event}
className="border-b-[.5px] border-neutral-300 dark:border-neutral-700"
/>
);
case Kind.Metadata:
return (
<div
key={event.id}
className="p-3 mb-3 bg-white dark:bg-black/20 rounded-xl shadow-primary dark:ring-1 dark:ring-white/5"
className="p-3 border-b-[.5px] border-neutral-300 dark:border-neutral-700"
>
<User.Provider pubkey={event.pubkey}>
<User.Root className="flex flex-col w-full h-full gap-2">
@ -61,7 +67,13 @@ function Screen() {
</div>
);
default:
return <TextNote key={event.id} event={event} className="mb-3" />;
return (
<TextNote
key={event.id}
event={event}
className="border-b-[.5px] border-neutral-300 dark:border-neutral-700"
/>
);
}
},
[events],
@ -71,7 +83,7 @@ function Screen() {
startTransition(async () => {
if (!query.length) return;
const res = await commands.search(query, null);
const res = await commands.search(query);
if (res.status === "ok") {
const data = toLumeEvents(res.data);
@ -114,7 +126,7 @@ function Screen() {
scrollHideDelay={300}
className="overflow-hidden size-full flex-1"
>
<ScrollArea.Viewport ref={ref} className="relative h-full px-3">
<ScrollArea.Viewport ref={ref} className="relative h-full">
<Virtualizer scrollRef={ref}>
{isPending ? (
<div className="w-full h-[200px] flex gap-2 items-center justify-center">

View File

@ -1,12 +1,17 @@
import { commands } from "@/commands.gen";
import { replyTime, toLumeEvents } from "@/commons";
import { Note, Spinner, User } from "@/components";
import { Hashtag } from "@/components/note/mentions/hashtag";
import { MentionUser } from "@/components/note/mentions/user";
import { type LumeEvent, LumeWindow } from "@/system";
import { ColumnsPlusLeft } from "@phosphor-icons/react";
import { Kind } from "@/types";
import { ArrowRight } from "@phosphor-icons/react";
import * as ScrollArea from "@radix-ui/react-scroll-area";
import { useQuery } from "@tanstack/react-query";
import { createLazyFileRoute } from "@tanstack/react-router";
import { memo, useRef } from "react";
import { nip19 } from "nostr-tools";
import { type ReactNode, memo, useMemo, useRef } from "react";
import reactStringReplace from "react-string-replace";
import { Virtualizer } from "virtua";
export const Route = createLazyFileRoute("/columns/_layout/stories")({
@ -14,7 +19,7 @@ export const Route = createLazyFileRoute("/columns/_layout/stories")({
});
function Screen() {
const { contacts } = Route.useRouteContext();
const contacts = Route.useLoaderData();
const ref = useRef<HTMLDivElement>(null);
return (
@ -25,9 +30,15 @@ function Screen() {
>
<ScrollArea.Viewport ref={ref} className="relative h-full px-3 pb-3">
<Virtualizer scrollRef={ref} overscan={0}>
{contacts.map((contact) => (
<StoryItem key={contact} contact={contact} />
))}
{!contacts ? (
<div className="w-full h-24 flex items-center justify-center">
<Spinner className="size-4" />
</div>
) : (
contacts.map((contact) => (
<StoryItem key={contact} contact={contact} />
))
)}
</Virtualizer>
</ScrollArea.Viewport>
<ScrollArea.Scrollbar
@ -59,6 +70,7 @@ function StoryItem({ contact }: { contact: string }) {
throw new Error(res.error);
}
},
select: (data) => data.filter((ev) => ev.kind === Kind.Text),
refetchOnWindowFocus: false,
});
@ -77,9 +89,10 @@ function StoryItem({ contact }: { contact: string }) {
<button
type="button"
onClick={() => LumeWindow.openProfile(contact)}
className="size-7 inline-flex items-center justify-center rounded-lg text-neutral-500 hover:bg-neutral-100 dark:hover:bg-white/20"
className="h-7 w-max px-2.5 inline-flex gap-1 items-center justify-center rounded-full text-sm font-medium hover:bg-neutral-100 dark:hover:bg-white/20"
>
<ColumnsPlusLeft className="size-4" />
Open
<ArrowRight className="size-3" weight="bold" />
</button>
</div>
</div>
@ -129,9 +142,10 @@ const StoryEvent = memo(function StoryEvent({ event }: { event: LumeEvent }) {
className="shrink-0 inline font-medium text-blue-500"
suffix=":"
/>
<div className="pl-2 inline select-text text-balance content-break overflow-hidden">
{event.content}
</div>
<Content
text={event.content}
className="pl-2 inline select-text text-balance content-break overflow-hidden"
/>
</div>
<div className="flex-1 flex items-center justify-between">
<span className="text-sm text-neutral-500">
@ -148,3 +162,64 @@ const StoryEvent = memo(function StoryEvent({ event }: { event: LumeEvent }) {
</Note.Provider>
);
});
function Content({ text, className }: { text: string; className?: string }) {
const content = useMemo(() => {
let replacedText: ReactNode[] | string = text.trim();
const nostr = replacedText
.split(/\s+/)
.filter((w) => w.startsWith("nostr:"));
replacedText = reactStringReplace(text, /(https?:\/\/\S+)/g, (match, i) => (
<a
key={match + i}
href={match}
target="_blank"
rel="noreferrer"
className="text-blue-600 dark:text-blue-400 !underline"
>
{match}
</a>
));
replacedText = reactStringReplace(replacedText, /#(\w+)/g, (match, i) => (
<Hashtag key={match + i} tag={match} />
));
for (const word of nostr) {
const bech32 = word.replace("nostr:", "");
const data = nip19.decode(bech32);
switch (data.type) {
case "npub":
replacedText = reactStringReplace(replacedText, word, (match, i) => (
<MentionUser key={match + i} pubkey={data.data} />
));
break;
case "nprofile":
replacedText = reactStringReplace(replacedText, word, (match, i) => (
<MentionUser key={match + i} pubkey={data.data.pubkey} />
));
break;
default:
replacedText = reactStringReplace(replacedText, word, (match, i) => (
<a
key={match + i}
href={`https://njump.me/${bech32}`}
target="_blank"
rel="noreferrer"
className="text-blue-600 dark:text-blue-400 !underline"
>
{match}
</a>
));
break;
}
}
return replacedText;
}, [text]);
return <div className={className}>{content}</div>;
}

View File

@ -2,12 +2,11 @@ import { commands } from "@/commands.gen";
import { createFileRoute } from "@tanstack/react-router";
export const Route = createFileRoute("/columns/_layout/stories")({
beforeLoad: async () => {
loader: async () => {
const res = await commands.getContactList();
if (res.status === "ok") {
const contacts = res.data;
return { contacts };
return res.data;
} else {
throw new Error(res.error);
}