From 7ea3b322863b54a24a6820015061e65e5b6bf61a Mon Sep 17 00:00:00 2001 From: Alois Date: Sun, 24 May 2026 18:31:27 +0200 Subject: [PATCH 01/13] (feat): add native notifications (feat): add navbar profile popover (fix): chat input box click area to slim (qol): format --- apps/tauri/render-version.ts | 20 ++----- apps/web/src/components/modals/profile.tsx | 34 +++++++++++ apps/web/src/components/navbar.tsx | 37 ++++++++---- bun.lock | 1 + packages/call/src/store.tsx | 26 +++++---- packages/chat/src/components/input.tsx | 1 + packages/notifications/package.json | 1 + packages/notifications/src/context.tsx | 68 +++++++++++++++------- packages/ttp/src/context.tsx | 2 +- 9 files changed, 131 insertions(+), 59 deletions(-) create mode 100644 apps/web/src/components/modals/profile.tsx diff --git a/apps/tauri/render-version.ts b/apps/tauri/render-version.ts index 96f1c10..0bd3fca 100644 --- a/apps/tauri/render-version.ts +++ b/apps/tauri/render-version.ts @@ -12,9 +12,7 @@ const tauriConfigPath = path.resolve(__dirname, "./src-tauri/tauri.conf.json"); const isUnrender = process.argv.includes("--unrender"); // Version Source -const packageJson = JSON.parse( - fs.readFileSync(rootPackageJsonPath, "utf8") -); +const packageJson = JSON.parse(fs.readFileSync(rootPackageJsonPath, "utf8")); const packageVersion: string = packageJson.version; @@ -22,9 +20,7 @@ if (!packageVersion && !isUnrender) { throw new Error("No version found in package.json"); } -const targetVersion = isUnrender - ? PLACEHOLDER_VERSION - : packageVersion; +const targetVersion = isUnrender ? PLACEHOLDER_VERSION : packageVersion; // Helpers function updateCargoToml(content: string): string { @@ -34,10 +30,7 @@ function updateCargoToml(content: string): string { throw new Error("Could not find version field in Cargo.toml"); } - return content.replace( - regex, - `version = "${targetVersion}"` - ); + return content.replace(regex, `version = "${targetVersion}"`); } function updateTauriConfig(content: string): string { @@ -47,10 +40,7 @@ function updateTauriConfig(content: string): string { throw new Error("Could not find version field in tauri.conf.json"); } - return content.replace( - regex, - `"version": "${targetVersion}"` - ); + return content.replace(regex, `"version": "${targetVersion}"`); } // Update Cargo.toml @@ -72,4 +62,4 @@ if (isUnrender) { console.log(`Unrendered versions back to ${PLACEHOLDER_VERSION}`); } else { console.log(`Rendered version ${targetVersion}`); -} \ No newline at end of file +} diff --git a/apps/web/src/components/modals/profile.tsx b/apps/web/src/components/modals/profile.tsx new file mode 100644 index 0000000..6a31e36 --- /dev/null +++ b/apps/web/src/components/modals/profile.tsx @@ -0,0 +1,34 @@ +import type { User } from "@tensamin/user/context"; +import { Avatar, AvatarFallback, AvatarImage } from "@tensamin/ui"; +import Text from "@tensamin/markdown/text"; + +export default function Profile({ user }: { user: User }) { + return ( +
+
+ + + + {user.display.slice(0, 2).toUpperCase()} + + +
+

{user.display}

+

{user.username}

+
+
+ +
+

+ iota: {user.iota_id} +

+

+ user: {user.user_id} +

+

+ pub key: {user.public_key} +

+
+
+ ); +} diff --git a/apps/web/src/components/navbar.tsx b/apps/web/src/components/navbar.tsx index 9e3ec9d..57f9d24 100644 --- a/apps/web/src/components/navbar.tsx +++ b/apps/web/src/components/navbar.tsx @@ -1,7 +1,8 @@ -import { Button } from "@tensamin/ui"; +import { Button, Popover, PopoverContent, PopoverTrigger } from "@tensamin/ui"; import { ArrowLeft, ChevronDown, + ChevronUp, House, Phone, Settings, @@ -17,6 +18,7 @@ import { useState } from "react"; import { SidebarTrigger, useSidebar } from "@tensamin/ui"; import { WindowControls as Controls } from "@tensamin/ui"; import { useSession } from "@tensamin/storage/session"; +import Profile from "./modals/profile"; export default function Navbar({ forMobile }: { forMobile: boolean }) { const navigate = useNavigate(); @@ -33,6 +35,8 @@ export default function Navbar({ forMobile }: { forMobile: boolean }) { const [selectOpen, setSelectOpen] = useState(false); + const [userInfoOpen, setUserInfoOpen] = useState(false); + return (
( - + <> + + +

{user?.display}

+ {userInfoOpen ? : } + + } + /> + + + +
+ )} loading={} /> diff --git a/bun.lock b/bun.lock index a15bdbe..1f1b34a 100644 --- a/bun.lock +++ b/bun.lock @@ -171,6 +171,7 @@ "name": "@tensamin/notifications", "version": "0.0.0", "dependencies": { + "@tanstack/react-router": "^1.169.1", "@tauri-apps/api": "^2.11.0", "@tensamin/chat": "workspace:*", "@tensamin/crypto": "workspace:*", diff --git a/packages/call/src/store.tsx b/packages/call/src/store.tsx index 5b49603..5398e70 100644 --- a/packages/call/src/store.tsx +++ b/packages/call/src/store.tsx @@ -295,13 +295,15 @@ async function updateLocalParticipantAttributes( screenSharePreviewLength: attributes.screenSharePreview?.length ?? 0, }); - await getRoom().localParticipant.setAttributes(attributes).catch((error) => { - log(1, "call", "red", "Failed to update local participant attributes", { - attributes: Object.keys(attributes), - error, + await getRoom() + .localParticipant.setAttributes(attributes) + .catch((error) => { + log(1, "call", "red", "Failed to update local participant attributes", { + attributes: Object.keys(attributes), + error, + }); + throw error; }); - throw error; - }); log(2, "call", "purple", "Updated local participant attributes", { attributeKeys: Object.keys(attributes), @@ -795,11 +797,13 @@ export async function connect(callId: string) { syncAllRemoteTrackSubscriptions(); - await getRoom().localParticipant.setMicrophoneEnabled(true).catch((error) => { - log(1, "call", "red", "Failed to enable microphone", error); - toast("error", "Failed to enable microphone."); - throw error; - }); + await getRoom() + .localParticipant.setMicrophoneEnabled(true) + .catch((error) => { + log(1, "call", "red", "Failed to enable microphone", error); + toast("error", "Failed to enable microphone."); + throw error; + }); syncParticipantState(); } diff --git a/packages/chat/src/components/input.tsx b/packages/chat/src/components/input.tsx index b2aef9e..cf74848 100644 --- a/packages/chat/src/components/input.tsx +++ b/packages/chat/src/components/input.tsx @@ -97,6 +97,7 @@ export default function InputComponent({ > (undefined); -function reduceDisplay(display: string) { - const words = display.split(" "); - if (words.length === 1) { - return display.slice(0, 2).toUpperCase(); - } else { - return words[0].charAt(0).toUpperCase() + words[1].charAt(0).toUpperCase(); - } +async function requestNotificationPermission() { + if (!("Notification" in window)) return false; + + if (Notification.permission === "granted") return true; + + const permission = await Notification.requestPermission(); + return permission === "granted"; } export default function Provider(props: { children: React.ReactNode }) { @@ -29,6 +30,7 @@ export default function Provider(props: { children: React.ReactNode }) { const { decryptText, getSharedSecret } = useCrypto(); const { addLiveMessage, userId } = useChat(); const { moveUserIdToTop } = useSession(); + const navigate = useNavigate(); useEffect(() => { return subscribePush(async (ttpMessage) => { @@ -54,7 +56,7 @@ export default function Provider(props: { children: React.ReactNode }) { (await load("settings.read_confirmations")) && userId === sender_id ) { - await send( + void send( "message_state", { message_state: "read", @@ -64,7 +66,7 @@ export default function Provider(props: { children: React.ReactNode }) { }, ); } else { - await send( + void send( "message_state", { message_state: "received", @@ -92,18 +94,41 @@ export default function Provider(props: { children: React.ReactNode }) { if (isTauri()) { console.log("weewoo"); } else { - sonnerToast(user.display, { - classNames: { - content: "pl-4", - }, - description: decryptedContent, - icon: ( - - - {reduceDisplay(user.display)} - - ), - }); + const hasPermissions = await requestNotificationPermission(); + + if (hasPermissions) { + const notification = new Notification(user.display, { + body: decryptedContent, + icon: user.avatar || user.display.slice(0, 2).toUpperCase(), + badge: user.avatar || user.display.slice(0, 2).toUpperCase(), + tag: `message-${user.user_id}`, + silent: true, + }); + + notification.onclick = () => { + window.focus(); + navigate({ + to: `/chat?id=${user.user_id}`, + }); + + notification.close(); + }; + } else { + sonnerToast(user.display, { + classNames: { + content: "pl-4", + }, + description: decryptedContent, + icon: ( + + + + {user.display.slice(0, 2).toUpperCase()} + + + ), + }); + } } } }); @@ -117,6 +142,7 @@ export default function Provider(props: { children: React.ReactNode }) { userId, moveUserIdToTop, send, + navigate, ]); return ( diff --git a/packages/ttp/src/context.tsx b/packages/ttp/src/context.tsx index 2f8fc40..d33313d 100644 --- a/packages/ttp/src/context.tsx +++ b/packages/ttp/src/context.tsx @@ -257,7 +257,7 @@ export function Provider(props: { setErrorDescription( "You could try to restart your Iota, check for updates or check your network connection.", ); - }) + }); }, [connected, subscribePush]); useEffect(() => { From d297282320da8808cab5d43c0d46655532a1bd31 Mon Sep 17 00:00:00 2001 From: Alois Date: Sun, 24 May 2026 20:37:57 +0200 Subject: [PATCH 02/13] (fix): chat message measurement (qol): update todos --- packages/call/todo.md | 1 - packages/chat/src/screen.tsx | 49 +++++++++++++++++++++++++++++++++--- packages/chat/todo.md | 1 + 3 files changed, 47 insertions(+), 4 deletions(-) create mode 100644 packages/chat/todo.md diff --git a/packages/call/todo.md b/packages/call/todo.md index 61d70ed..4db4db0 100644 --- a/packages/call/todo.md +++ b/packages/call/todo.md @@ -11,4 +11,3 @@ - Desktop-App screenshares - Context menus - Popout Window -- If micGated=true & isSpeaking=false for 5 seconds show banner with mic detection diff --git a/packages/chat/src/screen.tsx b/packages/chat/src/screen.tsx index 30344a5..f72580d 100644 --- a/packages/chat/src/screen.tsx +++ b/packages/chat/src/screen.tsx @@ -8,6 +8,7 @@ import Message from "./components/message"; import { PAGE_SIZE } from "./values"; import { useIsMobile } from "@tensamin/ui"; +import { Loader2 } from "lucide-react"; function getDistanceFromBottom(element: HTMLDivElement) { return element.scrollHeight - (element.scrollTop + element.clientHeight); @@ -360,9 +361,38 @@ export default function Screen() { return; } - scrollRef.current.scrollTop = scrollRef.current.scrollHeight; - isAtBottomRef.current = true; - setHasScrolledToBottomInitially(true); + let rafId: number; + let stableFrames = 0; + let lastScrollHeight = 0; + + const settleToBottom = () => { + if (!scrollRef.current || hasScrolledToBottomInitially) { + return; + } + + scrollRef.current.scrollTop = scrollRef.current.scrollHeight; + const currentScrollHeight = scrollRef.current.scrollHeight; + + if (currentScrollHeight === lastScrollHeight) { + stableFrames++; + } else { + stableFrames = 0; + lastScrollHeight = currentScrollHeight; + } + + if (stableFrames >= 2) { + isAtBottomRef.current = true; + setHasScrolledToBottomInitially(true); + } else { + rafId = requestAnimationFrame(settleToBottom); + } + }; + + settleToBottom(); + + return () => { + cancelAnimationFrame(rafId); + }; }, [hasScrolledToBottomInitially, virtualRowCount]); React.useLayoutEffect(() => { @@ -442,6 +472,19 @@ export default function Screen() { }} onScroll={handleContainerScroll} > + {messagesQuery.isPending && ( +
+

+ + Loading... +

+
+ )} + {messagesQuery.isFetchingNextPage && ( +
+ +
+ )}
Date: Sun, 24 May 2026 20:50:28 +0200 Subject: [PATCH 03/13] (fix): android icons --- apps/tauri/background.png | Bin 0 -> 8083103 bytes apps/tauri/logo.json | 7 +++++++ apps/tauri/package.json | 2 +- .../res/mipmap-anydpi-v26/ic_launcher.xml | 2 +- .../src/main/res/mipmap-hdpi/ic_launcher.png | Bin 3785 -> 3047 bytes .../mipmap-hdpi/ic_launcher_background.png | Bin 0 -> 1632 bytes .../res/mipmap-hdpi/ic_launcher_round.png | Bin 3942 -> 3698 bytes .../src/main/res/mipmap-mdpi/ic_launcher.png | Bin 3676 -> 2988 bytes .../mipmap-mdpi/ic_launcher_background.png | Bin 0 -> 758 bytes .../res/mipmap-mdpi/ic_launcher_round.png | Bin 3834 -> 3532 bytes .../src/main/res/mipmap-xhdpi/ic_launcher.png | Bin 9501 -> 8152 bytes .../mipmap-xhdpi/ic_launcher_background.png | Bin 0 -> 4233 bytes .../res/mipmap-xhdpi/ic_launcher_round.png | Bin 9980 -> 9190 bytes .../main/res/mipmap-xxhdpi/ic_launcher.png | Bin 16607 -> 14393 bytes .../mipmap-xxhdpi/ic_launcher_background.png | Bin 0 -> 12131 bytes .../res/mipmap-xxhdpi/ic_launcher_round.png | Bin 17595 -> 16416 bytes .../main/res/mipmap-xxxhdpi/ic_launcher.png | Bin 24048 -> 22000 bytes .../mipmap-xxxhdpi/ic_launcher_background.png | Bin 0 -> 26271 bytes .../res/mipmap-xxxhdpi/ic_launcher_round.png | Bin 25515 -> 24433 bytes apps/tauri/src-tauri/icons/icon.icns | Bin 237403 -> 237403 bytes 20 files changed, 9 insertions(+), 2 deletions(-) create mode 100644 apps/tauri/background.png create mode 100644 apps/tauri/logo.json create mode 100644 apps/tauri/src-tauri/gen/android/app/src/main/res/mipmap-hdpi/ic_launcher_background.png create mode 100644 apps/tauri/src-tauri/gen/android/app/src/main/res/mipmap-mdpi/ic_launcher_background.png create mode 100644 apps/tauri/src-tauri/gen/android/app/src/main/res/mipmap-xhdpi/ic_launcher_background.png create mode 100644 apps/tauri/src-tauri/gen/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_background.png create mode 100644 apps/tauri/src-tauri/gen/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_background.png diff --git a/apps/tauri/background.png b/apps/tauri/background.png new file mode 100644 index 0000000000000000000000000000000000000000..e6157bd6faee0c65820e8df8adc8014d8a9d81c5 GIT binary patch literal 8083103 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
` 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

); diff --git a/apps/web/src/components/screens/login/form.tsx b/apps/web/src/components/screens/login/form.tsx index f275840..e318c4b 100644 --- a/apps/web/src/components/screens/login/form.tsx +++ b/apps/web/src/components/screens/login/form.tsx @@ -1,4 +1,4 @@ -import { Button, cn } from "@tensamin/ui"; +import { Button, cn, useIsMobile } from "@tensamin/ui"; import { Input } from "@tensamin/ui"; import { Label } from "@tensamin/ui"; import { useStorage } from "@tensamin/storage/context"; @@ -84,6 +84,7 @@ function parseTuFileContent(rawFileContent: string): { } export default function Form() { + const isMobile = useIsMobile(); const uploadRef = React.useRef(null); const [isDragging, setIsDragging] = React.useState(false); const { save } = useStorage(); @@ -266,7 +267,7 @@ export default function Form() { return (
- {isTauri() ? ( + {isTauri() && isMobile ? ( <> { From edfb0378649d84435a3ebadde5d990da103dff76 Mon Sep 17 00:00:00 2001 From: Alois Date: Mon, 25 May 2026 00:00:10 +0200 Subject: [PATCH 07/13] (fix): lowercase name on android --- apps/tauri/src-tauri/Cargo.lock | 34 +++++++++---------- apps/tauri/src-tauri/Cargo.toml | 2 +- .../app/src/main/res/values/strings.xml | 4 +-- apps/tauri/src-tauri/tauri.conf.json | 2 +- 4 files changed, 21 insertions(+), 21 deletions(-) diff --git a/apps/tauri/src-tauri/Cargo.lock b/apps/tauri/src-tauri/Cargo.lock index 5f4671d..77d465a 100644 --- a/apps/tauri/src-tauri/Cargo.lock +++ b/apps/tauri/src-tauri/Cargo.lock @@ -2,23 +2,6 @@ # It is not intended for manual editing. version = 4 -[[package]] -name = "Tensamin" -version = "0.0.0" -dependencies = [ - "base64 0.22.1", - "image 0.25.10", - "serde", - "serde_json", - "tauri", - "tauri-build 2.5.6 (registry+https://github.com/rust-lang/crates.io-index)", - "tauri-plugin-app-events", - "tauri-plugin-barcode-scanner", - "tauri-plugin-deep-link", - "tauri-plugin-opener", - "xcap", -] - [[package]] name = "adler2" version = "2.0.1" @@ -4853,6 +4836,23 @@ dependencies = [ "utf-8", ] +[[package]] +name = "tensamin" +version = "0.0.0" +dependencies = [ + "base64 0.22.1", + "image 0.25.10", + "serde", + "serde_json", + "tauri", + "tauri-build 2.5.6 (registry+https://github.com/rust-lang/crates.io-index)", + "tauri-plugin-app-events", + "tauri-plugin-barcode-scanner", + "tauri-plugin-deep-link", + "tauri-plugin-opener", + "xcap", +] + [[package]] name = "thiserror" version = "1.0.69" diff --git a/apps/tauri/src-tauri/Cargo.toml b/apps/tauri/src-tauri/Cargo.toml index 4349e3b..c5b2b18 100644 --- a/apps/tauri/src-tauri/Cargo.toml +++ b/apps/tauri/src-tauri/Cargo.toml @@ -1,5 +1,5 @@ [package] -name = "Tensamin" +name = "tensamin" version = "0.0.0" description = "Privacy focused messanger" authors = ["methanium"] diff --git a/apps/tauri/src-tauri/gen/android/app/src/main/res/values/strings.xml b/apps/tauri/src-tauri/gen/android/app/src/main/res/values/strings.xml index e9951d1..2551e9e 100644 --- a/apps/tauri/src-tauri/gen/android/app/src/main/res/values/strings.xml +++ b/apps/tauri/src-tauri/gen/android/app/src/main/res/values/strings.xml @@ -1,4 +1,4 @@ - tensamin - tensamin + Tensamin + Tensamin \ No newline at end of file diff --git a/apps/tauri/src-tauri/tauri.conf.json b/apps/tauri/src-tauri/tauri.conf.json index 5651486..cbb8815 100644 --- a/apps/tauri/src-tauri/tauri.conf.json +++ b/apps/tauri/src-tauri/tauri.conf.json @@ -1,6 +1,6 @@ { "$schema": "https://schema.tauri.app/config/2", - "productName": "Tensamin", + "productName": "tensamin", "version": "0.0.0", "mainBinaryName": "tensamin", "identifier": "net.tensamin.client", From 37338f12fbb94f19a38f029161b6c17b9276dac4 Mon Sep 17 00:00:00 2001 From: Alois Date: Mon, 25 May 2026 00:00:33 +0200 Subject: [PATCH 08/13] (feat): rename productName to have a uppercase T --- apps/tauri/src-tauri/tauri.conf.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/tauri/src-tauri/tauri.conf.json b/apps/tauri/src-tauri/tauri.conf.json index cbb8815..5651486 100644 --- a/apps/tauri/src-tauri/tauri.conf.json +++ b/apps/tauri/src-tauri/tauri.conf.json @@ -1,6 +1,6 @@ { "$schema": "https://schema.tauri.app/config/2", - "productName": "tensamin", + "productName": "Tensamin", "version": "0.0.0", "mainBinaryName": "tensamin", "identifier": "net.tensamin.client", From 15138a30da4fda5144570ded42140d6fff111c15 Mon Sep 17 00:00:00 2001 From: Alois Date: Mon, 25 May 2026 00:05:48 +0200 Subject: [PATCH 09/13] (fix): outdated tag recognition --- .forgejo/workflows/deploy-dev.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.forgejo/workflows/deploy-dev.yml b/.forgejo/workflows/deploy-dev.yml index ab7edf1..eca2545 100644 --- a/.forgejo/workflows/deploy-dev.yml +++ b/.forgejo/workflows/deploy-dev.yml @@ -168,7 +168,7 @@ jobs: test -d releases find releases -type f | grep -q . - LATEST_PROD_TAG="$(git tag --list '*-prod' --sort=-v:refname | head -n 1 || true)" + LATEST_PROD_TAG="$(git tag --sort=-v:refname | head -n 1 || true)" if [ -n "$LATEST_PROD_TAG" ]; then RAW_LOG="$(git log "$LATEST_PROD_TAG"..HEAD --pretty=format:'- %s')" From be80e2f3875ad30363809ceccb3ada37243b2df8 Mon Sep 17 00:00:00 2001 From: Alois Date: Mon, 25 May 2026 00:58:49 +0200 Subject: [PATCH 10/13] (fix): actually fix outdated tag recognition --- .forgejo/workflows/deploy-dev.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.forgejo/workflows/deploy-dev.yml b/.forgejo/workflows/deploy-dev.yml index eca2545..6854282 100644 --- a/.forgejo/workflows/deploy-dev.yml +++ b/.forgejo/workflows/deploy-dev.yml @@ -168,7 +168,7 @@ jobs: test -d releases find releases -type f | grep -q . - LATEST_PROD_TAG="$(git tag --sort=-v:refname | head -n 1 || true)" + LATEST_PROD_TAG="$(git for-each-ref refs/tags --sort=-creatordate --format='%(refname:short)' | awk '!/-/' | head -n 1 || true)" if [ -n "$LATEST_PROD_TAG" ]; then RAW_LOG="$(git log "$LATEST_PROD_TAG"..HEAD --pretty=format:'- %s')" From a209ade10b659dad2f221dbb64447162d5d78738 Mon Sep 17 00:00:00 2001 From: Alois Date: Mon, 25 May 2026 13:16:56 +0200 Subject: [PATCH 11/13] (feat): migrate experimental tauri cef to electron (feat): add flake to expose tensamin desktop package (qol): update todo --- .forgejo/workflows/deploy-dev.yml | 35 +- .forgejo/workflows/deploy-prod.yml | 66 ++- apps/electron/.gitignore | 2 + apps/electron/flake.lock | 61 ++ apps/electron/flake.nix | 88 +++ apps/electron/package.json | 69 +++ .../scripts/generate-release-metadata.ts | 62 ++ apps/electron/scripts/generate-signing-key.ts | 11 + apps/electron/src/main/main.ts | 274 +++++++++ apps/electron/src/main/updates.ts | 131 +++++ apps/electron/src/preload/preload.ts | 43 ++ apps/electron/src/shared/ipc.ts | 58 ++ apps/electron/tsconfig.json | 14 + apps/tauri/flake.nix | 32 +- apps/tauri/package.json | 8 - apps/tauri/readme.md | 5 - apps/tauri/src-tauri/Cargo.toml | 20 - apps/tauri/src-tauri/src/lib.rs | 202 ------- apps/tauri/src-tauri/tauri.conf.json | 5 +- apps/web/src/index.tsx | 9 +- apps/web/vite.config.ts | 1 + bun.lock | 538 +++++++++++++++++- flake.lock | 26 + flake.nix | 35 ++ package.json | 7 +- .../call/src/components/screenshareDialog.tsx | 6 +- packages/call/src/screenshare.ts | 128 ++--- packages/call/src/store.tsx | 10 +- packages/call/todo.md | 2 +- packages/shared/package.json | 1 + .../shared/src/desktopMedia.tsx | 47 +- scripts/copy-releases.ts | 112 ++-- 32 files changed, 1649 insertions(+), 459 deletions(-) create mode 100644 apps/electron/.gitignore create mode 100644 apps/electron/flake.lock create mode 100644 apps/electron/flake.nix create mode 100644 apps/electron/package.json create mode 100644 apps/electron/scripts/generate-release-metadata.ts create mode 100644 apps/electron/scripts/generate-signing-key.ts create mode 100644 apps/electron/src/main/main.ts create mode 100644 apps/electron/src/main/updates.ts create mode 100644 apps/electron/src/preload/preload.ts create mode 100644 apps/electron/src/shared/ipc.ts create mode 100644 apps/electron/tsconfig.json delete mode 100644 apps/tauri/readme.md create mode 100644 flake.lock create mode 100644 flake.nix rename apps/tauri/src/context.tsx => packages/shared/src/desktopMedia.tsx (63%) diff --git a/.forgejo/workflows/deploy-dev.yml b/.forgejo/workflows/deploy-dev.yml index 6854282..8bb04f7 100644 --- a/.forgejo/workflows/deploy-dev.yml +++ b/.forgejo/workflows/deploy-dev.yml @@ -2,6 +2,8 @@ on: push: branches: - dev + paths-ignore: + - flake.nix jobs: build-web: @@ -11,7 +13,7 @@ jobs: uses: https://data.forgejo.org/actions/checkout@v4 - name: Install Packages - run: apt-get update && apt-get install -y sudo curl jq + run: apt-get update && apt-get install -y sudo curl jq fakeroot dpkg rpm - name: Install Nix uses: https://github.com/cachix/install-nix-action@v30 @@ -44,7 +46,7 @@ jobs: uses: https://data.forgejo.org/actions/checkout@v4 - name: Install Packages - run: apt-get update && apt-get install -y sudo curl jq + run: apt-get update && apt-get install -y sudo curl jq fakeroot dpkg rpm - name: Install Nix uses: https://github.com/cachix/install-nix-action@v30 @@ -80,6 +82,9 @@ jobs: build-desktop: runs-on: docker + strategy: + matrix: + target: [linux] steps: - name: Check out repo uses: https://data.forgejo.org/actions/checkout@v4 @@ -87,9 +92,6 @@ jobs: - name: Install Packages run: apt-get update && apt-get install -y sudo curl jq - - name: Install Nix - uses: https://github.com/cachix/install-nix-action@v30 - - name: Install Bun uses: oven-sh/setup-bun@v2 @@ -102,14 +104,14 @@ jobs: - name: Build packages run: bun run build:packages - - name: Build desktop + - name: Build Electron desktop run: bun run build:desktop - name: Upload desktop artifacts uses: https://data.forgejo.org/actions/upload-artifact@v3 with: - name: desktop-bundles - path: apps/tauri/src-tauri/target/release/bundle/ + name: electron-desktop-${{ matrix.target }} + path: apps/electron/release/ release: runs-on: docker @@ -138,8 +140,8 @@ jobs: - name: Download desktop artifacts uses: https://data.forgejo.org/actions/download-artifact@v3 with: - name: desktop-bundles - path: apps/tauri/src-tauri/target/release/bundle/ + name: electron-desktop-linux + path: apps/electron/release/ - name: Copy releases run: bun --bun run copy-releases @@ -231,6 +233,19 @@ jobs: RELEASE_ID="$(echo "$RELEASE_JSON" | jq -r .id)" fi + ASSET_BASE_URL="${API%/api/v1}/$REPO/releases/download/$TAG" + export ASSET_BASE_URL + node -e ' + const fs = require("fs"); + const path = "releases/electron-release-metadata.json"; + const metadata = JSON.parse(fs.readFileSync(path, "utf8")); + metadata.tag = process.env.TAG; + for (const artifact of metadata.artifacts || []) { + artifact.url = `${process.env.ASSET_BASE_URL}/${encodeURIComponent(artifact.name)}`; + } + fs.writeFileSync(path, `${JSON.stringify(metadata, null, 2)}\n`); + ' + find releases -type f -print0 | while IFS= read -r -d '' file; do name="$(basename "$file")" curl -fsS -X POST "$API/repos/$REPO/releases/$RELEASE_ID/assets?name=$name" \ diff --git a/.forgejo/workflows/deploy-prod.yml b/.forgejo/workflows/deploy-prod.yml index 3463fca..c0adb6f 100644 --- a/.forgejo/workflows/deploy-prod.yml +++ b/.forgejo/workflows/deploy-prod.yml @@ -2,6 +2,8 @@ on: push: branches: - main + paths-ignore: + - flake.nix jobs: build-web: @@ -11,7 +13,7 @@ jobs: uses: https://data.forgejo.org/actions/checkout@v4 - name: Install Packages - run: apt-get update && apt-get install -y sudo curl jq + run: apt-get update && apt-get install -y sudo curl jq fakeroot dpkg rpm - name: Install Nix uses: https://github.com/cachix/install-nix-action@v30 @@ -44,7 +46,7 @@ jobs: uses: https://data.forgejo.org/actions/checkout@v4 - name: Install Packages - run: apt-get update && apt-get install -y sudo curl jq + run: apt-get update && apt-get install -y sudo curl jq fakeroot dpkg rpm - name: Install Nix uses: https://github.com/cachix/install-nix-action@v30 @@ -80,6 +82,9 @@ jobs: build-desktop: runs-on: docker + strategy: + matrix: + target: [linux] steps: - name: Check out repo uses: https://data.forgejo.org/actions/checkout@v4 @@ -87,9 +92,6 @@ jobs: - name: Install Packages run: apt-get update && apt-get install -y sudo curl jq - - name: Install Nix - uses: https://github.com/cachix/install-nix-action@v30 - - name: Install Bun uses: oven-sh/setup-bun@v2 @@ -102,14 +104,14 @@ jobs: - name: Build packages run: bun run build:packages - - name: Build desktop + - name: Build Electron desktop run: bun run build:desktop - name: Upload desktop artifacts uses: https://data.forgejo.org/actions/upload-artifact@v3 with: - name: desktop-bundles - path: apps/tauri/src-tauri/target/release/bundle/ + name: electron-desktop-${{ matrix.target }} + path: apps/electron/release/ release: runs-on: docker @@ -136,8 +138,8 @@ jobs: - name: Download desktop artifacts uses: https://data.forgejo.org/actions/download-artifact@v3 with: - name: desktop-bundles - path: apps/tauri/src-tauri/target/release/bundle/ + name: electron-desktop-linux + path: apps/electron/release/ - name: Copy releases run: bun --bun run copy-releases @@ -190,9 +192,53 @@ jobs: }')")" RELEASE_ID="$(echo "$RELEASE_JSON" | jq -r .id)" + ASSET_BASE_URL="${API%/api/v1}/$REPO/releases/download/$TAG" + export ASSET_BASE_URL + node -e ' + const fs = require("fs"); + const path = "releases/electron-release-metadata.json"; + const metadata = JSON.parse(fs.readFileSync(path, "utf8")); + metadata.tag = process.env.TAG; + for (const artifact of metadata.artifacts || []) { + artifact.url = `${process.env.ASSET_BASE_URL}/${encodeURIComponent(artifact.name)}`; + } + fs.writeFileSync(path, `${JSON.stringify(metadata, null, 2)}\n`); + ' + find releases -type f -print0 | while IFS= read -r -d '' file; do name="$(basename "$file")" curl -fsS -X POST "$API/repos/$REPO/releases/$RELEASE_ID/assets?name=$name" \ -H "Authorization: token $TOKEN" \ -F "attachment=@$file" done + + - name: Update root flake release hash + env: + TAG: ${{ steps.version.outputs.tag }} + run: | + set -eu + + APPIMAGE="$(find releases -maxdepth 1 -type f -name 'Tensamin-*-linux-x86_64.AppImage' -print -quit)" + test -n "$APPIMAGE" + + HASH="$(node -e 'const fs = require("fs"); const crypto = require("crypto"); const file = process.argv[1]; console.log("sha256-" + crypto.createHash("sha256").update(fs.readFileSync(file)).digest("base64"));' "$APPIMAGE")" + export HASH + + node -e ' + const fs = require("fs"); + const version = process.env.TAG; + const hash = process.env.HASH; + let content = fs.readFileSync("flake.nix", "utf8"); + content = content.replace(/version = "[^"]+";/, `version = "${version}";`); + content = content.replace(/hash = "sha256-[^"]+";/, `hash = "${hash}";`); + fs.writeFileSync("flake.nix", content); + ' + + if git diff --quiet -- flake.nix; then + echo "flake.nix already has the current release hash." + exit 0 + fi + + git add flake.nix + git -c user.name="forgejo-actions" -c user.email="forgejo-actions@localhost" commit -m "(qol): update release flake hash" + git push diff --git a/apps/electron/.gitignore b/apps/electron/.gitignore new file mode 100644 index 0000000..158494b --- /dev/null +++ b/apps/electron/.gitignore @@ -0,0 +1,2 @@ +dist +release \ No newline at end of file diff --git a/apps/electron/flake.lock b/apps/electron/flake.lock new file mode 100644 index 0000000..88748a4 --- /dev/null +++ b/apps/electron/flake.lock @@ -0,0 +1,61 @@ +{ + "nodes": { + "flake-utils": { + "inputs": { + "systems": "systems" + }, + "locked": { + "lastModified": 1731533236, + "narHash": "sha256-l0KFg5HjrsfsO/JpG+r7fRrqm12kzFHyUHqHCVpMMbI=", + "owner": "numtide", + "repo": "flake-utils", + "rev": "11707dc2f618dd54ca8739b309ec4fc024de578b", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "flake-utils", + "type": "github" + } + }, + "nixpkgs": { + "locked": { + "lastModified": 1779508470, + "narHash": "sha256-Ap9KJX+5xHIn3bPIpfNgT6MEXdAECECwo4/rmlQD74M=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "29916453413845e54a65b8a1cf996842300cd299", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "root": { + "inputs": { + "flake-utils": "flake-utils", + "nixpkgs": "nixpkgs" + } + }, + "systems": { + "locked": { + "lastModified": 1681028828, + "narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=", + "owner": "nix-systems", + "repo": "default", + "rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e", + "type": "github" + }, + "original": { + "owner": "nix-systems", + "repo": "default", + "type": "github" + } + } + }, + "root": "root", + "version": 7 +} diff --git a/apps/electron/flake.nix b/apps/electron/flake.nix new file mode 100644 index 0000000..5bb9cd5 --- /dev/null +++ b/apps/electron/flake.nix @@ -0,0 +1,88 @@ +{ + description = "Electron Development Environment"; + + inputs = { + nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable"; + flake-utils.url = "github:numtide/flake-utils"; + }; + + outputs = {nixpkgs, flake-utils, ...}: + flake-utils.lib.eachDefaultSystem (system: let + pkgs = import nixpkgs {inherit system; config.allowUnfree = true;}; + electronRuntimeLibs = with pkgs; [ + alsa-lib + at-spi2-atk + at-spi2-core + atk + cairo + cups + dbus + expat + fontconfig + freetype + gdk-pixbuf + glib + gtk3 + libdrm + libgbm + libglvnd + libnotify + libpulseaudio + libuuid + libxkbcommon + mesa + nspr + nss + pango + pipewire + systemd + wayland + # xorg + libX11 + libXScrnSaver + libXcomposite + libXcursor + libXdamage + libXext + libXfixes + libXi + libXrandr + libXtst + libxcb + ]; + in { + devShells.default = pkgs.mkShell { + packages = with pkgs; [ + nodejs_22 + corepack_22 + bun + electron + pkg-config + python3 + gcc + gnumake + git + jq + patchelf + dpkg + rpm + fpm + ] ++ electronRuntimeLibs; + + shellHook = '' + export LD_LIBRARY_PATH="${pkgs.lib.makeLibraryPath electronRuntimeLibs}:$LD_LIBRARY_PATH" + export ELECTRON_ENABLE_LOGGING=1 + export ELECTRON_OZONE_PLATFORM_HINT="''${ELECTRON_OZONE_PLATFORM_HINT:-auto}" + export NPM_CONFIG_TARGET_ARCH="''${NPM_CONFIG_TARGET_ARCH:-x64}" + export npm_config_build_from_source=true + export USE_SYSTEM_FPM=true + + alias electron-install='cd ../.. && bun install' + alias electron-build-web='cd ../.. && bun run build:web' + alias electron-dev='bun run dev' + alias electron-package='bun run package:linux' + alias electron-validate='bun run validate' + ''; + }; + }); +} diff --git a/apps/electron/package.json b/apps/electron/package.json new file mode 100644 index 0000000..14c0bbc --- /dev/null +++ b/apps/electron/package.json @@ -0,0 +1,69 @@ +{ + "name": "@tensamin/electron", + "private": true, + "version": "0.0.3", + "description": "Tensamin desktop client", + "author": "methanium", + "homepage": "https://git.methanium.net/tensamin/client", + "type": "module", + "main": "dist/main/main.js", + "scripts": { + "clean": "rm -rf dist release", + "build:web": "cd ../.. && bun run build:web", + "build": "tsc -p tsconfig.json && esbuild src/preload/preload.ts --bundle --platform=node --format=cjs --external:electron --outfile=dist/preload/preload.cjs", + "dev:raw": "cd ../.. && bun run build:web && cd apps/electron && bun run build && electron . --verbose", + "dev": "if command -v nix >/dev/null 2>&1 && [ -z \"$IN_NIX_SHELL\" ]; then nix develop --command bun run dev:raw; else bun run dev:raw; fi", + "start:raw": "bun run build && electron .", + "start": "if command -v nix >/dev/null 2>&1 && [ -z \"$IN_NIX_SHELL\" ]; then nix develop --command bun run start:raw; else bun run start:raw; fi", + "package:raw": "cd ../.. && bun run build:web && cd apps/electron && bun run build && electron-builder --publish never", + "package": "if command -v nix >/dev/null 2>&1 && [ -z \"$IN_NIX_SHELL\" ]; then nix develop --command bun run package:raw; else bun run package:raw; fi", + "package:linux:raw": "cd ../.. && bun run build:web && cd apps/electron && bun run build && electron-builder --linux --publish never", + "package:linux": "if command -v nix >/dev/null 2>&1 && [ -z \"$IN_NIX_SHELL\" ]; then nix develop --command bun run package:linux:raw; else bun run package:linux:raw; fi", + "package:windows:raw": "cd ../.. && bun run build:web && cd apps/electron && bun run build && electron-builder --win --publish never", + "package:windows": "if command -v nix >/dev/null 2>&1 && [ -z \"$IN_NIX_SHELL\" ]; then nix develop --command bun run package:windows:raw; else bun run package:windows:raw; fi", + "checksum": "bun scripts/generate-release-metadata.ts", + "generate-signing-key": "bun scripts/generate-signing-key.ts", + "validate:raw": "bun run build && bun run package:linux:raw", + "validate": "if command -v nix >/dev/null 2>&1 && [ -z \"$IN_NIX_SHELL\" ]; then nix develop --command bun run validate:raw; else bun run validate:raw; fi" + }, + "dependencies": { + "electron-updater": "^6.6.2" + }, + "devDependencies": { + "@types/node": "^25.9.1", + "electron": "^39.2.7", + "electron-builder": "^26.0.12", + "esbuild": "^0.25.11", + "typescript": "~6.0.3" + }, + "build": { + "appId": "net.tensamin.client", + "productName": "Tensamin", + "artifactName": "Tensamin-${version}-${os}-${arch}.${ext}", + "directories": { + "output": "release" + }, + "files": [ + "dist/**/*", + "package.json" + ], + "extraResources": [ + { + "from": "../web/dist", + "to": "web" + } + ], + "linux": { + "target": ["AppImage", "deb", "rpm"], + "category": "Network", + "maintainer": "methanium" + }, + "win": { + "target": ["nsis", "portable"] + }, + "mac": { + "target": ["dmg"] + }, + "publish": null + } +} diff --git a/apps/electron/scripts/generate-release-metadata.ts b/apps/electron/scripts/generate-release-metadata.ts new file mode 100644 index 0000000..36a6281 --- /dev/null +++ b/apps/electron/scripts/generate-release-metadata.ts @@ -0,0 +1,62 @@ +import { createHash } from "node:crypto"; +import { createReadStream, existsSync, readdirSync, statSync, writeFileSync } from "node:fs"; +import { basename, join } from "node:path"; +import rootPackage from "../../../package.json" with { type: "json" }; + +const releaseDir = join(import.meta.dir, "..", "release"); +const outDir = join(import.meta.dir, "..", "..", "..", "releases"); + +function sha256(filePath: string) { + const hash = createHash("sha256"); + const stream = createReadStream(filePath); + + return new Promise((resolve, reject) => { + stream.on("data", (chunk) => hash.update(chunk)); + stream.on("error", reject); + stream.on("end", () => resolve(hash.digest("hex"))); + }); +} + +function platformFor(file: string) { + if (/win|nsis|portable|\.exe$/i.test(file)) return "windows"; + if (/mac|darwin|\.dmg$/i.test(file)) return "macos"; + return "linux"; +} + +function archFor(file: string) { + if (/arm64|aarch64/i.test(file)) return "arm64"; + return "x64"; +} + +if (!existsSync(releaseDir)) { + throw new Error(`Missing Electron release directory: ${releaseDir}`); +} + +const files = readdirSync(releaseDir) + .filter((file) => !file.endsWith(".blockmap") && !file.endsWith(".yml")) + .map((file) => join(releaseDir, file)) + .filter((file) => statSync(file).isFile()); + +const artifacts = await Promise.all( + files.map(async (filePath) => ({ + name: basename(filePath), + platform: platformFor(filePath), + arch: archFor(filePath), + url: `__FORGEJO_RELEASE_ASSET_URL__/${encodeURIComponent(basename(filePath))}`, + sha256: await sha256(filePath), + size: statSync(filePath).size, + })), +); + +const metadata = { + version: rootPackage.version, + tag: rootPackage.version, + publishedAt: new Date().toISOString(), + artifacts, +}; + +writeFileSync(join(outDir, "electron-release-metadata.json"), `${JSON.stringify(metadata, null, 2)}\n`); +writeFileSync( + join(outDir, "SHA256SUMS"), + `${artifacts.map((artifact) => `${artifact.sha256} ${artifact.name}`).join("\n")}\n`, +); diff --git a/apps/electron/scripts/generate-signing-key.ts b/apps/electron/scripts/generate-signing-key.ts new file mode 100644 index 0000000..6ad35ef --- /dev/null +++ b/apps/electron/scripts/generate-signing-key.ts @@ -0,0 +1,11 @@ +import { generateKeyPairSync } from "node:crypto"; + +const { privateKey, publicKey } = generateKeyPairSync("ed25519", { + privateKeyEncoding: { type: "pkcs8", format: "pem" }, + publicKeyEncoding: { type: "spki", format: "pem" }, +}); + +console.log("TENSAMIN_UPDATE_PRIVATE_KEY_PEM="); +console.log(privateKey.trim()); +console.log("\nTENSAMIN_UPDATE_PUBLIC_KEY_PEM="); +console.log(publicKey.trim()); diff --git a/apps/electron/src/main/main.ts b/apps/electron/src/main/main.ts new file mode 100644 index 0000000..a028573 --- /dev/null +++ b/apps/electron/src/main/main.ts @@ -0,0 +1,274 @@ +import { execFile } from "node:child_process"; +import { fileURLToPath } from "node:url"; +import { dirname, join, resolve } from "node:path"; +import { app, BrowserWindow, desktopCapturer, ipcMain, session, shell } from "electron"; +import { checkForUpdates } from "./updates.js"; +import { ipcChannels, type DesktopScreenShareCapabilities } from "../shared/ipc.js"; + +const __dirname = dirname(fileURLToPath(import.meta.url)); +const verbose = process.argv.includes("--verbose"); +let mainWindow: BrowserWindow | null = null; +let selectedScreenShareSourceId: string | null = null; + +if (verbose) { + app.commandLine.appendSwitch("enable-logging", "stderr"); + app.commandLine.appendSwitch("v", "1"); + app.commandLine.appendSwitch("log-level", "0"); +} + +if (process.platform === "linux" && process.env.XDG_SESSION_TYPE === "wayland" && !process.env.TENSAMIN_ENABLE_VULKAN) { + app.commandLine.appendSwitch("disable-features", "Vulkan"); +} + +function verboseLog(...args: unknown[]) { + if (verbose) { + console.log("[tensamin:electron]", ...args); + } +} + +function getRendererIndex() { + if (!app.isPackaged) { + return resolve(__dirname, "../../../web/dist/index.html"); + } + + return join(process.resourcesPath, "web", "index.html"); +} + +function getPlatform(): DesktopScreenShareCapabilities["platform"] { + if (process.platform === "linux") return "linux"; + if (process.platform === "darwin") return "macos"; + if (process.platform === "win32") return "windows"; + return "other"; +} + +function getScreenShareCapabilities(): DesktopScreenShareCapabilities { + const platform = getPlatform(); + + return { + runtime: "electron", + platform, + showAudioOutputSelector: platform === "linux", + showAudioSwitch: platform === "windows" || platform === "macos", + hasReliableSystemAudio: platform === "windows", + }; +} + +function execJson(command: string, args: string[]) { + verboseLog("exec", command, args.join(" ")); + + return new Promise((resolvePromise, reject) => { + execFile(command, args, { timeout: 3000 }, (error, stdout, stderr) => { + if (error) { + reject(new Error(stderr.trim() || error.message)); + return; + } + + resolvePromise(JSON.parse(stdout)); + }); + }); +} + +async function listAudioOutputs() { + verboseLog("listAudioOutputs", { platform: process.platform }); + + if (process.platform !== "linux") return []; + + const sinks = await execJson("pactl", ["--format=json", "list", "sinks"]); + if (!Array.isArray(sinks)) return []; + + return sinks + .map((sink) => { + if (!sink || typeof sink !== "object") return null; + const record = sink as Record; + const id = record.index == null ? undefined : String(record.index); + const name = typeof record.description === "string" ? record.description : id; + if (!id || !name) return null; + return { id, name, isDefault: false }; + }) + .filter(Boolean); +} + +async function listScreenShareSources() { + verboseLog("listScreenShareSources"); + + const sources = await desktopCapturer.getSources({ + types: ["screen", "window"], + thumbnailSize: { width: 320, height: 180 }, + fetchWindowIcons: true, + }); + + return sources.map((source) => ({ + id: source.id, + kind: source.id.startsWith("screen:") ? "screen" : "window", + name: source.name, + subtitle: source.id, + thumbnail: source.thumbnail.isEmpty() ? null : source.thumbnail.toDataURL(), + })); +} + +function registerDisplayMediaHandler() { + session.defaultSession.setDisplayMediaRequestHandler(async (_request, callback) => { + verboseLog("display media request", { selectedScreenShareSourceId }); + + const sources = await desktopCapturer.getSources({ + types: ["screen", "window"], + thumbnailSize: { width: 0, height: 0 }, + }); + + const selected = sources.find((source) => source.id === selectedScreenShareSourceId); + selectedScreenShareSourceId = null; + const video = selected ?? sources[0]; + + if (!video) { + callback({}); + return; + } + + if (process.platform === "win32") { + callback({ video, audio: "loopback" }); + return; + } + + callback({ video }); + }); +} + +function registerIpc() { + verboseLog("registering ipc handlers"); + + ipcMain.handle(ipcChannels.listScreenShareSources, listScreenShareSources); + ipcMain.handle(ipcChannels.listScreenShareAudioOutputs, listAudioOutputs); + ipcMain.handle(ipcChannels.getScreenShareCapabilities, getScreenShareCapabilities); + ipcMain.handle(ipcChannels.selectScreenShareSource, (_event, sourceId: unknown) => { + if (typeof sourceId !== "string" || sourceId.length === 0 || sourceId.length > 256) { + throw new Error("Invalid screen share source id."); + } + + selectedScreenShareSourceId = sourceId; + verboseLog("selected screen share source", sourceId); + return true; + }); + ipcMain.handle(ipcChannels.getVersion, () => app.getVersion()); + ipcMain.handle(ipcChannels.checkForUpdates, checkForUpdates); + ipcMain.handle(ipcChannels.minimizeWindow, () => { + verboseLog("window:minimize"); + mainWindow?.minimize(); + }); + ipcMain.handle(ipcChannels.maximizeWindow, () => { + verboseLog("window:maximize"); + if (!mainWindow) return; + + if (mainWindow.isMaximized()) { + mainWindow.unmaximize(); + return; + } + + mainWindow.maximize(); + }); + ipcMain.handle(ipcChannels.closeWindow, () => { + verboseLog("window:close"); + mainWindow?.close(); + }); +} + +async function createWindow() { + const rendererIndex = getRendererIndex(); + verboseLog("creating main window", { + appVersion: app.getVersion(), + electronVersion: process.versions.electron, + chromeVersion: process.versions.chrome, + nodeVersion: process.versions.node, + platform: process.platform, + arch: process.arch, + isPackaged: app.isPackaged, + rendererIndex, + argv: process.argv, + }); + + mainWindow = new BrowserWindow({ + width: 1200, + height: 800, + minWidth: 900, + minHeight: 600, + title: "Tensamin", + frame: false, + autoHideMenuBar: true, + webPreferences: { + preload: join(__dirname, "../preload/preload.cjs"), + contextIsolation: true, + nodeIntegration: false, + sandbox: true, + webSecurity: true, + }, + }); + mainWindow.setMenuBarVisibility(false); + + mainWindow.webContents.setWindowOpenHandler(({ url }) => { + verboseLog("blocked window open", url); + void shell.openExternal(url); + return { action: "deny" }; + }); + + if (verbose) { + mainWindow.webContents.on("console-message", (_event, level, message, line, sourceId) => { + const target = level >= 2 ? console.error : console.log; + target("[tensamin:renderer]", message, { level, line, sourceId }); + }); + + mainWindow.webContents.on("did-fail-load", (_event, errorCode, errorDescription, validatedURL) => { + console.error("[tensamin:electron] renderer failed to load", { + errorCode, + errorDescription, + validatedURL, + }); + }); + + mainWindow.webContents.on("did-finish-load", () => { + verboseLog("renderer finished loading", mainWindow?.webContents.getURL()); + }); + + mainWindow.webContents.on("render-process-gone", (_event, details) => { + console.error("[tensamin:electron] renderer process gone", details); + }); + + mainWindow.on("unresponsive", () => { + console.error("[tensamin:electron] main window became unresponsive"); + }); + } + + await mainWindow.loadFile(rendererIndex); +} + +app.on("window-all-closed", () => { + verboseLog("window-all-closed"); + if (process.platform !== "darwin") app.quit(); +}); + +app.on("activate", () => { + verboseLog("activate"); + if (BrowserWindow.getAllWindows().length === 0) void createWindow(); +}); + +if (verbose) { + process.on("uncaughtException", (error) => { + console.error("[tensamin:electron] uncaught exception", error); + }); + + process.on("unhandledRejection", (reason) => { + console.error("[tensamin:electron] unhandled rejection", reason); + }); +} + +async function start() { + verboseLog("waiting for app readiness"); + await app.whenReady(); + verboseLog("app ready"); + registerIpc(); + registerDisplayMediaHandler(); + await createWindow(); +} + +void start().catch((error) => { + console.error("[tensamin:electron] failed to start", error); + app.exit(1); +}); diff --git a/apps/electron/src/main/updates.ts b/apps/electron/src/main/updates.ts new file mode 100644 index 0000000..982d191 --- /dev/null +++ b/apps/electron/src/main/updates.ts @@ -0,0 +1,131 @@ +import { createHash } from "node:crypto"; +import { createReadStream } from "node:fs"; +import { mkdir, rm, writeFile } from "node:fs/promises"; +import { basename, join } from "node:path"; +import { app, net } from "electron"; +import type { ReleaseArtifact, ReleaseMetadata, UpdateCheckResult } from "../shared/ipc.js"; + +const metadataUrl = process.env.TENSAMIN_UPDATE_METADATA_URL; + +function compareSemver(left: string, right: string) { + const leftParts = left.split(/[.-]/).map((part) => Number.parseInt(part, 10) || 0); + const rightParts = right.split(/[.-]/).map((part) => Number.parseInt(part, 10) || 0); + const length = Math.max(leftParts.length, rightParts.length); + + for (let index = 0; index < length; index += 1) { + const diff = (leftParts[index] ?? 0) - (rightParts[index] ?? 0); + if (diff !== 0) return diff; + } + + return 0; +} + +function platformName() { + if (process.platform === "win32") return "windows"; + if (process.platform === "darwin") return "macos"; + if (process.platform === "linux") return "linux"; + return process.platform; +} + +function archName() { + if (process.arch === "x64") return "x64"; + if (process.arch === "arm64") return "arm64"; + return process.arch; +} + +function requestText(url: string): Promise { + return new Promise((resolve, reject) => { + const request = net.request(url); + request.on("response", (response) => { + if (response.statusCode < 200 || response.statusCode >= 300) { + reject(new Error(`Update request failed with HTTP ${response.statusCode}.`)); + return; + } + + const chunks: Buffer[] = []; + response.on("data", (chunk) => chunks.push(Buffer.from(chunk))); + response.on("end", () => resolve(Buffer.concat(chunks).toString("utf8"))); + }); + request.on("error", reject); + request.end(); + }); +} + +function requestBuffer(url: string): Promise { + return new Promise((resolve, reject) => { + const request = net.request(url); + request.on("response", (response) => { + if (response.statusCode < 200 || response.statusCode >= 300) { + reject(new Error(`Download failed with HTTP ${response.statusCode}.`)); + return; + } + + const chunks: Buffer[] = []; + response.on("data", (chunk) => chunks.push(Buffer.from(chunk))); + response.on("end", () => resolve(Buffer.concat(chunks))); + }); + request.on("error", reject); + request.end(); + }); +} + +async function sha256File(filePath: string) { + const hash = createHash("sha256"); + + await new Promise((resolve, reject) => { + const stream = createReadStream(filePath); + stream.on("data", (chunk) => hash.update(chunk)); + stream.on("error", reject); + stream.on("end", resolve); + }); + + return hash.digest("hex"); +} + +function selectArtifact(metadata: ReleaseMetadata): ReleaseArtifact | undefined { + const platform = platformName(); + const arch = archName(); + + return metadata.artifacts.find( + (artifact) => artifact.platform === platform && artifact.arch === arch, + ); +} + +export async function checkForUpdates(): Promise { + const currentVersion = app.getVersion(); + + if (!metadataUrl) { + return { available: false, currentVersion, latestVersion: currentVersion }; + } + + const metadata = JSON.parse(await requestText(metadataUrl)) as ReleaseMetadata; + const artifact = selectArtifact(metadata); + + if (!artifact || compareSemver(metadata.version, currentVersion) <= 0) { + return { available: false, currentVersion, latestVersion: metadata.version }; + } + + return { + available: true, + currentVersion, + latestVersion: metadata.version, + artifact, + }; +} + +export async function downloadVerifiedArtifact(artifact: ReleaseArtifact) { + const updatesDir = join(app.getPath("userData"), "updates"); + await rm(updatesDir, { recursive: true, force: true }); + await mkdir(updatesDir, { recursive: true }); + + const destination = join(updatesDir, basename(artifact.name)); + await writeFile(destination, await requestBuffer(artifact.url), { mode: 0o600 }); + + const actualHash = await sha256File(destination); + if (actualHash !== artifact.sha256) { + await rm(destination, { force: true }); + throw new Error("Downloaded update failed checksum verification."); + } + + return destination; +} diff --git a/apps/electron/src/preload/preload.ts b/apps/electron/src/preload/preload.ts new file mode 100644 index 0000000..ce65ca7 --- /dev/null +++ b/apps/electron/src/preload/preload.ts @@ -0,0 +1,43 @@ +import { contextBridge, ipcRenderer } from "electron"; +import { ipcChannels, type DesktopScreenShareSource } from "../shared/ipc.js"; + +function windowAction(channel: string) { + return () => ipcRenderer.invoke(channel); +} + +const desktopApi = { + media: { + listScreenShareSources: () => + ipcRenderer.invoke(ipcChannels.listScreenShareSources), + listScreenShareAudioOutputs: () => + ipcRenderer.invoke(ipcChannels.listScreenShareAudioOutputs), + getScreenShareCapabilities: () => + ipcRenderer.invoke(ipcChannels.getScreenShareCapabilities), + selectScreenShareSource: (sourceId: DesktopScreenShareSource["id"]) => { + if (typeof sourceId !== "string" || sourceId.length === 0) { + return Promise.reject(new Error("Invalid screen share source id.")); + } + + return ipcRenderer.invoke(ipcChannels.selectScreenShareSource, sourceId); + }, + }, + app: { + getVersion: () => ipcRenderer.invoke(ipcChannels.getVersion), + }, + updates: { + checkForUpdates: () => ipcRenderer.invoke(ipcChannels.checkForUpdates), + }, + window: { + minimize: () => windowAction(ipcChannels.minimizeWindow), + maximize: () => windowAction(ipcChannels.maximizeWindow), + close: () => windowAction(ipcChannels.closeWindow), + }, +}; + +contextBridge.exposeInMainWorld("tensaminDesktop", desktopApi); +contextBridge.exposeInMainWorld( + "tensaminShowWindowControls", + process.env.TENSAMIN_HIDE_CONTROLS == null, +); + +export type TensaminDesktopApi = typeof desktopApi; diff --git a/apps/electron/src/shared/ipc.ts b/apps/electron/src/shared/ipc.ts new file mode 100644 index 0000000..d1754f9 --- /dev/null +++ b/apps/electron/src/shared/ipc.ts @@ -0,0 +1,58 @@ +export type DesktopScreenShareSource = { + id: string; + kind: "screen" | "window"; + name: string; + subtitle?: string | null; + thumbnail?: string | null; +}; + +export type DesktopScreenShareAudioOutput = { + id: string; + name: string; + isDefault: boolean; +}; + +export type DesktopScreenShareCapabilities = { + runtime: "electron"; + platform: "linux" | "macos" | "windows" | "other"; + showAudioOutputSelector: boolean; + showAudioSwitch: boolean; + hasReliableSystemAudio: boolean; +}; + +export type ReleaseArtifact = { + name: string; + platform: string; + arch: string; + url: string; + sha256: string; + size: number; +}; + +export type ReleaseMetadata = { + version: string; + tag: string; + publishedAt: string; + artifacts: ReleaseArtifact[]; +}; + +export type UpdateCheckResult = + | { available: false; currentVersion: string; latestVersion: string } + | { + available: true; + currentVersion: string; + latestVersion: string; + artifact: ReleaseArtifact; + }; + +export const ipcChannels = { + listScreenShareSources: "desktopMedia:listScreenShareSources", + listScreenShareAudioOutputs: "desktopMedia:listScreenShareAudioOutputs", + getScreenShareCapabilities: "desktopMedia:getScreenShareCapabilities", + selectScreenShareSource: "desktopMedia:selectScreenShareSource", + minimizeWindow: "window:minimize", + maximizeWindow: "window:maximize", + closeWindow: "window:close", + getVersion: "app:getVersion", + checkForUpdates: "updates:checkForUpdates", +} as const; diff --git a/apps/electron/tsconfig.json b/apps/electron/tsconfig.json new file mode 100644 index 0000000..8d5bda2 --- /dev/null +++ b/apps/electron/tsconfig.json @@ -0,0 +1,14 @@ +{ + "compilerOptions": { + "target": "ES2022", + "module": "NodeNext", + "moduleResolution": "NodeNext", + "rootDir": "src", + "outDir": "dist", + "strict": true, + "skipLibCheck": true, + "esModuleInterop": true, + "types": ["node", "electron"] + }, + "include": ["src/**/*.ts"] +} diff --git a/apps/tauri/flake.nix b/apps/tauri/flake.nix index 86a1b36..4e491e8 100644 --- a/apps/tauri/flake.nix +++ b/apps/tauri/flake.nix @@ -1,5 +1,5 @@ { - description = "Tauri development environment"; + description = "Tauri mobile development environment"; inputs = { nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable"; @@ -53,34 +53,6 @@ ]; }; - desktopRuntimeLibs = with pkgs; [ - glib - gtk3 - gdk-pixbuf - pango - cairo - atk - at-spi2-atk - alsa-lib - dbus - cups - expat - libdrm - libgbm - libglvnd - mesa - libxkbcommon - libx11 - libxcomposite - libxdamage - libxext - libxfixes - libxrandr - libxcb - systemd - nspr - nss - ]; in { devShells.default = pkgs.mkShell { buildInputs = with pkgs; @@ -91,7 +63,6 @@ nodejs pkg-config ] - ++ desktopRuntimeLibs ++ [ android.androidsdk pkgs.android-studio-tools @@ -130,7 +101,6 @@ export NDK_HOME="$ANDROID_NDK_ROOT" export NDK_PATH="$ANDROID_NDK_ROOT" export JAVA_HOME="${pkgs.jdk17}" - export LD_LIBRARY_PATH="${pkgs.lib.makeLibraryPath desktopRuntimeLibs}:$LD_LIBRARY_PATH" ''; }; } diff --git a/apps/tauri/package.json b/apps/tauri/package.json index a89a309..77ba3ea 100644 --- a/apps/tauri/package.json +++ b/apps/tauri/package.json @@ -4,10 +4,6 @@ "version": "0.0.0", "type": "module", "exports": { - "./context": { - "types": "./src/context.tsx", - "default": "./src/context.tsx" - }, "./controls": { "types": "./src/windowControls.tsx", "default": "./src/windowControls.tsx" @@ -26,10 +22,6 @@ "build:mobile:raw": "tauri android build", "dev:mobile": "if command -v nix >/dev/null 2>&1; then nix develop --command bun dev:mobile:raw; else bun dev:mobile:raw; fi", "build:mobile": "bun run render-version.ts && if command -v nix >/dev/null 2>&1; then nix develop --command bun build:mobile:raw; else bun build:mobile:raw; fi && bun run render-version.ts --unrender", - "dev:desktop:raw": "tauri dev", - "build:desktop:raw": "tauri build", - "dev:desktop": "if command -v nix >/dev/null 2>&1; then nix develop --command bun dev:desktop:raw; else bun dev:desktop:raw; fi", - "build:desktop": "if command -v nix >/dev/null 2>&1; then nix develop --command bun build:desktop:raw; else bun build:desktop:raw; fi", "gen-icons": "tauri icon ./logo.json", "format": "bunx prettier --write .", "lint": "eslint src" diff --git a/apps/tauri/readme.md b/apps/tauri/readme.md deleted file mode 100644 index 38cb730..0000000 --- a/apps/tauri/readme.md +++ /dev/null @@ -1,5 +0,0 @@ -# Outputs - -- ./src-tauri/gen/android/app/build/outputs/apk/universal/release/app-universal-release.apk -- ./src-tauri/target/release/bundle/deb/Tensamin*{version}*{arch}.deb -- ./src-tauri/target/release/bundle/rpm/Tensamin-{version}-1.{arch}.rpm diff --git a/apps/tauri/src-tauri/Cargo.toml b/apps/tauri/src-tauri/Cargo.toml index c5b2b18..46ae16e 100644 --- a/apps/tauri/src-tauri/Cargo.toml +++ b/apps/tauri/src-tauri/Cargo.toml @@ -18,36 +18,16 @@ crate-type = ["staticlib", "cdylib", "rlib"] tauri-build = { version = "2", features = [] } [dependencies] -base64 = "0.22" -image = { version = "0.25", default-features = false, features = ["jpeg"] } tauri-plugin-opener = "2" serde = { version = "1", features = ["derive"] } serde_json = "1" tauri-plugin-deep-link = "2" -[target.'cfg(any(target_os = "linux", target_os = "windows", target_os = "macos"))'.dependencies] -xcap = "0.4.1" - [target.'cfg(target_os = "android")'.dependencies.tauri] version = "2" features = [] default-features = true -[target.'cfg(target_os = "windows")'.dependencies.tauri] -version = "2" -features = ["compression", "common-controls-v6", "dynamic-acl"] -default-features = true - -[target.'cfg(target_os = "linux")'.dependencies.tauri] -version = "2" -features = ["common-controls-v6", "cef", "compression", "dynamic-acl", "x11"] -default-features = false - -[target.'cfg(target_os = "macos")'.dependencies.tauri] -version = "2" -features = ["x11", "common-controls-v6", "cef", "compression", "dynamic-acl"] -default-features = false - [target.'cfg(any(target_os = "android", target_os = "ios"))'.dependencies] tauri-plugin-barcode-scanner = "2" tauri-plugin-app-events = "0.2" diff --git a/apps/tauri/src-tauri/src/lib.rs b/apps/tauri/src-tauri/src/lib.rs index 9eef4be..57b97fb 100644 --- a/apps/tauri/src-tauri/src/lib.rs +++ b/apps/tauri/src-tauri/src/lib.rs @@ -1,204 +1,7 @@ -use serde::Serialize; - -#[derive(Clone, Serialize)] -#[serde(rename_all = "camelCase")] -struct ScreenShareSource { - id: String, - kind: String, - name: String, - subtitle: Option, -} - -#[derive(Clone, Serialize)] -#[serde(rename_all = "camelCase")] -struct ScreenShareAudioOutput { - id: String, - name: String, - is_default: bool, -} - -#[derive(Clone, Serialize)] -#[serde(rename_all = "camelCase")] -struct ScreenShareCapabilities { - platform: String, - show_audio_output_selector: bool, - show_audio_switch: bool, - has_reliable_system_audio: bool, -} - -#[tauri::command] -fn list_screen_share_sources() -> Result, String> { - #[cfg(any(target_os = "linux", target_os = "windows", target_os = "macos"))] - { - use xcap::{Monitor, Window}; - - let mut sources = Vec::new(); - let mut errors = Vec::new(); - - match Monitor::all() { - Ok(monitors) => { - for (index, monitor) in monitors.into_iter().enumerate() { - let mut subtitle = None; - - if monitor.is_primary().unwrap_or(false) { - subtitle = Some("Primary display".to_string()); - } - - sources.push(ScreenShareSource { - id: format!("screen:{index}"), - kind: "screen".to_string(), - name: monitor - .name() - .unwrap_or_else(|_| format!("Display {}", index + 1)), - subtitle, - }); - } - } - Err(error) => errors.push(format!("display listing failed: {error}")), - } - - match Window::all() { - Ok(windows) => { - for (index, window) in windows.into_iter().enumerate() { - if window.is_minimized().unwrap_or(false) { - continue; - } - - let title = window.title().unwrap_or_default(); - - if title.trim().is_empty() { - continue; - } - - sources.push(ScreenShareSource { - id: format!("window:{index}"), - kind: "window".to_string(), - name: title, - subtitle: None, - }); - } - } - Err(error) => errors.push(format!("window listing failed: {error}")), - } - - if sources.is_empty() { - if errors.is_empty() { - return Ok(sources); - } - - return Err(errors.join("; ")); - } - - return Ok(sources); - } - - #[allow(unreachable_code)] - Ok(Vec::new()) -} - -#[tauri::command] -fn list_audio_outputs() -> Result, String> { - #[cfg(target_os = "linux")] - { - use serde_json::Value; - use std::process::Command; - - let output = Command::new("pactl") - .args(["--format=json", "list", "sinks"]) - .output() - .map_err(|error| error.to_string())?; - - if !output.status.success() { - return Err(String::from_utf8_lossy(&output.stderr).trim().to_string()); - } - - let default_sink = Command::new("pactl") - .arg("get-default-sink") - .output() - .ok() - .filter(|result| result.status.success()) - .map(|result| String::from_utf8_lossy(&result.stdout).trim().to_string()); - - let sinks: Value = serde_json::from_slice(&output.stdout).map_err(|error| error.to_string())?; - let sink_entries = sinks - .as_array() - .ok_or_else(|| "Unexpected pactl sink response".to_string())?; - - let mut outputs = Vec::new(); - - for sink in sink_entries { - let Some(index) = sink.get("index").and_then(Value::as_i64) else { - continue; - }; - - let Some(name) = sink.get("name").and_then(Value::as_str) else { - continue; - }; - - let description = sink - .get("description") - .and_then(Value::as_str) - .or_else(|| { - sink.get("properties") - .and_then(|properties| properties.get("device.description")) - .and_then(Value::as_str) - }) - .unwrap_or(name) - .to_string(); - - let is_default = default_sink.as_deref() == Some(name); - - outputs.push(ScreenShareAudioOutput { - id: index.to_string(), - name: description, - is_default, - }); - } - - outputs.sort_by_key(|output| !output.is_default); - - return Ok(outputs); - } - - #[allow(unreachable_code)] - Ok(Vec::new()) -} - -#[tauri::command] -fn get_screen_share_capabilities() -> ScreenShareCapabilities { - ScreenShareCapabilities { - platform: if cfg!(target_os = "linux") { - "linux" - } else if cfg!(target_os = "windows") { - "windows" - } else if cfg!(target_os = "macos") { - "macos" - } else { - "other" - } - .to_string(), - show_audio_output_selector: cfg!(target_os = "linux"), - show_audio_switch: cfg!(any(target_os = "windows", target_os = "macos")), - has_reliable_system_audio: cfg!(target_os = "windows"), - } -} - #[cfg_attr(mobile, tauri::mobile_entry_point)] pub fn run() { let builder = tauri::Builder::default(); - #[cfg(any(target_os = "linux", target_os = "macos"))] - let builder = builder.command_line_args([ - ("enable-media-stream", None::), - ("enable-usermedia-screen-capturing", None::), - ("allow-http-screen-capture", None::), - #[cfg(target_os = "linux")] - ( - "enable-features", - Some("WebRTCPipeWireCapturer".to_string()), - ), - ]); - let builder = builder .plugin(tauri_plugin_deep_link::init()) .plugin(tauri_plugin_opener::init()); @@ -225,11 +28,6 @@ pub fn run() { } Ok(()) }) - .invoke_handler(tauri::generate_handler![ - list_screen_share_sources, - list_audio_outputs, - get_screen_share_capabilities - ]) .run(tauri::generate_context!()) { eprintln!("error while running tauri application: {error}"); diff --git a/apps/tauri/src-tauri/tauri.conf.json b/apps/tauri/src-tauri/tauri.conf.json index 5651486..15e46c0 100644 --- a/apps/tauri/src-tauri/tauri.conf.json +++ b/apps/tauri/src-tauri/tauri.conf.json @@ -26,7 +26,7 @@ }, "bundle": { "active": true, - "targets": ["app", "deb", "rpm", "nsis", "msi", "dmg"], + "targets": [], "icon": [ "icons/32x32.png", "icons/128x128.png", @@ -37,9 +37,6 @@ }, "plugins": { "deep-link": { - "desktop": { - "schemes": ["tensamin"] - }, "mobile": [ { "scheme": ["tensamin"], diff --git a/apps/web/src/index.tsx b/apps/web/src/index.tsx index 0dfffed..7ea7afc 100644 --- a/apps/web/src/index.tsx +++ b/apps/web/src/index.tsx @@ -4,6 +4,7 @@ import { RouterProvider, createRootRoute, createRoute, + createHashHistory, createRouter, } from "@tanstack/react-router"; @@ -37,7 +38,7 @@ import { useEffect, useState, type ReactNode } from "react"; import Storage from "@tensamin/storage/context"; import Session from "@tensamin/storage/session"; import Crypto from "@tensamin/crypto/context"; -import Mobile from "@tensamin/tauri/context"; +import DesktopMediaProvider from "@tensamin/shared/desktopMedia"; import LegalWrapper from "@/features/legal/screen"; @@ -126,9 +127,9 @@ function RootShell() { - + - + @@ -271,6 +272,8 @@ const routeTree = rootRoute.addChildren([ const router = createRouter({ routeTree, + history: + window.location.protocol === "file:" ? createHashHistory() : undefined, defaultNotFoundComponent: NotFound, }); diff --git a/apps/web/vite.config.ts b/apps/web/vite.config.ts index 92f0d91..f9d51eb 100644 --- a/apps/web/vite.config.ts +++ b/apps/web/vite.config.ts @@ -51,6 +51,7 @@ function deepFilterAssetHeaders(rootDir: string): Plugin { } export default defineConfig({ + base: "./", clearScreen: false, resolve: { tsconfigPaths: true, diff --git a/bun.lock b/bun.lock index 1f1b34a..f3f63a0 100644 --- a/bun.lock +++ b/bun.lock @@ -24,6 +24,20 @@ "typescript-eslint": "^8.59.1", }, }, + "apps/electron": { + "name": "@tensamin/electron", + "version": "0.0.3", + "dependencies": { + "electron-updater": "^6.6.2", + }, + "devDependencies": { + "@types/node": "^25.9.1", + "electron": "^39.2.7", + "electron-builder": "^26.0.12", + "esbuild": "^0.25.11", + "typescript": "~6.0.3", + }, + }, "apps/tauri": { "name": "@tensamin/tauri", "version": "0.0.0", @@ -262,9 +276,11 @@ }, "overrides": { "@tensamin/ttp-core": "https://git.methanium.net/tensamin/ttp/archive/0.0.19.tar.gz", - "@tensamin/ui": "https://git.methanium.net/tensamin/ui/archive/0.0.34.tar.gz", + "@tensamin/ui": "https://git.methanium.net/tensamin/ui/archive/0.0.36.tar.gz", }, "packages": { + "7zip-bin": ["7zip-bin@5.2.0", "", {}, "sha512-ukTPVhqG4jNzMro2qA9HSCSSVJN3aN7tlb+hfqYCt3ER0yWroeA2VR38MNrOHLQ/cVj+DaIMad0kFCtWWowh/A=="], + "@antfu/ni": ["@antfu/ni@25.0.0", "", { "dependencies": { "ansis": "^4.0.0", "fzf": "^0.5.2", "package-manager-detector": "^1.3.0", "tinyexec": "^1.0.1" }, "bin": { "na": "bin/na.mjs", "ni": "bin/ni.mjs", "nr": "bin/nr.mjs", "nci": "bin/nci.mjs", "nlx": "bin/nlx.mjs", "nun": "bin/nun.mjs", "nup": "bin/nup.mjs" } }, "sha512-9q/yCljni37pkMr4sPrI3G4jqdIk074+iukc5aFJl7kmDCCsiJrbZ6zKxnES1Gwg+i9RcDZwvktl23puGslmvA=="], "@babel/code-frame": ["@babel/code-frame@7.29.0", "", { "dependencies": { "@babel/helper-validator-identifier": "^7.28.5", "js-tokens": "^4.0.0", "picocolors": "^1.1.1" } }, "sha512-9NhCeYjq9+3uxgdtp20LSiJXJvN0FeCtNGpJxuMFZ1Kv3cWUNb6DOhJwUvcVCzKGR66cw4njwM6hrJLqgOwbcw=="], @@ -353,10 +369,28 @@ "@date-fns/tz": ["@date-fns/tz@1.4.1", "", {}, "sha512-P5LUNhtbj6YfI3iJjw5EL9eUAG6OitD0W3fWQcpQjDRc/QIsL0tRNuO1PcDvPccWL1fSTXXdE1ds+l95DV/OFA=="], + "@develar/schema-utils": ["@develar/schema-utils@2.6.5", "", { "dependencies": { "ajv": "^6.12.0", "ajv-keywords": "^3.4.1" } }, "sha512-0cp4PsWQ/9avqTVMCtZ+GirikIA36ikvjtHweU4/j8yLtgObI0+JUPhYFScgwlteveGB1rt3Cm8UhN04XayDig=="], + "@dotenvx/dotenvx": ["@dotenvx/dotenvx@1.64.0", "", { "dependencies": { "commander": "^11.1.0", "dotenv": "^17.2.1", "eciesjs": "^0.4.10", "execa": "^5.1.1", "fdir": "^6.2.0", "ignore": "^5.3.0", "object-treeify": "1.1.33", "picomatch": "^4.0.4", "which": "^4.0.0", "yocto-spinner": "^1.1.0" }, "bin": { "dotenvx": "src/cli/dotenvx.js" } }, "sha512-6+xRpZaWuHXEqnhBjae+VmQI9Uaqw5Uzu/ScpO+W7ww9Zp3lHSNBoNjFcUxhrCyc7pRGQzyDjhKzloqrPHERiQ=="], "@ecies/ciphers": ["@ecies/ciphers@0.2.6", "", { "peerDependencies": { "@noble/ciphers": "^1.0.0" } }, "sha512-patgsRPKGkhhoBjETV4XxD0En4ui5fbX0hzayqI3M8tvNMGUoUvmyYAIWwlxBc1KX5cturfqByYdj5bYGRpN9g=="], + "@electron/asar": ["@electron/asar@3.4.1", "", { "dependencies": { "commander": "^5.0.0", "glob": "^7.1.6", "minimatch": "^3.0.4" }, "bin": { "asar": "bin/asar.js" } }, "sha512-i4/rNPRS84t0vSRa2HorerGRXWyF4vThfHesw0dmcWHp+cspK743UanA0suA5Q5y8kzY2y6YKrvbIUn69BCAiA=="], + + "@electron/fuses": ["@electron/fuses@1.8.0", "", { "dependencies": { "chalk": "^4.1.1", "fs-extra": "^9.0.1", "minimist": "^1.2.5" }, "bin": { "electron-fuses": "dist/bin.js" } }, "sha512-zx0EIq78WlY/lBb1uXlziZmDZI4ubcCXIMJ4uGjXzZW0nS19TjSPeXPAjzzTmKQlJUZm0SbmZhPKP7tuQ1SsEw=="], + + "@electron/get": ["@electron/get@2.0.3", "", { "dependencies": { "debug": "^4.1.1", "env-paths": "^2.2.0", "fs-extra": "^8.1.0", "got": "^11.8.5", "progress": "^2.0.3", "semver": "^6.2.0", "sumchecker": "^3.0.1" }, "optionalDependencies": { "global-agent": "^3.0.0" } }, "sha512-Qkzpg2s9GnVV2I2BjRksUi43U5e6+zaQMcjoJy0C+C5oxaKl+fmckGDQFtRpZpZV0NQekuZZ+tGz7EA9TVnQtQ=="], + + "@electron/notarize": ["@electron/notarize@2.5.0", "", { "dependencies": { "debug": "^4.1.1", "fs-extra": "^9.0.1", "promise-retry": "^2.0.1" } }, "sha512-jNT8nwH1f9X5GEITXaQ8IF/KdskvIkOFfB2CvwumsveVidzpSc+mvhhTMdAGSYF3O+Nq49lJ7y+ssODRXu06+A=="], + + "@electron/osx-sign": ["@electron/osx-sign@1.3.3", "", { "dependencies": { "compare-version": "^0.1.2", "debug": "^4.3.4", "fs-extra": "^10.0.0", "isbinaryfile": "^4.0.8", "minimist": "^1.2.6", "plist": "^3.0.5" }, "bin": { "electron-osx-flat": "bin/electron-osx-flat.js", "electron-osx-sign": "bin/electron-osx-sign.js" } }, "sha512-KZ8mhXvWv2rIEgMbWZ4y33bDHyUKMXnx4M0sTyPNK/vcB81ImdeY9Ggdqy0SWbMDgmbqyQ+phgejh6V3R2QuSg=="], + + "@electron/rebuild": ["@electron/rebuild@4.0.4", "", { "dependencies": { "@malept/cross-spawn-promise": "^2.0.0", "debug": "^4.1.1", "node-abi": "^4.2.0", "node-api-version": "^0.2.1", "node-gyp": "^12.2.0", "read-binary-file-arch": "^1.0.6" }, "bin": { "electron-rebuild": "lib/cli.js" } }, "sha512-Rzc39XPdk/+/wBG8MfwAHohXflep0ITUfulb6Rgz3R0NeSB1noE+E9/M/cb8ftCAiyDD9PPhLuuWgE1GaInbKg=="], + + "@electron/universal": ["@electron/universal@2.0.3", "", { "dependencies": { "@electron/asar": "^3.3.1", "@malept/cross-spawn-promise": "^2.0.0", "debug": "^4.3.1", "dir-compare": "^4.2.0", "fs-extra": "^11.1.1", "minimatch": "^9.0.3", "plist": "^3.1.0" } }, "sha512-Wn9sPYIVFRFl5HmwMJkARCCf7rqK/EurkfQ/rJZ14mHP3iYTjZSIOSVonEAnhWeAXwtw7zOekGRlc6yTtZ0t+g=="], + + "@electron/windows-sign": ["@electron/windows-sign@1.2.2", "", { "dependencies": { "cross-dirname": "^0.1.0", "debug": "^4.3.4", "fs-extra": "^11.1.1", "minimist": "^1.2.8", "postject": "^1.0.0-alpha.6" }, "bin": { "electron-windows-sign": "bin/electron-windows-sign.js" } }, "sha512-dfZeox66AvdPtb2lD8OsIIQh12Tp0GNCRUDfBHIKGpbmopZto2/A8nSpYYLoedPIHpqkeblZ/k8OV0Gy7PYuyQ=="], + "@emnapi/core": ["@emnapi/core@1.10.0", "", { "dependencies": { "@emnapi/wasi-threads": "1.2.1", "tslib": "^2.4.0" } }, "sha512-yq6OkJ4p82CAfPl0u9mQebQHKPJkY7WrIuk205cTYnYe+k2Z8YBh11FrbRG/H6ihirqcacOgl2BIO8oyMQLeXw=="], "@emnapi/runtime": ["@emnapi/runtime@1.10.0", "", { "dependencies": { "tslib": "^2.4.0" } }, "sha512-ewvYlk86xUoGI0zQRNq/mC+16R1QeDlKQy21Ki3oSYXNgLb45GV1P6A0M+/s6nyCuNDqe5VpaY84BzXGwVbwFA=="], @@ -463,6 +497,8 @@ "@inquirer/type": ["@inquirer/type@4.0.5", "", { "peerDependencies": { "@types/node": ">=18" }, "optionalPeers": ["@types/node"] }, "sha512-aetVUNeKNc/VriqXlw1NRSW0zhMBB0W4bNbWRJgzRl/3d0QNDQFfk0GO5SDdtjMZVg6o8ZKEiadd7SCCzoOn5Q=="], + "@isaacs/fs-minipass": ["@isaacs/fs-minipass@4.0.1", "", { "dependencies": { "minipass": "^7.0.4" } }, "sha512-wgm9Ehl2jpeqP3zw/7mo3kRHFp5MEDhqAdwy1fTGkHAwnkGOVsgpvQhL8B5n1qlb01jV3n/bI0ZfZp5lWA1k4w=="], + "@jridgewell/gen-mapping": ["@jridgewell/gen-mapping@0.3.13", "", { "dependencies": { "@jridgewell/sourcemap-codec": "^1.5.0", "@jridgewell/trace-mapping": "^0.3.24" } }, "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA=="], "@jridgewell/remapping": ["@jridgewell/remapping@2.3.5", "", { "dependencies": { "@jridgewell/gen-mapping": "^0.3.5", "@jridgewell/trace-mapping": "^0.3.24" } }, "sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ=="], @@ -495,6 +531,10 @@ "@livekit/protocol": ["@livekit/protocol@1.45.3", "", { "dependencies": { "@bufbuild/protobuf": "^1.10.0" } }, "sha512-WmMxBTsy4dRBqcrswFwUUlgq3Z0nnhOqKR6tX749Rb/PcB1yBMUtrHxZvcsS6qi3/5+86zHeVG+exmu1sZqfJg=="], + "@malept/cross-spawn-promise": ["@malept/cross-spawn-promise@2.0.0", "", { "dependencies": { "cross-spawn": "^7.0.1" } }, "sha512-1DpKU0Z5ThltBwjNySMC14g0CkbyhCaz9FkhxqNsZI6uAPJXFS8cMXlBKo26FJ8ZuW6S9GCMcR9IO5k2X5/9Fg=="], + + "@malept/flatpak-bundler": ["@malept/flatpak-bundler@0.4.0", "", { "dependencies": { "debug": "^4.1.1", "fs-extra": "^9.0.0", "lodash": "^4.17.15", "tmp-promise": "^3.0.2" } }, "sha512-9QOtNffcOF/c1seMCDnjckb3R9WHcG34tky+FHpNKKCW0wc/scYLwMtO+ptyGUfMW0/b/n4qRiALlaFHc9Oj7Q=="], + "@marijn/find-cluster-break": ["@marijn/find-cluster-break@1.0.2", "", {}, "sha512-l0h88YhZFyKdXIFNfSWpyjStDjGHwZ/U7iobcK1cQQD8sejsONdQtTVU+1wVN1PBw40PiiHB1vA5S7VTfQiP9g=="], "@modelcontextprotocol/sdk": ["@modelcontextprotocol/sdk@1.29.0", "", { "dependencies": { "@hono/node-server": "^1.19.9", "ajv": "^8.17.1", "ajv-formats": "^3.0.1", "content-type": "^1.0.5", "cors": "^2.8.5", "cross-spawn": "^7.0.5", "eventsource": "^3.0.2", "eventsource-parser": "^3.0.0", "express": "^5.2.1", "express-rate-limit": "^8.2.1", "hono": "^4.11.4", "jose": "^6.1.3", "json-schema-typed": "^8.0.2", "pkce-challenge": "^5.0.0", "raw-body": "^3.0.0", "zod": "^3.25 || ^4.0", "zod-to-json-schema": "^3.25.1" }, "peerDependencies": { "@cfworker/json-schema": "^4.1.1" }, "optionalPeers": ["@cfworker/json-schema"] }, "sha512-zo37mZA9hJWpULgkRpowewez1y6ML5GsXJPY8FI0tBBCd77HEvza4jDqRKOXgHNn867PVGCyTdzqpz0izu5ZjQ=="], @@ -593,12 +633,16 @@ "@sec-ant/readable-stream": ["@sec-ant/readable-stream@0.4.1", "", {}, "sha512-831qok9r2t8AlxLko40y2ebgSDhenenCatLVeW/uBtnHPyhHOvG0C7TvfgecV+wHzIm5KUICgzmVpWS+IMEAeg=="], + "@sindresorhus/is": ["@sindresorhus/is@4.6.0", "", {}, "sha512-t09vSN3MdfsyCHoFcTRCH/iUtG7OJ0CsjzB8cjAmKc/va/kIgeDI/TxsigdncE/4be734m0cvIYwNaV4i2XqAw=="], + "@sindresorhus/merge-streams": ["@sindresorhus/merge-streams@4.0.0", "", {}, "sha512-tlqY9xq5ukxTUZBmoOp+m61cqwQD5pHJtFY3Mn8CA8ps6yghLH/Hw8UPdqg4OLmFW3IFlcXnQNmo/dh8HzXYIQ=="], "@standard-schema/spec": ["@standard-schema/spec@1.1.0", "", {}, "sha512-l2aFy5jALhniG5HgqrD6jXLi/rUWrKvqN/qJx6yoJsgKhblVd+iqqU4RCXavm/jPityDo5TCvKMnpjKnOriy0w=="], "@standard-schema/utils": ["@standard-schema/utils@0.3.0", "", {}, "sha512-e7Mew686owMaPJVNNLs55PUvgz371nKgwsc4vxE49zsODpJEnxgxRo2y/OKrqueavXgZNMDVj3DdHFlaSAeU8g=="], + "@szmarczak/http-timer": ["@szmarczak/http-timer@4.0.6", "", { "dependencies": { "defer-to-connect": "^2.0.0" } }, "sha512-4BAffykYOgO+5nzBWYwE3W90sBgLJoUPRWWcL8wlyiM8IB8ipJz3UMJ9KXQd1RKQXpKp8Tutn80HZtWsu2u76w=="], + "@tabby_ai/hijri-converter": ["@tabby_ai/hijri-converter@1.0.5", "", {}, "sha512-r5bClKrcIusDoo049dSL8CawnHR6mRdDwhlQuIgZRNty68q0x8k3Lf1BtPAMxRf/GgnHBnIO4ujd3+GQdLWzxQ=="], "@tailwindcss/node": ["@tailwindcss/node@4.2.4", "", { "dependencies": { "@jridgewell/remapping": "^2.3.5", "enhanced-resolve": "^5.19.0", "jiti": "^2.6.1", "lightningcss": "1.32.0", "magic-string": "^0.30.21", "source-map-js": "^1.2.1", "tailwindcss": "4.2.4" } }, "sha512-Ai7+yQPxz3ddrDQzFfBKdHEVBg0w3Zl83jnjuwxnZOsnH9pGn93QHQtpU0p/8rYWxvbFZHneni6p1BSLK4DkGA=="], @@ -687,6 +731,8 @@ "@tensamin/crypto": ["@tensamin/crypto@workspace:packages/crypto"], + "@tensamin/electron": ["@tensamin/electron@workspace:apps/electron"], + "@tensamin/markdown": ["@tensamin/markdown@workspace:packages/markdown"], "@tensamin/notifications": ["@tensamin/notifications@workspace:packages/notifications"], @@ -703,7 +749,7 @@ "@tensamin/ttp-core": ["@tensamin/ttp-core@https://git.methanium.net/tensamin/ttp/archive/0.0.19.tar.gz", { "dependencies": { "@eslint/js": "^10.0.1", "@typescript-eslint/parser": "^8.59.1", "@webtransport-bun/webtransport": "^0.3.0", "globals": "^17.5.0", "typescript": "^6.0.3", "typescript-eslint": "^8.59.1", "zod": "^4.4.1" } }, "sha512-La9VqXqJFtzzsRQotXVp+3Vr6u8kj4mQ4wTlSIMRDxKFBnbCvtZyB3V/f8HiIlf7FlZ0Xg0suUUpnamvtcvs9w=="], - "@tensamin/ui": ["@tensamin/ui@https://git.methanium.net/tensamin/ui/archive/0.0.34.tar.gz", { "dependencies": { "@base-ui/react": "^1.3.0", "@fontsource-variable/inter": "^5.2.6", "@tauri-apps/api": "^2", "class-variance-authority": "^0.7.1", "clsx": "^2.1.1", "cmdk": "^1.1.1", "date-fns": "^4.1.0", "embla-carousel-react": "^8.6.0", "input-otp": "^1.4.2", "lucide-react": "^1.8.0", "next-themes": "^0.4.6", "react-day-picker": "^9.14.0", "react-resizable-panels": "^4.10.0", "recharts": "3.8.0", "shadcn": "^3.5.0", "sonner": "^2.0.7", "tailwind-merge": "^3.5.0", "tw-animate-css": "^1.3.0", "vaul": "^1.1.2" }, "peerDependencies": { "react": "^19.2.0", "react-dom": "^19.2.0" } }, "sha512-hp7rV0a0gfD/rNw9et+PqM1PPkgFC6/Z7eYfza6NIp/m+a8/r5Um+S/8tzBDCgZmQC9Y1sJsjesH7mXZz6Jmuw=="], + "@tensamin/ui": ["@tensamin/ui@https://git.methanium.net/tensamin/ui/archive/0.0.36.tar.gz", { "dependencies": { "@base-ui/react": "^1.3.0", "@fontsource-variable/inter": "^5.2.6", "class-variance-authority": "^0.7.1", "clsx": "^2.1.1", "cmdk": "^1.1.1", "date-fns": "^4.1.0", "embla-carousel-react": "^8.6.0", "input-otp": "^1.4.2", "lucide-react": "^1.8.0", "next-themes": "^0.4.6", "react-day-picker": "^9.14.0", "react-resizable-panels": "^4.10.0", "recharts": "3.8.0", "shadcn": "^3.5.0", "sonner": "^2.0.7", "tailwind-merge": "^3.5.0", "tw-animate-css": "^1.3.0", "vaul": "^1.1.2" }, "peerDependencies": { "react": "^19.2.0", "react-dom": "^19.2.0" } }, "sha512-5zql8LtBKVn7WuQDCIdLbthKvLEyxjWShAceXCYbk+kwO41VVILhS1EWuDvjgvv2BBdyuxoVWvdblPIW4BcdSQ=="], "@tensamin/user": ["@tensamin/user@workspace:packages/user"], @@ -713,6 +759,8 @@ "@tybys/wasm-util": ["@tybys/wasm-util@0.10.1", "", { "dependencies": { "tslib": "^2.4.0" } }, "sha512-9tTaPJLSiejZKx+Bmog4uSubteqTvFrVrURwkmHixBo0G4seD0zUxp98E1DzUBJxLQ3NPwXrGKDiVjwx/DpPsg=="], + "@types/cacheable-request": ["@types/cacheable-request@6.0.3", "", { "dependencies": { "@types/http-cache-semantics": "*", "@types/keyv": "^3.1.4", "@types/node": "*", "@types/responselike": "^1.0.0" } }, "sha512-IQ3EbTzGxIigb1I3qPZc1rWJnH0BmSKv5QYTalEwweFvyBDLSAe24zP0le/hyi7ecGfZVlIVAg4BZqb8WBwKqw=="], + "@types/d3-array": ["@types/d3-array@3.2.2", "", {}, "sha512-hOLWVbm7uRza0BYXpIIW5pxfrKe0W+D5lrFiAEYR+pb6w3N2SwSMaJbXdUfSEv+dT4MfHBLtn5js0LAWaO6otw=="], "@types/d3-color": ["@types/d3-color@3.1.3", "", {}, "sha512-iO90scth9WAbmgv7ogoq57O9YpKmFBbmoEoCHDB2xMBY0+/KVrqAaCDyCE16dUspeOvIxFFRI+0sEtqDqy2b4A=="], @@ -731,22 +779,36 @@ "@types/d3-timer": ["@types/d3-timer@3.0.2", "", {}, "sha512-Ps3T8E8dZDam6fUyNiMkekK3XUsaUEik+idO9/YjPtfj2qruF8tFBXS7XhtE4iIXBLxhmLjP3SXpLhVf21I9Lw=="], + "@types/debug": ["@types/debug@4.1.13", "", { "dependencies": { "@types/ms": "*" } }, "sha512-KSVgmQmzMwPlmtljOomayoR89W4FynCAi3E8PPs7vmDVPe84hT+vGPKkJfThkmXs0x0jAaa9U8uW8bbfyS2fWw=="], + "@types/dom-mediacapture-record": ["@types/dom-mediacapture-record@1.0.22", "", {}, "sha512-mUMZLK3NvwRLcAAT9qmcK+9p7tpU2FHdDsntR3YI4+GY88XrgG4XiE7u1Q2LAN2/FZOz/tdMDC3GQCR4T8nFuw=="], "@types/esrecurse": ["@types/esrecurse@4.3.1", "", {}, "sha512-xJBAbDifo5hpffDBuHl0Y8ywswbiAp/Wi7Y/GtAgSlZyIABppyurxVueOPE8LUQOxdlgi6Zqce7uoEpqNTeiUw=="], "@types/estree": ["@types/estree@1.0.8", "", {}, "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w=="], + "@types/fs-extra": ["@types/fs-extra@9.0.13", "", { "dependencies": { "@types/node": "*" } }, "sha512-nEnwB++1u5lVDM2UI4c1+5R+FYaKfaAzS4OococimjVm3nQw3TuzH5UNsocrcTBbhnerblyHj4A49qXbIiZdpA=="], + + "@types/http-cache-semantics": ["@types/http-cache-semantics@4.2.0", "", {}, "sha512-L3LgimLHXtGkWikKnsPg0/VFx9OGZaC+eN1u4r+OB1XRqH3meBIAVC2zr1WdMH+RHmnRkqliQAOHNJ/E0j/e0Q=="], + "@types/json-schema": ["@types/json-schema@7.0.15", "", {}, "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA=="], + "@types/keyv": ["@types/keyv@3.1.4", "", { "dependencies": { "@types/node": "*" } }, "sha512-BQ5aZNSCpj7D6K2ksrRCTmKRLEpnPvWDiLPfoGyhZ++8YtiK9d/3DBKPJgry359X/P1PfruyYwvnvwFjuEiEIg=="], + + "@types/ms": ["@types/ms@2.1.0", "", {}, "sha512-GsCCIZDE/p3i96vtEqx+7dBUGXrc7zeSK3wwPHIaRThS+9OhWIXRqzs4d6k1SVU8g91DrNRWxWUGhp5KXQb2VA=="], + "@types/node": ["@types/node@25.6.0", "", { "dependencies": { "undici-types": "~7.19.0" } }, "sha512-+qIYRKdNYJwY3vRCZMdJbPLJAtGjQBudzZzdzwQYkEPQd+PJGixUL5QfvCLDaULoLv+RhT3LDkwEfKaAkgSmNQ=="], + "@types/plist": ["@types/plist@3.0.5", "", { "dependencies": { "@types/node": "*", "xmlbuilder": ">=11.0.1" } }, "sha512-E6OCaRmAe4WDmWNsL/9RMqdkkzDCY1etutkflWk4c+AcjDU07Pcz1fQwTX0TQz+Pxqn9i4L1TU3UFpjnrcDgxA=="], + "@types/qrcode": ["@types/qrcode@1.5.6", "", { "dependencies": { "@types/node": "*" } }, "sha512-te7NQcV2BOvdj2b1hCAHzAoMNuj65kNBMz0KBaxM6c3VGBOhU0dURQKOtH8CFNI/dsKkwlv32p26qYQTWoB5bw=="], "@types/react": ["@types/react@19.2.14", "", { "dependencies": { "csstype": "^3.2.2" } }, "sha512-ilcTH/UniCkMdtexkoCN0bI7pMcJDvmQFPvuPvmEaYA/NSfFTAgdUSLAoVjaRJm7+6PvcM+q1zYOwS4wTYMF9w=="], "@types/react-dom": ["@types/react-dom@19.2.3", "", { "peerDependencies": { "@types/react": "^19.2.0" } }, "sha512-jp2L/eY6fn+KgVVQAOqYItbF0VY/YApe5Mz2F0aykSO8gx31bYCZyvSeYxCHKvzHG5eZjc+zyaS5BrBWya2+kQ=="], + "@types/responselike": ["@types/responselike@1.0.3", "", { "dependencies": { "@types/node": "*" } }, "sha512-H/+L+UkTV33uf49PH5pCAUBVPNj2nDBXTN+qS1dOwyyg24l3CcicicCA7ca+HMvJBZcFgl5r8e+RR6elsb4Lyw=="], + "@types/set-cookie-parser": ["@types/set-cookie-parser@2.4.10", "", { "dependencies": { "@types/node": "*" } }, "sha512-GGmQVGpQWUe5qglJozEjZV/5dyxbOOZ0LHe/lqyWssB88Y4svNfst0uqBVscdDeIKl5Jy5+aPSvy7mI9tYRguw=="], "@types/statuses": ["@types/statuses@2.0.6", "", {}, "sha512-xMAgYwceFhRA2zY+XbEA7mxYbA093wdiW8Vu6gZPGWy9cmOyU9XesH1tNcEWsKFd5Vzrqx5T3D38PWx1FIIXkA=="], @@ -755,6 +817,10 @@ "@types/validate-npm-package-name": ["@types/validate-npm-package-name@4.0.2", "", {}, "sha512-lrpDziQipxCEeK5kWxvljWYhUvOiB2A9izZd9B2AFarYAkqZshb4lPbRs7zKEic6eGtH8V/2qJW+dPp9OtF6bw=="], + "@types/verror": ["@types/verror@1.10.11", "", {}, "sha512-RlDm9K7+o5stv0Co8i8ZRGxDbrTxhJtgjqjFyVh/tXQyl/rYtTKlnTvZ88oSTeYREWurwx20Js4kTuKCsFkUtg=="], + + "@types/yauzl": ["@types/yauzl@2.10.3", "", { "dependencies": { "@types/node": "*" } }, "sha512-oJoftv0LSuaDZE3Le4DbKX+KS9G36NzOeSap90UIK0yMA/NhKJhqlSGtNDORNRaIbQfzjXDrQa0ytJ6mNRGz/Q=="], + "@typescript-eslint/eslint-plugin": ["@typescript-eslint/eslint-plugin@8.59.1", "", { "dependencies": { "@eslint-community/regexpp": "^4.12.2", "@typescript-eslint/scope-manager": "8.59.1", "@typescript-eslint/type-utils": "8.59.1", "@typescript-eslint/utils": "8.59.1", "@typescript-eslint/visitor-keys": "8.59.1", "ignore": "^7.0.5", "natural-compare": "^1.4.0", "ts-api-utils": "^2.5.0" }, "peerDependencies": { "@typescript-eslint/parser": "^8.59.1", "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0", "typescript": ">=4.8.4 <6.1.0" } }, "sha512-BOziFIfE+6osHO9FoJG4zjoHUcvI7fTNBSpdAwrNH0/TLvzjsk2oo8XSSOT2HhqUyhZPfHv4UOffoJ9oEEQ7Ag=="], "@typescript-eslint/parser": ["@typescript-eslint/parser@8.59.1", "", { "dependencies": { "@typescript-eslint/scope-manager": "8.59.1", "@typescript-eslint/types": "8.59.1", "@typescript-eslint/typescript-estree": "8.59.1", "@typescript-eslint/visitor-keys": "8.59.1", "debug": "^4.4.3" }, "peerDependencies": { "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0", "typescript": ">=4.8.4 <6.1.0" } }, "sha512-HDQH9O/47Dxi1ceDhBXdaldtf/WV9yRYMjbjCuNk3qnaTD564qwv61Y7+gTxwxRKzSrgO5uhtw584igXVuuZkA=="], @@ -779,6 +845,10 @@ "@webtransport-bun/webtransport": ["@webtransport-bun/webtransport@0.3.0", "", { "os": [ "linux", "win32", "darwin", ], "cpu": [ "x64", "arm64", ] }, "sha512-/OX/TCgBD64n/0BjMNytObq5NK2pAM0KOoXBEw49l3sTmbVXNTPP1ZRPIdIyV43agM+mKtZBaV3Er3k3YoB6sw=="], + "@xmldom/xmldom": ["@xmldom/xmldom@0.8.13", "", {}, "sha512-KRYzxepc14G/CEpEGc3Yn+JKaAeT63smlDr+vjB8jRfgTBBI9wRj/nkQEO+ucV8p8I9bfKLWp37uHgFrbntPvw=="], + + "abbrev": ["abbrev@4.0.0", "", {}, "sha512-a1wflyaL0tHtJSmLSOVybYhy22vRih4eduhhrkcjgrWGnRfrZtovJ2FRjxuTtkkj47O/baf0R86QU5OuYpz8fA=="], + "accepts": ["accepts@2.0.0", "", { "dependencies": { "mime-types": "^3.0.0", "negotiator": "^1.0.0" } }, "sha512-5cvg6CtKwfgdmVqY1WIiXKc3Q1bkRqGLi+2W/6ao+6Y7gu/RCwRuAhGEzh5B4KlszSuTLgZYuqFqo5bImjNKng=="], "acorn": ["acorn@8.16.0", "", { "bin": { "acorn": "bin/acorn" } }, "sha512-UVJyE9MttOsBQIDKw1skb9nAwQuR5wuGD3+82K6JgJlm/Y+KI92oNsMNGZCYdDsVtRHSak0pcV5Dno5+4jh9sw=="], @@ -791,34 +861,70 @@ "ajv-formats": ["ajv-formats@3.0.1", "", { "dependencies": { "ajv": "^8.0.0" } }, "sha512-8iUql50EUR+uUcdRQ3HDqa6EVyo3docL8g5WJ3FNcWmu62IbkGUue/pEyLBW8VGKKucTPgqeks4fIU1DA4yowQ=="], + "ajv-keywords": ["ajv-keywords@3.5.2", "", { "peerDependencies": { "ajv": "^6.9.1" } }, "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ=="], + "ansi-regex": ["ansi-regex@6.2.2", "", {}, "sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg=="], "ansi-styles": ["ansi-styles@4.3.0", "", { "dependencies": { "color-convert": "^2.0.1" } }, "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg=="], "ansis": ["ansis@4.2.0", "", {}, "sha512-HqZ5rWlFjGiV0tDm3UxxgNRqsOTniqoKZu0pIAfh7TZQMGuZK+hH0drySty0si0QXj1ieop4+SkSfPZBPPkHig=="], + "app-builder-bin": ["app-builder-bin@5.0.0-alpha.12", "", {}, "sha512-j87o0j6LqPL3QRr8yid6c+Tt5gC7xNfYo6uQIQkorAC6MpeayVMZrEDzKmJJ/Hlv7EnOQpaRm53k6ktDYZyB6w=="], + + "app-builder-lib": ["app-builder-lib@26.8.1", "", { "dependencies": { "@develar/schema-utils": "~2.6.5", "@electron/asar": "3.4.1", "@electron/fuses": "^1.8.0", "@electron/get": "^3.0.0", "@electron/notarize": "2.5.0", "@electron/osx-sign": "1.3.3", "@electron/rebuild": "^4.0.3", "@electron/universal": "2.0.3", "@malept/flatpak-bundler": "^0.4.0", "@types/fs-extra": "9.0.13", "async-exit-hook": "^2.0.1", "builder-util": "26.8.1", "builder-util-runtime": "9.5.1", "chromium-pickle-js": "^0.2.0", "ci-info": "4.3.1", "debug": "^4.3.4", "dotenv": "^16.4.5", "dotenv-expand": "^11.0.6", "ejs": "^3.1.8", "electron-publish": "26.8.1", "fs-extra": "^10.1.0", "hosted-git-info": "^4.1.0", "isbinaryfile": "^5.0.0", "jiti": "^2.4.2", "js-yaml": "^4.1.0", "json5": "^2.2.3", "lazy-val": "^1.0.5", "minimatch": "^10.0.3", "plist": "3.1.0", "proper-lockfile": "^4.1.2", "resedit": "^1.7.0", "semver": "~7.7.3", "tar": "^7.5.7", "temp-file": "^3.4.0", "tiny-async-pool": "1.3.0", "which": "^5.0.0" }, "peerDependencies": { "dmg-builder": "26.8.1", "electron-builder-squirrel-windows": "26.8.1" } }, "sha512-p0Im/Dx5C4tmz8QEE1Yn4MkuPC8PrnlRneMhWJj7BBXQfNTJUshM/bp3lusdEsDbvvfJZpXWnYesgSLvwtM2Zw=="], + "argparse": ["argparse@2.0.1", "", {}, "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q=="], "aria-hidden": ["aria-hidden@1.2.6", "", { "dependencies": { "tslib": "^2.0.0" } }, "sha512-ik3ZgC9dY/lYVVM++OISsaYDeg1tb0VtP5uL3ouh1koGOaUMDPpbFIei4JkFimWUFPn90sbMNMXQAIVOlnYKJA=="], + "assert-plus": ["assert-plus@1.0.0", "", {}, "sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw=="], + "ast-types": ["ast-types@0.16.1", "", { "dependencies": { "tslib": "^2.0.1" } }, "sha512-6t10qk83GOG8p0vKmaCr8eiilZwO171AvbROMtvvNiwrTly62t+7XkA8RdIIVbpMhCASAsxgAzdRSwh6nw/5Dg=="], + "astral-regex": ["astral-regex@2.0.0", "", {}, "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ=="], + + "async": ["async@3.2.6", "", {}, "sha512-htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0Ti6C2AA=="], + + "async-exit-hook": ["async-exit-hook@2.0.1", "", {}, "sha512-NW2cX8m1Q7KPA7a5M2ULQeZ2wR5qI5PAbw5L0UOMxdioVk9PMZ0h1TmyZEkPYrCvYjDlFICusOu1dlEKAAeXBw=="], + + "asynckit": ["asynckit@0.4.0", "", {}, "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q=="], + + "at-least-node": ["at-least-node@1.0.0", "", {}, "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg=="], + "balanced-match": ["balanced-match@4.0.4", "", {}, "sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA=="], + "base64-js": ["base64-js@1.5.1", "", {}, "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA=="], + "baseline-browser-mapping": ["baseline-browser-mapping@2.10.25", "", { "bin": { "baseline-browser-mapping": "dist/cli.cjs" } }, "sha512-QO/VHsXCQdnzADMfmkeOPvHdIAkoB7i0/rGjINPJEetLx75hNttVWGQ/jycHUDP9zZ9rupbm60WRxcwViB0MiA=="], "body-parser": ["body-parser@2.2.2", "", { "dependencies": { "bytes": "^3.1.2", "content-type": "^1.0.5", "debug": "^4.4.3", "http-errors": "^2.0.0", "iconv-lite": "^0.7.0", "on-finished": "^2.4.1", "qs": "^6.14.1", "raw-body": "^3.0.1", "type-is": "^2.0.1" } }, "sha512-oP5VkATKlNwcgvxi0vM0p/D3n2C3EReYVX+DNYs5TjZFn/oQt2j+4sVJtSMr18pdRr8wjTcBl6LoV+FUwzPmNA=="], + "boolean": ["boolean@3.2.0", "", {}, "sha512-d0II/GO9uf9lfUHH2BQsjxzRJZBdsjgsBiW4BvhWk/3qoKwQFjIDVN19PfX8F2D/r9PCMTtLWjYVCFrpeYUzsw=="], + "brace-expansion": ["brace-expansion@5.0.5", "", { "dependencies": { "balanced-match": "^4.0.2" } }, "sha512-VZznLgtwhn+Mact9tfiwx64fA9erHH/MCXEUfB/0bX/6Fz6ny5EGTXYltMocqg4xFAQZtnO3DHWWXi8RiuN7cQ=="], "braces": ["braces@3.0.3", "", { "dependencies": { "fill-range": "^7.1.1" } }, "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA=="], "browserslist": ["browserslist@4.28.2", "", { "dependencies": { "baseline-browser-mapping": "^2.10.12", "caniuse-lite": "^1.0.30001782", "electron-to-chromium": "^1.5.328", "node-releases": "^2.0.36", "update-browserslist-db": "^1.2.3" }, "bin": { "browserslist": "cli.js" } }, "sha512-48xSriZYYg+8qXna9kwqjIVzuQxi+KYWp2+5nCYnYKPTr0LvD89Jqk2Or5ogxz0NUMfIjhh2lIUX/LyX9B4oIg=="], + "buffer": ["buffer@5.7.1", "", { "dependencies": { "base64-js": "^1.3.1", "ieee754": "^1.1.13" } }, "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ=="], + + "buffer-crc32": ["buffer-crc32@0.2.13", "", {}, "sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ=="], + + "buffer-from": ["buffer-from@1.1.2", "", {}, "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ=="], + + "builder-util": ["builder-util@26.8.1", "", { "dependencies": { "7zip-bin": "~5.2.0", "@types/debug": "^4.1.6", "app-builder-bin": "5.0.0-alpha.12", "builder-util-runtime": "9.5.1", "chalk": "^4.1.2", "cross-spawn": "^7.0.6", "debug": "^4.3.4", "fs-extra": "^10.1.0", "http-proxy-agent": "^7.0.0", "https-proxy-agent": "^7.0.0", "js-yaml": "^4.1.0", "sanitize-filename": "^1.6.3", "source-map-support": "^0.5.19", "stat-mode": "^1.0.0", "temp-file": "^3.4.0", "tiny-async-pool": "1.3.0" } }, "sha512-pm1lTYbGyc90DHgCDO7eo8Rl4EqKLciayNbZqGziqnH9jrlKe8ZANGdityLZU+pJh16dfzjAx2xQq9McuIPEtw=="], + + "builder-util-runtime": ["builder-util-runtime@9.5.1", "", { "dependencies": { "debug": "^4.3.4", "sax": "^1.2.4" } }, "sha512-qt41tMfgHTllhResqM5DcnHyDIWNgzHvuY2jDcYP9iaGpkWxTUzV6GQjDeLnlR1/DtdlcsWQbA7sByMpmJFTLQ=="], + "bundle-name": ["bundle-name@4.1.0", "", { "dependencies": { "run-applescript": "^7.0.0" } }, "sha512-tjwM5exMg6BGRI+kNmTntNsvdZS1X8BFYS6tnJ2hdH0kVxM6/eVZ2xy+FqStSWvYmtfFMDLIxurorHwDKfDz5Q=="], "bytes": ["bytes@3.1.2", "", {}, "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg=="], + "cacheable-lookup": ["cacheable-lookup@5.0.4", "", {}, "sha512-2/kNscPhpcxrOigMZzbiWF7dz8ilhb/nIHU3EyZiXWXpeq/au8qJ8VhdftMkty3n7Gj6HIGalQG8oiBNB3AJgA=="], + + "cacheable-request": ["cacheable-request@7.0.4", "", { "dependencies": { "clone-response": "^1.0.2", "get-stream": "^5.1.0", "http-cache-semantics": "^4.0.0", "keyv": "^4.0.0", "lowercase-keys": "^2.0.0", "normalize-url": "^6.0.1", "responselike": "^2.0.0" } }, "sha512-v+p6ongsrp0yTGbJXjgxPow2+DL93DASP4kXCDKb8/bwRtt9OEF3whggkkDkGNzgcWy2XaF4a8nZglC7uElscg=="], + "call-bind-apply-helpers": ["call-bind-apply-helpers@1.0.2", "", { "dependencies": { "es-errors": "^1.3.0", "function-bind": "^1.1.2" } }, "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ=="], "call-bound": ["call-bound@1.0.4", "", { "dependencies": { "call-bind-apply-helpers": "^1.0.2", "get-intrinsic": "^1.3.0" } }, "sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg=="], @@ -829,7 +935,13 @@ "caniuse-lite": ["caniuse-lite@1.0.30001791", "", {}, "sha512-yk0l/YSrOnFZk3UROpDLQD9+kC1l4meK/wed583AXrzoarMGJcbRi2Q4RaUYbKxYAsZ8sWmaSa/DsLmdBeI1vQ=="], - "chalk": ["chalk@5.6.2", "", {}, "sha512-7NzBL0rN6fMUW+f7A6Io4h40qQlG+xGmtMxfbnH/K7TAtt8JQWVQK+6g0UXKMeVJoyV5EkkNsErQ8pVD3bLHbA=="], + "chalk": ["chalk@4.1.2", "", { "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" } }, "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA=="], + + "chownr": ["chownr@3.0.0", "", {}, "sha512-+IxzY9BZOQd/XuYPRmrvEVjF/nqj5kgT4kEq7VofrDoM1MxoRjEWkrCC3EtLi59TVawxTAn+orJwFQcrqEN1+g=="], + + "chromium-pickle-js": ["chromium-pickle-js@0.2.0", "", {}, "sha512-1R5Fho+jBq0DDydt+/vHWj5KJNJCKdARKOCwZUen84I5BreWoLqRLANH1U87eJy1tiASPtMnGqJJq0ZsLoRPOw=="], + + "ci-info": ["ci-info@4.4.0", "", {}, "sha512-77PSwercCZU2Fc4sX94eF8k8Pxte6JAwL4/ICZLFjJLqegs7kCuAsqqj/70NQF6TvDpgFjkubQB2FW2ZZddvQg=="], "class-variance-authority": ["class-variance-authority@0.7.1", "", { "dependencies": { "clsx": "^2.1.1" } }, "sha512-Ka+9Trutv7G8M6WT6SeiRWz792K5qEqIGEGzXKhAE6xOWAY6pPH8U+9IY3oCMv6kqTmLsv7Xh/2w2RigkePMsg=="], @@ -837,9 +949,13 @@ "cli-spinners": ["cli-spinners@2.9.2", "", {}, "sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg=="], + "cli-truncate": ["cli-truncate@2.1.0", "", { "dependencies": { "slice-ansi": "^3.0.0", "string-width": "^4.2.0" } }, "sha512-n8fOixwDD6b/ObinzTrp1ZKFzbgvKZvuz/TvejnLn1aQfC6r52XEx85FmuC+3HI+JM7coBRXUvNqEU2PHVrHpg=="], + "cli-width": ["cli-width@4.1.0", "", {}, "sha512-ouuZd4/dm2Sw5Gmqy6bGyNNNe1qt9RpmxveLSO7KcgsTnU7RXfsw+/bukWGo1abgBiMAic068rclZsO4IWmmxQ=="], - "cliui": ["cliui@6.0.0", "", { "dependencies": { "string-width": "^4.2.0", "strip-ansi": "^6.0.0", "wrap-ansi": "^6.2.0" } }, "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ=="], + "cliui": ["cliui@8.0.1", "", { "dependencies": { "string-width": "^4.2.0", "strip-ansi": "^6.0.1", "wrap-ansi": "^7.0.0" } }, "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ=="], + + "clone-response": ["clone-response@1.0.3", "", { "dependencies": { "mimic-response": "^1.0.0" } }, "sha512-ROoL94jJH2dUVML2Y/5PEDNaSHgeOdSDicUyS7izcF63G6sTc/FTjLub4b8Il9S8S0beOfYt0TaA5qvFK+w0wA=="], "clsx": ["clsx@2.1.1", "", {}, "sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA=="], @@ -851,10 +967,16 @@ "color-name": ["color-name@1.1.4", "", {}, "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA=="], + "combined-stream": ["combined-stream@1.0.8", "", { "dependencies": { "delayed-stream": "~1.0.0" } }, "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg=="], + "comlink": ["comlink@4.4.2", "", {}, "sha512-OxGdvBmJuNKSCMO4NTl1L47VRp6xn2wG4F/2hYzB6tiCb709otOxtEYCSvK80PtjODfXXZu8ds+Nw5kVCjqd2g=="], "commander": ["commander@14.0.3", "", {}, "sha512-H+y0Jo/T1RZ9qPP4Eh1pkcQcLRglraJaSLoyOtHxu6AapkjWVCy2Sit1QQ4x3Dng8qDlSsZEet7g5Pq06MvTgw=="], + "compare-version": ["compare-version@0.1.2", "", {}, "sha512-pJDh5/4wrEnXX/VWRZvruAGHkzKdr46z11OlTPN+VrATlWWhSKewNCJ1futCO5C7eJB3nPMFZA1LeYtcFboZ2A=="], + + "concat-map": ["concat-map@0.0.1", "", {}, "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg=="], + "content-disposition": ["content-disposition@1.1.0", "", {}, "sha512-5jRCH9Z/+DRP7rkvY83B+yGIGX96OYdJmzngqnw2SBSxqCFPd0w2km3s5iawpGX8krnwSGmF0FW5Nhr0Hfai3g=="], "content-type": ["content-type@1.0.5", "", {}, "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA=="], @@ -867,12 +989,18 @@ "cookie-signature": ["cookie-signature@1.2.2", "", {}, "sha512-D76uU73ulSXrD1UXF4KE2TMxVVwhsnCgfAyTg9k8P6KGZjlXKrOLe4dJQKI3Bxi5wjesZoFXJWElNWBjPZMbhg=="], + "core-util-is": ["core-util-is@1.0.2", "", {}, "sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ=="], + "cors": ["cors@2.8.6", "", { "dependencies": { "object-assign": "^4", "vary": "^1" } }, "sha512-tJtZBBHA6vjIAaF6EnIaq6laBBP9aq/Y3ouVJjEfoHbRBcHBAHYcMh/w8LDrk2PvIMMq8gmopa5D4V8RmbrxGw=="], "cosmiconfig": ["cosmiconfig@9.0.1", "", { "dependencies": { "env-paths": "^2.2.1", "import-fresh": "^3.3.0", "js-yaml": "^4.1.0", "parse-json": "^5.2.0" }, "peerDependencies": { "typescript": ">=4.9.5" }, "optionalPeers": ["typescript"] }, "sha512-hr4ihw+DBqcvrsEDioRO31Z17x71pUYoNe/4h6Z0wB72p7MU7/9gH8Q3s12NFhHPfYBBOV3qyfUxmr/Yn3shnQ=="], + "crc": ["crc@3.8.0", "", { "dependencies": { "buffer": "^5.1.0" } }, "sha512-iX3mfgcTMIq3ZKLIsVFAbv7+Mc10kxabAGQb8HvjA1o3T1PIYprbakQ65d3I+2HGHt6nSKkM9PYjgoJO2KcFBQ=="], + "crelt": ["crelt@1.0.6", "", {}, "sha512-VQ2MBenTq1fWZUH9DJNGti7kKv6EeAuYr3cLwxUWhIu1baTaXh4Ib5W2CqHVqib4/MqbYGJqiL3Zb8GJZr3l4g=="], + "cross-dirname": ["cross-dirname@0.1.0", "", {}, "sha512-+R08/oI0nl3vfPcqftZRpytksBXDzOUveBq/NBVx0sUp1axwzPQrKinNx5yd5sxPu8j1wIy8AfnVQ+5eFdha6Q=="], + "cross-spawn": ["cross-spawn@7.0.6", "", { "dependencies": { "path-key": "^3.1.0", "shebang-command": "^2.0.0", "which": "^2.0.1" } }, "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA=="], "cssesc": ["cssesc@3.0.0", "", { "bin": { "cssesc": "bin/cssesc" } }, "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg=="], @@ -913,6 +1041,8 @@ "decimal.js-light": ["decimal.js-light@2.5.1", "", {}, "sha512-qIMFpTMZmny+MMIitAB6D7iVPEorVw6YQRWkvarTkT4tBeSLLiHzcwj6q0MmYSFCiVpiqPJTJEYIrpcPzVEIvg=="], + "decompress-response": ["decompress-response@6.0.0", "", { "dependencies": { "mimic-response": "^3.1.0" } }, "sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ=="], + "dedent": ["dedent@1.7.2", "", { "peerDependencies": { "babel-plugin-macros": "^3.1.0" }, "optionalPeers": ["babel-plugin-macros"] }, "sha512-WzMx3mW98SN+zn3hgemf4OzdmyNhhhKz5Ay0pUfQiMQ3e1g+xmTJWp/pKdwKVXhdSkAEGIIzqeuWrL3mV/AXbA=="], "deep-is": ["deep-is@0.1.4", "", {}, "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ=="], @@ -925,19 +1055,37 @@ "default-browser-id": ["default-browser-id@5.0.1", "", {}, "sha512-x1VCxdX4t+8wVfd1so/9w+vQ4vx7lKd2Qp5tDRutErwmR85OgmfX7RlLRMWafRMY7hbEiXIbudNrjOAPa/hL8Q=="], + "defer-to-connect": ["defer-to-connect@2.0.1", "", {}, "sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg=="], + + "define-data-property": ["define-data-property@1.1.4", "", { "dependencies": { "es-define-property": "^1.0.0", "es-errors": "^1.3.0", "gopd": "^1.0.1" } }, "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A=="], + "define-lazy-prop": ["define-lazy-prop@3.0.0", "", {}, "sha512-N+MeXYoqr3pOgn8xfyRPREN7gHakLYjhsHhWGT3fWAiL4IkAt0iDw14QiiEm2bE30c5XX5q0FtAA3CK5f9/BUg=="], + "define-properties": ["define-properties@1.2.1", "", { "dependencies": { "define-data-property": "^1.0.1", "has-property-descriptors": "^1.0.0", "object-keys": "^1.1.1" } }, "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg=="], + + "delayed-stream": ["delayed-stream@1.0.0", "", {}, "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ=="], + "depd": ["depd@2.0.0", "", {}, "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw=="], "detect-libc": ["detect-libc@2.1.2", "", {}, "sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ=="], + "detect-node": ["detect-node@2.1.0", "", {}, "sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g=="], + "detect-node-es": ["detect-node-es@1.1.0", "", {}, "sha512-ypdmJU/TbBby2Dxibuv7ZLW3Bs1QEmM7nHjEANfohJLvE0XVujisn1qPJcZxg+qDucsr+bP6fLD1rPS3AhJ7EQ=="], "diff": ["diff@8.0.4", "", {}, "sha512-DPi0FmjiSU5EvQV0++GFDOJ9ASQUVFh5kD+OzOnYdi7n3Wpm9hWWGfB/O2blfHcMVTL5WkQXSnRiK9makhrcnw=="], "dijkstrajs": ["dijkstrajs@1.0.3", "", {}, "sha512-qiSlmBq9+BCdCA/L46dw8Uy93mloxsPSbwnm5yrKn2vMPiy8KyAskTF6zuV/j5BMsmOGZDPs7KjU+mjb670kfA=="], - "dotenv": ["dotenv@17.4.2", "", {}, "sha512-nI4U3TottKAcAD9LLud4Cb7b2QztQMUEfHbvhTH09bqXTxnSie8WnjPALV/WMCrJZ6UV/qHJ6L03OqO3LcdYZw=="], + "dir-compare": ["dir-compare@4.2.0", "", { "dependencies": { "minimatch": "^3.0.5", "p-limit": "^3.1.0 " } }, "sha512-2xMCmOoMrdQIPHdsTawECdNPwlVFB9zGcz3kuhmBO6U3oU+UQjsue0i8ayLKpgBcm+hcXPMVSGUN9d+pvJ6+VQ=="], + + "dmg-builder": ["dmg-builder@26.8.1", "", { "dependencies": { "app-builder-lib": "26.8.1", "builder-util": "26.8.1", "fs-extra": "^10.1.0", "iconv-lite": "^0.6.2", "js-yaml": "^4.1.0" }, "optionalDependencies": { "dmg-license": "^1.0.11" } }, "sha512-glMJgnTreo8CFINujtAhCgN96QAqApDMZ8Vl1r8f0QT8QprvC1UCltV4CcWj20YoIyLZx6IUskaJZ0NV8fokcg=="], + + "dmg-license": ["dmg-license@1.0.11", "", { "dependencies": { "@types/plist": "^3.0.1", "@types/verror": "^1.10.3", "ajv": "^6.10.0", "crc": "^3.8.0", "iconv-corefoundation": "^1.1.7", "plist": "^3.0.4", "smart-buffer": "^4.0.2", "verror": "^1.10.0" }, "os": "darwin", "bin": { "dmg-license": "bin/dmg-license.js" } }, "sha512-ZdzmqwKmECOWJpqefloC5OJy1+WZBBse5+MR88z9g9Zn4VY+WYUkAyojmhzJckH5YbbZGcYIuGAkY5/Ys5OM2Q=="], + + "dotenv": ["dotenv@16.6.1", "", {}, "sha512-uBq4egWHTcTt33a72vpSG0z3HnPuIl6NqYcTrKEg2azoEyl2hpW0zqlxysq2pK9HlDIHyHyakeYaYnSAwd8bow=="], + + "dotenv-expand": ["dotenv-expand@11.0.7", "", { "dependencies": { "dotenv": "^16.4.5" } }, "sha512-zIHwmZPRshsCdpMDyVsqGmgyP0yT8GAgXUnkdAoJisxvf33k7yO6OuoKmcTGuXPWSsm8Oh88nZicRLA9Y0rUeA=="], "dunder-proto": ["dunder-proto@1.0.1", "", { "dependencies": { "call-bind-apply-helpers": "^1.0.1", "es-errors": "^1.3.0", "gopd": "^1.2.0" } }, "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A=="], @@ -945,8 +1093,22 @@ "ee-first": ["ee-first@1.1.1", "", {}, "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow=="], + "ejs": ["ejs@3.1.10", "", { "dependencies": { "jake": "^10.8.5" }, "bin": { "ejs": "bin/cli.js" } }, "sha512-UeJmFfOrAQS8OJWPZ4qtgHyWExa088/MtK5UEyoJGFH67cDEXkZSviOiKRCZ4Xij0zxI3JECgYs3oKx+AizQBA=="], + + "electron": ["electron@39.8.10", "", { "dependencies": { "@electron/get": "^2.0.0", "@types/node": "^22.7.7", "extract-zip": "^2.0.1" }, "bin": { "electron": "cli.js" } }, "sha512-zbYtGPYUI7PzqLAzkk21Rk6j67WN0hxn0Mq/njErZo1d0HSf33is4f8ICI5fMLy5vYe0JtCtM5sYunNOaochSQ=="], + + "electron-builder": ["electron-builder@26.8.1", "", { "dependencies": { "app-builder-lib": "26.8.1", "builder-util": "26.8.1", "builder-util-runtime": "9.5.1", "chalk": "^4.1.2", "ci-info": "^4.2.0", "dmg-builder": "26.8.1", "fs-extra": "^10.1.0", "lazy-val": "^1.0.5", "simple-update-notifier": "2.0.0", "yargs": "^17.6.2" }, "bin": { "electron-builder": "cli.js", "install-app-deps": "install-app-deps.js" } }, "sha512-uWhx1r74NGpCagG0ULs/P9Nqv2nsoo+7eo4fLUOB8L8MdWltq9odW/uuLXMFCDGnPafknYLZgjNX0ZIFRzOQAw=="], + + "electron-builder-squirrel-windows": ["electron-builder-squirrel-windows@26.8.1", "", { "dependencies": { "app-builder-lib": "26.8.1", "builder-util": "26.8.1", "electron-winstaller": "5.4.0" } }, "sha512-o288fIdgPLHA76eDrFADHPoo7VyGkDCYbLV1GzndaMSAVBoZrGvM9m2IehdcVMzdAZJ2eV9bgyissQXHv5tGzA=="], + + "electron-publish": ["electron-publish@26.8.1", "", { "dependencies": { "@types/fs-extra": "^9.0.11", "builder-util": "26.8.1", "builder-util-runtime": "9.5.1", "chalk": "^4.1.2", "form-data": "^4.0.5", "fs-extra": "^10.1.0", "lazy-val": "^1.0.5", "mime": "^2.5.2" } }, "sha512-q+jrSTIh/Cv4eGZa7oVR+grEJo/FoLMYBAnSL5GCtqwUpr1T+VgKB/dn1pnzxIxqD8S/jP1yilT9VrwCqINR4w=="], + "electron-to-chromium": ["electron-to-chromium@1.5.349", "", {}, "sha512-QsWVGyRuY07Aqb234QytTfwd5d9AJlfNIQ5wIOl1L+PZDzI9d9+Fn0FRale/QYlFxt/bUnB0/nLd1jFPGxGK1A=="], + "electron-updater": ["electron-updater@6.8.3", "", { "dependencies": { "builder-util-runtime": "9.5.1", "fs-extra": "^10.1.0", "js-yaml": "^4.1.0", "lazy-val": "^1.0.5", "lodash.escaperegexp": "^4.1.2", "lodash.isequal": "^4.5.0", "semver": "~7.7.3", "tiny-typed-emitter": "^2.1.0" } }, "sha512-Z6sgw3jgbikWKXei1ENdqFOxBP0WlXg3TtKfz0rgw2vIZFJUyI4pD7ZN7jrkm7EoMK+tcm/qTnPUdqfZukBlBQ=="], + + "electron-winstaller": ["electron-winstaller@5.4.0", "", { "dependencies": { "@electron/asar": "^3.2.1", "debug": "^4.1.1", "fs-extra": "^7.0.1", "lodash": "^4.17.21", "temp": "^0.9.0" }, "optionalDependencies": { "@electron/windows-sign": "^1.1.2" } }, "sha512-bO3y10YikuUwUuDUQRM4KfwNkKhnpVO7IPdbsrejwN9/AABJzzTQ4GeHwyzNSrVO+tEH3/Np255a3sVZpZDjvg=="], + "embla-carousel": ["embla-carousel@8.6.0", "", {}, "sha512-SjWyZBHJPbqxHOzckOfo8lHisEaJWmwd23XppYFYVh10bU66/Pn5tkVkbkCMZVdbUE5eTCI2nD8OyIP4Z+uwkA=="], "embla-carousel-react": ["embla-carousel-react@8.6.0", "", { "dependencies": { "embla-carousel": "8.6.0", "embla-carousel-reactive-utils": "8.6.0" }, "peerDependencies": { "react": "^16.8.0 || ^17.0.1 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc" } }, "sha512-0/PjqU7geVmo6F734pmPqpyHqiM99olvyecY7zdweCw+6tKEXnrE90pBiBbMMU8s5tICemzpQ3hi5EpxzGW+JA=="], @@ -957,10 +1119,14 @@ "encodeurl": ["encodeurl@2.0.0", "", {}, "sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg=="], + "end-of-stream": ["end-of-stream@1.4.5", "", { "dependencies": { "once": "^1.4.0" } }, "sha512-ooEGc6HP26xXq/N+GCGOT0JKCLDGrq2bQUZrQ7gyrJiZANJ/8YDTxTpQBXGMn+WbIQXNVpyWymm7KYVICQnyOg=="], + "enhanced-resolve": ["enhanced-resolve@5.21.0", "", { "dependencies": { "graceful-fs": "^4.2.4", "tapable": "^2.3.3" } }, "sha512-otxSQPw4lkOZWkHpB3zaEQs6gWYEsmX4xQF68ElXC/TWvGxGMSGOvoNbaLXm6/cS/fSfHtsEdw90y20PCd+sCA=="], "env-paths": ["env-paths@2.2.1", "", {}, "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A=="], + "err-code": ["err-code@2.0.3", "", {}, "sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA=="], + "error-ex": ["error-ex@1.3.4", "", { "dependencies": { "is-arrayish": "^0.2.1" } }, "sha512-sqQamAnR14VgCr1A618A3sGrygcpK+HEbenA/HiEAkkUwcZIIB/tgWqHFxWgOyDh4nB4JCRimh79dR5Ywc9MDQ=="], "es-define-property": ["es-define-property@1.0.1", "", {}, "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g=="], @@ -969,8 +1135,12 @@ "es-object-atoms": ["es-object-atoms@1.1.1", "", { "dependencies": { "es-errors": "^1.3.0" } }, "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA=="], + "es-set-tostringtag": ["es-set-tostringtag@2.1.0", "", { "dependencies": { "es-errors": "^1.3.0", "get-intrinsic": "^1.2.6", "has-tostringtag": "^1.0.2", "hasown": "^2.0.2" } }, "sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA=="], + "es-toolkit": ["es-toolkit@1.46.1", "", {}, "sha512-5eNtXOs3tbfxXOj04tjjseeWkRWaoCjdEI+96DgwzZoe6c9juL49pXlzAFTI72aWC9Y8p7168g6XIKjh7k6pyQ=="], + "es6-error": ["es6-error@4.1.1", "", {}, "sha512-Um/+FxMr9CISWh0bi5Zv0iOD+4cFh5qLeks1qhAopKVAJw3drgKbKySikp7wGhDL0HPeaja0P5ULZrxLkniUVg=="], + "esbuild": ["esbuild@0.25.12", "", { "optionalDependencies": { "@esbuild/aix-ppc64": "0.25.12", "@esbuild/android-arm": "0.25.12", "@esbuild/android-arm64": "0.25.12", "@esbuild/android-x64": "0.25.12", "@esbuild/darwin-arm64": "0.25.12", "@esbuild/darwin-x64": "0.25.12", "@esbuild/freebsd-arm64": "0.25.12", "@esbuild/freebsd-x64": "0.25.12", "@esbuild/linux-arm": "0.25.12", "@esbuild/linux-arm64": "0.25.12", "@esbuild/linux-ia32": "0.25.12", "@esbuild/linux-loong64": "0.25.12", "@esbuild/linux-mips64el": "0.25.12", "@esbuild/linux-ppc64": "0.25.12", "@esbuild/linux-riscv64": "0.25.12", "@esbuild/linux-s390x": "0.25.12", "@esbuild/linux-x64": "0.25.12", "@esbuild/netbsd-arm64": "0.25.12", "@esbuild/netbsd-x64": "0.25.12", "@esbuild/openbsd-arm64": "0.25.12", "@esbuild/openbsd-x64": "0.25.12", "@esbuild/openharmony-arm64": "0.25.12", "@esbuild/sunos-x64": "0.25.12", "@esbuild/win32-arm64": "0.25.12", "@esbuild/win32-ia32": "0.25.12", "@esbuild/win32-x64": "0.25.12" }, "bin": { "esbuild": "bin/esbuild" } }, "sha512-bbPBYYrtZbkt6Os6FiTLCTFxvq4tt3JKall1vRwshA3fdVztsLAatFaZobhkBC8/BrPetoa0oksYoKXoG4ryJg=="], "escalade": ["escalade@3.2.0", "", {}, "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA=="], @@ -1011,10 +1181,16 @@ "execa": ["execa@9.6.1", "", { "dependencies": { "@sindresorhus/merge-streams": "^4.0.0", "cross-spawn": "^7.0.6", "figures": "^6.1.0", "get-stream": "^9.0.0", "human-signals": "^8.0.1", "is-plain-obj": "^4.1.0", "is-stream": "^4.0.1", "npm-run-path": "^6.0.0", "pretty-ms": "^9.2.0", "signal-exit": "^4.1.0", "strip-final-newline": "^4.0.0", "yoctocolors": "^2.1.1" } }, "sha512-9Be3ZoN4LmYR90tUoVu2te2BsbzHfhJyfEiAVfz7N5/zv+jduIfLrV2xdQXOHbaD6KgpGdO9PRPM1Y4Q9QkPkA=="], + "exponential-backoff": ["exponential-backoff@3.1.3", "", {}, "sha512-ZgEeZXj30q+I0EN+CbSSpIyPaJ5HVQD18Z1m+u1FXbAeT94mr1zw50q4q6jiiC447Nl/YTcIYSAftiGqetwXCA=="], + "express": ["express@5.2.1", "", { "dependencies": { "accepts": "^2.0.0", "body-parser": "^2.2.1", "content-disposition": "^1.0.0", "content-type": "^1.0.5", "cookie": "^0.7.1", "cookie-signature": "^1.2.1", "debug": "^4.4.0", "depd": "^2.0.0", "encodeurl": "^2.0.0", "escape-html": "^1.0.3", "etag": "^1.8.1", "finalhandler": "^2.1.0", "fresh": "^2.0.0", "http-errors": "^2.0.0", "merge-descriptors": "^2.0.0", "mime-types": "^3.0.0", "on-finished": "^2.4.1", "once": "^1.4.0", "parseurl": "^1.3.3", "proxy-addr": "^2.0.7", "qs": "^6.14.0", "range-parser": "^1.2.1", "router": "^2.2.0", "send": "^1.1.0", "serve-static": "^2.2.0", "statuses": "^2.0.1", "type-is": "^2.0.1", "vary": "^1.1.2" } }, "sha512-hIS4idWWai69NezIdRt2xFVofaF4j+6INOpJlVOLDO8zXGpUVEVzIYk12UUi2JzjEzWL3IOAxcTubgz9Po0yXw=="], "express-rate-limit": ["express-rate-limit@8.4.1", "", { "dependencies": { "ip-address": "10.1.0" }, "peerDependencies": { "express": ">= 4.11" } }, "sha512-NGVYwQSAyEQgzxX1iCM978PP9AdO/hW93gMcF6ZwQCm+rFvLsBH6w4xcXWTcliS8La5EPRN3p9wzItqBwJrfNw=="], + "extract-zip": ["extract-zip@2.0.1", "", { "dependencies": { "debug": "^4.1.1", "get-stream": "^5.1.0", "yauzl": "^2.10.0" }, "optionalDependencies": { "@types/yauzl": "^2.9.1" }, "bin": { "extract-zip": "cli.js" } }, "sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg=="], + + "extsprintf": ["extsprintf@1.4.1", "", {}, "sha512-Wrk35e8ydCKDj/ArClo1VrPVmN8zph5V4AtHwIuHhvMXsKf73UT3BOD+azBIW+3wOJ4FhEH7zyaJCFvChjYvMA=="], + "fast-deep-equal": ["fast-deep-equal@3.1.3", "", {}, "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q=="], "fast-glob": ["fast-glob@3.3.3", "", { "dependencies": { "@nodelib/fs.stat": "^2.0.2", "@nodelib/fs.walk": "^1.2.3", "glob-parent": "^5.1.2", "merge2": "^1.3.0", "micromatch": "^4.0.8" } }, "sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg=="], @@ -1033,6 +1209,8 @@ "fastq": ["fastq@1.20.1", "", { "dependencies": { "reusify": "^1.0.4" } }, "sha512-GGToxJ/w1x32s/D2EKND7kTil4n8OVk/9mycTc4VDza13lOvpUZTGX3mFSCtV9ksdGBVzvsyAVLM6mHFThxXxw=="], + "fd-slicer": ["fd-slicer@1.1.0", "", { "dependencies": { "pend": "~1.2.0" } }, "sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g=="], + "fdir": ["fdir@6.5.0", "", { "peerDependencies": { "picomatch": "^3 || ^4" }, "optionalPeers": ["picomatch"] }, "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg=="], "fetch-blob": ["fetch-blob@3.2.0", "", { "dependencies": { "node-domexception": "^1.0.0", "web-streams-polyfill": "^3.0.3" } }, "sha512-7yAQpD2UMJzLi1Dqv7qFYnPbaPx7ZfFK6PiIxQ4PfkGPyNyl2Ugx+a/umUonmKqjhM4DnfbMvdX6otXq83soQQ=="], @@ -1041,6 +1219,8 @@ "file-entry-cache": ["file-entry-cache@8.0.0", "", { "dependencies": { "flat-cache": "^4.0.0" } }, "sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ=="], + "filelist": ["filelist@1.0.6", "", { "dependencies": { "minimatch": "^5.0.1" } }, "sha512-5giy2PkLYY1cP39p17Ech+2xlpTRL9HLspOfEgm0L6CwBXBTgsK5ou0JtzYuepxkaQ/tvhCFIJ5uXo0OrM2DxA=="], + "fill-range": ["fill-range@7.1.1", "", { "dependencies": { "to-regex-range": "^5.0.1" } }, "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg=="], "finalhandler": ["finalhandler@2.1.1", "", { "dependencies": { "debug": "^4.4.0", "encodeurl": "^2.0.0", "escape-html": "^1.0.3", "on-finished": "^2.4.1", "parseurl": "^1.3.3", "statuses": "^2.0.1" } }, "sha512-S8KoZgRZN+a5rNwqTxlZZePjT/4cnm0ROV70LedRHZ0p8u9fRID0hJUZQpkKLzro8LfmC8sx23bY6tVNxv8pQA=="], @@ -1051,6 +1231,8 @@ "flatted": ["flatted@3.4.2", "", {}, "sha512-PjDse7RzhcPkIJwy5t7KPWQSZ9cAbzQXcafsetQoD7sOJRQlGikNbx7yZp2OotDnJyrDcbyRq3Ttb18iYOqkxA=="], + "form-data": ["form-data@4.0.5", "", { "dependencies": { "asynckit": "^0.4.0", "combined-stream": "^1.0.8", "es-set-tostringtag": "^2.1.0", "hasown": "^2.0.2", "mime-types": "^2.1.12" } }, "sha512-8RipRLol37bNs2bhoV67fiTEvdTrbMUYcFTiy3+wuuOnUog2QBHCZWXDRijWQfAkhBj2Uf5UnVaiWwA5vdd82w=="], + "formdata-polyfill": ["formdata-polyfill@4.0.10", "", { "dependencies": { "fetch-blob": "^3.1.2" } }, "sha512-buewHzMvYL29jdeQTVILecSaZKnt/RJWjoZCF5OW60Z67/GmSLBkOFM7qh1PI3zFNtJbaZL5eQu1vLfazOwj4g=="], "forwarded": ["forwarded@0.2.0", "", {}, "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow=="], @@ -1059,7 +1241,9 @@ "fresh": ["fresh@2.0.0", "", {}, "sha512-Rx/WycZ60HOaqLKAi6cHRKKI7zxWbJ31MhntmtwMoaTeF7XFH9hhBp8vITaMidfljRQ6eYWCKkaTK+ykVJHP2A=="], - "fs-extra": ["fs-extra@11.3.4", "", { "dependencies": { "graceful-fs": "^4.2.0", "jsonfile": "^6.0.1", "universalify": "^2.0.0" } }, "sha512-CTXd6rk/M3/ULNQj8FBqBWHYBVYybQ3VPBw0xGKFe3tuH7ytT6ACnvzpIQ3UZtB8yvUKC2cXn1a+x+5EVQLovA=="], + "fs-extra": ["fs-extra@10.1.0", "", { "dependencies": { "graceful-fs": "^4.2.0", "jsonfile": "^6.0.1", "universalify": "^2.0.0" } }, "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ=="], + + "fs.realpath": ["fs.realpath@1.0.0", "", {}, "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw=="], "fsevents": ["fsevents@2.3.3", "", { "os": "darwin" }, "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw=="], @@ -1083,20 +1267,34 @@ "get-proto": ["get-proto@1.0.1", "", { "dependencies": { "dunder-proto": "^1.0.1", "es-object-atoms": "^1.0.0" } }, "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g=="], - "get-stream": ["get-stream@9.0.1", "", { "dependencies": { "@sec-ant/readable-stream": "^0.4.1", "is-stream": "^4.0.1" } }, "sha512-kVCxPF3vQM/N0B1PmoqVUqgHP+EeVjmZSQn+1oCRPxd2P21P2F19lIgbR3HBosbB1PUhOAoctJnfEn2GbN2eZA=="], + "get-stream": ["get-stream@5.2.0", "", { "dependencies": { "pump": "^3.0.0" } }, "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA=="], + + "glob": ["glob@7.2.3", "", { "dependencies": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", "inherits": "2", "minimatch": "^3.1.1", "once": "^1.3.0", "path-is-absolute": "^1.0.0" } }, "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q=="], "glob-parent": ["glob-parent@6.0.2", "", { "dependencies": { "is-glob": "^4.0.3" } }, "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A=="], + "global-agent": ["global-agent@3.0.0", "", { "dependencies": { "boolean": "^3.0.1", "es6-error": "^4.1.1", "matcher": "^3.0.0", "roarr": "^2.15.3", "semver": "^7.3.2", "serialize-error": "^7.0.1" } }, "sha512-PT6XReJ+D07JvGoxQMkT6qji/jVNfX/h364XHZOWeRzy64sSFr+xJ5OX7LI3b4MPQzdL4H8Y8M0xzPpsVMwA8Q=="], + "globals": ["globals@17.6.0", "", {}, "sha512-sepffkT8stwnIYbsMBpoCHJuJM5l98FUF2AnE07hfvE0m/qp3R586hw4jF4uadbhvg1ooIdzuu7CsfD2jzCaNA=="], + "globalthis": ["globalthis@1.0.4", "", { "dependencies": { "define-properties": "^1.2.1", "gopd": "^1.0.1" } }, "sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ=="], + "gopd": ["gopd@1.2.0", "", {}, "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg=="], + "got": ["got@11.8.6", "", { "dependencies": { "@sindresorhus/is": "^4.0.0", "@szmarczak/http-timer": "^4.0.5", "@types/cacheable-request": "^6.0.1", "@types/responselike": "^1.0.0", "cacheable-lookup": "^5.0.3", "cacheable-request": "^7.0.2", "decompress-response": "^6.0.0", "http2-wrapper": "^1.0.0-beta.5.2", "lowercase-keys": "^2.0.0", "p-cancelable": "^2.0.0", "responselike": "^2.0.0" } }, "sha512-6tfZ91bOr7bOXnK7PRDCGBLa1H4U080YHNaAQ2KsMGlLEzRbk44nsZF2E1IeRc3vtJHPVbKCYgdFbaGO2ljd8g=="], + "graceful-fs": ["graceful-fs@4.2.11", "", {}, "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ=="], "graphql": ["graphql@16.13.2", "", {}, "sha512-5bJ+nf/UCpAjHM8i06fl7eLyVC9iuNAjm9qzkiu2ZGhM0VscSvS6WDPfAwkdkBuoXGM9FJSbKl6wylMwP9Ktig=="], + "has-flag": ["has-flag@4.0.0", "", {}, "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ=="], + + "has-property-descriptors": ["has-property-descriptors@1.0.2", "", { "dependencies": { "es-define-property": "^1.0.0" } }, "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg=="], + "has-symbols": ["has-symbols@1.1.0", "", {}, "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ=="], + "has-tostringtag": ["has-tostringtag@1.0.2", "", { "dependencies": { "has-symbols": "^1.0.3" } }, "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw=="], + "hasown": ["hasown@2.0.3", "", { "dependencies": { "function-bind": "^1.1.2" } }, "sha512-ej4AhfhfL2Q2zpMmLo7U1Uv9+PyhIZpgQLGT1F9miIGmiCJIoCgSmczFdrc97mWT4kVY72KA+WnnhJ5pghSvSg=="], "headers-polyfill": ["headers-polyfill@5.0.1", "", { "dependencies": { "@types/set-cookie-parser": "^2.4.10", "set-cookie-parser": "^3.0.1" } }, "sha512-1TJ6Fih/b8h5TIcv+1+Hw0PDQWJTKDKzFZzcKOiW1wJza3XoAQlkCuXLbymPYB8+ZQyw8mHvdw560e8zVFIWyA=="], @@ -1107,13 +1305,25 @@ "hono": ["hono@4.12.16", "", {}, "sha512-jN0ZewiNAWSe5khM3EyCmBb250+b40wWbwNILNfEvq84VREWwOIkuUsFONk/3i3nqkz7Oe1PcpM2mwQEK2L9Kg=="], + "hosted-git-info": ["hosted-git-info@4.1.0", "", { "dependencies": { "lru-cache": "^6.0.0" } }, "sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA=="], + + "http-cache-semantics": ["http-cache-semantics@4.2.0", "", {}, "sha512-dTxcvPXqPvXBQpq5dUr6mEMJX4oIEFv6bwom3FDwKRDsuIjjJGANqhBuoAn9c1RQJIdAKav33ED65E2ys+87QQ=="], + "http-errors": ["http-errors@2.0.1", "", { "dependencies": { "depd": "~2.0.0", "inherits": "~2.0.4", "setprototypeof": "~1.2.0", "statuses": "~2.0.2", "toidentifier": "~1.0.1" } }, "sha512-4FbRdAX+bSdmo4AUFuS0WNiPz8NgFt+r8ThgNWmlrjQjt1Q7ZR9+zTlce2859x4KSXrwIsaeTqDoKQmtP8pLmQ=="], + "http-proxy-agent": ["http-proxy-agent@7.0.2", "", { "dependencies": { "agent-base": "^7.1.0", "debug": "^4.3.4" } }, "sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig=="], + + "http2-wrapper": ["http2-wrapper@1.0.3", "", { "dependencies": { "quick-lru": "^5.1.1", "resolve-alpn": "^1.0.0" } }, "sha512-V+23sDMr12Wnz7iTcDeJr3O6AIxlnvT/bmaAAAP/Xda35C90p9599p0F1eHR/N1KILWSoWVAiOMFjBBXaXSMxg=="], + "https-proxy-agent": ["https-proxy-agent@7.0.6", "", { "dependencies": { "agent-base": "^7.1.2", "debug": "4" } }, "sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw=="], "human-signals": ["human-signals@8.0.1", "", {}, "sha512-eKCa6bwnJhvxj14kZk5NCPc6Hb6BdsU9DZcOnmQKSnO1VKrfV0zCvtttPZUsBvjmNDn8rpcJfpwSYnHBjc95MQ=="], - "iconv-lite": ["iconv-lite@0.7.2", "", { "dependencies": { "safer-buffer": ">= 2.1.2 < 3.0.0" } }, "sha512-im9DjEDQ55s9fL4EYzOAv0yMqmMBSZp6G0VvFyTMPKWxiSBHUj9NW/qqLmXUwXrrM7AvqSlTCfvqRb0cM8yYqw=="], + "iconv-corefoundation": ["iconv-corefoundation@1.1.7", "", { "dependencies": { "cli-truncate": "^2.1.0", "node-addon-api": "^1.6.3" }, "os": "darwin" }, "sha512-T10qvkw0zz4wnm560lOEg0PovVqUXuOFhhHAkixw8/sycy7TJt7v/RrkEKEQnAw2viPSJu6iAkErxnzR0g8PpQ=="], + + "iconv-lite": ["iconv-lite@0.6.3", "", { "dependencies": { "safer-buffer": ">= 2.1.2 < 3.0.0" } }, "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw=="], + + "ieee754": ["ieee754@1.2.1", "", {}, "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA=="], "ignore": ["ignore@5.3.2", "", {}, "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g=="], @@ -1123,6 +1333,8 @@ "imurmurhash": ["imurmurhash@0.1.4", "", {}, "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA=="], + "inflight": ["inflight@1.0.6", "", { "dependencies": { "once": "^1.3.0", "wrappy": "1" } }, "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA=="], + "inherits": ["inherits@2.0.4", "", {}, "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ=="], "input-otp": ["input-otp@1.4.2", "", { "peerDependencies": { "react": "^16.8 || ^17.0 || ^18.0 || ^19.0.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0.0 || ^19.0.0-rc" } }, "sha512-l3jWwYNvrEa6NTCt7BECfCm48GvwuZzkoeG3gBL2w4CHeOXW3eKFmf9UNYkNfYc3mxMrthMnxjIE07MT0zLBQA=="], @@ -1167,10 +1379,14 @@ "is-wsl": ["is-wsl@3.1.1", "", { "dependencies": { "is-inside-container": "^1.0.0" } }, "sha512-e6rvdUCiQCAuumZslxRJWR/Doq4VpPR82kqclvcS0efgt430SlGIk05vdCN58+VrzgtIcfNODjozVielycD4Sw=="], + "isbinaryfile": ["isbinaryfile@5.0.7", "", {}, "sha512-gnWD14Jh3FzS3CPhF0AxNOJ8CxqeblPTADzI38r0wt8ZyQl5edpy75myt08EG2oKvpyiqSqsx+Wkz9vtkbTqYQ=="], + "isbot": ["isbot@5.1.39", "", {}, "sha512-obH0yYahGXdzNxo+djmHhBYThUKDkz565cxkIlt2L9hXfv1NlaLKoDBHo6KxXsYrIXx2RK3x5vY36CfZcobxEw=="], "isexe": ["isexe@2.0.0", "", {}, "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw=="], + "jake": ["jake@10.9.4", "", { "dependencies": { "async": "^3.2.6", "filelist": "^1.0.4", "picocolors": "^1.1.1" }, "bin": { "jake": "bin/cli.js" } }, "sha512-wpHYzhxiVQL+IV05BLE2Xn34zW1S223hvjtqk0+gsPrwd/8JNLXJgZZM/iPFsYc1xyphF+6M6EvdE5E9MBGkDA=="], + "jiti": ["jiti@2.6.1", "", { "bin": { "jiti": "lib/jiti-cli.mjs" } }, "sha512-ekilCSN1jwRvIbgeg/57YFh8qQDNbwDb9xT/qu2DAHbFFZUicIl4ygVaAvzveMhMVr3LnpSKTNnwt8PoOfmKhQ=="], "jose": ["jose@6.2.3", "", {}, "sha512-YYVDInQKFJfR/xa3ojUTl8c2KoTwiL1R5Wg9YCydwH0x0B9grbzlg5HC7mMjCtUJjbQ/YnGEZIhI5tCgfTb4Hw=="], @@ -1191,6 +1407,8 @@ "json-stable-stringify-without-jsonify": ["json-stable-stringify-without-jsonify@1.0.1", "", {}, "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw=="], + "json-stringify-safe": ["json-stringify-safe@5.0.1", "", {}, "sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA=="], + "json5": ["json5@2.2.3", "", { "bin": { "json5": "lib/cli.js" } }, "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg=="], "jsonc-parser": ["jsonc-parser@3.3.1", "", {}, "sha512-HUgH65KyejrUFPvHFPbqOY0rsFip3Bo5wb4ngvdi1EpCYWUQDC5V+Y7mZws+DLkr4M//zQJoanu1SP+87Dv1oQ=="], @@ -1201,6 +1419,8 @@ "kleur": ["kleur@4.1.5", "", {}, "sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ=="], + "lazy-val": ["lazy-val@1.0.5", "", {}, "sha512-0/BnGCCfyUMkBpeDgWihanIAF9JmZhHBgUhEqzvf+adhNGLoP6TaiI5oF8oyb3I45P+PcnrqihSf01M0l0G5+Q=="], + "levn": ["levn@0.4.1", "", { "dependencies": { "prelude-ls": "^1.2.1", "type-check": "~0.4.0" } }, "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ=="], "lightningcss": ["lightningcss@1.32.0", "", { "dependencies": { "detect-libc": "^2.0.3" }, "optionalDependencies": { "lightningcss-android-arm64": "1.32.0", "lightningcss-darwin-arm64": "1.32.0", "lightningcss-darwin-x64": "1.32.0", "lightningcss-freebsd-x64": "1.32.0", "lightningcss-linux-arm-gnueabihf": "1.32.0", "lightningcss-linux-arm64-gnu": "1.32.0", "lightningcss-linux-arm64-musl": "1.32.0", "lightningcss-linux-x64-gnu": "1.32.0", "lightningcss-linux-x64-musl": "1.32.0", "lightningcss-win32-arm64-msvc": "1.32.0", "lightningcss-win32-x64-msvc": "1.32.0" } }, "sha512-NXYBzinNrblfraPGyrbPoD19C1h9lfI/1mzgWYvXUTe414Gz/X1FD2XBZSZM7rRTrMA8JL3OtAaGifrIKhQ5yQ=="], @@ -1233,18 +1453,28 @@ "locate-path": ["locate-path@6.0.0", "", { "dependencies": { "p-locate": "^5.0.0" } }, "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw=="], + "lodash": ["lodash@4.18.1", "", {}, "sha512-dMInicTPVE8d1e5otfwmmjlxkZoUpiVLwyeTdUsi/Caj/gfzzblBcCE5sRHV/AsjuCmxWrte2TNGSYuCeCq+0Q=="], + "lodash.debounce": ["lodash.debounce@4.0.8", "", {}, "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow=="], + "lodash.escaperegexp": ["lodash.escaperegexp@4.1.2", "", {}, "sha512-TM9YBvyC84ZxE3rgfefxUWiQKLilstD6k7PTGt6wfbtXF8ixIJLOL3VYyV/z+ZiPLsVxAsKAFVwWlWeb2Y8Yyw=="], + + "lodash.isequal": ["lodash.isequal@4.5.0", "", {}, "sha512-pDo3lu8Jhfjqls6GkMgpahsF9kCyayhgykjyLMNFTKWrpVdAQtYyB4muAMWozBB4ig/dtWAmsMxLEI8wuz+DYQ=="], + "log-symbols": ["log-symbols@6.0.0", "", { "dependencies": { "chalk": "^5.3.0", "is-unicode-supported": "^1.3.0" } }, "sha512-i24m8rpwhmPIS4zscNzK6MSEhk0DUWa/8iYQWxhffV8jkI4Phvs3F+quL5xvS0gdQR0FyTCMMH33Y78dDTzzIw=="], "loglevel": ["loglevel@1.9.2", "", {}, "sha512-HgMmCqIJSAKqo68l0rS2AanEWfkxaZ5wNiEFb5ggm08lDs9Xl2KxBlX3PTcaD2chBM1gXAYf491/M2Rv8Jwayg=="], + "lowercase-keys": ["lowercase-keys@2.0.0", "", {}, "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA=="], + "lru-cache": ["lru-cache@5.1.1", "", { "dependencies": { "yallist": "^3.0.2" } }, "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w=="], "lucide-react": ["lucide-react@1.14.0", "", { "peerDependencies": { "react": "^16.5.1 || ^17.0.0 || ^18.0.0 || ^19.0.0" } }, "sha512-+1mdWcfSJVUsaTIjN9zoezmUhfXo5l0vP7ekBMPo3jcS/aIkxHnXqAPsByszMZx/Y8oQBRJxJx5xg+RH3urzxA=="], "magic-string": ["magic-string@0.30.21", "", { "dependencies": { "@jridgewell/sourcemap-codec": "^1.5.5" } }, "sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ=="], + "matcher": ["matcher@3.0.0", "", { "dependencies": { "escape-string-regexp": "^4.0.0" } }, "sha512-OkeDaAZ/bQCxeFAozM55PKcKU0yJMPGifLwV4Qgjitu+5MoAfSQN4lsLJeXZ1b8w0x+/Emda6MZgXS1jvsapng=="], + "math-intrinsics": ["math-intrinsics@1.1.0", "", {}, "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g=="], "media-typer": ["media-typer@1.1.0", "", {}, "sha512-aisnrDP4GNe06UcKFnV5bfMNPBUw4jsLGaWwWfnH3v02GnBuXX2MCVn5RbrWo0j3pczUilYblq7fQ7Nw2t5XKw=="], @@ -1257,6 +1487,8 @@ "micromatch": ["micromatch@4.0.8", "", { "dependencies": { "braces": "^3.0.3", "picomatch": "^2.3.1" } }, "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA=="], + "mime": ["mime@2.6.0", "", { "bin": { "mime": "cli.js" } }, "sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg=="], + "mime-db": ["mime-db@1.54.0", "", {}, "sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ=="], "mime-types": ["mime-types@3.0.2", "", { "dependencies": { "mime-db": "^1.54.0" } }, "sha512-Lbgzdk0h4juoQ9fCKXW4by0UJqj+nOOrI9MJ1sSj4nI8aI2eo1qmvQEie4VD1glsS250n15LsWsYtCugiStS5A=="], @@ -1265,10 +1497,18 @@ "mimic-function": ["mimic-function@5.0.1", "", {}, "sha512-VP79XUPxV2CigYP3jWwAUFSku2aKqBH7uTAapFWCBqutsbmDo96KY5o8uh6U+/YSIn5OxJnXp73beVkpqMIGhA=="], + "mimic-response": ["mimic-response@3.1.0", "", {}, "sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ=="], + "minimatch": ["minimatch@10.2.5", "", { "dependencies": { "brace-expansion": "^5.0.5" } }, "sha512-MULkVLfKGYDFYejP07QOurDLLQpcjk7Fw+7jXS2R2czRQzR56yHRveU5NDJEOviH+hETZKSkIk5c+T23GjFUMg=="], "minimist": ["minimist@1.2.8", "", {}, "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA=="], + "minipass": ["minipass@7.1.3", "", {}, "sha512-tEBHqDnIoM/1rXME1zgka9g6Q2lcoCkxHLuc7ODJ5BxbP5d4c2Z5cGgtXAku59200Cx7diuHTOYfSBD8n6mm8A=="], + + "minizlib": ["minizlib@3.1.0", "", { "dependencies": { "minipass": "^7.1.2" } }, "sha512-KZxYo1BUkWD2TVFLr0MQoM8vUUigWD3LlD83a/75BqC+4qE0Hb1Vo5v1FgcfaNXvfXzr+5EhQ6ing/CaBijTlw=="], + + "mkdirp": ["mkdirp@0.5.6", "", { "dependencies": { "minimist": "^1.2.6" }, "bin": { "mkdirp": "bin/cmd.js" } }, "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw=="], + "motion-dom": ["motion-dom@12.38.0", "", { "dependencies": { "motion-utils": "^12.36.0" } }, "sha512-pdkHLD8QYRp8VfiNLb8xIBJis1byQ9gPT3Jnh2jqfFtAsWUA3dEepDlsWe/xMpO8McV+VdpKVcp+E+TGJEtOoA=="], "motion-utils": ["motion-utils@12.36.0", "", {}, "sha512-eHWisygbiwVvf6PZ1vhaHCLamvkSbPIeAYxWUuL3a2PD/TROgE7FvfHWTIH4vMl798QLfMw15nRqIaRDXTlYRg=="], @@ -1287,18 +1527,32 @@ "next-themes": ["next-themes@0.4.6", "", { "peerDependencies": { "react": "^16.8 || ^17 || ^18 || ^19 || ^19.0.0-rc", "react-dom": "^16.8 || ^17 || ^18 || ^19 || ^19.0.0-rc" } }, "sha512-pZvgD5L0IEvX5/9GWyHMf3m8BKiVQwsCMHfoFosXtXBMnaS0ZnIJ9ST4b4NqLVKDEm8QBxoNNGNaBv2JNF6XNA=="], + "node-abi": ["node-abi@4.31.0", "", { "dependencies": { "semver": "^7.6.3" } }, "sha512-Erq5w/t3syw3s4sDsUaX4QttIdBPsGKTT1DTRsCkTonGggczhlDKm/wDX3o+HPJpQ41EjXCbcmXf0tgr5YZJXw=="], + + "node-addon-api": ["node-addon-api@1.7.2", "", {}, "sha512-ibPK3iA+vaY1eEjESkQkM0BbCqFOaZMiXRTtdB0u7b4djtY6JnsjvPdUHVMg6xQt3B8fpTTWHI9A+ADjM9frzg=="], + + "node-api-version": ["node-api-version@0.2.1", "", { "dependencies": { "semver": "^7.3.5" } }, "sha512-2xP/IGGMmmSQpI1+O/k72jF/ykvZ89JeuKX3TLJAYPDVLUalrshrLHkeVcCCZqG/eEa635cr8IBYzgnDvM2O8Q=="], + "node-domexception": ["node-domexception@1.0.0", "", {}, "sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ=="], "node-fetch": ["node-fetch@3.3.2", "", { "dependencies": { "data-uri-to-buffer": "^4.0.0", "fetch-blob": "^3.1.4", "formdata-polyfill": "^4.0.10" } }, "sha512-dRB78srN/l6gqWulah9SrxeYnxeddIG30+GOqK/9OlLVyLg3HPnr6SqOWTWOXKRwC2eGYCkZ59NNuSgvSrpgOA=="], + "node-gyp": ["node-gyp@12.3.0", "", { "dependencies": { "env-paths": "^2.2.0", "exponential-backoff": "^3.1.1", "graceful-fs": "^4.2.6", "nopt": "^9.0.0", "proc-log": "^6.0.0", "semver": "^7.3.5", "tar": "^7.5.4", "tinyglobby": "^0.2.12", "undici": "^6.25.0", "which": "^6.0.0" }, "bin": { "node-gyp": "bin/node-gyp.js" } }, "sha512-QNcUWM+HgJplcPzBvFBZ9VXacyGZ4+VTOb80PwWR+TlVzoHbRKULNEzpRsnaoxG3Wzr7Qh7BYxGDU3CbKib2Yg=="], + "node-releases": ["node-releases@2.0.38", "", {}, "sha512-3qT/88Y3FbH/Kx4szpQQ4HzUbVrHPKTLVpVocKiLfoYvw9XSGOX2FmD2d6DrXbVYyAQTF2HeF6My8jmzx7/CRw=="], + "nopt": ["nopt@9.0.0", "", { "dependencies": { "abbrev": "^4.0.0" }, "bin": { "nopt": "bin/nopt.js" } }, "sha512-Zhq3a+yFKrYwSBluL4H9XP3m3y5uvQkB/09CwDruCiRmR/UJYnn9W4R48ry0uGC70aeTPKLynBtscP9efFFcPw=="], + + "normalize-url": ["normalize-url@6.1.0", "", {}, "sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A=="], + "npm-run-path": ["npm-run-path@6.0.0", "", { "dependencies": { "path-key": "^4.0.0", "unicorn-magic": "^0.3.0" } }, "sha512-9qny7Z9DsQU8Ou39ERsPU4OZQlSTP47ShQzuKZ6PRXpYLtIFgl/DEBYEXKlvcEa+9tHVcK8CF81Y2V72qaZhWA=="], "object-assign": ["object-assign@4.1.1", "", {}, "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg=="], "object-inspect": ["object-inspect@1.13.4", "", {}, "sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew=="], + "object-keys": ["object-keys@1.1.1", "", {}, "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA=="], + "object-treeify": ["object-treeify@1.1.33", "", {}, "sha512-EFVjAYfzWqWsBMRHPMAXLCDIJnpMhdWAqR7xG6M6a2cs6PMFpl/+Z20w9zDW4vkxOFfddegBKq9Rehd0bxWE7A=="], "on-finished": ["on-finished@2.4.1", "", { "dependencies": { "ee-first": "1.1.1" } }, "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg=="], @@ -1315,6 +1569,8 @@ "outvariant": ["outvariant@1.4.3", "", {}, "sha512-+Sl2UErvtsoajRDKCE5/dBz4DIvHXQQnAxtQTF04OJxY0+DyZXSo5P5Bb7XYWOh81syohlYL24hbDwxedPUJCA=="], + "p-cancelable": ["p-cancelable@2.1.1", "", {}, "sha512-BZOr3nRQHOntUjTrH8+Lh54smKHoHyur8We1V8DSMVrl5A2malOOwuJRnKRDjSnkoeBh4at6BwEnb5I7Jl31wg=="], + "p-limit": ["p-limit@3.1.0", "", { "dependencies": { "yocto-queue": "^0.1.0" } }, "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ=="], "p-locate": ["p-locate@5.0.0", "", { "dependencies": { "p-limit": "^3.0.2" } }, "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw=="], @@ -1335,22 +1591,32 @@ "path-exists": ["path-exists@4.0.0", "", {}, "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w=="], + "path-is-absolute": ["path-is-absolute@1.0.1", "", {}, "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg=="], + "path-key": ["path-key@3.1.1", "", {}, "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q=="], "path-to-regexp": ["path-to-regexp@6.3.0", "", {}, "sha512-Yhpw4T9C6hPpgPeA28us07OJeqZ5EzQTkbfwuhsUg0c237RomFoETJgmp2sa3F/41gfLE6G5cqcYwznmeEeOlQ=="], + "pe-library": ["pe-library@0.4.1", "", {}, "sha512-eRWB5LBz7PpDu4PUlwT0PhnQfTQJlDDdPa35urV4Osrm0t0AqQFGn+UIkU3klZvwJ8KPO3VbBFsXquA6p6kqZw=="], + + "pend": ["pend@1.2.0", "", {}, "sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg=="], + "picocolors": ["picocolors@1.1.1", "", {}, "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA=="], "picomatch": ["picomatch@4.0.4", "", {}, "sha512-QP88BAKvMam/3NxH6vj2o21R6MjxZUAd6nlwAS/pnGvN9IVLocLHxGYIzFhg6fUQ+5th6P4dv4eW9jX3DSIj7A=="], "pkce-challenge": ["pkce-challenge@5.0.1", "", {}, "sha512-wQ0b/W4Fr01qtpHlqSqspcj3EhBvimsdh0KlHhH8HRZnMsEa0ea2fTULOXOS9ccQr3om+GcGRk4e+isrZWV8qQ=="], + "plist": ["plist@3.1.0", "", { "dependencies": { "@xmldom/xmldom": "^0.8.8", "base64-js": "^1.5.1", "xmlbuilder": "^15.1.1" } }, "sha512-uysumyrvkUX0rX/dEVqt8gC3sTBzd4zoWfLeS29nb53imdaXVvLINYXTI2GNqzaMuvacNx4uJQ8+b3zXR0pkgQ=="], + "pngjs": ["pngjs@5.0.0", "", {}, "sha512-40QW5YalBNfQo5yRYmiw7Yz6TKKVr3h6970B2YE+3fQpsWcrbj1PzJgxeJ19DRQjhMbKPIuMY8rFaXc8moolVw=="], "postcss": ["postcss@8.5.13", "", { "dependencies": { "nanoid": "^3.3.11", "picocolors": "^1.1.1", "source-map-js": "^1.2.1" } }, "sha512-qif0+jGGZoLWdHey3UFHHWP0H7Gbmsk8T5VEqyYFbWqPr1XqvLGBbk/sl8V5exGmcYJklJOhOQq1pV9IcsiFag=="], "postcss-selector-parser": ["postcss-selector-parser@7.1.1", "", { "dependencies": { "cssesc": "^3.0.0", "util-deprecate": "^1.0.2" } }, "sha512-orRsuYpJVw8LdAwqqLykBj9ecS5/cRHlI5+nvTo8LcCKmzDmqVORXtOIYEEQuL9D4BxtA1lm5isAqzQZCoQ6Eg=="], + "postject": ["postject@1.0.0-alpha.6", "", { "dependencies": { "commander": "^9.4.0" }, "bin": { "postject": "dist/cli.js" } }, "sha512-b9Eb8h2eVqNE8edvKdwqkrY6O7kAwmI8kcnBv1NScolYJbo59XUF0noFq+lxbC1yN20bmC0WBEbDC5H/7ASb0A=="], + "powershell-utils": ["powershell-utils@0.1.0", "", {}, "sha512-dM0jVuXJPsDN6DvRpea484tCUaMiXWjuCn++HGTqUWzGDjv5tZkEZldAJ/UMlqRYGFrD/etByo4/xOuC/snX2A=="], "prelude-ls": ["prelude-ls@1.2.1", "", {}, "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g=="], @@ -1359,10 +1625,20 @@ "pretty-ms": ["pretty-ms@9.3.0", "", { "dependencies": { "parse-ms": "^4.0.0" } }, "sha512-gjVS5hOP+M3wMm5nmNOucbIrqudzs9v/57bWRHQWLYklXqoXKrVfYW2W9+glfGsqtPgpiz5WwyEEB+ksXIx3gQ=="], + "proc-log": ["proc-log@6.1.0", "", {}, "sha512-iG+GYldRf2BQ0UDUAd6JQ/RwzaQy6mXmsk/IzlYyal4A4SNFw54MeH4/tLkF4I5WoWG9SQwuqWzS99jaFQHBuQ=="], + + "progress": ["progress@2.0.3", "", {}, "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA=="], + + "promise-retry": ["promise-retry@2.0.1", "", { "dependencies": { "err-code": "^2.0.2", "retry": "^0.12.0" } }, "sha512-y+WKFlBR8BGXnsNlIHFGPZmyDf3DFMoLhaflAnyZgV6rG6xu+JwesTo2Q9R6XwYmtmwAFCkAk3e35jEdoeh/3g=="], + "prompts": ["prompts@2.4.2", "", { "dependencies": { "kleur": "^3.0.3", "sisteransi": "^1.0.5" } }, "sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q=="], + "proper-lockfile": ["proper-lockfile@4.1.2", "", { "dependencies": { "graceful-fs": "^4.2.4", "retry": "^0.12.0", "signal-exit": "^3.0.2" } }, "sha512-TjNPblN4BwAWMXU8s9AEz4JmQxnD1NNL7bNOY/AKUzyamc379FWASUhc/K1pL2noVb+XmZKLL68cjzLsiOAMaA=="], + "proxy-addr": ["proxy-addr@2.0.7", "", { "dependencies": { "forwarded": "0.2.0", "ipaddr.js": "1.9.1" } }, "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg=="], + "pump": ["pump@3.0.4", "", { "dependencies": { "end-of-stream": "^1.1.0", "once": "^1.3.1" } }, "sha512-VS7sjc6KR7e1ukRFhQSY5LM2uBWAUPiOPa/A3mkKmiMwSmRFUITt0xuj+/lesgnCv+dPIEYlkzrcyXgquIHMcA=="], + "punycode": ["punycode@2.3.1", "", {}, "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg=="], "qrcode": ["qrcode@1.5.4", "", { "dependencies": { "dijkstrajs": "^1.0.1", "pngjs": "^5.0.0", "yargs": "^15.3.1" }, "bin": { "qrcode": "bin/qrcode" } }, "sha512-1ca71Zgiu6ORjHqFBDpnSMTR2ReToX4l1Au1VFLyVeBTFavzQnv5JxMFr3ukHVKpSrSA2MCk0lNJSykjUfz7Zg=="], @@ -1371,6 +1647,8 @@ "queue-microtask": ["queue-microtask@1.2.3", "", {}, "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A=="], + "quick-lru": ["quick-lru@5.1.1", "", {}, "sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA=="], + "range-parser": ["range-parser@1.2.1", "", {}, "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg=="], "raw-body": ["raw-body@3.0.2", "", { "dependencies": { "bytes": "~3.1.2", "http-errors": "~2.0.1", "iconv-lite": "~0.7.0", "unpipe": "~1.0.0" } }, "sha512-K5zQjDllxWkf7Z5xJdV0/B0WTNqx6vxG70zJE4N0kBs4LovmEYWJzQGxC9bS9RAKu3bgM40lrd5zoLJ12MQ5BA=="], @@ -1393,6 +1671,8 @@ "react-style-singleton": ["react-style-singleton@2.2.3", "", { "dependencies": { "get-nonce": "^1.0.0", "tslib": "^2.0.0" }, "peerDependencies": { "@types/react": "*", "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react"] }, "sha512-b6jSvxvVnyptAiLjbkWLE/lOnR4lfTtDAl+eUC7RZy+QQWc6wRzIV2CE6xBuMmDxc2qIihtDCZD5NPOFl7fRBQ=="], + "read-binary-file-arch": ["read-binary-file-arch@1.0.6", "", { "dependencies": { "debug": "^4.3.4" }, "bin": { "read-binary-file-arch": "cli.js" } }, "sha512-BNg9EN3DD3GsDXX7Aa8O4p92sryjkmzYYgmgTAc6CA4uGLEDzFfxOxugu21akOxpcXHiEgsYkC6nPsQvLLLmEg=="], + "recast": ["recast@0.23.11", "", { "dependencies": { "ast-types": "^0.16.1", "esprima": "~4.0.0", "source-map": "~0.6.1", "tiny-invariant": "^1.3.3", "tslib": "^2.0.1" } }, "sha512-YTUo+Flmw4ZXiWfQKGcwwc11KnoRAYgzAE2E7mXKCjSviTKShtxBsN6YUUBB2gtaBzKzeKunxhUwNHQuRryhWA=="], "recharts": ["recharts@3.8.1", "", { "dependencies": { "@reduxjs/toolkit": "^1.9.0 || 2.x.x", "clsx": "^2.1.1", "decimal.js-light": "^2.5.1", "es-toolkit": "^1.39.3", "eventemitter3": "^5.0.1", "immer": "^10.1.1", "react-redux": "8.x.x || 9.x.x", "reselect": "5.1.1", "tiny-invariant": "^1.3.3", "use-sync-external-store": "^1.2.2", "victory-vendor": "^37.0.2" }, "peerDependencies": { "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0", "react-dom": "^16.0.0 || ^17.0.0 || ^18.0.0 || ^19.0.0", "react-is": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" } }, "sha512-mwzmO1s9sFL0TduUpwndxCUNoXsBw3u3E/0+A+cLcrSfQitSG62L32N69GhqUrrT5qKcAE3pCGVINC6pqkBBQg=="], @@ -1407,16 +1687,28 @@ "require-main-filename": ["require-main-filename@2.0.0", "", {}, "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg=="], + "resedit": ["resedit@1.7.2", "", { "dependencies": { "pe-library": "^0.4.1" } }, "sha512-vHjcY2MlAITJhC0eRD/Vv8Vlgmu9Sd3LX9zZvtGzU5ZImdTN3+d6e/4mnTyV8vEbyf1sgNIrWxhWlrys52OkEA=="], + "reselect": ["reselect@5.1.1", "", {}, "sha512-K/BG6eIky/SBpzfHZv/dd+9JBFiS4SWV7FIujVyJRux6e45+73RaUHXLmIR1f7WOMaQ0U1km6qwklRQxpJJY0w=="], + "resolve-alpn": ["resolve-alpn@1.2.1", "", {}, "sha512-0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g=="], + "resolve-from": ["resolve-from@4.0.0", "", {}, "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g=="], + "responselike": ["responselike@2.0.1", "", { "dependencies": { "lowercase-keys": "^2.0.0" } }, "sha512-4gl03wn3hj1HP3yzgdI7d3lCkF95F21Pz4BPGvKHinyQzALR5CapwC8yIi0Rh58DEMQ/SguC03wFj2k0M/mHhw=="], + "restore-cursor": ["restore-cursor@5.1.0", "", { "dependencies": { "onetime": "^7.0.0", "signal-exit": "^4.1.0" } }, "sha512-oMA2dcrw6u0YfxJQXm342bFKX/E4sG9rbTzO9ptUcR/e8A33cHuvStiYOwH7fszkZlZ1z/ta9AAoPk2F4qIOHA=="], + "retry": ["retry@0.12.0", "", {}, "sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow=="], + "rettime": ["rettime@0.11.8", "", {}, "sha512-0fERGXktJTyJ+h8fBEiPxHPEFOu0h15JY7JtwrOVqR5K+vb99ho6IyOo7ekLS3h4sJCzIDy4VWKIbZUfe9njmg=="], "reusify": ["reusify@1.1.0", "", {}, "sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw=="], + "rimraf": ["rimraf@2.6.3", "", { "dependencies": { "glob": "^7.1.3" }, "bin": { "rimraf": "./bin.js" } }, "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA=="], + + "roarr": ["roarr@2.15.4", "", { "dependencies": { "boolean": "^3.0.1", "detect-node": "^2.0.4", "globalthis": "^1.0.1", "json-stringify-safe": "^5.0.1", "semver-compare": "^1.0.0", "sprintf-js": "^1.1.2" } }, "sha512-CHhPh+UNHD2GTXNYhPWLnU8ONHdI+5DI+4EYIAOaiD63rHeYlZvyh8P+in5999TTSFgUYuKUAjzRI4mdh/p+2A=="], + "rolldown": ["rolldown@1.0.0-rc.17", "", { "dependencies": { "@oxc-project/types": "=0.127.0", "@rolldown/pluginutils": "1.0.0-rc.17" }, "optionalDependencies": { "@rolldown/binding-android-arm64": "1.0.0-rc.17", "@rolldown/binding-darwin-arm64": "1.0.0-rc.17", "@rolldown/binding-darwin-x64": "1.0.0-rc.17", "@rolldown/binding-freebsd-x64": "1.0.0-rc.17", "@rolldown/binding-linux-arm-gnueabihf": "1.0.0-rc.17", "@rolldown/binding-linux-arm64-gnu": "1.0.0-rc.17", "@rolldown/binding-linux-arm64-musl": "1.0.0-rc.17", "@rolldown/binding-linux-ppc64-gnu": "1.0.0-rc.17", "@rolldown/binding-linux-s390x-gnu": "1.0.0-rc.17", "@rolldown/binding-linux-x64-gnu": "1.0.0-rc.17", "@rolldown/binding-linux-x64-musl": "1.0.0-rc.17", "@rolldown/binding-openharmony-arm64": "1.0.0-rc.17", "@rolldown/binding-wasm32-wasi": "1.0.0-rc.17", "@rolldown/binding-win32-arm64-msvc": "1.0.0-rc.17", "@rolldown/binding-win32-x64-msvc": "1.0.0-rc.17" }, "bin": { "rolldown": "bin/cli.mjs" } }, "sha512-ZrT53oAKrtA4+YtBWPQbtPOxIbVDbxT0orcYERKd63VJTF13zPcgXTvD4843L8pcsI7M6MErt8QtON6lrB9tyA=="], "router": ["router@2.2.0", "", { "dependencies": { "debug": "^4.4.0", "depd": "^2.0.0", "is-promise": "^4.0.0", "parseurl": "^1.3.3", "path-to-regexp": "^8.0.0" } }, "sha512-nLTrUKm2UyiL7rlhapu/Zl45FwNgkZGaCpZbIHajDYgwlJCOzLSk+cIPAnsEqV955GjILJnKbdQC1nVPz+gAYQ=="], @@ -1429,6 +1721,10 @@ "safer-buffer": ["safer-buffer@2.1.2", "", {}, "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg=="], + "sanitize-filename": ["sanitize-filename@1.6.4", "", { "dependencies": { "truncate-utf8-bytes": "^1.0.0" } }, "sha512-9ZyI08PsvdQl2r/bBIGubpVdR3RR9sY6RDiWFPreA21C/EFlQhmgo20UZlNjZMMZNubusLhAQozkA0Od5J21Eg=="], + + "sax": ["sax@1.6.0", "", {}, "sha512-6R3J5M4AcbtLUdZmRv2SygeVaM7IhrLXu9BmnOGmmACak8fiUtOsYNWUS4uK7upbmHIBbLBeFeI//477BKLBzA=="], + "scheduler": ["scheduler@0.27.0", "", {}, "sha512-eNv+WrVbKu1f3vbYJT/xtiF5syA5HPIMtf9IgY/nKg0sWqzAUEvqY/xm7OcZc/qafLx/iO9FgOmeSAp4v5ti/Q=="], "sdp": ["sdp@3.2.2", "", {}, "sha512-xZocWwfyp4hkbN4hLWxMjmv2Q8aNa9MhmOZ7L9aCZPT+dZsgRr6wZRrSYE3HTdyk/2pZKPSgqI7ns7Een1xMSA=="], @@ -1437,8 +1733,12 @@ "semver": ["semver@7.7.4", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA=="], + "semver-compare": ["semver-compare@1.0.0", "", {}, "sha512-YM3/ITh2MJ5MtzaM429anh+x2jiLVjqILF4m4oyQB18W7Ggea7BfqdH/wGMK7dDiMghv/6WG7znWMwUDzJiXow=="], + "send": ["send@1.2.1", "", { "dependencies": { "debug": "^4.4.3", "encodeurl": "^2.0.0", "escape-html": "^1.0.3", "etag": "^1.8.1", "fresh": "^2.0.0", "http-errors": "^2.0.1", "mime-types": "^3.0.2", "ms": "^2.1.3", "on-finished": "^2.4.1", "range-parser": "^1.2.1", "statuses": "^2.0.2" } }, "sha512-1gnZf7DFcoIcajTjTwjwuDjzuz4PPcY2StKPlsGAQ1+YH20IRVrBaXSWmdjowTJ6u8Rc01PoYOGHXfP1mYcZNQ=="], + "serialize-error": ["serialize-error@7.0.1", "", { "dependencies": { "type-fest": "^0.13.1" } }, "sha512-8I8TjW5KMOKsZQTvoxjuSIa7foAwPWGOts+6o7sgjz41/qMD9VQHEDxi6PBvK2l0MXUmqZyNpUK+T2tQaaElvw=="], + "seroval": ["seroval@1.5.2", "", {}, "sha512-xcRN39BdsnO9Tf+VzsE7b3JyTJASItIV1FVFewJKCFcW4s4haIKS3e6vj8PGB9qBwC7tnuOywQMdv5N4qkzi7Q=="], "seroval-plugins": ["seroval-plugins@1.5.2", "", { "peerDependencies": { "seroval": "^1.0" } }, "sha512-qpY0Cl+fKYFn4GOf3cMiq6l72CpuVaawb6ILjubOQ+diJ54LfOWaSSPsaswN8DRPIPW4Yq+tE1k5aKd7ILyaFg=="], @@ -1467,14 +1767,26 @@ "signal-exit": ["signal-exit@4.1.0", "", {}, "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw=="], + "simple-update-notifier": ["simple-update-notifier@2.0.0", "", { "dependencies": { "semver": "^7.5.3" } }, "sha512-a2B9Y0KlNXl9u/vsW6sTIu9vGEpfKu2wRV6l1H3XEas/0gUIzGzBoP/IouTcUQbm9JWZLH3COxyn03TYlFax6w=="], + "sisteransi": ["sisteransi@1.0.5", "", {}, "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg=="], + "slice-ansi": ["slice-ansi@3.0.0", "", { "dependencies": { "ansi-styles": "^4.0.0", "astral-regex": "^2.0.0", "is-fullwidth-code-point": "^3.0.0" } }, "sha512-pSyv7bSTC7ig9Dcgbw9AuRNUb5k5V6oDudjZoMBSr13qpLBG7tB+zgCkARjq7xIUgdz5P1Qe8u+rSGdouOOIyQ=="], + + "smart-buffer": ["smart-buffer@4.2.0", "", {}, "sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg=="], + "sonner": ["sonner@2.0.7", "", { "peerDependencies": { "react": "^18.0.0 || ^19.0.0 || ^19.0.0-rc", "react-dom": "^18.0.0 || ^19.0.0 || ^19.0.0-rc" } }, "sha512-W6ZN4p58k8aDKA4XPcx2hpIQXBRAgyiWVkYhT7CvK6D3iAu7xjvVyhQHg2/iaKJZ1XVJ4r7XuwGL+WGEK37i9w=="], "source-map": ["source-map@0.6.1", "", {}, "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g=="], "source-map-js": ["source-map-js@1.2.1", "", {}, "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA=="], + "source-map-support": ["source-map-support@0.5.21", "", { "dependencies": { "buffer-from": "^1.0.0", "source-map": "^0.6.0" } }, "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w=="], + + "sprintf-js": ["sprintf-js@1.1.3", "", {}, "sha512-Oo+0REFV59/rz3gfJNKQiBlwfHaSESl1pcGyABQsnnIfWOFt6JNj5gCog2U6MLZ//IGYD+nA8nI+mTShREReaA=="], + + "stat-mode": ["stat-mode@1.0.0", "", {}, "sha512-jH9EhtKIjuXZ2cWxmXS8ZP80XyC3iasQxMDV8jzhNJpfDb7VbQLVW4Wvsxz9QZvzV+G4YoSfBUVKDOyxLzi/sg=="], + "statuses": ["statuses@2.0.2", "", {}, "sha512-DvEy55V3DB7uknRo+4iOGT5fP1slR8wQohVdknigZPMpMstaKJQWhwiYBACJE3Ul2pTnATihhBYnRhZQHGBiRw=="], "stdin-discarder": ["stdin-discarder@0.2.2", "", {}, "sha512-UhDfHmA92YAlNnCfhmq0VeNL5bDbiZGg7sZ2IvPsXubGkiNa9EC+tUTsjBRsYUAz87btI6/1wf4XoVvQ3uRnmQ=="], @@ -1493,6 +1805,10 @@ "style-mod": ["style-mod@4.1.3", "", {}, "sha512-i/n8VsZydrugj3Iuzll8+x/00GH2vnYsk1eomD8QiRrSAeW6ItbCQDtfXCeJHd0iwiNagqjQkvpvREEPtW3IoQ=="], + "sumchecker": ["sumchecker@3.0.1", "", { "dependencies": { "debug": "^4.1.0" } }, "sha512-MvjXzkz/BOfyVDkG0oFOtBxHX2u3gKbMHIF/dXblZsgD3BWOFLmHovIpZY7BykJdAjcqRCBi1WYBNdEC9yI7vg=="], + + "supports-color": ["supports-color@7.2.0", "", { "dependencies": { "has-flag": "^4.0.0" } }, "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw=="], + "tagged-tag": ["tagged-tag@1.0.0", "", {}, "sha512-yEFYrVhod+hdNyx7g5Bnkkb0G6si8HJurOoOEgC8B/O0uXLHlaey/65KRv6cuWBNhBgHKAROVpc7QyYqE5gFng=="], "tailwind-merge": ["tailwind-merge@3.5.0", "", {}, "sha512-I8K9wewnVDkL1NTGoqWmVEIlUcB9gFriAEkXkfCjX5ib8ezGxtR3xD7iZIxrfArjEsH7F1CHD4RFUtxefdqV/A=="], @@ -1503,10 +1819,20 @@ "tapable": ["tapable@2.3.3", "", {}, "sha512-uxc/zpqFg6x7C8vOE7lh6Lbda8eEL9zmVm/PLeTPBRhh1xCgdWaQ+J1CUieGpIfm2HdtsUpRv+HshiasBMcc6A=="], + "tar": ["tar@7.5.15", "", { "dependencies": { "@isaacs/fs-minipass": "^4.0.0", "chownr": "^3.0.0", "minipass": "^7.1.2", "minizlib": "^3.1.0", "yallist": "^5.0.0" } }, "sha512-dzGK0boVlC4W5QFuQN1EFSl3bIDYsk7Tj40U6eIBnK2k/8ml7TZ5agbI5j5+qnoVcAA+rNtBml8SEiLxZpNqRQ=="], + "tauri-plugin-app-events-api": ["tauri-plugin-app-events-api@0.2.0", "", { "dependencies": { "@tauri-apps/api": "^2.0.3" } }, "sha512-CnlAeucWhT+Rgx6CCsqUpq2D3pqgx0fhjSPKomH7O2t1rGVu5kGLMkYvaCX6gqVTUYpIWX5BLV7LGY2DRri0QA=="], + "temp": ["temp@0.9.4", "", { "dependencies": { "mkdirp": "^0.5.1", "rimraf": "~2.6.2" } }, "sha512-yYrrsWnrXMcdsnu/7YMYAofM1ktpL5By7vZhf15CrXijWWrEYZks5AXBudalfSWJLlnen/QUJUB5aoB0kqZUGA=="], + + "temp-file": ["temp-file@3.4.0", "", { "dependencies": { "async-exit-hook": "^2.0.1", "fs-extra": "^10.0.0" } }, "sha512-C5tjlC/HCtVUOi3KWVokd4vHVViOmGjtLwIh4MuzPo/nMYTV/p1urt3RnMz2IWXDdKEGJH3k5+KPxtqRsUYGtg=="], + + "tiny-async-pool": ["tiny-async-pool@1.3.0", "", { "dependencies": { "semver": "^5.5.0" } }, "sha512-01EAw5EDrcVrdgyCLgoSPvqznC0sVxDSVeiOz09FUpjh71G79VCqneOr+xvt7T1r76CF6ZZfPjHorN2+d+3mqA=="], + "tiny-invariant": ["tiny-invariant@1.3.3", "", {}, "sha512-+FbBPE1o9QAYvviau/qC5SE3caw21q3xkvWKBtja5vgqOWIHHJ3ioaq1VPfn/Szqctz2bU/oYeKd9/z5BL+PVg=="], + "tiny-typed-emitter": ["tiny-typed-emitter@2.1.0", "", {}, "sha512-qVtvMxeXbVej0cQWKqVSSAHmKZEHAvxdF8HEUBFWts8h+xEo5m/lEiPakuyZ3BnCBjOD8i24kzNOiOLLgsSxhA=="], + "tinyexec": ["tinyexec@1.1.2", "", {}, "sha512-dAqSqE/RabpBKI8+h26GfLq6Vb3JVXs30XYQjdMjaj/c2tS8IYYMbIzP599KtRj7c57/wYApb3QjgRgXmrCukA=="], "tinyglobby": ["tinyglobby@0.2.16", "", { "dependencies": { "fdir": "^6.5.0", "picomatch": "^4.0.4" } }, "sha512-pn99VhoACYR8nFHhxqix+uvsbXineAasWm5ojXoN8xEwK5Kd3/TrhNn1wByuD52UxWRLy8pu+kRMniEi6Eq9Zg=="], @@ -1515,12 +1841,18 @@ "tldts-core": ["tldts-core@7.0.30", "", {}, "sha512-uiHN8PIB1VmWyS98eZYja4xzlYqeFZVjb4OuYlJQnZAuJhMw4PbKQOKgHKhBdJR3FE/t5mUQ1Kd80++B+qhD1Q=="], + "tmp": ["tmp@0.2.5", "", {}, "sha512-voyz6MApa1rQGUxT3E+BK7/ROe8itEx7vD8/HEvt4xwXucvQ5G5oeEiHkmHZJuBO21RpOf+YYm9MOivj709jow=="], + + "tmp-promise": ["tmp-promise@3.0.3", "", { "dependencies": { "tmp": "^0.2.0" } }, "sha512-RwM7MoPojPxsOBYnyd2hy0bxtIlVrihNs9pj5SUvY8Zz1sQcQG2tG1hSr8PDxfgEB8RNKDhqbIlroIarSNDNsQ=="], + "to-regex-range": ["to-regex-range@5.0.1", "", { "dependencies": { "is-number": "^7.0.0" } }, "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ=="], "toidentifier": ["toidentifier@1.0.1", "", {}, "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA=="], "tough-cookie": ["tough-cookie@6.0.1", "", { "dependencies": { "tldts": "^7.0.5" } }, "sha512-LktZQb3IeoUWB9lqR5EWTHgW/VTITCXg4D21M+lvybRVdylLrRMnqaIONLVb5mav8vM19m44HIcGq4qASeu2Qw=="], + "truncate-utf8-bytes": ["truncate-utf8-bytes@1.0.2", "", { "dependencies": { "utf8-byte-length": "^1.0.1" } }, "sha512-95Pu1QXQvruGEhv62XCMO3Mm90GscOCClvrIUwCM0PYOXK3kaF3l3sIHxx71ThJfcbM2O5Au6SO3AWCSEfW4mQ=="], + "ts-api-utils": ["ts-api-utils@2.5.0", "", { "peerDependencies": { "typescript": ">=4.8.4" } }, "sha512-OJ/ibxhPlqrMM0UiNHJ/0CKQkoKF243/AEmplt3qpRgkW8VG7IfOS41h7V8TjITqdByHzrjcS/2si+y4lIh8NA=="], "ts-morph": ["ts-morph@26.0.0", "", { "dependencies": { "@ts-morph/common": "~0.27.0", "code-block-writer": "^13.0.3" } }, "sha512-ztMO++owQnz8c/gIENcM9XfCEzgoGphTv+nKpYNM1bgsdOVC/jRZuEBf6N+mLLDNg68Kl+GgUZfOySaRiG1/Ug=="], @@ -1543,6 +1875,8 @@ "typescript-eslint": ["typescript-eslint@8.59.1", "", { "dependencies": { "@typescript-eslint/eslint-plugin": "8.59.1", "@typescript-eslint/parser": "8.59.1", "@typescript-eslint/typescript-estree": "8.59.1", "@typescript-eslint/utils": "8.59.1" }, "peerDependencies": { "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0", "typescript": ">=4.8.4 <6.1.0" } }, "sha512-xqDcFVBmlrltH64lklOVp1wYxgJr6LVdg3NamBgH2OOQDLFdTKfIZXF5PfghrnXQKXZGTQs8tr1vL7fJvq8CTQ=="], + "undici": ["undici@6.25.0", "", {}, "sha512-ZgpWDC5gmNiuY9CnLVXEH8rl50xhRCuLNA97fAUnKi8RRuV4E6KG31pDTsLVUKnohJE0I3XDrTeEydAXRw47xg=="], + "undici-types": ["undici-types@7.19.2", "", {}, "sha512-qYVnV5OEm2AW8cJMCpdV20CDyaN3g0AjDlOGf1OW4iaDEx8MwdtChUp4zu4H0VP3nDRF/8RKWH+IPp9uW0YGZg=="], "unicorn-magic": ["unicorn-magic@0.3.0", "", {}, "sha512-+QBBXBCvifc56fsbuxZQ6Sic3wqqc3WWaqxs58gvJrcOuN83HGTCwz3oS5phzU9LthRNE9VrJCFCLUgHeeFnfA=="], @@ -1565,6 +1899,8 @@ "usehooks-ts": ["usehooks-ts@3.1.1", "", { "dependencies": { "lodash.debounce": "^4.0.8" }, "peerDependencies": { "react": "^16.8.0 || ^17 || ^18 || ^19 || ^19.0.0-rc" } }, "sha512-I4diPp9Cq6ieSUH2wu+fDAVQO43xwtulo+fKEidHUwZPnYImbtkTjzIJYcDcJqxgmX31GVqNFURodvcgHcW0pA=="], + "utf8-byte-length": ["utf8-byte-length@1.0.5", "", {}, "sha512-Xn0w3MtiQ6zoz2vFyUVruaCL53O/DwUvkEeOvj+uulMm0BkUGYWmBYVyElqZaSLhY6ZD0ulfU3aBra2aVT4xfA=="], + "util-deprecate": ["util-deprecate@1.0.2", "", {}, "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw=="], "validate-npm-package-name": ["validate-npm-package-name@7.0.2", "", {}, "sha512-hVDIBwsRruT73PbK7uP5ebUt+ezEtCmzZz3F59BSr2F6OVFnJ/6h8liuvdLrQ88Xmnk6/+xGGuq+pG9WwTuy3A=="], @@ -1573,6 +1909,8 @@ "vaul": ["vaul@1.1.2", "", { "dependencies": { "@radix-ui/react-dialog": "^1.1.1" }, "peerDependencies": { "react": "^16.8 || ^17.0 || ^18.0 || ^19.0.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0.0 || ^19.0.0-rc" } }, "sha512-ZFkClGpWyI2WUQjdLJ/BaGuV6AVQiJ3uELGk3OYtP+B6yCO7Cmn9vPFXVJkRaGkOJu3m8bQMgtyzNHixULceQA=="], + "verror": ["verror@1.10.1", "", { "dependencies": { "assert-plus": "^1.0.0", "core-util-is": "1.0.2", "extsprintf": "^1.2.0" } }, "sha512-veufcmxri4e3XSrT0xwfUR7kguIkaxBeosDg00yDWhk49wdwkSUrvvsm7nc75e1PUyvIeZj6nS8VQRYz2/S4Xg=="], + "victory-vendor": ["victory-vendor@37.3.6", "", { "dependencies": { "@types/d3-array": "^3.0.3", "@types/d3-ease": "^3.0.0", "@types/d3-interpolate": "^3.0.1", "@types/d3-scale": "^4.0.2", "@types/d3-shape": "^3.1.0", "@types/d3-time": "^3.0.0", "@types/d3-timer": "^3.0.0", "d3-array": "^3.1.6", "d3-ease": "^3.0.1", "d3-interpolate": "^3.0.1", "d3-scale": "^4.0.2", "d3-shape": "^3.1.0", "d3-time": "^3.0.0", "d3-timer": "^3.0.1" } }, "sha512-SbPDPdDBYp+5MJHhBCAyI7wKM3d5ivekigc2Dk2s7pgbZ9wIgIBYGVw4zGHBml/qTFbexrofXW6Gu4noGxrOwQ=="], "vite": ["vite@8.0.10", "", { "dependencies": { "lightningcss": "^1.32.0", "picomatch": "^4.0.4", "postcss": "^8.5.10", "rolldown": "1.0.0-rc.17", "tinyglobby": "^0.2.16" }, "optionalDependencies": { "fsevents": "~2.3.3" }, "peerDependencies": { "@types/node": "^20.19.0 || >=22.12.0", "@vitejs/devtools": "^0.1.0", "esbuild": "^0.27.0 || ^0.28.0", "jiti": ">=1.21.0", "less": "^4.0.0", "sass": "^1.70.0", "sass-embedded": "^1.70.0", "stylus": ">=0.54.8", "sugarss": "^5.0.0", "terser": "^5.16.0", "tsx": "^4.8.1", "yaml": "^2.4.2" }, "optionalPeers": ["@types/node", "@vitejs/devtools", "esbuild", "jiti", "less", "sass", "sass-embedded", "stylus", "sugarss", "terser", "tsx", "yaml"], "bin": { "vite": "bin/vite.js" } }, "sha512-rZuUu9j6J5uotLDs+cAA4O5H4K1SfPliUlQwqa6YEwSrWDZzP4rhm00oJR5snMewjxF5V/K3D4kctsUTsIU9Mw=="], @@ -1589,19 +1927,23 @@ "word-wrap": ["word-wrap@1.2.5", "", {}, "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA=="], - "wrap-ansi": ["wrap-ansi@6.2.0", "", { "dependencies": { "ansi-styles": "^4.0.0", "string-width": "^4.1.0", "strip-ansi": "^6.0.0" } }, "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA=="], + "wrap-ansi": ["wrap-ansi@7.0.0", "", { "dependencies": { "ansi-styles": "^4.0.0", "string-width": "^4.1.0", "strip-ansi": "^6.0.0" } }, "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q=="], "wrappy": ["wrappy@1.0.2", "", {}, "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ=="], "wsl-utils": ["wsl-utils@0.3.1", "", { "dependencies": { "is-wsl": "^3.1.0", "powershell-utils": "^0.1.0" } }, "sha512-g/eziiSUNBSsdDJtCLB8bdYEUMj4jR7AGeUo96p/3dTafgjHhpF4RiCFPiRILwjQoDXx5MqkBr4fwWtR3Ky4Wg=="], - "y18n": ["y18n@4.0.3", "", {}, "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ=="], + "xmlbuilder": ["xmlbuilder@15.1.1", "", {}, "sha512-yMqGBqtXyeN1e3TGYvgNgDVZ3j84W4cwkOXQswghol6APgZWaff9lnbvN7MHYJOiXsvGPXtjTYJEiC9J2wv9Eg=="], - "yallist": ["yallist@3.1.1", "", {}, "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g=="], + "y18n": ["y18n@5.0.8", "", {}, "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA=="], - "yargs": ["yargs@15.4.1", "", { "dependencies": { "cliui": "^6.0.0", "decamelize": "^1.2.0", "find-up": "^4.1.0", "get-caller-file": "^2.0.1", "require-directory": "^2.1.1", "require-main-filename": "^2.0.0", "set-blocking": "^2.0.0", "string-width": "^4.2.0", "which-module": "^2.0.0", "y18n": "^4.0.0", "yargs-parser": "^18.1.2" } }, "sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A=="], + "yallist": ["yallist@5.0.0", "", {}, "sha512-YgvUTfwqyc7UXVMrB+SImsVYSmTS8X/tSrtdNZMImM+n7+QTriRXyXim0mBrTXNeqzVF0KWGgHPeiyViFFrNDw=="], - "yargs-parser": ["yargs-parser@18.1.3", "", { "dependencies": { "camelcase": "^5.0.0", "decamelize": "^1.2.0" } }, "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ=="], + "yargs": ["yargs@17.7.2", "", { "dependencies": { "cliui": "^8.0.1", "escalade": "^3.1.1", "get-caller-file": "^2.0.5", "require-directory": "^2.1.1", "string-width": "^4.2.3", "y18n": "^5.0.5", "yargs-parser": "^21.1.1" } }, "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w=="], + + "yargs-parser": ["yargs-parser@21.1.1", "", {}, "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw=="], + + "yauzl": ["yauzl@2.10.0", "", { "dependencies": { "buffer-crc32": "~0.2.3", "fd-slicer": "~1.1.0" } }, "sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g=="], "yocto-queue": ["yocto-queue@0.1.0", "", {}, "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q=="], @@ -1625,16 +1967,40 @@ "@dotenvx/dotenvx/commander": ["commander@11.1.0", "", {}, "sha512-yPVavfyCcRhmorC7rWlkHn15b4wDVgVmBA7kV4QVBsF7kv/9TKJAbAXVTxvTnwP8HHKjRCJDClKbciiYS7p0DQ=="], + "@dotenvx/dotenvx/dotenv": ["dotenv@17.4.2", "", {}, "sha512-nI4U3TottKAcAD9LLud4Cb7b2QztQMUEfHbvhTH09bqXTxnSie8WnjPALV/WMCrJZ6UV/qHJ6L03OqO3LcdYZw=="], + "@dotenvx/dotenvx/execa": ["execa@5.1.1", "", { "dependencies": { "cross-spawn": "^7.0.3", "get-stream": "^6.0.0", "human-signals": "^2.1.0", "is-stream": "^2.0.0", "merge-stream": "^2.0.0", "npm-run-path": "^4.0.1", "onetime": "^5.1.2", "signal-exit": "^3.0.3", "strip-final-newline": "^2.0.0" } }, "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg=="], "@dotenvx/dotenvx/which": ["which@4.0.0", "", { "dependencies": { "isexe": "^3.1.1" }, "bin": { "node-which": "bin/which.js" } }, "sha512-GlaYyEb07DPxYCKhKzplCWBJtvxZcZMrL+4UkrTSJHHPyZU4mYYTv3qaOe77H7EODLSSopAUFAc6W8U4yqvscg=="], + "@electron/asar/commander": ["commander@5.1.0", "", {}, "sha512-P0CysNDQ7rtVw4QIQtm+MRxV66vKFSvlsQvGYXZWR3qFU0jlMKHZZZgw8e+8DSah4UDKMqnknRDQz+xuQXQ/Zg=="], + + "@electron/asar/minimatch": ["minimatch@3.1.5", "", { "dependencies": { "brace-expansion": "^1.1.7" } }, "sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w=="], + + "@electron/fuses/fs-extra": ["fs-extra@9.1.0", "", { "dependencies": { "at-least-node": "^1.0.0", "graceful-fs": "^4.2.0", "jsonfile": "^6.0.1", "universalify": "^2.0.0" } }, "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ=="], + + "@electron/get/fs-extra": ["fs-extra@8.1.0", "", { "dependencies": { "graceful-fs": "^4.2.0", "jsonfile": "^4.0.0", "universalify": "^0.1.0" } }, "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g=="], + + "@electron/get/semver": ["semver@6.3.1", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA=="], + + "@electron/notarize/fs-extra": ["fs-extra@9.1.0", "", { "dependencies": { "at-least-node": "^1.0.0", "graceful-fs": "^4.2.0", "jsonfile": "^6.0.1", "universalify": "^2.0.0" } }, "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ=="], + + "@electron/osx-sign/isbinaryfile": ["isbinaryfile@4.0.10", "", {}, "sha512-iHrqe5shvBUcFbmZq9zOQHBoeOhZJu6RQGrDpBgenUm/Am+F3JM2MgQj+rK3Z601fzrL5gLZWtAPH2OBaSVcyw=="], + + "@electron/universal/fs-extra": ["fs-extra@11.3.4", "", { "dependencies": { "graceful-fs": "^4.2.0", "jsonfile": "^6.0.1", "universalify": "^2.0.0" } }, "sha512-CTXd6rk/M3/ULNQj8FBqBWHYBVYybQ3VPBw0xGKFe3tuH7ytT6ACnvzpIQ3UZtB8yvUKC2cXn1a+x+5EVQLovA=="], + + "@electron/universal/minimatch": ["minimatch@9.0.9", "", { "dependencies": { "brace-expansion": "^2.0.2" } }, "sha512-OBwBN9AL4dqmETlpS2zasx+vTeWclWzkblfZk7KTA5j3jeOONz/tRCnZomUyvNg83wL5Zv9Ss6HMJXAgL8R2Yg=="], + + "@electron/windows-sign/fs-extra": ["fs-extra@11.3.4", "", { "dependencies": { "graceful-fs": "^4.2.0", "jsonfile": "^6.0.1", "universalify": "^2.0.0" } }, "sha512-CTXd6rk/M3/ULNQj8FBqBWHYBVYybQ3VPBw0xGKFe3tuH7ytT6ACnvzpIQ3UZtB8yvUKC2cXn1a+x+5EVQLovA=="], + "@eslint-community/eslint-utils/eslint-visitor-keys": ["eslint-visitor-keys@3.4.3", "", {}, "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag=="], "@floating-ui/react-dom/@floating-ui/dom": ["@floating-ui/dom@1.7.6", "", { "dependencies": { "@floating-ui/core": "^1.7.5", "@floating-ui/utils": "^0.2.11" } }, "sha512-9gZSAI5XM36880PPMm//9dfiEngYoC6Am2izES1FF406YFsjvyBMmeJ2g4SAju3xWwtuynNRFL2s9hgxpLI5SQ=="], "@livekit/components-core/loglevel": ["loglevel@1.9.1", "", {}, "sha512-hP3I3kCrDIMuRwAwHltphhDM1r8i55H33GgqjXbrisuJhF4kRhW1dNuxsRklp4bXl8DSdLaNLuiL4A/LWRfxvg=="], + "@malept/flatpak-bundler/fs-extra": ["fs-extra@9.1.0", "", { "dependencies": { "at-least-node": "^1.0.0", "graceful-fs": "^4.2.0", "jsonfile": "^6.0.1", "universalify": "^2.0.0" } }, "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ=="], + "@modelcontextprotocol/sdk/ajv": ["ajv@8.20.0", "", { "dependencies": { "fast-deep-equal": "^3.1.3", "fast-uri": "^3.0.1", "json-schema-traverse": "^1.0.0", "require-from-string": "^2.0.2" } }, "sha512-Thbli+OlOj+iMPYFBVBfJ3OmCAnaSyNn4M1vz9T6Gka5Jt9ba/HIR56joy65tY6kx/FCF5VXNB819Y7/GUrBGA=="], "@mswjs/interceptors/@open-draft/deferred-promise": ["@open-draft/deferred-promise@2.2.0", "", {}, "sha512-CecwLWx3rhxVQF6V4bAgPS5t+So2sTbPgAzafKkVizyi7tlwpcFpdFqq+wqF2OwNBmqFuu6tOyouTuxgpMfzmA=="], @@ -1663,51 +2029,109 @@ "@tailwindcss/oxide-wasm32-wasi/tslib": ["tslib@2.8.1", "", { "bundled": true }, "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w=="], + "@tensamin/electron/@types/node": ["@types/node@25.9.1", "", { "dependencies": { "undici-types": ">=7.24.0 <7.24.7" } }, "sha512-xfrlY7UD5rMJk3ZVJP8BNzS28J36YJg+xp+LPXV1TdWxr8uMH5A860QNxYDGQe/ylDSgjxE52Q9VnO7p75tJxg=="], + "@tensamin/tauri/@types/node": ["@types/node@25.9.1", "", { "dependencies": { "undici-types": ">=7.24.0 <7.24.7" } }, "sha512-xfrlY7UD5rMJk3ZVJP8BNzS28J36YJg+xp+LPXV1TdWxr8uMH5A860QNxYDGQe/ylDSgjxE52Q9VnO7p75tJxg=="], "@tensamin/ui/recharts": ["recharts@3.8.0", "", { "dependencies": { "@reduxjs/toolkit": "^1.9.0 || 2.x.x", "clsx": "^2.1.1", "decimal.js-light": "^2.5.1", "es-toolkit": "^1.39.3", "eventemitter3": "^5.0.1", "immer": "^10.1.1", "react-redux": "8.x.x || 9.x.x", "reselect": "5.1.1", "tiny-invariant": "^1.3.3", "use-sync-external-store": "^1.2.2", "victory-vendor": "^37.0.2" }, "peerDependencies": { "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0", "react-dom": "^16.0.0 || ^17.0.0 || ^18.0.0 || ^19.0.0", "react-is": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" } }, "sha512-Z/m38DX3L73ExO4Tpc9/iZWHmHnlzWG4njQbxsF5aSjwqmHNDDIm0rdEBArkwsBvR8U6EirlEHiQNYWCVh9sGQ=="], "@tensamin/ui/shadcn": ["shadcn@3.8.5", "", { "dependencies": { "@antfu/ni": "^25.0.0", "@babel/core": "^7.28.0", "@babel/parser": "^7.28.0", "@babel/plugin-transform-typescript": "^7.28.0", "@babel/preset-typescript": "^7.27.1", "@dotenvx/dotenvx": "^1.48.4", "@modelcontextprotocol/sdk": "^1.26.0", "@types/validate-npm-package-name": "^4.0.2", "browserslist": "^4.26.2", "commander": "^14.0.0", "cosmiconfig": "^9.0.0", "dedent": "^1.6.0", "deepmerge": "^4.3.1", "diff": "^8.0.2", "execa": "^9.6.0", "fast-glob": "^3.3.3", "fs-extra": "^11.3.1", "fuzzysort": "^3.1.0", "https-proxy-agent": "^7.0.6", "kleur": "^4.1.5", "msw": "^2.10.4", "node-fetch": "^3.3.2", "open": "^11.0.0", "ora": "^8.2.0", "postcss": "^8.5.6", "postcss-selector-parser": "^7.1.0", "prompts": "^2.4.2", "recast": "^0.23.11", "stringify-object": "^5.0.0", "tailwind-merge": "^3.0.1", "ts-morph": "^26.0.0", "tsconfig-paths": "^4.2.0", "validate-npm-package-name": "^7.0.1", "zod": "^3.24.1", "zod-to-json-schema": "^3.24.6" }, "bin": { "shadcn": "dist/index.js" } }, "sha512-jPRx44e+eyeV7xwY3BLJXcfrks00+M0h5BGB9l6DdcBW4BpAj4x3lVmVy0TXPEs2iHEisxejr62sZAAw6B1EVA=="], + "@types/cacheable-request/@types/node": ["@types/node@25.9.1", "", { "dependencies": { "undici-types": ">=7.24.0 <7.24.7" } }, "sha512-xfrlY7UD5rMJk3ZVJP8BNzS28J36YJg+xp+LPXV1TdWxr8uMH5A860QNxYDGQe/ylDSgjxE52Q9VnO7p75tJxg=="], + + "@types/fs-extra/@types/node": ["@types/node@25.9.1", "", { "dependencies": { "undici-types": ">=7.24.0 <7.24.7" } }, "sha512-xfrlY7UD5rMJk3ZVJP8BNzS28J36YJg+xp+LPXV1TdWxr8uMH5A860QNxYDGQe/ylDSgjxE52Q9VnO7p75tJxg=="], + + "@types/keyv/@types/node": ["@types/node@25.9.1", "", { "dependencies": { "undici-types": ">=7.24.0 <7.24.7" } }, "sha512-xfrlY7UD5rMJk3ZVJP8BNzS28J36YJg+xp+LPXV1TdWxr8uMH5A860QNxYDGQe/ylDSgjxE52Q9VnO7p75tJxg=="], + + "@types/plist/@types/node": ["@types/node@25.9.1", "", { "dependencies": { "undici-types": ">=7.24.0 <7.24.7" } }, "sha512-xfrlY7UD5rMJk3ZVJP8BNzS28J36YJg+xp+LPXV1TdWxr8uMH5A860QNxYDGQe/ylDSgjxE52Q9VnO7p75tJxg=="], + + "@types/responselike/@types/node": ["@types/node@25.9.1", "", { "dependencies": { "undici-types": ">=7.24.0 <7.24.7" } }, "sha512-xfrlY7UD5rMJk3ZVJP8BNzS28J36YJg+xp+LPXV1TdWxr8uMH5A860QNxYDGQe/ylDSgjxE52Q9VnO7p75tJxg=="], + + "@types/yauzl/@types/node": ["@types/node@25.9.1", "", { "dependencies": { "undici-types": ">=7.24.0 <7.24.7" } }, "sha512-xfrlY7UD5rMJk3ZVJP8BNzS28J36YJg+xp+LPXV1TdWxr8uMH5A860QNxYDGQe/ylDSgjxE52Q9VnO7p75tJxg=="], + "@typescript-eslint/eslint-plugin/ignore": ["ignore@7.0.5", "", {}, "sha512-Hs59xBNfUIunMFgWAbGX5cq6893IbWg4KnrjbYwX3tx0ztorVgTDA6B2sxf8ejHJ4wz8BqGUMYlnzNBer5NvGg=="], "ajv-formats/ajv": ["ajv@8.20.0", "", { "dependencies": { "fast-deep-equal": "^3.1.3", "fast-uri": "^3.0.1", "json-schema-traverse": "^1.0.0", "require-from-string": "^2.0.2" } }, "sha512-Thbli+OlOj+iMPYFBVBfJ3OmCAnaSyNn4M1vz9T6Gka5Jt9ba/HIR56joy65tY6kx/FCF5VXNB819Y7/GUrBGA=="], + "app-builder-lib/@electron/get": ["@electron/get@3.1.0", "", { "dependencies": { "debug": "^4.1.1", "env-paths": "^2.2.0", "fs-extra": "^8.1.0", "got": "^11.8.5", "progress": "^2.0.3", "semver": "^6.2.0", "sumchecker": "^3.0.1" }, "optionalDependencies": { "global-agent": "^3.0.0" } }, "sha512-F+nKc0xW+kVbBRhFzaMgPy3KwmuNTYX1fx6+FxxoSnNgwYX6LD7AKBTWkU0MQ6IBoe7dz069CNkR673sPAgkCQ=="], + + "app-builder-lib/ci-info": ["ci-info@4.3.1", "", {}, "sha512-Wdy2Igu8OcBpI2pZePZ5oWjPC38tmDVx5WKUXKwlLYkA0ozo85sLsLvkBbBn/sZaSCMFOGZJ14fvW9t5/d7kdA=="], + + "app-builder-lib/which": ["which@5.0.0", "", { "dependencies": { "isexe": "^3.1.1" }, "bin": { "node-which": "bin/which.js" } }, "sha512-JEdGzHwwkrbWoGOlIHqQ5gtprKGOenpDHpxE9zVR1bWbOtYRyPPHMe9FaP6x61CmNaTThSkb0DAJte5jD+DmzQ=="], + + "body-parser/iconv-lite": ["iconv-lite@0.7.2", "", { "dependencies": { "safer-buffer": ">= 2.1.2 < 3.0.0" } }, "sha512-im9DjEDQ55s9fL4EYzOAv0yMqmMBSZp6G0VvFyTMPKWxiSBHUj9NW/qqLmXUwXrrM7AvqSlTCfvqRb0cM8yYqw=="], + "cliui/strip-ansi": ["strip-ansi@6.0.1", "", { "dependencies": { "ansi-regex": "^5.0.1" } }, "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A=="], + "clone-response/mimic-response": ["mimic-response@1.0.1", "", {}, "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ=="], + + "dir-compare/minimatch": ["minimatch@3.1.5", "", { "dependencies": { "brace-expansion": "^1.1.7" } }, "sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w=="], + "eciesjs/@noble/curves": ["@noble/curves@1.9.7", "", { "dependencies": { "@noble/hashes": "1.8.0" } }, "sha512-gbKGcRUYIjA3/zCCNaWDciTMFI0dCkvou3TL8Zmy5Nc7sJ47a0jtOeZoTaMxkuqRo9cRhjOdZJXegxYE5FN/xw=="], "eciesjs/@noble/hashes": ["@noble/hashes@1.8.0", "", {}, "sha512-jCs9ldd7NwzpgXDIf6P3+NrHh9/sD6CQdxHyjQI+h/6rDNo88ypBxxz45UDuZHz9r3tNz7N/VInSVoVdtXEI4A=="], + "electron/@types/node": ["@types/node@22.19.19", "", { "dependencies": { "undici-types": "~6.21.0" } }, "sha512-dyh/xO2Fh5bYrfWaaqGrRQQGkNdmYw6AmaAUvYeUMNTWQtvb796ikLdmTchRmOlOiIJ1TDXfWgVx1QkUlQ6Hew=="], + + "electron-winstaller/fs-extra": ["fs-extra@7.0.1", "", { "dependencies": { "graceful-fs": "^4.1.2", "jsonfile": "^4.0.0", "universalify": "^0.1.0" } }, "sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw=="], + + "execa/get-stream": ["get-stream@9.0.1", "", { "dependencies": { "@sec-ant/readable-stream": "^0.4.1", "is-stream": "^4.0.1" } }, "sha512-kVCxPF3vQM/N0B1PmoqVUqgHP+EeVjmZSQn+1oCRPxd2P21P2F19lIgbR3HBosbB1PUhOAoctJnfEn2GbN2eZA=="], + "express/cookie": ["cookie@0.7.2", "", {}, "sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w=="], "fast-glob/glob-parent": ["glob-parent@5.1.2", "", { "dependencies": { "is-glob": "^4.0.1" } }, "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow=="], + "filelist/minimatch": ["minimatch@5.1.9", "", { "dependencies": { "brace-expansion": "^2.0.1" } }, "sha512-7o1wEA2RyMP7Iu7GNba9vc0RWWGACJOCZBJX2GJWip0ikV+wcOsgVuY9uE8CPiyQhkGFSlhuSkZPavN7u1c2Fw=="], + + "form-data/mime-types": ["mime-types@2.1.35", "", { "dependencies": { "mime-db": "1.52.0" } }, "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw=="], + + "glob/minimatch": ["minimatch@3.1.5", "", { "dependencies": { "brace-expansion": "^1.1.7" } }, "sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w=="], + + "hosted-git-info/lru-cache": ["lru-cache@6.0.0", "", { "dependencies": { "yallist": "^4.0.0" } }, "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA=="], + + "log-symbols/chalk": ["chalk@5.6.2", "", {}, "sha512-7NzBL0rN6fMUW+f7A6Io4h40qQlG+xGmtMxfbnH/K7TAtt8JQWVQK+6g0UXKMeVJoyV5EkkNsErQ8pVD3bLHbA=="], + "log-symbols/is-unicode-supported": ["is-unicode-supported@1.3.0", "", {}, "sha512-43r2mRvz+8JRIKnWJ+3j8JtjRKZ6GmjzfaE/qiBJnikNnYv/6bagRJ1kUhNk8R5EX/GkobD+r+sfxCPJsiKBLQ=="], + "lru-cache/yallist": ["yallist@3.1.1", "", {}, "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g=="], + "micromatch/picomatch": ["picomatch@2.3.2", "", {}, "sha512-V7+vQEJ06Z+c5tSye8S+nHUfI51xoXIXjHQ99cQtKUkQqqO1kO/KCJUfZXuB47h/YBlDhah2H3hdUGXn8ie0oA=="], - "msw/yargs": ["yargs@17.7.2", "", { "dependencies": { "cliui": "^8.0.1", "escalade": "^3.1.1", "get-caller-file": "^2.0.5", "require-directory": "^2.1.1", "string-width": "^4.2.3", "y18n": "^5.0.5", "yargs-parser": "^21.1.1" } }, "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w=="], + "node-gyp/which": ["which@6.0.1", "", { "dependencies": { "isexe": "^4.0.0" }, "bin": { "node-which": "bin/which.js" } }, "sha512-oGLe46MIrCRqX7ytPUf66EAYvdeMIZYn3WaocqqKZAxrBpkqHfL/qvTyJ/bTk5+AqHCjXmrv3CEWgy368zhRUg=="], "npm-run-path/path-key": ["path-key@4.0.0", "", {}, "sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ=="], + "ora/chalk": ["chalk@5.6.2", "", {}, "sha512-7NzBL0rN6fMUW+f7A6Io4h40qQlG+xGmtMxfbnH/K7TAtt8JQWVQK+6g0UXKMeVJoyV5EkkNsErQ8pVD3bLHbA=="], + "ora/string-width": ["string-width@7.2.0", "", { "dependencies": { "emoji-regex": "^10.3.0", "get-east-asian-width": "^1.0.0", "strip-ansi": "^7.1.0" } }, "sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ=="], + "postject/commander": ["commander@9.5.0", "", {}, "sha512-KRs7WVDKg86PWiuAqhDrAQnTXZKraVcCc6vFdL14qrZ/DcWwuRo7VoiYXalXO7S5GKpqYiVEwCbgFDfxNHKJBQ=="], + "prompts/kleur": ["kleur@3.0.3", "", {}, "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w=="], + "proper-lockfile/signal-exit": ["signal-exit@3.0.7", "", {}, "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ=="], + + "qrcode/yargs": ["yargs@15.4.1", "", { "dependencies": { "cliui": "^6.0.0", "decamelize": "^1.2.0", "find-up": "^4.1.0", "get-caller-file": "^2.0.1", "require-directory": "^2.1.1", "require-main-filename": "^2.0.0", "set-blocking": "^2.0.0", "string-width": "^4.2.0", "which-module": "^2.0.0", "y18n": "^4.0.0", "yargs-parser": "^18.1.2" } }, "sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A=="], + + "raw-body/iconv-lite": ["iconv-lite@0.7.2", "", { "dependencies": { "safer-buffer": ">= 2.1.2 < 3.0.0" } }, "sha512-im9DjEDQ55s9fL4EYzOAv0yMqmMBSZp6G0VvFyTMPKWxiSBHUj9NW/qqLmXUwXrrM7AvqSlTCfvqRb0cM8yYqw=="], + "restore-cursor/onetime": ["onetime@7.0.0", "", { "dependencies": { "mimic-function": "^5.0.0" } }, "sha512-VXJjc87FScF88uafS3JllDgvAm+c/Slfz06lorj2uAY34rlUu0Nt+v8wreiImcrgAjjIHp1rXpTDlLOGw29WwQ=="], "rolldown/@rolldown/pluginutils": ["@rolldown/pluginutils@1.0.0-rc.17", "", {}, "sha512-n8iosDOt6Ig1UhJ2AYqoIhHWh/isz0xpicHTzpKBeotdVsTEcxsSA/i3EVM7gQAj0rU27OLAxCjzlj15IWY7bg=="], "router/path-to-regexp": ["path-to-regexp@8.4.2", "", {}, "sha512-qRcuIdP69NPm4qbACK+aDogI5CBDMi1jKe0ry5rSQJz8JVLsC7jV8XpiJjGRLLol3N+R5ihGYcrPLTno6pAdBA=="], + "serialize-error/type-fest": ["type-fest@0.13.1", "", {}, "sha512-34R7HTnG0XIJcBSn5XhDd7nNFPRcXYRZrBB2O2jdKqYODldSzBAqzsWoZYYvduky73toYS/ESqxPvkDf/F0XMg=="], + + "shadcn/fs-extra": ["fs-extra@11.3.4", "", { "dependencies": { "graceful-fs": "^4.2.0", "jsonfile": "^6.0.1", "universalify": "^2.0.0" } }, "sha512-CTXd6rk/M3/ULNQj8FBqBWHYBVYybQ3VPBw0xGKFe3tuH7ytT6ACnvzpIQ3UZtB8yvUKC2cXn1a+x+5EVQLovA=="], + "shadcn/zod": ["zod@3.25.76", "", {}, "sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ=="], "string-width/strip-ansi": ["strip-ansi@6.0.1", "", { "dependencies": { "ansi-regex": "^5.0.1" } }, "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A=="], - "wrap-ansi/strip-ansi": ["strip-ansi@6.0.1", "", { "dependencies": { "ansi-regex": "^5.0.1" } }, "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A=="], + "tiny-async-pool/semver": ["semver@5.7.2", "", { "bin": { "semver": "bin/semver" } }, "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g=="], - "yargs/find-up": ["find-up@4.1.0", "", { "dependencies": { "locate-path": "^5.0.0", "path-exists": "^4.0.0" } }, "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw=="], + "wrap-ansi/strip-ansi": ["strip-ansi@6.0.1", "", { "dependencies": { "ansi-regex": "^5.0.1" } }, "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A=="], "@dotenvx/dotenvx/execa/get-stream": ["get-stream@6.0.1", "", {}, "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg=="], @@ -1723,38 +2147,102 @@ "@dotenvx/dotenvx/which/isexe": ["isexe@3.1.5", "", {}, "sha512-6B3tLtFqtQS4ekarvLVMZ+X+VlvQekbe4taUkf/rhVO3d/h0M2rfARm/pXLcPEsjjMsFgrFgSrhQIxcSVrBz8w=="], + "@electron/asar/minimatch/brace-expansion": ["brace-expansion@1.1.14", "", { "dependencies": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" } }, "sha512-MWPGfDxnyzKU7rNOW9SP/c50vi3xrmrua/+6hfPbCS2ABNWfx24vPidzvC7krjU/RTo235sV776ymlsMtGKj8g=="], + + "@electron/get/fs-extra/jsonfile": ["jsonfile@4.0.0", "", { "optionalDependencies": { "graceful-fs": "^4.1.6" } }, "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg=="], + + "@electron/get/fs-extra/universalify": ["universalify@0.1.2", "", {}, "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg=="], + + "@electron/universal/minimatch/brace-expansion": ["brace-expansion@2.1.0", "", { "dependencies": { "balanced-match": "^1.0.0" } }, "sha512-TN1kCZAgdgweJhWWpgKYrQaMNHcDULHkWwQIspdtjV4Y5aurRdZpjAqn6yX3FPqTA9ngHCc4hJxMAMgGfve85w=="], + "@modelcontextprotocol/sdk/ajv/json-schema-traverse": ["json-schema-traverse@1.0.0", "", {}, "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug=="], + "@tensamin/electron/@types/node/undici-types": ["undici-types@7.24.6", "", {}, "sha512-WRNW+sJgj5OBN4/0JpHFqtqzhpbnV0GuB+OozA9gCL7a993SmU+1JBZCzLNxYsbMfIeDL+lTsphD5jN5N+n0zg=="], + "@tensamin/tauri/@types/node/undici-types": ["undici-types@7.24.6", "", {}, "sha512-WRNW+sJgj5OBN4/0JpHFqtqzhpbnV0GuB+OozA9gCL7a993SmU+1JBZCzLNxYsbMfIeDL+lTsphD5jN5N+n0zg=="], + "@tensamin/ui/shadcn/fs-extra": ["fs-extra@11.3.4", "", { "dependencies": { "graceful-fs": "^4.2.0", "jsonfile": "^6.0.1", "universalify": "^2.0.0" } }, "sha512-CTXd6rk/M3/ULNQj8FBqBWHYBVYybQ3VPBw0xGKFe3tuH7ytT6ACnvzpIQ3UZtB8yvUKC2cXn1a+x+5EVQLovA=="], + "@tensamin/ui/shadcn/zod": ["zod@3.25.76", "", {}, "sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ=="], + "@types/cacheable-request/@types/node/undici-types": ["undici-types@7.24.6", "", {}, "sha512-WRNW+sJgj5OBN4/0JpHFqtqzhpbnV0GuB+OozA9gCL7a993SmU+1JBZCzLNxYsbMfIeDL+lTsphD5jN5N+n0zg=="], + + "@types/fs-extra/@types/node/undici-types": ["undici-types@7.24.6", "", {}, "sha512-WRNW+sJgj5OBN4/0JpHFqtqzhpbnV0GuB+OozA9gCL7a993SmU+1JBZCzLNxYsbMfIeDL+lTsphD5jN5N+n0zg=="], + + "@types/keyv/@types/node/undici-types": ["undici-types@7.24.6", "", {}, "sha512-WRNW+sJgj5OBN4/0JpHFqtqzhpbnV0GuB+OozA9gCL7a993SmU+1JBZCzLNxYsbMfIeDL+lTsphD5jN5N+n0zg=="], + + "@types/plist/@types/node/undici-types": ["undici-types@7.24.6", "", {}, "sha512-WRNW+sJgj5OBN4/0JpHFqtqzhpbnV0GuB+OozA9gCL7a993SmU+1JBZCzLNxYsbMfIeDL+lTsphD5jN5N+n0zg=="], + + "@types/responselike/@types/node/undici-types": ["undici-types@7.24.6", "", {}, "sha512-WRNW+sJgj5OBN4/0JpHFqtqzhpbnV0GuB+OozA9gCL7a993SmU+1JBZCzLNxYsbMfIeDL+lTsphD5jN5N+n0zg=="], + + "@types/yauzl/@types/node/undici-types": ["undici-types@7.24.6", "", {}, "sha512-WRNW+sJgj5OBN4/0JpHFqtqzhpbnV0GuB+OozA9gCL7a993SmU+1JBZCzLNxYsbMfIeDL+lTsphD5jN5N+n0zg=="], + "ajv-formats/ajv/json-schema-traverse": ["json-schema-traverse@1.0.0", "", {}, "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug=="], + "app-builder-lib/@electron/get/fs-extra": ["fs-extra@8.1.0", "", { "dependencies": { "graceful-fs": "^4.2.0", "jsonfile": "^4.0.0", "universalify": "^0.1.0" } }, "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g=="], + + "app-builder-lib/@electron/get/semver": ["semver@6.3.1", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA=="], + + "app-builder-lib/which/isexe": ["isexe@3.1.5", "", {}, "sha512-6B3tLtFqtQS4ekarvLVMZ+X+VlvQekbe4taUkf/rhVO3d/h0M2rfARm/pXLcPEsjjMsFgrFgSrhQIxcSVrBz8w=="], + "cliui/strip-ansi/ansi-regex": ["ansi-regex@5.0.1", "", {}, "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ=="], - "msw/yargs/cliui": ["cliui@8.0.1", "", { "dependencies": { "string-width": "^4.2.0", "strip-ansi": "^6.0.1", "wrap-ansi": "^7.0.0" } }, "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ=="], + "dir-compare/minimatch/brace-expansion": ["brace-expansion@1.1.14", "", { "dependencies": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" } }, "sha512-MWPGfDxnyzKU7rNOW9SP/c50vi3xrmrua/+6hfPbCS2ABNWfx24vPidzvC7krjU/RTo235sV776ymlsMtGKj8g=="], - "msw/yargs/y18n": ["y18n@5.0.8", "", {}, "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA=="], + "electron-winstaller/fs-extra/jsonfile": ["jsonfile@4.0.0", "", { "optionalDependencies": { "graceful-fs": "^4.1.6" } }, "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg=="], - "msw/yargs/yargs-parser": ["yargs-parser@21.1.1", "", {}, "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw=="], + "electron-winstaller/fs-extra/universalify": ["universalify@0.1.2", "", {}, "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg=="], + + "electron/@types/node/undici-types": ["undici-types@6.21.0", "", {}, "sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ=="], + + "filelist/minimatch/brace-expansion": ["brace-expansion@2.1.0", "", { "dependencies": { "balanced-match": "^1.0.0" } }, "sha512-TN1kCZAgdgweJhWWpgKYrQaMNHcDULHkWwQIspdtjV4Y5aurRdZpjAqn6yX3FPqTA9ngHCc4hJxMAMgGfve85w=="], + + "form-data/mime-types/mime-db": ["mime-db@1.52.0", "", {}, "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg=="], + + "glob/minimatch/brace-expansion": ["brace-expansion@1.1.14", "", { "dependencies": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" } }, "sha512-MWPGfDxnyzKU7rNOW9SP/c50vi3xrmrua/+6hfPbCS2ABNWfx24vPidzvC7krjU/RTo235sV776ymlsMtGKj8g=="], + + "hosted-git-info/lru-cache/yallist": ["yallist@4.0.0", "", {}, "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A=="], + + "node-gyp/which/isexe": ["isexe@4.0.0", "", {}, "sha512-FFUtZMpoZ8RqHS3XeXEmHWLA4thH+ZxCv2lOiPIn1Xc7CxrqhWzNSDzD+/chS/zbYezmiwWLdQC09JdQKmthOw=="], "ora/string-width/emoji-regex": ["emoji-regex@10.6.0", "", {}, "sha512-toUI84YS5YmxW219erniWD0CIVOo46xGKColeNQRgOzDorgBi1v4D71/OFzgD9GO2UGKIv1C3Sp8DAn0+j5w7A=="], + "qrcode/yargs/cliui": ["cliui@6.0.0", "", { "dependencies": { "string-width": "^4.2.0", "strip-ansi": "^6.0.0", "wrap-ansi": "^6.2.0" } }, "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ=="], + + "qrcode/yargs/find-up": ["find-up@4.1.0", "", { "dependencies": { "locate-path": "^5.0.0", "path-exists": "^4.0.0" } }, "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw=="], + + "qrcode/yargs/y18n": ["y18n@4.0.3", "", {}, "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ=="], + + "qrcode/yargs/yargs-parser": ["yargs-parser@18.1.3", "", { "dependencies": { "camelcase": "^5.0.0", "decamelize": "^1.2.0" } }, "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ=="], + "string-width/strip-ansi/ansi-regex": ["ansi-regex@5.0.1", "", {}, "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ=="], "wrap-ansi/strip-ansi/ansi-regex": ["ansi-regex@5.0.1", "", {}, "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ=="], - "yargs/find-up/locate-path": ["locate-path@5.0.0", "", { "dependencies": { "p-locate": "^4.1.0" } }, "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g=="], + "@electron/asar/minimatch/brace-expansion/balanced-match": ["balanced-match@1.0.2", "", {}, "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw=="], - "msw/yargs/cliui/strip-ansi": ["strip-ansi@6.0.1", "", { "dependencies": { "ansi-regex": "^5.0.1" } }, "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A=="], + "@electron/universal/minimatch/brace-expansion/balanced-match": ["balanced-match@1.0.2", "", {}, "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw=="], - "msw/yargs/cliui/wrap-ansi": ["wrap-ansi@7.0.0", "", { "dependencies": { "ansi-styles": "^4.0.0", "string-width": "^4.1.0", "strip-ansi": "^6.0.0" } }, "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q=="], + "app-builder-lib/@electron/get/fs-extra/jsonfile": ["jsonfile@4.0.0", "", { "optionalDependencies": { "graceful-fs": "^4.1.6" } }, "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg=="], - "yargs/find-up/locate-path/p-locate": ["p-locate@4.1.0", "", { "dependencies": { "p-limit": "^2.2.0" } }, "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A=="], + "app-builder-lib/@electron/get/fs-extra/universalify": ["universalify@0.1.2", "", {}, "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg=="], - "msw/yargs/cliui/strip-ansi/ansi-regex": ["ansi-regex@5.0.1", "", {}, "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ=="], + "dir-compare/minimatch/brace-expansion/balanced-match": ["balanced-match@1.0.2", "", {}, "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw=="], - "yargs/find-up/locate-path/p-locate/p-limit": ["p-limit@2.3.0", "", { "dependencies": { "p-try": "^2.0.0" } }, "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w=="], + "filelist/minimatch/brace-expansion/balanced-match": ["balanced-match@1.0.2", "", {}, "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw=="], + + "glob/minimatch/brace-expansion/balanced-match": ["balanced-match@1.0.2", "", {}, "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw=="], + + "qrcode/yargs/cliui/strip-ansi": ["strip-ansi@6.0.1", "", { "dependencies": { "ansi-regex": "^5.0.1" } }, "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A=="], + + "qrcode/yargs/cliui/wrap-ansi": ["wrap-ansi@6.2.0", "", { "dependencies": { "ansi-styles": "^4.0.0", "string-width": "^4.1.0", "strip-ansi": "^6.0.0" } }, "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA=="], + + "qrcode/yargs/find-up/locate-path": ["locate-path@5.0.0", "", { "dependencies": { "p-locate": "^4.1.0" } }, "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g=="], + + "qrcode/yargs/cliui/strip-ansi/ansi-regex": ["ansi-regex@5.0.1", "", {}, "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ=="], + + "qrcode/yargs/find-up/locate-path/p-locate": ["p-locate@4.1.0", "", { "dependencies": { "p-limit": "^2.2.0" } }, "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A=="], + + "qrcode/yargs/find-up/locate-path/p-locate/p-limit": ["p-limit@2.3.0", "", { "dependencies": { "p-try": "^2.0.0" } }, "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w=="], } } diff --git a/flake.lock b/flake.lock new file mode 100644 index 0000000..ea7bf8c --- /dev/null +++ b/flake.lock @@ -0,0 +1,26 @@ +{ + "nodes": { + "nixpkgs": { + "locked": { + "lastModified": 1779508470, + "narHash": "sha256-Ap9KJX+5xHIn3bPIpfNgT6MEXdAECECwo4/rmlQD74M=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "29916453413845e54a65b8a1cf996842300cd299", + "type": "github" + }, + "original": { + "id": "nixpkgs", + "ref": "nixos-unstable", + "type": "indirect" + } + }, + "root": { + "inputs": { + "nixpkgs": "nixpkgs" + } + } + }, + "root": "root", + "version": 7 +} diff --git a/flake.nix b/flake.nix new file mode 100644 index 0000000..9cb24d3 --- /dev/null +++ b/flake.nix @@ -0,0 +1,35 @@ +{ + description = "Tensamin desktop client"; + + inputs.nixpkgs.url = "nixpkgs/nixos-unstable"; + + outputs = {nixpkgs, ...}: let + systems = ["x86_64-linux" "aarch64-linux"]; + forAllSystems = nixpkgs.lib.genAttrs systems; + version = "0.0.3"; + forgejoBaseUrl = "https://git.methanium.net/tensamin/client/releases/download/${version}"; + in { + packages = forAllSystems (system: let + pkgs = import nixpkgs {inherit system;}; + artifact = if system == "aarch64-linux" then "Tensamin-${version}-linux-arm64.AppImage" else "Tensamin-${version}-linux-x86_64.AppImage"; + + appImagePath = /. + builtins.getEnv "TENSAMIN_APPIMAGE"; + in { + default = pkgs.appimageTools.wrapType2 { + pname = "tensamin"; + inherit version; + src = pkgs.fetchurl { + url = "${forgejoBaseUrl}/${artifact}"; + hash = "sha256-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA="; + }; + }; + + localPathForDev = pkgs.appimageTools.wrapType2 { + pname = "tensamin"; + inherit version; + + src = appImagePath; + }; + }); + }; +} diff --git a/package.json b/package.json index d408353..d15bfcf 100644 --- a/package.json +++ b/package.json @@ -21,8 +21,9 @@ "preview:web": "cd apps/web && bun run preview", "dev:mobile": "cd apps/tauri && bun dev:mobile", "build:mobile": "cd apps/tauri && bun run build:mobile", - "dev:desktop": "cd apps/tauri && bun dev:desktop", - "build:desktop": "cd apps/tauri && bun run build:desktop", + "dev:desktop": "cd apps/electron && bun run dev", + "build:desktop": "cd apps/electron && bun run package", + "run:desktop": "TENSAMIN_APPIMAGE=\"$PWD/apps/electron/release/Tensamin-0.0.3-linux-x86_64.AppImage\" nix run .#localPathForDev --impure", "delete:mobile": "cd apps/tauri && nix develop --command adb uninstall net.tensamin.client" }, "devDependencies": { @@ -40,7 +41,7 @@ "jsonc-parser": "^3.3.1" }, "overrides": { - "@tensamin/ui": "https://git.methanium.net/tensamin/ui/archive/0.0.34.tar.gz", + "@tensamin/ui": "https://git.methanium.net/tensamin/ui/archive/0.0.36.tar.gz", "@tensamin/ttp-core": "https://git.methanium.net/tensamin/ttp/archive/0.0.19.tar.gz" }, "dependencies": { diff --git a/packages/call/src/components/screenshareDialog.tsx b/packages/call/src/components/screenshareDialog.tsx index 180c63e..03ce110 100644 --- a/packages/call/src/components/screenshareDialog.tsx +++ b/packages/call/src/components/screenshareDialog.tsx @@ -20,7 +20,7 @@ import { type DesktopScreenShareCapabilities, type DesktopScreenShareSource, useDesktopMedia, -} from "@tensamin/tauri/context"; +} from "@tensamin/shared/desktopMedia"; import { toast } from "@tensamin/shared/log"; import { AppWindow, Loader2, MonitorUp } from "lucide-react"; import type { ScreenShareCaptureOptions } from "livekit-client"; @@ -150,7 +150,9 @@ export default function ScreenShareDialog({ setLoading(true); try { - if (capabilities.platform === "linux") { + if (capabilities.runtime === "electron") { + await startLinuxDesktopScreenShare(selectedSource.id); + } else if (capabilities.platform === "linux") { await startLinuxDesktopScreenShare(selectedSource.id); } else { await setScreenShareEnabled( diff --git a/packages/call/src/screenshare.ts b/packages/call/src/screenshare.ts index 21b8b71..8911a71 100644 --- a/packages/call/src/screenshare.ts +++ b/packages/call/src/screenshare.ts @@ -1,4 +1,3 @@ -import { invoke } from "@tauri-apps/api/core"; import { log } from "@tensamin/shared/log"; import { type LocalTrack, @@ -22,6 +21,39 @@ type ScreenShareStoreSetState = ( | ((state: ScreenShareStoreState) => Partial), ) => void; +declare global { + interface Window { + tensaminDesktop?: { + media?: { + getScreenShareCapabilities?: () => Promise<{ + runtime?: "electron" | "tauri"; + platform: "linux" | "macos" | "windows" | "other"; + showAudioOutputSelector: boolean; + showAudioSwitch: boolean; + hasReliableSystemAudio: boolean; + }>; + listScreenShareSources?: () => Promise< + Array<{ + id: string; + kind: "screen" | "window"; + name: string; + subtitle?: string | null; + thumbnail?: string | null; + }> + >; + listScreenShareAudioOutputs?: () => Promise< + Array<{ + id: string; + name: string; + isDefault: boolean; + }> + >; + selectScreenShareSource?: (sourceId: string) => Promise; + }; + }; + } +} + type ScreenShareControllerOptions = { room: Room; getState: () => ScreenShareStoreState; @@ -128,84 +160,26 @@ export function createScreenShareController({ async function startLinuxDesktopScreenShare(sourceId: string) { await clearPublishedScreenShare(); - const canvas = document.createElement("canvas"); - canvas.width = 1280; - canvas.height = 720; - canvas.style.display = "none"; - document.body.appendChild(canvas); - - const context = canvas.getContext("2d"); - - if (!context) { - canvas.remove(); - throw new Error("Failed to initialize the screen share canvas."); - } - - const stream = canvas.captureStream(8); - const videoTrack = stream.getVideoTracks()[0]; - - if (!videoTrack) { - canvas.remove(); - throw new Error("Failed to create a video track for screen sharing."); - } - - const image = new Image(); - let stopped = false; - let frameRequestInFlight = false; - - const renderFrame = async () => { - if (stopped || frameRequestInFlight) { - return; - } - - frameRequestInFlight = true; - - try { - const dataUrl = await invoke("capture_screen_share_frame", { - sourceId, - }); - - await new Promise((resolve, reject) => { - image.onload = () => resolve(); - image.onerror = () => - reject(new Error("Failed to decode screen share frame.")); - image.src = dataUrl; - }); - - if ( - canvas.width !== image.naturalWidth || - canvas.height !== image.naturalHeight - ) { - canvas.width = image.naturalWidth; - canvas.height = image.naturalHeight; - } - - context.drawImage(image, 0, 0, canvas.width, canvas.height); - } finally { - frameRequestInFlight = false; - } - }; - - await renderFrame(); - - const interval = window.setInterval(() => { - void renderFrame().catch((error) => { - log( - 1, - "call", - "red", - "Failed to capture Linux screen share frame", - error, - ); + if (window.tensaminDesktop?.media?.selectScreenShareSource) { + await window.tensaminDesktop.media.selectScreenShareSource(sourceId); + const tracks = await room.localParticipant.createScreenTracks({ + audio: false, + video: true, + systemAudio: "exclude", + surfaceSwitching: "exclude", + selfBrowserSurface: "exclude", + contentHint: "detail", }); - }, 125); - await publishScreenShareTracks([videoTrack], () => { - stopped = true; - window.clearInterval(interval); - stream.getTracks().forEach((track) => track.stop()); - canvas.remove(); - }); + await publishScreenShareTracks(tracks, () => { + tracks.forEach((track) => track.stop()); + }); + return; + } + + throw new Error( + `Electron desktop media bridge is unavailable. Cannot capture ${sourceId}.`, + ); } async function stopScreenShare() { diff --git a/packages/call/src/store.tsx b/packages/call/src/store.tsx index 5398e70..0d28c61 100644 --- a/packages/call/src/store.tsx +++ b/packages/call/src/store.tsx @@ -741,6 +741,14 @@ let screenShareController: ReturnType< typeof createScreenShareController > | null = null; +function getNoiseFilterAssetBaseUrl() { + if (window.location.protocol === "file:") { + return new URL("./assets", document.baseURI).href.replace(/\/$/, ""); + } + + return "/assets"; +} + function getScreenShareController() { if (!screenShareController) { screenShareController = createScreenShareController({ @@ -1086,7 +1094,7 @@ export function useInitializeCall() { noiseReductionLevel: 60, sampleRate: 48000, assetConfig: { - cdnUrl: "/assets", + cdnUrl: getNoiseFilterAssetBaseUrl(), }, }), [], diff --git a/packages/call/todo.md b/packages/call/todo.md index 4db4db0..2d8db1b 100644 --- a/packages/call/todo.md +++ b/packages/call/todo.md @@ -8,6 +8,6 @@ - Admin call actions - Timeout - Disconnect -- Desktop-App screenshares - Context menus - Popout Window +- Add quality selection diff --git a/packages/shared/package.json b/packages/shared/package.json index ab2ea1b..c009c34 100644 --- a/packages/shared/package.json +++ b/packages/shared/package.json @@ -5,6 +5,7 @@ "type": "module", "exports": { "./data": "./src/data.ts", + "./desktopMedia": "./src/desktopMedia.tsx", "./log": "./src/log.tsx", "./settings": "./src/settings.ts", "./features/legal/schema": "./src/features/legal/schema.ts", diff --git a/apps/tauri/src/context.tsx b/packages/shared/src/desktopMedia.tsx similarity index 63% rename from apps/tauri/src/context.tsx rename to packages/shared/src/desktopMedia.tsx index 7d86f00..d117716 100644 --- a/apps/tauri/src/context.tsx +++ b/packages/shared/src/desktopMedia.tsx @@ -1,11 +1,11 @@ import { createContext, useContext, useMemo, type ReactNode } from "react"; -import { invoke, isTauri } from "@tauri-apps/api/core"; export type DesktopScreenShareSource = { id: string; kind: "screen" | "window"; name: string; subtitle?: string | null; + thumbnail?: string | null; }; export type DesktopScreenShareAudioOutput = { @@ -15,12 +15,28 @@ export type DesktopScreenShareAudioOutput = { }; export type DesktopScreenShareCapabilities = { + runtime?: "electron" | "tauri"; platform: "linux" | "macos" | "windows" | "other"; showAudioOutputSelector: boolean; showAudioSwitch: boolean; hasReliableSystemAudio: boolean; }; +type ElectronDesktopApi = { + media?: { + getScreenShareCapabilities?: () => Promise; + listScreenShareSources?: () => Promise; + listScreenShareAudioOutputs?: () => Promise; + selectScreenShareSource?: (sourceId: string) => Promise; + }; +}; + +declare global { + interface Window { + tensaminDesktop?: ElectronDesktopApi; + } +} + type DesktopMediaContextValue = { getScreenShareCapabilities: () => Promise; listScreenShareSources: () => Promise; @@ -28,6 +44,7 @@ type DesktopMediaContextValue = { }; const defaultCapabilities: DesktopScreenShareCapabilities = { + runtime: undefined, platform: "other", showAudioOutputSelector: false, showAudioSwitch: false, @@ -39,33 +56,29 @@ const desktopMediaContext = createContext( ); async function listScreenShareSources(): Promise { - if (!isTauri()) { - return []; + if (window.tensaminDesktop?.media?.listScreenShareSources) { + return window.tensaminDesktop.media.listScreenShareSources(); } - return invoke("list_screen_share_sources"); + return []; } async function listScreenShareAudioOutputs(): Promise< DesktopScreenShareAudioOutput[] > { - if (!isTauri()) { - return []; + if (window.tensaminDesktop?.media?.listScreenShareAudioOutputs) { + return window.tensaminDesktop.media.listScreenShareAudioOutputs(); } - return invoke( - "list_screen_share_audio_outputs", - ); + return []; } async function getScreenShareCapabilities(): Promise { - if (!isTauri()) { - return defaultCapabilities; + if (window.tensaminDesktop?.media?.getScreenShareCapabilities) { + return window.tensaminDesktop.media.getScreenShareCapabilities(); } - return invoke( - "get_screen_share_capabilities", - ); + return defaultCapabilities; } export function useDesktopMedia() { @@ -78,7 +91,11 @@ export function useDesktopMedia() { return value; } -export default function Provider({ children }: { children: ReactNode }) { +export default function DesktopMediaProvider({ + children, +}: { + children: ReactNode; +}) { const value = useMemo( () => ({ getScreenShareCapabilities, diff --git a/scripts/copy-releases.ts b/scripts/copy-releases.ts index e840169..3df2718 100644 --- a/scripts/copy-releases.ts +++ b/scripts/copy-releases.ts @@ -1,4 +1,6 @@ import { + copyFileSync, + createReadStream, existsSync, mkdirSync, readdirSync, @@ -6,11 +8,37 @@ import { rmSync, statSync, } from "node:fs"; +import { createHash } from "node:crypto"; import { join } from "node:path"; import packageJson from "../package.json" with { type: "json" }; const { version } = packageJson; const releasesDir = join("releases"); +const releaseAssetBaseUrl = process.env.FORGEJO_RELEASE_ASSET_BASE_URL; + +function sha256(filePath: string) { + const hash = createHash("sha256"); + const stream = createReadStream(filePath); + + return new Promise((resolve, reject) => { + stream.on("data", (chunk) => hash.update(chunk)); + stream.on("error", reject); + stream.on("end", () => resolve(hash.digest("hex"))); + }); +} + +function platformFor(file: string) { + if (/\.apk$/i.test(file)) return "android"; + if (/win|nsis|portable|\.exe$/i.test(file)) return "windows"; + if (/mac|darwin|\.dmg$/i.test(file)) return "macos"; + return "linux"; +} + +function archFor(file: string) { + if (/arm64|aarch64/i.test(file)) return "arm64"; + if (/\.apk$/i.test(file)) return "universal"; + return "x64"; +} // directory rmSync(releasesDir, { recursive: true, force: true }); @@ -25,56 +53,56 @@ if (existsSync(apkSrc)) { console.warn(`Skipping .apk: ${apkSrc} does not exist.`); } -// deb & rpm -const debDir = "apps/tauri/src-tauri/target/release/bundle/deb"; -const rpmDir = "apps/tauri/src-tauri/target/release/bundle/rpm"; +// Electron desktop artifacts +const electronReleaseDir = "apps/electron/release"; -const moveBundleArtifact = ( - sourceDir: string, - extension: ".deb" | ".rpm", - destinationFileName: string, -) => { - if (!existsSync(sourceDir)) { - console.warn(`Skipping ${extension}: ${sourceDir} does not exist.`); +const copyElectronArtifacts = () => { + if (!existsSync(electronReleaseDir)) { + console.warn(`Skipping Electron artifacts: ${electronReleaseDir} does not exist.`); return; } - const candidates = readdirSync(sourceDir) - .filter((file) => file.endsWith(extension)) - .map((file) => { - const filePath = join(sourceDir, file); + for (const file of readdirSync(electronReleaseDir)) { + if (file.endsWith(".blockmap") || file.endsWith(".yml")) continue; + if (!file.includes(version)) continue; - return { - file, - filePath, - matchesVersion: file.includes(version), - modifiedAt: statSync(filePath).mtimeMs, - }; - }) - .sort((a, b) => { - if (a.matchesVersion !== b.matchesVersion) { - return Number(b.matchesVersion) - Number(a.matchesVersion); - } + const source = join(electronReleaseDir, file); + if (!statSync(source).isFile()) continue; - return b.modifiedAt - a.modifiedAt; - }); - - const selected = candidates[0]; - if (!selected) { - console.warn(`Skipping ${extension}: no files found in ${sourceDir}.`); - return; + copyFileSync(source, join(releasesDir, file)); } - - if (!selected.matchesVersion) { - console.warn( - `Using ${selected.file} for ${extension} even though it does not include version ${version}.`, - ); - } - - renameSync(selected.filePath, join(releasesDir, destinationFileName)); }; -moveBundleArtifact(debDir, ".deb", `Tensamin-${version}.deb`); -moveBundleArtifact(rpmDir, ".rpm", `Tensamin-${version}.rpm`); +copyElectronArtifacts(); + +const artifacts = await Promise.all( + readdirSync(releasesDir) + .map((file) => join(releasesDir, file)) + .filter((file) => statSync(file).isFile()) + .filter((file) => !file.endsWith("electron-release-metadata.json") && !file.endsWith("SHA256SUMS")) + .map(async (filePath) => { + const name = filePath.split(/[\\/]/).at(-1)!; + + return { + name, + platform: platformFor(name), + arch: archFor(name), + url: releaseAssetBaseUrl + ? `${releaseAssetBaseUrl.replace(/\/$/, "")}/${encodeURIComponent(name)}` + : `__FORGEJO_RELEASE_ASSET_URL__/${encodeURIComponent(name)}`, + sha256: await sha256(filePath), + size: statSync(filePath).size, + }; + }), +); + +await Bun.write( + join(releasesDir, "electron-release-metadata.json"), + `${JSON.stringify({ version, tag: version, publishedAt: new Date().toISOString(), artifacts: artifacts.filter((artifact) => artifact.platform !== "android") }, null, 2)}\n`, +); +await Bun.write( + join(releasesDir, "SHA256SUMS"), + `${artifacts.map((artifact) => `${artifact.sha256} ${artifact.name}`).join("\n")}\n`, +); console.log("Releases copied successfully."); From e146ae27107aec32a2ad70f84d1ac3dccbbdd716 Mon Sep 17 00:00:00 2001 From: Alois Date: Mon, 25 May 2026 13:20:50 +0200 Subject: [PATCH 12/13] (fix): rpm builds in workflow --- .forgejo/workflows/deploy-dev.yml | 2 +- .forgejo/workflows/deploy-prod.yml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.forgejo/workflows/deploy-dev.yml b/.forgejo/workflows/deploy-dev.yml index 8bb04f7..41d03e1 100644 --- a/.forgejo/workflows/deploy-dev.yml +++ b/.forgejo/workflows/deploy-dev.yml @@ -90,7 +90,7 @@ jobs: uses: https://data.forgejo.org/actions/checkout@v4 - name: Install Packages - run: apt-get update && apt-get install -y sudo curl jq + run: apt-get update && apt-get install -y sudo curl jq fakeroot dpkg rpm xz-utils - name: Install Bun uses: oven-sh/setup-bun@v2 diff --git a/.forgejo/workflows/deploy-prod.yml b/.forgejo/workflows/deploy-prod.yml index c0adb6f..95641f1 100644 --- a/.forgejo/workflows/deploy-prod.yml +++ b/.forgejo/workflows/deploy-prod.yml @@ -90,7 +90,7 @@ jobs: uses: https://data.forgejo.org/actions/checkout@v4 - name: Install Packages - run: apt-get update && apt-get install -y sudo curl jq + run: apt-get update && apt-get install -y sudo curl jq fakeroot dpkg rpm xz-utils - name: Install Bun uses: oven-sh/setup-bun@v2 From 2440fedaadcaa20a2cc75f36738f1fe04aab2253 Mon Sep 17 00:00:00 2001 From: Alois Date: Mon, 25 May 2026 14:05:20 +0200 Subject: [PATCH 13/13] (feat): add auto update for dev builds on dev builds --- .forgejo/workflows/deploy-dev.yml | 27 ++++++++++++++++++++++++--- .forgejo/workflows/deploy-prod.yml | 25 ++++++++++++++++++++++--- apps/electron/src/main/updates.ts | 21 +++++++++++++++++++++ scripts/copy-releases.ts | 6 ++++-- 4 files changed, 71 insertions(+), 8 deletions(-) diff --git a/.forgejo/workflows/deploy-dev.yml b/.forgejo/workflows/deploy-dev.yml index 41d03e1..36c5efe 100644 --- a/.forgejo/workflows/deploy-dev.yml +++ b/.forgejo/workflows/deploy-dev.yml @@ -104,6 +104,20 @@ jobs: - name: Build packages run: bun run build:packages + - name: Set Electron dev version + run: | + VERSION="$(node -p "require('./package.json').version")" + SHORT_SHA="$(git rev-parse --short HEAD)" + DEV_VERSION="$VERSION-dev-$SHORT_SHA" + export DEV_VERSION + node -e ' + const fs = require("fs"); + const path = "apps/electron/package.json"; + const pkg = JSON.parse(fs.readFileSync(path, "utf8")); + pkg.version = process.env.DEV_VERSION; + fs.writeFileSync(path, JSON.stringify(pkg, null, 2) + "\n"); + ' + - name: Build Electron desktop run: bun run build:desktop @@ -143,9 +157,6 @@ jobs: name: electron-desktop-linux path: apps/electron/release/ - - name: Copy releases - run: bun --bun run copy-releases - - name: Read version and hash id: version run: | @@ -156,6 +167,15 @@ jobs: echo "tag=${VERSION}-dev-${SHORT_SHA}" >> "$FORGEJO_OUTPUT" echo "title=${VERSION}-dev-${SHORT_SHA}" >> "$FORGEJO_OUTPUT" + - name: Copy releases + env: + TENSAMIN_RELEASE_VERSION: ${{ steps.version.outputs.tag }} + TENSAMIN_RELEASE_TAG: ${{ steps.version.outputs.tag }} + run: | + ASSET_BASE_URL="${{ forgejo.api_url }}" + ASSET_BASE_URL="${ASSET_BASE_URL%/api/v1}/${{ forgejo.repository }}/releases/download/${{ steps.version.outputs.tag }}" + FORGEJO_RELEASE_ASSET_BASE_URL="$ASSET_BASE_URL" bun --bun run copy-releases + - name: Create pre-release and upload files env: TOKEN: ${{ forgejo.token }} @@ -239,6 +259,7 @@ jobs: const fs = require("fs"); const path = "releases/electron-release-metadata.json"; const metadata = JSON.parse(fs.readFileSync(path, "utf8")); + metadata.version = process.env.TAG; metadata.tag = process.env.TAG; for (const artifact of metadata.artifacts || []) { artifact.url = `${process.env.ASSET_BASE_URL}/${encodeURIComponent(artifact.name)}`; diff --git a/.forgejo/workflows/deploy-prod.yml b/.forgejo/workflows/deploy-prod.yml index 95641f1..bc086d6 100644 --- a/.forgejo/workflows/deploy-prod.yml +++ b/.forgejo/workflows/deploy-prod.yml @@ -104,6 +104,18 @@ jobs: - name: Build packages run: bun run build:packages + - name: Set Electron prod version + run: | + VERSION="$(node -p "require('./package.json').version")" + export VERSION + node -e ' + const fs = require("fs"); + const path = "apps/electron/package.json"; + const pkg = JSON.parse(fs.readFileSync(path, "utf8")); + pkg.version = process.env.VERSION; + fs.writeFileSync(path, JSON.stringify(pkg, null, 2) + "\n"); + ' + - name: Build Electron desktop run: bun run build:desktop @@ -141,9 +153,6 @@ jobs: name: electron-desktop-linux path: apps/electron/release/ - - name: Copy releases - run: bun --bun run copy-releases - - name: Read version id: version run: | @@ -151,6 +160,15 @@ jobs: echo "version=$VERSION" >> "$FORGEJO_OUTPUT" echo "tag=$VERSION" >> "$FORGEJO_OUTPUT" + - name: Copy releases + env: + TENSAMIN_RELEASE_VERSION: ${{ steps.version.outputs.tag }} + TENSAMIN_RELEASE_TAG: ${{ steps.version.outputs.tag }} + run: | + ASSET_BASE_URL="${{ forgejo.api_url }}" + ASSET_BASE_URL="${ASSET_BASE_URL%/api/v1}/${{ forgejo.repository }}/releases/download/${{ steps.version.outputs.tag }}" + FORGEJO_RELEASE_ASSET_BASE_URL="$ASSET_BASE_URL" bun --bun run copy-releases + - name: Create release and upload files env: TOKEN: ${{ forgejo.token }} @@ -198,6 +216,7 @@ jobs: const fs = require("fs"); const path = "releases/electron-release-metadata.json"; const metadata = JSON.parse(fs.readFileSync(path, "utf8")); + metadata.version = process.env.TAG; metadata.tag = process.env.TAG; for (const artifact of metadata.artifacts || []) { artifact.url = `${process.env.ASSET_BASE_URL}/${encodeURIComponent(artifact.name)}`; diff --git a/apps/electron/src/main/updates.ts b/apps/electron/src/main/updates.ts index 982d191..7386118 100644 --- a/apps/electron/src/main/updates.ts +++ b/apps/electron/src/main/updates.ts @@ -20,6 +20,10 @@ function compareSemver(left: string, right: string) { return 0; } +function isDevVersion(version: string) { + return /-dev[.-]/.test(version); +} + function platformName() { if (process.platform === "win32") return "windows"; if (process.platform === "darwin") return "macos"; @@ -101,6 +105,23 @@ export async function checkForUpdates(): Promise { const metadata = JSON.parse(await requestText(metadataUrl)) as ReleaseMetadata; const artifact = selectArtifact(metadata); + if (isDevVersion(metadata.version) !== isDevVersion(currentVersion)) { + return { available: false, currentVersion, latestVersion: metadata.version }; + } + + if (isDevVersion(currentVersion)) { + if (!artifact || metadata.version === currentVersion) { + return { available: false, currentVersion, latestVersion: metadata.version }; + } + + return { + available: true, + currentVersion, + latestVersion: metadata.version, + artifact, + }; + } + if (!artifact || compareSemver(metadata.version, currentVersion) <= 0) { return { available: false, currentVersion, latestVersion: metadata.version }; } diff --git a/scripts/copy-releases.ts b/scripts/copy-releases.ts index 3df2718..3b0eeec 100644 --- a/scripts/copy-releases.ts +++ b/scripts/copy-releases.ts @@ -13,6 +13,8 @@ import { join } from "node:path"; import packageJson from "../package.json" with { type: "json" }; const { version } = packageJson; +const releaseVersion = process.env.TENSAMIN_RELEASE_VERSION || version; +const releaseTag = process.env.TENSAMIN_RELEASE_TAG || releaseVersion; const releasesDir = join("releases"); const releaseAssetBaseUrl = process.env.FORGEJO_RELEASE_ASSET_BASE_URL; @@ -64,7 +66,7 @@ const copyElectronArtifacts = () => { for (const file of readdirSync(electronReleaseDir)) { if (file.endsWith(".blockmap") || file.endsWith(".yml")) continue; - if (!file.includes(version)) continue; + if (!file.includes(version) && !file.includes(releaseVersion)) continue; const source = join(electronReleaseDir, file); if (!statSync(source).isFile()) continue; @@ -98,7 +100,7 @@ const artifacts = await Promise.all( await Bun.write( join(releasesDir, "electron-release-metadata.json"), - `${JSON.stringify({ version, tag: version, publishedAt: new Date().toISOString(), artifacts: artifacts.filter((artifact) => artifact.platform !== "android") }, null, 2)}\n`, + `${JSON.stringify({ version: releaseVersion, tag: releaseTag, publishedAt: new Date().toISOString(), artifacts: artifacts.filter((artifact) => artifact.platform !== "android") }, null, 2)}\n`, ); await Bun.write( join(releasesDir, "SHA256SUMS"),