diff --git a/server/Makefile b/server/Makefile index 6e0f7c65..4130a3f0 100644 --- a/server/Makefile +++ b/server/Makefile @@ -24,8 +24,6 @@ oapi-generate: $(OAPI_CODEGEN) $(OAPI_CODEGEN) -config ./oapi-codegen.yaml ./openapi-3.0.yaml @echo "Fixing oapi-codegen issue https://github.com/oapi-codegen/oapi-codegen/issues/1764..." go run ./scripts/oapi/patch_sse_methods -file ./lib/oapi/oapi.go -expected-replacements 3 - @echo "Patching strict JSON optional bodies (io.EOF) + response omitempty tags..." - go run ./scripts/oapi/patch_strict_optional_json -file ./lib/oapi/oapi.go go fmt ./lib/oapi/oapi.go go mod tidy diff --git a/server/lib/oapi/oapi.go b/server/lib/oapi/oapi.go index 73a3b4bb..c5467ec0 100644 --- a/server/lib/oapi/oapi.go +++ b/server/lib/oapi/oapi.go @@ -1,6 +1,6 @@ // Package oapi provides primitives to interact with the openapi HTTP API. // -// Code generated by github.com/oapi-codegen/oapi-codegen/v2 version v2.5.1 DO NOT EDIT. +// Code generated by github.com/oapi-codegen/oapi-codegen/v2 version v2.6.0 DO NOT EDIT. package oapi import ( @@ -35,6 +35,24 @@ const ( ClickMouseRequestButtonRight ClickMouseRequestButton = "right" ) +// Valid indicates whether the value is a known member of the ClickMouseRequestButton enum. +func (e ClickMouseRequestButton) Valid() bool { + switch e { + case ClickMouseRequestButtonBack: + return true + case ClickMouseRequestButtonForward: + return true + case ClickMouseRequestButtonLeft: + return true + case ClickMouseRequestButtonMiddle: + return true + case ClickMouseRequestButtonRight: + return true + default: + return false + } +} + // Defines values for ClickMouseRequestClickType. const ( Click ClickMouseRequestClickType = "click" @@ -42,6 +60,20 @@ const ( Up ClickMouseRequestClickType = "up" ) +// Valid indicates whether the value is a known member of the ClickMouseRequestClickType enum. +func (e ClickMouseRequestClickType) Valid() bool { + switch e { + case Click: + return true + case Down: + return true + case Up: + return true + default: + return false + } +} + // Defines values for ComputerActionType. const ( ClickMouse ComputerActionType = "click_mouse" @@ -54,6 +86,30 @@ const ( TypeText ComputerActionType = "type_text" ) +// Valid indicates whether the value is a known member of the ComputerActionType enum. +func (e ComputerActionType) Valid() bool { + switch e { + case ClickMouse: + return true + case DragMouse: + return true + case MoveMouse: + return true + case PressKey: + return true + case Scroll: + return true + case SetCursor: + return true + case Sleep: + return true + case TypeText: + return true + default: + return false + } +} + // Defines values for DragMouseRequestButton. const ( DragMouseRequestButtonLeft DragMouseRequestButton = "left" @@ -61,6 +117,20 @@ const ( DragMouseRequestButtonRight DragMouseRequestButton = "right" ) +// Valid indicates whether the value is a known member of the DragMouseRequestButton enum. +func (e DragMouseRequestButton) Valid() bool { + switch e { + case DragMouseRequestButtonLeft: + return true + case DragMouseRequestButtonMiddle: + return true + case DragMouseRequestButtonRight: + return true + default: + return false + } +} + // Defines values for FileSystemEventType. const ( CREATE FileSystemEventType = "CREATE" @@ -69,6 +139,22 @@ const ( WRITE FileSystemEventType = "WRITE" ) +// Valid indicates whether the value is a known member of the FileSystemEventType enum. +func (e FileSystemEventType) Valid() bool { + switch e { + case CREATE: + return true + case DELETE: + return true + case RENAME: + return true + case WRITE: + return true + default: + return false + } +} + // Defines values for PatchDisplayRequestRefreshRate. const ( N10 PatchDisplayRequestRefreshRate = 10 @@ -77,6 +163,22 @@ const ( N60 PatchDisplayRequestRefreshRate = 60 ) +// Valid indicates whether the value is a known member of the PatchDisplayRequestRefreshRate enum. +func (e PatchDisplayRequestRefreshRate) Valid() bool { + switch e { + case N10: + return true + case N25: + return true + case N30: + return true + case N60: + return true + default: + return false + } +} + // Defines values for ProcessKillRequestSignal. const ( HUP ProcessKillRequestSignal = "HUP" @@ -85,23 +187,73 @@ const ( TERM ProcessKillRequestSignal = "TERM" ) +// Valid indicates whether the value is a known member of the ProcessKillRequestSignal enum. +func (e ProcessKillRequestSignal) Valid() bool { + switch e { + case HUP: + return true + case INT: + return true + case KILL: + return true + case TERM: + return true + default: + return false + } +} + // Defines values for ProcessStatusState. const ( Exited ProcessStatusState = "exited" Running ProcessStatusState = "running" ) +// Valid indicates whether the value is a known member of the ProcessStatusState enum. +func (e ProcessStatusState) Valid() bool { + switch e { + case Exited: + return true + case Running: + return true + default: + return false + } +} + // Defines values for ProcessStreamEventEvent. const ( Exit ProcessStreamEventEvent = "exit" ) +// Valid indicates whether the value is a known member of the ProcessStreamEventEvent enum. +func (e ProcessStreamEventEvent) Valid() bool { + switch e { + case Exit: + return true + default: + return false + } +} + // Defines values for ProcessStreamEventStream. const ( Stderr ProcessStreamEventStream = "stderr" Stdout ProcessStreamEventStream = "stdout" ) +// Valid indicates whether the value is a known member of the ProcessStreamEventStream enum. +func (e ProcessStreamEventStream) Valid() bool { + switch e { + case Stderr: + return true + case Stdout: + return true + default: + return false + } +} + // Defines values for DownloadDirZstdParamsCompressionLevel. const ( Best DownloadDirZstdParamsCompressionLevel = "best" @@ -110,12 +262,40 @@ const ( Fastest DownloadDirZstdParamsCompressionLevel = "fastest" ) +// Valid indicates whether the value is a known member of the DownloadDirZstdParamsCompressionLevel enum. +func (e DownloadDirZstdParamsCompressionLevel) Valid() bool { + switch e { + case Best: + return true + case Better: + return true + case Default: + return true + case Fastest: + return true + default: + return false + } +} + // Defines values for LogsStreamParamsSource. const ( Path LogsStreamParamsSource = "path" Supervisor LogsStreamParamsSource = "supervisor" ) +// Valid indicates whether the value is a known member of the LogsStreamParamsSource enum. +func (e LogsStreamParamsSource) Valid() bool { + switch e { + case Path: + return true + case Supervisor: + return true + default: + return false + } +} + // BatchComputerActionRequest A batch of computer actions to execute sequentially. type BatchComputerActionRequest struct { // Actions Ordered list of actions to execute. Execution stops on the first error. @@ -669,17 +849,18 @@ type TypeTextRequest struct { Delay *int `json:"delay,omitempty"` // Smooth Use human-like variable keystroke timing instead of a fixed delay. - // Defaults to true when omitted (same as moveMouse/dragMouse). Set false for - // xdotool typing with optional fixed delay (delay=0 is instant). When true, - // text is typed in word-sized chunks with variable intra-word delays and - // natural inter-word pauses. The delay field is ignored when smooth is true. + // Defaults to true (same as moveMouse/dragMouse). Set to false for + // xdotool typing with an optional fixed delay between keys (delay=0 is instant). + // When true, text is typed in word-sized chunks with variable intra-word delays + // and natural inter-word pauses. The delay field is ignored when smooth is true. Smooth *bool `json:"smooth,omitempty"` // Text Text to type on the host computer Text string `json:"text"` - // TypoChance Per-character typo injection rate, corrected with backspace. - // Default 0. Only applies when smooth is true (silently ignored when smooth is false). + // TypoChance Per-character typo injection rate; mistakes are corrected with backspace. + // Default 0. Only applies when smooth is true (silently ignored when + // smooth is false). TypoChance *float32 `json:"typo_chance,omitempty"` } @@ -2832,7 +3013,7 @@ func NewDownloadDirZipRequest(server string, params *DownloadDirZipParams) (*htt if params != nil { queryValues := queryURL.Query() - if queryFrag, err := runtime.StyleParamWithLocation("form", true, "path", runtime.ParamLocationQuery, params.Path); err != nil { + if queryFrag, err := runtime.StyleParamWithOptions("form", true, "path", params.Path, runtime.StyleParamOptions{ParamLocation: runtime.ParamLocationQuery, Type: "string", Format: ""}); err != nil { return nil, err } else if parsed, err := url.ParseQuery(queryFrag); err != nil { return nil, err @@ -2877,7 +3058,7 @@ func NewDownloadDirZstdRequest(server string, params *DownloadDirZstdParams) (*h if params != nil { queryValues := queryURL.Query() - if queryFrag, err := runtime.StyleParamWithLocation("form", true, "path", runtime.ParamLocationQuery, params.Path); err != nil { + if queryFrag, err := runtime.StyleParamWithOptions("form", true, "path", params.Path, runtime.StyleParamOptions{ParamLocation: runtime.ParamLocationQuery, Type: "string", Format: ""}); err != nil { return nil, err } else if parsed, err := url.ParseQuery(queryFrag); err != nil { return nil, err @@ -2891,7 +3072,7 @@ func NewDownloadDirZstdRequest(server string, params *DownloadDirZstdParams) (*h if params.CompressionLevel != nil { - if queryFrag, err := runtime.StyleParamWithLocation("form", true, "compression_level", runtime.ParamLocationQuery, *params.CompressionLevel); err != nil { + if queryFrag, err := runtime.StyleParamWithOptions("form", true, "compression_level", *params.CompressionLevel, runtime.StyleParamOptions{ParamLocation: runtime.ParamLocationQuery, Type: "string", Format: ""}); err != nil { return nil, err } else if parsed, err := url.ParseQuery(queryFrag); err != nil { return nil, err @@ -2938,7 +3119,7 @@ func NewFileInfoRequest(server string, params *FileInfoParams) (*http.Request, e if params != nil { queryValues := queryURL.Query() - if queryFrag, err := runtime.StyleParamWithLocation("form", true, "path", runtime.ParamLocationQuery, params.Path); err != nil { + if queryFrag, err := runtime.StyleParamWithOptions("form", true, "path", params.Path, runtime.StyleParamOptions{ParamLocation: runtime.ParamLocationQuery, Type: "string", Format: ""}); err != nil { return nil, err } else if parsed, err := url.ParseQuery(queryFrag); err != nil { return nil, err @@ -2983,7 +3164,7 @@ func NewListFilesRequest(server string, params *ListFilesParams) (*http.Request, if params != nil { queryValues := queryURL.Query() - if queryFrag, err := runtime.StyleParamWithLocation("form", true, "path", runtime.ParamLocationQuery, params.Path); err != nil { + if queryFrag, err := runtime.StyleParamWithOptions("form", true, "path", params.Path, runtime.StyleParamOptions{ParamLocation: runtime.ParamLocationQuery, Type: "string", Format: ""}); err != nil { return nil, err } else if parsed, err := url.ParseQuery(queryFrag); err != nil { return nil, err @@ -3068,7 +3249,7 @@ func NewReadFileRequest(server string, params *ReadFileParams) (*http.Request, e if params != nil { queryValues := queryURL.Query() - if queryFrag, err := runtime.StyleParamWithLocation("form", true, "path", runtime.ParamLocationQuery, params.Path); err != nil { + if queryFrag, err := runtime.StyleParamWithOptions("form", true, "path", params.Path, runtime.StyleParamOptions{ParamLocation: runtime.ParamLocationQuery, Type: "string", Format: ""}); err != nil { return nil, err } else if parsed, err := url.ParseQuery(queryFrag); err != nil { return nil, err @@ -3264,7 +3445,7 @@ func NewStopFsWatchRequest(server string, watchId string) (*http.Request, error) var pathParam0 string - pathParam0, err = runtime.StyleParamWithLocation("simple", false, "watch_id", runtime.ParamLocationPath, watchId) + pathParam0, err = runtime.StyleParamWithOptions("simple", false, "watch_id", watchId, runtime.StyleParamOptions{ParamLocation: runtime.ParamLocationPath, Type: "string", Format: ""}) if err != nil { return nil, err } @@ -3298,7 +3479,7 @@ func NewStreamFsEventsRequest(server string, watchId string) (*http.Request, err var pathParam0 string - pathParam0, err = runtime.StyleParamWithLocation("simple", false, "watch_id", runtime.ParamLocationPath, watchId) + pathParam0, err = runtime.StyleParamWithOptions("simple", false, "watch_id", watchId, runtime.StyleParamOptions{ParamLocation: runtime.ParamLocationPath, Type: "string", Format: ""}) if err != nil { return nil, err } @@ -3348,7 +3529,7 @@ func NewWriteFileRequestWithBody(server string, params *WriteFileParams, content if params != nil { queryValues := queryURL.Query() - if queryFrag, err := runtime.StyleParamWithLocation("form", true, "path", runtime.ParamLocationQuery, params.Path); err != nil { + if queryFrag, err := runtime.StyleParamWithOptions("form", true, "path", params.Path, runtime.StyleParamOptions{ParamLocation: runtime.ParamLocationQuery, Type: "string", Format: ""}); err != nil { return nil, err } else if parsed, err := url.ParseQuery(queryFrag); err != nil { return nil, err @@ -3362,7 +3543,7 @@ func NewWriteFileRequestWithBody(server string, params *WriteFileParams, content if params.Mode != nil { - if queryFrag, err := runtime.StyleParamWithLocation("form", true, "mode", runtime.ParamLocationQuery, *params.Mode); err != nil { + if queryFrag, err := runtime.StyleParamWithOptions("form", true, "mode", *params.Mode, runtime.StyleParamOptions{ParamLocation: runtime.ParamLocationQuery, Type: "string", Format: ""}); err != nil { return nil, err } else if parsed, err := url.ParseQuery(queryFrag); err != nil { return nil, err @@ -3411,7 +3592,7 @@ func NewLogsStreamRequest(server string, params *LogsStreamParams) (*http.Reques if params != nil { queryValues := queryURL.Query() - if queryFrag, err := runtime.StyleParamWithLocation("form", true, "source", runtime.ParamLocationQuery, params.Source); err != nil { + if queryFrag, err := runtime.StyleParamWithOptions("form", true, "source", params.Source, runtime.StyleParamOptions{ParamLocation: runtime.ParamLocationQuery, Type: "string", Format: ""}); err != nil { return nil, err } else if parsed, err := url.ParseQuery(queryFrag); err != nil { return nil, err @@ -3425,7 +3606,7 @@ func NewLogsStreamRequest(server string, params *LogsStreamParams) (*http.Reques if params.Follow != nil { - if queryFrag, err := runtime.StyleParamWithLocation("form", true, "follow", runtime.ParamLocationQuery, *params.Follow); err != nil { + if queryFrag, err := runtime.StyleParamWithOptions("form", true, "follow", *params.Follow, runtime.StyleParamOptions{ParamLocation: runtime.ParamLocationQuery, Type: "boolean", Format: ""}); err != nil { return nil, err } else if parsed, err := url.ParseQuery(queryFrag); err != nil { return nil, err @@ -3441,7 +3622,7 @@ func NewLogsStreamRequest(server string, params *LogsStreamParams) (*http.Reques if params.Path != nil { - if queryFrag, err := runtime.StyleParamWithLocation("form", true, "path", runtime.ParamLocationQuery, *params.Path); err != nil { + if queryFrag, err := runtime.StyleParamWithOptions("form", true, "path", *params.Path, runtime.StyleParamOptions{ParamLocation: runtime.ParamLocationQuery, Type: "string", Format: ""}); err != nil { return nil, err } else if parsed, err := url.ParseQuery(queryFrag); err != nil { return nil, err @@ -3457,7 +3638,7 @@ func NewLogsStreamRequest(server string, params *LogsStreamParams) (*http.Reques if params.SupervisorProcess != nil { - if queryFrag, err := runtime.StyleParamWithLocation("form", true, "supervisor_process", runtime.ParamLocationQuery, *params.SupervisorProcess); err != nil { + if queryFrag, err := runtime.StyleParamWithOptions("form", true, "supervisor_process", *params.SupervisorProcess, runtime.StyleParamOptions{ParamLocation: runtime.ParamLocationQuery, Type: "string", Format: ""}); err != nil { return nil, err } else if parsed, err := url.ParseQuery(queryFrag); err != nil { return nil, err @@ -3619,7 +3800,7 @@ func NewProcessKillRequestWithBody(server string, processId openapi_types.UUID, var pathParam0 string - pathParam0, err = runtime.StyleParamWithLocation("simple", false, "process_id", runtime.ParamLocationPath, processId) + pathParam0, err = runtime.StyleParamWithOptions("simple", false, "process_id", processId, runtime.StyleParamOptions{ParamLocation: runtime.ParamLocationPath, Type: "string", Format: "uuid"}) if err != nil { return nil, err } @@ -3666,7 +3847,7 @@ func NewProcessResizeRequestWithBody(server string, processId openapi_types.UUID var pathParam0 string - pathParam0, err = runtime.StyleParamWithLocation("simple", false, "process_id", runtime.ParamLocationPath, processId) + pathParam0, err = runtime.StyleParamWithOptions("simple", false, "process_id", processId, runtime.StyleParamOptions{ParamLocation: runtime.ParamLocationPath, Type: "string", Format: "uuid"}) if err != nil { return nil, err } @@ -3702,7 +3883,7 @@ func NewProcessStatusRequest(server string, processId openapi_types.UUID) (*http var pathParam0 string - pathParam0, err = runtime.StyleParamWithLocation("simple", false, "process_id", runtime.ParamLocationPath, processId) + pathParam0, err = runtime.StyleParamWithOptions("simple", false, "process_id", processId, runtime.StyleParamOptions{ParamLocation: runtime.ParamLocationPath, Type: "string", Format: "uuid"}) if err != nil { return nil, err } @@ -3747,7 +3928,7 @@ func NewProcessStdinRequestWithBody(server string, processId openapi_types.UUID, var pathParam0 string - pathParam0, err = runtime.StyleParamWithLocation("simple", false, "process_id", runtime.ParamLocationPath, processId) + pathParam0, err = runtime.StyleParamWithOptions("simple", false, "process_id", processId, runtime.StyleParamOptions{ParamLocation: runtime.ParamLocationPath, Type: "string", Format: "uuid"}) if err != nil { return nil, err } @@ -3783,7 +3964,7 @@ func NewProcessStdoutStreamRequest(server string, processId openapi_types.UUID) var pathParam0 string - pathParam0, err = runtime.StyleParamWithLocation("simple", false, "process_id", runtime.ParamLocationPath, processId) + pathParam0, err = runtime.StyleParamWithOptions("simple", false, "process_id", processId, runtime.StyleParamOptions{ParamLocation: runtime.ParamLocationPath, Type: "string", Format: "uuid"}) if err != nil { return nil, err } @@ -3875,7 +4056,7 @@ func NewDownloadRecordingRequest(server string, params *DownloadRecordingParams) if params.Id != nil { - if queryFrag, err := runtime.StyleParamWithLocation("form", true, "id", runtime.ParamLocationQuery, *params.Id); err != nil { + if queryFrag, err := runtime.StyleParamWithOptions("form", true, "id", *params.Id, runtime.StyleParamOptions{ParamLocation: runtime.ParamLocationQuery, Type: "string", Format: ""}); err != nil { return nil, err } else if parsed, err := url.ParseQuery(queryFrag); err != nil { return nil, err @@ -8541,7 +8722,7 @@ func (siw *ServerInterfaceWrapper) DownloadDirZip(w http.ResponseWriter, r *http return } - err = runtime.BindQueryParameter("form", true, true, "path", r.URL.Query(), ¶ms.Path) + err = runtime.BindQueryParameterWithOptions("form", true, true, "path", r.URL.Query(), ¶ms.Path, runtime.BindQueryParameterOptions{Type: "string", Format: ""}) if err != nil { siw.ErrorHandlerFunc(w, r, &InvalidParamFormatError{ParamName: "path", Err: err}) return @@ -8575,7 +8756,7 @@ func (siw *ServerInterfaceWrapper) DownloadDirZstd(w http.ResponseWriter, r *htt return } - err = runtime.BindQueryParameter("form", true, true, "path", r.URL.Query(), ¶ms.Path) + err = runtime.BindQueryParameterWithOptions("form", true, true, "path", r.URL.Query(), ¶ms.Path, runtime.BindQueryParameterOptions{Type: "string", Format: ""}) if err != nil { siw.ErrorHandlerFunc(w, r, &InvalidParamFormatError{ParamName: "path", Err: err}) return @@ -8583,7 +8764,7 @@ func (siw *ServerInterfaceWrapper) DownloadDirZstd(w http.ResponseWriter, r *htt // ------------- Optional query parameter "compression_level" ------------- - err = runtime.BindQueryParameter("form", true, false, "compression_level", r.URL.Query(), ¶ms.CompressionLevel) + err = runtime.BindQueryParameterWithOptions("form", true, false, "compression_level", r.URL.Query(), ¶ms.CompressionLevel, runtime.BindQueryParameterOptions{Type: "string", Format: ""}) if err != nil { siw.ErrorHandlerFunc(w, r, &InvalidParamFormatError{ParamName: "compression_level", Err: err}) return @@ -8617,7 +8798,7 @@ func (siw *ServerInterfaceWrapper) FileInfo(w http.ResponseWriter, r *http.Reque return } - err = runtime.BindQueryParameter("form", true, true, "path", r.URL.Query(), ¶ms.Path) + err = runtime.BindQueryParameterWithOptions("form", true, true, "path", r.URL.Query(), ¶ms.Path, runtime.BindQueryParameterOptions{Type: "string", Format: ""}) if err != nil { siw.ErrorHandlerFunc(w, r, &InvalidParamFormatError{ParamName: "path", Err: err}) return @@ -8651,7 +8832,7 @@ func (siw *ServerInterfaceWrapper) ListFiles(w http.ResponseWriter, r *http.Requ return } - err = runtime.BindQueryParameter("form", true, true, "path", r.URL.Query(), ¶ms.Path) + err = runtime.BindQueryParameterWithOptions("form", true, true, "path", r.URL.Query(), ¶ms.Path, runtime.BindQueryParameterOptions{Type: "string", Format: ""}) if err != nil { siw.ErrorHandlerFunc(w, r, &InvalidParamFormatError{ParamName: "path", Err: err}) return @@ -8699,7 +8880,7 @@ func (siw *ServerInterfaceWrapper) ReadFile(w http.ResponseWriter, r *http.Reque return } - err = runtime.BindQueryParameter("form", true, true, "path", r.URL.Query(), ¶ms.Path) + err = runtime.BindQueryParameterWithOptions("form", true, true, "path", r.URL.Query(), ¶ms.Path, runtime.BindQueryParameterOptions{Type: "string", Format: ""}) if err != nil { siw.ErrorHandlerFunc(w, r, &InvalidParamFormatError{ParamName: "path", Err: err}) return @@ -8794,7 +8975,7 @@ func (siw *ServerInterfaceWrapper) StopFsWatch(w http.ResponseWriter, r *http.Re // ------------- Path parameter "watch_id" ------------- var watchId string - err = runtime.BindStyledParameterWithOptions("simple", "watch_id", chi.URLParam(r, "watch_id"), &watchId, runtime.BindStyledParameterOptions{ParamLocation: runtime.ParamLocationPath, Explode: false, Required: true}) + err = runtime.BindStyledParameterWithOptions("simple", "watch_id", chi.URLParam(r, "watch_id"), &watchId, runtime.BindStyledParameterOptions{ParamLocation: runtime.ParamLocationPath, Explode: false, Required: true, Type: "string", Format: ""}) if err != nil { siw.ErrorHandlerFunc(w, r, &InvalidParamFormatError{ParamName: "watch_id", Err: err}) return @@ -8819,7 +9000,7 @@ func (siw *ServerInterfaceWrapper) StreamFsEvents(w http.ResponseWriter, r *http // ------------- Path parameter "watch_id" ------------- var watchId string - err = runtime.BindStyledParameterWithOptions("simple", "watch_id", chi.URLParam(r, "watch_id"), &watchId, runtime.BindStyledParameterOptions{ParamLocation: runtime.ParamLocationPath, Explode: false, Required: true}) + err = runtime.BindStyledParameterWithOptions("simple", "watch_id", chi.URLParam(r, "watch_id"), &watchId, runtime.BindStyledParameterOptions{ParamLocation: runtime.ParamLocationPath, Explode: false, Required: true, Type: "string", Format: ""}) if err != nil { siw.ErrorHandlerFunc(w, r, &InvalidParamFormatError{ParamName: "watch_id", Err: err}) return @@ -8853,7 +9034,7 @@ func (siw *ServerInterfaceWrapper) WriteFile(w http.ResponseWriter, r *http.Requ return } - err = runtime.BindQueryParameter("form", true, true, "path", r.URL.Query(), ¶ms.Path) + err = runtime.BindQueryParameterWithOptions("form", true, true, "path", r.URL.Query(), ¶ms.Path, runtime.BindQueryParameterOptions{Type: "string", Format: ""}) if err != nil { siw.ErrorHandlerFunc(w, r, &InvalidParamFormatError{ParamName: "path", Err: err}) return @@ -8861,7 +9042,7 @@ func (siw *ServerInterfaceWrapper) WriteFile(w http.ResponseWriter, r *http.Requ // ------------- Optional query parameter "mode" ------------- - err = runtime.BindQueryParameter("form", true, false, "mode", r.URL.Query(), ¶ms.Mode) + err = runtime.BindQueryParameterWithOptions("form", true, false, "mode", r.URL.Query(), ¶ms.Mode, runtime.BindQueryParameterOptions{Type: "string", Format: ""}) if err != nil { siw.ErrorHandlerFunc(w, r, &InvalidParamFormatError{ParamName: "mode", Err: err}) return @@ -8895,7 +9076,7 @@ func (siw *ServerInterfaceWrapper) LogsStream(w http.ResponseWriter, r *http.Req return } - err = runtime.BindQueryParameter("form", true, true, "source", r.URL.Query(), ¶ms.Source) + err = runtime.BindQueryParameterWithOptions("form", true, true, "source", r.URL.Query(), ¶ms.Source, runtime.BindQueryParameterOptions{Type: "string", Format: ""}) if err != nil { siw.ErrorHandlerFunc(w, r, &InvalidParamFormatError{ParamName: "source", Err: err}) return @@ -8903,7 +9084,7 @@ func (siw *ServerInterfaceWrapper) LogsStream(w http.ResponseWriter, r *http.Req // ------------- Optional query parameter "follow" ------------- - err = runtime.BindQueryParameter("form", true, false, "follow", r.URL.Query(), ¶ms.Follow) + err = runtime.BindQueryParameterWithOptions("form", true, false, "follow", r.URL.Query(), ¶ms.Follow, runtime.BindQueryParameterOptions{Type: "boolean", Format: ""}) if err != nil { siw.ErrorHandlerFunc(w, r, &InvalidParamFormatError{ParamName: "follow", Err: err}) return @@ -8911,7 +9092,7 @@ func (siw *ServerInterfaceWrapper) LogsStream(w http.ResponseWriter, r *http.Req // ------------- Optional query parameter "path" ------------- - err = runtime.BindQueryParameter("form", true, false, "path", r.URL.Query(), ¶ms.Path) + err = runtime.BindQueryParameterWithOptions("form", true, false, "path", r.URL.Query(), ¶ms.Path, runtime.BindQueryParameterOptions{Type: "string", Format: ""}) if err != nil { siw.ErrorHandlerFunc(w, r, &InvalidParamFormatError{ParamName: "path", Err: err}) return @@ -8919,7 +9100,7 @@ func (siw *ServerInterfaceWrapper) LogsStream(w http.ResponseWriter, r *http.Req // ------------- Optional query parameter "supervisor_process" ------------- - err = runtime.BindQueryParameter("form", true, false, "supervisor_process", r.URL.Query(), ¶ms.SupervisorProcess) + err = runtime.BindQueryParameterWithOptions("form", true, false, "supervisor_process", r.URL.Query(), ¶ms.SupervisorProcess, runtime.BindQueryParameterOptions{Type: "string", Format: ""}) if err != nil { siw.ErrorHandlerFunc(w, r, &InvalidParamFormatError{ParamName: "supervisor_process", Err: err}) return @@ -8986,7 +9167,7 @@ func (siw *ServerInterfaceWrapper) ProcessKill(w http.ResponseWriter, r *http.Re // ------------- Path parameter "process_id" ------------- var processId openapi_types.UUID - err = runtime.BindStyledParameterWithOptions("simple", "process_id", chi.URLParam(r, "process_id"), &processId, runtime.BindStyledParameterOptions{ParamLocation: runtime.ParamLocationPath, Explode: false, Required: true}) + err = runtime.BindStyledParameterWithOptions("simple", "process_id", chi.URLParam(r, "process_id"), &processId, runtime.BindStyledParameterOptions{ParamLocation: runtime.ParamLocationPath, Explode: false, Required: true, Type: "string", Format: "uuid"}) if err != nil { siw.ErrorHandlerFunc(w, r, &InvalidParamFormatError{ParamName: "process_id", Err: err}) return @@ -9011,7 +9192,7 @@ func (siw *ServerInterfaceWrapper) ProcessResize(w http.ResponseWriter, r *http. // ------------- Path parameter "process_id" ------------- var processId openapi_types.UUID - err = runtime.BindStyledParameterWithOptions("simple", "process_id", chi.URLParam(r, "process_id"), &processId, runtime.BindStyledParameterOptions{ParamLocation: runtime.ParamLocationPath, Explode: false, Required: true}) + err = runtime.BindStyledParameterWithOptions("simple", "process_id", chi.URLParam(r, "process_id"), &processId, runtime.BindStyledParameterOptions{ParamLocation: runtime.ParamLocationPath, Explode: false, Required: true, Type: "string", Format: "uuid"}) if err != nil { siw.ErrorHandlerFunc(w, r, &InvalidParamFormatError{ParamName: "process_id", Err: err}) return @@ -9036,7 +9217,7 @@ func (siw *ServerInterfaceWrapper) ProcessStatus(w http.ResponseWriter, r *http. // ------------- Path parameter "process_id" ------------- var processId openapi_types.UUID - err = runtime.BindStyledParameterWithOptions("simple", "process_id", chi.URLParam(r, "process_id"), &processId, runtime.BindStyledParameterOptions{ParamLocation: runtime.ParamLocationPath, Explode: false, Required: true}) + err = runtime.BindStyledParameterWithOptions("simple", "process_id", chi.URLParam(r, "process_id"), &processId, runtime.BindStyledParameterOptions{ParamLocation: runtime.ParamLocationPath, Explode: false, Required: true, Type: "string", Format: "uuid"}) if err != nil { siw.ErrorHandlerFunc(w, r, &InvalidParamFormatError{ParamName: "process_id", Err: err}) return @@ -9061,7 +9242,7 @@ func (siw *ServerInterfaceWrapper) ProcessStdin(w http.ResponseWriter, r *http.R // ------------- Path parameter "process_id" ------------- var processId openapi_types.UUID - err = runtime.BindStyledParameterWithOptions("simple", "process_id", chi.URLParam(r, "process_id"), &processId, runtime.BindStyledParameterOptions{ParamLocation: runtime.ParamLocationPath, Explode: false, Required: true}) + err = runtime.BindStyledParameterWithOptions("simple", "process_id", chi.URLParam(r, "process_id"), &processId, runtime.BindStyledParameterOptions{ParamLocation: runtime.ParamLocationPath, Explode: false, Required: true, Type: "string", Format: "uuid"}) if err != nil { siw.ErrorHandlerFunc(w, r, &InvalidParamFormatError{ParamName: "process_id", Err: err}) return @@ -9086,7 +9267,7 @@ func (siw *ServerInterfaceWrapper) ProcessStdoutStream(w http.ResponseWriter, r // ------------- Path parameter "process_id" ------------- var processId openapi_types.UUID - err = runtime.BindStyledParameterWithOptions("simple", "process_id", chi.URLParam(r, "process_id"), &processId, runtime.BindStyledParameterOptions{ParamLocation: runtime.ParamLocationPath, Explode: false, Required: true}) + err = runtime.BindStyledParameterWithOptions("simple", "process_id", chi.URLParam(r, "process_id"), &processId, runtime.BindStyledParameterOptions{ParamLocation: runtime.ParamLocationPath, Explode: false, Required: true, Type: "string", Format: "uuid"}) if err != nil { siw.ErrorHandlerFunc(w, r, &InvalidParamFormatError{ParamName: "process_id", Err: err}) return @@ -9127,7 +9308,7 @@ func (siw *ServerInterfaceWrapper) DownloadRecording(w http.ResponseWriter, r *h // ------------- Optional query parameter "id" ------------- - err = runtime.BindQueryParameter("form", true, false, "id", r.URL.Query(), ¶ms.Id) + err = runtime.BindQueryParameterWithOptions("form", true, false, "id", r.URL.Query(), ¶ms.Id, runtime.BindQueryParameterOptions{Type: "string", Format: ""}) if err != nil { siw.ErrorHandlerFunc(w, r, &InvalidParamFormatError{ParamName: "id", Err: err}) return @@ -13025,158 +13206,159 @@ func (sh *strictHandler) StopRecording(w http.ResponseWriter, r *http.Request) { // Base64 encoded, gzipped, json marshaled Swagger object var swaggerSpec = []string{ - "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", + "/6IOz88DwgAA", } // GetSwagger returns the content of the embedded swagger specification file diff --git a/server/scripts/oapi/patch_strict_optional_json/main.go b/server/scripts/oapi/patch_strict_optional_json/main.go deleted file mode 100644 index 7ffe9201..00000000 --- a/server/scripts/oapi/patch_strict_optional_json/main.go +++ /dev/null @@ -1,151 +0,0 @@ -// Patch strict-handler JSON decode and response tags after oapi-codegen: -// 1) Allow empty request bodies (io.EOF) for optional-body JSON endpoints. -// 2) Restore omitempty on pointer JSON tags that affect response shape. -package main - -import ( - "flag" - "fmt" - "log" - "os" - "strings" -) - -func main() { - filePath := flag.String("file", "", "path to oapi.go to rewrite") - flag.Parse() - if *filePath == "" { - log.Fatal("usage: -file=") - } - path := *filePath - - data, err := os.ReadFile(path) - if err != nil { - log.Fatalf("read %s: %v", path, err) - } - s := string(data) - - s = ensureErrorsImport(s) - - replacements := []struct{ old, new string }{ - { - old: ` var body TakeScreenshotJSONRequestBody - if err := json.NewDecoder(r.Body).Decode(&body); err != nil { - sh.options.RequestErrorHandlerFunc(w, r, fmt.Errorf("can't decode JSON body: %w", err)) - return - } - request.Body = &body`, - new: ` var body TakeScreenshotJSONRequestBody - if err := json.NewDecoder(r.Body).Decode(&body); err != nil { - if !errors.Is(err, io.EOF) { - sh.options.RequestErrorHandlerFunc(w, r, fmt.Errorf("can't decode JSON body: %w", err)) - return - } - } else { - request.Body = &body - }`, - }, - { - old: ` var body DeleteRecordingJSONRequestBody - if err := json.NewDecoder(r.Body).Decode(&body); err != nil { - sh.options.RequestErrorHandlerFunc(w, r, fmt.Errorf("can't decode JSON body: %w", err)) - return - } - request.Body = &body`, - new: ` var body DeleteRecordingJSONRequestBody - if err := json.NewDecoder(r.Body).Decode(&body); err != nil { - if !errors.Is(err, io.EOF) { - sh.options.RequestErrorHandlerFunc(w, r, fmt.Errorf("can't decode JSON body: %w", err)) - return - } - } else { - request.Body = &body - }`, - }, - { - old: ` var body StartRecordingJSONRequestBody - if err := json.NewDecoder(r.Body).Decode(&body); err != nil { - sh.options.RequestErrorHandlerFunc(w, r, fmt.Errorf("can't decode JSON body: %w", err)) - return - } - request.Body = &body`, - new: ` var body StartRecordingJSONRequestBody - if err := json.NewDecoder(r.Body).Decode(&body); err != nil { - if !errors.Is(err, io.EOF) { - sh.options.RequestErrorHandlerFunc(w, r, fmt.Errorf("can't decode JSON body: %w", err)) - return - } - } else { - request.Body = &body - }`, - }, - { - old: ` var body StopRecordingJSONRequestBody - if err := json.NewDecoder(r.Body).Decode(&body); err != nil { - sh.options.RequestErrorHandlerFunc(w, r, fmt.Errorf("can't decode JSON body: %w", err)) - return - } - request.Body = &body`, - new: ` var body StopRecordingJSONRequestBody - if err := json.NewDecoder(r.Body).Decode(&body); err != nil { - if !errors.Is(err, io.EOF) { - sh.options.RequestErrorHandlerFunc(w, r, fmt.Errorf("can't decode JSON body: %w", err)) - return - } - } else { - request.Body = &body - }`, - }, - } - - for _, r := range replacements { - if !strings.Contains(s, r.old) { - log.Fatalf("expected block not found in %s (codegen output may have changed)", path) - } - count := strings.Count(s, r.old) - if count != 1 { - log.Fatalf("expected exactly 1 occurrence of a decode block, found %d", count) - } - s = strings.Replace(s, r.old, r.new, 1) - } - - tagFixesAll := []struct{ old, new string }{ - {`AsUser *string ` + "`json:\"as_user\"`", `AsUser *string ` + "`json:\"as_user,omitempty\"`"}, - {`Cwd *string ` + "`json:\"cwd\"`", `Cwd *string ` + "`json:\"cwd,omitempty\"`"}, - {`TimeoutSec *int ` + "`json:\"timeout_sec\"`", `TimeoutSec *int ` + "`json:\"timeout_sec,omitempty\"`"}, - } - for _, tf := range tagFixesAll { - if c := strings.Count(s, tf.old); c != 2 { - log.Fatalf("expected exactly 2 occurrences of tag %q, found %d", tf.old, c) - } - s = strings.ReplaceAll(s, tf.old, tf.new) - } - tagFixesOnce := []struct{ old, new string }{ - {`ExitCode *int ` + "`json:\"exit_code\"`", `ExitCode *int ` + "`json:\"exit_code,omitempty\"`"}, - {`FinishedAt *time.Time ` + "`json:\"finished_at\"`", `FinishedAt *time.Time ` + "`json:\"finished_at,omitempty\"`"}, - {`StartedAt *time.Time ` + "`json:\"started_at\"`", `StartedAt *time.Time ` + "`json:\"started_at,omitempty\"`"}, - } - for _, tf := range tagFixesOnce { - if c := strings.Count(s, tf.old); c != 1 { - log.Fatalf("expected exactly 1 occurrence of tag %q, found %d", tf.old, c) - } - s = strings.Replace(s, tf.old, tf.new, 1) - } - - if err := os.WriteFile(path, []byte(s), 0644); err != nil { - log.Fatalf("write %s: %v", path, err) - } - fmt.Printf("✓ strict optional JSON + omitempty patch applied to %s\n", path) -} - -func ensureErrorsImport(s string) string { - if strings.Contains(s, "\n\t\"errors\"\n") { - return s - } - // Insert after "context" - const anchor = "\t\"context\"\n" - if !strings.Contains(s, anchor) { - log.Fatal("could not find import anchor for errors package") - } - return strings.Replace(s, anchor, anchor+"\t\"errors\"\n", 1) -}