Refactor new actions apis

This commit is contained in:
Gregory Schier
2025-12-28 14:27:39 -08:00
parent 07d743db21
commit 3855058d8f
16 changed files with 540 additions and 170 deletions

View File

@@ -89,10 +89,21 @@ pub enum InternalEventPayload {
GetHttpRequestActionsRequest(EmptyPayload),
GetHttpRequestActionsResponse(GetHttpRequestActionsResponse),
CallHttpRequestActionRequest(CallHttpRequestActionRequest),
// HTTP Collection Actions
GetHttpCollectionActionsRequest(EmptyPayload),
GetHttpCollectionActionsResponse(GetHttpCollectionActionsResponse),
CallHttpCollectionActionRequest(CallHttpCollectionActionRequest),
// WebSocket Request Actions
GetWebSocketRequestActionsRequest(EmptyPayload),
GetWebSocketRequestActionsResponse(GetWebSocketRequestActionsResponse),
CallWebSocketRequestActionRequest(CallWebSocketRequestActionRequest),
// Workspace Actions
GetWorkspaceActionsRequest(EmptyPayload),
GetWorkspaceActionsResponse(GetWorkspaceActionsResponse),
CallWorkspaceActionRequest(CallWorkspaceActionRequest),
// Folder Actions
GetFolderActionsRequest(EmptyPayload),
GetFolderActionsResponse(GetFolderActionsResponse),
CallFolderActionRequest(CallFolderActionRequest),
// Grpc Request Actions
GetGrpcRequestActionsRequest(EmptyPayload),
@@ -1104,14 +1115,6 @@ pub struct GetHttpRequestActionsResponse {
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 GetHttpCollectionActionsResponse {
pub actions: Vec<HttpCollectionAction>,
pub plugin_ref_id: String,
}
#[derive(Debug, Clone, Default, Serialize, Deserialize, TS)]
#[serde(default, rename_all = "camelCase")]
#[ts(export, export_to = "gen_events.ts")]
@@ -1121,15 +1124,6 @@ pub struct HttpRequestAction {
pub icon: Option<Icon>,
}
#[derive(Debug, Clone, Default, Serialize, Deserialize, TS)]
#[serde(default, rename_all = "camelCase")]
#[ts(export, export_to = "gen_events.ts")]
pub struct HttpCollectionAction {
pub label: String,
#[ts(optional)]
pub icon: Option<Icon>,
}
#[derive(Debug, Clone, Default, Serialize, Deserialize, TS)]
#[serde(default, rename_all = "camelCase")]
#[ts(export, export_to = "gen_events.ts")]
@@ -1139,15 +1133,6 @@ pub struct CallHttpRequestActionRequest {
pub args: CallHttpRequestActionArgs,
}
#[derive(Debug, Clone, Default, Serialize, Deserialize, TS)]
#[serde(default, rename_all = "camelCase")]
#[ts(export, export_to = "gen_events.ts")]
pub struct CallHttpCollectionActionRequest {
pub index: i32,
pub plugin_ref_id: String,
pub args: CallHttpCollectionActionArgs,
}
#[derive(Debug, Clone, Default, Serialize, Deserialize, TS)]
#[serde(default, rename_all = "camelCase")]
#[ts(export, export_to = "gen_events.ts")]
@@ -1158,11 +1143,100 @@ pub struct CallHttpRequestActionArgs {
#[derive(Debug, Clone, Default, Serialize, Deserialize, TS)]
#[serde(default, rename_all = "camelCase")]
#[ts(export, export_to = "gen_events.ts")]
pub struct CallHttpCollectionActionArgs {
pub struct GetWebSocketRequestActionsResponse {
pub actions: Vec<WebSocketRequestAction>,
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 WebSocketRequestAction {
pub label: String,
#[ts(optional)]
pub folder: Option<Folder>,
pub icon: Option<Icon>,
}
#[derive(Debug, Clone, Default, Serialize, Deserialize, TS)]
#[serde(default, rename_all = "camelCase")]
#[ts(export, export_to = "gen_events.ts")]
pub struct CallWebSocketRequestActionRequest {
pub index: i32,
pub plugin_ref_id: String,
pub args: CallWebSocketRequestActionArgs,
}
#[derive(Debug, Clone, Default, Serialize, Deserialize, TS)]
#[serde(default, rename_all = "camelCase")]
#[ts(export, export_to = "gen_events.ts")]
pub struct CallWebSocketRequestActionArgs {
pub websocket_request: WebsocketRequest,
}
#[derive(Debug, Clone, Default, Serialize, Deserialize, TS)]
#[serde(default, rename_all = "camelCase")]
#[ts(export, export_to = "gen_events.ts")]
pub struct GetWorkspaceActionsResponse {
pub actions: Vec<WorkspaceAction>,
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 WorkspaceAction {
pub label: String,
#[ts(optional)]
pub workspace: Option<Workspace>,
pub icon: Option<Icon>,
}
#[derive(Debug, Clone, Default, Serialize, Deserialize, TS)]
#[serde(default, rename_all = "camelCase")]
#[ts(export, export_to = "gen_events.ts")]
pub struct CallWorkspaceActionRequest {
pub index: i32,
pub plugin_ref_id: String,
pub args: CallWorkspaceActionArgs,
}
#[derive(Debug, Clone, Default, Serialize, Deserialize, TS)]
#[serde(default, rename_all = "camelCase")]
#[ts(export, export_to = "gen_events.ts")]
pub struct CallWorkspaceActionArgs {
pub workspace: Workspace,
}
#[derive(Debug, Clone, Default, Serialize, Deserialize, TS)]
#[serde(default, rename_all = "camelCase")]
#[ts(export, export_to = "gen_events.ts")]
pub struct GetFolderActionsResponse {
pub actions: Vec<FolderAction>,
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 FolderAction {
pub label: String,
#[ts(optional)]
pub icon: Option<Icon>,
}
#[derive(Debug, Clone, Default, Serialize, Deserialize, TS)]
#[serde(default, rename_all = "camelCase")]
#[ts(export, export_to = "gen_events.ts")]
pub struct CallFolderActionRequest {
pub index: i32,
pub plugin_ref_id: String,
pub args: CallFolderActionArgs,
}
#[derive(Debug, Clone, Default, Serialize, Deserialize, TS)]
#[serde(default, rename_all = "camelCase")]
#[ts(export, export_to = "gen_events.ts")]
pub struct CallFolderActionArgs {
pub folder: Folder,
}
#[derive(Debug, Clone, Default, Serialize, Deserialize, TS)]

View File

@@ -3,18 +3,18 @@ use crate::error::Error::{
};
use crate::error::Result;
use crate::events::{
BootRequest, CallGrpcRequestActionRequest, CallHttpAuthenticationActionArgs,
CallHttpAuthenticationActionRequest, CallHttpAuthenticationRequest,
CallHttpAuthenticationResponse, CallHttpRequestActionRequest, CallTemplateFunctionArgs,
CallTemplateFunctionRequest, CallTemplateFunctionResponse, EmptyPayload, ErrorResponse,
FilterRequest, FilterResponse, GetGrpcRequestActionsResponse,
BootRequest, CallFolderActionRequest, CallGrpcRequestActionRequest,
CallHttpAuthenticationActionArgs, CallHttpAuthenticationActionRequest,
CallHttpAuthenticationRequest, CallHttpAuthenticationResponse, CallHttpRequestActionRequest,
CallTemplateFunctionArgs, CallTemplateFunctionRequest, CallTemplateFunctionResponse,
CallWebSocketRequestActionRequest, CallWorkspaceActionRequest, EmptyPayload, ErrorResponse,
FilterRequest, FilterResponse, GetFolderActionsResponse, GetGrpcRequestActionsResponse,
GetHttpAuthenticationConfigRequest, GetHttpAuthenticationConfigResponse,
GetHttpAuthenticationSummaryResponse, GetHttpRequestActionsResponse,
GetHttpCollectionActionsResponse, CallHttpCollectionActionRequest,
GetTemplateFunctionConfigRequest, GetTemplateFunctionConfigResponse,
GetTemplateFunctionSummaryResponse, GetThemesRequest, GetThemesResponse, ImportRequest,
ImportResponse, InternalEvent, InternalEventPayload, JsonPrimitive, PluginContext,
RenderPurpose,
GetTemplateFunctionSummaryResponse, GetThemesRequest, GetThemesResponse,
GetWebSocketRequestActionsResponse, GetWorkspaceActionsResponse, ImportRequest, ImportResponse,
InternalEvent, InternalEventPayload, JsonPrimitive, PluginContext, RenderPurpose,
};
use crate::native_template_functions::{template_function_keyring, template_function_secure};
use crate::nodejs::start_nodejs_plugin_runtime;
@@ -483,20 +483,62 @@ impl PluginManager {
Ok(all_actions)
}
pub async fn get_http_collection_actions<R: Runtime>(
pub async fn get_websocket_request_actions<R: Runtime>(
&self,
window: &WebviewWindow<R>,
) -> Result<Vec<GetHttpCollectionActionsResponse>> {
) -> Result<Vec<GetWebSocketRequestActionsResponse>> {
let reply_events = self
.send_and_wait(
&PluginContext::new(window),
&InternalEventPayload::GetHttpCollectionActionsRequest(EmptyPayload {}),
&InternalEventPayload::GetWebSocketRequestActionsRequest(EmptyPayload {}),
)
.await?;
let mut all_actions = Vec::new();
for event in reply_events {
if let InternalEventPayload::GetHttpCollectionActionsResponse(resp) = event.payload {
if let InternalEventPayload::GetWebSocketRequestActionsResponse(resp) = event.payload {
all_actions.push(resp.clone());
}
}
Ok(all_actions)
}
pub async fn get_workspace_actions<R: Runtime>(
&self,
window: &WebviewWindow<R>,
) -> Result<Vec<GetWorkspaceActionsResponse>> {
let reply_events = self
.send_and_wait(
&PluginContext::new(window),
&InternalEventPayload::GetWorkspaceActionsRequest(EmptyPayload {}),
)
.await?;
let mut all_actions = Vec::new();
for event in reply_events {
if let InternalEventPayload::GetWorkspaceActionsResponse(resp) = event.payload {
all_actions.push(resp.clone());
}
}
Ok(all_actions)
}
pub async fn get_folder_actions<R: Runtime>(
&self,
window: &WebviewWindow<R>,
) -> Result<Vec<GetFolderActionsResponse>> {
let reply_events = self
.send_and_wait(
&PluginContext::new(window),
&InternalEventPayload::GetFolderActionsRequest(EmptyPayload {}),
)
.await?;
let mut all_actions = Vec::new();
for event in reply_events {
if let InternalEventPayload::GetFolderActionsResponse(resp) = event.payload {
all_actions.push(resp.clone());
}
}
@@ -586,17 +628,51 @@ impl PluginManager {
Ok(())
}
pub async fn call_http_collection_action<R: Runtime>(
pub async fn call_websocket_request_action<R: Runtime>(
&self,
window: &WebviewWindow<R>,
req: CallHttpCollectionActionRequest,
req: CallWebSocketRequestActionRequest,
) -> Result<()> {
let ref_id = req.plugin_ref_id.clone();
let plugin =
self.get_plugin_by_ref_id(ref_id.as_str()).await.ok_or(PluginNotFoundErr(ref_id))?;
let event = plugin.build_event_to_send(
&PluginContext::new(window),
&InternalEventPayload::CallHttpCollectionActionRequest(req),
&InternalEventPayload::CallWebSocketRequestActionRequest(req),
None,
);
plugin.send(&event).await?;
Ok(())
}
pub async fn call_workspace_action<R: Runtime>(
&self,
window: &WebviewWindow<R>,
req: CallWorkspaceActionRequest,
) -> Result<()> {
let ref_id = req.plugin_ref_id.clone();
let plugin =
self.get_plugin_by_ref_id(ref_id.as_str()).await.ok_or(PluginNotFoundErr(ref_id))?;
let event = plugin.build_event_to_send(
&PluginContext::new(window),
&InternalEventPayload::CallWorkspaceActionRequest(req),
None,
);
plugin.send(&event).await?;
Ok(())
}
pub async fn call_folder_action<R: Runtime>(
&self,
window: &WebviewWindow<R>,
req: CallFolderActionRequest,
) -> Result<()> {
let ref_id = req.plugin_ref_id.clone();
let plugin =
self.get_plugin_by_ref_id(ref_id.as_str()).await.ok_or(PluginNotFoundErr(ref_id))?;
let event = plugin.build_event_to_send(
&PluginContext::new(window),
&InternalEventPayload::CallFolderActionRequest(req),
None,
);
plugin.send(&event).await?;