From 9d54e40aa8581242fd18a39e698960dc4bab162c Mon Sep 17 00:00:00 2001 From: Gregory Schier Date: Sun, 25 May 2025 08:02:36 -0700 Subject: [PATCH] Add list/get cookie plugin APIs --- .../src/bindings/gen_events.ts | 10 +++- .../src/bindings/gen_models.ts | 6 +-- .../src/plugins/Context.ts | 7 +++ packages/plugin-runtime/src/PluginInstance.ts | 35 +++++++++++-- src-tauri/Cargo.lock | 1 + src-tauri/Cargo.toml | 1 + src-tauri/src/plugin_events.rs | 35 +++++++++++-- .../plugins/auth-oauth2/build/index.js | 18 ++++--- .../plugins/importer-insomnia/build/index.js | 4 +- .../template-function-cookie/build/index.js | 50 +++++++++++++++++++ .../template-function-cookie/package.json | 9 ++++ src-tauri/yaak-models/src/models.rs | 8 +-- src-tauri/yaak-plugins/bindings/gen_events.ts | 10 +++- src-tauri/yaak-plugins/src/events.rs | 31 ++++++++++++ 14 files changed, 199 insertions(+), 26 deletions(-) create mode 100644 src-tauri/vendored/plugins/template-function-cookie/build/index.js create mode 100644 src-tauri/vendored/plugins/template-function-cookie/package.json diff --git a/packages/plugin-runtime-types/src/bindings/gen_events.ts b/packages/plugin-runtime-types/src/bindings/gen_events.ts index ed8dd546..a67f9f66 100644 --- a/packages/plugin-runtime-types/src/bindings/gen_events.ts +++ b/packages/plugin-runtime-types/src/bindings/gen_events.ts @@ -310,6 +310,10 @@ defaultValue?: string, disabled?: boolean, }; export type GenericCompletionOption = { label: string, detail?: string, info?: string, type?: CompletionOptionType, boost?: number, }; +export type GetCookieValueRequest = { name: string, }; + +export type GetCookieValueResponse = { value: string | null, }; + export type GetHttpAuthenticationConfigRequest = { contextId: string, values: { [key in string]?: JsonPrimitive }, }; export type GetHttpAuthenticationConfigResponse = { args: Array, pluginRefId: string, actions?: Array, }; @@ -346,10 +350,14 @@ export type ImportResponse = { resources: ImportResources, }; export type InternalEvent = { id: string, pluginRefId: string, pluginName: string, replyId: string | null, windowContext: PluginWindowContext, payload: InternalEventPayload, }; -export type InternalEventPayload = { "type": "boot_request" } & BootRequest | { "type": "boot_response" } & BootResponse | { "type": "reload_request" } & EmptyPayload | { "type": "reload_response" } & EmptyPayload | { "type": "terminate_request" } | { "type": "terminate_response" } | { "type": "import_request" } & ImportRequest | { "type": "import_response" } & ImportResponse | { "type": "filter_request" } & FilterRequest | { "type": "filter_response" } & FilterResponse | { "type": "export_http_request_request" } & ExportHttpRequestRequest | { "type": "export_http_request_response" } & ExportHttpRequestResponse | { "type": "send_http_request_request" } & SendHttpRequestRequest | { "type": "send_http_request_response" } & SendHttpRequestResponse | { "type": "get_http_request_actions_request" } & EmptyPayload | { "type": "get_http_request_actions_response" } & GetHttpRequestActionsResponse | { "type": "call_http_request_action_request" } & CallHttpRequestActionRequest | { "type": "get_template_functions_request" } | { "type": "get_template_functions_response" } & GetTemplateFunctionsResponse | { "type": "call_template_function_request" } & CallTemplateFunctionRequest | { "type": "call_template_function_response" } & CallTemplateFunctionResponse | { "type": "get_http_authentication_summary_request" } & EmptyPayload | { "type": "get_http_authentication_summary_response" } & GetHttpAuthenticationSummaryResponse | { "type": "get_http_authentication_config_request" } & GetHttpAuthenticationConfigRequest | { "type": "get_http_authentication_config_response" } & GetHttpAuthenticationConfigResponse | { "type": "call_http_authentication_request" } & CallHttpAuthenticationRequest | { "type": "call_http_authentication_response" } & CallHttpAuthenticationResponse | { "type": "call_http_authentication_action_request" } & CallHttpAuthenticationActionRequest | { "type": "call_http_authentication_action_response" } & EmptyPayload | { "type": "copy_text_request" } & CopyTextRequest | { "type": "copy_text_response" } & EmptyPayload | { "type": "render_http_request_request" } & RenderHttpRequestRequest | { "type": "render_http_request_response" } & RenderHttpRequestResponse | { "type": "get_key_value_request" } & GetKeyValueRequest | { "type": "get_key_value_response" } & GetKeyValueResponse | { "type": "set_key_value_request" } & SetKeyValueRequest | { "type": "set_key_value_response" } & SetKeyValueResponse | { "type": "delete_key_value_request" } & DeleteKeyValueRequest | { "type": "delete_key_value_response" } & DeleteKeyValueResponse | { "type": "open_window_request" } & OpenWindowRequest | { "type": "window_navigate_event" } & WindowNavigateEvent | { "type": "window_close_event" } | { "type": "close_window_request" } & CloseWindowRequest | { "type": "template_render_request" } & TemplateRenderRequest | { "type": "template_render_response" } & TemplateRenderResponse | { "type": "show_toast_request" } & ShowToastRequest | { "type": "show_toast_response" } & EmptyPayload | { "type": "prompt_text_request" } & PromptTextRequest | { "type": "prompt_text_response" } & PromptTextResponse | { "type": "get_http_request_by_id_request" } & GetHttpRequestByIdRequest | { "type": "get_http_request_by_id_response" } & GetHttpRequestByIdResponse | { "type": "find_http_responses_request" } & FindHttpResponsesRequest | { "type": "find_http_responses_response" } & FindHttpResponsesResponse | { "type": "empty_response" } & EmptyPayload | { "type": "error_response" } & ErrorResponse; +export type InternalEventPayload = { "type": "boot_request" } & BootRequest | { "type": "boot_response" } & BootResponse | { "type": "reload_request" } & EmptyPayload | { "type": "reload_response" } & EmptyPayload | { "type": "terminate_request" } | { "type": "terminate_response" } | { "type": "import_request" } & ImportRequest | { "type": "import_response" } & ImportResponse | { "type": "filter_request" } & FilterRequest | { "type": "filter_response" } & FilterResponse | { "type": "export_http_request_request" } & ExportHttpRequestRequest | { "type": "export_http_request_response" } & ExportHttpRequestResponse | { "type": "send_http_request_request" } & SendHttpRequestRequest | { "type": "send_http_request_response" } & SendHttpRequestResponse | { "type": "list_cookie_names_request" } & ListCookieNamesRequest | { "type": "list_cookie_names_response" } & ListCookieNamesResponse | { "type": "get_cookie_value_request" } & GetCookieValueRequest | { "type": "get_cookie_value_response" } & GetCookieValueResponse | { "type": "get_http_request_actions_request" } & EmptyPayload | { "type": "get_http_request_actions_response" } & GetHttpRequestActionsResponse | { "type": "call_http_request_action_request" } & CallHttpRequestActionRequest | { "type": "get_template_functions_request" } | { "type": "get_template_functions_response" } & GetTemplateFunctionsResponse | { "type": "call_template_function_request" } & CallTemplateFunctionRequest | { "type": "call_template_function_response" } & CallTemplateFunctionResponse | { "type": "get_http_authentication_summary_request" } & EmptyPayload | { "type": "get_http_authentication_summary_response" } & GetHttpAuthenticationSummaryResponse | { "type": "get_http_authentication_config_request" } & GetHttpAuthenticationConfigRequest | { "type": "get_http_authentication_config_response" } & GetHttpAuthenticationConfigResponse | { "type": "call_http_authentication_request" } & CallHttpAuthenticationRequest | { "type": "call_http_authentication_response" } & CallHttpAuthenticationResponse | { "type": "call_http_authentication_action_request" } & CallHttpAuthenticationActionRequest | { "type": "call_http_authentication_action_response" } & EmptyPayload | { "type": "copy_text_request" } & CopyTextRequest | { "type": "copy_text_response" } & EmptyPayload | { "type": "render_http_request_request" } & RenderHttpRequestRequest | { "type": "render_http_request_response" } & RenderHttpRequestResponse | { "type": "get_key_value_request" } & GetKeyValueRequest | { "type": "get_key_value_response" } & GetKeyValueResponse | { "type": "set_key_value_request" } & SetKeyValueRequest | { "type": "set_key_value_response" } & SetKeyValueResponse | { "type": "delete_key_value_request" } & DeleteKeyValueRequest | { "type": "delete_key_value_response" } & DeleteKeyValueResponse | { "type": "open_window_request" } & OpenWindowRequest | { "type": "window_navigate_event" } & WindowNavigateEvent | { "type": "window_close_event" } | { "type": "close_window_request" } & CloseWindowRequest | { "type": "template_render_request" } & TemplateRenderRequest | { "type": "template_render_response" } & TemplateRenderResponse | { "type": "show_toast_request" } & ShowToastRequest | { "type": "show_toast_response" } & EmptyPayload | { "type": "prompt_text_request" } & PromptTextRequest | { "type": "prompt_text_response" } & PromptTextResponse | { "type": "get_http_request_by_id_request" } & GetHttpRequestByIdRequest | { "type": "get_http_request_by_id_response" } & GetHttpRequestByIdResponse | { "type": "find_http_responses_request" } & FindHttpResponsesRequest | { "type": "find_http_responses_response" } & FindHttpResponsesResponse | { "type": "empty_response" } & EmptyPayload | { "type": "error_response" } & ErrorResponse; export type JsonPrimitive = string | number | boolean | null; +export type ListCookieNamesRequest = {}; + +export type ListCookieNamesResponse = { names: Array, }; + export type OpenWindowRequest = { url: string, /** * Label for the window. If not provided, a random one will be generated. diff --git a/packages/plugin-runtime-types/src/bindings/gen_models.ts b/packages/plugin-runtime-types/src/bindings/gen_models.ts index 9c981fc9..8d95d78f 100644 --- a/packages/plugin-runtime-types/src/bindings/gen_models.ts +++ b/packages/plugin-runtime-types/src/bindings/gen_models.ts @@ -4,7 +4,7 @@ export type Environment = { model: "environment", id: string, workspaceId: strin 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, description: string, name: string, defaultAuthentication: ParentAuthentication, defaultHeaders: Array, sortPriority: number, }; +export type Folder = { model: "folder", id: string, createdAt: string, updatedAt: string, workspaceId: string, folderId: string | null, authentication: Record, authenticationType: string | null, description: string, headers: Array, name: string, sortPriority: number, }; export type GrpcRequest = { model: "grpc_request", id: string, createdAt: string, updatedAt: string, workspaceId: string, folderId: string | null, authenticationType: string | null, authentication: Record, description: string, message: string, metadata: Array, method: string | null, name: string, service: string | null, sortPriority: number, url: string, }; @@ -20,8 +20,6 @@ export type HttpResponseState = "initialized" | "connected" | "closed"; export type HttpUrlParameter = { enabled?: boolean, name: string, value: string, id?: string, }; -export type ParentAuthentication = { authentication: Record, authenticationType: string | null, }; - export type WebsocketRequest = { model: "websocket_request", id: string, createdAt: string, updatedAt: string, workspaceId: string, folderId: string | null, authentication: Record, authenticationType: string | null, description: string, headers: Array, message: string, name: string, sortPriority: number, url: string, urlParameters: Array, }; -export type Workspace = { model: "workspace", id: string, createdAt: string, updatedAt: string, name: string, description: string, encryptionKeyChallenge: string | null, defaultAuthentication: ParentAuthentication, defaultHeaders: Array, settingValidateCertificates: boolean, settingFollowRedirects: boolean, settingRequestTimeout: number, }; +export type Workspace = { model: "workspace", id: string, createdAt: string, updatedAt: string, authentication: Record, authenticationType: string | null, description: string, headers: Array, name: string, encryptionKeyChallenge: string | null, settingValidateCertificates: boolean, settingFollowRedirects: boolean, settingRequestTimeout: number, }; diff --git a/packages/plugin-runtime-types/src/plugins/Context.ts b/packages/plugin-runtime-types/src/plugins/Context.ts index f55a3870..fadcf0ba 100644 --- a/packages/plugin-runtime-types/src/plugins/Context.ts +++ b/packages/plugin-runtime-types/src/plugins/Context.ts @@ -1,8 +1,11 @@ import type { FindHttpResponsesRequest, FindHttpResponsesResponse, + GetCookieValueRequest, + GetCookieValueResponse, GetHttpRequestByIdRequest, GetHttpRequestByIdResponse, + ListCookieNamesResponse, OpenWindowRequest, PromptTextRequest, PromptTextResponse, @@ -38,6 +41,10 @@ export interface Context { }, ): Promise<{ close: () => void }>; }; + cookies: { + listNames(): Promise; + getValue(args: GetCookieValueRequest): Promise; + }; httpRequest: { send(args: SendHttpRequestRequest): Promise; getById(args: GetHttpRequestByIdRequest): Promise; diff --git a/packages/plugin-runtime/src/PluginInstance.ts b/packages/plugin-runtime/src/PluginInstance.ts index 6ebb1e0c..d77f7e49 100644 --- a/packages/plugin-runtime/src/PluginInstance.ts +++ b/packages/plugin-runtime/src/PluginInstance.ts @@ -1,7 +1,10 @@ -import { PluginWindowContext, TemplateFunctionArg } from '@yaakapp-internal/plugins'; -import type { +import { + GetCookieValueRequest, + GetCookieValueResponse, + ListCookieNamesResponse, + PluginWindowContext, + TemplateFunctionArg, BootRequest, - Context, DeleteKeyValueResponse, FindHttpResponsesResponse, FormInput, @@ -12,16 +15,17 @@ import type { InternalEvent, InternalEventPayload, JsonPrimitive, - PluginDefinition, PromptTextResponse, RenderHttpRequestResponse, SendHttpRequestResponse, TemplateFunction, TemplateRenderResponse, -} from '@yaakapp/api'; +} from '@yaakapp-internal/plugins'; +import { Context, PluginDefinition } from '@yaakapp/api'; import console from 'node:console'; import { readFileSync, type Stats, statSync, watch } from 'node:fs'; import path from 'node:path'; +import Promise from '../../../../../Library/Caches/deno/npm/registry.npmjs.org/any-promise/1.3.0'; // import util from 'node:util'; import { EventChannel } from './EventChannel'; // import { interceptStdout } from './interceptStdout'; @@ -495,6 +499,27 @@ export class PluginInstance { return httpRequest; }, }, + cookies: { + getValue: async (args: GetCookieValueRequest) => { + const payload = { + type: 'get_cookie_value_request', + ...args, + } as const; + const { value } = await this.#sendAndWaitForReply( + event.windowContext, + payload, + ); + return value; + }, + listNames: async () => { + const payload = { type: 'list_cookie_names_request' } as const; + const { names } = await this.#sendAndWaitForReply( + event.windowContext, + payload, + ); + return names; + }, + }, templates: { /** * Invoke Yaak's template engine to render a value. If the value is a nested type diff --git a/src-tauri/Cargo.lock b/src-tauri/Cargo.lock index 400ebedd..05148f6a 100644 --- a/src-tauri/Cargo.lock +++ b/src-tauri/Cargo.lock @@ -8041,6 +8041,7 @@ name = "yaak-app" version = "0.0.0" dependencies = [ "chrono", + "cookie", "encoding_rs", "eventsource-client", "http", diff --git a/src-tauri/Cargo.toml b/src-tauri/Cargo.toml index 1242514f..03a5596e 100644 --- a/src-tauri/Cargo.toml +++ b/src-tauri/Cargo.toml @@ -40,6 +40,7 @@ openssl-sys = { version = "0.9.105", features = ["vendored"] } # For Ubuntu inst [dependencies] chrono = { version = "0.4.31", features = ["serde"] } +cookie = "0.18.1" encoding_rs = "0.8.35" eventsource-client = { git = "https://github.com/yaakapp/rust-eventsource-client", version = "0.14.0" } http = { version = "1.2.0", default-features = false } diff --git a/src-tauri/src/plugin_events.rs b/src-tauri/src/plugin_events.rs index a535ca2c..9da13249 100644 --- a/src-tauri/src/plugin_events.rs +++ b/src-tauri/src/plugin_events.rs @@ -6,6 +6,7 @@ use crate::{ workspace_from_window, }; use chrono::Utc; +use cookie::Cookie; use log::warn; use tauri::{AppHandle, Emitter, Manager, Runtime, State}; use tauri_plugin_clipboard_manager::ClipboardExt; @@ -13,10 +14,11 @@ use yaak_models::models::{HttpResponse, Plugin}; use yaak_models::query_manager::QueryManagerExt; use yaak_models::util::UpdateSource; use yaak_plugins::events::{ - Color, DeleteKeyValueResponse, EmptyPayload, FindHttpResponsesResponse, + Color, DeleteKeyValueResponse, EmptyPayload, FindHttpResponsesResponse, GetCookieValueResponse, GetHttpRequestByIdResponse, GetKeyValueResponse, Icon, InternalEvent, InternalEventPayload, - PluginWindowContext, RenderHttpRequestResponse, SendHttpRequestResponse, SetKeyValueResponse, - ShowToastRequest, TemplateRenderResponse, WindowNavigateEvent, + ListCookieNamesResponse, PluginWindowContext, RenderHttpRequestResponse, + SendHttpRequestResponse, SetKeyValueResponse, ShowToastRequest, TemplateRenderResponse, + WindowNavigateEvent, }; use yaak_plugins::manager::PluginManager; use yaak_plugins::plugin_handle::PluginHandle; @@ -269,6 +271,33 @@ pub(crate) async fn handle_plugin_event( let deleted = app_handle.db().delete_plugin_key_value(&name, &req.key).unwrap(); Some(InternalEventPayload::DeleteKeyValueResponse(DeleteKeyValueResponse { deleted })) } + InternalEventPayload::ListCookieNamesRequest(_req) => { + let window = get_window_from_window_context(app_handle, &window_context) + .expect("Failed to find window for listing cookies"); + let names = match cookie_jar_from_window(&window) { + None => Vec::new(), + Some(j) => j + .cookies + .into_iter() + .filter_map(|c| Cookie::parse(c.raw_cookie).ok().map(|c| c.name().to_string())) + .collect(), + }; + Some(InternalEventPayload::ListCookieNamesResponse(ListCookieNamesResponse { names })) + } + InternalEventPayload::GetCookieValueRequest(req) => { + let window = get_window_from_window_context(app_handle, &window_context) + .expect("Failed to find window for listing cookies"); + let value = match cookie_jar_from_window(&window) { + None => None, + Some(j) => j.cookies.into_iter().find_map(|c| match Cookie::parse(c.raw_cookie) { + Ok(c) if c.name().to_string().eq(&req.name) => { + Some(c.value_trimmed().to_string()) + } + _ => None, + }), + }; + Some(InternalEventPayload::GetCookieValueResponse(GetCookieValueResponse { value })) + } _ => None, }; diff --git a/src-tauri/vendored/plugins/auth-oauth2/build/index.js b/src-tauri/vendored/plugins/auth-oauth2/build/index.js index 03a8094d..bbd05584 100644 --- a/src-tauri/vendored/plugins/auth-oauth2/build/index.js +++ b/src-tauri/vendored/plugins/auth-oauth2/build/index.js @@ -330,7 +330,7 @@ function getImplicit(ctx, contextId, { if (token) { } const authorizationUrl = new URL(`${authorizationUrlRaw ?? ""}`); - authorizationUrl.searchParams.set("response_type", "code"); + authorizationUrl.searchParams.set("response_type", "token"); authorizationUrl.searchParams.set("client_id", clientId); if (redirectUri) authorizationUrl.searchParams.set("redirect_uri", redirectUri); if (scope) authorizationUrl.searchParams.set("scope", scope); @@ -340,22 +340,28 @@ function getImplicit(ctx, contextId, { authorizationUrl.searchParams.set("nonce", String(Math.floor(Math.random() * 9999999999999) + 1)); } const authorizationUrlStr = authorizationUrl.toString(); + let foundAccessToken = false; let { close } = await ctx.window.openUrl({ url: authorizationUrlStr, label: "oauth-authorization-url", + async onClose() { + if (!foundAccessToken) { + reject(new Error("Authorization window closed")); + } + }, async onNavigate({ url: urlStr }) { const url = new URL(urlStr); if (url.searchParams.has("error")) { return reject(Error(`Failed to authorize: ${url.searchParams.get("error")}`)); } - close(); const hash = url.hash.slice(1); const params = new URLSearchParams(hash); - const idToken = params.get("id_token"); - if (idToken) { - params.set("access_token", idToken); - params.delete("id_token"); + const accessToken = params.get("access_token"); + if (!accessToken) { + return; } + foundAccessToken = true; + close(); const response = Object.fromEntries(params); try { resolve(await storeToken(ctx, contextId, response)); diff --git a/src-tauri/vendored/plugins/importer-insomnia/build/index.js b/src-tauri/vendored/plugins/importer-insomnia/build/index.js index 43ad5453..c23878b0 100644 --- a/src-tauri/vendored/plugins/importer-insomnia/build/index.js +++ b/src-tauri/vendored/plugins/importer-insomnia/build/index.js @@ -7564,7 +7564,7 @@ function importHttpRequest2(r, workspaceId, parentId) { const sortKey = r.meta?.sortKey ?? r.sortKey; let bodyType = null; let body = {}; - if (r.body.mimeType === "application/octet-stream") { + if (r.body?.mimeType === "application/octet-stream") { bodyType = "binary"; body = { filePath: r.body.fileName ?? "" }; } else if (r.body?.mimeType === "application/x-www-form-urlencoded") { @@ -7720,7 +7720,7 @@ function importEnvironment2(e, workspaceId, isParent) { base: isParent ?? e.parentId === workspaceId, model: "environment", name: e.name, - variables: Object.entries(e.data).map(([name, value]) => ({ + variables: Object.entries(e.data ?? {}).map(([name, value]) => ({ enabled: true, name, value: `${value}` diff --git a/src-tauri/vendored/plugins/template-function-cookie/build/index.js b/src-tauri/vendored/plugins/template-function-cookie/build/index.js new file mode 100644 index 00000000..c194983c --- /dev/null +++ b/src-tauri/vendored/plugins/template-function-cookie/build/index.js @@ -0,0 +1,50 @@ +"use strict"; +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); + +// src/index.ts +var src_exports = {}; +__export(src_exports, { + plugin: () => plugin +}); +module.exports = __toCommonJS(src_exports); +var plugin = { + templateFunctions: [ + { + name: "cookie.value", + description: "Read the value of a cookie in the jar, by name", + args: [ + { + type: "text", + name: "cookie_name", + label: "Cookie Name" + } + ], + async onRender(ctx, args) { + console.log("COOKIE", args.values.cookie_name); + const cookies = await ctx.cookies.listNames({}); + console.log("COOKIES", cookies); + return ctx.cookies.getValue({ name: String(args.values.cookie_name) }); + } + } + ] +}; +// Annotate the CommonJS export names for ESM import in node: +0 && (module.exports = { + plugin +}); diff --git a/src-tauri/vendored/plugins/template-function-cookie/package.json b/src-tauri/vendored/plugins/template-function-cookie/package.json new file mode 100644 index 00000000..1473c0b2 --- /dev/null +++ b/src-tauri/vendored/plugins/template-function-cookie/package.json @@ -0,0 +1,9 @@ +{ + "name": "@yaakapp/template-function-cookie", + "private": true, + "version": "0.0.1", + "scripts": { + "build": "yaakcli build ./src/index.ts", + "dev": "yaakcli dev ./src/index.js" + } +} diff --git a/src-tauri/yaak-models/src/models.rs b/src-tauri/yaak-models/src/models.rs index f6c7f245..983eba4a 100644 --- a/src-tauri/yaak-models/src/models.rs +++ b/src-tauri/yaak-models/src/models.rs @@ -418,10 +418,10 @@ enum CookieExpires { #[derive(Debug, Clone, Serialize, Deserialize, TS)] #[ts(export, export_to = "gen_models.ts")] pub struct Cookie { - raw_cookie: String, - domain: CookieDomain, - expires: CookieExpires, - path: (String, bool), + pub raw_cookie: String, + pub domain: CookieDomain, + pub expires: CookieExpires, + pub path: (String, bool), } #[derive(Debug, Clone, Serialize, Deserialize, Default, TS)] diff --git a/src-tauri/yaak-plugins/bindings/gen_events.ts b/src-tauri/yaak-plugins/bindings/gen_events.ts index ed8dd546..a67f9f66 100644 --- a/src-tauri/yaak-plugins/bindings/gen_events.ts +++ b/src-tauri/yaak-plugins/bindings/gen_events.ts @@ -310,6 +310,10 @@ defaultValue?: string, disabled?: boolean, }; export type GenericCompletionOption = { label: string, detail?: string, info?: string, type?: CompletionOptionType, boost?: number, }; +export type GetCookieValueRequest = { name: string, }; + +export type GetCookieValueResponse = { value: string | null, }; + export type GetHttpAuthenticationConfigRequest = { contextId: string, values: { [key in string]?: JsonPrimitive }, }; export type GetHttpAuthenticationConfigResponse = { args: Array, pluginRefId: string, actions?: Array, }; @@ -346,10 +350,14 @@ export type ImportResponse = { resources: ImportResources, }; export type InternalEvent = { id: string, pluginRefId: string, pluginName: string, replyId: string | null, windowContext: PluginWindowContext, payload: InternalEventPayload, }; -export type InternalEventPayload = { "type": "boot_request" } & BootRequest | { "type": "boot_response" } & BootResponse | { "type": "reload_request" } & EmptyPayload | { "type": "reload_response" } & EmptyPayload | { "type": "terminate_request" } | { "type": "terminate_response" } | { "type": "import_request" } & ImportRequest | { "type": "import_response" } & ImportResponse | { "type": "filter_request" } & FilterRequest | { "type": "filter_response" } & FilterResponse | { "type": "export_http_request_request" } & ExportHttpRequestRequest | { "type": "export_http_request_response" } & ExportHttpRequestResponse | { "type": "send_http_request_request" } & SendHttpRequestRequest | { "type": "send_http_request_response" } & SendHttpRequestResponse | { "type": "get_http_request_actions_request" } & EmptyPayload | { "type": "get_http_request_actions_response" } & GetHttpRequestActionsResponse | { "type": "call_http_request_action_request" } & CallHttpRequestActionRequest | { "type": "get_template_functions_request" } | { "type": "get_template_functions_response" } & GetTemplateFunctionsResponse | { "type": "call_template_function_request" } & CallTemplateFunctionRequest | { "type": "call_template_function_response" } & CallTemplateFunctionResponse | { "type": "get_http_authentication_summary_request" } & EmptyPayload | { "type": "get_http_authentication_summary_response" } & GetHttpAuthenticationSummaryResponse | { "type": "get_http_authentication_config_request" } & GetHttpAuthenticationConfigRequest | { "type": "get_http_authentication_config_response" } & GetHttpAuthenticationConfigResponse | { "type": "call_http_authentication_request" } & CallHttpAuthenticationRequest | { "type": "call_http_authentication_response" } & CallHttpAuthenticationResponse | { "type": "call_http_authentication_action_request" } & CallHttpAuthenticationActionRequest | { "type": "call_http_authentication_action_response" } & EmptyPayload | { "type": "copy_text_request" } & CopyTextRequest | { "type": "copy_text_response" } & EmptyPayload | { "type": "render_http_request_request" } & RenderHttpRequestRequest | { "type": "render_http_request_response" } & RenderHttpRequestResponse | { "type": "get_key_value_request" } & GetKeyValueRequest | { "type": "get_key_value_response" } & GetKeyValueResponse | { "type": "set_key_value_request" } & SetKeyValueRequest | { "type": "set_key_value_response" } & SetKeyValueResponse | { "type": "delete_key_value_request" } & DeleteKeyValueRequest | { "type": "delete_key_value_response" } & DeleteKeyValueResponse | { "type": "open_window_request" } & OpenWindowRequest | { "type": "window_navigate_event" } & WindowNavigateEvent | { "type": "window_close_event" } | { "type": "close_window_request" } & CloseWindowRequest | { "type": "template_render_request" } & TemplateRenderRequest | { "type": "template_render_response" } & TemplateRenderResponse | { "type": "show_toast_request" } & ShowToastRequest | { "type": "show_toast_response" } & EmptyPayload | { "type": "prompt_text_request" } & PromptTextRequest | { "type": "prompt_text_response" } & PromptTextResponse | { "type": "get_http_request_by_id_request" } & GetHttpRequestByIdRequest | { "type": "get_http_request_by_id_response" } & GetHttpRequestByIdResponse | { "type": "find_http_responses_request" } & FindHttpResponsesRequest | { "type": "find_http_responses_response" } & FindHttpResponsesResponse | { "type": "empty_response" } & EmptyPayload | { "type": "error_response" } & ErrorResponse; +export type InternalEventPayload = { "type": "boot_request" } & BootRequest | { "type": "boot_response" } & BootResponse | { "type": "reload_request" } & EmptyPayload | { "type": "reload_response" } & EmptyPayload | { "type": "terminate_request" } | { "type": "terminate_response" } | { "type": "import_request" } & ImportRequest | { "type": "import_response" } & ImportResponse | { "type": "filter_request" } & FilterRequest | { "type": "filter_response" } & FilterResponse | { "type": "export_http_request_request" } & ExportHttpRequestRequest | { "type": "export_http_request_response" } & ExportHttpRequestResponse | { "type": "send_http_request_request" } & SendHttpRequestRequest | { "type": "send_http_request_response" } & SendHttpRequestResponse | { "type": "list_cookie_names_request" } & ListCookieNamesRequest | { "type": "list_cookie_names_response" } & ListCookieNamesResponse | { "type": "get_cookie_value_request" } & GetCookieValueRequest | { "type": "get_cookie_value_response" } & GetCookieValueResponse | { "type": "get_http_request_actions_request" } & EmptyPayload | { "type": "get_http_request_actions_response" } & GetHttpRequestActionsResponse | { "type": "call_http_request_action_request" } & CallHttpRequestActionRequest | { "type": "get_template_functions_request" } | { "type": "get_template_functions_response" } & GetTemplateFunctionsResponse | { "type": "call_template_function_request" } & CallTemplateFunctionRequest | { "type": "call_template_function_response" } & CallTemplateFunctionResponse | { "type": "get_http_authentication_summary_request" } & EmptyPayload | { "type": "get_http_authentication_summary_response" } & GetHttpAuthenticationSummaryResponse | { "type": "get_http_authentication_config_request" } & GetHttpAuthenticationConfigRequest | { "type": "get_http_authentication_config_response" } & GetHttpAuthenticationConfigResponse | { "type": "call_http_authentication_request" } & CallHttpAuthenticationRequest | { "type": "call_http_authentication_response" } & CallHttpAuthenticationResponse | { "type": "call_http_authentication_action_request" } & CallHttpAuthenticationActionRequest | { "type": "call_http_authentication_action_response" } & EmptyPayload | { "type": "copy_text_request" } & CopyTextRequest | { "type": "copy_text_response" } & EmptyPayload | { "type": "render_http_request_request" } & RenderHttpRequestRequest | { "type": "render_http_request_response" } & RenderHttpRequestResponse | { "type": "get_key_value_request" } & GetKeyValueRequest | { "type": "get_key_value_response" } & GetKeyValueResponse | { "type": "set_key_value_request" } & SetKeyValueRequest | { "type": "set_key_value_response" } & SetKeyValueResponse | { "type": "delete_key_value_request" } & DeleteKeyValueRequest | { "type": "delete_key_value_response" } & DeleteKeyValueResponse | { "type": "open_window_request" } & OpenWindowRequest | { "type": "window_navigate_event" } & WindowNavigateEvent | { "type": "window_close_event" } | { "type": "close_window_request" } & CloseWindowRequest | { "type": "template_render_request" } & TemplateRenderRequest | { "type": "template_render_response" } & TemplateRenderResponse | { "type": "show_toast_request" } & ShowToastRequest | { "type": "show_toast_response" } & EmptyPayload | { "type": "prompt_text_request" } & PromptTextRequest | { "type": "prompt_text_response" } & PromptTextResponse | { "type": "get_http_request_by_id_request" } & GetHttpRequestByIdRequest | { "type": "get_http_request_by_id_response" } & GetHttpRequestByIdResponse | { "type": "find_http_responses_request" } & FindHttpResponsesRequest | { "type": "find_http_responses_response" } & FindHttpResponsesResponse | { "type": "empty_response" } & EmptyPayload | { "type": "error_response" } & ErrorResponse; export type JsonPrimitive = string | number | boolean | null; +export type ListCookieNamesRequest = {}; + +export type ListCookieNamesResponse = { names: Array, }; + export type OpenWindowRequest = { url: string, /** * Label for the window. If not provided, a random one will be generated. diff --git a/src-tauri/yaak-plugins/src/events.rs b/src-tauri/yaak-plugins/src/events.rs index ac8f29f8..5e4ec454 100644 --- a/src-tauri/yaak-plugins/src/events.rs +++ b/src-tauri/yaak-plugins/src/events.rs @@ -84,6 +84,11 @@ pub enum InternalEventPayload { SendHttpRequestRequest(SendHttpRequestRequest), SendHttpRequestResponse(SendHttpRequestResponse), + ListCookieNamesRequest(ListCookieNamesRequest), + ListCookieNamesResponse(ListCookieNamesResponse), + GetCookieValueRequest(GetCookieValueRequest), + GetCookieValueResponse(GetCookieValueResponse), + // Request Actions GetHttpRequestActionsRequest(EmptyPayload), GetHttpRequestActionsResponse(GetHttpRequestActionsResponse), @@ -231,6 +236,32 @@ pub struct SendHttpRequestResponse { pub http_response: HttpResponse, } +#[derive(Debug, Clone, Default, Serialize, Deserialize, TS)] +#[serde(default)] +#[ts(export, type = "{}", export_to = "gen_events.ts")] +pub struct ListCookieNamesRequest {} + +#[derive(Debug, Clone, Default, Serialize, Deserialize, TS)] +#[serde(default, rename_all = "camelCase")] +#[ts(export, export_to = "gen_events.ts")] +pub struct ListCookieNamesResponse { + pub names: Vec, +} + +#[derive(Debug, Clone, Default, Serialize, Deserialize, TS)] +#[serde(default, rename_all = "camelCase")] +#[ts(export, export_to = "gen_events.ts")] +pub struct GetCookieValueRequest { + pub name: String, +} + +#[derive(Debug, Clone, Default, Serialize, Deserialize, TS)] +#[serde(default, rename_all = "camelCase")] +#[ts(export, export_to = "gen_events.ts")] +pub struct GetCookieValueResponse { + pub value: Option, +} + #[derive(Debug, Clone, Default, Serialize, Deserialize, TS)] #[serde(default, rename_all = "camelCase")] #[ts(export, export_to = "gen_events.ts")]