From 6ae0bc1ef6044ce1b1ed99b5ecda10f8c9d28d02 Mon Sep 17 00:00:00 2001 From: Gregory Schier Date: Fri, 17 Jan 2025 14:36:55 -0800 Subject: [PATCH 1/5] Work required to support the JWT plugin --- package-lock.json | 88 ++++----- package.json | 2 +- packages/plugin-runtime-types/package.json | 2 +- .../src/bindings/events.ts | 9 +- .../src/bindings/models.ts | 2 +- .../src/plugins/AuthenticationPlugin.ts | 6 +- src-tauri/Cargo.lock | 175 +++++++++++++++--- src-tauri/Cargo.toml | 8 +- src-tauri/src/http_request.rs | 37 ++-- src-tauri/src/lib.rs | 6 +- .../plugins/auth-basic/build/index.js | 9 +- .../plugins/auth-bearer/build/index.js | 9 +- .../vendored/plugins/auth-jwt/build/index.js | 6 +- .../template-function-response/build/index.js | 4 +- src-tauri/yaak-models/bindings/models.ts | 2 +- src-tauri/yaak-models/src/models.rs | 3 +- src-tauri/yaak-plugins/bindings/events.ts | 9 +- src-tauri/yaak-plugins/bindings/models.ts | 2 +- src-tauri/yaak-plugins/src/events.rs | 23 +-- src-tauri/yaak-sync/bindings/models.ts | 2 +- src-web/commands/commands.tsx | 1 + src-web/components/CreateWorkspaceDialog.tsx | 2 +- src-web/components/DynamicForm.tsx | 13 +- .../components/WorkspaceSettingsDialog.tsx | 1 + src-web/components/core/Editor/Editor.tsx | 2 +- src-web/components/core/InlineCode.tsx | 2 +- src-web/components/core/Input.tsx | 14 +- src-web/components/core/Label.tsx | 16 +- src-web/components/core/PairEditor.tsx | 3 +- src-web/components/core/PlainInput.tsx | 8 +- src-web/components/core/Prompt.tsx | 4 +- 31 files changed, 300 insertions(+), 170 deletions(-) diff --git a/package-lock.json b/package-lock.json index 8657dd3b..28fe9e44 100644 --- a/package-lock.json +++ b/package-lock.json @@ -20,7 +20,7 @@ "src-web" ], "devDependencies": { - "@tauri-apps/cli": "^2.2.2", + "@tauri-apps/cli": "^2.2.4", "@typescript-eslint/eslint-plugin": "^8.18.1", "@typescript-eslint/parser": "^8.18.1", "eslint": "^8", @@ -2888,9 +2888,9 @@ } }, "node_modules/@tauri-apps/cli": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/@tauri-apps/cli/-/cli-2.2.2.tgz", - "integrity": "sha512-5fVEdP4t4BT0ymvXZAM78kB0S/TaiRDLDoSRWGxVy1e7XCwuKyST5m6ybeyw/h/soK/91tbf+W3xXXy7XzkT4A==", + "version": "2.2.4", + "resolved": "https://registry.npmjs.org/@tauri-apps/cli/-/cli-2.2.4.tgz", + "integrity": "sha512-pihbuHEWJa9SEcN7JdEbMa0oq28MTTbk0nNNnRG8/irNQTKcjwM+KzxG2wuYZYbsXQVqwSu7PstdIEAnXqYHkw==", "dev": true, "license": "Apache-2.0 OR MIT", "bin": { @@ -2904,22 +2904,22 @@ "url": "https://opencollective.com/tauri" }, "optionalDependencies": { - "@tauri-apps/cli-darwin-arm64": "2.2.2", - "@tauri-apps/cli-darwin-x64": "2.2.2", - "@tauri-apps/cli-linux-arm-gnueabihf": "2.2.2", - "@tauri-apps/cli-linux-arm64-gnu": "2.2.2", - "@tauri-apps/cli-linux-arm64-musl": "2.2.2", - "@tauri-apps/cli-linux-x64-gnu": "2.2.2", - "@tauri-apps/cli-linux-x64-musl": "2.2.2", - "@tauri-apps/cli-win32-arm64-msvc": "2.2.2", - "@tauri-apps/cli-win32-ia32-msvc": "2.2.2", - "@tauri-apps/cli-win32-x64-msvc": "2.2.2" + "@tauri-apps/cli-darwin-arm64": "2.2.4", + "@tauri-apps/cli-darwin-x64": "2.2.4", + "@tauri-apps/cli-linux-arm-gnueabihf": "2.2.4", + "@tauri-apps/cli-linux-arm64-gnu": "2.2.4", + "@tauri-apps/cli-linux-arm64-musl": "2.2.4", + "@tauri-apps/cli-linux-x64-gnu": "2.2.4", + "@tauri-apps/cli-linux-x64-musl": "2.2.4", + "@tauri-apps/cli-win32-arm64-msvc": "2.2.4", + "@tauri-apps/cli-win32-ia32-msvc": "2.2.4", + "@tauri-apps/cli-win32-x64-msvc": "2.2.4" } }, "node_modules/@tauri-apps/cli-darwin-arm64": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/@tauri-apps/cli-darwin-arm64/-/cli-darwin-arm64-2.2.2.tgz", - "integrity": "sha512-JMXbX5hGrLOzJbjisd7gBe25PmHouXA1+f4yVWg5PRlgxW7pla7krOzhu2mchFlMVDr8aLwhMLgohvvx+raXag==", + "version": "2.2.4", + "resolved": "https://registry.npmjs.org/@tauri-apps/cli-darwin-arm64/-/cli-darwin-arm64-2.2.4.tgz", + "integrity": "sha512-+sMLkQBFebn/UENyaXpyQqRkdFQie8RdEvYVz0AGthm2p0lMVlWiBmc4ImBJmfo8569zVeDX8B+5OWt4/AuZzA==", "cpu": [ "arm64" ], @@ -2934,9 +2934,9 @@ } }, "node_modules/@tauri-apps/cli-darwin-x64": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/@tauri-apps/cli-darwin-x64/-/cli-darwin-x64-2.2.2.tgz", - "integrity": "sha512-i2gxKXev+Ed0UWeq0xSiyRjSkzzBbu9MCOhs/QVv1YuV+097K/fF89f+a4v5JJftCq2IOHhSKH23KyTJBLnNKQ==", + "version": "2.2.4", + "resolved": "https://registry.npmjs.org/@tauri-apps/cli-darwin-x64/-/cli-darwin-x64-2.2.4.tgz", + "integrity": "sha512-6fJvXVtQJh7H8q9sll2XC2wO5bpn7bzeh+MQxpcLq6F8SE02sFuNDLN+AqX0DQnuYV0V6jdzM2+bTYOlc1FBsw==", "cpu": [ "x64" ], @@ -2951,9 +2951,9 @@ } }, "node_modules/@tauri-apps/cli-linux-arm-gnueabihf": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/@tauri-apps/cli-linux-arm-gnueabihf/-/cli-linux-arm-gnueabihf-2.2.2.tgz", - "integrity": "sha512-iC2HndsN5smmbvEDUQFyTHyYHSgx7OwJ6puyXLLpkAHnQDo4TGSPxIlPeZFSZmEoaJEmHLdG3j1LcFWOKrxWQg==", + "version": "2.2.4", + "resolved": "https://registry.npmjs.org/@tauri-apps/cli-linux-arm-gnueabihf/-/cli-linux-arm-gnueabihf-2.2.4.tgz", + "integrity": "sha512-QU6Ac6tx79iqkxsDUQesCBNq8RrVSkP9HhVzS2reKthK3xbdTCwNUXoRlfhudKMVrIxV4K7uTwUV99eAnwbm5Q==", "cpu": [ "arm" ], @@ -2968,9 +2968,9 @@ } }, "node_modules/@tauri-apps/cli-linux-arm64-gnu": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/@tauri-apps/cli-linux-arm64-gnu/-/cli-linux-arm64-gnu-2.2.2.tgz", - "integrity": "sha512-YzK30tleUzWxfIp1davc5RhvmNZxiZQkUnQ4zajGJZ99zxNk8kwvv8nYSC3/J2R8sYpnuv+7CzNyIwA2s6yH+w==", + "version": "2.2.4", + "resolved": "https://registry.npmjs.org/@tauri-apps/cli-linux-arm64-gnu/-/cli-linux-arm64-gnu-2.2.4.tgz", + "integrity": "sha512-uZhp312s6VgJJDgUg+HuHZnhjGg93OT+q/aZMoccdZVQ6dvwH8kJzIkKt9zL1U126AXXoesb1EyYmsAruxaUKA==", "cpu": [ "arm64" ], @@ -2985,9 +2985,9 @@ } }, "node_modules/@tauri-apps/cli-linux-arm64-musl": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/@tauri-apps/cli-linux-arm64-musl/-/cli-linux-arm64-musl-2.2.2.tgz", - "integrity": "sha512-nOw2apBzOCTiH1fLOjL42ajHNhMzdp640CX5RrWkDYdyVO7YbGmWzrN26PPXohScScXVjSjtDDxdeQV1gHCxhg==", + "version": "2.2.4", + "resolved": "https://registry.npmjs.org/@tauri-apps/cli-linux-arm64-musl/-/cli-linux-arm64-musl-2.2.4.tgz", + "integrity": "sha512-k6JCXd9E+XU0J48nVcFr3QO//bzKg/gp8ZKagBfI2wBpHOk14CnHNBQKNs11nMQUwko4bnPeqj4llcdkbmwIbw==", "cpu": [ "arm64" ], @@ -3002,9 +3002,9 @@ } }, "node_modules/@tauri-apps/cli-linux-x64-gnu": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/@tauri-apps/cli-linux-x64-gnu/-/cli-linux-x64-gnu-2.2.2.tgz", - "integrity": "sha512-Tmm4qVY8yxSugi8sCko1dyZxyPGK8m3tWm+b1J0DXwzxqaoMqNXuYGxkwtUdkznPXEfQSD8OGBfwjXNmVGE91Q==", + "version": "2.2.4", + "resolved": "https://registry.npmjs.org/@tauri-apps/cli-linux-x64-gnu/-/cli-linux-x64-gnu-2.2.4.tgz", + "integrity": "sha512-bUBPU46OF1pNfM6SsGbUlkCBh/pTzvFlEdUpDISsS40v9NVt+kqCy3tHzLGB412E3lSlA6FnshB6HxkdRRdTtg==", "cpu": [ "x64" ], @@ -3019,9 +3019,9 @@ } }, "node_modules/@tauri-apps/cli-linux-x64-musl": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/@tauri-apps/cli-linux-x64-musl/-/cli-linux-x64-musl-2.2.2.tgz", - "integrity": "sha512-AwAcaCUhmwzOFPvje80g2BAhnkoEpXdl1E0Uk+lvr9makHM0+aV++M5jibD97yxKnK5NrQ9YXPH5Sn6CdncgUg==", + "version": "2.2.4", + "resolved": "https://registry.npmjs.org/@tauri-apps/cli-linux-x64-musl/-/cli-linux-x64-musl-2.2.4.tgz", + "integrity": "sha512-vOrpsQDiMtP8q/ZeXfXqgNi3G4Yv5LVX2vI5XkB2yvVuVF1Dvky/hcCJfi9tZQD+IpeiYxjuj7+SxHp82eQ/kA==", "cpu": [ "x64" ], @@ -3036,9 +3036,9 @@ } }, "node_modules/@tauri-apps/cli-win32-arm64-msvc": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/@tauri-apps/cli-win32-arm64-msvc/-/cli-win32-arm64-msvc-2.2.2.tgz", - "integrity": "sha512-u7TnwuUAN+eX6R2kDfSM8fsUFiBzNqq9PnAOsQ2qbwbHGbu7mHfGO1OFgnIzBt1C9FolFbENk2pzjiL4R9baXQ==", + "version": "2.2.4", + "resolved": "https://registry.npmjs.org/@tauri-apps/cli-win32-arm64-msvc/-/cli-win32-arm64-msvc-2.2.4.tgz", + "integrity": "sha512-iEP/Cq0ts4Ln4Zh2NSC01lkYEAhr+LotbG4U2z+gxHfCdMrtYYtYdG05C2mpeIxShzL7uEIQb/lhVRBMd7robg==", "cpu": [ "arm64" ], @@ -3053,9 +3053,9 @@ } }, "node_modules/@tauri-apps/cli-win32-ia32-msvc": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/@tauri-apps/cli-win32-ia32-msvc/-/cli-win32-ia32-msvc-2.2.2.tgz", - "integrity": "sha512-9KScbGKU6GfHThEYWdlO0+COW/8SDfIXbYgEvEcfZztE4VedHBbI0XfU+l+aS8nJN+fvYX+DtvY0tpDwyo0G4A==", + "version": "2.2.4", + "resolved": "https://registry.npmjs.org/@tauri-apps/cli-win32-ia32-msvc/-/cli-win32-ia32-msvc-2.2.4.tgz", + "integrity": "sha512-YBbqF0wyHUT00zAGZTTbEbz/C5JDGPnT1Nodor96+tzEU6qAPRYfe5eFe/rpRARbalkpw1UkcVP0Ay8gnksAiA==", "cpu": [ "ia32" ], @@ -3070,9 +3070,9 @@ } }, "node_modules/@tauri-apps/cli-win32-x64-msvc": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/@tauri-apps/cli-win32-x64-msvc/-/cli-win32-x64-msvc-2.2.2.tgz", - "integrity": "sha512-ko8OWCLwFaHfdBaKbRX/C5btNt61v17qKOSQPksuc5PVvY0tAoci09612nEMlYiogZKEtn7VAqSdRAG6h0tz+g==", + "version": "2.2.4", + "resolved": "https://registry.npmjs.org/@tauri-apps/cli-win32-x64-msvc/-/cli-win32-x64-msvc-2.2.4.tgz", + "integrity": "sha512-MMago/SfWZbUFrwFmPCXmmbb42h7u8Y5jvLvnK2mOpOfCAsei2tLO4hx+Inoai0l2DByuYO4Ef1xDyP6shCsZQ==", "cpu": [ "x64" ], diff --git a/package.json b/package.json index aec988fa..9734ce07 100644 --- a/package.json +++ b/package.json @@ -34,7 +34,7 @@ "tauri-before-dev": "npm run --workspaces --if-present dev" }, "devDependencies": { - "@tauri-apps/cli": "^2.2.2", + "@tauri-apps/cli": "^2.2.4", "@typescript-eslint/eslint-plugin": "^8.18.1", "@typescript-eslint/parser": "^8.18.1", "eslint": "^8", diff --git a/packages/plugin-runtime-types/package.json b/packages/plugin-runtime-types/package.json index dca8f622..5682cc1a 100644 --- a/packages/plugin-runtime-types/package.json +++ b/packages/plugin-runtime-types/package.json @@ -1,6 +1,6 @@ { "name": "@yaakapp/api", - "version": "0.2.27", + "version": "0.2.29", "main": "lib/index.js", "typings": "./lib/index.d.ts", "files": [ diff --git a/packages/plugin-runtime-types/src/bindings/events.ts b/packages/plugin-runtime-types/src/bindings/events.ts index d2fcb2e2..584b9e06 100644 --- a/packages/plugin-runtime-types/src/bindings/events.ts +++ b/packages/plugin-runtime-types/src/bindings/events.ts @@ -13,7 +13,12 @@ export type BootResponse = { name: string, version: string, capabilities: Array< export type CallHttpAuthenticationRequest = { config: { [key in string]?: JsonValue }, method: string, url: string, headers: Array, }; -export type CallHttpAuthenticationResponse = { url: string, headers: Array, }; +export type CallHttpAuthenticationResponse = { +/** + * HTTP headers to add to the request. Existing headers will be replaced, while + * new headers will be added. + */ +setHeaders: Array, }; export type CallHttpRequestActionArgs = { httpRequest: HttpRequest, }; @@ -217,7 +222,7 @@ cancelText?: string, /** * Require the user to enter a non-empty value */ -require?: boolean, }; +required?: boolean, }; export type PromptTextResponse = { value: string | null, }; diff --git a/packages/plugin-runtime-types/src/bindings/models.ts b/packages/plugin-runtime-types/src/bindings/models.ts index 42a93e00..966c2143 100644 --- a/packages/plugin-runtime-types/src/bindings/models.ts +++ b/packages/plugin-runtime-types/src/bindings/models.ts @@ -2,7 +2,7 @@ export type Environment = { model: "environment", id: string, workspaceId: string, environmentId: string | null, createdAt: string, updatedAt: string, name: string, variables: Array, }; -export type EnvironmentVariable = { enabled?: boolean, name: string, value: string, id: string, }; +export type EnvironmentVariable = { enabled?: boolean, name: string, value: string, id?: string, }; export type Folder = { model: "folder", id: string, createdAt: string, updatedAt: string, workspaceId: string, folderId: string | null, name: string, description: string, sortPriority: number, }; diff --git a/packages/plugin-runtime-types/src/plugins/AuthenticationPlugin.ts b/packages/plugin-runtime-types/src/plugins/AuthenticationPlugin.ts index 9d79d17a..7bdf824f 100644 --- a/packages/plugin-runtime-types/src/plugins/AuthenticationPlugin.ts +++ b/packages/plugin-runtime-types/src/plugins/AuthenticationPlugin.ts @@ -1,4 +1,8 @@ -import {CallHttpAuthenticationRequest, CallHttpAuthenticationResponse, GetHttpAuthenticationResponse} from '..'; +import { + CallHttpAuthenticationRequest, + CallHttpAuthenticationResponse, + GetHttpAuthenticationResponse, +} from '..'; import type { Context } from './Context'; export type AuthenticationPlugin = Omit & { diff --git a/src-tauri/Cargo.lock b/src-tauri/Cargo.lock index 47eafbfe..a11e2d22 100644 --- a/src-tauri/Cargo.lock +++ b/src-tauri/Cargo.lock @@ -165,7 +165,7 @@ dependencies = [ "wayland-backend", "wayland-client", "wayland-protocols", - "zbus", + "zbus 4.0.1", ] [[package]] @@ -717,9 +717,9 @@ dependencies = [ [[package]] name = "cargo_toml" -version = "0.17.2" +version = "0.21.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8a969e13a7589e9e3e4207e153bae624ade2b5622fb4684a4923b23ec3d57719" +checksum = "5fbd1fe9db3ebf71b89060adaf7b0504c2d6a425cf061313099547e382c2e472" dependencies = [ "serde", "toml 0.8.19", @@ -3013,6 +3013,19 @@ dependencies = [ "memoffset", ] +[[package]] +name = "nix" +version = "0.29.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "71e2746dc3a24dd78b3cfcb7be93368c6de9963d30f43a6a73998a9cf4b17b46" +dependencies = [ + "bitflags 2.6.0", + "cfg-if", + "cfg_aliases 0.2.1", + "libc", + "memoffset", +] + [[package]] name = "nodrop" version = "0.1.14" @@ -3905,6 +3918,15 @@ dependencies = [ "toml_edit 0.20.2", ] +[[package]] +name = "proc-macro-crate" +version = "3.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8ecf48c7ca261d60b74ab1a7b20da18bede46776b2e55535cb958eb595c5fa7b" +dependencies = [ + "toml_edit 0.22.22", +] + [[package]] name = "proc-macro-error" version = "1.0.4" @@ -5638,9 +5660,9 @@ dependencies = [ [[package]] name = "tauri-build" -version = "2.0.4" +version = "2.0.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b274ec7239ada504deb615f1c8abd7ba99631e879709e6f10e5d17217058d976" +checksum = "8e950124f6779c6cf98e3260c7a6c8488a74aa6350dd54c6950fdaa349bca2df" dependencies = [ "anyhow", "cargo_toml", @@ -5796,9 +5818,9 @@ dependencies = [ [[package]] name = "tauri-plugin-opener" -version = "2.2.2" +version = "2.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "63ac39033ef1bb4d52da4878c3d8ab6d80b0a569d69208c884e6d4d54eb427b9" +checksum = "1270bd2f3aabffc2becc05b6aafab3d24fe5679db91bec369fb44865afd7de13" dependencies = [ "dunce", "glob", @@ -5813,7 +5835,7 @@ dependencies = [ "thiserror 2.0.7", "url", "windows", - "zbus", + "zbus 5.3.0", ] [[package]] @@ -5857,9 +5879,9 @@ dependencies = [ [[package]] name = "tauri-plugin-single-instance" -version = "2.2.0" +version = "2.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0f36019ee9832dc99e4450bb55a21cfad8633b19c2c18bd17c7741939b070ede" +checksum = "47c387d4d96690131dc46d1d2827df5c222b896a2bfeb15a16267229a55c50b5" dependencies = [ "serde", "serde_json", @@ -5867,14 +5889,14 @@ dependencies = [ "thiserror 2.0.7", "tracing", "windows-sys 0.59.0", - "zbus", + "zbus 5.3.0", ] [[package]] name = "tauri-plugin-updater" -version = "2.3.0" +version = "2.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b7351014c140906bcfff59d96e04b1170c8f602557f40eb37f7de356d4e7067b" +checksum = "ce2d39224390c41ba544f02b4f1721f42256320b3fb8c371e9425cbddeb4a68c" dependencies = [ "base64 0.22.1", "dirs", @@ -7676,15 +7698,9 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7b8e3d6ae3342792a6cc2340e4394334c7402f3d793b390d2c5494a4032b3030" dependencies = [ "async-broadcast", - "async-executor", - "async-fs", - "async-io", - "async-lock", "async-process", "async-recursion", - "async-task", "async-trait", - "blocking", "derivative", "enumflags2", "event-listener", @@ -7692,7 +7708,7 @@ dependencies = [ "futures-sink", "futures-util", "hex", - "nix", + "nix 0.27.1", "ordered-stream", "rand 0.8.5", "serde", @@ -7704,9 +7720,45 @@ dependencies = [ "uds_windows", "windows-sys 0.52.0", "xdg-home", - "zbus_macros", - "zbus_names", - "zvariant", + "zbus_macros 4.0.1", + "zbus_names 3.0.0", + "zvariant 4.0.0", +] + +[[package]] +name = "zbus" +version = "5.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "192a0d989036cd60a1e91a54c9851fb9ad5bd96125d41803eed79d2e2ef74bd7" +dependencies = [ + "async-broadcast", + "async-executor", + "async-fs", + "async-io", + "async-lock", + "async-process", + "async-recursion", + "async-task", + "async-trait", + "blocking", + "enumflags2", + "event-listener", + "futures-core", + "futures-util", + "hex", + "nix 0.29.0", + "ordered-stream", + "serde", + "serde_repr", + "static_assertions", + "tracing", + "uds_windows", + "windows-sys 0.59.0", + "winnow 0.6.20", + "xdg-home", + "zbus_macros 5.3.0", + "zbus_names 4.1.1", + "zvariant 5.2.0", ] [[package]] @@ -7720,7 +7772,22 @@ dependencies = [ "quote", "regex", "syn 1.0.109", - "zvariant_utils", + "zvariant_utils 1.1.0", +] + +[[package]] +name = "zbus_macros" +version = "5.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3685b5c81fce630efc3e143a4ded235b107f1b1cdf186c3f115529e5e5ae4265" +dependencies = [ + "proc-macro-crate 3.2.0", + "proc-macro2", + "quote", + "syn 2.0.87", + "zbus_names 4.1.1", + "zvariant 5.2.0", + "zvariant_utils 3.1.0", ] [[package]] @@ -7731,7 +7798,19 @@ checksum = "4b9b1fef7d021261cc16cba64c351d291b715febe0fa10dc3a443ac5a5022e6c" dependencies = [ "serde", "static_assertions", - "zvariant", + "zvariant 4.0.0", +] + +[[package]] +name = "zbus_names" +version = "4.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "519629a3f80976d89c575895b05677cbc45eaf9f70d62a364d819ba646409cc8" +dependencies = [ + "serde", + "static_assertions", + "winnow 0.6.20", + "zvariant 5.2.0", ] [[package]] @@ -7787,7 +7866,22 @@ dependencies = [ "serde", "static_assertions", "url", - "zvariant_derive", + "zvariant_derive 4.0.0", +] + +[[package]] +name = "zvariant" +version = "5.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "55e6b9b5f1361de2d5e7d9fd1ee5f6f7fcb6060618a1f82f3472f58f2b8d4be9" +dependencies = [ + "endi", + "enumflags2", + "serde", + "static_assertions", + "winnow 0.6.20", + "zvariant_derive 5.2.0", + "zvariant_utils 3.1.0", ] [[package]] @@ -7800,7 +7894,20 @@ dependencies = [ "proc-macro2", "quote", "syn 1.0.109", - "zvariant_utils", + "zvariant_utils 1.1.0", +] + +[[package]] +name = "zvariant_derive" +version = "5.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "573a8dd76961957108b10f7a45bac6ab1ea3e9b7fe01aff88325dc57bb8f5c8b" +dependencies = [ + "proc-macro-crate 3.2.0", + "proc-macro2", + "quote", + "syn 2.0.87", + "zvariant_utils 3.1.0", ] [[package]] @@ -7813,3 +7920,17 @@ dependencies = [ "quote", "syn 1.0.109", ] + +[[package]] +name = "zvariant_utils" +version = "3.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ddd46446ea2a1f353bfda53e35f17633afa79f4fe290a611c94645c69fe96a50" +dependencies = [ + "proc-macro2", + "quote", + "serde", + "static_assertions", + "syn 2.0.87", + "winnow 0.6.20", +] diff --git a/src-tauri/Cargo.toml b/src-tauri/Cargo.toml index ba784029..636cdc89 100644 --- a/src-tauri/Cargo.toml +++ b/src-tauri/Cargo.toml @@ -28,7 +28,7 @@ strip = true # Automatically strip symbols from the binary. cargo-clippy = [] [build-dependencies] -tauri-build = { version = "2.0.4", features = [] } +tauri-build = { version = "2.0.5", features = [] } [target.'cfg(target_os = "macos")'.dependencies] objc = "0.2.7" @@ -57,11 +57,11 @@ tauri-plugin-clipboard-manager = "2.2.0" tauri-plugin-dialog = "2.2.0" tauri-plugin-fs = "2.2.0" tauri-plugin-log = { version = "2.2.0", features = ["colored"] } -tauri-plugin-opener = "2.2.2" +tauri-plugin-opener = "2.2.4" tauri-plugin-os = "2.2.0" tauri-plugin-shell = { workspace = true } -tauri-plugin-single-instance = "2.2.0" -tauri-plugin-updater = "2.3.0" +tauri-plugin-single-instance = "2.2.1" +tauri-plugin-updater = "2.3.1" tauri-plugin-window-state = "2.2.0" tokio = { version = "1.36.0", features = ["sync"] } tokio-stream = "0.1.15" diff --git a/src-tauri/src/http_request.rs b/src-tauri/src/http_request.rs index ff594e46..23c1daca 100644 --- a/src-tauri/src/http_request.rs +++ b/src-tauri/src/http_request.rs @@ -30,7 +30,9 @@ use yaak_models::queries::{ get_base_environment, get_http_response, get_or_create_settings, get_workspace, update_response_if_id, upsert_cookie_jar, UpdateSource, }; -use yaak_plugins::events::{CallHttpAuthenticationRequest, HttpHeader, RenderPurpose, WindowContext}; +use yaak_plugins::events::{ + CallHttpAuthenticationRequest, HttpHeader, RenderPurpose, WindowContext, +}; use yaak_plugins::manager::PluginManager; pub async fn send_http_request( @@ -388,28 +390,21 @@ pub async fn send_http_request( }) .collect(), }; - let plugin_result = - match plugin_manager.call_http_authentication(window, &auth_name, req).await { - Ok(r) => r, - Err(e) => { - return Ok(response_err(&*response.lock().await, e.to_string(), window).await); - } - }; - - { - let url = sendable_req.url_mut(); - *url = Url::parse(&plugin_result.url).unwrap(); - } - - { - let headers = sendable_req.headers_mut(); - for header in plugin_result.headers { - headers.insert( - HeaderName::from_str(&header.name).unwrap(), - HeaderValue::from_str(&header.value).unwrap(), - ); + let auth_result = plugin_manager.call_http_authentication(window, &auth_name, req).await; + let plugin_result = match auth_result { + Ok(r) => r, + Err(e) => { + return Ok(response_err(&*response.lock().await, e.to_string(), window).await); } }; + + let headers = sendable_req.headers_mut(); + for header in plugin_result.set_headers { + headers.insert( + HeaderName::from_str(&header.name).unwrap(), + HeaderValue::from_str(&header.value).unwrap(), + ); + } } let (resp_tx, resp_rx) = oneshot::channel::>(); diff --git a/src-tauri/src/lib.rs b/src-tauri/src/lib.rs index 342fe2fe..f60d2204 100644 --- a/src-tauri/src/lib.rs +++ b/src-tauri/src/lib.rs @@ -209,7 +209,7 @@ async fn cmd_grpc_go( .ok_or("Failed to find GRPC request")?; let base_environment = get_base_environment(&window, &req.workspace_id).await.map_err(|e| e.to_string())?; - let mut req = render_grpc_request( + let req = render_grpc_request( &req, &base_environment, environment.as_ref(), @@ -253,9 +253,7 @@ async fn cmd_grpc_go( .call_http_authentication(&window, &auth_name, plugin_req) .await .map_err(|e| e.to_string())?; - - req.url = plugin_result.url; - for header in plugin_result.headers { + for header in plugin_result.set_headers { metadata.insert(header.name, header.value); } } diff --git a/src-tauri/vendored/plugins/auth-basic/build/index.js b/src-tauri/vendored/plugins/auth-basic/build/index.js index 8d252474..1c577d86 100644 --- a/src-tauri/vendored/plugins/auth-basic/build/index.js +++ b/src-tauri/vendored/plugins/auth-basic/build/index.js @@ -42,13 +42,8 @@ var plugin = { }], async onApply(_ctx, args) { const { username, password } = args.config; - return { - url: args.url, - headers: [{ - name: "Authorization", - value: "Basic " + Buffer.from(`${username}:${password}`).toString("base64") - }] - }; + const value = "Basic " + Buffer.from(`${username}:${password}`).toString("base64"); + return { setHeaders: [{ name: "Authorization", value }] }; } } }; diff --git a/src-tauri/vendored/plugins/auth-bearer/build/index.js b/src-tauri/vendored/plugins/auth-bearer/build/index.js index af82ce10..76bbebbe 100644 --- a/src-tauri/vendored/plugins/auth-bearer/build/index.js +++ b/src-tauri/vendored/plugins/auth-bearer/build/index.js @@ -37,13 +37,8 @@ var plugin = { }], async onApply(_ctx, args) { const { token } = args.config; - return { - url: args.url, - headers: [{ - name: "Authorization", - value: `Bearer ${token}`.trim() - }] - }; + const value = `Bearer ${token}`.trim(); + return { setHeaders: [{ name: "Authorization", value }] }; } } }; diff --git a/src-tauri/vendored/plugins/auth-jwt/build/index.js b/src-tauri/vendored/plugins/auth-jwt/build/index.js index 8ab954a2..346c207f 100644 --- a/src-tauri/vendored/plugins/auth-jwt/build/index.js +++ b/src-tauri/vendored/plugins/auth-jwt/build/index.js @@ -3844,10 +3844,8 @@ var plugin = { const { algorithm, secret: _secret, secretBase64, payload } = args.config; const secret = secretBase64 ? Buffer.from(`${_secret}`, "base64") : `${_secret}`; const token = import_jsonwebtoken.default.sign(`${payload}`, secret, { algorithm }); - return { - url: args.url, - headers: [{ name: "Authorization", value: `Bearer ${token}` }] - }; + const value = `Bearer ${token}`; + return { setHeaders: [{ name: "Authorization", value }] }; } } }; diff --git a/src-tauri/vendored/plugins/template-function-response/build/index.js b/src-tauri/vendored/plugins/template-function-response/build/index.js index a0664c82..3b978eaf 100644 --- a/src-tauri/vendored/plugins/template-function-response/build/index.js +++ b/src-tauri/vendored/plugins/template-function-response/build/index.js @@ -8824,8 +8824,8 @@ var behaviorArg = { label: "Sending Behavior", defaultValue: "smart", options: [ - { label: "When no responses", value: "smart" }, - { label: "Always", value: "always" } + { name: "When no responses", value: "smart" }, + { name: "Always", value: "always" } ] }; var requestArg = { diff --git a/src-tauri/yaak-models/bindings/models.ts b/src-tauri/yaak-models/bindings/models.ts index faad831c..dd59a589 100644 --- a/src-tauri/yaak-models/bindings/models.ts +++ b/src-tauri/yaak-models/bindings/models.ts @@ -14,7 +14,7 @@ export type EditorKeymap = "default" | "vim" | "vscode" | "emacs"; export type Environment = { model: "environment", id: string, workspaceId: string, environmentId: string | null, createdAt: string, updatedAt: string, name: string, variables: Array, }; -export type EnvironmentVariable = { enabled?: boolean, name: string, value: string, id: string, }; +export type EnvironmentVariable = { enabled?: boolean, name: string, value: string, id?: string, }; export type Folder = { model: "folder", id: string, createdAt: string, updatedAt: string, workspaceId: string, folderId: string | null, name: string, description: string, sortPriority: number, }; diff --git a/src-tauri/yaak-models/src/models.rs b/src-tauri/yaak-models/src/models.rs index 7197b8dd..30ea8f53 100644 --- a/src-tauri/yaak-models/src/models.rs +++ b/src-tauri/yaak-models/src/models.rs @@ -383,7 +383,8 @@ pub struct EnvironmentVariable { pub enabled: bool, pub name: String, pub value: String, - pub id: String, + #[ts(optional, as = "Option")] + pub id: Option, } #[derive(Debug, Clone, Serialize, Deserialize, Default, TS)] diff --git a/src-tauri/yaak-plugins/bindings/events.ts b/src-tauri/yaak-plugins/bindings/events.ts index d2fcb2e2..584b9e06 100644 --- a/src-tauri/yaak-plugins/bindings/events.ts +++ b/src-tauri/yaak-plugins/bindings/events.ts @@ -13,7 +13,12 @@ export type BootResponse = { name: string, version: string, capabilities: Array< export type CallHttpAuthenticationRequest = { config: { [key in string]?: JsonValue }, method: string, url: string, headers: Array, }; -export type CallHttpAuthenticationResponse = { url: string, headers: Array, }; +export type CallHttpAuthenticationResponse = { +/** + * HTTP headers to add to the request. Existing headers will be replaced, while + * new headers will be added. + */ +setHeaders: Array, }; export type CallHttpRequestActionArgs = { httpRequest: HttpRequest, }; @@ -217,7 +222,7 @@ cancelText?: string, /** * Require the user to enter a non-empty value */ -require?: boolean, }; +required?: boolean, }; export type PromptTextResponse = { value: string | null, }; diff --git a/src-tauri/yaak-plugins/bindings/models.ts b/src-tauri/yaak-plugins/bindings/models.ts index 42a93e00..966c2143 100644 --- a/src-tauri/yaak-plugins/bindings/models.ts +++ b/src-tauri/yaak-plugins/bindings/models.ts @@ -2,7 +2,7 @@ export type Environment = { model: "environment", id: string, workspaceId: string, environmentId: string | null, createdAt: string, updatedAt: string, name: string, variables: Array, }; -export type EnvironmentVariable = { enabled?: boolean, name: string, value: string, id: string, }; +export type EnvironmentVariable = { enabled?: boolean, name: string, value: string, id?: string, }; export type Folder = { model: "folder", id: string, createdAt: string, updatedAt: string, workspaceId: string, folderId: string | null, name: string, description: string, sortPriority: number, }; diff --git a/src-tauri/yaak-plugins/src/events.rs b/src-tauri/yaak-plugins/src/events.rs index 72e586a9..aaeba1a1 100644 --- a/src-tauri/yaak-plugins/src/events.rs +++ b/src-tauri/yaak-plugins/src/events.rs @@ -248,7 +248,7 @@ pub struct PromptTextRequest { pub cancel_text: Option, /// Require the user to enter a non-empty value #[ts(optional)] - pub require: Option, + pub required: Option, } #[derive(Debug, Clone, Default, Serialize, Deserialize, TS)] @@ -303,6 +303,14 @@ pub struct GetHttpAuthenticationResponse { pub config: Vec, } +#[derive(Debug, Clone, Default, Serialize, Deserialize, TS)] +#[serde(default, rename_all = "camelCase")] +#[ts(export, export_to = "events.ts")] +pub struct HttpHeader { + pub name: String, + pub value: String, +} + #[derive(Debug, Clone, Default, Serialize, Deserialize, TS)] #[serde(default, rename_all = "camelCase")] #[ts(export, export_to = "events.ts")] @@ -313,20 +321,13 @@ pub struct CallHttpAuthenticationRequest { pub headers: Vec, } -#[derive(Debug, Clone, Default, Serialize, Deserialize, TS)] -#[serde(default, rename_all = "camelCase")] -#[ts(export, export_to = "events.ts")] -pub struct HttpHeader { - pub name: String, - pub value: String, -} - #[derive(Debug, Clone, Default, Serialize, Deserialize, TS)] #[serde(default, rename_all = "camelCase")] #[ts(export, export_to = "events.ts")] pub struct CallHttpAuthenticationResponse { - pub url: String, - pub headers: Vec, + /// HTTP headers to add to the request. Existing headers will be replaced, while + /// new headers will be added. + pub set_headers: Vec, } #[derive(Debug, Clone, Default, Serialize, Deserialize, TS)] diff --git a/src-tauri/yaak-sync/bindings/models.ts b/src-tauri/yaak-sync/bindings/models.ts index ff0ccba6..0a2c727a 100644 --- a/src-tauri/yaak-sync/bindings/models.ts +++ b/src-tauri/yaak-sync/bindings/models.ts @@ -2,7 +2,7 @@ export type Environment = { model: "environment", id: string, workspaceId: string, environmentId: string | null, createdAt: string, updatedAt: string, name: string, variables: Array, }; -export type EnvironmentVariable = { enabled?: boolean, name: string, value: string, id: string, }; +export type EnvironmentVariable = { enabled?: boolean, name: string, value: string, id?: string, }; export type Folder = { model: "folder", id: string, createdAt: string, updatedAt: string, workspaceId: string, folderId: string | null, name: string, description: string, sortPriority: number, }; diff --git a/src-web/commands/commands.tsx b/src-web/commands/commands.tsx index 6802c39c..7bf38884 100644 --- a/src-web/commands/commands.tsx +++ b/src-web/commands/commands.tsx @@ -30,6 +30,7 @@ export const createFolder = createFastMutation< label: 'Name', defaultValue: 'Folder', title: 'New Folder', + required: true, confirmText: 'Create', placeholder: 'Name', }); diff --git a/src-web/components/CreateWorkspaceDialog.tsx b/src-web/components/CreateWorkspaceDialog.tsx index e53f3b7b..e5d81f71 100644 --- a/src-web/components/CreateWorkspaceDialog.tsx +++ b/src-web/components/CreateWorkspaceDialog.tsx @@ -41,7 +41,7 @@ export function CreateWorkspaceDialog({ hide }: Props) { hide(); }} > - + - {arg.label ?? arg.name} - {arg.optional && (optional)} - - } + label={arg.label ?? arg.name} hideLabel={arg.label == null} placeholder={arg.placeholder ?? arg.defaultValue ?? ''} useTemplating={useTemplating} @@ -179,7 +174,9 @@ function EditorArg({ return (
- + upsertWorkspace.mutate({ ...workspace, name })} diff --git a/src-web/components/core/Editor/Editor.tsx b/src-web/components/core/Editor/Editor.tsx index 8b85f9df..e37f9164 100644 --- a/src-web/components/core/Editor/Editor.tsx +++ b/src-web/components/core/Editor/Editor.tsx @@ -51,7 +51,7 @@ export interface EditorProps { type?: 'text' | 'password'; className?: string; heightMode?: 'auto' | 'full'; - language?: EditorLanguage | 'pairs'; + language?: EditorLanguage | 'pairs' | 'url'; forceUpdateKey?: string | number; autoFocus?: boolean; autoSelect?: boolean; diff --git a/src-web/components/core/InlineCode.tsx b/src-web/components/core/InlineCode.tsx index f96efea6..463c601e 100644 --- a/src-web/components/core/InlineCode.tsx +++ b/src-web/components/core/InlineCode.tsx @@ -6,7 +6,7 @@ export function InlineCode({ className, ...props }: HTMLAttributes boolean); - require?: boolean; + required?: boolean; wrapLines?: boolean; stateKey: EditorProps['stateKey']; }; @@ -65,7 +65,7 @@ export const Input = forwardRef(function Input( onPaste, onPasteOverwrite, placeholder, - require, + required, rightSlot, wrapLines, size = 'md', @@ -102,11 +102,11 @@ export const Input = forwardRef(function Input( ); const isValid = useMemo(() => { - if (require && !validateRequire(currentValue)) return false; + if (required && !validateRequire(currentValue)) return false; if (typeof validate === 'boolean') return validate; if (typeof validate === 'function' && !validate(currentValue)) return false; return true; - }, [require, currentValue, validate]); + }, [required, currentValue, validate]); const handleChange = useCallback( (value: string) => { @@ -141,7 +141,11 @@ export const Input = forwardRef(function Input( labelPosition === 'top' && 'flex-row gap-0.5', )} > -