use serde::{Deserialize, Serialize}; use std::collections::HashMap; use tauri::{Runtime, WebviewWindow}; use ts_rs::TS; use yaak_models::models::{Environment, Folder, GrpcRequest, HttpRequest, HttpResponse, WebsocketRequest, Workspace}; #[derive(Debug, Clone, Serialize, Deserialize, TS)] #[serde(rename_all = "camelCase")] #[ts(export, export_to = "gen_events.ts")] pub struct InternalEvent { pub id: String, pub plugin_ref_id: String, pub plugin_name: String, pub reply_id: Option, pub window_context: WindowContext, pub payload: InternalEventPayload, } /// Special type used to deserialize everything but the payload. This is so we can /// catch any plugin-related type errors, since payload is sent by the plugin author /// and all other fields are sent by Yaak first-party code. #[derive(Debug, Clone, Serialize, Deserialize)] #[serde(rename_all = "camelCase")] pub(crate) struct InternalEventRawPayload { pub id: String, pub plugin_ref_id: String, pub plugin_name: String, pub reply_id: Option, pub window_context: WindowContext, pub payload: serde_json::Value, } #[derive(Debug, Clone, Serialize, Deserialize, TS)] #[serde(rename_all = "snake_case", tag = "type")] #[ts(export, export_to = "gen_events.ts")] pub enum WindowContext { None, Label { label: String }, } impl WindowContext { pub fn from_window(window: &WebviewWindow) -> Self { Self::Label { label: window.label().to_string(), } } } #[derive(Debug, Clone, Serialize, Deserialize, TS)] #[serde(rename_all = "snake_case", tag = "type")] #[ts(export, export_to = "gen_events.ts")] pub enum InternalEventPayload { BootRequest(BootRequest), BootResponse(BootResponse), ReloadRequest(EmptyPayload), ReloadResponse(EmptyPayload), TerminateRequest, TerminateResponse, ImportRequest(ImportRequest), ImportResponse(ImportResponse), FilterRequest(FilterRequest), FilterResponse(FilterResponse), ExportHttpRequestRequest(ExportHttpRequestRequest), ExportHttpRequestResponse(ExportHttpRequestResponse), SendHttpRequestRequest(SendHttpRequestRequest), SendHttpRequestResponse(SendHttpRequestResponse), // Request Actions GetHttpRequestActionsRequest(EmptyPayload), GetHttpRequestActionsResponse(GetHttpRequestActionsResponse), CallHttpRequestActionRequest(CallHttpRequestActionRequest), // Template Functions GetTemplateFunctionsRequest, GetTemplateFunctionsResponse(GetTemplateFunctionsResponse), CallTemplateFunctionRequest(CallTemplateFunctionRequest), CallTemplateFunctionResponse(CallTemplateFunctionResponse), // Http Authentication GetHttpAuthenticationSummaryRequest(EmptyPayload), GetHttpAuthenticationSummaryResponse(GetHttpAuthenticationSummaryResponse), GetHttpAuthenticationConfigRequest(GetHttpAuthenticationConfigRequest), GetHttpAuthenticationConfigResponse(GetHttpAuthenticationConfigResponse), CallHttpAuthenticationRequest(CallHttpAuthenticationRequest), CallHttpAuthenticationResponse(CallHttpAuthenticationResponse), CallHttpAuthenticationActionRequest(CallHttpAuthenticationActionRequest), CallHttpAuthenticationActionResponse(EmptyPayload), CopyTextRequest(CopyTextRequest), CopyTextResponse(EmptyPayload), RenderHttpRequestRequest(RenderHttpRequestRequest), RenderHttpRequestResponse(RenderHttpRequestResponse), GetKeyValueRequest(GetKeyValueRequest), GetKeyValueResponse(GetKeyValueResponse), SetKeyValueRequest(SetKeyValueRequest), SetKeyValueResponse(SetKeyValueResponse), DeleteKeyValueRequest(DeleteKeyValueRequest), DeleteKeyValueResponse(DeleteKeyValueResponse), OpenWindowRequest(OpenWindowRequest), WindowNavigateEvent(WindowNavigateEvent), CloseWindowRequest(CloseWindowRequest), TemplateRenderRequest(TemplateRenderRequest), TemplateRenderResponse(TemplateRenderResponse), ShowToastRequest(ShowToastRequest), ShowToastResponse(EmptyPayload), PromptTextRequest(PromptTextRequest), PromptTextResponse(PromptTextResponse), GetHttpRequestByIdRequest(GetHttpRequestByIdRequest), GetHttpRequestByIdResponse(GetHttpRequestByIdResponse), FindHttpResponsesRequest(FindHttpResponsesRequest), FindHttpResponsesResponse(FindHttpResponsesResponse), /// Returned when a plugin doesn't get run, just so the server /// has something to listen for EmptyResponse(EmptyPayload), ErrorResponse(ErrorResponse), } #[derive(Debug, Clone, Default, Serialize, Deserialize, TS)] #[serde(default)] #[ts(export, type = "{}", export_to = "gen_events.ts")] pub struct EmptyPayload {} #[derive(Debug, Clone, Default, Serialize, Deserialize, TS)] #[serde(default)] #[ts(export, export_to = "gen_events.ts")] pub struct ErrorResponse { pub error: String, } #[derive(Debug, Clone, Default, Serialize, Deserialize, TS)] #[serde(default, rename_all = "camelCase")] #[ts(export, export_to = "gen_events.ts")] pub struct BootRequest { pub dir: String, pub watch: bool, } #[derive(Debug, Clone, Default, Serialize, Deserialize, TS)] #[serde(default, rename_all = "camelCase")] #[ts(export, export_to = "gen_events.ts")] pub struct BootResponse { pub name: String, pub version: String, } #[derive(Debug, Clone, Default, Serialize, Deserialize, TS)] #[serde(default, rename_all = "camelCase")] #[ts(export, export_to = "gen_events.ts")] pub struct ImportRequest { pub content: String, } #[derive(Debug, Clone, Default, Serialize, Deserialize, TS)] #[serde(default, rename_all = "camelCase")] #[ts(export, export_to = "gen_events.ts")] pub struct ImportResponse { pub resources: ImportResources, } #[derive(Debug, Clone, Default, Serialize, Deserialize, TS)] #[serde(default, rename_all = "camelCase")] #[ts(export, export_to = "gen_events.ts")] pub struct FilterRequest { pub content: String, pub filter: String, } #[derive(Debug, Clone, Default, Serialize, Deserialize, TS)] #[serde(default, rename_all = "camelCase")] #[ts(export, export_to = "gen_events.ts")] pub struct FilterResponse { pub content: String, } #[derive(Debug, Clone, Default, Serialize, Deserialize, TS)] #[serde(default, rename_all = "camelCase")] #[ts(export, export_to = "gen_events.ts")] pub struct ExportHttpRequestRequest { pub http_request: HttpRequest, } #[derive(Debug, Clone, Default, Serialize, Deserialize, TS)] #[serde(default, rename_all = "camelCase")] #[ts(export, export_to = "gen_events.ts")] pub struct ExportHttpRequestResponse { pub content: String, } #[derive(Debug, Clone, Default, Serialize, Deserialize, TS)] #[serde(default, rename_all = "camelCase")] #[ts(export, export_to = "gen_events.ts")] pub struct SendHttpRequestRequest { #[ts(type = "Partial")] pub http_request: HttpRequest, } #[derive(Debug, Clone, Default, Serialize, Deserialize, TS)] #[serde(default, rename_all = "camelCase")] #[ts(export, export_to = "gen_events.ts")] pub struct SendHttpRequestResponse { pub http_response: HttpResponse, } #[derive(Debug, Clone, Default, Serialize, Deserialize, TS)] #[serde(default, rename_all = "camelCase")] #[ts(export, export_to = "gen_events.ts")] pub struct CopyTextRequest { pub text: String, } #[derive(Debug, Clone, Default, Serialize, Deserialize, TS)] #[serde(default, rename_all = "camelCase")] #[ts(export, export_to = "gen_events.ts")] pub struct RenderHttpRequestRequest { pub http_request: HttpRequest, pub purpose: RenderPurpose, } #[derive(Debug, Clone, Default, Serialize, Deserialize, TS)] #[serde(default, rename_all = "camelCase")] #[ts(export, export_to = "gen_events.ts")] pub struct RenderHttpRequestResponse { pub http_request: HttpRequest, } #[derive(Debug, Clone, Default, Serialize, Deserialize, TS)] #[serde(default, rename_all = "camelCase")] #[ts(export, export_to = "gen_events.ts")] pub struct TemplateRenderRequest { pub data: serde_json::Value, pub purpose: RenderPurpose, } #[derive(Debug, Clone, Default, Serialize, Deserialize, TS)] #[serde(default, rename_all = "camelCase")] #[ts(export, export_to = "gen_events.ts")] pub struct TemplateRenderResponse { pub data: serde_json::Value, } #[derive(Debug, Clone, Default, Serialize, Deserialize, TS)] #[serde(default, rename_all = "camelCase")] #[ts(export, export_to = "gen_events.ts")] pub struct OpenWindowRequest { pub url: String, /// Label for the window. If not provided, a random one will be generated. pub label: String, #[ts(optional)] pub title: Option, #[ts(optional)] pub size: Option, } #[derive(Debug, Clone, Default, Serialize, Deserialize, TS)] #[serde(default, rename_all = "camelCase")] #[ts(export, export_to = "gen_events.ts")] pub struct WindowSize { pub width: f64, pub height: f64, } #[derive(Debug, Clone, Default, Serialize, Deserialize, TS)] #[serde(default, rename_all = "camelCase")] #[ts(export, export_to = "gen_events.ts")] pub struct CloseWindowRequest { pub label: String, } #[derive(Debug, Clone, Default, Serialize, Deserialize, TS)] #[serde(default, rename_all = "camelCase")] #[ts(export, export_to = "gen_events.ts")] pub struct WindowNavigateEvent { pub url: String, } #[derive(Debug, Clone, Default, Serialize, Deserialize, TS)] #[serde(default, rename_all = "camelCase")] #[ts(export, export_to = "gen_events.ts")] pub struct ShowToastRequest { pub message: String, #[ts(optional)] pub color: Option, #[ts(optional)] pub icon: Option, } #[derive(Debug, Clone, Default, Serialize, Deserialize, TS)] #[serde(default, rename_all = "camelCase")] #[ts(export, export_to = "gen_events.ts")] pub struct PromptTextRequest { // A unique ID to identify the prompt (eg. "enter-password") pub id: String, // Title to show on the prompt dialog pub title: String, // Text to show on the label above the input pub label: String, #[ts(optional)] pub description: Option, #[ts(optional)] pub default_value: Option, #[ts(optional)] pub placeholder: Option, /// Text to add to the confirmation button #[ts(optional)] pub confirm_text: Option, /// Text to add to the cancel button #[ts(optional)] pub cancel_text: Option, /// Require the user to enter a non-empty value #[ts(optional)] pub required: Option, } #[derive(Debug, Clone, Default, Serialize, Deserialize, TS)] #[serde(default, rename_all = "camelCase")] #[ts(export, export_to = "gen_events.ts")] pub struct PromptTextResponse { pub value: Option, } #[derive(Debug, Clone, Serialize, Deserialize, TS)] #[serde(rename_all = "snake_case")] #[ts(export, export_to = "gen_events.ts")] pub enum Color { Primary, Secondary, Info, Success, Notice, Warning, Danger, } impl Default for Color { fn default() -> Self { Color::Secondary } } #[derive(Debug, Clone, Serialize, Deserialize, TS)] #[serde(rename_all = "snake_case")] #[ts(export, export_to = "gen_events.ts")] pub enum Icon { AlertTriangle, Check, CheckCircle, ChevronDown, Copy, Info, Pin, Search, Trash, #[serde(untagged)] #[ts(type = "\"_unknown\"")] _Unknown(String), } #[derive(Debug, Clone, Default, Serialize, Deserialize, TS)] #[serde(default, rename_all = "camelCase")] #[ts(export, export_to = "gen_events.ts")] pub struct GetHttpAuthenticationSummaryResponse { pub name: String, pub label: String, pub short_label: String, } #[derive(Debug, Clone, Default, Serialize, Deserialize, TS)] #[serde(default, rename_all = "camelCase")] #[ts(export, export_to = "gen_events.ts")] pub struct HttpAuthenticationAction { pub label: String, #[ts(optional)] pub icon: Option, } #[derive(Debug, Clone, Default, Serialize, Deserialize, TS)] #[serde(default, rename_all = "camelCase")] #[ts(export, export_to = "gen_events.ts")] pub struct GetHttpAuthenticationConfigRequest { pub context_id: String, pub values: HashMap, } #[derive(Debug, Clone, Default, Serialize, Deserialize, TS)] #[serde(default, rename_all = "camelCase")] #[ts(export, export_to = "gen_events.ts")] pub struct GetHttpAuthenticationConfigResponse { pub args: Vec, pub plugin_ref_id: String, #[ts(optional)] pub actions: Option>, } #[derive(Debug, Clone, Default, Serialize, Deserialize, TS)] #[serde(default, rename_all = "camelCase")] #[ts(export, export_to = "gen_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 = "gen_events.ts")] pub struct CallHttpAuthenticationRequest { pub context_id: String, pub values: HashMap, pub method: String, pub url: String, pub headers: Vec, } #[derive(Debug, Clone, Default, Serialize, Deserialize, TS)] #[serde(default, rename_all = "camelCase")] #[ts(export, export_to = "gen_events.ts")] pub struct CallHttpAuthenticationActionRequest { pub index: i32, pub plugin_ref_id: String, pub args: CallHttpAuthenticationActionArgs, } #[derive(Debug, Clone, Default, Serialize, Deserialize, TS)] #[serde(default, rename_all = "camelCase")] #[ts(export, export_to = "gen_events.ts")] pub struct CallHttpAuthenticationActionArgs { pub context_id: String, pub values: HashMap, } #[derive(Debug, Clone, Serialize, Deserialize, TS)] #[serde(untagged)] #[ts(export, export_to = "gen_events.ts")] pub enum JsonPrimitive { String(String), Number(f64), Boolean(bool), Null, } #[derive(Debug, Clone, Default, Serialize, Deserialize, TS)] #[serde(default, rename_all = "camelCase")] #[ts(export, export_to = "gen_events.ts")] pub struct CallHttpAuthenticationResponse { /// 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)] #[serde(default, rename_all = "camelCase")] #[ts(export, export_to = "gen_events.ts")] pub struct GetTemplateFunctionsResponse { pub functions: Vec, pub plugin_ref_id: String, } #[derive(Debug, Clone, Default, Serialize, Deserialize, TS)] #[serde(default, rename_all = "camelCase")] #[ts(export, export_to = "gen_events.ts")] pub struct TemplateFunction { pub name: String, #[ts(optional)] pub description: Option, /// Also support alternative names. This is useful for not breaking existing /// tags when changing the `name` property #[ts(optional)] pub aliases: Option>, pub args: Vec, } #[derive(Debug, Clone, Serialize, Deserialize, TS)] #[serde(rename_all = "snake_case", tag = "type")] #[ts(export, export_to = "gen_events.ts")] pub enum FormInput { Text(FormInputText), Editor(FormInputEditor), Select(FormInputSelect), Checkbox(FormInputCheckbox), File(FormInputFile), HttpRequest(FormInputHttpRequest), Accordion(FormInputAccordion), Banner(FormInputBanner), Markdown(FormInputMarkdown), } #[derive(Debug, Clone, Default, Serialize, Deserialize, TS)] #[serde(default, rename_all = "camelCase")] #[ts(export, export_to = "gen_events.ts")] pub struct FormInputBase { /// The name of the input. The value will be stored at this object attribute in the resulting data pub name: String, /// Whether this input is visible for the given configuration. Use this to /// make branching forms. #[ts(optional)] pub hidden: Option, /// Whether the user must fill in the argument #[ts(optional)] pub optional: Option, /// The label of the input #[ts(optional)] pub label: Option, /// Visually hide the label of the input #[ts(optional)] pub hide_label: Option, /// The default value #[ts(optional)] pub default_value: Option, #[ts(optional)] pub disabled: Option, } #[derive(Debug, Clone, Default, Serialize, Deserialize, TS)] #[serde(default, rename_all = "camelCase")] #[ts(export, export_to = "gen_events.ts")] pub struct FormInputText { #[serde(flatten)] pub base: FormInputBase, /// Placeholder for the text input #[ts(optional = nullable)] pub placeholder: Option, /// Placeholder for the text input #[ts(optional)] pub password: Option, /// Whether to allow newlines in the input, like a