diff --git a/.editorconfig b/.archive/.editorconfig similarity index 100% rename from .editorconfig rename to .archive/.editorconfig diff --git a/.archive/.env b/.archive/.env new file mode 100644 index 0000000..41d8b01 --- /dev/null +++ b/.archive/.env @@ -0,0 +1 @@ +INTERNAL_SERVICE_PATH = "/Users/kyletennison/Avarok/citadel-internal-service" \ No newline at end of file diff --git a/.env.sample b/.archive/.env.sample similarity index 100% rename from .env.sample rename to .archive/.env.sample diff --git a/.eslintrc b/.archive/.eslintrc similarity index 100% rename from .eslintrc rename to .archive/.eslintrc diff --git a/.archive/.gitignore b/.archive/.gitignore new file mode 100644 index 0000000..52b2338 --- /dev/null +++ b/.archive/.gitignore @@ -0,0 +1,41 @@ +# Logs +logs +*.log +npm-debug.log* +yarn-debug.log* +yarn-error.log* +pnpm-debug.log* +lerna-debug.log* + +node_modules/ +out/ +dist/ +dist-ssr +*.local +target/ +debug/ + +# These are backup files generated by rustfmt +**/*.rs.bk + +# MSVC Windows builds of rustc generate these, which store debugging information +*.pdb + +/.next/ +./next-env.d.ts +# Editor directories and files +.vscode/ +!.vscode/extensions.json +.idea +.DS_Store +*.suo +*.ntvs* +*.njsproj +*.sln +*.sw? +src-tauri/gen +src-tauri/target +package-lock.json +yarn.lock +src-tauri/Cargo.lock +bun.lockb diff --git a/.prettierrc b/.archive/.prettierrc similarity index 100% rename from .prettierrc rename to .archive/.prettierrc diff --git a/.storybook/main.ts b/.archive/.storybook/main.ts similarity index 100% rename from .storybook/main.ts rename to .archive/.storybook/main.ts diff --git a/.storybook/preview-head.html b/.archive/.storybook/preview-head.html similarity index 100% rename from .storybook/preview-head.html rename to .archive/.storybook/preview-head.html diff --git a/.storybook/preview.ts b/.archive/.storybook/preview.ts similarity index 100% rename from .storybook/preview.ts rename to .archive/.storybook/preview.ts diff --git a/CODEOWNERS b/.archive/CODEOWNERS similarity index 100% rename from CODEOWNERS rename to .archive/CODEOWNERS diff --git a/Cargo.lock b/.archive/Cargo.lock similarity index 100% rename from Cargo.lock rename to .archive/Cargo.lock diff --git a/Cargo.toml b/.archive/Cargo.toml similarity index 100% rename from Cargo.toml rename to .archive/Cargo.toml diff --git a/Makefile.toml b/.archive/Makefile.toml similarity index 100% rename from Makefile.toml rename to .archive/Makefile.toml diff --git a/.archive/README.md b/.archive/README.md new file mode 100644 index 0000000..6a3d5d9 --- /dev/null +++ b/.archive/README.md @@ -0,0 +1,27 @@ +# Citadel Workspace + +When it comes to virtual workspace security, don't slack. + +Citadel Workspace is a highly cryptographically post-quantum secure work environment for individuals, businesses, and government. By using The Citadel Protocol, a protocol far more secure and adjustable than Signal and other projects, Citadel Workspace technologically stands out. Whether used for casual messaging and/or transferring highly sensitive material (whether through messages or file transfers), Citadel Workspace allows additional layers of encryption to be seamlessly added. Additionally, Citadel Workspaces allows for optional per-message re-keying, the option of pre-shared keys, and much, much more. + +All code is free and 100% open-source. + +### Manual Install + +Install `cargo install create-tauri-app` + +Run `cargo install tauri-cli --version 2.0.0-beta.1` + +Install Bun JS runtime dependencies `curl -fsSL https://bun.sh/install | bash` + +Install JS dependencies `bun install` + +### Running + +Running the app from vscode's terminal can lead to an error, try running from your system terminal. + +Run the desktop app with `cargo tauri dev` + +Run the web app with `bun run dev` + +Run Storybook server with `bun run sb` diff --git a/common/types/c2sResponses.ts b/.archive/common/types/c2sResponses.ts similarity index 100% rename from common/types/c2sResponses.ts rename to .archive/common/types/c2sResponses.ts diff --git a/common/types/errors.ts b/.archive/common/types/errors.ts similarity index 100% rename from common/types/errors.ts rename to .archive/common/types/errors.ts diff --git a/common/types/p2pResponses.ts b/.archive/common/types/p2pResponses.ts similarity index 100% rename from common/types/p2pResponses.ts rename to .archive/common/types/p2pResponses.ts diff --git a/components.json b/.archive/components.json similarity index 99% rename from components.json rename to .archive/components.json index 9f3a7c6..f8fc63d 100644 --- a/components.json +++ b/.archive/components.json @@ -12,4 +12,4 @@ "components": "@/components", "utils": "@/lib/utils" } -} \ No newline at end of file +} diff --git a/components/chat/Chat.stories.tsx b/.archive/components/chat/Chat.stories.tsx similarity index 100% rename from components/chat/Chat.stories.tsx rename to .archive/components/chat/Chat.stories.tsx diff --git a/components/chat/Chat.tsx b/.archive/components/chat/Chat.tsx similarity index 100% rename from components/chat/Chat.tsx rename to .archive/components/chat/Chat.tsx diff --git a/components/chat/index.ts b/.archive/components/chat/index.ts similarity index 100% rename from components/chat/index.ts rename to .archive/components/chat/index.ts diff --git a/components/common/Layout/Layout.stories.tsx b/.archive/components/common/Layout/Layout.stories.tsx similarity index 100% rename from components/common/Layout/Layout.stories.tsx rename to .archive/components/common/Layout/Layout.stories.tsx diff --git a/components/common/Layout/Layout.tsx b/.archive/components/common/Layout/Layout.tsx similarity index 98% rename from components/common/Layout/Layout.tsx rename to .archive/components/common/Layout/Layout.tsx index 5f7e45b..4cd9837 100644 --- a/components/common/Layout/Layout.tsx +++ b/.archive/components/common/Layout/Layout.tsx @@ -30,7 +30,7 @@ export const Layout = ({ children }: Props) => { const [addServerOpen, setAddServerOpen] = useState(false); const [peerToConnect, setPeerToConnect] = useState(''); const currentUsedSessionCid: string = useAppSelector( - (state) => state.context.sessions.current_used_session_server + (state) => state.context.sessions.current_used_session_server, ); const [navigation, _] = useState([ @@ -43,11 +43,11 @@ export const Layout = ({ children }: Props) => { ]); const current_sessions = useAppSelector( - (state) => state.context.sessions.current_sessions + (state) => state.context.sessions.current_sessions, ); const connectedPeers = useAppSelector( - (state) => state.context.sessions.connectedPeers + (state) => state.context.sessions.connectedPeers, ); const peers = current_sessions[currentUsedSessionCid] ?? {}; @@ -138,7 +138,7 @@ export const Layout = ({ children }: Props) => { item.current ? 'bg-gray-800 text-white' : 'text-gray-400 hover:text-white hover:bg-gray-800', - 'group flex gap-x-3 rounded-md p-2 text-sm leading-6 font-semibold' + 'group flex gap-x-3 rounded-md p-2 text-sm leading-6 font-semibold', )} > { team.current ? 'bg-gray-800 text-white' : 'text-gray-400 hover:text-white hover:bg-gray-800', - 'group flex gap-x-3 rounded-md p-2 text-sm leading-6 font-semibold' + 'group flex gap-x-3 rounded-md p-2 text-sm leading-6 font-semibold', )} > @@ -198,7 +198,7 @@ export const Layout = ({ children }: Props) => { key ? 'bg-gray-800 text-white' : 'text-gray-400 hover:text-white hover:bg-gray-800', - 'group flex gap-x-3 rounded-md p-2 text-sm leading-6 font-semibold' + 'group flex gap-x-3 rounded-md p-2 text-sm leading-6 font-semibold', )} > @@ -260,7 +260,7 @@ export const Layout = ({ children }: Props) => { @@ -295,7 +295,7 @@ export const Layout = ({ children }: Props) => { > All Peers @@ -308,7 +308,7 @@ export const Layout = ({ children }: Props) => { > Registered @@ -336,7 +336,7 @@ export const Layout = ({ children }: Props) => { key ? 'bg-gray-800 text-white' : 'text-gray-400 hover:text-white hover:bg-gray-800', - 'group flex gap-x-3 rounded-md p-2 text-sm leading-6 font-semibold' + 'group flex gap-x-3 rounded-md p-2 text-sm leading-6 font-semibold', )} > @@ -371,7 +371,7 @@ export const Layout = ({ children }: Props) => { key ? 'bg-gray-800 text-white' : 'text-gray-400 hover:text-white hover:bg-gray-800', - 'group flex gap-x-3 rounded-md p-2 text-sm leading-6 font-semibold' + 'group flex gap-x-3 rounded-md p-2 text-sm leading-6 font-semibold', )} > diff --git a/components/common/Layout/index.ts b/.archive/components/common/Layout/index.ts similarity index 100% rename from components/common/Layout/index.ts rename to .archive/components/common/Layout/index.ts diff --git a/components/ui/AddServer.tsx b/.archive/components/ui/AddServer.tsx similarity index 100% rename from components/ui/AddServer.tsx rename to .archive/components/ui/AddServer.tsx diff --git a/components/ui/context.tsx b/.archive/components/ui/context.tsx similarity index 100% rename from components/ui/context.tsx rename to .archive/components/ui/context.tsx diff --git a/components/ui/grid/Column.tsx b/.archive/components/ui/grid/Column.tsx similarity index 100% rename from components/ui/grid/Column.tsx rename to .archive/components/ui/grid/Column.tsx diff --git a/components/ui/grid/Container.tsx b/.archive/components/ui/grid/Container.tsx similarity index 100% rename from components/ui/grid/Container.tsx rename to .archive/components/ui/grid/Container.tsx diff --git a/components/ui/grid/Row.tsx b/.archive/components/ui/grid/Row.tsx similarity index 100% rename from components/ui/grid/Row.tsx rename to .archive/components/ui/grid/Row.tsx diff --git a/components/ui/grid/grid.stories.tsx b/.archive/components/ui/grid/grid.stories.tsx similarity index 100% rename from components/ui/grid/grid.stories.tsx rename to .archive/components/ui/grid/grid.stories.tsx diff --git a/components/ui/grid/index.ts b/.archive/components/ui/grid/index.ts similarity index 100% rename from components/ui/grid/index.ts rename to .archive/components/ui/grid/index.ts diff --git a/components/ui/index.ts b/.archive/components/ui/index.ts similarity index 100% rename from components/ui/index.ts rename to .archive/components/ui/index.ts diff --git a/components/ui/serverAvatar.tsx b/.archive/components/ui/serverAvatar.tsx similarity index 100% rename from components/ui/serverAvatar.tsx rename to .archive/components/ui/serverAvatar.tsx diff --git a/components/ui/workspacesBar/WorkspaceBar.stories.tsx b/.archive/components/ui/workspacesBar/WorkspaceBar.stories.tsx similarity index 100% rename from components/ui/workspacesBar/WorkspaceBar.stories.tsx rename to .archive/components/ui/workspacesBar/WorkspaceBar.stories.tsx diff --git a/components/ui/workspacesBar/WorkspaceBar.tsx b/.archive/components/ui/workspacesBar/WorkspaceBar.tsx similarity index 98% rename from components/ui/workspacesBar/WorkspaceBar.tsx rename to .archive/components/ui/workspacesBar/WorkspaceBar.tsx index ccb2af8..0fc011d 100644 --- a/components/ui/workspacesBar/WorkspaceBar.tsx +++ b/.archive/components/ui/workspacesBar/WorkspaceBar.tsx @@ -14,15 +14,15 @@ function WorkspaceBar({ setAddServerOpener: React.Dispatch>; }) { const sessions = useAppSelector( - (state: RootState) => state.context.sessions.current_sessions + (state: RootState) => state.context.sessions.current_sessions, ); const currentSessionInUse = useAppSelector( - (state) => state.context.sessions.current_used_session_server + (state) => state.context.sessions.current_used_session_server, ); const currentNotification = useAppSelector( - (state) => state.notificationsContext + (state) => state.notificationsContext, ); const dispatch = useAppDispatch(); @@ -48,7 +48,7 @@ function WorkspaceBar({ key={key} className={clsx( currentSessionInUse === key && 'bg-slate-300', - 'rounded' + 'rounded', )} > ); - } + }, )} diff --git a/components/ui/workspacesBar/index.ts b/.archive/components/ui/workspacesBar/index.ts similarity index 100% rename from components/ui/workspacesBar/index.ts rename to .archive/components/ui/workspacesBar/index.ts diff --git a/hooks/c2s/useC2SConnect.ts b/.archive/hooks/c2s/useC2SConnect.ts similarity index 96% rename from hooks/c2s/useC2SConnect.ts rename to .archive/hooks/c2s/useC2SConnect.ts index 16dc801..8c87844 100644 --- a/hooks/c2s/useC2SConnect.ts +++ b/.archive/hooks/c2s/useC2SConnect.ts @@ -11,13 +11,13 @@ export type RegisterAndConnectInput = { export const serverConnect = async (input: RegisterAndConnectInput) => { const response = invoke( 'register', - input + input, ).then((response) => { store.dispatch( addToContext({ req_id: response, context_type: 'RegisterAndConnect', - }) + }), ); setTimeout(() => { invoke('get_sessions').then((req_id) => { @@ -25,7 +25,7 @@ export const serverConnect = async (input: RegisterAndConnectInput) => { addToContext({ req_id, context_type: 'GetSession', - }) + }), ); }); }, 1000); diff --git a/hooks/c2s/useDisconnect.ts b/.archive/hooks/c2s/useDisconnect.ts similarity index 93% rename from hooks/c2s/useDisconnect.ts rename to .archive/hooks/c2s/useDisconnect.ts index 0adb958..c198c0a 100644 --- a/hooks/c2s/useDisconnect.ts +++ b/.archive/hooks/c2s/useDisconnect.ts @@ -6,14 +6,14 @@ export type DisconnectInput = { cid: string; }; export default async function useDisconnect( - input: DisconnectInput + input: DisconnectInput, ): Promise { const response = await invoke<{ cid: string }, string>('disconnect', input); store.dispatch( addToContext({ req_id: response, context_type: 'Disconnect', - }) + }), ); return response; diff --git a/hooks/c2s/useListAllPeers.ts b/.archive/hooks/c2s/useListAllPeers.ts similarity index 91% rename from hooks/c2s/useListAllPeers.ts rename to .archive/hooks/c2s/useListAllPeers.ts index f83ac42..56ea8a1 100644 --- a/hooks/c2s/useListAllPeers.ts +++ b/.archive/hooks/c2s/useListAllPeers.ts @@ -6,17 +6,17 @@ export type ListAllPeersInput = { cid: string; }; export const listAllPeers = async ( - input: ListAllPeersInput + input: ListAllPeersInput, ): Promise => { const response = await invoke( 'list_all_peers', - input + input, ); store.dispatch( addToContext({ req_id: response, context_type: 'ListAllPeers', - }) + }), ); return response; diff --git a/hooks/const.ts b/.archive/hooks/const.ts similarity index 100% rename from hooks/const.ts rename to .archive/hooks/const.ts diff --git a/hooks/localDB/useLocalDBClearAllKV.ts b/.archive/hooks/localDB/useLocalDBClearAllKV.ts similarity index 91% rename from hooks/localDB/useLocalDBClearAllKV.ts rename to .archive/hooks/localDB/useLocalDBClearAllKV.ts index 4ed1750..348981e 100644 --- a/hooks/localDB/useLocalDBClearAllKV.ts +++ b/.archive/hooks/localDB/useLocalDBClearAllKV.ts @@ -8,17 +8,17 @@ export type LocalDBClearAllKVInput = { }; export const useLocalDBClearAllKV = async ( - input: LocalDBClearAllKVInput + input: LocalDBClearAllKVInput, ): Promise => { const response = await invoke( 'local_db_clear_all_kv', - input + input, ); store.dispatch( addToContext({ req_id: response, context_type: 'LocalDBClearAllKV', - }) + }), ); return response; diff --git a/hooks/localDB/useLocalDBDeleteKV.ts b/.archive/hooks/localDB/useLocalDBDeleteKV.ts similarity index 91% rename from hooks/localDB/useLocalDBDeleteKV.ts rename to .archive/hooks/localDB/useLocalDBDeleteKV.ts index cdd3478..b934aa1 100644 --- a/hooks/localDB/useLocalDBDeleteKV.ts +++ b/.archive/hooks/localDB/useLocalDBDeleteKV.ts @@ -9,17 +9,17 @@ export type LocalDBDeleteKVInput = { }; export const useLocalDBDeleteKV = async ( - input: LocalDBDeleteKVInput + input: LocalDBDeleteKVInput, ): Promise => { const response = await invoke( 'local_db_delete_kv', - input + input, ); store.dispatch( addToContext({ req_id: response, context_type: 'LocalDBDeleteKV', - }) + }), ); return response; diff --git a/hooks/localDB/useLocalDBGetAllKV.ts b/.archive/hooks/localDB/useLocalDBGetAllKV.ts similarity index 91% rename from hooks/localDB/useLocalDBGetAllKV.ts rename to .archive/hooks/localDB/useLocalDBGetAllKV.ts index 830e346..ec32518 100644 --- a/hooks/localDB/useLocalDBGetAllKV.ts +++ b/.archive/hooks/localDB/useLocalDBGetAllKV.ts @@ -8,17 +8,17 @@ export type LocalDBGetAllKVInput = { }; export const useLocalDBGetAllKV = async ( - input: LocalDBGetAllKVInput + input: LocalDBGetAllKVInput, ): Promise => { const response = await invoke( 'local_db_get_all_kv', - input + input, ); store.dispatch( addToContext({ req_id: response, context_type: 'LocalDBGetAllKV', - }) + }), ); return response; diff --git a/hooks/localDB/useLocalDBGetKV.ts b/.archive/hooks/localDB/useLocalDBGetKV.ts similarity index 92% rename from hooks/localDB/useLocalDBGetKV.ts rename to .archive/hooks/localDB/useLocalDBGetKV.ts index 9120eed..c94db19 100644 --- a/hooks/localDB/useLocalDBGetKV.ts +++ b/.archive/hooks/localDB/useLocalDBGetKV.ts @@ -9,17 +9,17 @@ export type LocalDBGetKVInput = { }; export const useLocalDBGetKV = async ( - input: LocalDBGetKVInput + input: LocalDBGetKVInput, ): Promise => { const response = await invoke( 'local_db_get_kv', - input + input, ); store.dispatch( addToContext({ req_id: response, context_type: 'LocalDBGetKV', - }) + }), ); return response; diff --git a/hooks/localDB/useLocalDBSetKV.ts b/.archive/hooks/localDB/useLocalDBSetKV.ts similarity index 93% rename from hooks/localDB/useLocalDBSetKV.ts rename to .archive/hooks/localDB/useLocalDBSetKV.ts index 473a291..99ab007 100644 --- a/hooks/localDB/useLocalDBSetKV.ts +++ b/.archive/hooks/localDB/useLocalDBSetKV.ts @@ -10,17 +10,17 @@ export type LocalDBSetKVInput = { }; export const useLocalDBSetKV = async ( - input: LocalDBSetKVInput + input: LocalDBSetKVInput, ): Promise => { const response = await invoke( 'local_db_set_kv', - input + input, ); store.dispatch( addToContext({ req_id: response, context_type: 'LocalDBSetKV', - }) + }), ); return response; diff --git a/hooks/p2p/useListRegisteredPeers.ts b/.archive/hooks/p2p/useListRegisteredPeers.ts similarity index 91% rename from hooks/p2p/useListRegisteredPeers.ts rename to .archive/hooks/p2p/useListRegisteredPeers.ts index d0a2089..d9844ae 100644 --- a/hooks/p2p/useListRegisteredPeers.ts +++ b/.archive/hooks/p2p/useListRegisteredPeers.ts @@ -6,17 +6,17 @@ export type ListRegisteredPeersInput = { cid: string; }; export const useListRegisteredPeers = async ( - input: ListRegisteredPeersInput + input: ListRegisteredPeersInput, ): Promise => { const response = await invoke( 'list_registered_peers', - input + input, ); store.dispatch( addToContext({ req_id: response, context_type: 'ListRegisteredPeers', - }) + }), ); return response; diff --git a/hooks/p2p/usePeerConnect.ts b/.archive/hooks/p2p/usePeerConnect.ts similarity index 92% rename from hooks/p2p/usePeerConnect.ts rename to .archive/hooks/p2p/usePeerConnect.ts index 8f71a2c..fc4bcc5 100644 --- a/hooks/p2p/usePeerConnect.ts +++ b/.archive/hooks/p2p/usePeerConnect.ts @@ -7,18 +7,18 @@ export type Peer2PeerConnectInput = { peerCid: string; }; export const usePeerConnect = async ( - input: Peer2PeerConnectInput + input: Peer2PeerConnectInput, ): Promise => { const response = await invoke( 'peer_connect', - input + input, ); console.log('peer_connect response', response); store.dispatch( addToContext({ req_id: response, context_type: 'PeerConnectNotification', - }) + }), ); return response; diff --git a/hooks/p2p/usePeerDisconnect.ts b/.archive/hooks/p2p/usePeerDisconnect.ts similarity index 91% rename from hooks/p2p/usePeerDisconnect.ts rename to .archive/hooks/p2p/usePeerDisconnect.ts index 2eb93a8..8bd113a 100644 --- a/hooks/p2p/usePeerDisconnect.ts +++ b/.archive/hooks/p2p/usePeerDisconnect.ts @@ -9,17 +9,17 @@ export type Peer2PeerDisconnectInput = { serverAddr: string; }; export const peerDisconnect = async ( - input: Peer2PeerDisconnectInput + input: Peer2PeerDisconnectInput, ): Promise => { const response = await invoke( 'peer_disconnect', - input + input, ); store.dispatch( addToContext({ req_id: response, context_type: 'PeerDisconnect', - }) + }), ); return response; diff --git a/hooks/p2p/usePeerRegister.ts b/.archive/hooks/p2p/usePeerRegister.ts similarity index 96% rename from hooks/p2p/usePeerRegister.ts rename to .archive/hooks/p2p/usePeerRegister.ts index 33d6843..c36d400 100644 --- a/hooks/p2p/usePeerRegister.ts +++ b/.archive/hooks/p2p/usePeerRegister.ts @@ -9,17 +9,17 @@ export type Peer2PeerRegisterInput = { export const peerRegister = async (input: Peer2PeerRegisterInput) => { const response = await invoke( 'peer_register', - input + input, ); store.dispatch( addToContext({ req_id: response, context_type: 'PeerRegister', - }) + }), ); store.dispatch( - addToContext({ req_id: response, context_type: 'PeerRegister' }) + addToContext({ req_id: response, context_type: 'PeerRegister' }), ); return response; }; diff --git a/hooks/utils/invoke-api.ts b/.archive/hooks/utils/invoke-api.ts similarity index 97% rename from hooks/utils/invoke-api.ts rename to .archive/hooks/utils/invoke-api.ts index ae651b8..8add3ee 100644 --- a/hooks/utils/invoke-api.ts +++ b/.archive/hooks/utils/invoke-api.ts @@ -19,7 +19,7 @@ export type ApiInvokeTypes = const invokeApi = async ( type: ApiInvokeTypes, - variables?: T + variables?: T, ): Promise => { try { if (!variables) { diff --git a/hooks/utils/normalizeResponse.ts b/.archive/hooks/utils/normalizeResponse.ts similarity index 100% rename from hooks/utils/normalizeResponse.ts rename to .archive/hooks/utils/normalizeResponse.ts diff --git a/index.d.ts b/.archive/index.d.ts similarity index 100% rename from index.d.ts rename to .archive/index.d.ts diff --git a/.archive/index.html b/.archive/index.html new file mode 100644 index 0000000..61f18fe --- /dev/null +++ b/.archive/index.html @@ -0,0 +1,13 @@ + + + + + + Tauri + React + TS + + + +
+ + + diff --git a/lib/utils.ts b/.archive/lib/utils.ts similarity index 100% rename from lib/utils.ts rename to .archive/lib/utils.ts diff --git a/next-env.d.ts b/.archive/next-env.d.ts similarity index 100% rename from next-env.d.ts rename to .archive/next-env.d.ts diff --git a/next.config.mjs b/.archive/next.config.mjs similarity index 100% rename from next.config.mjs rename to .archive/next.config.mjs diff --git a/.archive/package.json b/.archive/package.json new file mode 100644 index 0000000..ab6ac6a --- /dev/null +++ b/.archive/package.json @@ -0,0 +1,102 @@ +{ + "name": "citadel_workspace", + "private": true, + "version": "0.0.0", + "type": "module", + "scripts": { + "dev": "next dev -p 1420", + "build": "next build", + "start": "next start", + "lint": "next lint", + "tauri": "tauri", + "test": "jest", + "prepare": "husky install", + "sb": "storybook dev -p 6006", + "build-storybook": "storybook build", + "storybook": "storybook dev -p 6006" + }, + "dependencies": { + "@headlessui/react": "^1.7.15", + "@heroicons/react": "^2.0.18", + "@radix-ui/react-icons": "^1.3.0", + "@radix-ui/react-select": "^1.2.2", + "@reduxjs/toolkit": "^1.9.5", + "@storybook/addon-postcss": "^2.0.0", + "@storybook/builder-webpack5": "^7.0.23", + "@tailwindcss/forms": "^0.5.3", + "@tauri-apps/api": ">=2.0.0-beta.3", + "@tauri-apps/plugin-shell": ">=2.0.0-beta.0", + "@typescript-eslint/eslint-plugin": "^5.59.2", + "@typescript-eslint/parser": "^5.59.2", + "@uidotdev/usehooks": "^2.0.1", + "autoprefixer": "^10.4.14", + "axios": "^1.4.0", + "class-variance-authority": "^0.6.0", + "classnames": "^2.3.2", + "clsx": "^1.2.1", + "dayjs": "^1.11.8", + "eslint": "^8.40.0", + "eslint-config-prettier": "^8.8.0", + "flowbite": "^1.6.5", + "flowbite-react": "^0.4.9", + "install": "^0.13.0", + "lint-staged": "^13.2.2", + "lossless-json": "^4.0.1", + "lucide-react": "^0.248.0", + "next": "^14.1.0", + "npm": "^9.7.2", + "postcss": "^8.4.23", + "prettier": "^2.8.8", + "react": "^18.2.0", + "react-dom": "^18.2.0", + "react-loader-spinner": "^6.1.6", + "react-redux": "^8.1.1", + "redux": "^4.2.1", + "redux-devtools-extension": "^2.13.9", + "swr": "^2.1.5", + "tailwind-merge": "^1.13.2", + "tailwindcss": "^3.3.2", + "tailwindcss-animate": "^1.0.6", + "uuidv4": "^6.2.13" + }, + "devDependencies": { + "@storybook/addon-essentials": "^7.0.23", + "@storybook/addon-interactions": "^7.0.23", + "@storybook/addon-links": "^7.0.23", + "@storybook/blocks": "^7.0.23", + "@storybook/nextjs": "^7.0.23", + "@storybook/react": "^7.0.23", + "@storybook/testing-library": "^0.0.14-next.2", + "@tauri-apps/cli": ">=2.0.0-beta.0", + "@types/jest": "^29.5.1", + "@types/node": "^18.7.10", + "@types/react": "^18.2.15", + "@types/react-dom": "^18.2.7", + "@vitejs/plugin-react": "^4.2.1", + "eslint-plugin-storybook": "^0.6.12", + "husky": "^8.0.0", + "internal-ip": "^8.0.0", + "jest": "^29.5.0", + "storybook": "^7.0.23", + "tsconfig-paths-webpack-plugin": "^4.0.1", + "typescript": "^5.0.2", + "vite": "^5.0.0" + }, + "husky": { + "hooks": { + "pre-commit": "lint-staged" + } + }, + "resolutions": { + "@types/react": "^17.0.38" + }, + "lint-staged": { + "*.{js,ts,jsx,tsx}": "eslint --fix", + "*.{js,ts,jsx,tsx,css,md}": "prettier --write" + }, + "eslintConfig": { + "extends": [ + "plugin:storybook/recommended" + ] + } +} diff --git a/packetHandlers/notificationHandler.ts b/.archive/packetHandlers/notificationHandler.ts similarity index 98% rename from packetHandlers/notificationHandler.ts rename to .archive/packetHandlers/notificationHandler.ts index 7d5529f..3afd597 100644 --- a/packetHandlers/notificationHandler.ts +++ b/.archive/packetHandlers/notificationHandler.ts @@ -10,7 +10,7 @@ const handleNotificationPacket = ({ payload }: Payload, key: string) => { addToNotificationsContext({ key: 'PeerRegisterNotification', payload: payload as unknown as PeerRegisterNotification, - }) + }), ); break; diff --git a/pages/404.tsx b/.archive/pages/404.tsx similarity index 100% rename from pages/404.tsx rename to .archive/pages/404.tsx diff --git a/pages/_app.tsx b/.archive/pages/_app.tsx similarity index 99% rename from pages/_app.tsx rename to .archive/pages/_app.tsx index c729482..577a10f 100644 --- a/pages/_app.tsx +++ b/.archive/pages/_app.tsx @@ -52,7 +52,7 @@ function CustomApp({ addToContext({ req_id: session_req_id, context_type: 'GetSession', - }) + }), ); } catch (error) { console.log(error); @@ -74,7 +74,7 @@ function CustomApp({ const req_id = data.payload.request_id; handlePacket(req_id, data); - } + }, ); const listen_notification_stream = listen( @@ -89,7 +89,7 @@ function CustomApp({ }; handleNotificationPacket(data, key); - } + }, ); return () => { diff --git a/pages/index.tsx b/.archive/pages/index.tsx similarity index 100% rename from pages/index.tsx rename to .archive/pages/index.tsx diff --git a/pages/peer/[peerId].tsx b/.archive/pages/peer/[peerId].tsx similarity index 99% rename from pages/peer/[peerId].tsx rename to .archive/pages/peer/[peerId].tsx index 521ddbb..f1073f3 100644 --- a/pages/peer/[peerId].tsx +++ b/.archive/pages/peer/[peerId].tsx @@ -5,7 +5,7 @@ import { useAppSelector } from '@redux/store'; import { useEffect } from 'react'; const Server = () => { const current_selected_session = useAppSelector( - (state) => state.context.sessions.current_used_session_server + (state) => state.context.sessions.current_used_session_server, ); useEffect(() => { diff --git a/pages/server/[serverCid].tsx b/.archive/pages/server/[serverCid].tsx similarity index 99% rename from pages/server/[serverCid].tsx rename to .archive/pages/server/[serverCid].tsx index bbc7a07..1b42574 100644 --- a/pages/server/[serverCid].tsx +++ b/.archive/pages/server/[serverCid].tsx @@ -6,7 +6,7 @@ import { useAppSelector } from '@redux/store'; import { useEffect } from 'react'; const Server = () => { const current_selected_session = useAppSelector( - (state) => state.context.sessions.current_used_session_server + (state) => state.context.sessions.current_used_session_server, ); useEffect(() => { diff --git a/pages/settings/index.tsx b/.archive/pages/settings/index.tsx similarity index 100% rename from pages/settings/index.tsx rename to .archive/pages/settings/index.tsx diff --git a/pages/settings/notifications.tsx b/.archive/pages/settings/notifications.tsx similarity index 100% rename from pages/settings/notifications.tsx rename to .archive/pages/settings/notifications.tsx diff --git a/pages/settings/plans.tsx b/.archive/pages/settings/plans.tsx similarity index 98% rename from pages/settings/plans.tsx rename to .archive/pages/settings/plans.tsx index 107f63b..310f455 100644 --- a/pages/settings/plans.tsx +++ b/.archive/pages/settings/plans.tsx @@ -117,7 +117,7 @@ export default function Example() { tier.mostPopular ? 'rounded-xl bg-white/5 ring-1 ring-inset ring-white/10' : '', - 'p-8' + 'p-8', )} >

Buy plan @@ -242,7 +242,7 @@ export default function Example() { tier.mostPopular ? 'bg-indigo-500 hover:bg-indigo-400 focus-visible:outline-indigo-600' : 'bg-white/10 hover:bg-white/20 focus-visible:outline-white', - 'mt-8 block rounded-md py-2 px-3 text-center text-sm font-semibold leading-6 text-white focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2' + 'mt-8 block rounded-md py-2 px-3 text-center text-sm font-semibold leading-6 text-white focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2', )} > Buy plan @@ -258,7 +258,7 @@ export default function Example() { colSpan={4} className={classNames( sectionIdx === 0 ? 'pt-8' : 'pt-16', - 'pb-4 text-sm font-semibold leading-6 text-white' + 'pb-4 text-sm font-semibold leading-6 text-white', )} > {section.name} diff --git a/pages/storage.tsx b/.archive/pages/storage.tsx similarity index 100% rename from pages/storage.tsx rename to .archive/pages/storage.tsx diff --git a/postcss.config.cjs b/.archive/postcss.config.cjs similarity index 100% rename from postcss.config.cjs rename to .archive/postcss.config.cjs diff --git a/public/assets/avatar-mock.jpg b/.archive/public/assets/avatar-mock.jpg similarity index 100% rename from public/assets/avatar-mock.jpg rename to .archive/public/assets/avatar-mock.jpg diff --git a/public/assets/logo.png b/.archive/public/assets/logo.png similarity index 100% rename from public/assets/logo.png rename to .archive/public/assets/logo.png diff --git a/public/assets/logo_citadel.jpg b/.archive/public/assets/logo_citadel.jpg similarity index 100% rename from public/assets/logo_citadel.jpg rename to .archive/public/assets/logo_citadel.jpg diff --git a/redux/slices/notificationsHandler.slice.ts b/.archive/redux/slices/notificationsHandler.slice.ts similarity index 86% rename from redux/slices/notificationsHandler.slice.ts rename to .archive/redux/slices/notificationsHandler.slice.ts index 9ce0c7b..194b17c 100644 --- a/redux/slices/notificationsHandler.slice.ts +++ b/.archive/redux/slices/notificationsHandler.slice.ts @@ -14,21 +14,21 @@ const notificationsContext = createSlice({ action: PayloadAction<{ key: string; payload: PeerRegisterNotification; - }> + }>, ) => { state[action.payload.payload.cid.value] = []; state[action.payload.payload.cid.value].push( - action.payload.payload as PeerRegisterNotification + action.payload.payload as PeerRegisterNotification, ); }, deleteFromNotificationsContext: ( state, - action: PayloadAction<{ peerCid: string; cid: string }> + action: PayloadAction<{ peerCid: string; cid: string }>, ) => { const { cid, peerCid } = action.payload; state[cid] = state[cid].filter( - (peer) => peer.cid.value !== cid && peer.peer_cid.value !== peerCid + (peer) => peer.cid.value !== cid && peer.peer_cid.value !== peerCid, ); }, }, diff --git a/redux/slices/streamHandler.slice.ts b/.archive/redux/slices/streamHandler.slice.ts similarity index 97% rename from redux/slices/streamHandler.slice.ts rename to .archive/redux/slices/streamHandler.slice.ts index 58f2dcd..85376c2 100644 --- a/redux/slices/streamHandler.slice.ts +++ b/.archive/redux/slices/streamHandler.slice.ts @@ -51,7 +51,7 @@ const streamExecSlice = createSlice({ reducers: { addToContext: ( state, - action: PayloadAction<{ req_id: string; context_type: ContextType }> + action: PayloadAction<{ req_id: string; context_type: ContextType }>, ) => { const req_id = action.payload.req_id; @@ -59,7 +59,7 @@ const streamExecSlice = createSlice({ action.payload.context_type ?? state.context[req_id]; const payload: { [key: string]: string } = action.payload; - let updatedObject: { [key: string]: string } = {}; + const updatedObject: { [key: string]: string } = {}; for (const key in payload) { if (key != 'request_id') { diff --git a/redux/slices/uuid.slice.ts b/.archive/redux/slices/uuid.slice.ts similarity index 100% rename from redux/slices/uuid.slice.ts rename to .archive/redux/slices/uuid.slice.ts diff --git a/redux/store.ts b/.archive/redux/store.ts similarity index 100% rename from redux/store.ts rename to .archive/redux/store.ts diff --git a/src-tauri/.env.example b/.archive/src-tauri/.env.example similarity index 100% rename from src-tauri/.env.example rename to .archive/src-tauri/.env.example diff --git a/.archive/src-tauri/.gitignore b/.archive/src-tauri/.gitignore new file mode 100644 index 0000000..aba21e2 --- /dev/null +++ b/.archive/src-tauri/.gitignore @@ -0,0 +1,3 @@ +# Generated by Cargo +# will have compiled files and executables +/target/ diff --git a/.archive/src-tauri/Cargo.toml b/.archive/src-tauri/Cargo.toml new file mode 100644 index 0000000..30141e3 --- /dev/null +++ b/.archive/src-tauri/Cargo.toml @@ -0,0 +1,41 @@ +[package] +name = "citadel_workspace" +version = "0.0.0" +description = "A Tauri App" +authors = ["you"] +license = "" +repository = "" +edition = "2021" + +# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html + +[lib] +name = "citadel_workspace_ui_lib" +crate-type = ["staticlib", "cdylib", "rlib"] + +[build-dependencies] +tauri-build = { version = "2.0.0-beta", features = [] } + +[dependencies] +lazy_static = "1.4.0" +parking_lot = {version = "0.12.1", features = ["deadlock_detection"] } +tauri = { version = "2.0.0-beta.22", features = ["devtools"] } +tauri-plugin-shell = "2.0.0-beta" +serde_json = "1.0" +serde = { version = "1.0", features = ["derive"] } +tokio = { version = "1.28.2", features = ["net", "rt", "macros"] } +bincode2 = "2.0.1" +bytes = "1.4.0" +uuid = { version = "1.3.4" } +citadel-internal-service-types = {version="0.1.0", git="https://github.com/Avarok-Cybersecurity/citadel-workspace-core.git", package="citadel-internal-service-types"} +citadel-internal-service-connector= {version="0.1.0", git="https://github.com/Avarok-Cybersecurity/citadel-workspace-core.git", package="citadel-internal-service-connector" } +futures = "0.3.28" +tokio-util = { version = "0.7.8", default-features = false } +citadel_logging = { version = "0.7.0", default-features = false } +tauri-plugin-log = "2.0.0-beta.1" +log = "^0.4" + +[features] +# this feature is used for production builds or when `devPath` points to the filesystem +# DO NOT REMOVE!! +custom-protocol = ["tauri/custom-protocol"] diff --git a/.archive/src-tauri/build.rs b/.archive/src-tauri/build.rs new file mode 100644 index 0000000..d860e1e --- /dev/null +++ b/.archive/src-tauri/build.rs @@ -0,0 +1,3 @@ +fn main() { + tauri_build::build() +} diff --git a/src-tauri/capabilities/base.json b/.archive/src-tauri/capabilities/base.json similarity index 100% rename from src-tauri/capabilities/base.json rename to .archive/src-tauri/capabilities/base.json diff --git a/.archive/src-tauri/icons/128x128.png b/.archive/src-tauri/icons/128x128.png new file mode 100644 index 0000000..6be5e50 Binary files /dev/null and b/.archive/src-tauri/icons/128x128.png differ diff --git a/.archive/src-tauri/icons/128x128@2x.png b/.archive/src-tauri/icons/128x128@2x.png new file mode 100644 index 0000000..e81bece Binary files /dev/null and b/.archive/src-tauri/icons/128x128@2x.png differ diff --git a/.archive/src-tauri/icons/32x32.png b/.archive/src-tauri/icons/32x32.png new file mode 100644 index 0000000..a437dd5 Binary files /dev/null and b/.archive/src-tauri/icons/32x32.png differ diff --git a/.archive/src-tauri/icons/Square107x107Logo.png b/.archive/src-tauri/icons/Square107x107Logo.png new file mode 100644 index 0000000..0ca4f27 Binary files /dev/null and b/.archive/src-tauri/icons/Square107x107Logo.png differ diff --git a/.archive/src-tauri/icons/Square142x142Logo.png b/.archive/src-tauri/icons/Square142x142Logo.png new file mode 100644 index 0000000..b81f820 Binary files /dev/null and b/.archive/src-tauri/icons/Square142x142Logo.png differ diff --git a/.archive/src-tauri/icons/Square150x150Logo.png b/.archive/src-tauri/icons/Square150x150Logo.png new file mode 100644 index 0000000..624c7bf Binary files /dev/null and b/.archive/src-tauri/icons/Square150x150Logo.png differ diff --git a/.archive/src-tauri/icons/Square284x284Logo.png b/.archive/src-tauri/icons/Square284x284Logo.png new file mode 100644 index 0000000..c021d2b Binary files /dev/null and b/.archive/src-tauri/icons/Square284x284Logo.png differ diff --git a/.archive/src-tauri/icons/Square30x30Logo.png b/.archive/src-tauri/icons/Square30x30Logo.png new file mode 100644 index 0000000..6219700 Binary files /dev/null and b/.archive/src-tauri/icons/Square30x30Logo.png differ diff --git a/.archive/src-tauri/icons/Square310x310Logo.png b/.archive/src-tauri/icons/Square310x310Logo.png new file mode 100644 index 0000000..f9bc048 Binary files /dev/null and b/.archive/src-tauri/icons/Square310x310Logo.png differ diff --git a/.archive/src-tauri/icons/Square44x44Logo.png b/.archive/src-tauri/icons/Square44x44Logo.png new file mode 100644 index 0000000..d5fbfb2 Binary files /dev/null and b/.archive/src-tauri/icons/Square44x44Logo.png differ diff --git a/.archive/src-tauri/icons/Square71x71Logo.png b/.archive/src-tauri/icons/Square71x71Logo.png new file mode 100644 index 0000000..63440d7 Binary files /dev/null and b/.archive/src-tauri/icons/Square71x71Logo.png differ diff --git a/.archive/src-tauri/icons/Square89x89Logo.png b/.archive/src-tauri/icons/Square89x89Logo.png new file mode 100644 index 0000000..f3f705a Binary files /dev/null and b/.archive/src-tauri/icons/Square89x89Logo.png differ diff --git a/.archive/src-tauri/icons/StoreLogo.png b/.archive/src-tauri/icons/StoreLogo.png new file mode 100644 index 0000000..4556388 Binary files /dev/null and b/.archive/src-tauri/icons/StoreLogo.png differ diff --git a/.archive/src-tauri/icons/icon.icns b/.archive/src-tauri/icons/icon.icns new file mode 100644 index 0000000..12a5bce Binary files /dev/null and b/.archive/src-tauri/icons/icon.icns differ diff --git a/.archive/src-tauri/icons/icon.ico b/.archive/src-tauri/icons/icon.ico new file mode 100644 index 0000000..b3636e4 Binary files /dev/null and b/.archive/src-tauri/icons/icon.ico differ diff --git a/.archive/src-tauri/icons/icon.png b/.archive/src-tauri/icons/icon.png new file mode 100644 index 0000000..e1cd261 Binary files /dev/null and b/.archive/src-tauri/icons/icon.png differ diff --git a/src-tauri/icons/image.ico b/.archive/src-tauri/icons/image.ico similarity index 100% rename from src-tauri/icons/image.ico rename to .archive/src-tauri/icons/image.ico diff --git a/.archive/src-tauri/src/commands/connect.rs b/.archive/src-tauri/src/commands/connect.rs new file mode 100644 index 0000000..84bf172 --- /dev/null +++ b/.archive/src-tauri/src/commands/connect.rs @@ -0,0 +1,27 @@ +use crate::commands::send_to_internal_service; +use citadel_internal_service_types::InternalServiceRequest::Connect; +use tauri::State; + +use crate::structs::ConnectionState; + +#[tauri::command] +pub async fn connect( + username: String, + password: String, + request_id: String, + state: State<'_, ConnectionState>, +) -> Result { + let request = Connect { + username, + password: password.into_bytes().into(), + connect_mode: Default::default(), + udp_mode: Default::default(), + keep_alive_timeout: Default::default(), + session_security_settings: Default::default(), + request_id: request_id.parse().unwrap(), + server_password: None, + }; + + send_to_internal_service(request, state).await?; + Ok(request_id) +} diff --git a/.archive/src-tauri/src/commands/disconnect.rs b/.archive/src-tauri/src/commands/disconnect.rs new file mode 100644 index 0000000..b43c0bf --- /dev/null +++ b/.archive/src-tauri/src/commands/disconnect.rs @@ -0,0 +1,18 @@ +use crate::commands::send_to_internal_service; +use citadel_internal_service_types::InternalServiceRequest::Disconnect; +use tauri::State; +use uuid::Uuid; + +use crate::structs::ConnectionState; + +#[tauri::command] +pub async fn disconnect(cid: String, state: State<'_, ConnectionState>) -> Result { + let request_id = Uuid::new_v4(); + let request = Disconnect { + cid: cid.parse().unwrap(), + request_id, + }; + + send_to_internal_service(request, state).await?; + Ok(request_id.to_string()) +} diff --git a/.archive/src-tauri/src/commands/get_session.rs b/.archive/src-tauri/src/commands/get_session.rs new file mode 100644 index 0000000..4d9afed --- /dev/null +++ b/.archive/src-tauri/src/commands/get_session.rs @@ -0,0 +1,18 @@ +use crate::commands::send_to_internal_service; +use citadel_internal_service_types::InternalServiceRequest; +use tauri::State; +use uuid::Uuid; + +use crate::structs::ConnectionState; + +#[tauri::command] +pub async fn get_sessions( + _window: tauri::Window, + state: State<'_, ConnectionState>, +) -> Result { + let request_id = Uuid::new_v4(); + let payload = InternalServiceRequest::GetSessions { request_id }; + + send_to_internal_service(payload, state).await?; + Ok(request_id.to_string()) +} diff --git a/.archive/src-tauri/src/commands/list_all_peers.rs b/.archive/src-tauri/src/commands/list_all_peers.rs new file mode 100644 index 0000000..c647c40 --- /dev/null +++ b/.archive/src-tauri/src/commands/list_all_peers.rs @@ -0,0 +1,21 @@ +use crate::commands::send_to_internal_service; +use citadel_internal_service_types::InternalServiceRequest::ListAllPeers; +use tauri::State; +use uuid::Uuid; + +use crate::structs::ConnectionState; + +#[tauri::command] +pub async fn list_all_peers( + cid: String, + state: State<'_, ConnectionState>, +) -> Result { + let request_id = Uuid::new_v4(); + let request = ListAllPeers { + cid: cid.parse().unwrap(), + request_id, + }; + + send_to_internal_service(request, state).await?; + Ok(request_id.to_string()) +} diff --git a/.archive/src-tauri/src/commands/list_registered_peers.rs b/.archive/src-tauri/src/commands/list_registered_peers.rs new file mode 100644 index 0000000..84f2feb --- /dev/null +++ b/.archive/src-tauri/src/commands/list_registered_peers.rs @@ -0,0 +1,21 @@ +use crate::commands::send_to_internal_service; +use citadel_internal_service_types::InternalServiceRequest::ListRegisteredPeers; +use tauri::State; +use uuid::Uuid; + +use crate::structs::ConnectionState; + +#[tauri::command] +pub async fn list_registered_peers( + cid: String, + state: State<'_, ConnectionState>, +) -> Result { + let request_id = Uuid::new_v4(); + let request = ListRegisteredPeers { + request_id, + cid: cid.parse().unwrap(), + }; + + send_to_internal_service(request, state).await?; + Ok(request_id.to_string()) +} diff --git a/.archive/src-tauri/src/commands/local_db_clear_all_kv.rs b/.archive/src-tauri/src/commands/local_db_clear_all_kv.rs new file mode 100644 index 0000000..806b846 --- /dev/null +++ b/.archive/src-tauri/src/commands/local_db_clear_all_kv.rs @@ -0,0 +1,23 @@ +use crate::commands::send_to_internal_service; +use citadel_internal_service_types::InternalServiceRequest::LocalDBClearAllKV; +use tauri::State; +use uuid::Uuid; + +use crate::structs::ConnectionState; + +#[tauri::command] +pub async fn local_db_clear_all_kv( + cid: String, + peer_cid: Option, + state: State<'_, ConnectionState>, +) -> Result { + let request_id = Uuid::new_v4(); + let payload = LocalDBClearAllKV { + request_id, + cid: cid.parse::().unwrap(), + peer_cid: peer_cid.map(|pid| pid.parse::().unwrap()), + }; + + send_to_internal_service(payload, state).await?; + Ok(request_id.to_string()) +} diff --git a/.archive/src-tauri/src/commands/local_db_delete_kv.rs b/.archive/src-tauri/src/commands/local_db_delete_kv.rs new file mode 100644 index 0000000..d2610d8 --- /dev/null +++ b/.archive/src-tauri/src/commands/local_db_delete_kv.rs @@ -0,0 +1,25 @@ +use crate::commands::send_to_internal_service; +use citadel_internal_service_types::InternalServiceRequest::LocalDBDeleteKV; +use tauri::State; +use uuid::Uuid; + +use crate::structs::ConnectionState; + +#[tauri::command] +pub async fn local_db_delete_kv( + cid: String, + peer_cid: Option, + key: String, + state: State<'_, ConnectionState>, +) -> Result { + let request_id = Uuid::new_v4(); + let payload = LocalDBDeleteKV { + request_id, + cid: cid.parse::().unwrap(), + peer_cid: peer_cid.map(|pid| pid.parse::().unwrap()), + key, + }; + + send_to_internal_service(payload, state).await?; + Ok(request_id.to_string()) +} diff --git a/.archive/src-tauri/src/commands/local_db_get_all_kv.rs b/.archive/src-tauri/src/commands/local_db_get_all_kv.rs new file mode 100644 index 0000000..200887c --- /dev/null +++ b/.archive/src-tauri/src/commands/local_db_get_all_kv.rs @@ -0,0 +1,21 @@ +use crate::{commands::send_to_internal_service, structs::ConnectionState}; +use citadel_internal_service_types::InternalServiceRequest::LocalDBGetAllKV; +use tauri::State; +use uuid::Uuid; + +#[tauri::command] +pub async fn local_db_get_all_kv( + cid: String, + peer_cid: Option, + state: State<'_, ConnectionState>, +) -> Result { + let request_id = Uuid::new_v4(); + let payload = LocalDBGetAllKV { + request_id, + cid: cid.parse::().unwrap(), + peer_cid: peer_cid.map(|pid| pid.parse::().unwrap()), + }; + + send_to_internal_service(payload, state).await?; + Ok(request_id.to_string()) +} diff --git a/.archive/src-tauri/src/commands/local_db_get_kv.rs b/.archive/src-tauri/src/commands/local_db_get_kv.rs new file mode 100644 index 0000000..a05f0d2 --- /dev/null +++ b/.archive/src-tauri/src/commands/local_db_get_kv.rs @@ -0,0 +1,25 @@ +use crate::commands::send_to_internal_service; +use citadel_internal_service_types::InternalServiceRequest::LocalDBGetKV; +use tauri::State; +use uuid::Uuid; + +use crate::structs::ConnectionState; + +#[tauri::command] +pub async fn local_db_get_kv( + cid: String, + peer_cid: Option, + key: String, + state: State<'_, ConnectionState>, +) -> Result { + let request_id = Uuid::new_v4(); + let payload = LocalDBGetKV { + request_id, + cid: cid.parse::().unwrap(), + peer_cid: peer_cid.map(|pid| pid.parse::().unwrap()), + key, + }; + + send_to_internal_service(payload, state).await?; + Ok(request_id.to_string()) +} diff --git a/.archive/src-tauri/src/commands/local_db_set_kv.rs b/.archive/src-tauri/src/commands/local_db_set_kv.rs new file mode 100644 index 0000000..c9e7424 --- /dev/null +++ b/.archive/src-tauri/src/commands/local_db_set_kv.rs @@ -0,0 +1,27 @@ +use crate::commands::send_to_internal_service; +use citadel_internal_service_types::InternalServiceRequest::LocalDBSetKV; +use tauri::State; +use uuid::Uuid; + +use crate::structs::ConnectionState; + +#[tauri::command] +pub async fn local_db_set_kv( + cid: String, + peer_cid: Option, + key: String, + value: Vec, + state: State<'_, ConnectionState>, +) -> Result { + let request_id = Uuid::new_v4(); + let payload = LocalDBSetKV { + request_id, + cid: cid.parse::().unwrap(), + peer_cid: peer_cid.map(|pid| pid.parse::().unwrap()), + key, + value, + }; + + send_to_internal_service(payload, state).await?; + Ok(request_id.to_string()) +} diff --git a/.archive/src-tauri/src/commands/message.rs b/.archive/src-tauri/src/commands/message.rs new file mode 100644 index 0000000..5e7be92 --- /dev/null +++ b/.archive/src-tauri/src/commands/message.rs @@ -0,0 +1,24 @@ +use crate::commands::send_to_internal_service; +use crate::structs::ConnectionState; +use citadel_internal_service_types::InternalServiceRequest::Message; +use tauri::State; + +#[tauri::command] +pub async fn message( + message: String, + cid: u64, + peer_cid: Option, + request_id: String, + state: State<'_, ConnectionState>, +) -> Result { + let request = Message { + message: message.into_bytes(), + cid, + peer_cid, + security_level: Default::default(), + request_id: request_id.parse().unwrap(), + }; + + send_to_internal_service(request, state).await?; + Ok(request_id) +} diff --git a/.archive/src-tauri/src/commands/mod.rs b/.archive/src-tauri/src/commands/mod.rs new file mode 100644 index 0000000..89ce015 --- /dev/null +++ b/.archive/src-tauri/src/commands/mod.rs @@ -0,0 +1,36 @@ +use crate::structs::ConnectionState; +use citadel_internal_service_types::InternalServiceRequest; +use futures::SinkExt; +use tauri::State; + +pub mod connect; +pub mod disconnect; +pub mod get_session; +pub mod list_all_peers; +pub mod list_registered_peers; +pub mod local_db_clear_all_kv; +pub mod local_db_delete_kv; +pub mod local_db_get_all_kv; +pub mod local_db_get_kv; +pub mod local_db_set_kv; +pub mod message; +pub mod open_connection; +pub mod peer_connect; +pub mod peer_disconnect; +pub mod peer_register; +pub mod register; + +pub(crate) async fn send_to_internal_service( + request: InternalServiceRequest, + state: State<'_, ConnectionState>, +) -> Result<(), String> { + state + .sink + .lock() + .await + .as_mut() + .ok_or("No connection to the internal service set")? + .send(request) + .await + .map_err(|err| err.to_string()) +} diff --git a/.archive/src-tauri/src/commands/open_connection.rs b/.archive/src-tauri/src/commands/open_connection.rs new file mode 100644 index 0000000..e6540cc --- /dev/null +++ b/.archive/src-tauri/src/commands/open_connection.rs @@ -0,0 +1,54 @@ +use crate::structs::{ConnectionState, Payload}; +use citadel_internal_service_connector::connector::InternalServiceConnector; +use citadel_internal_service_types::InternalServiceResponse; +use citadel_logging::error; +use futures::StreamExt; +use std::error::Error; +use tauri::{Manager, State}; + +fn send_response( + packet_name: &str, + packet: InternalServiceResponse, + window: &tauri::Window, +) -> Result<(), Box> { + let error = packet.is_error(); + let notification = packet.is_notification(); + let payload = Payload { + packet, + error, + notification, + }; + println!("send_response: {:?}", payload); + let _ = window.emit(packet_name, serde_json::to_string(&payload)?); + Ok(()) +} + +#[tauri::command] +pub async fn open_connection( + window: tauri::Window, + addr: String, + state: State<'_, ConnectionState>, +) -> Result<(), String> { + let connector = InternalServiceConnector::connect(addr).await.unwrap(); + let (sink, mut stream) = connector.split(); + *state.sink.lock().await = Some(sink); + + let service_to_gui = async move { + while let Some(packet) = stream.next().await { + // if packet.is_notification() { + // if let Err(e) = send_response("notification_stream", packet.clone(), &window) { + // error!(e) + // } + // } else if packet.is_error() { + // if let Err(e) = send_response("error_stream", packet.clone(), &window) { + // error!(e) + // } + // } + if let Err(e) = send_response("packet_stream", packet, &window) { + error!(e) + } + } + }; + tauri::async_runtime::spawn(service_to_gui); + Ok(()) +} diff --git a/.archive/src-tauri/src/commands/peer_connect.rs b/.archive/src-tauri/src/commands/peer_connect.rs new file mode 100644 index 0000000..96cba97 --- /dev/null +++ b/.archive/src-tauri/src/commands/peer_connect.rs @@ -0,0 +1,26 @@ +use crate::commands::send_to_internal_service; +use citadel_internal_service_types::InternalServiceRequest::PeerConnect; +use tauri::State; +use uuid::Uuid; + +use crate::structs::ConnectionState; + +#[tauri::command] +pub async fn peer_connect( + cid: String, + peer_cid: String, + state: State<'_, ConnectionState>, +) -> Result { + let request_id = Uuid::new_v4(); + let payload = PeerConnect { + request_id, + cid: cid.parse::().unwrap(), + peer_cid: peer_cid.parse::().unwrap(), + udp_mode: Default::default(), + session_security_settings: Default::default(), + peer_session_password: None, + }; + + send_to_internal_service(payload, state).await?; + Ok(request_id.to_string()) +} diff --git a/.archive/src-tauri/src/commands/peer_disconnect.rs b/.archive/src-tauri/src/commands/peer_disconnect.rs new file mode 100644 index 0000000..2ce102a --- /dev/null +++ b/.archive/src-tauri/src/commands/peer_disconnect.rs @@ -0,0 +1,23 @@ +use crate::commands::send_to_internal_service; +use citadel_internal_service_types::InternalServiceRequest::PeerDisconnect; +use tauri::State; +use uuid::Uuid; + +use crate::structs::ConnectionState; + +#[tauri::command] +pub async fn peer_disconnect( + cid: String, + peer_cid: String, + state: State<'_, ConnectionState>, +) -> Result { + let request_id = Uuid::new_v4(); + let request = PeerDisconnect { + request_id, + cid: cid.parse::().unwrap(), + peer_cid: peer_cid.parse::().unwrap(), + }; + + send_to_internal_service(request, state).await?; + Ok(request_id.to_string()) +} diff --git a/.archive/src-tauri/src/commands/peer_register.rs b/.archive/src-tauri/src/commands/peer_register.rs new file mode 100644 index 0000000..1ffec1a --- /dev/null +++ b/.archive/src-tauri/src/commands/peer_register.rs @@ -0,0 +1,26 @@ +use crate::commands::send_to_internal_service; +use citadel_internal_service_types::InternalServiceRequest::PeerRegister; +use tauri::State; +use uuid::Uuid; + +use crate::structs::ConnectionState; + +#[tauri::command] +pub async fn peer_register( + cid: String, + peer_cid: String, + state: State<'_, ConnectionState>, +) -> Result { + let request_id = Uuid::new_v4(); + let request = PeerRegister { + request_id, + cid: cid.parse::().unwrap(), + connect_after_register: false, + session_security_settings: Default::default(), + peer_cid: peer_cid.parse::().unwrap(), + peer_session_password: None, + }; + + send_to_internal_service(request, state).await?; + Ok(request_id.to_string()) +} diff --git a/.archive/src-tauri/src/commands/register.rs b/.archive/src-tauri/src/commands/register.rs new file mode 100644 index 0000000..a0979e5 --- /dev/null +++ b/.archive/src-tauri/src/commands/register.rs @@ -0,0 +1,34 @@ +use crate::commands::send_to_internal_service; +use citadel_internal_service_types::InternalServiceRequest; +use std::net::SocketAddr; +use std::str::FromStr; +use tauri::State; +use uuid::Uuid; + +use crate::structs::ConnectionState; + +#[tauri::command] +pub async fn register( + full_name: String, + username: String, + proposed_password: String, + server_addr: String, + _window: tauri::Window, + state: State<'_, ConnectionState>, +) -> Result { + let server_addr = SocketAddr::from_str(&server_addr).map_err(|_| "Invalid server address")?; + let request_id = Uuid::new_v4(); + let request = InternalServiceRequest::Register { + request_id, + server_addr, + full_name, + username: username.clone(), + proposed_password: proposed_password.into_bytes().into(), + connect_after_register: true, + session_security_settings: Default::default(), + server_password: None, + }; + + send_to_internal_service(request, state).await?; + Ok(request_id.to_string()) +} diff --git a/src-tauri/src/lib.rs b/.archive/src-tauri/src/lib.rs similarity index 100% rename from src-tauri/src/lib.rs rename to .archive/src-tauri/src/lib.rs diff --git a/.archive/src-tauri/src/main.rs b/.archive/src-tauri/src/main.rs new file mode 100644 index 0000000..981f473 --- /dev/null +++ b/.archive/src-tauri/src/main.rs @@ -0,0 +1,9 @@ +// Prevents additional console window on Windows in release, DO NOT REMOVE!! +#![cfg_attr(not(debug_assertions), windows_subsystem = "windows")] +#[allow(warnings, unused)] +mod commands; +mod structs; + +fn main() { + citadel_workspace_ui_lib::run() +} diff --git a/.archive/src-tauri/src/structs.rs b/.archive/src-tauri/src/structs.rs new file mode 100644 index 0000000..eb8df80 --- /dev/null +++ b/.archive/src-tauri/src/structs.rs @@ -0,0 +1,15 @@ +use citadel_internal_service_connector::connector::WrappedSink; +use citadel_internal_service_connector::io_interface::tcp::TcpIOInterface; +use citadel_internal_service_types::InternalServiceResponse; +use serde::{Deserialize, Serialize}; +use tokio::sync::Mutex; + +pub struct ConnectionState { + pub sink: Mutex>>, +} +#[derive(Serialize, Deserialize, Debug)] +pub struct Payload { + pub packet: InternalServiceResponse, + pub error: bool, + pub notification: bool, +} diff --git a/.archive/src-tauri/tauri.conf.json b/.archive/src-tauri/tauri.conf.json new file mode 100644 index 0000000..5b67dd3 --- /dev/null +++ b/.archive/src-tauri/tauri.conf.json @@ -0,0 +1,34 @@ +{ + "productName": "Citadel Workspace", + "version": "0.0.0", + "identifier": "citadel.workspace", + "build": { + "beforeDevCommand": "bun run dev", + "devUrl": "http://localhost:1420", + "beforeBuildCommand": "bun run build", + "frontendDist": "../out" + }, + "app": { + "windows": [ + { + "title": "Citadel Workspace", + "width": 1500, + "height": 1200 + } + ], + "security": { + "csp": null + } + }, + "bundle": { + "active": true, + "targets": "all", + "icon": [ + "icons/32x32.png", + "icons/128x128.png", + "icons/128x128@2x.png", + "icons/icon.icns", + "icons/icon.ico" + ] + } +} diff --git a/styles/globals.css b/.archive/styles/globals.css similarity index 100% rename from styles/globals.css rename to .archive/styles/globals.css diff --git a/tailwind.config.js b/.archive/tailwind.config.js similarity index 100% rename from tailwind.config.js rename to .archive/tailwind.config.js diff --git a/tailwind.css b/.archive/tailwind.css similarity index 95% rename from tailwind.css rename to .archive/tailwind.css index 89871fc..cfe58ef 100644 --- a/tailwind.css +++ b/.archive/tailwind.css @@ -62,6 +62,8 @@ } body { @apply bg-background text-foreground; - font-feature-settings: 'rlig' 1, 'calt' 1; + font-feature-settings: + 'rlig' 1, + 'calt' 1; } } diff --git a/.archive/tsconfig.json b/.archive/tsconfig.json new file mode 100644 index 0000000..55ae638 --- /dev/null +++ b/.archive/tsconfig.json @@ -0,0 +1,50 @@ +{ + "compilerOptions": { + "target": "ES2020", + "useDefineForClassFields": true, + "lib": ["ES2020", "DOM", "DOM.Iterable", "esnext"], + "module": "ESNext", + "skipLibCheck": true, + /* Bundler mode */ + "moduleResolution": "bundler", + "allowImportingTsExtensions": true, + "resolveJsonModule": true, + "isolatedModules": true, + "noEmit": true, + "jsx": "preserve", + /* Linting */ + "strict": true, + "noUnusedLocals": true, + "noUnusedParameters": true, + "noFallthroughCasesInSwitch": true, + "allowJs": true, + "incremental": true, + "esModuleInterop": true, + "baseUrl": ".", + "paths": { + "@common": ["common"], + "@common/*": ["common/*"], + "@hooks": ["hooks"], + "@hooks/*": ["hooks/*"], + "@redux": ["redux"], + "@redux/*": ["redux/*"], + "@components/*": ["components/*"], + "@assets/*": ["assets/*"], + "@lib/*": ["lib/*"] + }, + "forceConsistentCasingInFileNames": true + }, + "plugins": [ + { + "name": "next" + } + ], + "include": [ + "next-env.d.ts", + "**/*.ts", + "**/*.tsx", + ".next/types/**/*.ts", + "next.config.mjs" + ], + "exclude": ["node_modules", "target"] +} diff --git a/.archive/workflows/validate.yml b/.archive/workflows/validate.yml new file mode 100644 index 0000000..71b88f1 --- /dev/null +++ b/.archive/workflows/validate.yml @@ -0,0 +1,87 @@ +name: Validate PR +on: + workflow_call: + pull_request: + push: + branches: ['master'] + +concurrency: + group: ${{ github.head_ref || github.run_id }} + cancel-in-progress: true + +env: + CARGO_TERM_COLOR: always + RUST_BACKTRACE: full + # 40 MiB stack + RUST_MIN_STACK: 40971520 + RUST_LOG: 'citadel=warn' + +jobs: + fmt: + name: Cargo Fmt + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v2 + - uses: Avarok-Cybersecurity/gh-actions-deps@master + - run: cargo fmt --check + clippy: + name: Cargo Clippy + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v2 + - uses: Avarok-Cybersecurity/gh-actions-deps@master + - name: setup node + uses: actions/setup-node@v4 + with: + node-version: 20 + - name: install dependencies (ubuntu only) + run: | + sudo apt-get update + sudo apt-get install -y libwebkit2gtk-4.1-dev build-essential curl wget libssl-dev libgtk-3-dev libayatana-appindicator3-dev librsvg2-dev + - name: install frontend dependencies + run: yarn install # change this to npm or pnpm depending on which one you use + - run: cargo clippy --all -- -D warnings + tauri-build: + name: Tauri Build + runs-on: ${{ matrix.os }} + strategy: + matrix: + os: [ubuntu-latest, macos-latest, windows-latest] + steps: + - uses: actions/checkout@v2 + - uses: Avarok-Cybersecurity/gh-actions-deps@master + - run: echo "VCPKG_ROOT=$env:VCPKG_INSTALLATION_ROOT" | Out-File -FilePath $env:GITHUB_ENV -Append + if: startsWith(matrix.os, 'windows') + - run: vcpkg install openssl:x64-windows-static-md + if: startsWith(matrix.os, 'windows') + - name: setup node + uses: actions/setup-node@v4 + with: + node-version: 20 + - name: install dependencies (ubuntu only) + if: startsWith(matrix.os, 'ubuntu') + run: | + sudo apt-get update + sudo apt-get install -y libglvnd-dev libwebkit2gtk-4.1-dev build-essential curl wget libssl-dev libgtk-3-dev libayatana-appindicator3-dev librsvg2-dev + - run: npm install -g bun + - run: cargo install create-tauri-app + - run: cargo install tauri-cli --version 2.0.0-beta.20 + - run: bun i + - uses: tauri-apps/tauri-action@v0 + with: + args: --verbose + eslint: + name: eslint + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v1 + - name: install node v20 + uses: actions/setup-node@v1 + with: + node-version: 20 + - name: yarn install + run: yarn install + - name: eslint + uses: icrawl/action-eslint@v1 + with: + custom-glob: '**/*.{js,ts,tsx}' diff --git a/.github/workflows/validate.yml b/.github/workflows/validate.yml index 5674582..8cafad4 100644 --- a/.github/workflows/validate.yml +++ b/.github/workflows/validate.yml @@ -14,7 +14,7 @@ env: RUST_BACKTRACE: full # 40 MiB stack RUST_MIN_STACK: 40971520 - RUST_LOG: 'citadel=warn' + RUST_LOG: "citadel=warn" jobs: fmt: @@ -23,24 +23,30 @@ jobs: steps: - uses: actions/checkout@v2 - uses: Avarok-Cybersecurity/gh-actions-deps@master - - run: cargo fmt --check + - name: Run Cargo Fmt + run: cargo fmt --check + working-directory: src-tauri + clippy: name: Cargo Clippy runs-on: ubuntu-latest steps: - uses: actions/checkout@v2 - uses: Avarok-Cybersecurity/gh-actions-deps@master - - name: setup node + - name: Setup Node uses: actions/setup-node@v4 with: node-version: 20 - - name: install dependencies (ubuntu only) + - name: Install Dependencies (Ubuntu Only) run: | sudo apt-get update sudo apt-get install -y libwebkit2gtk-4.1-dev build-essential curl wget libssl-dev libgtk-3-dev libayatana-appindicator3-dev librsvg2-dev - - name: install frontend dependencies - run: yarn install # change this to npm or pnpm depending on which one you use - - run: cargo clippy --all -- -D warnings + - name: Install Frontend Dependencies + run: npm i + - name: Run Cargo Clippy + run: cargo clippy --all -- -D warnings + working-directory: src-tauri + tauri-build: name: Tauri Build runs-on: ${{ matrix.os }} @@ -50,38 +56,42 @@ jobs: steps: - uses: actions/checkout@v2 - uses: Avarok-Cybersecurity/gh-actions-deps@master - - run: echo "VCPKG_ROOT=$env:VCPKG_INSTALLATION_ROOT" | Out-File -FilePath $env:GITHUB_ENV -Append - if: startsWith(matrix.os, 'windows') - - run: vcpkg install openssl:x64-windows-static-md - if: startsWith(matrix.os, 'windows') - - name: setup node + - name: Setup Node uses: actions/setup-node@v4 with: node-version: 20 - - name: install dependencies (ubuntu only) + - name: Install Dependencies (Ubuntu Only) if: startsWith(matrix.os, 'ubuntu') run: | sudo apt-get update sudo apt-get install -y libglvnd-dev libwebkit2gtk-4.1-dev build-essential curl wget libssl-dev libgtk-3-dev libayatana-appindicator3-dev librsvg2-dev - - run: npm install -g bun - - run: cargo install create-tauri-app - - run: cargo install tauri-cli --version 2.0.0-beta.20 - - run: bun i - - uses: tauri-apps/tauri-action@v0 - with: - args: --verbose - eslint: - name: eslint + - name: Install Dependencies (Windows Only) + if: startsWith(matrix.os, 'windows') + run: | + vcpkg install openssl:x64-windows-static-md + - run: echo "VCPKG_ROOT=$env:VCPKG_INSTALLATION_ROOT" | Out-File -FilePath $env:GITHUB_ENV -Append + if: startsWith(matrix.os, 'windows') + - name: Install Tauri CLI + run: cargo install tauri-cli --version "^2.0.0-rc" + working-directory: src-tauri + - name: Run Tauri Build + run: cargo tauri build --verbose + working-directory: src-tauri + continue-on-error: true + + jslint: + name: JS lint runs-on: ubuntu-latest steps: - - uses: actions/checkout@v1 - - name: install node v20 - uses: actions/setup-node@v1 - with: - node-version: 20 - - name: yarn install - run: yarn install - - name: eslint - uses: icrawl/action-eslint@v1 - with: - custom-glob: '**/*.{js,ts,tsx}' + - uses: actions/checkout@v2 + - name: Install dependencies + run: | + npm install --global prettier + npm install --global eslint + npm i + + - name: Run Prettier check + run: prettier "." -c + + - name: Run ESLint check + run: eslint "**/*.{js,jsx,ts,tsx}" diff --git a/.gitignore b/.gitignore index 52b2338..30369c6 100644 --- a/.gitignore +++ b/.gitignore @@ -7,24 +7,13 @@ yarn-error.log* pnpm-debug.log* lerna-debug.log* -node_modules/ -out/ -dist/ +node_modules +dist dist-ssr *.local -target/ -debug/ -# These are backup files generated by rustfmt -**/*.rs.bk - -# MSVC Windows builds of rustc generate these, which store debugging information -*.pdb - -/.next/ -./next-env.d.ts # Editor directories and files -.vscode/ +.vscode/* !.vscode/extensions.json .idea .DS_Store @@ -33,9 +22,5 @@ debug/ *.njsproj *.sln *.sw? -src-tauri/gen -src-tauri/target -package-lock.json -yarn.lock -src-tauri/Cargo.lock bun.lockb +.env diff --git a/.prettierignore b/.prettierignore new file mode 100644 index 0000000..adcc60f --- /dev/null +++ b/.prettierignore @@ -0,0 +1,3 @@ +src-tauri/ +.archive/ +node_modules/ diff --git a/.vscode/extensions.json b/.vscode/extensions.json new file mode 100644 index 0000000..24d7cc6 --- /dev/null +++ b/.vscode/extensions.json @@ -0,0 +1,3 @@ +{ + "recommendations": ["tauri-apps.tauri-vscode", "rust-lang.rust-analyzer"] +} diff --git a/README.md b/README.md index d82fecb..102e366 100644 --- a/README.md +++ b/README.md @@ -1,27 +1,7 @@ -# Citadel Workspace +# Tauri + React + Typescript -When it comes to virtual workspace security, don't slack. +This template should help get you started developing with Tauri, React and Typescript in Vite. -Citadel Workspace is a highly cryptographically post-quantum secure work environment for individuals, businesses, and government. By using The Citadel Protocol, a protocol far more secure and adjustable than Signal and other projects, Citadel Workspace technologically stands out. Whether used for casual messaging and/or transferring highly sensitive material (whether through messages or file transfers), Citadel Workspace allows additional layers of encryption to be seamlessly added. Additionally, Citadel Workspaces allows for optional per-message re-keying, the option of pre-shared keys, and much, much more. +## Recommended IDE Setup -All code is free and 100% open-source. - -### Manual Install - -Install `cargo install create-tauri-app` - -Run `cargo install tauri-cli --version 2.0.0-beta.1` - -Install Bun JS runtime dependencies `curl -fsSL https://bun.sh/install | bash` - -Install JS dependencies `bun install` - -### Running - -Running the app from vscode's terminal can lead to an error, try running from your system terminal. - -Run the desktop app with `cargo tauri dev` - -Run the web app with `bun run dev` - -Run Storybook server with `bun run sb` +- [VS Code](https://code.visualstudio.com/) + [Tauri](https://marketplace.visualstudio.com/items?itemName=tauri-apps.tauri-vscode) + [rust-analyzer](https://marketplace.visualstudio.com/items?itemName=rust-lang.rust-analyzer) diff --git a/eslint.config.js b/eslint.config.js new file mode 100644 index 0000000..8bb5daa --- /dev/null +++ b/eslint.config.js @@ -0,0 +1,24 @@ +import pluginJs from "@eslint/js"; +import tseslint from "typescript-eslint"; +import pluginReact from "eslint-plugin-react"; + +export default [ + { + rules: { + "no-unused-vars": "off", + "@typescript-eslint/no-unused-vars": [ + "warn", + { + argsIgnorePattern: "^_[^_].*$|^_$", + varsIgnorePattern: "^_[^_].*$|^_$", + caughtErrorsIgnorePattern: "^_[^_].*$|^_$", + }, + ], + }, + }, + { ignores: [".archive/*", "src-tauri/*"] }, + { files: ["**/*.{js,mjs,cjs,ts,jsx,tsx}"] }, + pluginJs.configs.recommended, + ...tseslint.configs.recommended, + pluginReact.configs.flat.recommended, +]; diff --git a/index.html b/index.html index 61f18fe..91c0d97 100644 --- a/index.html +++ b/index.html @@ -2,12 +2,13 @@ + - Tauri + React + TS + Citadel Workspace
- + diff --git a/justfile b/justfile new file mode 100644 index 0000000..30d3d65 --- /dev/null +++ b/justfile @@ -0,0 +1,29 @@ +set dotenv-load +set shell := ["zsh", "-cu"] + +dev: + just start-servers + cargo tauri dev + +dev-browser: + just start-servers + bun run dev + + +stop-servers: + @echo "Killing existing servers" + + [ ! -f "${INTERNAL_SERVICE_PATH}/.server-pid" ] || { kill $(cat "${INTERNAL_SERVICE_PATH}/.server-pid") && rm "${INTERNAL_SERVICE_PATH}/.server-pid"; } & + [ ! -f "${INTERNAL_SERVICE_PATH}/.service-pid" ] || { kill $(cat "${INTERNAL_SERVICE_PATH}/.service-pid") && rm "${INTERNAL_SERVICE_PATH}/.service-pid"; } & + + +start-servers: + just stop-servers + + @echo "Starting new servers" + + # Start internal service + cd $INTERNAL_SERVICE_PATH; nohup cargo run --bin internal-service -- --bind 127.0.0.1:12345 > internal-service.log 2>&1 &; echo $! > .service-pid + + # Start citadel server + cd $INTERNAL_SERVICE_PATH; nohup cargo run --bin citadel_server -- --bind 127.0.0.1:12349 > citadel-server.log 2>&1 &; echo $! > .server-pid \ No newline at end of file diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 0000000..74b55ce --- /dev/null +++ b/package-lock.json @@ -0,0 +1,1627 @@ +{ + "name": "citadel_workspace", + "version": "0.0.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "citadel_workspace", + "version": "0.0.0", + "dependencies": { + "@tauri-apps/api": "^2.0.0-beta.15", + "@tauri-apps/plugin-shell": ">=2.0.0-beta.0", + "react": "^18.2.0", + "react-dom": "^18.2.0", + "react-modal": "^3.16.1", + "react-router-dom": "^6.25.1", + "react-select": "^5.8.0" + }, + "devDependencies": { + "@tauri-apps/cli": ">=2.0.0-beta.0", + "@types/react": "^18.2.15", + "@types/react-dom": "^18.2.7", + "@types/react-modal": "^3.16.3", + "@vitejs/plugin-react": "^4.2.1", + "typescript": "^5.0.2", + "vite": "^5.0.0" + } + }, + "node_modules/@ampproject/remapping": { + "version": "2.3.0", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.24" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/code-frame": { + "version": "7.24.6", + "license": "MIT", + "dependencies": { + "@babel/highlight": "^7.24.6", + "picocolors": "^1.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/compat-data": { + "version": "7.24.6", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/core": { + "version": "7.24.6", + "dev": true, + "license": "MIT", + "dependencies": { + "@ampproject/remapping": "^2.2.0", + "@babel/code-frame": "^7.24.6", + "@babel/generator": "^7.24.6", + "@babel/helper-compilation-targets": "^7.24.6", + "@babel/helper-module-transforms": "^7.24.6", + "@babel/helpers": "^7.24.6", + "@babel/parser": "^7.24.6", + "@babel/template": "^7.24.6", + "@babel/traverse": "^7.24.6", + "@babel/types": "^7.24.6", + "convert-source-map": "^2.0.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.2.3", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/babel" + } + }, + "node_modules/@babel/generator": { + "version": "7.24.6", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.24.6", + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.25", + "jsesc": "^2.5.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-compilation-targets": { + "version": "7.24.6", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/compat-data": "^7.24.6", + "@babel/helper-validator-option": "^7.24.6", + "browserslist": "^4.22.2", + "lru-cache": "^5.1.1", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-environment-visitor": { + "version": "7.24.6", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-function-name": { + "version": "7.24.6", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/template": "^7.24.6", + "@babel/types": "^7.24.6" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-hoist-variables": { + "version": "7.24.6", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.24.6" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-imports": { + "version": "7.24.6", + "license": "MIT", + "dependencies": { + "@babel/types": "^7.24.6" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-transforms": { + "version": "7.24.6", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-environment-visitor": "^7.24.6", + "@babel/helper-module-imports": "^7.24.6", + "@babel/helper-simple-access": "^7.24.6", + "@babel/helper-split-export-declaration": "^7.24.6", + "@babel/helper-validator-identifier": "^7.24.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-plugin-utils": { + "version": "7.24.6", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-simple-access": { + "version": "7.24.6", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.24.6" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-split-export-declaration": { + "version": "7.24.6", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.24.6" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-string-parser": { + "version": "7.24.6", + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-identifier": { + "version": "7.24.6", + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-option": { + "version": "7.24.6", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helpers": { + "version": "7.24.6", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/template": "^7.24.6", + "@babel/types": "^7.24.6" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/highlight": { + "version": "7.24.6", + "license": "MIT", + "dependencies": { + "@babel/helper-validator-identifier": "^7.24.6", + "chalk": "^2.4.2", + "js-tokens": "^4.0.0", + "picocolors": "^1.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/parser": { + "version": "7.24.6", + "dev": true, + "license": "MIT", + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/plugin-transform-react-jsx-self": { + "version": "7.24.6", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-react-jsx-source": { + "version": "7.24.6", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/runtime": { + "version": "7.24.8", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.24.8.tgz", + "integrity": "sha512-5F7SDGs1T72ZczbRwbGO9lQi0NLjQxzl6i4lJxLxfW9U5UluCSyEJeniWvnhl3/euNiqQVbo8zruhsDfid0esA==", + "dependencies": { + "regenerator-runtime": "^0.14.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/template": { + "version": "7.24.6", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.24.6", + "@babel/parser": "^7.24.6", + "@babel/types": "^7.24.6" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse": { + "version": "7.24.6", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.24.6", + "@babel/generator": "^7.24.6", + "@babel/helper-environment-visitor": "^7.24.6", + "@babel/helper-function-name": "^7.24.6", + "@babel/helper-hoist-variables": "^7.24.6", + "@babel/helper-split-export-declaration": "^7.24.6", + "@babel/parser": "^7.24.6", + "@babel/types": "^7.24.6", + "debug": "^4.3.1", + "globals": "^11.1.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/types": { + "version": "7.24.6", + "license": "MIT", + "dependencies": { + "@babel/helper-string-parser": "^7.24.6", + "@babel/helper-validator-identifier": "^7.24.6", + "to-fast-properties": "^2.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@emotion/babel-plugin": { + "version": "11.11.0", + "resolved": "https://registry.npmjs.org/@emotion/babel-plugin/-/babel-plugin-11.11.0.tgz", + "integrity": "sha512-m4HEDZleaaCH+XgDDsPF15Ht6wTLsgDTeR3WYj9Q/k76JtWhrJjcP4+/XlG8LGT/Rol9qUfOIztXeA84ATpqPQ==", + "dependencies": { + "@babel/helper-module-imports": "^7.16.7", + "@babel/runtime": "^7.18.3", + "@emotion/hash": "^0.9.1", + "@emotion/memoize": "^0.8.1", + "@emotion/serialize": "^1.1.2", + "babel-plugin-macros": "^3.1.0", + "convert-source-map": "^1.5.0", + "escape-string-regexp": "^4.0.0", + "find-root": "^1.1.0", + "source-map": "^0.5.7", + "stylis": "4.2.0" + } + }, + "node_modules/@emotion/babel-plugin/node_modules/convert-source-map": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", + "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==" + }, + "node_modules/@emotion/babel-plugin/node_modules/escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@emotion/cache": { + "version": "11.11.0", + "resolved": "https://registry.npmjs.org/@emotion/cache/-/cache-11.11.0.tgz", + "integrity": "sha512-P34z9ssTCBi3e9EI1ZsWpNHcfY1r09ZO0rZbRO2ob3ZQMnFI35jB536qoXbkdesr5EUhYi22anuEJuyxifaqAQ==", + "dependencies": { + "@emotion/memoize": "^0.8.1", + "@emotion/sheet": "^1.2.2", + "@emotion/utils": "^1.2.1", + "@emotion/weak-memoize": "^0.3.1", + "stylis": "4.2.0" + } + }, + "node_modules/@emotion/hash": { + "version": "0.9.1", + "resolved": "https://registry.npmjs.org/@emotion/hash/-/hash-0.9.1.tgz", + "integrity": "sha512-gJB6HLm5rYwSLI6PQa+X1t5CFGrv1J1TWG+sOyMCeKz2ojaj6Fnl/rZEspogG+cvqbt4AE/2eIyD2QfLKTBNlQ==" + }, + "node_modules/@emotion/memoize": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/@emotion/memoize/-/memoize-0.8.1.tgz", + "integrity": "sha512-W2P2c/VRW1/1tLox0mVUalvnWXxavmv/Oum2aPsRcoDJuob75FC3Y8FbpfLwUegRcxINtGUMPq0tFCvYNTBXNA==" + }, + "node_modules/@emotion/react": { + "version": "11.11.4", + "resolved": "https://registry.npmjs.org/@emotion/react/-/react-11.11.4.tgz", + "integrity": "sha512-t8AjMlF0gHpvvxk5mAtCqR4vmxiGHCeJBaQO6gncUSdklELOgtwjerNY2yuJNfwnc6vi16U/+uMF+afIawJ9iw==", + "dependencies": { + "@babel/runtime": "^7.18.3", + "@emotion/babel-plugin": "^11.11.0", + "@emotion/cache": "^11.11.0", + "@emotion/serialize": "^1.1.3", + "@emotion/use-insertion-effect-with-fallbacks": "^1.0.1", + "@emotion/utils": "^1.2.1", + "@emotion/weak-memoize": "^0.3.1", + "hoist-non-react-statics": "^3.3.1" + }, + "peerDependencies": { + "react": ">=16.8.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@emotion/serialize": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/@emotion/serialize/-/serialize-1.1.4.tgz", + "integrity": "sha512-RIN04MBT8g+FnDwgvIUi8czvr1LU1alUMI05LekWB5DGyTm8cCBMCRpq3GqaiyEDRptEXOyXnvZ58GZYu4kBxQ==", + "dependencies": { + "@emotion/hash": "^0.9.1", + "@emotion/memoize": "^0.8.1", + "@emotion/unitless": "^0.8.1", + "@emotion/utils": "^1.2.1", + "csstype": "^3.0.2" + } + }, + "node_modules/@emotion/sheet": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/@emotion/sheet/-/sheet-1.2.2.tgz", + "integrity": "sha512-0QBtGvaqtWi+nx6doRwDdBIzhNdZrXUppvTM4dtZZWEGTXL/XE/yJxLMGlDT1Gt+UHH5IX1n+jkXyytE/av7OA==" + }, + "node_modules/@emotion/unitless": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/@emotion/unitless/-/unitless-0.8.1.tgz", + "integrity": "sha512-KOEGMu6dmJZtpadb476IsZBclKvILjopjUii3V+7MnXIQCYh8W3NgNcgwo21n9LXZX6EDIKvqfjYxXebDwxKmQ==" + }, + "node_modules/@emotion/use-insertion-effect-with-fallbacks": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@emotion/use-insertion-effect-with-fallbacks/-/use-insertion-effect-with-fallbacks-1.0.1.tgz", + "integrity": "sha512-jT/qyKZ9rzLErtrjGgdkMBn2OP8wl0G3sQlBb3YPryvKHsjvINUhVaPFfP+fpBcOkmrVOVEEHQFJ7nbj2TH2gw==", + "peerDependencies": { + "react": ">=16.8.0" + } + }, + "node_modules/@emotion/utils": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@emotion/utils/-/utils-1.2.1.tgz", + "integrity": "sha512-Y2tGf3I+XVnajdItskUCn6LX+VUDmP6lTL4fcqsXAv43dnlbZiuW4MWQW38rW/BVWSE7Q/7+XQocmpnRYILUmg==" + }, + "node_modules/@emotion/weak-memoize": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/@emotion/weak-memoize/-/weak-memoize-0.3.1.tgz", + "integrity": "sha512-EsBwpc7hBUJWAsNPBmJy4hxWx12v6bshQsldrVmjxJoc3isbxhOrF2IcCpaXxfvq03NwkI7sbsOLXbYuqF/8Ww==" + }, + "node_modules/@esbuild/darwin-arm64": { + "version": "0.20.2", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@floating-ui/core": { + "version": "1.6.4", + "resolved": "https://registry.npmjs.org/@floating-ui/core/-/core-1.6.4.tgz", + "integrity": "sha512-a4IowK4QkXl4SCWTGUR0INAfEOX3wtsYw3rKK5InQEHMGObkR8Xk44qYQD9P4r6HHw0iIfK6GUKECmY8sTkqRA==", + "dependencies": { + "@floating-ui/utils": "^0.2.4" + } + }, + "node_modules/@floating-ui/dom": { + "version": "1.6.7", + "resolved": "https://registry.npmjs.org/@floating-ui/dom/-/dom-1.6.7.tgz", + "integrity": "sha512-wmVfPG5o2xnKDU4jx/m4w5qva9FWHcnZ8BvzEe90D/RpwsJaTAVYPEPdQ8sbr/N8zZTAHlZUTQdqg8ZUbzHmng==", + "dependencies": { + "@floating-ui/core": "^1.6.0", + "@floating-ui/utils": "^0.2.4" + } + }, + "node_modules/@floating-ui/utils": { + "version": "0.2.4", + "resolved": "https://registry.npmjs.org/@floating-ui/utils/-/utils-0.2.4.tgz", + "integrity": "sha512-dWO2pw8hhi+WrXq1YJy2yCuWoL20PddgGaqTgVe4cOS9Q6qklXCiA1tJEqX6BEwRNSCP84/afac9hd4MS+zEUA==" + }, + "node_modules/@jridgewell/gen-mapping": { + "version": "0.3.5", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/set-array": "^1.2.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.24" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.2", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/set-array": { + "version": "1.2.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.4.15", + "dev": true, + "license": "MIT" + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.25", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } + }, + "node_modules/@remix-run/router": { + "version": "1.18.0", + "resolved": "https://registry.npmjs.org/@remix-run/router/-/router-1.18.0.tgz", + "integrity": "sha512-L3jkqmqoSVBVKHfpGZmLrex0lxR5SucGA0sUfFzGctehw+S/ggL9L/0NnC5mw6P8HUWpFZ3nQw3cRApjjWx9Sw==", + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@rollup/rollup-darwin-arm64": { + "version": "4.18.0", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@tauri-apps/api": { + "version": "2.0.0-beta.15", + "resolved": "https://registry.npmjs.org/@tauri-apps/api/-/api-2.0.0-beta.15.tgz", + "integrity": "sha512-H9w6iISmR+NvH4XuyCZB4zDN10tf9RFt6i/9JHEjaRhAowdAaJ+oiXq/3kedizNClHMtbTQ5j0oqDVPkZDAI8g==", + "engines": { + "node": ">= 18.18", + "npm": ">= 6.6.0", + "yarn": ">= 1.19.1" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/tauri" + } + }, + "node_modules/@tauri-apps/cli": { + "version": "2.0.0-beta.20", + "dev": true, + "license": "Apache-2.0 OR MIT", + "bin": { + "tauri": "tauri.js" + }, + "engines": { + "node": ">= 10" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/tauri" + }, + "optionalDependencies": { + "@tauri-apps/cli-darwin-arm64": "2.0.0-beta.20", + "@tauri-apps/cli-darwin-x64": "2.0.0-beta.20", + "@tauri-apps/cli-linux-arm-gnueabihf": "2.0.0-beta.20", + "@tauri-apps/cli-linux-arm64-gnu": "2.0.0-beta.20", + "@tauri-apps/cli-linux-arm64-musl": "2.0.0-beta.20", + "@tauri-apps/cli-linux-x64-gnu": "2.0.0-beta.20", + "@tauri-apps/cli-linux-x64-musl": "2.0.0-beta.20", + "@tauri-apps/cli-win32-arm64-msvc": "2.0.0-beta.20", + "@tauri-apps/cli-win32-ia32-msvc": "2.0.0-beta.20", + "@tauri-apps/cli-win32-x64-msvc": "2.0.0-beta.20" + } + }, + "node_modules/@tauri-apps/cli-darwin-arm64": { + "version": "2.0.0-beta.20", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tauri-apps/plugin-shell": { + "version": "2.0.0-beta.6", + "license": "MIT or APACHE-2.0", + "dependencies": { + "@tauri-apps/api": "2.0.0-beta.13" + } + }, + "node_modules/@tauri-apps/plugin-shell/node_modules/@tauri-apps/api": { + "version": "2.0.0-beta.13", + "resolved": "https://registry.npmjs.org/@tauri-apps/api/-/api-2.0.0-beta.13.tgz", + "integrity": "sha512-Np1opKANzRMF3lgJ9gDquBCB9SxlE2lRmNpVx1+L6RyzAmigkuh0ZulT5jMnDA3JLsuSDU135r/s4t/Pmx4atg==", + "engines": { + "node": ">= 18", + "npm": ">= 6.6.0", + "yarn": ">= 1.19.1" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/tauri" + } + }, + "node_modules/@types/babel__core": { + "version": "7.20.5", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.20.7", + "@babel/types": "^7.20.7", + "@types/babel__generator": "*", + "@types/babel__template": "*", + "@types/babel__traverse": "*" + } + }, + "node_modules/@types/babel__generator": { + "version": "7.6.8", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.0.0" + } + }, + "node_modules/@types/babel__template": { + "version": "7.4.4", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.1.0", + "@babel/types": "^7.0.0" + } + }, + "node_modules/@types/babel__traverse": { + "version": "7.20.6", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.20.7" + } + }, + "node_modules/@types/estree": { + "version": "1.0.5", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/parse-json": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.2.tgz", + "integrity": "sha512-dISoDXWWQwUquiKsyZ4Ng+HX2KsPL7LyHKHQwgGFEA3IaKac4Obd+h2a/a6waisAoepJlBcx9paWqjA8/HVjCw==" + }, + "node_modules/@types/prop-types": { + "version": "15.7.12", + "license": "MIT" + }, + "node_modules/@types/react": { + "version": "18.3.3", + "license": "MIT", + "dependencies": { + "@types/prop-types": "*", + "csstype": "^3.0.2" + } + }, + "node_modules/@types/react-dom": { + "version": "18.3.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/react": "*" + } + }, + "node_modules/@types/react-modal": { + "version": "3.16.3", + "resolved": "https://registry.npmjs.org/@types/react-modal/-/react-modal-3.16.3.tgz", + "integrity": "sha512-xXuGavyEGaFQDgBv4UVm8/ZsG+qxeQ7f77yNrW3n+1J6XAstUy5rYHeIHPh1KzsGc6IkCIdu6lQ2xWzu1jBTLg==", + "dev": true, + "dependencies": { + "@types/react": "*" + } + }, + "node_modules/@types/react-transition-group": { + "version": "4.4.10", + "resolved": "https://registry.npmjs.org/@types/react-transition-group/-/react-transition-group-4.4.10.tgz", + "integrity": "sha512-hT/+s0VQs2ojCX823m60m5f0sL5idt9SO6Tj6Dg+rdphGPIeJbJ6CxvBYkgkGKrYeDjvIpKTR38UzmtHJOGW3Q==", + "dependencies": { + "@types/react": "*" + } + }, + "node_modules/@vitejs/plugin-react": { + "version": "4.3.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/core": "^7.24.5", + "@babel/plugin-transform-react-jsx-self": "^7.24.5", + "@babel/plugin-transform-react-jsx-source": "^7.24.1", + "@types/babel__core": "^7.20.5", + "react-refresh": "^0.14.2" + }, + "engines": { + "node": "^14.18.0 || >=16.0.0" + }, + "peerDependencies": { + "vite": "^4.2.0 || ^5.0.0" + } + }, + "node_modules/ansi-styles": { + "version": "3.2.1", + "license": "MIT", + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/babel-plugin-macros": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/babel-plugin-macros/-/babel-plugin-macros-3.1.0.tgz", + "integrity": "sha512-Cg7TFGpIr01vOQNODXOOaGz2NpCU5gl8x1qJFbb6hbZxR7XrcE2vtbAsTAbJ7/xwJtUuJEw8K8Zr/AE0LHlesg==", + "dependencies": { + "@babel/runtime": "^7.12.5", + "cosmiconfig": "^7.0.0", + "resolve": "^1.19.0" + }, + "engines": { + "node": ">=10", + "npm": ">=6" + } + }, + "node_modules/browserslist": { + "version": "4.23.0", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "caniuse-lite": "^1.0.30001587", + "electron-to-chromium": "^1.4.668", + "node-releases": "^2.0.14", + "update-browserslist-db": "^1.0.13" + }, + "bin": { + "browserslist": "cli.js" + }, + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + } + }, + "node_modules/callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "engines": { + "node": ">=6" + } + }, + "node_modules/caniuse-lite": { + "version": "1.0.30001627", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/caniuse-lite" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "CC-BY-4.0" + }, + "node_modules/chalk": { + "version": "2.4.2", + "license": "MIT", + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/color-convert": { + "version": "1.9.3", + "license": "MIT", + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/color-name": { + "version": "1.1.3", + "license": "MIT" + }, + "node_modules/convert-source-map": { + "version": "2.0.0", + "dev": true, + "license": "MIT" + }, + "node_modules/cosmiconfig": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.1.0.tgz", + "integrity": "sha512-AdmX6xUzdNASswsFtmwSt7Vj8po9IuqXm0UXz7QKPuEUmPB4XyjGfaAr2PSuELMwkRMVH1EpIkX5bTZGRB3eCA==", + "dependencies": { + "@types/parse-json": "^4.0.0", + "import-fresh": "^3.2.1", + "parse-json": "^5.0.0", + "path-type": "^4.0.0", + "yaml": "^1.10.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/csstype": { + "version": "3.1.3", + "license": "MIT" + }, + "node_modules/debug": { + "version": "4.3.5", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/dom-helpers": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/dom-helpers/-/dom-helpers-5.2.1.tgz", + "integrity": "sha512-nRCa7CK3VTrM2NmGkIy4cbK7IZlgBE/PYMn55rrXefr5xXDP0LdtfPnblFDoVdcAfslJ7or6iqAUnx0CCGIWQA==", + "dependencies": { + "@babel/runtime": "^7.8.7", + "csstype": "^3.0.2" + } + }, + "node_modules/electron-to-chromium": { + "version": "1.4.788", + "dev": true, + "license": "ISC" + }, + "node_modules/error-ex": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", + "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", + "dependencies": { + "is-arrayish": "^0.2.1" + } + }, + "node_modules/esbuild": { + "version": "0.20.2", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=12" + }, + "optionalDependencies": { + "@esbuild/aix-ppc64": "0.20.2", + "@esbuild/android-arm": "0.20.2", + "@esbuild/android-arm64": "0.20.2", + "@esbuild/android-x64": "0.20.2", + "@esbuild/darwin-arm64": "0.20.2", + "@esbuild/darwin-x64": "0.20.2", + "@esbuild/freebsd-arm64": "0.20.2", + "@esbuild/freebsd-x64": "0.20.2", + "@esbuild/linux-arm": "0.20.2", + "@esbuild/linux-arm64": "0.20.2", + "@esbuild/linux-ia32": "0.20.2", + "@esbuild/linux-loong64": "0.20.2", + "@esbuild/linux-mips64el": "0.20.2", + "@esbuild/linux-ppc64": "0.20.2", + "@esbuild/linux-riscv64": "0.20.2", + "@esbuild/linux-s390x": "0.20.2", + "@esbuild/linux-x64": "0.20.2", + "@esbuild/netbsd-x64": "0.20.2", + "@esbuild/openbsd-x64": "0.20.2", + "@esbuild/sunos-x64": "0.20.2", + "@esbuild/win32-arm64": "0.20.2", + "@esbuild/win32-ia32": "0.20.2", + "@esbuild/win32-x64": "0.20.2" + } + }, + "node_modules/escalade": { + "version": "3.1.2", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/escape-string-regexp": { + "version": "1.0.5", + "license": "MIT", + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/exenv": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/exenv/-/exenv-1.2.2.tgz", + "integrity": "sha512-Z+ktTxTwv9ILfgKCk32OX3n/doe+OcLTRtqK9pcL+JsP3J1/VW8Uvl4ZjLlKqeW4rzK4oesDOGMEMRIZqtP4Iw==" + }, + "node_modules/find-root": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/find-root/-/find-root-1.1.0.tgz", + "integrity": "sha512-NKfW6bec6GfKc0SGx1e07QZY9PE99u0Bft/0rzSD5k3sO/vwkVUpDUKVm5Gpp5Ue3YfShPFTX2070tDs5kB9Ng==" + }, + "node_modules/fsevents": { + "version": "2.3.3", + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/function-bind": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/gensync": { + "version": "1.0.0-beta.2", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/globals": { + "version": "11.12.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/has-flag": { + "version": "3.0.0", + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/hasown": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", + "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/hoist-non-react-statics": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz", + "integrity": "sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==", + "dependencies": { + "react-is": "^16.7.0" + } + }, + "node_modules/import-fresh": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", + "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", + "dependencies": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==" + }, + "node_modules/is-core-module": { + "version": "2.15.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.15.0.tgz", + "integrity": "sha512-Dd+Lb2/zvk9SKy1TGCt1wFJFo/MWBPMX5x7KcvLajWTGuomczdQX61PvY5yK6SVACwpoexWo81IfFyoKY2QnTA==", + "dependencies": { + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/js-tokens": { + "version": "4.0.0", + "license": "MIT" + }, + "node_modules/jsesc": { + "version": "2.5.2", + "dev": true, + "license": "MIT", + "bin": { + "jsesc": "bin/jsesc" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/json-parse-even-better-errors": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", + "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==" + }, + "node_modules/json5": { + "version": "2.2.3", + "dev": true, + "license": "MIT", + "bin": { + "json5": "lib/cli.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/lines-and-columns": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", + "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==" + }, + "node_modules/loose-envify": { + "version": "1.4.0", + "license": "MIT", + "dependencies": { + "js-tokens": "^3.0.0 || ^4.0.0" + }, + "bin": { + "loose-envify": "cli.js" + } + }, + "node_modules/lru-cache": { + "version": "5.1.1", + "dev": true, + "license": "ISC", + "dependencies": { + "yallist": "^3.0.2" + } + }, + "node_modules/memoize-one": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/memoize-one/-/memoize-one-6.0.0.tgz", + "integrity": "sha512-rkpe71W0N0c0Xz6QD0eJETuWAJGnJ9afsl1srmwPrI+yBCkge5EycXXbYRyvL29zZVUWQCY7InPRCv3GDXuZNw==" + }, + "node_modules/ms": { + "version": "2.1.2", + "dev": true, + "license": "MIT" + }, + "node_modules/nanoid": { + "version": "3.3.7", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, + "node_modules/node-releases": { + "version": "2.0.14", + "dev": true, + "license": "MIT" + }, + "node_modules/object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/parent-module": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "dependencies": { + "callsites": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/parse-json": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", + "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", + "dependencies": { + "@babel/code-frame": "^7.0.0", + "error-ex": "^1.3.1", + "json-parse-even-better-errors": "^2.3.0", + "lines-and-columns": "^1.1.6" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==" + }, + "node_modules/path-type": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", + "engines": { + "node": ">=8" + } + }, + "node_modules/picocolors": { + "version": "1.0.1", + "license": "ISC" + }, + "node_modules/postcss": { + "version": "8.4.38", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "nanoid": "^3.3.7", + "picocolors": "^1.0.0", + "source-map-js": "^1.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "node_modules/prop-types": { + "version": "15.8.1", + "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz", + "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==", + "dependencies": { + "loose-envify": "^1.4.0", + "object-assign": "^4.1.1", + "react-is": "^16.13.1" + } + }, + "node_modules/react": { + "version": "18.3.1", + "license": "MIT", + "dependencies": { + "loose-envify": "^1.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/react-dom": { + "version": "18.3.1", + "license": "MIT", + "dependencies": { + "loose-envify": "^1.1.0", + "scheduler": "^0.23.2" + }, + "peerDependencies": { + "react": "^18.3.1" + } + }, + "node_modules/react-is": { + "version": "16.13.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", + "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==" + }, + "node_modules/react-lifecycles-compat": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/react-lifecycles-compat/-/react-lifecycles-compat-3.0.4.tgz", + "integrity": "sha512-fBASbA6LnOU9dOU2eW7aQ8xmYBSXUIWr+UmF9b1efZBazGNO+rcXT/icdKnYm2pTwcRylVUYwW7H1PHfLekVzA==" + }, + "node_modules/react-modal": { + "version": "3.16.1", + "resolved": "https://registry.npmjs.org/react-modal/-/react-modal-3.16.1.tgz", + "integrity": "sha512-VStHgI3BVcGo7OXczvnJN7yT2TWHJPDXZWyI/a0ssFNhGZWsPmB8cF0z33ewDXq4VfYMO1vXgiv/g8Nj9NDyWg==", + "dependencies": { + "exenv": "^1.2.0", + "prop-types": "^15.7.2", + "react-lifecycles-compat": "^3.0.0", + "warning": "^4.0.3" + }, + "engines": { + "node": ">=8" + }, + "peerDependencies": { + "react": "^0.14.0 || ^15.0.0 || ^16 || ^17 || ^18", + "react-dom": "^0.14.0 || ^15.0.0 || ^16 || ^17 || ^18" + } + }, + "node_modules/react-refresh": { + "version": "0.14.2", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/react-router": { + "version": "6.25.1", + "resolved": "https://registry.npmjs.org/react-router/-/react-router-6.25.1.tgz", + "integrity": "sha512-u8ELFr5Z6g02nUtpPAggP73Jigj1mRePSwhS/2nkTrlPU5yEkH1vYzWNyvSnSzeeE2DNqWdH+P8OhIh9wuXhTw==", + "dependencies": { + "@remix-run/router": "1.18.0" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "react": ">=16.8" + } + }, + "node_modules/react-router-dom": { + "version": "6.25.1", + "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-6.25.1.tgz", + "integrity": "sha512-0tUDpbFvk35iv+N89dWNrJp+afLgd+y4VtorJZuOCXK0kkCWjEvb3vTJM++SYvMEpbVwXKf3FjeVveVEb6JpDQ==", + "dependencies": { + "@remix-run/router": "1.18.0", + "react-router": "6.25.1" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "react": ">=16.8", + "react-dom": ">=16.8" + } + }, + "node_modules/react-select": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/react-select/-/react-select-5.8.0.tgz", + "integrity": "sha512-TfjLDo58XrhP6VG5M/Mi56Us0Yt8X7xD6cDybC7yoRMUNm7BGO7qk8J0TLQOua/prb8vUOtsfnXZwfm30HGsAA==", + "dependencies": { + "@babel/runtime": "^7.12.0", + "@emotion/cache": "^11.4.0", + "@emotion/react": "^11.8.1", + "@floating-ui/dom": "^1.0.1", + "@types/react-transition-group": "^4.4.0", + "memoize-one": "^6.0.0", + "prop-types": "^15.6.0", + "react-transition-group": "^4.3.0", + "use-isomorphic-layout-effect": "^1.1.2" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0", + "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0" + } + }, + "node_modules/react-transition-group": { + "version": "4.4.5", + "resolved": "https://registry.npmjs.org/react-transition-group/-/react-transition-group-4.4.5.tgz", + "integrity": "sha512-pZcd1MCJoiKiBR2NRxeCRg13uCXbydPnmB4EOeRrY7480qNWO8IIgQG6zlDkm6uRMsURXPuKq0GWtiM59a5Q6g==", + "dependencies": { + "@babel/runtime": "^7.5.5", + "dom-helpers": "^5.0.1", + "loose-envify": "^1.4.0", + "prop-types": "^15.6.2" + }, + "peerDependencies": { + "react": ">=16.6.0", + "react-dom": ">=16.6.0" + } + }, + "node_modules/regenerator-runtime": { + "version": "0.14.1", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz", + "integrity": "sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==" + }, + "node_modules/resolve": { + "version": "1.22.8", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz", + "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==", + "dependencies": { + "is-core-module": "^2.13.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "engines": { + "node": ">=4" + } + }, + "node_modules/rollup": { + "version": "4.18.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/estree": "1.0.5" + }, + "bin": { + "rollup": "dist/bin/rollup" + }, + "engines": { + "node": ">=18.0.0", + "npm": ">=8.0.0" + }, + "optionalDependencies": { + "@rollup/rollup-android-arm-eabi": "4.18.0", + "@rollup/rollup-android-arm64": "4.18.0", + "@rollup/rollup-darwin-arm64": "4.18.0", + "@rollup/rollup-darwin-x64": "4.18.0", + "@rollup/rollup-linux-arm-gnueabihf": "4.18.0", + "@rollup/rollup-linux-arm-musleabihf": "4.18.0", + "@rollup/rollup-linux-arm64-gnu": "4.18.0", + "@rollup/rollup-linux-arm64-musl": "4.18.0", + "@rollup/rollup-linux-powerpc64le-gnu": "4.18.0", + "@rollup/rollup-linux-riscv64-gnu": "4.18.0", + "@rollup/rollup-linux-s390x-gnu": "4.18.0", + "@rollup/rollup-linux-x64-gnu": "4.18.0", + "@rollup/rollup-linux-x64-musl": "4.18.0", + "@rollup/rollup-win32-arm64-msvc": "4.18.0", + "@rollup/rollup-win32-ia32-msvc": "4.18.0", + "@rollup/rollup-win32-x64-msvc": "4.18.0", + "fsevents": "~2.3.2" + } + }, + "node_modules/scheduler": { + "version": "0.23.2", + "license": "MIT", + "dependencies": { + "loose-envify": "^1.1.0" + } + }, + "node_modules/semver": { + "version": "6.3.1", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/source-map-js": { + "version": "1.2.0", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/stylis": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/stylis/-/stylis-4.2.0.tgz", + "integrity": "sha512-Orov6g6BB1sDfYgzWfTHDOxamtX1bE/zo104Dh9e6fqJ3PooipYyfJ0pUmrZO2wAvO8YbEyeFrkV91XTsGMSrw==" + }, + "node_modules/supports-color": { + "version": "5.5.0", + "license": "MIT", + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/to-fast-properties": { + "version": "2.0.0", + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/typescript": { + "version": "5.4.5", + "dev": true, + "license": "Apache-2.0", + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=14.17" + } + }, + "node_modules/update-browserslist-db": { + "version": "1.0.16", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "escalade": "^3.1.2", + "picocolors": "^1.0.1" + }, + "bin": { + "update-browserslist-db": "cli.js" + }, + "peerDependencies": { + "browserslist": ">= 4.21.0" + } + }, + "node_modules/use-isomorphic-layout-effect": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/use-isomorphic-layout-effect/-/use-isomorphic-layout-effect-1.1.2.tgz", + "integrity": "sha512-49L8yCO3iGT/ZF9QttjwLF/ZD9Iwto5LnH5LmEdk/6cFmXddqi2ulF0edxTwjj+7mqvpVVGQWvbXZdn32wRSHA==", + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/vite": { + "version": "5.2.12", + "dev": true, + "license": "MIT", + "dependencies": { + "esbuild": "^0.20.1", + "postcss": "^8.4.38", + "rollup": "^4.13.0" + }, + "bin": { + "vite": "bin/vite.js" + }, + "engines": { + "node": "^18.0.0 || >=20.0.0" + }, + "funding": { + "url": "https://github.com/vitejs/vite?sponsor=1" + }, + "optionalDependencies": { + "fsevents": "~2.3.3" + }, + "peerDependencies": { + "@types/node": "^18.0.0 || >=20.0.0", + "less": "*", + "lightningcss": "^1.21.0", + "sass": "*", + "stylus": "*", + "sugarss": "*", + "terser": "^5.4.0" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + }, + "less": { + "optional": true + }, + "lightningcss": { + "optional": true + }, + "sass": { + "optional": true + }, + "stylus": { + "optional": true + }, + "sugarss": { + "optional": true + }, + "terser": { + "optional": true + } + } + }, + "node_modules/warning": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/warning/-/warning-4.0.3.tgz", + "integrity": "sha512-rpJyN222KWIvHJ/F53XSZv0Zl/accqHR8et1kpaMTD/fLCRxtV8iX8czMzY7sVZupTI3zcUTg8eycS2kNF9l6w==", + "dependencies": { + "loose-envify": "^1.0.0" + } + }, + "node_modules/yallist": { + "version": "3.1.1", + "dev": true, + "license": "ISC" + }, + "node_modules/yaml": { + "version": "1.10.2", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", + "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", + "engines": { + "node": ">= 6" + } + } + } +} diff --git a/package.json b/package.json index ab6ac6a..496a8a7 100644 --- a/package.json +++ b/package.json @@ -4,99 +4,32 @@ "version": "0.0.0", "type": "module", "scripts": { - "dev": "next dev -p 1420", - "build": "next build", - "start": "next start", - "lint": "next lint", - "tauri": "tauri", - "test": "jest", - "prepare": "husky install", - "sb": "storybook dev -p 6006", - "build-storybook": "storybook build", - "storybook": "storybook dev -p 6006" + "dev": "vite", + "build": "tsc && vite build", + "preview": "vite preview", + "tauri": "tauri" }, "dependencies": { - "@headlessui/react": "^1.7.15", - "@heroicons/react": "^2.0.18", - "@radix-ui/react-icons": "^1.3.0", - "@radix-ui/react-select": "^1.2.2", - "@reduxjs/toolkit": "^1.9.5", - "@storybook/addon-postcss": "^2.0.0", - "@storybook/builder-webpack5": "^7.0.23", - "@tailwindcss/forms": "^0.5.3", - "@tauri-apps/api": ">=2.0.0-beta.3", + "@tauri-apps/api": "^2.0.0-beta.15", "@tauri-apps/plugin-shell": ">=2.0.0-beta.0", - "@typescript-eslint/eslint-plugin": "^5.59.2", - "@typescript-eslint/parser": "^5.59.2", - "@uidotdev/usehooks": "^2.0.1", - "autoprefixer": "^10.4.14", - "axios": "^1.4.0", - "class-variance-authority": "^0.6.0", - "classnames": "^2.3.2", - "clsx": "^1.2.1", - "dayjs": "^1.11.8", - "eslint": "^8.40.0", - "eslint-config-prettier": "^8.8.0", - "flowbite": "^1.6.5", - "flowbite-react": "^0.4.9", - "install": "^0.13.0", - "lint-staged": "^13.2.2", - "lossless-json": "^4.0.1", - "lucide-react": "^0.248.0", - "next": "^14.1.0", - "npm": "^9.7.2", - "postcss": "^8.4.23", - "prettier": "^2.8.8", "react": "^18.2.0", "react-dom": "^18.2.0", - "react-loader-spinner": "^6.1.6", - "react-redux": "^8.1.1", - "redux": "^4.2.1", - "redux-devtools-extension": "^2.13.9", - "swr": "^2.1.5", - "tailwind-merge": "^1.13.2", - "tailwindcss": "^3.3.2", - "tailwindcss-animate": "^1.0.6", - "uuidv4": "^6.2.13" + "react-modal": "^3.16.1", + "react-router-dom": "^6.25.1", + "react-select": "^5.8.0" }, "devDependencies": { - "@storybook/addon-essentials": "^7.0.23", - "@storybook/addon-interactions": "^7.0.23", - "@storybook/addon-links": "^7.0.23", - "@storybook/blocks": "^7.0.23", - "@storybook/nextjs": "^7.0.23", - "@storybook/react": "^7.0.23", - "@storybook/testing-library": "^0.0.14-next.2", + "@eslint/js": "^9.9.0", "@tauri-apps/cli": ">=2.0.0-beta.0", - "@types/jest": "^29.5.1", - "@types/node": "^18.7.10", "@types/react": "^18.2.15", "@types/react-dom": "^18.2.7", + "@types/react-modal": "^3.16.3", "@vitejs/plugin-react": "^4.2.1", - "eslint-plugin-storybook": "^0.6.12", - "husky": "^8.0.0", - "internal-ip": "^8.0.0", - "jest": "^29.5.0", - "storybook": "^7.0.23", - "tsconfig-paths-webpack-plugin": "^4.0.1", + "eslint": "^9.9.0", + "eslint-plugin-react": "^7.35.0", + "globals": "^15.9.0", "typescript": "^5.0.2", + "typescript-eslint": "^8.2.0", "vite": "^5.0.0" - }, - "husky": { - "hooks": { - "pre-commit": "lint-staged" - } - }, - "resolutions": { - "@types/react": "^17.0.38" - }, - "lint-staged": { - "*.{js,ts,jsx,tsx}": "eslint --fix", - "*.{js,ts,jsx,tsx,css,md}": "prettier --write" - }, - "eslintConfig": { - "extends": [ - "plugin:storybook/recommended" - ] } } diff --git a/public/tauri.svg b/public/tauri.svg new file mode 100644 index 0000000..31b62c9 --- /dev/null +++ b/public/tauri.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/public/vite.svg b/public/vite.svg new file mode 100644 index 0000000..e7b8dfb --- /dev/null +++ b/public/vite.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src-tauri/.gitignore b/src-tauri/.gitignore index aba21e2..b21bd68 100644 --- a/src-tauri/.gitignore +++ b/src-tauri/.gitignore @@ -1,3 +1,7 @@ # Generated by Cargo # will have compiled files and executables /target/ + +# Generated by Tauri +# will have schema files for capabilities auto-completion +/gen/schemas diff --git a/src-tauri/Cargo.lock b/src-tauri/Cargo.lock new file mode 100644 index 0000000..5686182 --- /dev/null +++ b/src-tauri/Cargo.lock @@ -0,0 +1,6260 @@ +# This file is automatically @generated by Cargo. +# It is not intended for manual editing. +version = 3 + +[[package]] +name = "addr2line" +version = "0.22.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6e4503c46a5c0c7844e948c9a4d6acd9f50cccb4de1c48eb9e291ea17470c678" +dependencies = [ + "gimli", +] + +[[package]] +name = "adler" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe" + +[[package]] +name = "aead" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d122413f284cf2d62fb1b7db97e02edb8cda96d769b16e443a4f6195e35662b0" +dependencies = [ + "crypto-common", + "generic-array", + "heapless", +] + +[[package]] +name = "aes" +version = "0.8.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b169f7a6d4742236a0a00c541b845991d0ac43e546831af1249753ab4c3aa3a0" +dependencies = [ + "cfg-if 1.0.0", + "cipher", + "cpufeatures", +] + +[[package]] +name = "aes-gcm" +version = "0.10.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "831010a0f742e1209b3bcea8fab6a8e149051ba6099432c8cb2cc117dec3ead1" +dependencies = [ + "aead", + "aes", + "cipher", + "ctr", + "ghash", + "subtle", +] + +[[package]] +name = "aho-corasick" +version = "1.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8e60d3430d3a69478ad0993f19238d2df97c507009a52b3c10addcd7f6bcb916" +dependencies = [ + "memchr", +] + +[[package]] +name = "alloc-no-stdlib" +version = "2.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cc7bb162ec39d46ab1ca8c77bf72e890535becd1751bb45f64c597edb4c8c6b3" + +[[package]] +name = "alloc-stdlib" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "94fb8275041c72129eb51b7d0322c29b8387a0386127718b096429201a5d6ece" +dependencies = [ + "alloc-no-stdlib", +] + +[[package]] +name = "android-tzdata" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e999941b234f3131b00bc13c22d06e8c5ff726d1b6318ac7eb276997bbb4fef0" + +[[package]] +name = "android_system_properties" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "819e7219dbd41043ac279b19830f2efc897156490d7fd6ea916720117ee66311" +dependencies = [ + "libc", +] + +[[package]] +name = "anyhow" +version = "1.0.86" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b3d1d046238990b9cf5bcde22a3fb3584ee5cf65fb2765f454ed428c7a0063da" + +[[package]] +name = "arrayref" +version = "0.3.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9d151e35f61089500b617991b791fc8bfd237ae50cd5950803758a179b41e67a" + +[[package]] +name = "arrayvec" +version = "0.7.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "96d30a06541fbafbc7f82ed10c06164cfbd2c401138f6addd8404629c4b16711" +dependencies = [ + "serde", +] + +[[package]] +name = "ascon" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9fe9a0cff241855e9166670d259192aacf1e9a81b865dc9905afbbab31a9d2c1" + +[[package]] +name = "ascon-aead" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cf081c54f55de655350e71e01dd36e093012f11447a3d575b907b84425887fa3" +dependencies = [ + "aead", + "ascon", + "subtle", +] + +[[package]] +name = "async-stream" +version = "0.3.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cd56dd203fef61ac097dd65721a419ddccb106b2d2b70ba60a6b529f03961a51" +dependencies = [ + "async-stream-impl", + "futures-core", + "pin-project-lite", +] + +[[package]] +name = "async-stream-impl" +version = "0.3.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "16e62a023e7c117e27523144c5d2459f4397fcc3cab0085af8e2224f643a0193" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.72", +] + +[[package]] +name = "async-trait" +version = "0.1.81" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6e0c28dcc82d7c8ead5cb13beb15405b57b8546e93215673ff8ca0349a028107" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.72", +] + +[[package]] +name = "async-trait-with-sync" +version = "0.1.36" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b3384e2b7d27f0c02fd4d3b94f8bb42564b2f860f149c83341edc512ce1ea4ee" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "async_ip" +version = "0.8.0" +source = "git+https://github.com/Avarok-Cybersecurity/Citadel-Protocol?branch=utils-for-citadel-workspace#76780c40cf9f347caa85bdbae2f752ea47452675" +dependencies = [ + "futures", + "reqwest 0.11.27", + "serde", + "tokio", +] + +[[package]] +name = "atk" +version = "0.18.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b4af014b17dd80e8af9fa689b2d4a211ddba6eb583c1622f35d0cb543f6b17e4" +dependencies = [ + "atk-sys", + "glib", + "libc", +] + +[[package]] +name = "atk-sys" +version = "0.18.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "251e0b7d90e33e0ba930891a505a9a35ece37b2dd37a14f3ffc306c13b980009" +dependencies = [ + "glib-sys", + "gobject-sys", + "libc", + "system-deps", +] + +[[package]] +name = "atomic" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8d818003e740b63afc82337e3160717f4f63078720a810b7b903e70a5d1d2994" +dependencies = [ + "bytemuck", +] + +[[package]] +name = "atomic-polyfill" +version = "1.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8cf2bce30dfe09ef0bfaef228b9d414faaf7e563035494d7fe092dba54b300f4" +dependencies = [ + "critical-section", +] + +[[package]] +name = "attohttpc" +version = "0.16.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fdb8867f378f33f78a811a8eb9bf108ad99430d7aad43315dd9319c827ef6247" +dependencies = [ + "http 0.2.12", + "log", + "url", + "wildmatch", +] + +[[package]] +name = "auto_impl" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3c87f3f15e7794432337fc718554eaa4dc8f04c9677a950ffe366f20a162ae42" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.72", +] + +[[package]] +name = "autocfg" +version = "1.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0c4b4d0bd25bd0b74681c0ad21497610ce1b7c91b1022cd21c80c6fbdd9476b0" + +[[package]] +name = "backtrace" +version = "0.3.73" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5cc23269a4f8976d0a4d2e7109211a419fe30e8d88d677cd60b6bc79c5732e0a" +dependencies = [ + "addr2line", + "cc", + "cfg-if 1.0.0", + "libc", + "miniz_oxide", + "object", + "rustc-demangle", +] + +[[package]] +name = "base64" +version = "0.21.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9d297deb1925b89f2ccc13d7635fa0714f12c87adce1c75356b39ca9b7178567" + +[[package]] +name = "base64" +version = "0.22.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "72b3254f16251a8381aa12e40e3c4d2f0199f8c6508fbecb9d91f575e0fbb8c6" + +[[package]] +name = "bincode2" +version = "2.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f49f6183038e081170ebbbadee6678966c7d54728938a3e7de7f4e780770318f" +dependencies = [ + "byteorder", + "serde", +] + +[[package]] +name = "bindgen" +version = "0.68.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "726e4313eb6ec35d2730258ad4e15b547ee75d6afaa1361a922e78e59b7d8078" +dependencies = [ + "bitflags 2.6.0", + "cexpr", + "clang-sys", + "lazy_static", + "lazycell", + "log", + "peeking_take_while", + "prettyplease", + "proc-macro2", + "quote", + "regex", + "rustc-hash", + "shlex", + "syn 2.0.72", + "which", +] + +[[package]] +name = "bitflags" +version = "1.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" + +[[package]] +name = "bitflags" +version = "2.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b048fb63fd8b5923fc5aa7b340d8e156aec7ec02f0c78fa8a6ddc2613f6f71de" +dependencies = [ + "serde", +] + +[[package]] +name = "bitvec" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1bc2832c24239b0141d5674bb9174f9d68a8b5b3f2753311927c172ca46f7e9c" +dependencies = [ + "funty", + "radium", + "tap", + "wyz", +] + +[[package]] +name = "blake2b_simd" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "23285ad32269793932e830392f2fe2f83e26488fd3ec778883a93c8323735780" +dependencies = [ + "arrayref", + "arrayvec", + "constant_time_eq", +] + +[[package]] +name = "block" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0d8c1fef690941d3e7788d328517591fecc684c084084702d6ff1641e993699a" + +[[package]] +name = "block-buffer" +version = "0.10.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3078c7629b62d3f0439517fa394996acacc5cbc91c5a20d8c658e77abd503a71" +dependencies = [ + "generic-array", +] + +[[package]] +name = "block2" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2c132eebf10f5cad5289222520a4a058514204aed6d791f1cf4fe8088b82d15f" +dependencies = [ + "objc2", +] + +[[package]] +name = "brotli" +version = "3.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d640d25bc63c50fb1f0b545ffd80207d2e10a4c965530809b40ba3386825c391" +dependencies = [ + "alloc-no-stdlib", + "alloc-stdlib", + "brotli-decompressor", +] + +[[package]] +name = "brotli-decompressor" +version = "2.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4e2e4afe60d7dd600fdd3de8d0f08c2b7ec039712e3b6137ff98b7004e82de4f" +dependencies = [ + "alloc-no-stdlib", + "alloc-stdlib", +] + +[[package]] +name = "bstr" +version = "1.9.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "05efc5cfd9110c8416e471df0e96702d58690178e206e61b7173706673c93706" +dependencies = [ + "memchr", + "regex-automata 0.4.7", + "serde", +] + +[[package]] +name = "build-deps" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "64f14468960818ce4f3e3553c32d524446687884f8e7af5d3e252331d8a87e43" +dependencies = [ + "glob", +] + +[[package]] +name = "bumpalo" +version = "3.16.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "79296716171880943b8470b5f8d03aa55eb2e645a4874bdbb28adb49162e012c" + +[[package]] +name = "bytemuck" +version = "1.16.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b236fc92302c97ed75b38da1f4917b5cdda4984745740f153a5d3059e48d725e" +dependencies = [ + "bytemuck_derive", +] + +[[package]] +name = "bytemuck_derive" +version = "1.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1ee891b04274a59bd38b412188e24b849617b2e45a0fd8d057deb63e7403761b" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.72", +] + +[[package]] +name = "byteorder" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b" + +[[package]] +name = "bytes" +version = "1.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a12916984aab3fa6e39d655a33e09c0071eb36d6ab3aea5c2d78551f1df6d952" +dependencies = [ + "serde", +] + +[[package]] +name = "cairo-rs" +version = "0.18.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8ca26ef0159422fb77631dc9d17b102f253b876fe1586b03b803e63a309b4ee2" +dependencies = [ + "bitflags 2.6.0", + "cairo-sys-rs", + "glib", + "libc", + "once_cell", + "thiserror", +] + +[[package]] +name = "cairo-sys-rs" +version = "0.18.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "685c9fa8e590b8b3d678873528d83411db17242a73fccaed827770ea0fedda51" +dependencies = [ + "glib-sys", + "libc", + "system-deps", +] + +[[package]] +name = "camino" +version = "1.1.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e0ec6b951b160caa93cc0c7b209e5a3bff7aae9062213451ac99493cd844c239" +dependencies = [ + "serde", +] + +[[package]] +name = "cargo-platform" +version = "0.1.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "24b1f0365a6c6bb4020cd05806fd0d33c44d38046b8bd7f0e40814b9763cabfc" +dependencies = [ + "serde", +] + +[[package]] +name = "cargo_metadata" +version = "0.18.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2d886547e41f740c616ae73108f6eb70afe6d940c7bc697cb30f13daec073037" +dependencies = [ + "camino", + "cargo-platform", + "semver", + "serde", + "serde_json", + "thiserror", +] + +[[package]] +name = "cargo_toml" +version = "0.17.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8a969e13a7589e9e3e4207e153bae624ade2b5622fb4684a4923b23ec3d57719" +dependencies = [ + "serde", + "toml 0.8.2", +] + +[[package]] +name = "cc" +version = "1.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2aba8f4e9906c7ce3c73463f62a7f0c65183ada1a2d47e397cc8810827f9694f" +dependencies = [ + "jobserver", + "libc", +] + +[[package]] +name = "cesu8" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6d43a04d8753f35258c91f8ec639f792891f748a1edbd759cf1dcea3382ad83c" + +[[package]] +name = "cexpr" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6fac387a98bb7c37292057cffc56d62ecb629900026402633ae9160df93a8766" +dependencies = [ + "nom", +] + +[[package]] +name = "cfb" +version = "0.7.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d38f2da7a0a2c4ccf0065be06397cc26a81f4e528be095826eee9d4adbb8c60f" +dependencies = [ + "byteorder", + "fnv", + "uuid", +] + +[[package]] +name = "cfg-expr" +version = "0.15.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d067ad48b8650848b989a59a86c6c36a995d02d2bf778d45c3c5d57bc2718f02" +dependencies = [ + "smallvec", + "target-lexicon", +] + +[[package]] +name = "cfg-if" +version = "0.1.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4785bdd1c96b2a846b2bd7cc02e86b6b3dbf14e7e53446c4f54c92a361040822" + +[[package]] +name = "cfg-if" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" + +[[package]] +name = "cfg_aliases" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "613afe47fcd5fac7ccf1db93babcb082c5994d996f20b8b159f2ad1658eb5724" + +[[package]] +name = "chacha20" +version = "0.9.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c3613f74bd2eac03dad61bd53dbe620703d4371614fe0bc3b9f04dd36fe4e818" +dependencies = [ + "cfg-if 1.0.0", + "cipher", + "cpufeatures", +] + +[[package]] +name = "chacha20poly1305" +version = "0.10.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "10cd79432192d1c0f4e1a0fef9527696cc039165d729fb41b3f4f4f354c2dc35" +dependencies = [ + "aead", + "chacha20", + "cipher", + "poly1305", + "zeroize", +] + +[[package]] +name = "chrono" +version = "0.4.38" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a21f936df1771bf62b77f047b726c4625ff2e8aa607c01ec06e5a05bd8463401" +dependencies = [ + "android-tzdata", + "iana-time-zone", + "num-traits", + "serde", + "windows-targets 0.52.6", +] + +[[package]] +name = "cipher" +version = "0.4.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "773f3b9af64447d2ce9850330c473515014aa235e6a783b02db81ff39e4a3dad" +dependencies = [ + "crypto-common", + "inout", + "zeroize", +] + +[[package]] +name = "citadel-internal-service-connector" +version = "0.1.0" +source = "git+https://github.com/Avarok-Cybersecurity/citadel-workspace-core.git?branch=new-temp-KT#9ccd1980a5b49aecd4ebaa7e5b70848e51df28be" +dependencies = [ + "async-trait", + "bincode2", + "citadel-internal-service-types", + "citadel_logging 0.8.0", + "futures", + "serde", + "tokio", + "tokio-util", + "uuid", +] + +[[package]] +name = "citadel-internal-service-macros" +version = "0.1.0" +source = "git+https://github.com/Avarok-Cybersecurity/citadel-workspace-core.git?branch=new-temp-KT#9ccd1980a5b49aecd4ebaa7e5b70848e51df28be" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "citadel-internal-service-types" +version = "0.1.0" +source = "git+https://github.com/Avarok-Cybersecurity/citadel-workspace-core.git?branch=new-temp-KT#9ccd1980a5b49aecd4ebaa7e5b70848e51df28be" +dependencies = [ + "bytes", + "citadel-internal-service-macros", + "citadel_sdk", + "citadel_types", + "serde", + "uuid", +] + +[[package]] +name = "citadel_crypt" +version = "0.9.0" +source = "git+https://github.com/Avarok-Cybersecurity/Citadel-Protocol?branch=utils-for-citadel-workspace#76780c40cf9f347caa85bdbae2f752ea47452675" +dependencies = [ + "arrayvec", + "async-trait", + "auto_impl", + "bincode2", + "bitvec", + "byteorder", + "bytes", + "citadel_io", + "citadel_pqcrypto", + "citadel_types", + "futures", + "log", + "num-integer", + "num_cpus", + "rand 0.8.5", + "rayon", + "rust-argon2", + "serde", + "sha3", + "sysinfo", + "tokio", + "tokio-stream", + "zeroize", +] + +[[package]] +name = "citadel_io" +version = "0.8.0" +source = "git+https://github.com/Avarok-Cybersecurity/Citadel-Protocol?branch=utils-for-citadel-workspace#76780c40cf9f347caa85bdbae2f752ea47452675" +dependencies = [ + "parking_lot", + "tokio", +] + +[[package]] +name = "citadel_logging" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8f205e2e407c9afc47a865366e97b96af31e7e6badf93a7f46c11e47d05cad82" +dependencies = [ + "log", + "tracing", + "tracing-subscriber", +] + +[[package]] +name = "citadel_logging" +version = "0.8.0" +source = "git+https://github.com/Avarok-Cybersecurity/Citadel-Protocol?branch=utils-for-citadel-workspace#76780c40cf9f347caa85bdbae2f752ea47452675" +dependencies = [ + "tracing", + "tracing-subscriber", +] + +[[package]] +name = "citadel_pqcrypto" +version = "0.9.0" +source = "git+https://github.com/Avarok-Cybersecurity/Citadel-Protocol?branch=utils-for-citadel-workspace#76780c40cf9f347caa85bdbae2f752ea47452675" +dependencies = [ + "aes-gcm", + "ascon-aead", + "bincode2", + "bytes", + "chacha20poly1305", + "citadel_types", + "generic-array", + "kyber-pke", + "log", + "oqs", + "parking_lot", + "pqcrypto-falcon-wasi", + "pqcrypto-traits-wasi", + "rand 0.8.5", + "serde", + "serde-big-array 0.5.1", + "sha3", + "zeroize", +] + +[[package]] +name = "citadel_proto" +version = "0.9.0" +source = "git+https://github.com/Avarok-Cybersecurity/Citadel-Protocol?branch=utils-for-citadel-workspace#76780c40cf9f347caa85bdbae2f752ea47452675" +dependencies = [ + "anyhow", + "async-stream", + "async-trait", + "atomic", + "auto_impl", + "bytemuck", + "byteorder", + "bytes", + "chrono", + "citadel_crypt", + "citadel_io", + "citadel_pqcrypto", + "citadel_types", + "citadel_user", + "citadel_wire", + "either", + "embedded-semver", + "futures", + "itertools", + "lazy_static", + "log", + "netbeam", + "once_cell", + "serde", + "tokio", + "tokio-stream", + "tokio-util", + "uuid", + "zerocopy", +] + +[[package]] +name = "citadel_sdk" +version = "0.9.0" +source = "git+https://github.com/Avarok-Cybersecurity/Citadel-Protocol?branch=utils-for-citadel-workspace#76780c40cf9f347caa85bdbae2f752ea47452675" +dependencies = [ + "anyhow", + "bytes", + "citadel_io", + "citadel_logging 0.8.0", + "citadel_proto", + "citadel_types", + "citadel_user", + "dirs2", + "futures", + "lazy_static", + "log", + "tokio", + "uuid", +] + +[[package]] +name = "citadel_types" +version = "0.8.0" +source = "git+https://github.com/Avarok-Cybersecurity/Citadel-Protocol?branch=utils-for-citadel-workspace#76780c40cf9f347caa85bdbae2f752ea47452675" +dependencies = [ + "bincode2", + "bytes", + "kernel32-sys", + "libc", + "packed_struct", + "serde", + "strum", + "twox-hash", + "uuid", +] + +[[package]] +name = "citadel_user" +version = "0.9.0" +source = "git+https://github.com/Avarok-Cybersecurity/Citadel-Protocol?branch=utils-for-citadel-workspace#76780c40cf9f347caa85bdbae2f752ea47452675" +dependencies = [ + "async-trait", + "bincode2", + "bstr", + "bytes", + "chrono", + "citadel_crypt", + "citadel_types", + "futures", + "log", + "multimap", + "parking_lot", + "rand 0.8.5", + "serde", + "serde_json", + "sha3", + "tokio", + "tokio-stream", + "tokio-util", + "uuid", +] + +[[package]] +name = "citadel_wire" +version = "0.9.0" +source = "git+https://github.com/Avarok-Cybersecurity/Citadel-Protocol?branch=utils-for-citadel-workspace#76780c40cf9f347caa85bdbae2f752ea47452675" +dependencies = [ + "anyhow", + "async-trait-with-sync", + "async_ip", + "bincode2", + "bytes", + "citadel_io", + "either", + "futures", + "igd", + "itertools", + "lazy_static", + "log", + "netbeam", + "openssl", + "quinn", + "rcgen", + "rustls", + "rustls-native-certs", + "rustls-pemfile", + "serde", + "socket2", + "stun", + "tokio", + "tokio-rustls", + "uuid", +] + +[[package]] +name = "citadel_workspace" +version = "0.0.0" +dependencies = [ + "citadel-internal-service-connector", + "citadel-internal-service-types", + "citadel_logging 0.7.0", + "citadel_types", + "futures", + "serde", + "serde_json", + "tauri", + "tauri-build", + "tauri-plugin-shell", + "tokio", + "tokio-util", + "uuid", +] + +[[package]] +name = "clang-sys" +version = "1.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0b023947811758c97c59bf9d1c188fd619ad4718dcaa767947df1cadb14f39f4" +dependencies = [ + "glob", + "libc", + "libloading 0.8.5", +] + +[[package]] +name = "cmake" +version = "0.1.50" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a31c789563b815f77f4250caee12365734369f942439b7defd71e18a48197130" +dependencies = [ + "cc", +] + +[[package]] +name = "cocoa" +version = "0.25.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f6140449f97a6e97f9511815c5632d84c8aacf8ac271ad77c559218161a1373c" +dependencies = [ + "bitflags 1.3.2", + "block", + "cocoa-foundation", + "core-foundation", + "core-graphics", + "foreign-types 0.5.0", + "libc", + "objc", +] + +[[package]] +name = "cocoa-foundation" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8c6234cbb2e4c785b456c0644748b1ac416dd045799740356f8363dfe00c93f7" +dependencies = [ + "bitflags 1.3.2", + "block", + "core-foundation", + "core-graphics-types", + "libc", + "objc", +] + +[[package]] +name = "combine" +version = "4.6.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ba5a308b75df32fe02788e748662718f03fde005016435c444eea572398219fd" +dependencies = [ + "bytes", + "memchr", +] + +[[package]] +name = "constant_time_eq" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f7144d30dcf0fafbce74250a3963025d8d52177934239851c917d29f1df280c2" + +[[package]] +name = "convert_case" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6245d59a3e82a7fc217c5828a6692dbc6dfb63a0c8c90495621f7b9d79704a0e" + +[[package]] +name = "core-foundation" +version = "0.9.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "91e195e091a93c46f7102ec7818a2aa394e1e1771c3ab4825963fa03e45afb8f" +dependencies = [ + "core-foundation-sys", + "libc", +] + +[[package]] +name = "core-foundation-sys" +version = "0.8.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "06ea2b9bc92be3c2baa9334a323ebca2d6f074ff852cd1d7b11064035cd3868f" + +[[package]] +name = "core-graphics" +version = "0.23.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c07782be35f9e1140080c6b96f0d44b739e2278479f64e02fdab4e32dfd8b081" +dependencies = [ + "bitflags 1.3.2", + "core-foundation", + "core-graphics-types", + "foreign-types 0.5.0", + "libc", +] + +[[package]] +name = "core-graphics-types" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "45390e6114f68f718cc7a830514a96f903cccd70d02a8f6d9f643ac4ba45afaf" +dependencies = [ + "bitflags 1.3.2", + "core-foundation", + "libc", +] + +[[package]] +name = "cpufeatures" +version = "0.2.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "53fe5e26ff1b7aef8bca9c6080520cfb8d9333c7568e1829cef191a9723e5504" +dependencies = [ + "libc", +] + +[[package]] +name = "crc" +version = "3.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "69e6e4d7b33a94f0991c26729976b10ebde1d34c3ee82408fb536164fa10d636" +dependencies = [ + "crc-catalog", +] + +[[package]] +name = "crc-catalog" +version = "2.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "19d374276b40fb8bbdee95aef7c7fa6b5316ec764510eb64b8dd0e2ed0d7e7f5" + +[[package]] +name = "crc32fast" +version = "1.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a97769d94ddab943e4510d138150169a2758b5ef3eb191a9ee688de3e23ef7b3" +dependencies = [ + "cfg-if 1.0.0", +] + +[[package]] +name = "critical-section" +version = "1.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7059fff8937831a9ae6f0fe4d658ffabf58f2ca96aa9dec1c889f936f705f216" + +[[package]] +name = "crossbeam-channel" +version = "0.5.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "33480d6946193aa8033910124896ca395333cae7e2d1113d1fef6c3272217df2" +dependencies = [ + "crossbeam-utils", +] + +[[package]] +name = "crossbeam-deque" +version = "0.8.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "613f8cc01fe9cf1a3eb3d7f488fd2fa8388403e97039e2f73692932e291a770d" +dependencies = [ + "crossbeam-epoch", + "crossbeam-utils", +] + +[[package]] +name = "crossbeam-epoch" +version = "0.9.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5b82ac4a3c2ca9c3460964f020e1402edd5753411d7737aa39c3714ad1b5420e" +dependencies = [ + "crossbeam-utils", +] + +[[package]] +name = "crossbeam-utils" +version = "0.8.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "22ec99545bb0ed0ea7bb9b8e1e9122ea386ff8a48c0922e43f36d45ab09e0e80" + +[[package]] +name = "crypto-common" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1bfb12502f3fc46cca1bb51ac28df9d618d813cdc3d2f25b9fe775a34af26bb3" +dependencies = [ + "generic-array", + "typenum", +] + +[[package]] +name = "cssparser" +version = "0.27.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "754b69d351cdc2d8ee09ae203db831e005560fc6030da058f86ad60c92a9cb0a" +dependencies = [ + "cssparser-macros", + "dtoa-short", + "itoa 0.4.8", + "matches", + "phf 0.8.0", + "proc-macro2", + "quote", + "smallvec", + "syn 1.0.109", +] + +[[package]] +name = "cssparser-macros" +version = "0.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "13b588ba4ac1a99f7f2964d24b3d896ddc6bf847ee3855dbd4366f058cfcd331" +dependencies = [ + "quote", + "syn 2.0.72", +] + +[[package]] +name = "cstr_core" +version = "0.2.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dd98742e4fdca832d40cab219dc2e3048de17d873248f83f17df47c1bea70956" +dependencies = [ + "cty", + "memchr", +] + +[[package]] +name = "ctor" +version = "0.2.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "edb49164822f3ee45b17acd4a208cfc1251410cf0cad9a833234c9890774dd9f" +dependencies = [ + "quote", + "syn 2.0.72", +] + +[[package]] +name = "ctr" +version = "0.9.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0369ee1ad671834580515889b80f2ea915f23b8be8d0daa4bbaf2ac5c7590835" +dependencies = [ + "cipher", +] + +[[package]] +name = "cty" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b365fabc795046672053e29c954733ec3b05e4be654ab130fe8f1f94d7051f35" + +[[package]] +name = "darling" +version = "0.20.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6f63b86c8a8826a49b8c21f08a2d07338eec8d900540f8630dc76284be802989" +dependencies = [ + "darling_core", + "darling_macro", +] + +[[package]] +name = "darling_core" +version = "0.20.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "95133861a8032aaea082871032f5815eb9e98cef03fa916ab4500513994df9e5" +dependencies = [ + "fnv", + "ident_case", + "proc-macro2", + "quote", + "strsim", + "syn 2.0.72", +] + +[[package]] +name = "darling_macro" +version = "0.20.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d336a2a514f6ccccaa3e09b02d41d35330c07ddf03a62165fcec10bb561c7806" +dependencies = [ + "darling_core", + "quote", + "syn 2.0.72", +] + +[[package]] +name = "deranged" +version = "0.3.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b42b6fa04a440b495c8b04d0e71b707c585f83cb9cb28cf8cd0d976c315e31b4" +dependencies = [ + "powerfmt", + "serde", +] + +[[package]] +name = "derive_more" +version = "0.99.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5f33878137e4dafd7fa914ad4e259e18a4e8e532b9617a2d0150262bf53abfce" +dependencies = [ + "convert_case", + "proc-macro2", + "quote", + "rustc_version", + "syn 2.0.72", +] + +[[package]] +name = "digest" +version = "0.10.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292" +dependencies = [ + "block-buffer", + "crypto-common", +] + +[[package]] +name = "dirs" +version = "5.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "44c45a9d03d6676652bcb5e724c7e988de1acad23a711b5217ab9cbecbec2225" +dependencies = [ + "dirs-sys 0.4.1", +] + +[[package]] +name = "dirs-sys" +version = "0.3.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1b1d1d91c932ef41c0f2663aa8b0ca0342d444d842c06914aa0a7e352d0bada6" +dependencies = [ + "libc", + "redox_users", + "winapi 0.3.9", +] + +[[package]] +name = "dirs-sys" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "520f05a5cbd335fae5a99ff7a6ab8627577660ee5cfd6a94a6a929b52ff0321c" +dependencies = [ + "libc", + "option-ext", + "redox_users", + "windows-sys 0.48.0", +] + +[[package]] +name = "dirs2" +version = "3.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4049c5941d42b500fab4dbe85341aa7eb7b533e2c678529db3c1e88ed1aba8b5" +dependencies = [ + "cfg-if 0.1.10", + "dirs-sys 0.3.7", +] + +[[package]] +name = "dispatch" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bd0c93bb4b0c6d9b77f4435b0ae98c24d17f1c45b2ff844c6151a07256ca923b" + +[[package]] +name = "dlopen2" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9e1297103d2bbaea85724fcee6294c2d50b1081f9ad47d0f6f6f61eda65315a6" +dependencies = [ + "dlopen2_derive", + "libc", + "once_cell", + "winapi 0.3.9", +] + +[[package]] +name = "dlopen2_derive" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f2b99bf03862d7f545ebc28ddd33a665b50865f4dfd84031a393823879bd4c54" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.72", +] + +[[package]] +name = "dpi" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f25c0e292a7ca6d6498557ff1df68f32c99850012b6ea401cf8daf771f22ff53" +dependencies = [ + "serde", +] + +[[package]] +name = "dtoa" +version = "1.0.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dcbb2bf8e87535c23f7a8a321e364ce21462d0ff10cb6407820e8e96dfff6653" + +[[package]] +name = "dtoa-short" +version = "0.3.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cd1511a7b6a56299bd043a9c167a6d2bfb37bf84a6dfceaba651168adfb43c87" +dependencies = [ + "dtoa", +] + +[[package]] +name = "dunce" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "56ce8c6da7551ec6c462cbaf3bfbc75131ebbfa1c944aeaa9dab51ca1c5f0c3b" + +[[package]] +name = "dyn-clone" +version = "1.0.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0d6ef0072f8a535281e4876be788938b528e9a1d43900b82c2569af7da799125" + +[[package]] +name = "either" +version = "1.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "60b1af1c220855b6ceac025d3f6ecdd2b7c4894bfe9cd9bda4fbb4bc7c0d4cf0" + +[[package]] +name = "embed-resource" +version = "2.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4edcacde9351c33139a41e3c97eb2334351a81a2791bebb0b243df837128f602" +dependencies = [ + "cc", + "memchr", + "rustc_version", + "toml 0.8.2", + "vswhom", + "winreg 0.52.0", +] + +[[package]] +name = "embed_plist" +version = "1.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4ef6b89e5b37196644d8796de5268852ff179b44e96276cf4290264843743bb7" + +[[package]] +name = "embedded-semver" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fab9320d44c76deb5a9c9031406958c39a79125abd44c49e2f53dadf52033e26" +dependencies = [ + "bitvec", +] + +[[package]] +name = "encoding_rs" +version = "0.8.34" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b45de904aa0b010bce2ab45264d0631681847fa7b6f2eaa7dab7619943bc4f59" +dependencies = [ + "cfg-if 1.0.0", +] + +[[package]] +name = "equivalent" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5443807d6dff69373d433ab9ef5378ad8df50ca6298caf15de6e52e24aaf54d5" + +[[package]] +name = "erased-serde" +version = "0.4.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "24e2389d65ab4fab27dc2a5de7b191e1f6617d1f1c8855c0dc569c94a4cbb18d" +dependencies = [ + "serde", + "typeid", +] + +[[package]] +name = "errno" +version = "0.3.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "534c5cf6194dfab3db3242765c03bbe257cf92f22b38f6bc0c58d59108a820ba" +dependencies = [ + "libc", + "windows-sys 0.52.0", +] + +[[package]] +name = "fdeflate" +version = "0.3.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4f9bfee30e4dedf0ab8b422f03af778d9612b63f502710fc500a334ebe2de645" +dependencies = [ + "simd-adler32", +] + +[[package]] +name = "field-offset" +version = "0.3.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "38e2275cc4e4fc009b0669731a1e5ab7ebf11f469eaede2bab9309a5b4d6057f" +dependencies = [ + "memoffset 0.9.1", + "rustc_version", +] + +[[package]] +name = "flate2" +version = "1.0.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5f54427cfd1c7829e2a139fcefea601bf088ebca651d2bf53ebc600eac295dae" +dependencies = [ + "crc32fast", + "miniz_oxide", +] + +[[package]] +name = "fnv" +version = "1.0.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" + +[[package]] +name = "foreign-types" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f6f339eb8adc052cd2ca78910fda869aefa38d22d5cb648e6485e4d3fc06f3b1" +dependencies = [ + "foreign-types-shared 0.1.1", +] + +[[package]] +name = "foreign-types" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d737d9aa519fb7b749cbc3b962edcf310a8dd1f4b67c91c4f83975dbdd17d965" +dependencies = [ + "foreign-types-macros", + "foreign-types-shared 0.3.1", +] + +[[package]] +name = "foreign-types-macros" +version = "0.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1a5c6c585bc94aaf2c7b51dd4c2ba22680844aba4c687be581871a6f518c5742" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.72", +] + +[[package]] +name = "foreign-types-shared" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "00b0228411908ca8685dba7fc2cdd70ec9990a6e753e89b6ac91a84c40fbaf4b" + +[[package]] +name = "foreign-types-shared" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "aa9a19cbb55df58761df49b23516a86d432839add4af60fc256da840f66ed35b" + +[[package]] +name = "form_urlencoded" +version = "1.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e13624c2627564efccf4934284bdd98cbaa14e79b0b5a141218e507b3a823456" +dependencies = [ + "percent-encoding", +] + +[[package]] +name = "funty" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e6d5a32815ae3f33302d95fdcb2ce17862f8c65363dcfd29360480ba1001fc9c" + +[[package]] +name = "futf" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "df420e2e84819663797d1ec6544b13c5be84629e7bb00dc960d6917db2987843" +dependencies = [ + "mac", + "new_debug_unreachable", +] + +[[package]] +name = "futures" +version = "0.3.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "645c6916888f6cb6350d2550b80fb63e734897a8498abe35cfb732b6487804b0" +dependencies = [ + "futures-channel", + "futures-core", + "futures-executor", + "futures-io", + "futures-sink", + "futures-task", + "futures-util", +] + +[[package]] +name = "futures-channel" +version = "0.3.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eac8f7d7865dcb88bd4373ab671c8cf4508703796caa2b1985a9ca867b3fcb78" +dependencies = [ + "futures-core", + "futures-sink", +] + +[[package]] +name = "futures-core" +version = "0.3.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dfc6580bb841c5a68e9ef15c77ccc837b40a7504914d52e47b8b0e9bbda25a1d" + +[[package]] +name = "futures-executor" +version = "0.3.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a576fc72ae164fca6b9db127eaa9a9dda0d61316034f33a0a0d4eda41f02b01d" +dependencies = [ + "futures-core", + "futures-task", + "futures-util", +] + +[[package]] +name = "futures-io" +version = "0.3.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a44623e20b9681a318efdd71c299b6b222ed6f231972bfe2f224ebad6311f0c1" + +[[package]] +name = "futures-macro" +version = "0.3.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "87750cf4b7a4c0625b1529e4c543c2182106e4dedc60a2a6455e00d212c489ac" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.72", +] + +[[package]] +name = "futures-sink" +version = "0.3.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9fb8e00e87438d937621c1c6269e53f536c14d3fbd6a042bb24879e57d474fb5" + +[[package]] +name = "futures-task" +version = "0.3.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "38d84fa142264698cdce1a9f9172cf383a0c82de1bddcf3092901442c4097004" + +[[package]] +name = "futures-util" +version = "0.3.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3d6401deb83407ab3da39eba7e33987a73c3df0c82b4bb5813ee871c19c41d48" +dependencies = [ + "futures-channel", + "futures-core", + "futures-io", + "futures-macro", + "futures-sink", + "futures-task", + "memchr", + "pin-project-lite", + "pin-utils", + "slab", +] + +[[package]] +name = "fxhash" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c31b6d751ae2c7f11320402d34e41349dd1016f8d5d45e48c4312bc8625af50c" +dependencies = [ + "byteorder", +] + +[[package]] +name = "gdk" +version = "0.18.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f5ba081bdef3b75ebcdbfc953699ed2d7417d6bd853347a42a37d76406a33646" +dependencies = [ + "cairo-rs", + "gdk-pixbuf", + "gdk-sys", + "gio", + "glib", + "libc", + "pango", +] + +[[package]] +name = "gdk-pixbuf" +version = "0.18.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "50e1f5f1b0bfb830d6ccc8066d18db35c487b1b2b1e8589b5dfe9f07e8defaec" +dependencies = [ + "gdk-pixbuf-sys", + "gio", + "glib", + "libc", + "once_cell", +] + +[[package]] +name = "gdk-pixbuf-sys" +version = "0.18.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3f9839ea644ed9c97a34d129ad56d38a25e6756f99f3a88e15cd39c20629caf7" +dependencies = [ + "gio-sys", + "glib-sys", + "gobject-sys", + "libc", + "system-deps", +] + +[[package]] +name = "gdk-sys" +version = "0.18.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "31ff856cb3386dae1703a920f803abafcc580e9b5f711ca62ed1620c25b51ff2" +dependencies = [ + "cairo-sys-rs", + "gdk-pixbuf-sys", + "gio-sys", + "glib-sys", + "gobject-sys", + "libc", + "pango-sys", + "pkg-config", + "system-deps", +] + +[[package]] +name = "gdkwayland-sys" +version = "0.18.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a90fbf5c033c65d93792192a49a8efb5bb1e640c419682a58bb96f5ae77f3d4a" +dependencies = [ + "gdk-sys", + "glib-sys", + "gobject-sys", + "libc", + "pkg-config", + "system-deps", +] + +[[package]] +name = "gdkx11" +version = "0.18.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "db2ea8a4909d530f79921290389cbd7c34cb9d623bfe970eaae65ca5f9cd9cce" +dependencies = [ + "gdk", + "gdkx11-sys", + "gio", + "glib", + "libc", + "x11", +] + +[[package]] +name = "gdkx11-sys" +version = "0.18.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fee8f00f4ee46cad2939b8990f5c70c94ff882c3028f3cc5abf950fa4ab53043" +dependencies = [ + "gdk-sys", + "glib-sys", + "libc", + "system-deps", + "x11", +] + +[[package]] +name = "generator" +version = "0.7.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5cc16584ff22b460a382b7feec54b23d2908d858152e5739a120b949293bd74e" +dependencies = [ + "cc", + "libc", + "log", + "rustversion", + "windows 0.48.0", +] + +[[package]] +name = "generic-array" +version = "0.14.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a" +dependencies = [ + "serde", + "typenum", + "version_check", +] + +[[package]] +name = "getrandom" +version = "0.1.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8fc3cb4d91f53b50155bdcfd23f6a4c39ae1969c2ae85982b135750cccaf5fce" +dependencies = [ + "cfg-if 1.0.0", + "libc", + "wasi 0.9.0+wasi-snapshot-preview1", +] + +[[package]] +name = "getrandom" +version = "0.2.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c4567c8db10ae91089c99af84c68c38da3ec2f087c3f82960bcdbf3656b6f4d7" +dependencies = [ + "cfg-if 1.0.0", + "libc", + "wasi 0.11.0+wasi-snapshot-preview1", +] + +[[package]] +name = "ghash" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f0d8a4362ccb29cb0b265253fb0a2728f592895ee6854fd9bc13f2ffda266ff1" +dependencies = [ + "opaque-debug", + "polyval", +] + +[[package]] +name = "gimli" +version = "0.29.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "40ecd4077b5ae9fd2e9e169b102c6c330d0605168eb0e8bf79952b256dbefffd" + +[[package]] +name = "gio" +version = "0.18.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d4fc8f532f87b79cbc51a79748f16a6828fb784be93145a322fa14d06d354c73" +dependencies = [ + "futures-channel", + "futures-core", + "futures-io", + "futures-util", + "gio-sys", + "glib", + "libc", + "once_cell", + "pin-project-lite", + "smallvec", + "thiserror", +] + +[[package]] +name = "gio-sys" +version = "0.18.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "37566df850baf5e4cb0dfb78af2e4b9898d817ed9263d1090a2df958c64737d2" +dependencies = [ + "glib-sys", + "gobject-sys", + "libc", + "system-deps", + "winapi 0.3.9", +] + +[[package]] +name = "glib" +version = "0.18.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "233daaf6e83ae6a12a52055f568f9d7cf4671dabb78ff9560ab6da230ce00ee5" +dependencies = [ + "bitflags 2.6.0", + "futures-channel", + "futures-core", + "futures-executor", + "futures-task", + "futures-util", + "gio-sys", + "glib-macros", + "glib-sys", + "gobject-sys", + "libc", + "memchr", + "once_cell", + "smallvec", + "thiserror", +] + +[[package]] +name = "glib-macros" +version = "0.18.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0bb0228f477c0900c880fd78c8759b95c7636dbd7842707f49e132378aa2acdc" +dependencies = [ + "heck 0.4.1", + "proc-macro-crate 2.0.2", + "proc-macro-error", + "proc-macro2", + "quote", + "syn 2.0.72", +] + +[[package]] +name = "glib-sys" +version = "0.18.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "063ce2eb6a8d0ea93d2bf8ba1957e78dbab6be1c2220dd3daca57d5a9d869898" +dependencies = [ + "libc", + "system-deps", +] + +[[package]] +name = "glob" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d2fabcfbdc87f4758337ca535fb41a6d701b65693ce38287d856d1674551ec9b" + +[[package]] +name = "gobject-sys" +version = "0.18.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0850127b514d1c4a4654ead6dedadb18198999985908e6ffe4436f53c785ce44" +dependencies = [ + "glib-sys", + "libc", + "system-deps", +] + +[[package]] +name = "gtk" +version = "0.18.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "93c4f5e0e20b60e10631a5f06da7fe3dda744b05ad0ea71fee2f47adf865890c" +dependencies = [ + "atk", + "cairo-rs", + "field-offset", + "futures-channel", + "gdk", + "gdk-pixbuf", + "gio", + "glib", + "gtk-sys", + "gtk3-macros", + "libc", + "pango", + "pkg-config", +] + +[[package]] +name = "gtk-sys" +version = "0.18.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "771437bf1de2c1c0b496c11505bdf748e26066bbe942dfc8f614c9460f6d7722" +dependencies = [ + "atk-sys", + "cairo-sys-rs", + "gdk-pixbuf-sys", + "gdk-sys", + "gio-sys", + "glib-sys", + "gobject-sys", + "libc", + "pango-sys", + "system-deps", +] + +[[package]] +name = "gtk3-macros" +version = "0.18.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c6063efb63db582968fb7df72e1ae68aa6360dcfb0a75143f34fc7d616bad75e" +dependencies = [ + "proc-macro-crate 1.3.1", + "proc-macro-error", + "proc-macro2", + "quote", + "syn 2.0.72", +] + +[[package]] +name = "h2" +version = "0.3.26" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "81fe527a889e1532da5c525686d96d4c2e74cdd345badf8dfef9f6b39dd5f5e8" +dependencies = [ + "bytes", + "fnv", + "futures-core", + "futures-sink", + "futures-util", + "http 0.2.12", + "indexmap 2.2.6", + "slab", + "tokio", + "tokio-util", + "tracing", +] + +[[package]] +name = "hash32" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b0c35f58762feb77d74ebe43bdbc3210f09be9fe6742234d573bacc26ed92b67" +dependencies = [ + "byteorder", +] + +[[package]] +name = "hashbrown" +version = "0.12.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888" + +[[package]] +name = "hashbrown" +version = "0.14.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e5274423e17b7c9fc20b6e7e208532f9b19825d82dfd615708b70edd83df41f1" + +[[package]] +name = "heapless" +version = "0.7.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cdc6457c0eb62c71aac4bc17216026d8410337c4126773b9c5daba343f17964f" +dependencies = [ + "atomic-polyfill", + "hash32", + "rustc_version", + "spin 0.9.8", + "stable_deref_trait", +] + +[[package]] +name = "heck" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "95505c38b4572b2d910cecb0281560f54b440a19336cbbcb27bf6ce6adc6f5a8" + +[[package]] +name = "heck" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea" + +[[package]] +name = "hermit-abi" +version = "0.3.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d231dfb89cfffdbc30e7fc41579ed6066ad03abda9e567ccafae602b97ec5024" + +[[package]] +name = "hex" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70" + +[[package]] +name = "home" +version = "0.5.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e3d1354bf6b7235cb4a0576c2619fd4ed18183f689b12b006a0ee7329eeff9a5" +dependencies = [ + "windows-sys 0.52.0", +] + +[[package]] +name = "html5ever" +version = "0.26.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bea68cab48b8459f17cf1c944c67ddc572d272d9f2b274140f223ecb1da4a3b7" +dependencies = [ + "log", + "mac", + "markup5ever", + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "http" +version = "0.2.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "601cbb57e577e2f5ef5be8e7b83f0f63994f25aa94d673e54a92d5c516d101f1" +dependencies = [ + "bytes", + "fnv", + "itoa 1.0.11", +] + +[[package]] +name = "http" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "21b9ddb458710bc376481b842f5da65cdf31522de232c1ca8146abce2a358258" +dependencies = [ + "bytes", + "fnv", + "itoa 1.0.11", +] + +[[package]] +name = "http-body" +version = "0.4.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7ceab25649e9960c0311ea418d17bee82c0dcec1bd053b5f9a66e265a693bed2" +dependencies = [ + "bytes", + "http 0.2.12", + "pin-project-lite", +] + +[[package]] +name = "http-body" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1efedce1fb8e6913f23e0c92de8e62cd5b772a67e7b3946df930a62566c93184" +dependencies = [ + "bytes", + "http 1.1.0", +] + +[[package]] +name = "http-body-util" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "793429d76616a256bcb62c2a2ec2bed781c8307e797e2598c50010f2bee2544f" +dependencies = [ + "bytes", + "futures-util", + "http 1.1.0", + "http-body 1.0.1", + "pin-project-lite", +] + +[[package]] +name = "httparse" +version = "1.9.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0fcc0b4a115bf80b728eb8ea024ad5bd707b615bfed49e0665b6e0f86fd082d9" + +[[package]] +name = "httpdate" +version = "1.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "df3b46402a9d5adb4c86a0cf463f42e19994e3ee891101b1841f30a545cb49a9" + +[[package]] +name = "hyper" +version = "0.14.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a152ddd61dfaec7273fe8419ab357f33aee0d914c5f4efbf0d96fa749eea5ec9" +dependencies = [ + "bytes", + "futures-channel", + "futures-core", + "futures-util", + "h2", + "http 0.2.12", + "http-body 0.4.6", + "httparse", + "httpdate", + "itoa 1.0.11", + "pin-project-lite", + "socket2", + "tokio", + "tower-service", + "tracing", + "want", +] + +[[package]] +name = "hyper" +version = "1.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "50dfd22e0e76d0f662d429a5f80fcaf3855009297eab6a0a9f8543834744ba05" +dependencies = [ + "bytes", + "futures-channel", + "futures-util", + "http 1.1.0", + "http-body 1.0.1", + "httparse", + "itoa 1.0.11", + "pin-project-lite", + "smallvec", + "tokio", + "want", +] + +[[package]] +name = "hyper-rustls" +version = "0.24.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ec3efd23720e2049821a693cbc7e65ea87c72f1c58ff2f9522ff332b1491e590" +dependencies = [ + "futures-util", + "http 0.2.12", + "hyper 0.14.30", + "rustls", + "tokio", + "tokio-rustls", +] + +[[package]] +name = "hyper-util" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3ab92f4f49ee4fb4f997c784b7a2e0fa70050211e0b6a287f898c3c9785ca956" +dependencies = [ + "bytes", + "futures-channel", + "futures-util", + "http 1.1.0", + "http-body 1.0.1", + "hyper 1.4.1", + "pin-project-lite", + "socket2", + "tokio", + "tower", + "tower-service", + "tracing", +] + +[[package]] +name = "iana-time-zone" +version = "0.1.60" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e7ffbb5a1b541ea2561f8c41c087286cc091e21e556a4f09a8f6cbf17b69b141" +dependencies = [ + "android_system_properties", + "core-foundation-sys", + "iana-time-zone-haiku", + "js-sys", + "wasm-bindgen", + "windows-core 0.52.0", +] + +[[package]] +name = "iana-time-zone-haiku" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f31827a206f56af32e590ba56d5d2d085f558508192593743f16b2306495269f" +dependencies = [ + "cc", +] + +[[package]] +name = "ico" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e3804960be0bb5e4edb1e1ad67afd321a9ecfd875c3e65c099468fd2717d7cae" +dependencies = [ + "byteorder", + "png", +] + +[[package]] +name = "ident_case" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b9e0384b61958566e926dc50660321d12159025e767c18e043daf26b70104c39" + +[[package]] +name = "idna" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "634d9b1461af396cad843f47fdba5597a4f9e6ddd4bfb6ff5d85028c25cb12f6" +dependencies = [ + "unicode-bidi", + "unicode-normalization", +] + +[[package]] +name = "igd" +version = "0.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "556b5a75cd4adb7c4ea21c64af1c48cefb2ce7d43dc4352c720a1fe47c21f355" +dependencies = [ + "attohttpc", + "bytes", + "futures", + "http 0.2.12", + "hyper 0.14.30", + "log", + "rand 0.8.5", + "tokio", + "url", + "xmltree", +] + +[[package]] +name = "indexmap" +version = "1.9.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bd070e393353796e801d209ad339e89596eb4c8d430d18ede6a1cced8fafbd99" +dependencies = [ + "autocfg", + "hashbrown 0.12.3", + "serde", +] + +[[package]] +name = "indexmap" +version = "2.2.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "168fb715dda47215e360912c096649d23d58bf392ac62f73919e831745e40f26" +dependencies = [ + "equivalent", + "hashbrown 0.14.5", + "serde", +] + +[[package]] +name = "infer" +version = "0.15.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cb33622da908807a06f9513c19b3c1ad50fab3e4137d82a78107d502075aa199" +dependencies = [ + "cfb", +] + +[[package]] +name = "inout" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a0c10553d664a4d0bcff9f4215d0aac67a639cc68ef660840afe309b807bc9f5" +dependencies = [ + "generic-array", +] + +[[package]] +name = "instant" +version = "0.1.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e0242819d153cba4b4b05a5a8f2a7e9bbf97b6055b2a002b395c96b5ff3c0222" +dependencies = [ + "cfg-if 1.0.0", +] + +[[package]] +name = "ipnet" +version = "2.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8f518f335dce6725a761382244631d86cf0ccb2863413590b31338feb467f9c3" + +[[package]] +name = "is-docker" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "928bae27f42bc99b60d9ac7334e3a21d10ad8f1835a4e12ec3ec0464765ed1b3" +dependencies = [ + "once_cell", +] + +[[package]] +name = "is-wsl" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "173609498df190136aa7dea1a91db051746d339e18476eed5ca40521f02d7aa5" +dependencies = [ + "is-docker", + "once_cell", +] + +[[package]] +name = "itertools" +version = "0.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b1c173a5686ce8bfa551b3563d0c2170bf24ca44da99c7ca4bfdab5418c3fe57" +dependencies = [ + "either", +] + +[[package]] +name = "itoa" +version = "0.4.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b71991ff56294aa922b450139ee08b3bfc70982c6b2c7562771375cf73542dd4" + +[[package]] +name = "itoa" +version = "1.0.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "49f1f14873335454500d59611f1cf4a4b0f786f9ac11f4312a78e4cf2566695b" + +[[package]] +name = "javascriptcore-rs" +version = "1.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ca5671e9ffce8ffba57afc24070e906da7fc4b1ba66f2cabebf61bf2ea257fcc" +dependencies = [ + "bitflags 1.3.2", + "glib", + "javascriptcore-rs-sys", +] + +[[package]] +name = "javascriptcore-rs-sys" +version = "1.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "af1be78d14ffa4b75b66df31840478fef72b51f8c2465d4ca7c194da9f7a5124" +dependencies = [ + "glib-sys", + "gobject-sys", + "libc", + "system-deps", +] + +[[package]] +name = "jni" +version = "0.21.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1a87aa2bb7d2af34197c04845522473242e1aa17c12f4935d5856491a7fb8c97" +dependencies = [ + "cesu8", + "cfg-if 1.0.0", + "combine", + "jni-sys", + "log", + "thiserror", + "walkdir", + "windows-sys 0.45.0", +] + +[[package]] +name = "jni-sys" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8eaf4bc02d17cbdd7ff4c7438cafcdf7fb9a4613313ad11b4f8fefe7d3fa0130" + +[[package]] +name = "jobserver" +version = "0.1.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d2b099aaa34a9751c5bf0878add70444e1ed2dd73f347be99003d4577277de6e" +dependencies = [ + "libc", +] + +[[package]] +name = "js-sys" +version = "0.3.69" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "29c15563dc2726973df627357ce0c9ddddbea194836909d655df6a75d2cf296d" +dependencies = [ + "wasm-bindgen", +] + +[[package]] +name = "json-patch" +version = "1.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ec9ad60d674508f3ca8f380a928cfe7b096bc729c4e2dbfe3852bc45da3ab30b" +dependencies = [ + "serde", + "serde_json", + "thiserror", +] + +[[package]] +name = "keccak" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ecc2af9a1119c51f12a14607e783cb977bde58bc069ff0c3da1095e635d70654" +dependencies = [ + "cpufeatures", +] + +[[package]] +name = "kernel32-sys" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7507624b29483431c0ba2d82aece8ca6cdba9382bff4ddd0f7490560c056098d" +dependencies = [ + "winapi 0.2.8", + "winapi-build", +] + +[[package]] +name = "keyboard-types" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b750dcadc39a09dbadd74e118f6dd6598df77fa01df0cfcdc52c28dece74528a" +dependencies = [ + "bitflags 2.6.0", + "serde", + "unicode-segmentation", +] + +[[package]] +name = "kuchikiki" +version = "0.8.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f29e4755b7b995046f510a7520c42b2fed58b77bd94d5a87a8eb43d2fd126da8" +dependencies = [ + "cssparser", + "html5ever", + "indexmap 1.9.3", + "matches", + "selectors", +] + +[[package]] +name = "kyber-pke" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "937633be804fdf435e7dd3608f4b6b0b1210bd340cba9f0dad00b1c47c459633" +dependencies = [ + "byteorder", + "pqc_kyber_kyberslash", + "rand 0.8.5", +] + +[[package]] +name = "lazy_static" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bbd2bcb4c963f2ddae06a2efc7e9f3591312473c50c6685e1f298068316e66fe" + +[[package]] +name = "lazycell" +version = "1.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "830d08ce1d1d941e6b30645f1a0eb5643013d835ce3779a5fc208261dbe10f55" + +[[package]] +name = "libappindicator" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "03589b9607c868cc7ae54c0b2a22c8dc03dd41692d48f2d7df73615c6a95dc0a" +dependencies = [ + "glib", + "gtk", + "gtk-sys", + "libappindicator-sys", + "log", +] + +[[package]] +name = "libappindicator-sys" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6e9ec52138abedcc58dc17a7c6c0c00a2bdb4f3427c7f63fa97fd0d859155caf" +dependencies = [ + "gtk-sys", + "libloading 0.7.4", + "once_cell", +] + +[[package]] +name = "libc" +version = "0.2.155" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "97b3888a4aecf77e811145cadf6eef5901f4782c53886191b2f693f24761847c" + +[[package]] +name = "libloading" +version = "0.7.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b67380fd3b2fbe7527a606e18729d21c6f3951633d0500574c4dc22d2d638b9f" +dependencies = [ + "cfg-if 1.0.0", + "winapi 0.3.9", +] + +[[package]] +name = "libloading" +version = "0.8.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4979f22fdb869068da03c9f7528f8297c6fd2606bc3a4affe42e6a823fdb8da4" +dependencies = [ + "cfg-if 1.0.0", + "windows-targets 0.52.6", +] + +[[package]] +name = "libredox" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c0ff37bd590ca25063e35af745c343cb7a0271906fb7b37e4813e8f79f00268d" +dependencies = [ + "bitflags 2.6.0", + "libc", +] + +[[package]] +name = "linux-raw-sys" +version = "0.4.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "78b3ae25bc7c8c38cec158d1f2757ee79e9b3740fbc7ccf0e59e4b08d793fa89" + +[[package]] +name = "lock_api" +version = "0.4.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "07af8b9cdd281b7915f413fa73f29ebd5d55d0d3f0155584dade1ff18cea1b17" +dependencies = [ + "autocfg", + "scopeguard", + "serde", +] + +[[package]] +name = "log" +version = "0.4.22" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a7a70ba024b9dc04c27ea2f0c0548feb474ec5c54bba33a7f72f873a39d07b24" + +[[package]] +name = "loom" +version = "0.5.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ff50ecb28bb86013e935fb6683ab1f6d3a20016f123c76fd4c27470076ac30f5" +dependencies = [ + "cfg-if 1.0.0", + "generator", + "scoped-tls", + "serde", + "serde_json", + "tracing", + "tracing-subscriber", +] + +[[package]] +name = "mac" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c41e0c4fef86961ac6d6f8a82609f55f31b05e4fce149ac5710e439df7619ba4" + +[[package]] +name = "malloc_buf" +version = "0.0.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "62bb907fe88d54d8d9ce32a3cceab4218ed2f6b7d35617cafe9adf84e43919cb" +dependencies = [ + "libc", +] + +[[package]] +name = "markup5ever" +version = "0.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7a2629bb1404f3d34c2e921f21fd34ba00b206124c81f65c50b43b6aaefeb016" +dependencies = [ + "log", + "phf 0.10.1", + "phf_codegen 0.10.0", + "string_cache", + "string_cache_codegen", + "tendril", +] + +[[package]] +name = "matchers" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8263075bb86c5a1b1427b5ae862e8889656f126e9f77c484496e8b47cf5c5558" +dependencies = [ + "regex-automata 0.1.10", +] + +[[package]] +name = "matches" +version = "0.1.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2532096657941c2fea9c289d370a250971c689d4f143798ff67113ec042024a5" + +[[package]] +name = "md-5" +version = "0.10.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d89e7ee0cfbedfc4da3340218492196241d89eefb6dab27de5df917a6d2e78cf" +dependencies = [ + "cfg-if 1.0.0", + "digest", +] + +[[package]] +name = "memchr" +version = "2.7.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "78ca9ab1a0babb1e7d5695e3530886289c18cf2f87ec19a575a0abdce112e3a3" + +[[package]] +name = "memoffset" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5de893c32cde5f383baa4c04c5d6dbdd735cfd4a794b0debdb2bb1b421da5ff4" +dependencies = [ + "autocfg", +] + +[[package]] +name = "memoffset" +version = "0.9.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "488016bfae457b036d996092f6cb448677611ce4449e970ceaf42695203f218a" +dependencies = [ + "autocfg", +] + +[[package]] +name = "mime" +version = "0.3.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6877bb514081ee2a7ff5ef9de3281f14a4dd4bceac4c09388074a6b5df8a139a" + +[[package]] +name = "minimal-lexical" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a" + +[[package]] +name = "miniz_oxide" +version = "0.7.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b8a240ddb74feaf34a79a7add65a741f3167852fba007066dcac1ca548d89c08" +dependencies = [ + "adler", + "simd-adler32", +] + +[[package]] +name = "mio" +version = "0.8.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a4a650543ca06a924e8b371db273b2756685faae30f8487da1b56505a8f78b0c" +dependencies = [ + "libc", + "wasi 0.11.0+wasi-snapshot-preview1", + "windows-sys 0.48.0", +] + +[[package]] +name = "muda" +version = "0.13.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "86b959f97c97044e4c96e32e1db292a7d594449546a3c6b77ae613dc3a5b5145" +dependencies = [ + "cocoa", + "crossbeam-channel", + "dpi", + "gtk", + "keyboard-types", + "objc", + "once_cell", + "png", + "serde", + "thiserror", + "windows-sys 0.52.0", +] + +[[package]] +name = "multimap" +version = "0.9.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e1a5d38b9b352dbd913288736af36af41c48d61b1a8cd34bcecd727561b7d511" +dependencies = [ + "serde", +] + +[[package]] +name = "ndk" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "451422b7e4718271c8b5b3aadf5adedba43dc76312454b387e98fae0fc951aa0" +dependencies = [ + "bitflags 1.3.2", + "jni-sys", + "ndk-sys", + "num_enum", + "raw-window-handle 0.5.2", + "thiserror", +] + +[[package]] +name = "ndk-context" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "27b02d87554356db9e9a873add8782d4ea6e3e58ea071a9adb9a2e8ddb884a8b" + +[[package]] +name = "ndk-sys" +version = "0.4.1+23.1.7779620" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3cf2aae958bd232cac5069850591667ad422d263686d75b52a065f9badeee5a3" +dependencies = [ + "jni-sys", +] + +[[package]] +name = "netbeam" +version = "0.8.0" +source = "git+https://github.com/Avarok-Cybersecurity/Citadel-Protocol?branch=utils-for-citadel-workspace#76780c40cf9f347caa85bdbae2f752ea47452675" +dependencies = [ + "anyhow", + "async-stream", + "async-trait", + "bincode2", + "bytes", + "citadel_io", + "futures", + "log", + "rand 0.8.5", + "serde", + "sync_wrapper 1.0.1", + "tokio", + "tokio-util", +] + +[[package]] +name = "new_debug_unreachable" +version = "1.0.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "650eef8c711430f1a879fdd01d4745a7deea475becfb90269c06775983bbf086" + +[[package]] +name = "nix" +version = "0.26.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "598beaf3cc6fdd9a5dfb1630c2800c7acd31df7aaf0f565796fba2b53ca1af1b" +dependencies = [ + "bitflags 1.3.2", + "cfg-if 1.0.0", + "libc", + "memoffset 0.7.1", + "pin-utils", +] + +[[package]] +name = "nodrop" +version = "0.1.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "72ef4a56884ca558e5ddb05a1d1e7e1bfd9a68d9ed024c21704cc98872dae1bb" + +[[package]] +name = "nom" +version = "7.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d273983c5a657a70a3e8f2a01329822f3b8c8172b73826411a55751e404a0a4a" +dependencies = [ + "memchr", + "minimal-lexical", +] + +[[package]] +name = "ntapi" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e8a3895c6391c39d7fe7ebc444a87eb2991b2a0bc718fdabd071eec617fc68e4" +dependencies = [ + "winapi 0.3.9", +] + +[[package]] +name = "nu-ansi-term" +version = "0.46.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "77a8165726e8236064dbb45459242600304b42a5ea24ee2948e18e023bf7ba84" +dependencies = [ + "overload", + "winapi 0.3.9", +] + +[[package]] +name = "num-conv" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "51d515d32fb182ee37cda2ccdcb92950d6a3c2893aa280e540671c2cd0f3b1d9" + +[[package]] +name = "num-integer" +version = "0.1.46" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7969661fd2958a5cb096e56c8e1ad0444ac2bbcd0061bd28660485a44879858f" +dependencies = [ + "num-traits", +] + +[[package]] +name = "num-traits" +version = "0.2.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "071dfc062690e90b734c0b2273ce72ad0ffa95f0c74596bc250dcfd960262841" +dependencies = [ + "autocfg", +] + +[[package]] +name = "num_cpus" +version = "1.16.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4161fcb6d602d4d2081af7c3a45852d875a03dd337a6bfdd6e06407b61342a43" +dependencies = [ + "hermit-abi", + "libc", +] + +[[package]] +name = "num_enum" +version = "0.5.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1f646caf906c20226733ed5b1374287eb97e3c2a5c227ce668c1f2ce20ae57c9" +dependencies = [ + "num_enum_derive", +] + +[[package]] +name = "num_enum_derive" +version = "0.5.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dcbff9bc912032c62bf65ef1d5aea88983b420f4f839db1e9b0c281a25c9c799" +dependencies = [ + "proc-macro-crate 1.3.1", + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "objc" +version = "0.2.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "915b1b472bc21c53464d6c8461c9d3af805ba1ef837e1cac254428f4a77177b1" +dependencies = [ + "malloc_buf", + "objc_exception", +] + +[[package]] +name = "objc-sys" +version = "0.3.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cdb91bdd390c7ce1a8607f35f3ca7151b65afc0ff5ff3b34fa350f7d7c7e4310" + +[[package]] +name = "objc2" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "46a785d4eeff09c14c487497c162e92766fbb3e4059a71840cecc03d9a50b804" +dependencies = [ + "objc-sys", + "objc2-encode", +] + +[[package]] +name = "objc2-app-kit" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e4e89ad9e3d7d297152b17d39ed92cd50ca8063a89a9fa569046d41568891eff" +dependencies = [ + "bitflags 2.6.0", + "block2", + "libc", + "objc2", + "objc2-core-data", + "objc2-core-image", + "objc2-foundation", + "objc2-quartz-core", +] + +[[package]] +name = "objc2-core-data" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "617fbf49e071c178c0b24c080767db52958f716d9eabdf0890523aeae54773ef" +dependencies = [ + "bitflags 2.6.0", + "block2", + "objc2", + "objc2-foundation", +] + +[[package]] +name = "objc2-core-image" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "55260963a527c99f1819c4f8e3b47fe04f9650694ef348ffd2227e8196d34c80" +dependencies = [ + "block2", + "objc2", + "objc2-foundation", + "objc2-metal", +] + +[[package]] +name = "objc2-encode" +version = "4.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7891e71393cd1f227313c9379a26a584ff3d7e6e7159e988851f0934c993f0f8" + +[[package]] +name = "objc2-foundation" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0ee638a5da3799329310ad4cfa62fbf045d5f56e3ef5ba4149e7452dcf89d5a8" +dependencies = [ + "bitflags 2.6.0", + "block2", + "dispatch", + "libc", + "objc2", +] + +[[package]] +name = "objc2-metal" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dd0cba1276f6023976a406a14ffa85e1fdd19df6b0f737b063b95f6c8c7aadd6" +dependencies = [ + "bitflags 2.6.0", + "block2", + "objc2", + "objc2-foundation", +] + +[[package]] +name = "objc2-quartz-core" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e42bee7bff906b14b167da2bac5efe6b6a07e6f7c0a21a7308d40c960242dc7a" +dependencies = [ + "bitflags 2.6.0", + "block2", + "objc2", + "objc2-foundation", + "objc2-metal", +] + +[[package]] +name = "objc_exception" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ad970fb455818ad6cba4c122ad012fae53ae8b4795f86378bce65e4f6bab2ca4" +dependencies = [ + "cc", +] + +[[package]] +name = "objc_id" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c92d4ddb4bd7b50d730c215ff871754d0da6b2178849f8a2a2ab69712d0c073b" +dependencies = [ + "objc", +] + +[[package]] +name = "object" +version = "0.36.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "081b846d1d56ddfc18fdf1a922e4f6e07a11768ea1b92dec44e42b72712ccfce" +dependencies = [ + "memchr", +] + +[[package]] +name = "once_cell" +version = "1.19.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3fdb12b2476b595f9358c5161aa467c2438859caa136dec86c26fdd2efe17b92" + +[[package]] +name = "opaque-debug" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c08d65885ee38876c4f86fa503fb49d7b507c2b62552df7c70b2fce627e06381" + +[[package]] +name = "open" +version = "5.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "61a877bf6abd716642a53ef1b89fb498923a4afca5c754f9050b4d081c05c4b3" +dependencies = [ + "is-wsl", + "libc", + "pathdiff", +] + +[[package]] +name = "openssl" +version = "0.10.66" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9529f4786b70a3e8c61e11179af17ab6188ad8d0ded78c5529441ed39d4bd9c1" +dependencies = [ + "bitflags 2.6.0", + "cfg-if 1.0.0", + "foreign-types 0.3.2", + "libc", + "once_cell", + "openssl-macros", + "openssl-sys", +] + +[[package]] +name = "openssl-macros" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a948666b637a0f465e8564c73e89d4dde00d72d4d473cc972f390fc3dcee7d9c" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.72", +] + +[[package]] +name = "openssl-probe" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ff011a302c396a5197692431fc1948019154afc178baf7d8e37367442a4601cf" + +[[package]] +name = "openssl-sys" +version = "0.9.103" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7f9e8deee91df40a943c71b917e5874b951d32a802526c85721ce3b776c929d6" +dependencies = [ + "cc", + "libc", + "pkg-config", + "vcpkg", +] + +[[package]] +name = "option-ext" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "04744f49eae99ab78e0d5c0b603ab218f515ea8cfe5a456d7629ad883a3b6e7d" + +[[package]] +name = "oqs" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "311616b64e55f9dc110286ea7cc5e475216dc332c54291e59a709c32fddb3a14" +dependencies = [ + "cstr_core", + "libc", + "oqs-sys", + "serde", +] + +[[package]] +name = "oqs-sys" +version = "0.9.1+liboqs-0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "afa79adc3c10f8e01d0b134c159254e5843ec3f91c0bd868e57777beb3329e17" +dependencies = [ + "bindgen", + "build-deps", + "cmake", + "libc", + "pkg-config", +] + +[[package]] +name = "os_pipe" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "29d73ba8daf8fac13b0501d1abeddcfe21ba7401ada61a819144b6c2a4f32209" +dependencies = [ + "libc", + "windows-sys 0.52.0", +] + +[[package]] +name = "overload" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b15813163c1d831bf4a13c3610c05c0d03b39feb07f7e09fa234dac9b15aaf39" + +[[package]] +name = "packed_struct" +version = "0.10.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "36b29691432cc9eff8b282278473b63df73bea49bc3ec5e67f31a3ae9c3ec190" +dependencies = [ + "bitvec", + "packed_struct_codegen", + "serde", +] + +[[package]] +name = "packed_struct_codegen" +version = "0.10.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9cd6706dfe50d53e0f6aa09e12c034c44faacd23e966ae5a209e8bdb8f179f98" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "pango" +version = "0.18.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7ca27ec1eb0457ab26f3036ea52229edbdb74dee1edd29063f5b9b010e7ebee4" +dependencies = [ + "gio", + "glib", + "libc", + "once_cell", + "pango-sys", +] + +[[package]] +name = "pango-sys" +version = "0.18.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "436737e391a843e5933d6d9aa102cb126d501e815b83601365a948a518555dc5" +dependencies = [ + "glib-sys", + "gobject-sys", + "libc", + "system-deps", +] + +[[package]] +name = "parking_lot" +version = "0.12.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f1bf18183cf54e8d6059647fc3063646a1801cf30896933ec2311622cc4b9a27" +dependencies = [ + "lock_api", + "parking_lot_core", +] + +[[package]] +name = "parking_lot_core" +version = "0.9.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e401f977ab385c9e4e3ab30627d6f26d00e2c73eef317493c4ec6d468726cf8" +dependencies = [ + "cfg-if 1.0.0", + "libc", + "redox_syscall", + "smallvec", + "windows-targets 0.52.6", +] + +[[package]] +name = "pathdiff" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8835116a5c179084a830efb3adc117ab007512b535bc1a21c991d3b32a6b44dd" + +[[package]] +name = "peeking_take_while" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "19b17cddbe7ec3f8bc800887bab5e717348c95ea2ca0b1bf0837fb964dc67099" + +[[package]] +name = "pem" +version = "3.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8e459365e590736a54c3fa561947c84837534b8e9af6fc5bf781307e82658fae" +dependencies = [ + "base64 0.22.1", + "serde", +] + +[[package]] +name = "percent-encoding" +version = "2.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e3148f5046208a5d56bcfc03053e3ca6334e51da8dfb19b6cdc8b306fae3283e" + +[[package]] +name = "phf" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3dfb61232e34fcb633f43d12c58f83c1df82962dcdfa565a4e866ffc17dafe12" +dependencies = [ + "phf_macros 0.8.0", + "phf_shared 0.8.0", + "proc-macro-hack", +] + +[[package]] +name = "phf" +version = "0.10.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fabbf1ead8a5bcbc20f5f8b939ee3f5b0f6f281b6ad3468b84656b658b455259" +dependencies = [ + "phf_shared 0.10.0", +] + +[[package]] +name = "phf" +version = "0.11.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ade2d8b8f33c7333b51bcf0428d37e217e9f32192ae4772156f65063b8ce03dc" +dependencies = [ + "phf_macros 0.11.2", + "phf_shared 0.11.2", +] + +[[package]] +name = "phf_codegen" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cbffee61585b0411840d3ece935cce9cb6321f01c45477d30066498cd5e1a815" +dependencies = [ + "phf_generator 0.8.0", + "phf_shared 0.8.0", +] + +[[package]] +name = "phf_codegen" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4fb1c3a8bc4dd4e5cfce29b44ffc14bedd2ee294559a294e2a4d4c9e9a6a13cd" +dependencies = [ + "phf_generator 0.10.0", + "phf_shared 0.10.0", +] + +[[package]] +name = "phf_generator" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "17367f0cc86f2d25802b2c26ee58a7b23faeccf78a396094c13dced0d0182526" +dependencies = [ + "phf_shared 0.8.0", + "rand 0.7.3", +] + +[[package]] +name = "phf_generator" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5d5285893bb5eb82e6aaf5d59ee909a06a16737a8970984dd7746ba9283498d6" +dependencies = [ + "phf_shared 0.10.0", + "rand 0.8.5", +] + +[[package]] +name = "phf_generator" +version = "0.11.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "48e4cc64c2ad9ebe670cb8fd69dd50ae301650392e81c05f9bfcb2d5bdbc24b0" +dependencies = [ + "phf_shared 0.11.2", + "rand 0.8.5", +] + +[[package]] +name = "phf_macros" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7f6fde18ff429ffc8fe78e2bf7f8b7a5a5a6e2a8b58bc5a9ac69198bbda9189c" +dependencies = [ + "phf_generator 0.8.0", + "phf_shared 0.8.0", + "proc-macro-hack", + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "phf_macros" +version = "0.11.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3444646e286606587e49f3bcf1679b8cef1dc2c5ecc29ddacaffc305180d464b" +dependencies = [ + "phf_generator 0.11.2", + "phf_shared 0.11.2", + "proc-macro2", + "quote", + "syn 2.0.72", +] + +[[package]] +name = "phf_shared" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c00cf8b9eafe68dde5e9eaa2cef8ee84a9336a47d566ec55ca16589633b65af7" +dependencies = [ + "siphasher", +] + +[[package]] +name = "phf_shared" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b6796ad771acdc0123d2a88dc428b5e38ef24456743ddb1744ed628f9815c096" +dependencies = [ + "siphasher", +] + +[[package]] +name = "phf_shared" +version = "0.11.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "90fcb95eef784c2ac79119d1dd819e162b5da872ce6f3c3abe1e8ca1c082f72b" +dependencies = [ + "siphasher", +] + +[[package]] +name = "pin-project" +version = "1.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b6bf43b791c5b9e34c3d182969b4abb522f9343702850a2e57f460d00d09b4b3" +dependencies = [ + "pin-project-internal", +] + +[[package]] +name = "pin-project-internal" +version = "1.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2f38a4412a78282e09a2cf38d195ea5420d15ba0602cb375210efbc877243965" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.72", +] + +[[package]] +name = "pin-project-lite" +version = "0.2.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bda66fc9667c18cb2758a2ac84d1167245054bcf85d5d1aaa6923f45801bdd02" + +[[package]] +name = "pin-utils" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" + +[[package]] +name = "pkg-config" +version = "0.3.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d231b230927b5e4ad203db57bbcbee2802f6bce620b1e4a9024a07d94e2907ec" + +[[package]] +name = "plist" +version = "1.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "42cf17e9a1800f5f396bc67d193dc9411b59012a5876445ef450d449881e1016" +dependencies = [ + "base64 0.22.1", + "indexmap 2.2.6", + "quick-xml", + "serde", + "time", +] + +[[package]] +name = "png" +version = "0.17.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "06e4b0d3d1312775e782c86c91a111aa1f910cbb65e1337f9975b5f9a554b5e1" +dependencies = [ + "bitflags 1.3.2", + "crc32fast", + "fdeflate", + "flate2", + "miniz_oxide", +] + +[[package]] +name = "poly1305" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8159bd90725d2df49889a078b54f4f79e87f1f8a8444194cdca81d38f5393abf" +dependencies = [ + "cpufeatures", + "opaque-debug", + "universal-hash", +] + +[[package]] +name = "polyval" +version = "0.6.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9d1fe60d06143b2430aa532c94cfe9e29783047f06c0d7fd359a9a51b729fa25" +dependencies = [ + "cfg-if 1.0.0", + "cpufeatures", + "opaque-debug", + "universal-hash", +] + +[[package]] +name = "powerfmt" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "439ee305def115ba05938db6eb1644ff94165c5ab5e9420d1c1bcedbba909391" + +[[package]] +name = "ppv-lite86" +version = "0.2.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5b40af805b3121feab8a3c29f04d8ad262fa8e0561883e7653e024ae4479e6de" + +[[package]] +name = "pqc_kyber_kyberslash" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "207d5f62689c9bca32505356e590921f70cd0dd4b0a2473924a1c51ccfd7119a" +dependencies = [ + "rand_core 0.6.4", + "sha2", +] + +[[package]] +name = "pqcrypto-falcon-wasi" +version = "0.2.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "03e4e0b9d50e8185bf5cdd750c60f9719c43ad06620e1caaad0a47419be8d4ed" +dependencies = [ + "cc", + "glob", + "libc", + "pqcrypto-internals-wasi", + "pqcrypto-traits-wasi", + "serde", + "serde-big-array 0.3.3", +] + +[[package]] +name = "pqcrypto-internals-wasi" +version = "0.2.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8a6d7a7ba4e70b9052c6f7d754b49a65aa2bdd9b5903d1eb2b602739e22abce0" +dependencies = [ + "cc", + "getrandom 0.2.15", + "libc", +] + +[[package]] +name = "pqcrypto-traits-wasi" +version = "0.3.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6dca96c933215a67324af8d927152d56fb4c3cf294b3d463a39d70841743f6c6" + +[[package]] +name = "precomputed-hash" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "925383efa346730478fb4838dbe9137d2a47675ad789c546d150a6e1dd4ab31c" + +[[package]] +name = "prettyplease" +version = "0.2.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5f12335488a2f3b0a83b14edad48dca9879ce89b2edd10e80237e4e852dd645e" +dependencies = [ + "proc-macro2", + "syn 2.0.72", +] + +[[package]] +name = "proc-macro-crate" +version = "1.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7f4c021e1093a56626774e81216a4ce732a735e5bad4868a03f3ed65ca0c3919" +dependencies = [ + "once_cell", + "toml_edit 0.19.15", +] + +[[package]] +name = "proc-macro-crate" +version = "2.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b00f26d3400549137f92511a46ac1cd8ce37cb5598a96d382381458b992a5d24" +dependencies = [ + "toml_datetime", + "toml_edit 0.20.2", +] + +[[package]] +name = "proc-macro-error" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "da25490ff9892aab3fcf7c36f08cfb902dd3e71ca0f9f9517bea02a73a5ce38c" +dependencies = [ + "proc-macro-error-attr", + "proc-macro2", + "quote", + "syn 1.0.109", + "version_check", +] + +[[package]] +name = "proc-macro-error-attr" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a1be40180e52ecc98ad80b184934baf3d0d29f979574e439af5a55274b35f869" +dependencies = [ + "proc-macro2", + "quote", + "version_check", +] + +[[package]] +name = "proc-macro-hack" +version = "0.5.20+deprecated" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dc375e1527247fe1a97d8b7156678dfe7c1af2fc075c9a4db3690ecd2a148068" + +[[package]] +name = "proc-macro2" +version = "1.0.86" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5e719e8df665df0d1c8fbfd238015744736151d4445ec0836b8e628aae103b77" +dependencies = [ + "unicode-ident", +] + +[[package]] +name = "quick-xml" +version = "0.32.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1d3a6e5838b60e0e8fa7a43f22ade549a37d61f8bdbe636d0d7816191de969c2" +dependencies = [ + "memchr", +] + +[[package]] +name = "quinn" +version = "0.10.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8cc2c5017e4b43d5995dcea317bc46c1e09404c0a9664d2908f7f02dfe943d75" +dependencies = [ + "bytes", + "pin-project-lite", + "quinn-proto", + "quinn-udp", + "rustc-hash", + "rustls", + "thiserror", + "tokio", + "tracing", +] + +[[package]] +name = "quinn-proto" +version = "0.10.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "141bf7dfde2fbc246bfd3fe12f2455aa24b0fbd9af535d8c86c7bd1381ff2b1a" +dependencies = [ + "bytes", + "rand 0.8.5", + "ring 0.16.20", + "rustc-hash", + "rustls", + "rustls-native-certs", + "slab", + "thiserror", + "tinyvec", + "tracing", +] + +[[package]] +name = "quinn-udp" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "055b4e778e8feb9f93c4e439f71dc2156ef13360b432b799e179a8c4cdf0b1d7" +dependencies = [ + "bytes", + "libc", + "socket2", + "tracing", + "windows-sys 0.48.0", +] + +[[package]] +name = "quote" +version = "1.0.36" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0fa76aaf39101c457836aec0ce2316dbdc3ab723cdda1c6bd4e6ad4208acaca7" +dependencies = [ + "proc-macro2", +] + +[[package]] +name = "radium" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dc33ff2d4973d518d823d61aa239014831e521c75da58e3df4840d3f47749d09" + +[[package]] +name = "rand" +version = "0.7.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6a6b1679d49b24bbfe0c803429aa1874472f50d9b363131f0e89fc356b544d03" +dependencies = [ + "getrandom 0.1.16", + "libc", + "rand_chacha 0.2.2", + "rand_core 0.5.1", + "rand_hc", + "rand_pcg", +] + +[[package]] +name = "rand" +version = "0.8.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404" +dependencies = [ + "libc", + "rand_chacha 0.3.1", + "rand_core 0.6.4", +] + +[[package]] +name = "rand_chacha" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f4c8ed856279c9737206bf725bf36935d8666ead7aa69b52be55af369d193402" +dependencies = [ + "ppv-lite86", + "rand_core 0.5.1", +] + +[[package]] +name = "rand_chacha" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88" +dependencies = [ + "ppv-lite86", + "rand_core 0.6.4", +] + +[[package]] +name = "rand_core" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "90bde5296fc891b0cef12a6d03ddccc162ce7b2aff54160af9338f8d40df6d19" +dependencies = [ + "getrandom 0.1.16", +] + +[[package]] +name = "rand_core" +version = "0.6.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c" +dependencies = [ + "getrandom 0.2.15", +] + +[[package]] +name = "rand_hc" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ca3129af7b92a17112d59ad498c6f81eaf463253766b90396d39ea7a39d6613c" +dependencies = [ + "rand_core 0.5.1", +] + +[[package]] +name = "rand_pcg" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "16abd0c1b639e9eb4d7c50c0b8100b0d0f849be2349829c740fe8e6eb4816429" +dependencies = [ + "rand_core 0.5.1", +] + +[[package]] +name = "raw-window-handle" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f2ff9a1f06a88b01621b7ae906ef0211290d1c8a168a15542486a8f61c0833b9" + +[[package]] +name = "raw-window-handle" +version = "0.6.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "20675572f6f24e9e76ef639bc5552774ed45f1c30e2951e1e99c59888861c539" + +[[package]] +name = "rayon" +version = "1.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b418a60154510ca1a002a752ca9714984e21e4241e804d32555251faf8b78ffa" +dependencies = [ + "either", + "rayon-core", +] + +[[package]] +name = "rayon-core" +version = "1.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1465873a3dfdaa8ae7cb14b4383657caab0b3e8a0aa9ae8e04b044854c8dfce2" +dependencies = [ + "crossbeam-deque", + "crossbeam-utils", +] + +[[package]] +name = "rcgen" +version = "0.11.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "52c4f3084aa3bc7dfbba4eff4fab2a54db4324965d8872ab933565e6fbd83bc6" +dependencies = [ + "pem", + "ring 0.16.20", + "time", + "yasna", +] + +[[package]] +name = "redox_syscall" +version = "0.5.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2a908a6e00f1fdd0dfd9c0eb08ce85126f6d8bbda50017e74bc4a4b7d4a926a4" +dependencies = [ + "bitflags 2.6.0", +] + +[[package]] +name = "redox_users" +version = "0.4.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bd283d9651eeda4b2a83a43c1c91b266c40fd76ecd39a50a8c630ae69dc72891" +dependencies = [ + "getrandom 0.2.15", + "libredox", + "thiserror", +] + +[[package]] +name = "regex" +version = "1.10.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b91213439dad192326a0d7c6ee3955910425f441d7038e0d6933b0aec5c4517f" +dependencies = [ + "aho-corasick", + "memchr", + "regex-automata 0.4.7", + "regex-syntax 0.8.4", +] + +[[package]] +name = "regex-automata" +version = "0.1.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6c230d73fb8d8c1b9c0b3135c5142a8acee3a0558fb8db5cf1cb65f8d7862132" +dependencies = [ + "regex-syntax 0.6.29", +] + +[[package]] +name = "regex-automata" +version = "0.4.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "38caf58cc5ef2fed281f89292ef23f6365465ed9a41b7a7754eb4e26496c92df" +dependencies = [ + "aho-corasick", + "memchr", + "regex-syntax 0.8.4", +] + +[[package]] +name = "regex-syntax" +version = "0.6.29" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f162c6dd7b008981e4d40210aca20b4bd0f9b60ca9271061b07f78537722f2e1" + +[[package]] +name = "regex-syntax" +version = "0.8.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7a66a03ae7c801facd77a29370b4faec201768915ac14a721ba36f20bc9c209b" + +[[package]] +name = "reqwest" +version = "0.11.27" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dd67538700a17451e7cba03ac727fb961abb7607553461627b97de0b89cf4a62" +dependencies = [ + "base64 0.21.7", + "bytes", + "encoding_rs", + "futures-core", + "futures-util", + "h2", + "http 0.2.12", + "http-body 0.4.6", + "hyper 0.14.30", + "hyper-rustls", + "ipnet", + "js-sys", + "log", + "mime", + "once_cell", + "percent-encoding", + "pin-project-lite", + "rustls", + "rustls-native-certs", + "rustls-pemfile", + "serde", + "serde_json", + "serde_urlencoded", + "sync_wrapper 0.1.2", + "system-configuration", + "tokio", + "tokio-rustls", + "tower-service", + "url", + "wasm-bindgen", + "wasm-bindgen-futures", + "web-sys", + "webpki-roots", + "winreg 0.50.0", +] + +[[package]] +name = "reqwest" +version = "0.12.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c7d6d2a27d57148378eb5e111173f4276ad26340ecc5c49a4a2152167a2d6a37" +dependencies = [ + "base64 0.22.1", + "bytes", + "futures-core", + "futures-util", + "http 1.1.0", + "http-body 1.0.1", + "http-body-util", + "hyper 1.4.1", + "hyper-util", + "ipnet", + "js-sys", + "log", + "mime", + "once_cell", + "percent-encoding", + "pin-project-lite", + "serde", + "serde_json", + "serde_urlencoded", + "sync_wrapper 1.0.1", + "tokio", + "tokio-util", + "tower-service", + "url", + "wasm-bindgen", + "wasm-bindgen-futures", + "wasm-streams", + "web-sys", + "winreg 0.52.0", +] + +[[package]] +name = "ring" +version = "0.16.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3053cf52e236a3ed746dfc745aa9cacf1b791d846bdaf412f60a8d7d6e17c8fc" +dependencies = [ + "cc", + "libc", + "once_cell", + "spin 0.5.2", + "untrusted 0.7.1", + "web-sys", + "winapi 0.3.9", +] + +[[package]] +name = "ring" +version = "0.17.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c17fa4cb658e3583423e915b9f3acc01cceaee1860e33d59ebae66adc3a2dc0d" +dependencies = [ + "cc", + "cfg-if 1.0.0", + "getrandom 0.2.15", + "libc", + "spin 0.9.8", + "untrusted 0.9.0", + "windows-sys 0.52.0", +] + +[[package]] +name = "rust-argon2" +version = "2.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9d9848531d60c9cbbcf9d166c885316c24bc0e2a9d3eba0956bb6cbbd79bc6e8" +dependencies = [ + "base64 0.21.7", + "blake2b_simd", + "constant_time_eq", + "serde", +] + +[[package]] +name = "rustc-demangle" +version = "0.1.24" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "719b953e2095829ee67db738b3bfa9fa368c94900df327b3f07fe6e794d2fe1f" + +[[package]] +name = "rustc-hash" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "08d43f7aa6b08d49f382cde6a7982047c3426db949b1424bc4b7ec9ae12c6ce2" + +[[package]] +name = "rustc_version" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bfa0f585226d2e68097d4f95d113b15b83a82e819ab25717ec0590d9584ef366" +dependencies = [ + "semver", +] + +[[package]] +name = "rustix" +version = "0.38.34" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "70dc5ec042f7a43c4a73241207cecc9873a06d45debb38b329f8541d85c2730f" +dependencies = [ + "bitflags 2.6.0", + "errno", + "libc", + "linux-raw-sys", + "windows-sys 0.52.0", +] + +[[package]] +name = "rustls" +version = "0.21.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3f56a14d1f48b391359b22f731fd4bd7e43c97f3c50eee276f3aa09c94784d3e" +dependencies = [ + "log", + "ring 0.17.8", + "rustls-webpki", + "sct", +] + +[[package]] +name = "rustls-native-certs" +version = "0.6.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a9aace74cb666635c918e9c12bc0d348266037aa8eb599b5cba565709a8dff00" +dependencies = [ + "openssl-probe", + "rustls-pemfile", + "schannel", + "security-framework", +] + +[[package]] +name = "rustls-pemfile" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1c74cae0a4cf6ccbbf5f359f08efdf8ee7e1dc532573bf0db71968cb56b1448c" +dependencies = [ + "base64 0.21.7", +] + +[[package]] +name = "rustls-webpki" +version = "0.101.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8b6275d1ee7a1cd780b64aca7726599a1dbc893b1e64144529e55c3c2f745765" +dependencies = [ + "ring 0.17.8", + "untrusted 0.9.0", +] + +[[package]] +name = "rustversion" +version = "1.0.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "955d28af4278de8121b7ebeb796b6a45735dc01436d898801014aced2773a3d6" + +[[package]] +name = "ryu" +version = "1.0.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f3cb5ba0dc43242ce17de99c180e96db90b235b8a9fdc9543c96d2209116bd9f" + +[[package]] +name = "same-file" +version = "1.0.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "93fc1dc3aaa9bfed95e02e6eadabb4baf7e3078b0bd1b4d7b6b0b68378900502" +dependencies = [ + "winapi-util", +] + +[[package]] +name = "schannel" +version = "0.1.23" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fbc91545643bcf3a0bbb6569265615222618bdf33ce4ffbbd13c4bbd4c093534" +dependencies = [ + "windows-sys 0.52.0", +] + +[[package]] +name = "schemars" +version = "0.8.21" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "09c024468a378b7e36765cd36702b7a90cc3cba11654f6685c8f233408e89e92" +dependencies = [ + "dyn-clone", + "indexmap 1.9.3", + "schemars_derive", + "serde", + "serde_json", + "url", +] + +[[package]] +name = "schemars_derive" +version = "0.8.21" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b1eee588578aff73f856ab961cd2f79e36bc45d7ded33a7562adba4667aecc0e" +dependencies = [ + "proc-macro2", + "quote", + "serde_derive_internals", + "syn 2.0.72", +] + +[[package]] +name = "scoped-tls" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e1cf6437eb19a8f4a6cc0f7dca544973b0b78843adbfeb3683d1a94a0024a294" + +[[package]] +name = "scopeguard" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" + +[[package]] +name = "sct" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "da046153aa2352493d6cb7da4b6e5c0c057d8a1d0a9aa8560baffdd945acd414" +dependencies = [ + "ring 0.17.8", + "untrusted 0.9.0", +] + +[[package]] +name = "security-framework" +version = "2.11.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "897b2245f0b511c87893af39b033e5ca9cce68824c4d7e7630b5a1d339658d02" +dependencies = [ + "bitflags 2.6.0", + "core-foundation", + "core-foundation-sys", + "libc", + "security-framework-sys", +] + +[[package]] +name = "security-framework-sys" +version = "2.11.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "75da29fe9b9b08fe9d6b22b5b4bcbc75d8db3aa31e639aa56bb62e9d46bfceaf" +dependencies = [ + "core-foundation-sys", + "libc", +] + +[[package]] +name = "selectors" +version = "0.22.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "df320f1889ac4ba6bc0cdc9c9af7af4bd64bb927bccdf32d81140dc1f9be12fe" +dependencies = [ + "bitflags 1.3.2", + "cssparser", + "derive_more", + "fxhash", + "log", + "matches", + "phf 0.8.0", + "phf_codegen 0.8.0", + "precomputed-hash", + "servo_arc", + "smallvec", + "thin-slice", +] + +[[package]] +name = "semver" +version = "1.0.23" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "61697e0a1c7e512e84a621326239844a24d8207b4669b41bc18b32ea5cbf988b" +dependencies = [ + "serde", +] + +[[package]] +name = "serde" +version = "1.0.204" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bc76f558e0cbb2a839d37354c575f1dc3fdc6546b5be373ba43d95f231bf7c12" +dependencies = [ + "serde_derive", +] + +[[package]] +name = "serde-big-array" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cd31f59f6fe2b0c055371bb2f16d7f0aa7d8881676c04a55b1596d1a17cd10a4" +dependencies = [ + "serde", +] + +[[package]] +name = "serde-big-array" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "11fc7cc2c76d73e0f27ee52abbd64eec84d46f370c88371120433196934e4b7f" +dependencies = [ + "serde", +] + +[[package]] +name = "serde-untagged" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2676ba99bd82f75cae5cbd2c8eda6fa0b8760f18978ea840e980dd5567b5c5b6" +dependencies = [ + "erased-serde", + "serde", + "typeid", +] + +[[package]] +name = "serde_derive" +version = "1.0.204" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e0cd7e117be63d3c3678776753929474f3b04a43a080c744d6b0ae2a8c28e222" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.72", +] + +[[package]] +name = "serde_derive_internals" +version = "0.29.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "18d26a20a969b9e3fdf2fc2d9f21eda6c40e2de84c9408bb5d3b05d499aae711" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.72", +] + +[[package]] +name = "serde_json" +version = "1.0.120" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4e0d21c9a8cae1235ad58a00c11cb40d4b1e5c784f1ef2c537876ed6ffd8b7c5" +dependencies = [ + "itoa 1.0.11", + "ryu", + "serde", +] + +[[package]] +name = "serde_repr" +version = "0.1.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6c64451ba24fc7a6a2d60fc75dd9c83c90903b19028d4eff35e88fc1e86564e9" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.72", +] + +[[package]] +name = "serde_spanned" +version = "0.6.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "79e674e01f999af37c49f70a6ede167a8a60b2503e56c5599532a65baa5969a0" +dependencies = [ + "serde", +] + +[[package]] +name = "serde_urlencoded" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d3491c14715ca2294c4d6a88f15e84739788c1d030eed8c110436aafdaa2f3fd" +dependencies = [ + "form_urlencoded", + "itoa 1.0.11", + "ryu", + "serde", +] + +[[package]] +name = "serde_with" +version = "3.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "69cecfa94848272156ea67b2b1a53f20fc7bc638c4a46d2f8abde08f05f4b857" +dependencies = [ + "base64 0.22.1", + "chrono", + "hex", + "indexmap 1.9.3", + "indexmap 2.2.6", + "serde", + "serde_derive", + "serde_json", + "serde_with_macros", + "time", +] + +[[package]] +name = "serde_with_macros" +version = "3.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a8fee4991ef4f274617a51ad4af30519438dacb2f56ac773b08a1922ff743350" +dependencies = [ + "darling", + "proc-macro2", + "quote", + "syn 2.0.72", +] + +[[package]] +name = "serialize-to-javascript" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c9823f2d3b6a81d98228151fdeaf848206a7855a7a042bbf9bf870449a66cafb" +dependencies = [ + "serde", + "serde_json", + "serialize-to-javascript-impl", +] + +[[package]] +name = "serialize-to-javascript-impl" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "74064874e9f6a15f04c1f3cb627902d0e6b410abbf36668afa873c61889f1763" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "servo_arc" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d98238b800e0d1576d8b6e3de32827c2d74bee68bb97748dcf5071fb53965432" +dependencies = [ + "nodrop", + "stable_deref_trait", +] + +[[package]] +name = "sha2" +version = "0.10.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "793db75ad2bcafc3ffa7c68b215fee268f537982cd901d132f89c6343f3a3dc8" +dependencies = [ + "cfg-if 1.0.0", + "cpufeatures", + "digest", +] + +[[package]] +name = "sha3" +version = "0.10.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "75872d278a8f37ef87fa0ddbda7802605cb18344497949862c0d4dcb291eba60" +dependencies = [ + "digest", + "keccak", +] + +[[package]] +name = "sharded-slab" +version = "0.1.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f40ca3c46823713e0d4209592e8d6e826aa57e928f09752619fc696c499637f6" +dependencies = [ + "lazy_static", +] + +[[package]] +name = "shared_child" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b0d94659ad3c2137fef23ae75b03d5241d633f8acded53d672decfa0e6e0caef" +dependencies = [ + "libc", + "winapi 0.3.9", +] + +[[package]] +name = "shlex" +version = "1.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64" + +[[package]] +name = "signal-hook-registry" +version = "1.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a9e9e0b4211b72e7b8b6e85c807d36c212bdb33ea8587f7569562a84df5465b1" +dependencies = [ + "libc", +] + +[[package]] +name = "simd-adler32" +version = "0.3.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d66dc143e6b11c1eddc06d5c423cfc97062865baf299914ab64caa38182078fe" + +[[package]] +name = "siphasher" +version = "0.3.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "38b58827f4464d87d377d175e90bf58eb00fd8716ff0a62f80356b5e61555d0d" + +[[package]] +name = "slab" +version = "0.4.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8f92a496fb766b417c996b9c5e57daf2f7ad3b0bebe1ccfca4856390e3d3bb67" +dependencies = [ + "autocfg", +] + +[[package]] +name = "smallvec" +version = "1.13.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3c5e1a9a646d36c3599cd173a41282daf47c44583ad367b8e6837255952e5c67" + +[[package]] +name = "socket2" +version = "0.5.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ce305eb0b4296696835b71df73eb912e0f1ffd2556a501fcede6e0c50349191c" +dependencies = [ + "libc", + "windows-sys 0.52.0", +] + +[[package]] +name = "softbuffer" +version = "0.4.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d623bff5d06f60d738990980d782c8c866997d9194cfe79ecad00aa2f76826dd" +dependencies = [ + "bytemuck", + "cfg_aliases", + "core-graphics", + "foreign-types 0.5.0", + "js-sys", + "log", + "objc2", + "objc2-app-kit", + "objc2-foundation", + "objc2-quartz-core", + "raw-window-handle 0.6.2", + "redox_syscall", + "wasm-bindgen", + "web-sys", + "windows-sys 0.52.0", +] + +[[package]] +name = "soup3" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "471f924a40f31251afc77450e781cb26d55c0b650842efafc9c6cbd2f7cc4f9f" +dependencies = [ + "futures-channel", + "gio", + "glib", + "libc", + "soup3-sys", +] + +[[package]] +name = "soup3-sys" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7ebe8950a680a12f24f15ebe1bf70db7af98ad242d9db43596ad3108aab86c27" +dependencies = [ + "gio-sys", + "glib-sys", + "gobject-sys", + "libc", + "system-deps", +] + +[[package]] +name = "spin" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6e63cff320ae2c57904679ba7cb63280a3dc4613885beafb148ee7bf9aa9042d" + +[[package]] +name = "spin" +version = "0.9.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6980e8d7511241f8acf4aebddbb1ff938df5eebe98691418c4468d0b72a96a67" +dependencies = [ + "lock_api", +] + +[[package]] +name = "stable_deref_trait" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a8f112729512f8e442d81f95a8a7ddf2b7c6b8a1a6f509a95864142b30cab2d3" + +[[package]] +name = "state" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2b8c4a4445d81357df8b1a650d0d0d6fbbbfe99d064aa5e02f3e4022061476d8" +dependencies = [ + "loom", +] + +[[package]] +name = "static_assertions" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f" + +[[package]] +name = "string_cache" +version = "0.8.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f91138e76242f575eb1d3b38b4f1362f10d3a43f47d182a5b359af488a02293b" +dependencies = [ + "new_debug_unreachable", + "once_cell", + "parking_lot", + "phf_shared 0.10.0", + "precomputed-hash", + "serde", +] + +[[package]] +name = "string_cache_codegen" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6bb30289b722be4ff74a408c3cc27edeaad656e06cb1fe8fa9231fa59c728988" +dependencies = [ + "phf_generator 0.10.0", + "phf_shared 0.10.0", + "proc-macro2", + "quote", +] + +[[package]] +name = "strsim" +version = "0.11.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7da8b5736845d9f2fcb837ea5d9e2628564b3b043a70948a3f0b778838c5fb4f" + +[[package]] +name = "strum" +version = "0.26.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8fec0f0aef304996cf250b31b5a10dee7980c85da9d759361292b8bca5a18f06" +dependencies = [ + "strum_macros", +] + +[[package]] +name = "strum_macros" +version = "0.26.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4c6bee85a5a24955dc440386795aa378cd9cf82acd5f764469152d2270e581be" +dependencies = [ + "heck 0.5.0", + "proc-macro2", + "quote", + "rustversion", + "syn 2.0.72", +] + +[[package]] +name = "stun" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d3f371788132e9d623e6eab4ba28aac083763a4133f045e6ebaee5ceb869803d" +dependencies = [ + "base64 0.21.7", + "crc", + "lazy_static", + "md-5", + "rand 0.8.5", + "ring 0.17.8", + "subtle", + "thiserror", + "tokio", + "url", + "webrtc-util", +] + +[[package]] +name = "subtle" +version = "2.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "13c2bddecc57b384dee18652358fb23172facb8a2c51ccc10d74c157bdea3292" + +[[package]] +name = "swift-rs" +version = "1.0.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1bbdb58577b6301f8d17ae2561f32002a5bae056d444e0f69e611e504a276204" +dependencies = [ + "base64 0.21.7", + "serde", + "serde_json", +] + +[[package]] +name = "syn" +version = "1.0.109" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "72b64191b275b66ffe2469e8af2c1cfe3bafa67b529ead792a6d0160888b4237" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] + +[[package]] +name = "syn" +version = "2.0.72" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dc4b9b9bf2add8093d3f2c0204471e951b2285580335de42f9d2534f3ae7a8af" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] + +[[package]] +name = "sync_wrapper" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2047c6ded9c721764247e62cd3b03c09ffc529b2ba5b10ec482ae507a4a70160" + +[[package]] +name = "sync_wrapper" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a7065abeca94b6a8a577f9bd45aa0867a2238b74e8eb67cf10d492bc39351394" + +[[package]] +name = "sysinfo" +version = "0.29.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cd727fc423c2060f6c92d9534cef765c65a6ed3f428a03d7def74a8c4348e666" +dependencies = [ + "cfg-if 1.0.0", + "core-foundation-sys", + "libc", + "ntapi", + "once_cell", + "winapi 0.3.9", +] + +[[package]] +name = "system-configuration" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ba3a3adc5c275d719af8cb4272ea1c4a6d668a777f37e115f6d11ddbc1c8e0e7" +dependencies = [ + "bitflags 1.3.2", + "core-foundation", + "system-configuration-sys", +] + +[[package]] +name = "system-configuration-sys" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a75fb188eb626b924683e3b95e3a48e63551fcfb51949de2f06a9d91dbee93c9" +dependencies = [ + "core-foundation-sys", + "libc", +] + +[[package]] +name = "system-deps" +version = "6.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a3e535eb8dded36d55ec13eddacd30dec501792ff23a0b1682c38601b8cf2349" +dependencies = [ + "cfg-expr", + "heck 0.5.0", + "pkg-config", + "toml 0.8.2", + "version-compare", +] + +[[package]] +name = "tao" +version = "0.28.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ea538df05fbc2dcbbd740ba0cfe8607688535f4798d213cbbfa13ce494f3451f" +dependencies = [ + "bitflags 2.6.0", + "cocoa", + "core-foundation", + "core-graphics", + "crossbeam-channel", + "dispatch", + "dlopen2", + "dpi", + "gdkwayland-sys", + "gdkx11-sys", + "gtk", + "instant", + "jni", + "lazy_static", + "libc", + "log", + "ndk", + "ndk-context", + "ndk-sys", + "objc", + "once_cell", + "parking_lot", + "raw-window-handle 0.6.2", + "scopeguard", + "tao-macros", + "unicode-segmentation", + "url", + "windows 0.57.0", + "windows-core 0.57.0", + "windows-version", + "x11-dl", +] + +[[package]] +name = "tao-macros" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ec114582505d158b669b136e6851f85840c109819d77c42bb7c0709f727d18c2" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "tap" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "55937e1799185b12863d447f42597ed69d9928686b8d88a1df17376a097d8369" + +[[package]] +name = "target-lexicon" +version = "0.12.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4873307b7c257eddcb50c9bedf158eb669578359fb28428bef438fec8e6ba7c2" + +[[package]] +name = "tauri" +version = "2.0.0-beta.24" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3eab508aad4ae86e23865e294b20a7bb89bd7afea523897b7478329b841d4295" +dependencies = [ + "anyhow", + "bytes", + "cocoa", + "dirs", + "dunce", + "embed_plist", + "futures-util", + "getrandom 0.2.15", + "glob", + "gtk", + "heck 0.5.0", + "http 1.1.0", + "jni", + "libc", + "log", + "mime", + "muda", + "objc", + "percent-encoding", + "raw-window-handle 0.6.2", + "reqwest 0.12.5", + "serde", + "serde_json", + "serde_repr", + "serialize-to-javascript", + "state", + "swift-rs", + "tauri-build", + "tauri-macros", + "tauri-runtime", + "tauri-runtime-wry", + "tauri-utils", + "thiserror", + "tokio", + "tray-icon", + "url", + "urlpattern", + "webkit2gtk", + "webview2-com", + "window-vibrancy", + "windows 0.57.0", +] + +[[package]] +name = "tauri-build" +version = "2.0.0-beta.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "498f587026501e4bbc5d6273b63f8956b03c37b3d3b2027f9c756fcd468e9c62" +dependencies = [ + "anyhow", + "cargo_toml", + "dirs", + "glob", + "heck 0.5.0", + "json-patch", + "schemars", + "semver", + "serde", + "serde_json", + "tauri-utils", + "tauri-winres", + "toml 0.8.2", + "walkdir", +] + +[[package]] +name = "tauri-codegen" +version = "2.0.0-beta.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "43bbc731067e319ef60601bf5716d1e706ee9ae28e38c0587f7165c7d6824cdf" +dependencies = [ + "base64 0.22.1", + "brotli", + "ico", + "json-patch", + "plist", + "png", + "proc-macro2", + "quote", + "semver", + "serde", + "serde_json", + "sha2", + "syn 2.0.72", + "tauri-utils", + "thiserror", + "time", + "url", + "uuid", + "walkdir", +] + +[[package]] +name = "tauri-macros" +version = "2.0.0-beta.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "36b4a44346577ccde75a24c62405a4c3b4f7a3a76614ee6cf1ed14a0b756795c" +dependencies = [ + "heck 0.5.0", + "proc-macro2", + "quote", + "syn 2.0.72", + "tauri-codegen", + "tauri-utils", +] + +[[package]] +name = "tauri-plugin" +version = "2.0.0-beta.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1abe0b85472516d1033ba251ac81b9f18f02725aadcaad697c8b727e6505a6ad" +dependencies = [ + "anyhow", + "glob", + "plist", + "schemars", + "serde", + "serde_json", + "tauri-utils", + "toml 0.8.2", + "walkdir", +] + +[[package]] +name = "tauri-plugin-shell" +version = "2.0.0-beta.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8a9fa8c4e3d9ec343f6c3eb081672045566128a6c48ff6f6eeea85251ff38d3f" +dependencies = [ + "encoding_rs", + "log", + "open", + "os_pipe", + "regex", + "schemars", + "serde", + "serde_json", + "shared_child", + "tauri", + "tauri-plugin", + "thiserror", + "tokio", +] + +[[package]] +name = "tauri-runtime" +version = "2.0.0-beta.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fe978df03966febbebc608931dc2cf26ef94df70855a18b05f07134cf474de09" +dependencies = [ + "dpi", + "gtk", + "http 1.1.0", + "jni", + "raw-window-handle 0.6.2", + "serde", + "serde_json", + "tauri-utils", + "thiserror", + "url", + "windows 0.57.0", +] + +[[package]] +name = "tauri-runtime-wry" +version = "2.0.0-beta.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "11e4d568f61095f507b3fc4254dfbfff3b20de2a1d66167ffca3f6d90b14db8f" +dependencies = [ + "cocoa", + "gtk", + "http 1.1.0", + "jni", + "log", + "percent-encoding", + "raw-window-handle 0.6.2", + "softbuffer", + "tao", + "tauri-runtime", + "tauri-utils", + "url", + "webkit2gtk", + "webview2-com", + "windows 0.57.0", + "wry", +] + +[[package]] +name = "tauri-utils" +version = "2.0.0-beta.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e20e51856f343c503892749b27d34042e6ca83a0369a12de3c5552d9874d04e8" +dependencies = [ + "brotli", + "cargo_metadata", + "ctor", + "dunce", + "glob", + "html5ever", + "infer", + "json-patch", + "kuchikiki", + "log", + "memchr", + "phf 0.11.2", + "proc-macro2", + "quote", + "regex", + "schemars", + "semver", + "serde", + "serde-untagged", + "serde_json", + "serde_with", + "swift-rs", + "thiserror", + "toml 0.8.2", + "url", + "urlpattern", + "walkdir", +] + +[[package]] +name = "tauri-winres" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5993dc129e544393574288923d1ec447c857f3f644187f4fbf7d9a875fbfc4fb" +dependencies = [ + "embed-resource", + "toml 0.7.8", +] + +[[package]] +name = "tendril" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d24a120c5fc464a3458240ee02c299ebcb9d67b5249c8848b09d639dca8d7bb0" +dependencies = [ + "futf", + "mac", + "utf-8", +] + +[[package]] +name = "thin-slice" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8eaa81235c7058867fa8c0e7314f33dcce9c215f535d1913822a2b3f5e289f3c" + +[[package]] +name = "thiserror" +version = "1.0.63" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c0342370b38b6a11b6cc11d6a805569958d54cfa061a29969c3b5ce2ea405724" +dependencies = [ + "thiserror-impl", +] + +[[package]] +name = "thiserror-impl" +version = "1.0.63" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a4558b58466b9ad7ca0f102865eccc95938dca1a74a856f2b57b6629050da261" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.72", +] + +[[package]] +name = "thread_local" +version = "1.1.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8b9ef9bad013ada3808854ceac7b46812a6465ba368859a37e2100283d2d719c" +dependencies = [ + "cfg-if 1.0.0", + "once_cell", +] + +[[package]] +name = "time" +version = "0.3.36" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5dfd88e563464686c916c7e46e623e520ddc6d79fa6641390f2e3fa86e83e885" +dependencies = [ + "deranged", + "itoa 1.0.11", + "num-conv", + "powerfmt", + "serde", + "time-core", + "time-macros", +] + +[[package]] +name = "time-core" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ef927ca75afb808a4d64dd374f00a2adf8d0fcff8e7b184af886c3c87ec4a3f3" + +[[package]] +name = "time-macros" +version = "0.2.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3f252a68540fde3a3877aeea552b832b40ab9a69e318efd078774a01ddee1ccf" +dependencies = [ + "num-conv", + "time-core", +] + +[[package]] +name = "tinyvec" +version = "1.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "445e881f4f6d382d5f27c034e25eb92edd7c784ceab92a0937db7f2e9471b938" +dependencies = [ + "tinyvec_macros", +] + +[[package]] +name = "tinyvec_macros" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" + +[[package]] +name = "tokio" +version = "1.38.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eb2caba9f80616f438e09748d5acda951967e1ea58508ef53d9c6402485a46df" +dependencies = [ + "backtrace", + "bytes", + "libc", + "mio", + "num_cpus", + "parking_lot", + "pin-project-lite", + "signal-hook-registry", + "socket2", + "tokio-macros", + "windows-sys 0.48.0", +] + +[[package]] +name = "tokio-macros" +version = "2.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5f5ae998a069d4b5aba8ee9dad856af7d520c3699e6159b185c2acd48155d39a" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.72", +] + +[[package]] +name = "tokio-rustls" +version = "0.24.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c28327cf380ac148141087fbfb9de9d7bd4e84ab5d2c28fbc911d753de8a7081" +dependencies = [ + "rustls", + "tokio", +] + +[[package]] +name = "tokio-stream" +version = "0.1.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "267ac89e0bec6e691e5813911606935d77c476ff49024f98abcea3e7b15e37af" +dependencies = [ + "futures-core", + "pin-project-lite", + "tokio", +] + +[[package]] +name = "tokio-util" +version = "0.7.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9cf6b47b3771c49ac75ad09a6162f53ad4b8088b76ac60e8ec1455b31a189fe1" +dependencies = [ + "bytes", + "futures-core", + "futures-sink", + "pin-project-lite", + "slab", + "tokio", +] + +[[package]] +name = "toml" +version = "0.7.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dd79e69d3b627db300ff956027cc6c3798cef26d22526befdfcd12feeb6d2257" +dependencies = [ + "serde", + "serde_spanned", + "toml_datetime", + "toml_edit 0.19.15", +] + +[[package]] +name = "toml" +version = "0.8.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "185d8ab0dfbb35cf1399a6344d8484209c088f75f8f68230da55d48d95d43e3d" +dependencies = [ + "serde", + "serde_spanned", + "toml_datetime", + "toml_edit 0.20.2", +] + +[[package]] +name = "toml_datetime" +version = "0.6.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7cda73e2f1397b1262d6dfdcef8aafae14d1de7748d66822d3bfeeb6d03e5e4b" +dependencies = [ + "serde", +] + +[[package]] +name = "toml_edit" +version = "0.19.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1b5bb770da30e5cbfde35a2d7b9b8a2c4b8ef89548a7a6aeab5c9a576e3e7421" +dependencies = [ + "indexmap 2.2.6", + "serde", + "serde_spanned", + "toml_datetime", + "winnow", +] + +[[package]] +name = "toml_edit" +version = "0.20.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "396e4d48bbb2b7554c944bde63101b5ae446cff6ec4a24227428f15eb72ef338" +dependencies = [ + "indexmap 2.2.6", + "serde", + "serde_spanned", + "toml_datetime", + "winnow", +] + +[[package]] +name = "tower" +version = "0.4.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b8fa9be0de6cf49e536ce1851f987bd21a43b771b09473c3549a6c853db37c1c" +dependencies = [ + "futures-core", + "futures-util", + "pin-project", + "pin-project-lite", + "tokio", + "tower-layer", + "tower-service", +] + +[[package]] +name = "tower-layer" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c20c8dbed6283a09604c3e69b4b7eeb54e298b8a600d4d5ecb5ad39de609f1d0" + +[[package]] +name = "tower-service" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b6bc1c9ce2b5135ac7f93c72918fc37feb872bdc6a5533a8b85eb4b86bfdae52" + +[[package]] +name = "tracing" +version = "0.1.40" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c3523ab5a71916ccf420eebdf5521fcef02141234bbc0b8a49f2fdc4544364ef" +dependencies = [ + "log", + "pin-project-lite", + "tracing-attributes", + "tracing-core", +] + +[[package]] +name = "tracing-attributes" +version = "0.1.27" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "34704c8d6ebcbc939824180af020566b01a7c01f80641264eba0999f6c2b6be7" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.72", +] + +[[package]] +name = "tracing-core" +version = "0.1.32" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c06d3da6113f116aaee68e4d601191614c9053067f9ab7f6edbcb161237daa54" +dependencies = [ + "once_cell", + "valuable", +] + +[[package]] +name = "tracing-log" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ee855f1f400bd0e5c02d150ae5de3840039a3f54b025156404e34c23c03f47c3" +dependencies = [ + "log", + "once_cell", + "tracing-core", +] + +[[package]] +name = "tracing-subscriber" +version = "0.3.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ad0f048c97dbd9faa9b7df56362b8ebcaa52adb06b498c050d2f4e32f90a7a8b" +dependencies = [ + "matchers", + "nu-ansi-term", + "once_cell", + "regex", + "sharded-slab", + "smallvec", + "thread_local", + "tracing", + "tracing-core", + "tracing-log", +] + +[[package]] +name = "tray-icon" +version = "0.14.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3ad8319cca93189ea9ab1b290de0595960529750b6b8b501a399ed1ec3775d60" +dependencies = [ + "cocoa", + "core-graphics", + "crossbeam-channel", + "dirs", + "libappindicator", + "muda", + "objc", + "once_cell", + "png", + "serde", + "thiserror", + "windows-sys 0.52.0", +] + +[[package]] +name = "try-lock" +version = "0.2.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e421abadd41a4225275504ea4d6566923418b7f05506fbc9c0fe86ba7396114b" + +[[package]] +name = "twox-hash" +version = "1.6.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "97fee6b57c6a41524a810daee9286c02d7752c4253064d0b05472833a438f675" +dependencies = [ + "cfg-if 1.0.0", + "static_assertions", +] + +[[package]] +name = "typeid" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "059d83cc991e7a42fc37bd50941885db0888e34209f8cfd9aab07ddec03bc9cf" + +[[package]] +name = "typenum" +version = "1.17.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "42ff0bf0c66b8238c6f3b578df37d0b7848e55df8577b3f74f92a69acceeb825" + +[[package]] +name = "unic-char-property" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a8c57a407d9b6fa02b4795eb81c5b6652060a15a7903ea981f3d723e6c0be221" +dependencies = [ + "unic-char-range", +] + +[[package]] +name = "unic-char-range" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0398022d5f700414f6b899e10b8348231abf9173fa93144cbc1a43b9793c1fbc" + +[[package]] +name = "unic-common" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "80d7ff825a6a654ee85a63e80f92f054f904f21e7d12da4e22f9834a4aaa35bc" + +[[package]] +name = "unic-ucd-ident" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e230a37c0381caa9219d67cf063aa3a375ffed5bf541a452db16e744bdab6987" +dependencies = [ + "unic-char-property", + "unic-char-range", + "unic-ucd-version", +] + +[[package]] +name = "unic-ucd-version" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "96bd2f2237fe450fcd0a1d2f5f4e91711124f7857ba2e964247776ebeeb7b0c4" +dependencies = [ + "unic-common", +] + +[[package]] +name = "unicode-bidi" +version = "0.3.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "08f95100a766bf4f8f28f90d77e0a5461bbdb219042e7679bebe79004fed8d75" + +[[package]] +name = "unicode-ident" +version = "1.0.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3354b9ac3fae1ff6755cb6db53683adb661634f67557942dea4facebec0fee4b" + +[[package]] +name = "unicode-normalization" +version = "0.1.23" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a56d1686db2308d901306f92a263857ef59ea39678a5458e7cb17f01415101f5" +dependencies = [ + "tinyvec", +] + +[[package]] +name = "unicode-segmentation" +version = "1.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d4c87d22b6e3f4a18d4d40ef354e97c90fcb14dd91d7dc0aa9d8a1172ebf7202" + +[[package]] +name = "universal-hash" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fc1de2c688dc15305988b563c3854064043356019f97a4b46276fe734c4f07ea" +dependencies = [ + "crypto-common", + "subtle", +] + +[[package]] +name = "untrusted" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a156c684c91ea7d62626509bce3cb4e1d9ed5c4d978f7b4352658f96a4c26b4a" + +[[package]] +name = "untrusted" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8ecb6da28b8a351d773b68d5825ac39017e680750f980f3a1a85cd8dd28a47c1" + +[[package]] +name = "url" +version = "2.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "22784dbdf76fdde8af1aeda5622b546b422b6fc585325248a2bf9f5e41e94d6c" +dependencies = [ + "form_urlencoded", + "idna", + "percent-encoding", + "serde", +] + +[[package]] +name = "urlpattern" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f9bd5ff03aea02fa45b13a7980151fe45009af1980ba69f651ec367121a31609" +dependencies = [ + "derive_more", + "regex", + "serde", + "unic-ucd-ident", + "url", +] + +[[package]] +name = "utf-8" +version = "0.7.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "09cc8ee72d2a9becf2f2febe0205bbed8fc6615b7cb429ad062dc7b7ddd036a9" + +[[package]] +name = "uuid" +version = "1.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "81dfa00651efa65069b0b6b651f4aaa31ba9e3c3ce0137aaad053604ee7e0314" +dependencies = [ + "getrandom 0.2.15", + "rand 0.8.5", + "serde", + "uuid-macro-internal", +] + +[[package]] +name = "uuid-macro-internal" +version = "1.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ee1cd046f83ea2c4e920d6ee9f7c3537ef928d75dce5d84a87c2c5d6b3999a3a" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.72", +] + +[[package]] +name = "valuable" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "830b7e5d4d90034032940e4ace0d9a9a057e7a45cd94e6c007832e39edb82f6d" + +[[package]] +name = "vcpkg" +version = "0.2.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "accd4ea62f7bb7a82fe23066fb0957d48ef677f6eeb8215f372f52e48bb32426" + +[[package]] +name = "version-compare" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "852e951cb7832cb45cb1169900d19760cfa39b82bc0ea9c0e5a14ae88411c98b" + +[[package]] +name = "version_check" +version = "0.9.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f" + +[[package]] +name = "vswhom" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "be979b7f07507105799e854203b470ff7c78a1639e330a58f183b5fea574608b" +dependencies = [ + "libc", + "vswhom-sys", +] + +[[package]] +name = "vswhom-sys" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d3b17ae1f6c8a2b28506cd96d412eebf83b4a0ff2cbefeeb952f2f9dfa44ba18" +dependencies = [ + "cc", + "libc", +] + +[[package]] +name = "walkdir" +version = "2.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "29790946404f91d9c5d06f9874efddea1dc06c5efe94541a7d6863108e3a5e4b" +dependencies = [ + "same-file", + "winapi-util", +] + +[[package]] +name = "want" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bfa7760aed19e106de2c7c0b581b509f2f25d3dacaf737cb82ac61bc6d760b0e" +dependencies = [ + "try-lock", +] + +[[package]] +name = "wasi" +version = "0.9.0+wasi-snapshot-preview1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cccddf32554fecc6acb585f82a32a72e28b48f8c4c1883ddfeeeaa96f7d8e519" + +[[package]] +name = "wasi" +version = "0.11.0+wasi-snapshot-preview1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" + +[[package]] +name = "wasm-bindgen" +version = "0.2.92" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4be2531df63900aeb2bca0daaaddec08491ee64ceecbee5076636a3b026795a8" +dependencies = [ + "cfg-if 1.0.0", + "wasm-bindgen-macro", +] + +[[package]] +name = "wasm-bindgen-backend" +version = "0.2.92" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "614d787b966d3989fa7bb98a654e369c762374fd3213d212cfc0251257e747da" +dependencies = [ + "bumpalo", + "log", + "once_cell", + "proc-macro2", + "quote", + "syn 2.0.72", + "wasm-bindgen-shared", +] + +[[package]] +name = "wasm-bindgen-futures" +version = "0.4.42" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "76bc14366121efc8dbb487ab05bcc9d346b3b5ec0eaa76e46594cabbe51762c0" +dependencies = [ + "cfg-if 1.0.0", + "js-sys", + "wasm-bindgen", + "web-sys", +] + +[[package]] +name = "wasm-bindgen-macro" +version = "0.2.92" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a1f8823de937b71b9460c0c34e25f3da88250760bec0ebac694b49997550d726" +dependencies = [ + "quote", + "wasm-bindgen-macro-support", +] + +[[package]] +name = "wasm-bindgen-macro-support" +version = "0.2.92" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e94f17b526d0a461a191c78ea52bbce64071ed5c04c9ffe424dcb38f74171bb7" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.72", + "wasm-bindgen-backend", + "wasm-bindgen-shared", +] + +[[package]] +name = "wasm-bindgen-shared" +version = "0.2.92" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "af190c94f2773fdb3729c55b007a722abb5384da03bc0986df4c289bf5567e96" + +[[package]] +name = "wasm-streams" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b65dc4c90b63b118468cf747d8bf3566c1913ef60be765b5730ead9e0a3ba129" +dependencies = [ + "futures-util", + "js-sys", + "wasm-bindgen", + "wasm-bindgen-futures", + "web-sys", +] + +[[package]] +name = "web-sys" +version = "0.3.69" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "77afa9a11836342370f4817622a2f0f418b134426d91a82dfb48f532d2ec13ef" +dependencies = [ + "js-sys", + "wasm-bindgen", +] + +[[package]] +name = "webkit2gtk" +version = "2.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "76b1bc1e54c581da1e9f179d0b38512ba358fb1af2d634a1affe42e37172361a" +dependencies = [ + "bitflags 1.3.2", + "cairo-rs", + "gdk", + "gdk-sys", + "gio", + "gio-sys", + "glib", + "glib-sys", + "gobject-sys", + "gtk", + "gtk-sys", + "javascriptcore-rs", + "libc", + "once_cell", + "soup3", + "webkit2gtk-sys", +] + +[[package]] +name = "webkit2gtk-sys" +version = "2.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "62daa38afc514d1f8f12b8693d30d5993ff77ced33ce30cd04deebc267a6d57c" +dependencies = [ + "bitflags 1.3.2", + "cairo-sys-rs", + "gdk-sys", + "gio-sys", + "glib-sys", + "gobject-sys", + "gtk-sys", + "javascriptcore-rs-sys", + "libc", + "pkg-config", + "soup3-sys", + "system-deps", +] + +[[package]] +name = "webpki-roots" +version = "0.25.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5f20c57d8d7db6d3b86154206ae5d8fba62dd39573114de97c2cb0578251f8e1" + +[[package]] +name = "webrtc-util" +version = "0.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5e85154ef743d9a2a116d104faaaa82740a281b8b4bed5ee691a2df6c133d873" +dependencies = [ + "async-trait", + "bitflags 1.3.2", + "bytes", + "ipnet", + "lazy_static", + "libc", + "log", + "nix", + "rand 0.8.5", + "thiserror", + "tokio", + "winapi 0.3.9", +] + +[[package]] +name = "webview2-com" +version = "0.31.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6516cfa64c6b3212686080eeec378e662c2af54bb2a5b2a22749673f5cb2226f" +dependencies = [ + "webview2-com-macros", + "webview2-com-sys", + "windows 0.57.0", + "windows-core 0.57.0", + "windows-implement", + "windows-interface", +] + +[[package]] +name = "webview2-com-macros" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ac1345798ecd8122468840bcdf1b95e5dc6d2206c5e4b0eafa078d061f59c9bc" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.72", +] + +[[package]] +name = "webview2-com-sys" +version = "0.31.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c76d5b77320ff155660be1df3e6588bc85c75f1a9feef938cc4dc4dd60d1d7cf" +dependencies = [ + "thiserror", + "windows 0.57.0", + "windows-core 0.57.0", +] + +[[package]] +name = "which" +version = "4.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "87ba24419a2078cd2b0f2ede2691b6c66d8e47836da3b6db8265ebad47afbfc7" +dependencies = [ + "either", + "home", + "once_cell", + "rustix", +] + +[[package]] +name = "wildmatch" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7f44b95f62d34113cf558c93511ac93027e03e9c29a60dd0fd70e6e025c7270a" + +[[package]] +name = "winapi" +version = "0.2.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "167dc9d6949a9b857f3451275e911c3f44255842c1f7a76f33c55103a909087a" + +[[package]] +name = "winapi" +version = "0.3.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419" +dependencies = [ + "winapi-i686-pc-windows-gnu", + "winapi-x86_64-pc-windows-gnu", +] + +[[package]] +name = "winapi-build" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2d315eee3b34aca4797b2da6b13ed88266e6d612562a0c46390af8299fc699bc" + +[[package]] +name = "winapi-i686-pc-windows-gnu" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" + +[[package]] +name = "winapi-util" +version = "0.1.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4d4cc384e1e73b93bafa6fb4f1df8c41695c8a91cf9c4c64358067d15a7b6c6b" +dependencies = [ + "windows-sys 0.52.0", +] + +[[package]] +name = "winapi-x86_64-pc-windows-gnu" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" + +[[package]] +name = "window-vibrancy" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "33082acd404763b315866e14a0d5193f3422c81086657583937a750cdd3ec340" +dependencies = [ + "cocoa", + "objc", + "raw-window-handle 0.6.2", + "windows-sys 0.52.0", + "windows-version", +] + +[[package]] +name = "windows" +version = "0.48.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e686886bc078bc1b0b600cac0147aadb815089b6e4da64016cbd754b6342700f" +dependencies = [ + "windows-targets 0.48.5", +] + +[[package]] +name = "windows" +version = "0.57.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "12342cb4d8e3b046f3d80effd474a7a02447231330ef77d71daa6fbc40681143" +dependencies = [ + "windows-core 0.57.0", + "windows-targets 0.52.6", +] + +[[package]] +name = "windows-core" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "33ab640c8d7e35bf8ba19b884ba838ceb4fba93a4e8c65a9059d08afcfc683d9" +dependencies = [ + "windows-targets 0.52.6", +] + +[[package]] +name = "windows-core" +version = "0.57.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d2ed2439a290666cd67ecce2b0ffaad89c2a56b976b736e6ece670297897832d" +dependencies = [ + "windows-implement", + "windows-interface", + "windows-result", + "windows-targets 0.52.6", +] + +[[package]] +name = "windows-implement" +version = "0.57.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9107ddc059d5b6fbfbffdfa7a7fe3e22a226def0b2608f72e9d552763d3e1ad7" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.72", +] + +[[package]] +name = "windows-interface" +version = "0.57.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "29bee4b38ea3cde66011baa44dba677c432a78593e202392d1e9070cf2a7fca7" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.72", +] + +[[package]] +name = "windows-result" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5e383302e8ec8515204254685643de10811af0ed97ea37210dc26fb0032647f8" +dependencies = [ + "windows-targets 0.52.6", +] + +[[package]] +name = "windows-sys" +version = "0.45.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "75283be5efb2831d37ea142365f009c02ec203cd29a3ebecbc093d52315b66d0" +dependencies = [ + "windows-targets 0.42.2", +] + +[[package]] +name = "windows-sys" +version = "0.48.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "677d2418bec65e3338edb076e806bc1ec15693c5d0104683f2efe857f61056a9" +dependencies = [ + "windows-targets 0.48.5", +] + +[[package]] +name = "windows-sys" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33d" +dependencies = [ + "windows-targets 0.52.6", +] + +[[package]] +name = "windows-targets" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8e5180c00cd44c9b1c88adb3693291f1cd93605ded80c250a75d472756b4d071" +dependencies = [ + "windows_aarch64_gnullvm 0.42.2", + "windows_aarch64_msvc 0.42.2", + "windows_i686_gnu 0.42.2", + "windows_i686_msvc 0.42.2", + "windows_x86_64_gnu 0.42.2", + "windows_x86_64_gnullvm 0.42.2", + "windows_x86_64_msvc 0.42.2", +] + +[[package]] +name = "windows-targets" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9a2fa6e2155d7247be68c096456083145c183cbbbc2764150dda45a87197940c" +dependencies = [ + "windows_aarch64_gnullvm 0.48.5", + "windows_aarch64_msvc 0.48.5", + "windows_i686_gnu 0.48.5", + "windows_i686_msvc 0.48.5", + "windows_x86_64_gnu 0.48.5", + "windows_x86_64_gnullvm 0.48.5", + "windows_x86_64_msvc 0.48.5", +] + +[[package]] +name = "windows-targets" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9b724f72796e036ab90c1021d4780d4d3d648aca59e491e6b98e725b84e99973" +dependencies = [ + "windows_aarch64_gnullvm 0.52.6", + "windows_aarch64_msvc 0.52.6", + "windows_i686_gnu 0.52.6", + "windows_i686_gnullvm", + "windows_i686_msvc 0.52.6", + "windows_x86_64_gnu 0.52.6", + "windows_x86_64_gnullvm 0.52.6", + "windows_x86_64_msvc 0.52.6", +] + +[[package]] +name = "windows-version" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6998aa457c9ba8ff2fb9f13e9d2a930dabcea28f1d0ab94d687d8b3654844515" +dependencies = [ + "windows-targets 0.52.6", +] + +[[package]] +name = "windows_aarch64_gnullvm" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "597a5118570b68bc08d8d59125332c54f1ba9d9adeedeef5b99b02ba2b0698f8" + +[[package]] +name = "windows_aarch64_gnullvm" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2b38e32f0abccf9987a4e3079dfb67dcd799fb61361e53e2882c3cbaf0d905d8" + +[[package]] +name = "windows_aarch64_gnullvm" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "32a4622180e7a0ec044bb555404c800bc9fd9ec262ec147edd5989ccd0c02cd3" + +[[package]] +name = "windows_aarch64_msvc" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e08e8864a60f06ef0d0ff4ba04124db8b0fb3be5776a5cd47641e942e58c4d43" + +[[package]] +name = "windows_aarch64_msvc" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dc35310971f3b2dbbf3f0690a219f40e2d9afcf64f9ab7cc1be722937c26b4bc" + +[[package]] +name = "windows_aarch64_msvc" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "09ec2a7bb152e2252b53fa7803150007879548bc709c039df7627cabbd05d469" + +[[package]] +name = "windows_i686_gnu" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c61d927d8da41da96a81f029489353e68739737d3beca43145c8afec9a31a84f" + +[[package]] +name = "windows_i686_gnu" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a75915e7def60c94dcef72200b9a8e58e5091744960da64ec734a6c6e9b3743e" + +[[package]] +name = "windows_i686_gnu" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8e9b5ad5ab802e97eb8e295ac6720e509ee4c243f69d781394014ebfe8bbfa0b" + +[[package]] +name = "windows_i686_gnullvm" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0eee52d38c090b3caa76c563b86c3a4bd71ef1a819287c19d586d7334ae8ed66" + +[[package]] +name = "windows_i686_msvc" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "44d840b6ec649f480a41c8d80f9c65108b92d89345dd94027bfe06ac444d1060" + +[[package]] +name = "windows_i686_msvc" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8f55c233f70c4b27f66c523580f78f1004e8b5a8b659e05a4eb49d4166cca406" + +[[package]] +name = "windows_i686_msvc" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "240948bc05c5e7c6dabba28bf89d89ffce3e303022809e73deaefe4f6ec56c66" + +[[package]] +name = "windows_x86_64_gnu" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8de912b8b8feb55c064867cf047dda097f92d51efad5b491dfb98f6bbb70cb36" + +[[package]] +name = "windows_x86_64_gnu" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "53d40abd2583d23e4718fddf1ebec84dbff8381c07cae67ff7768bbf19c6718e" + +[[package]] +name = "windows_x86_64_gnu" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "147a5c80aabfbf0c7d901cb5895d1de30ef2907eb21fbbab29ca94c5b08b1a78" + +[[package]] +name = "windows_x86_64_gnullvm" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "26d41b46a36d453748aedef1486d5c7a85db22e56aff34643984ea85514e94a3" + +[[package]] +name = "windows_x86_64_gnullvm" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0b7b52767868a23d5bab768e390dc5f5c55825b6d30b86c844ff2dc7414044cc" + +[[package]] +name = "windows_x86_64_gnullvm" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "24d5b23dc417412679681396f2b49f3de8c1473deb516bd34410872eff51ed0d" + +[[package]] +name = "windows_x86_64_msvc" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9aec5da331524158c6d1a4ac0ab1541149c0b9505fde06423b02f5ef0106b9f0" + +[[package]] +name = "windows_x86_64_msvc" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ed94fce61571a4006852b7389a063ab983c02eb1bb37b47f8272ce92d06d9538" + +[[package]] +name = "windows_x86_64_msvc" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec" + +[[package]] +name = "winnow" +version = "0.5.40" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f593a95398737aeed53e489c785df13f3618e41dbcd6718c6addbf1395aa6876" +dependencies = [ + "memchr", +] + +[[package]] +name = "winreg" +version = "0.50.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "524e57b2c537c0f9b1e69f1965311ec12182b4122e45035b1508cd24d2adadb1" +dependencies = [ + "cfg-if 1.0.0", + "windows-sys 0.48.0", +] + +[[package]] +name = "winreg" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a277a57398d4bfa075df44f501a17cfdf8542d224f0d36095a2adc7aee4ef0a5" +dependencies = [ + "cfg-if 1.0.0", + "windows-sys 0.48.0", +] + +[[package]] +name = "wry" +version = "0.41.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "68b00c945786b02d7805d09a969fa36d0eee4e0bd4fb3ec2a79d2bf45a1b44cd" +dependencies = [ + "base64 0.22.1", + "block", + "cocoa", + "core-graphics", + "crossbeam-channel", + "dpi", + "dunce", + "gdkx11", + "gtk", + "html5ever", + "http 1.1.0", + "javascriptcore-rs", + "jni", + "kuchikiki", + "libc", + "ndk", + "ndk-context", + "ndk-sys", + "objc", + "objc_id", + "once_cell", + "percent-encoding", + "raw-window-handle 0.6.2", + "sha2", + "soup3", + "tao-macros", + "thiserror", + "webkit2gtk", + "webkit2gtk-sys", + "webview2-com", + "windows 0.57.0", + "windows-core 0.57.0", + "windows-version", + "x11-dl", +] + +[[package]] +name = "wyz" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "05f360fc0b24296329c78fda852a1e9ae82de9cf7b27dae4b7f62f118f77b9ed" +dependencies = [ + "tap", +] + +[[package]] +name = "x11" +version = "2.21.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "502da5464ccd04011667b11c435cb992822c2c0dbde1770c988480d312a0db2e" +dependencies = [ + "libc", + "pkg-config", +] + +[[package]] +name = "x11-dl" +version = "2.21.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "38735924fedd5314a6e548792904ed8c6de6636285cb9fec04d5b1db85c1516f" +dependencies = [ + "libc", + "once_cell", + "pkg-config", +] + +[[package]] +name = "xml-rs" +version = "0.8.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "791978798f0597cfc70478424c2b4fdc2b7a8024aaff78497ef00f24ef674193" + +[[package]] +name = "xmltree" +version = "0.10.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d7d8a75eaf6557bb84a65ace8609883db44a29951042ada9b393151532e41fcb" +dependencies = [ + "xml-rs", +] + +[[package]] +name = "yasna" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e17bb3549cc1321ae1296b9cdc2698e2b6cb1992adfa19a8c72e5b7a738f44cd" +dependencies = [ + "time", +] + +[[package]] +name = "zerocopy" +version = "0.7.35" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1b9b4fd18abc82b8136838da5d50bae7bdea537c574d8dc1a34ed098d6c166f0" +dependencies = [ + "byteorder", + "zerocopy-derive", +] + +[[package]] +name = "zerocopy-derive" +version = "0.7.35" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fa4f8080344d4671fb4e831a13ad1e68092748387dfc4f55e356242fae12ce3e" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.72", +] + +[[package]] +name = "zeroize" +version = "1.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ced3678a2879b30306d323f4542626697a464a97c0a07c9aebf7ebca65cd4dde" +dependencies = [ + "serde", + "zeroize_derive", +] + +[[package]] +name = "zeroize_derive" +version = "1.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ce36e65b0d2999d2aafac989fb249189a141aee1f53c612c1f37d72631959f69" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.72", +] diff --git a/src-tauri/Cargo.toml b/src-tauri/Cargo.toml index 30141e3..9c0bad3 100644 --- a/src-tauri/Cargo.toml +++ b/src-tauri/Cargo.toml @@ -3,39 +3,23 @@ name = "citadel_workspace" version = "0.0.0" description = "A Tauri App" authors = ["you"] -license = "" -repository = "" edition = "2021" # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html -[lib] -name = "citadel_workspace_ui_lib" -crate-type = ["staticlib", "cdylib", "rlib"] - [build-dependencies] tauri-build = { version = "2.0.0-beta", features = [] } [dependencies] -lazy_static = "1.4.0" -parking_lot = {version = "0.12.1", features = ["deadlock_detection"] } -tauri = { version = "2.0.0-beta.22", features = ["devtools"] } +tauri = { version = "2.0.0-beta", features = [] } tauri-plugin-shell = "2.0.0-beta" -serde_json = "1.0" -serde = { version = "1.0", features = ["derive"] } +serde = { version = "1", features = ["derive"] } +serde_json = "1" +citadel-internal-service-types = { version = "0.1.0", git = "https://github.com/Avarok-Cybersecurity/citadel-workspace-core.git", branch = "new-temp-KT", package = "citadel-internal-service-types" } +citadel-internal-service-connector = { version = "0.1.0", git = "https://github.com/Avarok-Cybersecurity/citadel-workspace-core.git", branch = "new-temp-KT", package = "citadel-internal-service-connector" } +citadel_types = { git = "https://github.com/Avarok-Cybersecurity/Citadel-Protocol", branch = "utils-for-citadel-workspace" } tokio = { version = "1.28.2", features = ["net", "rt", "macros"] } -bincode2 = "2.0.1" -bytes = "1.4.0" -uuid = { version = "1.3.4" } -citadel-internal-service-types = {version="0.1.0", git="https://github.com/Avarok-Cybersecurity/citadel-workspace-core.git", package="citadel-internal-service-types"} -citadel-internal-service-connector= {version="0.1.0", git="https://github.com/Avarok-Cybersecurity/citadel-workspace-core.git", package="citadel-internal-service-connector" } -futures = "0.3.28" tokio-util = { version = "0.7.8", default-features = false } citadel_logging = { version = "0.7.0", default-features = false } -tauri-plugin-log = "2.0.0-beta.1" -log = "^0.4" - -[features] -# this feature is used for production builds or when `devPath` points to the filesystem -# DO NOT REMOVE!! -custom-protocol = ["tauri/custom-protocol"] +uuid = { version = "1.3.4" } +futures = "0.3.28" diff --git a/src-tauri/capabilities/default.json b/src-tauri/capabilities/default.json new file mode 100644 index 0000000..e14ca1d --- /dev/null +++ b/src-tauri/capabilities/default.json @@ -0,0 +1,17 @@ +{ + "$schema": "../gen/schemas/desktop-schema.json", + "identifier": "default", + "description": "Capability for the main window", + "windows": ["main"], + "permissions": [ + "path:default", + "event:default", + "window:default", + "app:default", + "image:default", + "resources:default", + "menu:default", + "tray:default", + "shell:allow-open" + ] +} diff --git a/src-tauri/src/commands/connect.rs b/src-tauri/src/commands/connect.rs index 84bf172..d1840f6 100644 --- a/src-tauri/src/commands/connect.rs +++ b/src-tauri/src/commands/connect.rs @@ -1,27 +1,92 @@ -use crate::commands::send_to_internal_service; +use crate::util::RegistrationInfo; use citadel_internal_service_types::InternalServiceRequest::Connect; +use serde::{Deserialize, Serialize}; use tauri::State; +use super::send_and_recv; use crate::structs::ConnectionState; +use citadel_internal_service_types::{InternalServiceResponse, SessionSecuritySettings}; +use citadel_types::crypto::{ + AlgorithmsExt, CryptoParameters, EncryptionAlgorithm, KemAlgorithm, SigAlgorithm, +}; +use uuid::Uuid; + +#[derive(Serialize, Deserialize, Debug, Clone)] +#[allow(non_snake_case)] +pub struct ConnectRequestTS { + pub registrationInfo: RegistrationInfo, +} + +#[derive(Serialize, Deserialize, Debug, Clone)] +pub struct ConnectResponseTS { + pub cid: Option, + pub success: bool, + pub message: String, +} #[tauri::command] pub async fn connect( - username: String, - password: String, - request_id: String, + request: ConnectRequestTS, state: State<'_, ConnectionState>, -) -> Result { - let request = Connect { - username, - password: password.into_bytes().into(), +) -> Result { + println!( + "Connecting to {}...", + request.registrationInfo.server_address + ); + + let registration_info = request.registrationInfo; + let request_id = Uuid::new_v4(); + + let crypto_params = CryptoParameters { + encryption_algorithm: EncryptionAlgorithm::from_u8(registration_info.encryption_algorithm) + .unwrap(), + kem_algorithm: KemAlgorithm::from_u8(registration_info.kem_algorithm).unwrap(), + sig_algorithm: SigAlgorithm::from_u8(registration_info.sig_algorithm).unwrap(), + }; + + let security_settings = SessionSecuritySettings { + security_level: registration_info.security_level.into(), + secrecy_mode: registration_info.security_mode.into(), + crypto_params, + }; + + let payload = Connect { + username: registration_info.username, + password: registration_info.profile_password.into_bytes().into(), connect_mode: Default::default(), udp_mode: Default::default(), keep_alive_timeout: Default::default(), - session_security_settings: Default::default(), - request_id: request_id.parse().unwrap(), - server_password: None, + session_security_settings: security_settings, + request_id, + server_password: registration_info + .server_password + .map(|pass| pass.into_bytes().into()), }; - send_to_internal_service(request, state).await?; - Ok(request_id) + let response = send_and_recv(payload, request_id, &state).await; + + match response { + InternalServiceResponse::ConnectSuccess(r) => { + println!("Connection successful"); + Ok(ConnectResponseTS { + cid: Some(r.cid.to_string()), + success: true, + message: "Success".to_owned(), + }) + } + InternalServiceResponse::ConnectFailure(err) => { + println!("Connection failure: {:#?}", err); + Ok(ConnectResponseTS { + cid: None, + success: false, + message: err.message, + }) + } + other => { + panic!( + "Internal service returned unexpected type '{}' during connection", + std::any::type_name_of_val(&other) + ) + } + } } diff --git a/src-tauri/src/commands/list_all_peers.rs b/src-tauri/src/commands/list_all_peers.rs index c647c40..41c9546 100644 --- a/src-tauri/src/commands/list_all_peers.rs +++ b/src-tauri/src/commands/list_all_peers.rs @@ -1,21 +1,69 @@ -use crate::commands::send_to_internal_service; -use citadel_internal_service_types::InternalServiceRequest::ListAllPeers; +use std::collections::HashMap; + +use citadel_internal_service_types::{ + InternalServiceRequest::ListAllPeers, InternalServiceResponse, PeerInformation, +}; +use serde::{Deserialize, Serialize}; use tauri::State; use uuid::Uuid; use crate::structs::ConnectionState; +use super::send_and_recv; + +#[derive(Serialize, Deserialize, Clone, Debug)] +pub struct ListAllPeersRequestTS { + cid: String, +} + +#[derive(Serialize, Deserialize, Clone, Debug)] +pub struct ListAllPeersResponseTS { + pub peers: Option>, + pub success: bool, + pub message: String, +} + #[tauri::command] pub async fn list_all_peers( - cid: String, + request: ListAllPeersRequestTS, state: State<'_, ConnectionState>, -) -> Result { +) -> Result { + println!("Listing all peers..."); let request_id = Uuid::new_v4(); - let request = ListAllPeers { - cid: cid.parse().unwrap(), - request_id, - }; - send_to_internal_service(request, state).await?; - Ok(request_id.to_string()) + let cid = request.cid.parse().unwrap(); + + let payload = ListAllPeers { cid, request_id }; + + let response = send_and_recv(payload, request_id, &state).await; + + match response { + InternalServiceResponse::ListAllPeersResponse(resp) => { + println!("Success"); + Ok(ListAllPeersResponseTS { + peers: Some( + resp.peer_information + .into_iter() + .map(|(cid, info)| (cid.to_string(), info)) + .collect(), + ), + success: true, + message: "success".to_string(), + }) + } + InternalServiceResponse::ListAllPeersFailure(err) => { + println!("Error listing all peers: {:#?}", err); + Ok(ListAllPeersResponseTS { + peers: None, + success: false, + message: err.message, + }) + } + other => { + panic!( + "Internal service returned unexpected type '{}' during connection", + std::any::type_name_of_val(&other) + ) + } + } } diff --git a/src-tauri/src/commands/list_known_servers.rs b/src-tauri/src/commands/list_known_servers.rs new file mode 100644 index 0000000..2f8ef64 --- /dev/null +++ b/src-tauri/src/commands/list_known_servers.rs @@ -0,0 +1,44 @@ +use crate::util::RegistrationInfo; +use crate::{structs::ConnectionState, util::local_db::LocalDb}; +use serde::{Deserialize, Serialize}; +use tauri::State; + +#[derive(Debug, Deserialize, Serialize, Clone)] +pub struct ListKnownServersRequestTS { + pub cid: String, +} + +#[derive(Debug, Deserialize, Serialize, Clone)] +pub struct ListKnownServersResponseTS { + pub servers: Vec, +} + +#[tauri::command] +pub async fn list_known_servers( + _request: ListKnownServersRequestTS, + _window: tauri::Window, + state: State<'_, ConnectionState>, +) -> Result { + println!("Listing known servers..."); + let db = LocalDb::connect("0".to_string(), &state); + let addresses = db + .list_known_servers() + .await + .expect("failed to list known servers") + .server_addresses; + + println!("The addresses are: {:?}", addresses); + + let mut servers: Vec = + Vec::with_capacity(std::mem::size_of::() * addresses.len()); + + for addr in addresses { + servers.push( + db.get_registration(addr) + .await + .expect("failed to get registration from address"), + ) + } + + Ok(ListKnownServersResponseTS { servers }) +} diff --git a/src-tauri/src/commands/local_db_set_kv.rs b/src-tauri/src/commands/local_db_set_kv.rs index c9e7424..a96d9a3 100644 --- a/src-tauri/src/commands/local_db_set_kv.rs +++ b/src-tauri/src/commands/local_db_set_kv.rs @@ -1,4 +1,3 @@ -use crate::commands::send_to_internal_service; use citadel_internal_service_types::InternalServiceRequest::LocalDBSetKV; use tauri::State; use uuid::Uuid; @@ -22,6 +21,6 @@ pub async fn local_db_set_kv( value, }; - send_to_internal_service(payload, state).await?; + Ok(request_id.to_string()) } diff --git a/src-tauri/src/commands/mod.rs b/src-tauri/src/commands/mod.rs index 89ce015..3156168 100644 --- a/src-tauri/src/commands/mod.rs +++ b/src-tauri/src/commands/mod.rs @@ -1,36 +1,96 @@ -use crate::structs::ConnectionState; -use citadel_internal_service_types::InternalServiceRequest; +use crate::structs::{ConnectionState, PacketHandle}; +use citadel_internal_service_types::{InternalServiceRequest, InternalServiceResponse}; use futures::SinkExt; use tauri::State; +use tokio::sync::mpsc; +use uuid::Uuid; -pub mod connect; -pub mod disconnect; -pub mod get_session; -pub mod list_all_peers; -pub mod list_registered_peers; -pub mod local_db_clear_all_kv; -pub mod local_db_delete_kv; -pub mod local_db_get_all_kv; -pub mod local_db_get_kv; -pub mod local_db_set_kv; -pub mod message; -pub mod open_connection; +mod connect; +// pub mod disconnect; +// pub mod get_session; +mod list_all_peers; +// pub mod list_registered_peers; +// pub mod local_db_clear_all_kv; +// pub mod local_db_delete_kv; +// pub mod local_db_get_all_kv; +// pub mod local_db_get_kv; +// pub mod local_db_set_kv; +// pub mod message; +// pub mod open_connection; pub mod peer_connect; -pub mod peer_disconnect; -pub mod peer_register; -pub mod register; - -pub(crate) async fn send_to_internal_service( - request: InternalServiceRequest, - state: State<'_, ConnectionState>, -) -> Result<(), String> { - state - .sink - .lock() - .await - .as_mut() - .ok_or("No connection to the internal service set")? - .send(request) +// pub mod peer_disconnect; +// pub mod peer_register; +mod list_known_servers; +pub mod register; // this can go private again after RegistrationRequestTS is reformatted + +pub use connect::connect; +pub use list_all_peers::list_all_peers; +pub use list_known_servers::list_known_servers; +pub use peer_connect::peer_connect; +pub use register::register; + +pub(crate) async fn send_and_recv( + payload: InternalServiceRequest, + request_id: Uuid, + state: &State<'_, ConnectionState>, +) -> InternalServiceResponse { + // Create a new mpsc channel and attach the request id to it + let (tx, mut rx) = mpsc::channel::(1024); + let packet_handle = PacketHandle { + request_id, + channel: tx, + }; + + // Attach the mpsc channel to the vector of listeners + // NOTE: be careful touching this; very easy to end up in a deadlock + let mut guard = state.listeners.lock().await; + guard.push(packet_handle); + drop(guard); + + // Send message to internal service + println!( + "Sending message with request_id {}:\n{:#?}", + request_id, payload + ); + let mut guard = state.sink.lock().await; + guard + .send(payload) .await .map_err(|err| err.to_string()) + .expect("error sending payload to stream"); + drop(guard); + + // Wait for the background TCP listener (main.rs) to dispatch the message + let incoming = match rx.recv().await { + Some(v) => v, + None => panic!("Channel unexpectedly closed before response."), + }; + + // Remove channel from handles + let mut guard = state.listeners.lock().await; + if let Some(index) = guard.iter().position(|h| h.request_id == request_id) { + guard.remove(index); + } else { + panic!( + "PacketHandle was unexpectedly dropped by a third party, likely due to a UUID crash." + ); + } + drop(guard); + + incoming } + +// pub(crate) async fn send_to_internal_service( +// request: InternalServiceRequest, +// state: State<'_, ConnectionState>, +// ) -> Result<(), String> { +// state +// .sink +// .lock() +// .await +// .as_mut() +// .ok_or("No connection to the internal service set")? +// .send(request) +// .await +// .map_err(|err| err.to_string()) +// } diff --git a/src-tauri/src/commands/peer_connect.rs b/src-tauri/src/commands/peer_connect.rs index 96cba97..32de2d4 100644 --- a/src-tauri/src/commands/peer_connect.rs +++ b/src-tauri/src/commands/peer_connect.rs @@ -1,26 +1,61 @@ -use crate::commands::send_to_internal_service; -use citadel_internal_service_types::InternalServiceRequest::PeerConnect; +use citadel_internal_service_types::{ + InternalServiceRequest::PeerConnect, InternalServiceResponse, +}; +use serde::{Deserialize, Serialize}; use tauri::State; use uuid::Uuid; use crate::structs::ConnectionState; +use super::send_and_recv; + +#[allow(non_snake_case)] +#[derive(Debug, Serialize, Deserialize)] +pub struct PeerConnectRequestTS { + pub cid: String, + pub peerCid: String, +} + +#[derive(Debug, Serialize, Deserialize)] +pub struct PeerConnectResponseTS { + success: bool, + message: Option, +} + #[tauri::command] pub async fn peer_connect( - cid: String, - peer_cid: String, + request: PeerConnectRequestTS, state: State<'_, ConnectionState>, -) -> Result { +) -> Result { let request_id = Uuid::new_v4(); let payload = PeerConnect { request_id, - cid: cid.parse::().unwrap(), - peer_cid: peer_cid.parse::().unwrap(), + cid: request.cid.parse::().unwrap(), + peer_cid: request.peerCid.parse::().unwrap(), udp_mode: Default::default(), session_security_settings: Default::default(), peer_session_password: None, }; - send_to_internal_service(payload, state).await?; - Ok(request_id.to_string()) + let response = send_and_recv(payload, request_id, &state).await; + + match response { + InternalServiceResponse::PeerConnectSuccess(_) => Ok(PeerConnectResponseTS { + success: true, + message: None, + }), + InternalServiceResponse::PeerConnectFailure(r) => { + println!("Peer connect failed: {}", r.message); + Ok(PeerConnectResponseTS { + success: false, + message: Some(r.message), + }) + } + other => { + panic!( + "Internal service returned unexpected type '{}' during registration", + std::any::type_name_of_val(&other) + ) + } + } } diff --git a/src-tauri/src/commands/register.rs b/src-tauri/src/commands/register.rs index a0979e5..499123a 100644 --- a/src-tauri/src/commands/register.rs +++ b/src-tauri/src/commands/register.rs @@ -1,34 +1,115 @@ -use crate::commands::send_to_internal_service; -use citadel_internal_service_types::InternalServiceRequest; +// use crate::commands::send_to_internal_service; +use citadel_internal_service_types::{ + InternalServiceRequest, InternalServiceResponse, SessionSecuritySettings, +}; +use citadel_types::crypto::{ + AlgorithmsExt, CryptoParameters, EncryptionAlgorithm, KemAlgorithm, SigAlgorithm, +}; +use serde::{Deserialize, Serialize}; use std::net::SocketAddr; use std::str::FromStr; use tauri::State; use uuid::Uuid; use crate::structs::ConnectionState; +use crate::util::local_db::LocalDb; + +use super::send_and_recv; + +// TODO: This should get phased out to include one RegistrationInfo field +#[allow(non_snake_case)] +#[derive(Debug, Deserialize, Serialize, Clone)] +pub struct RegistrationRequestTS { + pub workspaceIdentifier: String, + pub workspacePassword: String, + pub securityLevel: u8, + pub securityMode: u8, + pub encryptionAlgorithm: u8, + pub kemAlgorithm: u8, + pub sigAlgorithm: u8, + pub fullName: String, + pub username: String, + pub profilePassword: String, +} + +#[allow(non_snake_case)] +#[derive(Debug, Deserialize, Serialize)] +pub struct RegistrationResponseTS { + message: String, + success: bool, +} #[tauri::command] pub async fn register( - full_name: String, - username: String, - proposed_password: String, - server_addr: String, + request: RegistrationRequestTS, _window: tauri::Window, state: State<'_, ConnectionState>, -) -> Result { - let server_addr = SocketAddr::from_str(&server_addr).map_err(|_| "Invalid server address")?; +) -> Result { + println!("Registering to {}...", request.workspaceIdentifier); + + let server_addr = + SocketAddr::from_str(&request.workspaceIdentifier).expect("Invalid server address"); let request_id = Uuid::new_v4(); - let request = InternalServiceRequest::Register { + let request_copy = request.clone(); + + let crypto_params = CryptoParameters { + encryption_algorithm: EncryptionAlgorithm::from_u8(request.encryptionAlgorithm).unwrap(), + kem_algorithm: KemAlgorithm::from_u8(request.kemAlgorithm).unwrap(), + sig_algorithm: SigAlgorithm::from_u8(request.sigAlgorithm).unwrap(), + }; + + let security_settings = SessionSecuritySettings { + security_level: request.securityLevel.into(), + secrecy_mode: request.securityMode.into(), + crypto_params, + }; + + let server_password: Option<_> = match request.workspacePassword.trim().len() { + 0 => None, + _ => Some(request.workspacePassword.into()), + }; + + let internal_request = InternalServiceRequest::Register { request_id, server_addr, - full_name, - username: username.clone(), - proposed_password: proposed_password.into_bytes().into(), - connect_after_register: true, - session_security_settings: Default::default(), - server_password: None, + full_name: request.fullName, + username: request.username, + proposed_password: request.profilePassword.into_bytes().into(), + connect_after_register: false, + session_security_settings: security_settings, + server_password, + }; + + let response = match send_and_recv(internal_request, request_id, &state).await { + InternalServiceResponse::RegisterSuccess(_) => { + println!("Registration was successful"); + RegistrationResponseTS { + message: "Successful registration".to_owned(), + success: true, + } + } + InternalServiceResponse::RegisterFailure(err) => { + println!("Registration failed: {}", err.message); + RegistrationResponseTS { + message: err.message, + success: false, + } + } + other => { + panic!( + "Internal service returned unexpected type '{}' during registration", + std::any::type_name_of_val(&other) + ) + } }; - send_to_internal_service(request, state).await?; - Ok(request_id.to_string()) + if response.success { + let db = LocalDb::connect_global(&state); + let registration_info = request_copy.into(); + db.save_registration(®istration_info) + .await + .expect("failed to save registration"); + } + + Ok(response) } diff --git a/src-tauri/src/main.rs b/src-tauri/src/main.rs index 981f473..d12715a 100644 --- a/src-tauri/src/main.rs +++ b/src-tauri/src/main.rs @@ -1,9 +1,104 @@ -// Prevents additional console window on Windows in release, DO NOT REMOVE!! -#![cfg_attr(not(debug_assertions), windows_subsystem = "windows")] -#[allow(warnings, unused)] mod commands; mod structs; +mod util; -fn main() { - citadel_workspace_ui_lib::run() +use citadel_internal_service_connector::connector::InternalServiceConnector; +use citadel_logging::setup_log; +use commands::{connect, list_all_peers, list_known_servers, peer_connect, register}; +use futures::StreamExt; +use std::{collections::HashMap, sync::Arc}; +use structs::{ConnectionState, PacketHandle}; +use tauri::Manager; +use tokio::sync::Mutex; + +const INTERNAL_SERVICE_ADDR: &str = "127.0.0.1:12345"; + +#[tokio::main] +async fn main() { + run().await +} + +#[cfg_attr(mobile, tauri::mobile_entry_point)] +async fn run() { + let connector = InternalServiceConnector::connect(INTERNAL_SERVICE_ADDR) + .await + .expect("Invalid socket address"); + let (sink, mut stream) = connector.split(); + + println!("Connected to internal service."); + + let listeners: Arc>> = Arc::new(Mutex::new(Vec::new())); + + // Background TCP listener + let listeners_ref = Arc::clone(&listeners); + tokio::spawn(async move { + let listeners = listeners_ref; + println!("Spawned background TCP dispatcher."); + + while let Some(packet) = stream.next().await { + println!("Incoming packet:\n{:#?}", &packet); + + let mut guard = listeners.lock().await; + let mut targeted_handles: Vec<&mut PacketHandle> = guard + .iter_mut() + .filter(|h| packet.request_id().is_some_and(|id| id == h.request_id)) + .collect(); + + if targeted_handles.len() == 1 { + let channel = &mut targeted_handles[0].channel; + let _ = channel + .send(packet) + .await + .map_err(|err| eprintln!("Error when dispatching packet: {}", err)); + } else { + for handle in targeted_handles { + let _ = handle + .channel + .send(packet.clone()) + .await + .map_err(|err| eprintln!("Error when dispatching packet: {}", err)); + } + // TODO @kyle-tennison: You could theoretically make this more efficient by not cloning on the last iteration + } + drop(guard); + } + }); + + tauri::Builder::default() + .manage(ConnectionState { + sink: Mutex::new(sink), + listeners: Arc::clone(&listeners), + tmp_db: Arc::new(Mutex::new(HashMap::new())), + }) + .setup(|app| { + setup_log(); + #[cfg(debug_assertions)] // only include this code on debug builds + { + let window = app.get_webview_window("main").unwrap(); + window.open_devtools(); + window.close_devtools(); + } + Ok(()) + }) + .invoke_handler(tauri::generate_handler![ + // open_connection, + connect, + register, + list_known_servers, + // disconnect, + // message, + // get_sessions, + list_all_peers, + // peer_register, + peer_connect, + // peer_disconnect, + // list_registered_peers, + // local_db_set_kv, + // local_db_delete_kv, + // local_db_clear_all_kv, + // local_db_get_all_kv, + // local_db_get_kv + ]) + .run(tauri::generate_context!()) + .expect("error while running tauri application"); } diff --git a/src-tauri/src/structs.rs b/src-tauri/src/structs.rs index eb8df80..5a5ab87 100644 --- a/src-tauri/src/structs.rs +++ b/src-tauri/src/structs.rs @@ -1,11 +1,23 @@ +use std::collections::HashMap; +use std::sync::Arc; + use citadel_internal_service_connector::connector::WrappedSink; use citadel_internal_service_connector::io_interface::tcp::TcpIOInterface; use citadel_internal_service_types::InternalServiceResponse; use serde::{Deserialize, Serialize}; +use tokio::sync::mpsc::Sender; use tokio::sync::Mutex; +use uuid::Uuid; + +pub struct PacketHandle { + pub request_id: Uuid, // The ID to listen for in the response stream + pub channel: Sender, // The channel to stream the response to +} pub struct ConnectionState { - pub sink: Mutex>>, + pub sink: Mutex>, + pub listeners: Arc>>, + pub tmp_db: Arc>>, } #[derive(Serialize, Deserialize, Debug)] pub struct Payload { diff --git a/src-tauri/src/util/local_db.rs b/src-tauri/src/util/local_db.rs new file mode 100644 index 0000000..a5cad3c --- /dev/null +++ b/src-tauri/src/util/local_db.rs @@ -0,0 +1,168 @@ +use std::{collections::HashMap, vec}; + +use serde::{de::DeserializeOwned, Serialize}; +use tauri::State; + +use crate::structs::ConnectionState; + +use super::{KeyName, KnownServers, RegistrationInfo}; + +pub struct LocalDb<'a> { + cid: u64, + state: &'a State<'a, ConnectionState>, +} + +impl<'a> LocalDb<'a> { + pub fn connect_global(state: &'a State<'a, ConnectionState>) -> Self { + LocalDb { cid: 0, state } + } + + pub fn connect(cid: String, state: &'a State<'a, ConnectionState>) -> Self { + LocalDb { + cid: cid.parse::().unwrap(), + state, + } + } + + async fn set_kv(&self, key: String, value: &T) -> Result<(), String> { + assert!(self.cid == 0, "CID-Specific DB not yet implemented"); + + // NOTE: Temporary in-memory db as hash map + let mut db = self.state.tmp_db.lock().await; + let value = serde_json::to_string(value).map_err(|err| err.to_string())?; + db.insert(key, value); + Ok(()) + + // let request_id = Uuid::new_v4(); + // let payload = InternalServiceRequest::LocalDBSetKV { + // request_id, + // cid: self.cid, + // peer_cid: None, + // key: key, + // value: serde_json::to_vec(value).map_err(|e| e.to_string())? + // }; + + // send_and_recv(payload, request_id, self.state).await?; + } + + async fn get_kv(&self, key: String) -> Result { + assert!(self.cid == 0, "CID-Specific DB not yet implemented"); + + // NOTE: Temporary in-memory db as hash map + let db = self.state.tmp_db.lock().await; + let value = db.get(&key).ok_or("Key does not exist")?; + + serde_json::from_str(value).map_err(|err| { + format!( + "error deserializing saved key into {}: \n{}\n\nThe raw save is:\n{}", + std::any::type_name::(), + err, + value + ) + }) + + // let request_id = Uuid::new_v4(); + // let payload = InternalServiceRequest::LocalDBGetKV { + // request_id, + // cid: self.cid, + // peer_cid: None, + // key: key.clone() }; + + // match send_and_recv(payload, request_id, self.state).await? { + // InternalServiceResponse::LocalDBGetKVSuccess(data) => { + // let deserialized: T = serde_json::from_slice(&data.value.as_slice()).map_err(|e| e.to_string())?; + // println!("Successfully got value from key '{}'.", key); + // Ok(deserialized) + // }, + // InternalServiceResponse::LocalDBGetKVFailure(err) => { + // Err(err.message) + // }, + // unknown => { + // println!("Unexpected get_kv response:\n{:#?}", unknown); + // Err("Internal Error".to_owned()) + // } + // } + } + + async fn list_all_kv(&self) -> Result, String> { + // NOTE: Temporary in-memory db as hash map + let db = self.state.tmp_db.lock().await; + let db_copy = db.clone(); + Ok(db_copy) + + // let request_id = Uuid::new_v4(); + // let payload = InternalServiceRequest::LocalDBGetAllKV { + // request_id, + // cid: self.cid, + // peer_cid: None, + // }; + + // match send_and_recv(payload, request_id, self.state).await? { + // InternalServiceResponse::LocalDBGetAllKVFailure(err) => { + // Err(err.message) + // }, + // InternalServiceResponse::LocalDBGetAllKVSuccess(data) => { + // Ok(data.map) + // }, + // unknown => { + // println!("Unexpected list_all_kv response:\n{:#?}", unknown); + // Err("Internal Error".to_owned()) + // } + // } + } + + async fn has_key(&self, key: &str) -> Result { + Ok(self.list_all_kv().await?.contains_key(key)) + } + + pub async fn save_registration(&self, registration: &RegistrationInfo) -> Result<(), String> { + self.set_kv(registration.key_name(), ®istration).await?; + + let mut known_servers = self.list_known_servers().await?; + known_servers + .server_addresses + .push(registration.server_address.clone()); + self.set_kv(KnownServers::key_name_from_identifier(None), &known_servers) + .await?; + + Ok(()) + } + + pub async fn get_registration( + &self, + server_address: String, + ) -> Result { + let registration: RegistrationInfo = self + .get_kv(RegistrationInfo::key_name_from_identifier(Some( + server_address, + ))) + .await?; + Ok(registration) + } + + pub async fn list_known_servers(&self) -> Result { + let key = KnownServers::key_name_from_identifier(None); + if self.has_key(&key).await? { + Ok(self.get_kv(key).await?) + } else { + self.set_kv( + key, + &KnownServers { + server_addresses: vec![], + }, + ) + .await?; + Ok(KnownServers { + server_addresses: vec![], + }) + } + } + + pub async fn _is_known_server(&self, address: &str) -> Result { + Ok(self + .list_known_servers() + .await? + .server_addresses + .contains(&address.to_string())) + } +} diff --git a/src-tauri/src/util/mod.rs b/src-tauri/src/util/mod.rs new file mode 100644 index 0000000..5d1101d --- /dev/null +++ b/src-tauri/src/util/mod.rs @@ -0,0 +1,89 @@ +use serde::{Deserialize, Serialize}; + +use crate::commands::register::RegistrationRequestTS; + +pub mod local_db; + +// pub struct RegistrationRequestTS { +// workspaceIdentifier: String, +// workspacePassword: String, +// securityLevel: u8, +// securityMode: u8, +// encryptionAlgorithm: u8, +// kemAlgorithm: u8, +// sigAlgorithm: u8, +// fullName: String, +// username: String, +// profilePassword: String, +// } + +pub trait KeyName { + /// An identifier used to differentiate between different instances + /// of the same struct in the DB. If there will only ever be one + /// instance of a particular struct, the identifier may be None. + fn identifier(&self) -> Option; + + fn key_name(&self) -> String { + Self::key_name_from_identifier(self.identifier()) + } + fn key_name_from_identifier(identifier: Option) -> String { + format!( + "{}({})", + std::any::type_name::(), + identifier.unwrap_or("".to_owned()) + ) + } +} + +#[derive(Serialize, Deserialize, Debug, Clone)] +pub struct RegistrationInfo { + pub server_address: String, + pub server_password: Option, + pub security_level: u8, + pub security_mode: u8, + pub encryption_algorithm: u8, + pub kem_algorithm: u8, + pub sig_algorithm: u8, + pub full_name: String, + pub username: String, + pub profile_password: String, +} + +impl From for RegistrationInfo { + fn from(value: RegistrationRequestTS) -> Self { + let server_password = match value.workspacePassword.trim().len() { + 0 => None, + _ => Some(value.workspacePassword), + }; + + Self { + server_address: value.workspaceIdentifier, + server_password, + security_level: value.securityLevel, + security_mode: value.securityMode, + encryption_algorithm: value.encryptionAlgorithm, + kem_algorithm: value.kemAlgorithm, + sig_algorithm: value.sigAlgorithm, + full_name: value.fullName, + username: value.username, + profile_password: value.profilePassword, + } + } +} + +impl KeyName for RegistrationInfo { + fn identifier(&self) -> Option { + Some(self.server_address.clone()) + } +} + +#[derive(Serialize, Deserialize, Debug)] +pub struct KnownServers { + pub server_addresses: Vec, +} + +impl KeyName for KnownServers { + fn identifier(&self) -> Option { + None + } +} diff --git a/src-tauri/tauri.conf.json b/src-tauri/tauri.conf.json index 8e5cbe7..cc8e7a9 100644 --- a/src-tauri/tauri.conf.json +++ b/src-tauri/tauri.conf.json @@ -1,19 +1,20 @@ { - "productName": "Citadel Workspace", + "productName": "citadel_workspace", "version": "0.0.0", - "identifier": "citadel.workspace", + "identifier": "com.tauri.dev", "build": { "beforeDevCommand": "bun run dev", "devUrl": "http://localhost:1420", "beforeBuildCommand": "bun run build", - "frontendDist": "../out" + "frontendDist": "../dist" }, "app": { "windows": [ { "title": "Citadel Workspace", "width": 800, - "height": 600 + "height": 600, + "resizable": true } ], "security": { diff --git a/src/api/file.tsx b/src/api/file.tsx new file mode 100644 index 0000000..601e341 --- /dev/null +++ b/src/api/file.tsx @@ -0,0 +1,29 @@ +import React from "react"; +enum FileType { + PDF = "PDF", + ZIP = "ZIP", + JPG = "JPG", +} + +export class File { + name: string; + fileType: FileType; + + constructor(name: string, fileType: FileType) { + this.name = name; + this.fileType = fileType; + } + + get icon() { + switch (this.fileType) { + case FileType.PDF: + return ; + case FileType.ZIP: + return ; + case FileType.JPG: + return ; + default: + throw new Error(`Illegal FileType variant '${this.fileType}'`); + } + } +} diff --git a/src/api/group.tsx b/src/api/group.tsx new file mode 100644 index 0000000..e68363f --- /dev/null +++ b/src/api/group.tsx @@ -0,0 +1,9 @@ +export class Group { + name: string; + imagePath: string; + + constructor(name: string, imagePath: string) { + this.name = name; + this.imagePath = imagePath; + } +} diff --git a/src/api/registration.ts b/src/api/registration.ts new file mode 100644 index 0000000..b0c7e54 --- /dev/null +++ b/src/api/registration.ts @@ -0,0 +1,59 @@ +import { invoke } from "@tauri-apps/api/core"; + +export const secrecyOptions = [ + { label: "Best Effort", value: 0 }, + { label: "Perfect Forward Secrecy", value: 1 }, +]; +export const securityLevels = [ + { label: "Standard", value: 0 }, + { label: "Reinforced", value: 127 }, + { label: "High", value: 255 }, +]; +export const sigOptions = [ + { label: "None", value: 0 }, + { label: "Falcon1024", value: 1 }, +]; +export const encryptionOptions = [ + { label: "AES_GCM_256", value: 0 }, + { label: "ChaCha20Poly_1305", value: 1 }, + { label: "Kyber", value: 2 }, + { label: "Ascon80pq", value: 3 }, +]; +export const kemOptions = [ + { label: "Kyber", value: 0 }, + { label: "Ntru", value: 1 }, +]; + +export interface RegistrationRequest { + workspaceIdentifier: string | null; + workspacePassword: string | null; + securityLevel: number | null; + securityMode: number | null; + encryptionAlgorithm: number | null; + kemAlgorithm: number | null; + sigAlgorithm: number | null; + fullName: string | null; + username: string | null; + profilePassword: string | null; +} + +export interface RegistrationResponse { + success: boolean; + message: string; + cid: string; +} + +export async function register( + request: RegistrationRequest, +): Promise { + try { + const response = await invoke("register", { + request, + }); + console.log(response); + return response; + } catch (error) { + console.error("Error registering user:", error); + return null; + } +} diff --git a/src/api/types.ts b/src/api/types.ts new file mode 100644 index 0000000..dba74b1 --- /dev/null +++ b/src/api/types.ts @@ -0,0 +1,52 @@ +export interface WorkspaceInfo { + iconPath: string; + name: string; +} + +export interface ListKnownServersRequest { + cid: string; +} + +export interface ListKnownServersResponse { + servers: RegistrationInfo[]; +} + +export interface ConnectRequest { + registrationInfo: RegistrationInfo; +} + +export interface ConnectResponse { + cid: string | null; + success: boolean; + message: string; +} + +export interface ListAllPeersRequest { + cid: string; +} + +export interface ListAllPeersResponse { + peers: Record | null; + success: boolean; + message: string; +} + +export interface RegistrationInfo { + server_address: string; + server_password: string | null; + security_level: number; + security_mode: number; + encryption_algorithm: number; + kem_algorithm: number; + sig_algorithm: number; + full_name: string; + username: string; + profile_password: string; +} + +export interface PeerInformation { + cid: number; + online_status: boolean; + name: string | null; + username: string | null; +} diff --git a/src/api/user.tsx b/src/api/user.tsx new file mode 100644 index 0000000..94431f0 --- /dev/null +++ b/src/api/user.tsx @@ -0,0 +1,9 @@ +export class User { + name: string; + imagePath: string; + + constructor(name: string, imagePath: string) { + this.name = name; + this.imagePath = imagePath; + } +} diff --git a/src/api/util.ts b/src/api/util.ts new file mode 100644 index 0000000..6456653 --- /dev/null +++ b/src/api/util.ts @@ -0,0 +1,58 @@ +import { invoke } from "@tauri-apps/api/core"; +import { + ConnectRequest, + ConnectResponse, + ListAllPeersRequest, + ListAllPeersResponse, + ListKnownServersRequest, + ListKnownServersResponse, + RegistrationInfo, +} from "./types"; + +export async function listKnownServers(): Promise { + console.log("listing known servers..."); + const request: ListKnownServersRequest = { cid: "0" }; + const server_list = await invoke( + "list_known_servers", + { request }, + ); + console.log("got ListKnownServersResponse:", server_list); + return server_list.servers; +} + +export async function getDefaultWorkspace(): Promise { + // For now, just get first saved workspace, if one exists + const server_list = await listKnownServers(); + + if (server_list.length === 0) { + console.warn("No saved workspaces discovered"); + return null; + } else { + return server_list[0]; + } +} + +export async function connect( + info: RegistrationInfo, +): Promise { + console.log(`connecting to server ${info.server_address}...`); + const request: ConnectRequest = { registrationInfo: info }; + const response = await invoke("connect", { request }); + console.log("got connection response:"); + console.log(response); + + return response; +} + +export async function list_all_peers( + cid: string, +): Promise { + console.log(`listing all peers...`); + const request: ListAllPeersRequest = { cid: cid }; + const response = await invoke("list_all_peers", { + request, + }); + console.log("got list all peers response:", response); + + return response; +} diff --git a/src/assets/assets.tsx b/src/assets/assets.tsx new file mode 100644 index 0000000..800bdbb --- /dev/null +++ b/src/assets/assets.tsx @@ -0,0 +1,26 @@ +/* + +API For loading assets + +*/ +import React from "react"; +// Placeholder items +export const placeholderPfp = + "https://braverplayers.org/wp-content/uploads/2022/09/blank-pfp.png"; +export const placeholderGroup = + "https://cdn.pixabay.com/photo/2018/07/31/14/09/young-people-3575167_1280.jpg"; + +export const notepadSvg = ( + + + +); diff --git a/src/assets/react.svg b/src/assets/react.svg new file mode 100644 index 0000000..6c87de9 --- /dev/null +++ b/src/assets/react.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/sample-workspace.png b/src/assets/sample-workspace.png new file mode 100644 index 0000000..fcc1f75 Binary files /dev/null and b/src/assets/sample-workspace.png differ diff --git a/src/elements/components/chat-header/chat-header.css b/src/elements/components/chat-header/chat-header.css new file mode 100644 index 0000000..f21a12d --- /dev/null +++ b/src/elements/components/chat-header/chat-header.css @@ -0,0 +1,43 @@ +#chat-header { + width: 100%; + background-color: #343a5c; + height: 61px; + box-shadow: 0px 2px 4px rgba(0, 0, 0, 0.4); + display: flex; + align-items: center; +} + +#chat-header #chat-user { + margin-left: 20px; + display: flex; + align-items: center; + gap: 17px; +} + +#chat-header #chat-user img { + height: 32px; + width: 32px; + border-radius: 10px; +} +#chat-header #chat-user h3 { + color: white; + font-size: 16px; + font-weight: 600; +} +#chat-header #chat-user i { + color: #b9b4c7; + font-size: 20px; +} + +#chat-header #chat-tools { + display: flex; + flex-grow: 1; + justify-content: flex-end; + gap: 23px; + margin-right: 20px; +} + +#chat-header #chat-tools i { + color: #b9b4c7; + font-size: 20px; +} diff --git a/src/elements/components/chat-header/chat-header.tsx b/src/elements/components/chat-header/chat-header.tsx new file mode 100644 index 0000000..b7e84ee --- /dev/null +++ b/src/elements/components/chat-header/chat-header.tsx @@ -0,0 +1,21 @@ +import "./chat-header.css"; +import { placeholderPfp } from "../../../assets/assets"; +import React from "react"; + +export default function ChatHeader() { + return ( +
+
+ +

Placeholder User

+ +
+
+ + + + +
+
+ ); +} diff --git a/src/elements/components/chat-input/chat-input.css b/src/elements/components/chat-input/chat-input.css new file mode 100644 index 0000000..302b0c6 --- /dev/null +++ b/src/elements/components/chat-input/chat-input.css @@ -0,0 +1,40 @@ +#chat-input { + width: 100%; + height: fit-content; + min-height: 42px; + display: flex; + gap: 30px; + align-items: center; + background-color: #3c4261; + border-radius: 7px; + overflow: scroll; + border: 1px solid #b9b4c777; +} + +#chat-input textarea { + color: #b9b4c7; + resize: none; + padding: 11px 20px 11px 10px; + flex-grow: 1; + font-size: 13px; + height: 16px; + border: none; + background-color: transparent; +} +#chat-input textarea:focus { + outline: none; +} +#chat-input textarea::-webkit-input-placeholder { + opacity: 50%; +} + +#chat-input #input-button-container { + display: flex; + gap: 17px; + color: #b9b4c7; + font-size: 16px; + justify-content: flex-end; + margin-right: 20px; + margin-top: 14px; + align-self: flex-start; +} diff --git a/src/elements/components/chat-input/chat-input.tsx b/src/elements/components/chat-input/chat-input.tsx new file mode 100644 index 0000000..0f0dd45 --- /dev/null +++ b/src/elements/components/chat-input/chat-input.tsx @@ -0,0 +1,45 @@ +import { useEffect, useRef, useState } from "react"; +import "./chat-input.css"; +import React from "react"; + +const MIN_INPUT_HEIGHT = 16; //px +const MAX_INPUT_HEIGHT = 300; //px + +export default function ChatInput() { + const [textboxContent, setTextboxContent] = useState(""); + const textboxRef = useRef(null); // a reference to the textbox + + useEffect(() => { + if (textboxRef.current !== null) { + textboxRef.current.style.height = `${MIN_INPUT_HEIGHT}px`; + let desiredHeight = textboxRef.current.scrollHeight - 22; + console.log(`Scroll height is ${desiredHeight}`); + if (desiredHeight < MIN_INPUT_HEIGHT) { + desiredHeight = MIN_INPUT_HEIGHT; + } else if (desiredHeight > MAX_INPUT_HEIGHT) { + desiredHeight = MAX_INPUT_HEIGHT; + } + textboxRef.current.style.height = `${desiredHeight}px`; + } + }, [textboxContent]); + + return ( +
+ +
+ + + + +
+
+ ); +} diff --git a/src/elements/components/chat/chat.css b/src/elements/components/chat/chat.css new file mode 100644 index 0000000..a7d88e2 --- /dev/null +++ b/src/elements/components/chat/chat.css @@ -0,0 +1,12 @@ +#chat-window { + width: 100%; + height: 100%; + background-color: #444a6c; +} + +#chat-window .chat-input-container { + position: absolute; + bottom: 20px; + left: 3%; + width: 94%; +} diff --git a/src/elements/components/chat/chat.tsx b/src/elements/components/chat/chat.tsx new file mode 100644 index 0000000..130a42f --- /dev/null +++ b/src/elements/components/chat/chat.tsx @@ -0,0 +1,15 @@ +import ChatHeader from "../chat-header/chat-header"; +import ChatInput from "../chat-input/chat-input"; +import "./chat.css"; +import React from "react"; + +export default function Chat() { + return ( +
+ +
+ +
+
+ ); +} diff --git a/src/elements/components/header/header.css b/src/elements/components/header/header.css new file mode 100644 index 0000000..ecdfac5 --- /dev/null +++ b/src/elements/components/header/header.css @@ -0,0 +1,50 @@ +#header { + width: 100%; + height: 100%; + background-color: #2524249a; + display: flex; +} + +#header #workspace-selector { + display: flex; + align-items: center; + gap: 20px; + margin-left: 20px; +} +#header #workspace-selector img { + display: flex; + width: 37px; + height: 37px; + border-radius: 7px; +} + +#header #workspace-selector h3 { + color: white; + font-weight: 700; + text-transform: uppercase; + font-size: 16px; +} + +#header #workspace-selector i { + color: #b9b4c7; + font-size: 16px; +} + +#header #header-selectors { + display: flex; + align-items: center; + flex-grow: 1; + justify-content: flex-end; + gap: 22px; + margin-right: 20px; +} + +#header #header-selectors i { + color: #b9b4c7; + font-size: 22px; +} +#header #header-selectors img { + width: 37px; + height: 37px; + border-radius: 5px; +} diff --git a/src/elements/components/header/header.tsx b/src/elements/components/header/header.tsx new file mode 100644 index 0000000..788f697 --- /dev/null +++ b/src/elements/components/header/header.tsx @@ -0,0 +1,25 @@ +import "./header.css"; +import React from "react"; +import { WorkspaceInfo } from "../../../api/types"; +import { placeholderPfp } from "../../../assets/assets"; + +export default function Header(props: { workspaceInfo: WorkspaceInfo | null }) { + return ( +