diff options
| author | Aram Drevekenin <aram@poor.dev> | 2025-06-23 19:19:37 +0200 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2025-06-23 19:19:37 +0200 |
| commit | c5ac7968809ddb1033b625562eae22019cccc2f4 (patch) | |
| tree | 932cf07d898dfbcc6ec6a9d4cf5353c06a47accc /zellij-utils/assets | |
| parent | feat(ui): add optional tooltip with key hints to the compact bar (#4225) (diff) | |
| download | sl0ppij-c5ac7968809ddb1033b625562eae22019cccc2f4.tar.gz sl0ppij-c5ac7968809ddb1033b625562eae22019cccc2f4.tar.xz sl0ppij-c5ac7968809ddb1033b625562eae22019cccc2f4.zip | |
Feature: web-client/server to share your sessions in the browser (#4242)
* work
* moar work
* notes
* work
* separate to terminal and control channels
* stdin working
* serve html web client initial
* serve static assets loaded with include_dir
* merge
* enable_web_server config parameter
* compile time flag to disable web server capability
* rustfmt
* add license to all xterm.js assets
* mouse working except copy/paste
* helpful comment
* web client improvements
- move script to js file
- add favicon
- add nerd font
- change title
TODO: investigate if font license embedded in otf is sufficient
* get mouse to work properly
* kitty keyboard support initial
* fix wrong type in preload link
* wip axum websocket handlers
- upgrade axum to v0.8.1, enable ws feature
- begin setup of websocket handlers
- tidy up imports
* replace control listener
* handle terminal websocket with axum
* cleanup Cargo.toml
* kitty fixes and bracketed paste
* fix(mouse): pane not found crash
* initial session switching infra
* add `web_client_font` option
* session switching, creation and resurrection working through the session manager
* move session module to zellij-utils and share logic with web-client
* some cleanups
* require restart for enable-web-server
* use session name from router
* write config to disk and watch for config changes
* rename session name to ipc path
* add basic panic handler, make render_to_client exit on channel close
* use while let instead of loop
* handle websocket close
* add mouse motions
* make clipboard work
* add weblink handling and webgl rendering
* add todo
* fix: use session name instead of patch on session switch
* use "default" layout for new sessions
* ui indication for session being shared
* share this session ui
* plugin assets
* Fix process crash on mac with notify watcher.
Use poll watcher instead of recommended as a workaround.
* make url session switching and creation work
* start welcome screen on root url
* scaffold control messages, set font from config
* set dimensions on session start
* bring back session name from url
* send bytes on terminal websocket instead of json
- create web client os input and id before websocket connection
* draft ui
* work
* refactor ui
* remove otf font, remove margins to avoid scrollbar
* version query endpoint for server status
* web session info query endpoint
* refactor: move stuff around
* add web client info to session metadata
* make tests pass
* populate real data in session list
* remove unnecessary endpoint
* add web_client node to config, add font option
* remove web_client_font
* allow disabling the web session through the config - WIP
* formalize sharing/not-sharing configuration
* fix tests
* allow shutting down web server
* display error when web clients are forbidden to attach
* only show sessions that allow web clients if this is a web client
* style(fmt): rustfmt
* fix: query web server from Zellij rather than from each plugin
* remove log spam
* handle some error paths better in the web client
* allow controlling the web server through the cli
* allow configuring the web server's ip/port
* fix tests and format code
* use direct WebServerStatus event instead of piggy-backing on SessionInfo
* plugin revamp initial
* make plugin responsive
* adjust plugin title
* refactor: share plugin
* refactor: share plugin
* add cors middleware
* some fixes for running without a compiled web server capability
* display error when starting the share plugin without web server support
* clarify config
* add pipelines to compile zellij without web support
* display error when unable to start web server
* only query web server when share plugin is running
* refactor(web-client): connection table
* give zellij_server_listener access to the control channel
* fixes and clarifications
* refactor: consolidate generate_unique_session_name
* give proper error when trying to attach to a forbidden session
* change browser URL when switching sessions
* add keyboard shortcut
* enforce https when bound to non-loopback ip
* initial authentication token implementation
* background color from theme
* initial web client theme config
* basic token generation ui
* refactor set config message creation
* also set body background
* allow editing scrollback for plugins too
* set scrollback to 0
* properly parse colors in config
* generate token from plugin
* nice login modals
* initial token management screen
* implement token authentication
* refactor(share): token management screen
* style(fmt): rustfmt
* fix(plugin): some minor bugs
* refactor(share): main screen
* refactor(share): token screen
* refactor(share): main
* refactor(share): ui components
* fix(responsiveness): properly send usage_width to the render function
* fix cli commands and add some verbosity
* add support for settings ansi and selection colors
* add cursor and cursor accent
* basic web client tests
* fix tests
* refactor: web client
* use session tokens for authentication
* improve modals
* move shutdown to ipc
* refactor: ipc logic
* serialize theme config for web client
* update tests
* refactor: move some stuff around to prepare for config hot reload
* config live reloading for the web clients
* change remember-me UI wording
* improve xterm.js link handling
* make sure terminal is focused on mousemove
* remove deprecated sharing indication from compact-bar
* gate deps and functionality behind the web_server_compatibility feature
* feat(build): add --no-web flag in all the places
* fix some other build flows
* add new assets
* update CI for no-web (untested)
* make more dependencies optional
* update axum-extra
* add web client configuration options
* gracefully close connections on server exit
* tests for graceful connection closing
* handle client-side reconnect when server is down
* fix: make sure ipc bus folder exists before starting
* add commands to manage login tokens from the cli
* style(fmt): rustfmt
* some cleanups
* fix(ux): allow alt-right-click on the web client without opening the context menu
* fix: prevent attaching to welcome screen
* fix: reload config issues
* fix long socket path on macos
* normalize config conversion and fix color gap in browser
* revoke session_token cookie if it is not valid
* fix: visual bug with multiple clients in extremely small screen sizes
* fix: only include rusqlite for the web server capability builds
* update e2e snapshots
* refactor(web): client side js
* some cleanups
* moar cleanups
* fix(tests): wait for server instead of using a fixed timeout
* debug CI
* fix(tests): use spawn_blocking for running the test web server
* fix(tests): wait for http rather than tcp port
* fix(tests): properly pass config path - hopefully this is the issue...
* success! bring back the rest of the tests
* attempt to fix the macos CI issue
* docs(changelog): add PR
---------
Co-authored-by: Thomas Linford <linford.t@gmail.com>
Diffstat (limited to 'zellij-utils/assets')
15 files changed, 301 insertions, 13 deletions
diff --git a/zellij-utils/assets/config/default.kdl b/zellij-utils/assets/config/default.kdl index 722d9eff..0ea6ca78 100644 --- a/zellij-utils/assets/config/default.kdl +++ b/zellij-utils/assets/config/default.kdl @@ -142,6 +142,13 @@ keybinds { }; SwitchToMode "Normal" } + bind "s" { + LaunchOrFocusPlugin "zellij:share" { + floating true + move_to_focused_tab true + }; + SwitchToMode "Normal" + } } tmux { bind "[" { SwitchToMode "Scroll"; } @@ -419,6 +426,70 @@ load_plugins { // // support_kitty_keyboard_protocol false +// Whether to make sure a local web server is running when a new Zellij session starts. +// This web server will allow creating new sessions and attaching to existing ones that have +// opted in to being shared in the browser. +// When enabled, navigate to http://127.0.0.1:8082 +// (Requires restart) +// +// Note: a local web server can still be manually started from within a Zellij session or from the CLI. +// If this is not desired, one can use a version of Zellij compiled without +// `web_server_capability` +// +// Possible values: +// - true +// - false +// Default: false +// +// web_server true + +// Whether to allow sessions started in the terminal to be shared through a local web server, assuming one is +// running (see the `web_server` option for more details). +// (Requires restart) +// +// Note: This is an administrative separation and not intended as a security measure. +// +// Possible values: +// - "on" (allow web sharing through the local web server if it +// is online) +// - "off" (do not allow web sharing unless sessions explicitly opt-in to it) +// - "disabled" (do not allow web sharing and do not permit sessions started in the terminal to opt-in to it) +// Default: "off" +// +// web_sharing "on" + +// The ip address the web server should listen on when it starts +// Default: "127.0.0.1" +// (Requires restart) +// +// web_server_ip "127.0.0.1" + + +// A path to a certificate file to be used when setting up the web client to serve the +// connection over HTTPs +// +// web_server_cert "/path/to/my/cert.pem" + +// A path to a key file to be used when setting up the web client to serve the +// connection over HTTPs +// +// web_server_key "/path/to/my/key.pem" + +// Whether to enforce https connections to the web server when it is bound to localhost +// (127.0.0.0/8) +// +// Note: https is ALWAYS enforced when bound to non-local interfaces +// +// Default: false +// +// enforce_https_for_localhost true + +// The port the web server should listen on when it starts +// Default: 8082 +// (Requires restart) +// +// web_server_port 8082 + // Whether to stack panes when resizing beyond a certain size // Default: true // @@ -433,3 +504,7 @@ load_plugins { // Default: true // // advanced_mouse_actions false + +web_client { + font "monospace" +} diff --git a/zellij-utils/assets/plugins/about.wasm b/zellij-utils/assets/plugins/about.wasm Binary files differindex 86891995..a7a4063f 100755 --- a/zellij-utils/assets/plugins/about.wasm +++ b/zellij-utils/assets/plugins/about.wasm diff --git a/zellij-utils/assets/plugins/compact-bar.wasm b/zellij-utils/assets/plugins/compact-bar.wasm Binary files differindex 8d6e7105..a6991294 100755 --- a/zellij-utils/assets/plugins/compact-bar.wasm +++ b/zellij-utils/assets/plugins/compact-bar.wasm diff --git a/zellij-utils/assets/plugins/configuration.wasm b/zellij-utils/assets/plugins/configuration.wasm Binary files differindex bcf8110a..c98f2aae 100755 --- a/zellij-utils/assets/plugins/configuration.wasm +++ b/zellij-utils/assets/plugins/configuration.wasm diff --git a/zellij-utils/assets/plugins/fixture-plugin-for-tests.wasm b/zellij-utils/assets/plugins/fixture-plugin-for-tests.wasm Binary files differindex a3a0171c..e12f7622 100755 --- a/zellij-utils/assets/plugins/fixture-plugin-for-tests.wasm +++ b/zellij-utils/assets/plugins/fixture-plugin-for-tests.wasm diff --git a/zellij-utils/assets/plugins/multiple-select.wasm b/zellij-utils/assets/plugins/multiple-select.wasm Binary files differindex 011a4ecc..894f4ce9 100755 --- a/zellij-utils/assets/plugins/multiple-select.wasm +++ b/zellij-utils/assets/plugins/multiple-select.wasm diff --git a/zellij-utils/assets/plugins/plugin-manager.wasm b/zellij-utils/assets/plugins/plugin-manager.wasm Binary files differindex a440cc97..4efb3c3a 100755 --- a/zellij-utils/assets/plugins/plugin-manager.wasm +++ b/zellij-utils/assets/plugins/plugin-manager.wasm diff --git a/zellij-utils/assets/plugins/session-manager.wasm b/zellij-utils/assets/plugins/session-manager.wasm Binary files differindex 503fc235..b3b00fa7 100755 --- a/zellij-utils/assets/plugins/session-manager.wasm +++ b/zellij-utils/assets/plugins/session-manager.wasm diff --git a/zellij-utils/assets/plugins/share.wasm b/zellij-utils/assets/plugins/share.wasm Binary files differnew file mode 100755 index 00000000..2fc17d8d --- /dev/null +++ b/zellij-utils/assets/plugins/share.wasm diff --git a/zellij-utils/assets/plugins/status-bar.wasm b/zellij-utils/assets/plugins/status-bar.wasm Binary files differindex 061528d7..b93f30f3 100755 --- a/zellij-utils/assets/plugins/status-bar.wasm +++ b/zellij-utils/assets/plugins/status-bar.wasm diff --git a/zellij-utils/assets/plugins/strider.wasm b/zellij-utils/assets/plugins/strider.wasm Binary files differindex 8a5cb6b6..ea2d4878 100755 --- a/zellij-utils/assets/plugins/strider.wasm +++ b/zellij-utils/assets/plugins/strider.wasm diff --git a/zellij-utils/assets/plugins/tab-bar.wasm b/zellij-utils/assets/plugins/tab-bar.wasm Binary files differindex 8a5820cc..6b24f066 100755 --- a/zellij-utils/assets/plugins/tab-bar.wasm +++ b/zellij-utils/assets/plugins/tab-bar.wasm diff --git a/zellij-utils/assets/prost/api.event.rs b/zellij-utils/assets/prost/api.event.rs index 7ec6e076..a1240693 100644 --- a/zellij-utils/assets/prost/api.event.rs +++ b/zellij-utils/assets/prost/api.event.rs @@ -9,7 +9,7 @@ pub struct EventNameList { pub struct Event { #[prost(enumeration="EventType", tag="1")] pub name: i32, - #[prost(oneof="event::Payload", tags="2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27")] + #[prost(oneof="event::Payload", tags="2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29")] pub payload: ::core::option::Option<event::Payload>, } /// Nested message and enum types in `Event`. @@ -68,17 +68,35 @@ pub mod event { #[prost(message, tag="26")] PastedTextPayload(super::PastedTextPayload), #[prost(message, tag="27")] + WebServerStatusPayload(super::WebServerStatusPayload), + #[prost(message, tag="28")] + FailedToStartWebServerPayload(super::FailedToStartWebServerPayload), + #[prost(message, tag="29")] InterceptedKeyPayload(super::super::key::Key), } } #[allow(clippy::derive_partial_eq_without_eq)] #[derive(Clone, PartialEq, ::prost::Message)] +pub struct FailedToStartWebServerPayload { + #[prost(string, tag="1")] + pub error: ::prost::alloc::string::String, +} +#[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, ::prost::Message)] pub struct PastedTextPayload { #[prost(string, tag="1")] pub pasted_text: ::prost::alloc::string::String, } #[allow(clippy::derive_partial_eq_without_eq)] #[derive(Clone, PartialEq, ::prost::Message)] +pub struct WebServerStatusPayload { + #[prost(enumeration="WebServerStatusIndication", tag="1")] + pub web_server_status_indication: i32, + #[prost(string, optional, tag="2")] + pub payload: ::core::option::Option<::prost::alloc::string::String>, +} +#[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, ::prost::Message)] pub struct FailedToChangeHostFolderPayload { #[prost(string, optional, tag="1")] pub error_message: ::core::option::Option<::prost::alloc::string::String>, @@ -313,7 +331,11 @@ pub struct SessionManifest { pub available_layouts: ::prost::alloc::vec::Vec<LayoutInfo>, #[prost(message, repeated, tag="7")] pub plugins: ::prost::alloc::vec::Vec<PluginInfo>, - #[prost(message, repeated, tag="8")] + #[prost(bool, tag="8")] + pub web_clients_allowed: bool, + #[prost(uint32, tag="9")] + pub web_client_count: u32, + #[prost(message, repeated, tag="10")] pub tab_history: ::prost::alloc::vec::Vec<ClientTabHistory>, } #[allow(clippy::derive_partial_eq_without_eq)] @@ -464,7 +486,19 @@ pub struct ModeUpdatePayload { #[prost(string, optional, tag="8")] pub shell: ::core::option::Option<::prost::alloc::string::String>, #[prost(bool, optional, tag="9")] + pub web_clients_allowed: ::core::option::Option<bool>, + #[prost(enumeration="WebSharing", optional, tag="10")] + pub web_sharing: ::core::option::Option<i32>, + #[prost(bool, optional, tag="11")] pub currently_marking_pane_group: ::core::option::Option<bool>, + #[prost(bool, optional, tag="12")] + pub is_web_client: ::core::option::Option<bool>, + #[prost(string, optional, tag="13")] + pub web_server_ip: ::core::option::Option<::prost::alloc::string::String>, + #[prost(uint32, optional, tag="14")] + pub web_server_port: ::core::option::Option<u32>, + #[prost(bool, optional, tag="15")] + pub web_server_capability: ::core::option::Option<bool>, } #[allow(clippy::derive_partial_eq_without_eq)] #[derive(Clone, PartialEq, ::prost::Message)] @@ -531,8 +565,10 @@ pub enum EventType { FailedToChangeHostFolder = 28, PastedText = 29, ConfigWasWrittenToDisk = 30, - BeforeClose = 31, - InterceptedKeyPress = 32, + WebServerStatus = 31, + BeforeClose = 32, + FailedToStartWebServer = 34, + InterceptedKeyPress = 35, } impl EventType { /// String value of the enum field names used in the ProtoBuf definition. @@ -572,7 +608,9 @@ impl EventType { EventType::FailedToChangeHostFolder => "FailedToChangeHostFolder", EventType::PastedText => "PastedText", EventType::ConfigWasWrittenToDisk => "ConfigWasWrittenToDisk", + EventType::WebServerStatus => "WebServerStatus", EventType::BeforeClose => "BeforeClose", + EventType::FailedToStartWebServer => "FailedToStartWebServer", EventType::InterceptedKeyPress => "InterceptedKeyPress", } } @@ -610,12 +648,43 @@ impl EventType { "FailedToChangeHostFolder" => Some(Self::FailedToChangeHostFolder), "PastedText" => Some(Self::PastedText), "ConfigWasWrittenToDisk" => Some(Self::ConfigWasWrittenToDisk), + "WebServerStatus" => Some(Self::WebServerStatus), "BeforeClose" => Some(Self::BeforeClose), + "FailedToStartWebServer" => Some(Self::FailedToStartWebServer), "InterceptedKeyPress" => Some(Self::InterceptedKeyPress), _ => None, } } } +#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord, ::prost::Enumeration)] +#[repr(i32)] +pub enum WebServerStatusIndication { + Online = 0, + Offline = 1, + DifferentVersion = 2, +} +impl WebServerStatusIndication { + /// String value of the enum field names used in the ProtoBuf definition. + /// + /// The values are not transformed in any way and thus are considered stable + /// (if the ProtoBuf definition does not change) and safe for programmatic use. + pub fn as_str_name(&self) -> &'static str { + match self { + WebServerStatusIndication::Online => "Online", + WebServerStatusIndication::Offline => "Offline", + WebServerStatusIndication::DifferentVersion => "DifferentVersion", + } + } + /// Creates an enum from field names used in the ProtoBuf definition. + pub fn from_str_name(value: &str) -> ::core::option::Option<Self> { + match value { + "Online" => Some(Self::Online), + "Offline" => Some(Self::Offline), + "DifferentVersion" => Some(Self::DifferentVersion), + _ => None, + } + } +} /// duplicate of plugin_command.PaneType because protobuffs don't like recursive imports #[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord, ::prost::Enumeration)] #[repr(i32)] @@ -713,3 +782,32 @@ impl MouseEventName { } } } +#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord, ::prost::Enumeration)] +#[repr(i32)] +pub enum WebSharing { + On = 0, + Off = 1, + Disabled = 2, +} +impl WebSharing { + /// String value of the enum field names used in the ProtoBuf definition. + /// + /// The values are not transformed in any way and thus are considered stable + /// (if the ProtoBuf definition does not change) and safe for programmatic use. + pub fn as_str_name(&self) -> &'static str { + match self { + WebSharing::On => "On", + WebSharing::Off => "Off", + WebSharing::Disabled => "Disabled", + } + } + /// Creates an enum from field names used in the ProtoBuf definition. + pub fn from_str_name(value: &str) -> ::core::option::Option<Self> { + match value { + "On" => Some(Self::On), + "Off" => Some(Self::Off), + "Disabled" => Some(Self::Disabled), + _ => None, + } + } +} diff --git a/zellij-utils/assets/prost/api.plugin_command.rs b/zellij-utils/assets/prost/api.plugin_command.rs index b6b3d96d..52a8cd42 100644 --- a/zellij-utils/assets/prost/api.plugin_command.rs +++ b/zellij-utils/assets/prost/api.plugin_command.rs @@ -3,7 +3,7 @@ pub struct PluginCommand { #[prost(enumeration="CommandName", tag="1")] pub name: i32, - #[prost(oneof="plugin_command::Payload", tags="2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106")] + #[prost(oneof="plugin_command::Payload", tags="2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110")] pub payload: ::core::option::Option<plugin_command::Payload>, } /// Nested message and enum types in `PluginCommand`. @@ -203,10 +203,44 @@ pub mod plugin_command { FloatMultiplePanesPayload(super::FloatMultiplePanesPayload), #[prost(message, tag="106")] EmbedMultiplePanesPayload(super::EmbedMultiplePanesPayload), + #[prost(message, tag="107")] + SetSelfMouseSelectionSupportPayload(super::SetSelfMouseSelectionSupportPayload), + #[prost(message, tag="108")] + GenerateWebLoginTokenPayload(super::GenerateWebLoginTokenPayload), + #[prost(message, tag="109")] + RevokeWebLoginTokenPayload(super::RevokeWebLoginTokenPayload), + #[prost(message, tag="110")] + RenameWebLoginTokenPayload(super::RenameWebLoginTokenPayload), } } #[allow(clippy::derive_partial_eq_without_eq)] #[derive(Clone, PartialEq, ::prost::Message)] +pub struct RenameWebLoginTokenPayload { + #[prost(string, tag="1")] + pub old_name: ::prost::alloc::string::String, + #[prost(string, tag="2")] + pub new_name: ::prost::alloc::string::String, +} +#[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, ::prost::Message)] +pub struct RevokeWebLoginTokenPayload { + #[prost(string, tag="1")] + pub token_label: ::prost::alloc::string::String, +} +#[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, ::prost::Message)] +pub struct GenerateWebLoginTokenPayload { + #[prost(string, optional, tag="1")] + pub token_label: ::core::option::Option<::prost::alloc::string::String>, +} +#[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, ::prost::Message)] +pub struct SetSelfMouseSelectionSupportPayload { + #[prost(bool, tag="1")] + pub support_mouse_selection: bool, +} +#[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, ::prost::Message)] pub struct EmbedMultiplePanesPayload { #[prost(message, repeated, tag="1")] pub pane_ids: ::prost::alloc::vec::Vec<PaneId>, @@ -786,6 +820,51 @@ pub struct FixedOrPercentValue { #[prost(uint32, tag="2")] pub value: u32, } +#[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, ::prost::Message)] +pub struct CreateTokenResponse { + #[prost(string, optional, tag="1")] + pub token: ::core::option::Option<::prost::alloc::string::String>, + #[prost(string, optional, tag="2")] + pub token_label: ::core::option::Option<::prost::alloc::string::String>, + #[prost(string, optional, tag="3")] + pub error: ::core::option::Option<::prost::alloc::string::String>, +} +#[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, ::prost::Message)] +pub struct RevokeTokenResponse { + #[prost(bool, tag="1")] + pub successfully_revoked: bool, + #[prost(string, optional, tag="2")] + pub error: ::core::option::Option<::prost::alloc::string::String>, +} +#[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, ::prost::Message)] +pub struct ListTokensResponse { + /// tokens/creation_times should be synchronized + #[prost(string, repeated, tag="1")] + pub tokens: ::prost::alloc::vec::Vec<::prost::alloc::string::String>, + #[prost(string, repeated, tag="2")] + pub creation_times: ::prost::alloc::vec::Vec<::prost::alloc::string::String>, + #[prost(string, optional, tag="3")] + pub error: ::core::option::Option<::prost::alloc::string::String>, +} +#[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, ::prost::Message)] +pub struct RevokeAllWebTokensResponse { + #[prost(bool, tag="1")] + pub successfully_revoked: bool, + #[prost(string, optional, tag="2")] + pub error: ::core::option::Option<::prost::alloc::string::String>, +} +#[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, ::prost::Message)] +pub struct RenameWebTokenResponse { + #[prost(bool, tag="1")] + pub successfully_renamed: bool, + #[prost(string, optional, tag="2")] + pub error: ::core::option::Option<::prost::alloc::string::String>, +} #[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord, ::prost::Enumeration)] #[repr(i32)] pub enum CommandName { @@ -916,13 +995,24 @@ pub enum CommandName { OpenFileNearPlugin = 124, OpenFileFloatingNearPlugin = 125, OpenFileInPlaceOfPlugin = 126, - GroupAndUngroupPanes = 127, - HighlightAndUnhighlightPanes = 128, - CloseMultiplePanes = 129, - FloatMultiplePanes = 130, - EmbedMultiplePanes = 131, - InterceptKeyPresses = 132, - ClearKeyPressesIntercepts = 133, + StartWebServer = 127, + GroupAndUngroupPanes = 128, + HighlightAndUnhighlightPanes = 129, + CloseMultiplePanes = 130, + FloatMultiplePanes = 131, + EmbedMultiplePanes = 132, + ShareCurrentSession = 133, + StopSharingCurrentSession = 134, + StopWebServer = 135, + QueryWebServerStatus = 136, + SetSelfMouseSelectionSupport = 137, + GenerateWebLoginToken = 138, + RevokeWebLoginToken = 139, + ListWebLoginTokens = 140, + RevokeAllWebLoginTokens = 141, + RenameWebLoginToken = 142, + InterceptKeyPresses = 143, + ClearKeyPressesIntercepts = 144, } impl CommandName { /// String value of the enum field names used in the ProtoBuf definition. @@ -1058,11 +1148,22 @@ impl CommandName { CommandName::OpenFileNearPlugin => "OpenFileNearPlugin", CommandName::OpenFileFloatingNearPlugin => "OpenFileFloatingNearPlugin", CommandName::OpenFileInPlaceOfPlugin => "OpenFileInPlaceOfPlugin", + CommandName::StartWebServer => "StartWebServer", CommandName::GroupAndUngroupPanes => "GroupAndUngroupPanes", CommandName::HighlightAndUnhighlightPanes => "HighlightAndUnhighlightPanes", CommandName::CloseMultiplePanes => "CloseMultiplePanes", CommandName::FloatMultiplePanes => "FloatMultiplePanes", CommandName::EmbedMultiplePanes => "EmbedMultiplePanes", + CommandName::ShareCurrentSession => "ShareCurrentSession", + CommandName::StopSharingCurrentSession => "StopSharingCurrentSession", + CommandName::StopWebServer => "StopWebServer", + CommandName::QueryWebServerStatus => "QueryWebServerStatus", + CommandName::SetSelfMouseSelectionSupport => "SetSelfMouseSelectionSupport", + CommandName::GenerateWebLoginToken => "GenerateWebLoginToken", + CommandName::RevokeWebLoginToken => "RevokeWebLoginToken", + CommandName::ListWebLoginTokens => "ListWebLoginTokens", + CommandName::RevokeAllWebLoginTokens => "RevokeAllWebLoginTokens", + CommandName::RenameWebLoginToken => "RenameWebLoginToken", CommandName::InterceptKeyPresses => "InterceptKeyPresses", CommandName::ClearKeyPressesIntercepts => "ClearKeyPressesIntercepts", } @@ -1197,11 +1298,22 @@ impl CommandName { "OpenFileNearPlugin" => Some(Self::OpenFileNearPlugin), "OpenFileFloatingNearPlugin" => Some(Self::OpenFileFloatingNearPlugin), "OpenFileInPlaceOfPlugin" => Some(Self::OpenFileInPlaceOfPlugin), + "StartWebServer" => Some(Self::StartWebServer), "GroupAndUngroupPanes" => Some(Self::GroupAndUngroupPanes), "HighlightAndUnhighlightPanes" => Some(Self::HighlightAndUnhighlightPanes), "CloseMultiplePanes" => Some(Self::CloseMultiplePanes), "FloatMultiplePanes" => Some(Self::FloatMultiplePanes), "EmbedMultiplePanes" => Some(Self::EmbedMultiplePanes), + "ShareCurrentSession" => Some(Self::ShareCurrentSession), + "StopSharingCurrentSession" => Some(Self::StopSharingCurrentSession), + "StopWebServer" => Some(Self::StopWebServer), + "QueryWebServerStatus" => Some(Self::QueryWebServerStatus), + "SetSelfMouseSelectionSupport" => Some(Self::SetSelfMouseSelectionSupport), + "GenerateWebLoginToken" => Some(Self::GenerateWebLoginToken), + "RevokeWebLoginToken" => Some(Self::RevokeWebLoginToken), + "ListWebLoginTokens" => Some(Self::ListWebLoginTokens), + "RevokeAllWebLoginTokens" => Some(Self::RevokeAllWebLoginTokens), + "RenameWebLoginToken" => Some(Self::RenameWebLoginToken), "InterceptKeyPresses" => Some(Self::InterceptKeyPresses), "ClearKeyPressesIntercepts" => Some(Self::ClearKeyPressesIntercepts), _ => None, diff --git a/zellij-utils/assets/prost/api.plugin_permission.rs b/zellij-utils/assets/prost/api.plugin_permission.rs index 4e837373..44d0330a 100644 --- a/zellij-utils/assets/prost/api.plugin_permission.rs +++ b/zellij-utils/assets/prost/api.plugin_permission.rs @@ -12,7 +12,8 @@ pub enum PermissionType { MessageAndLaunchOtherPlugins = 8, Reconfigure = 9, FullHdAccess = 10, - InterceptInput = 11, + StartWebServer = 11, + InterceptInput = 12, } impl PermissionType { /// String value of the enum field names used in the ProtoBuf definition. @@ -32,6 +33,7 @@ impl PermissionType { PermissionType::MessageAndLaunchOtherPlugins => "MessageAndLaunchOtherPlugins", PermissionType::Reconfigure => "Reconfigure", PermissionType::FullHdAccess => "FullHdAccess", + PermissionType::StartWebServer => "StartWebServer", PermissionType::InterceptInput => "InterceptInput", } } @@ -49,6 +51,7 @@ impl PermissionType { "MessageAndLaunchOtherPlugins" => Some(Self::MessageAndLaunchOtherPlugins), "Reconfigure" => Some(Self::Reconfigure), "FullHdAccess" => Some(Self::FullHdAccess), + "StartWebServer" => Some(Self::StartWebServer), "InterceptInput" => Some(Self::InterceptInput), _ => None, } |
