Documentation
¶
Index ¶
- Constants
- func ApplyDataAliases(cmd *cli.Command, bodyMap map[string]any)
- func CloseFileUploads(value any) error
- func ConfigureMTLS(ctx context.Context, cmd *cli.Command) (context.Context, error)
- func ConfigureRootFlags(root *cli.Command)
- func DefaultOptions(cmd *cli.Command, version string, middlewares ...option.Middleware) []option.RequestOption
- func EmbedFiles(obj any, embedStyle FileEmbedStyle, stdin *OnceStdinReader) (any, error)
- func EmbedRequestFiles(command *cli.Command, value any, area string, style FileEmbedStyle, ...) (any, error)
- func EncodeOptions(cmd *cli.Command, contents requestflag.RequestContents, ...) (options []option.RequestOption, err error)
- func FlagOptions(cmd *cli.Command, nestedFormat apiquery.NestedQueryFormat, ...) (options []option.RequestOption, err error)
- func Headers(cmd *cli.Command) (http.Header, error)
- func IsStdinPath(s string) bool
- func IsUTF8TextFile(content []byte) bool
- func MTLSClientFlags() []cli.Flag
- func MultipartRequestOptions(bodyMap map[string]any, encodingFormat apiform.FormFormat, ...) ([]option.RequestOption, error)
- func NewMTLSHTTPClient(certFile, keyFile, baseURL string) (*http.Client, error)
- func NewRequestHeaderFlag() cli.Flag
- func NextCommandOptions(root *cli.Command) (args []string, omit bool)
- func ProtectStdinValue(value any) any
- func ReadMultipartScalar(ctx context.Context, name string, value any) (any, any, error)
- func ReadPipedInput(cmd *cli.Command, stdin io.Reader, contents *requestflag.RequestContents, ...) (bool, error)
- func ResolveStreamingInput(command *cli.Command, body []byte) error
- func ResolveStreamingValue(command *cli.Command, streaming bool) error
- func StdinConsumers(contents requestflag.RequestContents, reserved bool) (int, error)
- func ValidateBaseURL(value, source string) error
- func WrapFileInputValues(cmd *cli.Command, contents *requestflag.RequestContents, ...) error
- type BodyContentType
- type EncodingHooks
- type FileEmbedStyle
- type FileInputSource
- type FilePathValue
- type FileUpload
- type HeaderFlag
- type InputFileError
- type InputFileReader
- type MTLSClientFlag
- type MultipartScalarError
- type OnceStdinReader
- type PreparationHooks
- type RootRequestFlag
- type StdinSecurity
- type UntrustedStdinValue
Constants ¶
const ( MTLSClientCertFileFlag = "mtls-client-cert-file" MTLSClientCertFileEnv = "OPENAI_MTLS_CLIENT_CERT_FILE" MTLSClientKeyFileFlag = "mtls-client-key-file" MTLSClientKeyFileEnv = "OPENAI_MTLS_CLIENT_KEY_FILE" MTLSHTTPClientMetadata = "mtls-http-client" )
const BaseURLHTTPSRequired = " must use HTTPS, except for localhost or a loopback IP address"
const BaseURLHostRequired = " must be an absolute HTTP(S) URL with a valid host"
const UntrustedStdinEnv = "OPENAI_UNTRUSTED_STDIN"
UntrustedStdinEnv selects literal interpretation of piped request values.
Variables ¶
This section is empty.
Functions ¶
func ApplyDataAliases ¶
ApplyDataAliases rewrites keys in a body map based on flag `DataAliases` metadata. For top-level flags, `{alias: value}` becomes `{canonical: value}`. For inner flags (those registered under an outer flag via WithInnerFlags), the alias translation is also applied to the nested map under the outer flag's body path, so values like `--parent '{"alias": val}'` resolve to the canonical inner field name.
func CloseFileUploads ¶
CloseFileUploads closes every source owned by a FileUpload, including values nested inside maps and arrays. Other io.ReadClosers (notably stdin wrappers) are intentionally left alone because this code does not own them.
func ConfigureMTLS ¶
ConfigureMTLS stores the root command's configured mTLS client for request consumers.
func ConfigureRootFlags ¶
ConfigureRootFlags makes only root request configuration inheritable. Endpoint request flags retain their local scope, including a body --project.
func DefaultOptions ¶
func DefaultOptions(cmd *cli.Command, version string, middlewares ...option.Middleware) []option.RequestOption
DefaultOptions builds shared client configuration around caller-supplied middleware. Middleware order stays between CLI metadata and explicit request overrides.
func EmbedFiles ¶
func EmbedFiles(obj any, embedStyle FileEmbedStyle, stdin *OnceStdinReader) (any, error)
EmbedFiles expands trusted file references and preserves borrowed stdin ownership.
func EmbedRequestFiles ¶
func EmbedRequestFiles(command *cli.Command, value any, area string, style FileEmbedStyle, stdin *OnceStdinReader) (any, error)
EmbedRequestFiles expands references with declared request-option provenance.
func EncodeOptions ¶
func EncodeOptions( cmd *cli.Command, contents requestflag.RequestContents, nestedFormat apiquery.NestedQueryFormat, arrayFormat apiquery.ArrayQueryFormat, bodyType BodyContentType, hooks EncodingHooks, ) (options []option.RequestOption, err error)
EncodeOptions serializes already-expanded query, header, and body values. Explicit literal headers are appended by the caller after these options. On success, a multipart body owns its uploads. Until then, the caller retains responsibility for closing uploads, including failures from feature hooks.
func FlagOptions ¶
func FlagOptions( cmd *cli.Command, nestedFormat apiquery.NestedQueryFormat, arrayFormat apiquery.ArrayQueryFormat, bodyType BodyContentType, ignoreStdin bool, stdin io.Reader, hooks PreparationHooks, ) (options []option.RequestOption, err error)
FlagOptions prepares request options from flags and borrowed stdin. Stdin classification retains the process stdin probe even when a workflow supplies a cancellation-aware reader. ignoreStdin reserves stdin for a binary body. Feature callbacks run at the same preflight, credential, expansion, and encoding points as ordinary request preparation, before upload ownership transfers.
func IsStdinPath ¶
IsStdinPath recognizes the supported aliases for standard input.
func IsUTF8TextFile ¶
IsUTF8TextFile reports whether content has a supported text MIME type and valid UTF-8.
func MTLSClientFlags ¶
MTLSClientFlags returns certificate and key flags with their existing source rules.
func MultipartRequestOptions ¶
func MultipartRequestOptions( bodyMap map[string]any, encodingFormat apiform.FormFormat, observeBody ...func(io.Closer), ) ([]option.RequestOption, error)
MultipartRequestOptions keeps scalar-only forms buffered and replayable. Forms containing an upload stream exactly once: the SDK retry loop is disabled because the CLI cannot promise that a reader will produce identical bytes a second time. Regular files retain an exact Content-Length; unknown sources use chunked transfer encoding.
func NewMTLSHTTPClient ¶
NewMTLSHTTPClient constructs an endpoint-bound mTLS client using default transport settings.
func NewRequestHeaderFlag ¶
NewRequestHeaderFlag returns the repeatable, global flag for literal HTTP headers.
func NextCommandOptions ¶
NextCommandOptions reproduces request selection without copying credentials into terminal output.
func ProtectStdinValue ¶
ProtectStdinValue marks ordinary string leaves while preserving other values.
func ReadMultipartScalar ¶ added in v1.39.1
ReadMultipartScalar inspects scalar @file references that arrive as upload readers after shared trusted-input expansion. Inspect their contents once and replay the exact original bytes, retaining multipart filenames/content types. Source image and mask readers never enter this path and stay streamed. There is no new file-size limit.
func ReadPipedInput ¶
func ReadPipedInput(cmd *cli.Command, stdin io.Reader, contents *requestflag.RequestContents, stdinSecurity *StdinSecurity, acceptBody bool) (bool, error)
ReadPipedInput reads borrowed request input and merges it with explicit flags. The caller decides whether stdin is eligible for whole-request input. The result reports whether nonempty input consumed stdin, including input that failed to parse. Bodyless requests still apply path, query, and header values without merging a body.
func ResolveStreamingInput ¶
ResolveStreamingInput aligns generated dispatch with the final JSON without rewriting request bytes.
func ResolveStreamingValue ¶
ResolveStreamingValue applies a resolved Boolean without overriding explicit stream flags.
func StdinConsumers ¶
func StdinConsumers(contents requestflag.RequestContents, reserved bool) (int, error)
StdinConsumers counts the values that file embedding consumes, without reading them. Count effective values so a replaced scalar flag does not claim stdin twice.
func ValidateBaseURL ¶
ValidateBaseURL permits cleartext HTTP only for explicit local development endpoints. Use the same URL parser as the SDK, and never resolve DNS names to grant an exception.
func WrapFileInputValues ¶
func WrapFileInputValues(cmd *cli.Command, contents *requestflag.RequestContents, stdinSecurity *StdinSecurity) error
WrapFileInputValues replaces string values for FileInput flags (type: string, format: binary) with FilePathValue sentinel values. embedFilesValue recognizes FilePathValue and reads the file contents directly, so the user doesn't need to type the "@" prefix. Untrusted piped file paths are rejected before any file can be opened.
Types ¶
type BodyContentType ¶
type BodyContentType int
const ( EmptyBody BodyContentType = iota MultipartFormEncoded ApplicationJSON ApplicationOctetStream )
type EncodingHooks ¶
type EncodingHooks struct {
PrepareMultipart func(map[string]any) error
ObserveMultipart func(io.Closer)
ValidateJSON func([]byte) error
ObserveJSON []func([]byte)
}
EncodingHooks retains feature validation and observation at their existing serialization points without making shared request code depend on features.
type FileEmbedStyle ¶
type FileEmbedStyle int
FileEmbedStyle selects text substitution or streaming upload expansion.
const ( // EmbedText reads referenced files fully into memory and substitutes the file's contents back into the // value as a string. Binary files are base64-encoded. Used for JSON request bodies and for headers and // query parameters, where the file contents need to be serialized inline. EmbedText FileEmbedStyle = iota // EmbedIOReader replaces file references with an io.Reader that streams the file's contents. Used for // `multipart/form-data` and `application/octet-stream` request bodies, where files are uploaded as binary // parts rather than embedded into a text value. EmbedIOReader )
type FileInputSource ¶
type FileInputSource struct {
Option string
// contains filtered or unexported fields
}
FileInputSource follows declared request fields through file expansion. It never retains argument values or infers an option from a file path.
func (FileInputSource) Failure ¶
func (s FileInputSource) Failure(operation string, err error) error
Failure preserves the original cause and its declared option, without wrapping a clean EOF.
func (FileInputSource) OpenUpload ¶
func (s FileInputSource) OpenUpload(path string) (FileUpload, error)
OpenUpload opens an owned upload with option metadata on open, read, and close failures.
type FilePathValue ¶
type FilePathValue string
FilePathValue is a string wrapper that marks a value as a file path whose contents should be read and embedded in the request. A FilePathValue is always interpreted as a file path without needing the "@" prefix.
type FileUpload ¶
type FileUpload struct {
io.Reader // apiform checks for reader and reads its contents during encode
FileName string
MediaType string
Size int64
KnownSize bool
}
FileUpload wraps an io.Reader with filename and content-type metadata for use as a multipart form part. The apiform encoder detects the Filename and ContentType methods and uses them to populate the Content-Disposition filename and the Content-Type header on the part. The upload owns its Reader; KnownSize distinguishes an exact byte count from an unknown-length source.
func OpenFileUpload ¶
func OpenFileUpload(path string) (FileUpload, error)
OpenFileUpload opens path once. Ordinary files retain their exact stat size so the request can stream with Content-Length. Virtual and unknown-length files remain single-shot streams with chunked transfer encoding.
func (FileUpload) Close ¶
func (f FileUpload) Close() error
func (FileUpload) ContentType ¶
func (f FileUpload) ContentType() string
func (FileUpload) Filename ¶
func (f FileUpload) Filename() string
type HeaderFlag ¶
type HeaderFlag struct {
requestflag.Flag[[]string]
}
HeaderFlag is the root-owned repeatable flag for literal request headers.
func (*HeaderFlag) IsLocal ¶
func (*HeaderFlag) IsLocal() bool
type InputFileError ¶
type InputFileError struct {
Option, Operation string
// contains filtered or unexported fields
}
InputFileError retains the actual failure and only a declared option name. Its cause remains available through errors.Is, errors.As, and joined errors.
func (*InputFileError) Error ¶
func (e *InputFileError) Error() string
func (*InputFileError) Unwrap ¶
func (e *InputFileError) Unwrap() error
type InputFileReader ¶
type InputFileReader struct {
io.Reader
Source FileInputSource
}
InputFileReader annotates read and close failures with a declared option.
func (*InputFileReader) Close ¶
func (r *InputFileReader) Close() error
type MTLSClientFlag ¶
type MTLSClientFlag struct {
cli.StringFlag
// contains filtered or unexported fields
}
MTLSClientFlag permits one explicit value, independently of an environment default. The embedded PostParse applies sources without consuming the explicit allowance.
func (*MTLSClientFlag) CLIStringFlag ¶
func (f *MTLSClientFlag) CLIStringFlag() *cli.StringFlag
CLIStringFlag exposes metadata without changing parsing or source ownership.
func (*MTLSClientFlag) PreParse ¶
func (f *MTLSClientFlag) PreParse() error
func (*MTLSClientFlag) Set ¶
func (f *MTLSClientFlag) Set(name, value string) error
type MultipartScalarError ¶ added in v1.39.1
type MultipartScalarError struct {
// contains filtered or unexported fields
}
MultipartScalarError retains a scalar read failure behind its declared flag name.
func (*MultipartScalarError) Error ¶ added in v1.39.1
func (e *MultipartScalarError) Error() string
func (*MultipartScalarError) Unwrap ¶ added in v1.39.1
func (e *MultipartScalarError) Unwrap() error
type OnceStdinReader ¶
OnceStdinReader wraps an io.Reader that can only be consumed once, used to ensure stdin is read by at most one parameter (or only for a body root parameter or only for YAML parameter input). If FailureReason is set, stdin is unavailable and Take() returns an error explaining why.
func (*OnceStdinReader) ReadAll ¶
func (o *OnceStdinReader) ReadAll() ([]byte, error)
ReadAll claims stdin and reads its contents without closing the borrowed reader.
type PreparationHooks ¶
type PreparationHooks struct {
PreflightMultipart func(map[string]any) error
ValidateCredentials func() error
// ResolvedJSONOptions inspects finalized inputs before JSON observers run.
// Literal headers retain precedence over every returned request option.
ResolvedJSONOptions func(map[string]any, http.Header, []byte) []option.RequestOption
// EmbedMultipart owns partial-result cleanup on failure. On success, shared
// preparation takes responsibility for the returned uploads until encoding.
EmbedMultipart func(map[string]any, *OnceStdinReader) (map[string]any, error)
Encoding EncodingHooks
}
PreparationHooks keeps feature validation and multipart specialization with assembly while shared request code owns input precedence and upload cleanup.
type RootRequestFlag ¶
type RootRequestFlag struct {
*requestflag.Flag[string]
}
RootRequestFlag preserves request metadata while sharing root options with subcommands.
func (*RootRequestFlag) IsLocal ¶
func (*RootRequestFlag) IsLocal() bool
func (*RootRequestFlag) RequestFlag ¶
func (f *RootRequestFlag) RequestFlag() *requestflag.Flag[string]
RequestFlag exposes the existing metadata for help decoration and redaction.
type StdinSecurity ¶
type StdinSecurity struct {
// contains filtered or unexported fields
}
StdinSecurity tracks the origin of piped values for one request preparation.
func NewStdinSecurity ¶
func NewStdinSecurity() (*StdinSecurity, error)
NewStdinSecurity reads the untrusted-stdin setting for this request.
func (*StdinSecurity) Enabled ¶
func (s *StdinSecurity) Enabled() bool
Enabled reports whether piped values require literal interpretation.
func (*StdinSecurity) ProtectFlagValues ¶
func (s *StdinSecurity) ProtectFlagValues(contents *requestflag.RequestContents)
ProtectFlagValues preserves recorded values as literals during file expansion.
func (*StdinSecurity) RecordBodyFlags ¶
func (s *StdinSecurity) RecordBodyFlags(cmd *cli.Command, data map[string]any)
RecordBodyFlags records unset body flags represented in piped data.
func (*StdinSecurity) RecordFlag ¶
func (s *StdinSecurity) RecordFlag(flag cli.Flag)
RecordFlag records a flag populated from piped input.
type UntrustedStdinValue ¶
type UntrustedStdinValue string
UntrustedStdinValue preserves a string's origin until the shared file expansion boundary, where its contents are always interpreted literally.
Source Files
¶
- default_options.go
- encoding.go
- file_expand.go
- file_source.go
- flag_options.go
- headers.go
- input_values.go
- mtls.go
- mtls_client_flag.go
- mtls_configuration.go
- multipart_body.go
- multipart_file.go
- multipart_scalar.go
- next_command.go
- piped_input.go
- root_flags.go
- stdin_consumers.go
- stdin_policy.go
- stdin_reader.go
- streaming_input.go