From 41d965095a64a8c02a25c2da4b76cf3d07159ec9 Mon Sep 17 00:00:00 2001 From: Taylor Thomas Date: Tue, 8 Oct 2024 15:55:13 -0600 Subject: [PATCH 1/2] chore(wit): Use versioned `wasi:logging` package Publishing a package that depends on unversioned wit isn't allowed and it requires monkey patching when doing locally anyway. What this does mean is that all go examples need to use the versioned logging interface once we release the new wash. I'll be adding support for that in the host so it really only affects people who currently have Go components. This is probably the easiest path forward for things unfortunately. Signed-off-by: Taylor Thomas --- gen/wasi/logging/logging/logging.wit.go | 6 +++--- wit/deps/wasi-logging-0.1.0-draft/package.wit | 2 +- wit/world.wit | 2 +- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/gen/wasi/logging/logging/logging.wit.go b/gen/wasi/logging/logging/logging.wit.go index 15b6e95..c9d2655 100644 --- a/gen/wasi/logging/logging/logging.wit.go +++ b/gen/wasi/logging/logging/logging.wit.go @@ -1,6 +1,6 @@ // Code generated by wit-bindgen-go. DO NOT EDIT. -// Package logging represents the imported interface "wasi:logging/logging". +// Package logging represents the imported interface "wasi:logging/logging@0.1.0-draft". // // WASI Logging is a logging API intended to let users emit log messages with // simple priority levels and context values. @@ -10,7 +10,7 @@ import ( "github.com/bytecodealliance/wasm-tools-go/cm" ) -// Level represents the enum "wasi:logging/logging#level". +// Level represents the enum "wasi:logging/logging@0.1.0-draft#level". // // A log level, describing a kind of message. // @@ -81,6 +81,6 @@ func Log(level Level, context string, message string) { return } -//go:wasmimport wasi:logging/logging log +//go:wasmimport wasi:logging/logging@0.1.0-draft log //go:noescape func wasmimport_Log(level0 uint32, context0 *uint8, context1 uint32, message0 *uint8, message1 uint32) diff --git a/wit/deps/wasi-logging-0.1.0-draft/package.wit b/wit/deps/wasi-logging-0.1.0-draft/package.wit index df4e8de..164cb5b 100644 --- a/wit/deps/wasi-logging-0.1.0-draft/package.wit +++ b/wit/deps/wasi-logging-0.1.0-draft/package.wit @@ -1,4 +1,4 @@ -package wasi:logging; +package wasi:logging@0.1.0-draft; /// WASI Logging is a logging API intended to let users emit log messages with /// simple priority levels and context values. diff --git a/wit/world.wit b/wit/world.wit index f881ff8..89b8e3c 100644 --- a/wit/world.wit +++ b/wit/world.wit @@ -10,7 +10,7 @@ world imports { include wasi:cli/imports@0.2.0; // wasi - import wasi:logging/logging; + import wasi:logging/logging@0.1.0-draft; import wasi:config/runtime@0.2.0-draft; import wasi:http/outgoing-handler@0.2.0; From 3ee476fe447c48398472552883cc255a45c6131f Mon Sep 17 00:00:00 2001 From: Taylor Thomas Date: Tue, 8 Oct 2024 17:01:45 -0600 Subject: [PATCH 2/2] chore(examples): Updates all examples with new deps We'll need to do a bit more cleanup (like removing the committed deps folder) once wash releases Signed-off-by: Taylor Thomas --- .../wasi/cli/environment/environment.wit.go | 14 - .../http-client/gen/wasi/cli/exit/exit.wit.go | 2 - .../cli/terminal-input/terminal-input.wit.go | 8 - .../terminal-output/terminal-output.wit.go | 8 - .../terminal-stderr/terminal-stderr.wit.go | 6 - .../cli/terminal-stdin/terminal-stdin.wit.go | 6 - .../terminal-stdout/terminal-stdout.wit.go | 6 - .../gen/wasi/config/runtime/runtime.wit.go | 19 - .../gen/wasi/logging/logging/logging.wit.go | 32 +- .../gen/wasmcloud/bus/lattice/lattice.wit.go | 8 - .../gen/wasmcloud/messaging/consumer/abi.go | 32 -- .../messaging/consumer/consumer.wit.go | 46 -- .../gen/wasmcloud/messaging/consumer/empty.s | 3 - .../wasmcloud/messaging/types/types.wit.go | 26 -- .../wasmcloud/secrets/reveal/reveal.wit.go | 3 - .../gen/wasmcloud/secrets/store/store.wit.go | 33 -- _examples/http-client/wasmcloud.toml | 3 +- _examples/http-client/wit/deps.lock | 49 --- _examples/http-client/wit/deps.toml | 1 - .../wit/deps/wasi-cli-0.2.0/package.wit | 127 +----- .../deps/wasi-config-0.2.0-draft/package.wit | 15 - .../wit/deps/wasi-io-0.2.0/package.wit | 12 +- .../deps/wasi-logging-0.1.0-draft/package.wit | 23 +- .../wit/deps/wasmcloud-bus-1.0.0/package.wit | 5 - .../wasmcloud-component-go-0.1.0/package.wit | 85 ++++ .../wit/deps/wasmcloud-component-go/world.wit | 26 -- .../wasmcloud-secrets-0.1.0-draft/package.wit | 27 -- _examples/http-client/wkg.lock | 21 + _examples/http-server/bindings.wadge_test.go | 2 +- .../wasi/cli/environment/environment.wit.go | 14 - .../http-server/gen/wasi/cli/exit/exit.wit.go | 2 - .../cli/terminal-input/terminal-input.wit.go | 8 - .../terminal-output/terminal-output.wit.go | 8 - .../terminal-stderr/terminal-stderr.wit.go | 6 - .../cli/terminal-stdin/terminal-stdin.wit.go | 6 - .../terminal-stdout/terminal-stdout.wit.go | 6 - .../gen/wasi/config/runtime/runtime.wit.go | 19 - .../gen/wasi/logging/logging/logging.wit.go | 32 +- .../gen/wasmcloud/bus/lattice/lattice.wit.go | 8 - .../gen/wasmcloud/messaging/consumer/abi.go | 32 -- .../messaging/consumer/consumer.wit.go | 46 -- .../gen/wasmcloud/messaging/consumer/empty.s | 3 - .../wasmcloud/messaging/types/types.wit.go | 26 -- .../wasmcloud/secrets/reveal/reveal.wit.go | 3 - .../gen/wasmcloud/secrets/store/store.wit.go | 33 -- _examples/http-server/wasmcloud.toml | 3 +- _examples/http-server/wit/deps.lock | 49 --- _examples/http-server/wit/deps.toml | 1 - .../wit/deps/wasi-cli-0.2.0/package.wit | 127 +----- .../deps/wasi-config-0.2.0-draft/package.wit | 15 - .../wit/deps/wasi-io-0.2.0/package.wit | 12 +- .../deps/wasi-logging-0.1.0-draft/package.wit | 23 +- .../wit/deps/wasmcloud-bus-1.0.0/package.wit | 5 - .../wasmcloud-component-go-0.1.0/package.wit | 85 ++++ .../wit/deps/wasmcloud-component-go/world.wit | 26 -- .../wasmcloud-secrets-0.1.0-draft/package.wit | 27 -- _examples/http-server/wkg.lock | 21 + .../wasi/cli/environment/environment.wit.go | 14 - .../invoke/gen/wasi/cli/exit/exit.wit.go | 2 - .../cli/terminal-input/terminal-input.wit.go | 8 - .../terminal-output/terminal-output.wit.go | 8 - .../terminal-stderr/terminal-stderr.wit.go | 6 - .../cli/terminal-stdin/terminal-stdin.wit.go | 6 - .../terminal-stdout/terminal-stdout.wit.go | 6 - .../gen/wasi/config/runtime/runtime.wit.go | 19 - .../outgoing-handler/outgoing-handler.wit.go | 14 - .../invoke/gen/wasi/http/types/types.wit.go | 404 ------------------ .../gen/wasi/logging/logging/logging.wit.go | 32 +- .../gen/wasmcloud/bus/lattice/lattice.wit.go | 8 - .../gen/wasmcloud/messaging/consumer/abi.go | 32 -- .../messaging/consumer/consumer.wit.go | 46 -- .../gen/wasmcloud/messaging/consumer/empty.s | 3 - .../wasmcloud/messaging/types/types.wit.go | 25 -- .../wasmcloud/secrets/reveal/reveal.wit.go | 3 - .../gen/wasmcloud/secrets/store/store.wit.go | 33 -- _examples/invoke/wadge_bindings_test.go | 2 +- _examples/invoke/wasmcloud.toml | 3 +- _examples/invoke/wit/deps.lock | 49 --- _examples/invoke/wit/deps.toml | 1 - .../wit/deps/wasi-cli-0.2.0/package.wit | 101 ----- .../deps/wasi-config-0.2.0-draft/package.wit | 15 - .../wit/deps/wasi-http-0.2.0/package.wit | 373 ---------------- .../invoke/wit/deps/wasi-io-0.2.0/package.wit | 12 +- .../deps/wasi-logging-0.1.0-draft/package.wit | 23 +- .../wit/deps/wasmcloud-bus-1.0.0/package.wit | 5 - .../wasmcloud-component-go-0.1.0/package.wit | 85 ++++ .../wit/deps/wasmcloud-component-go/world.wit | 26 -- .../wasmcloud-secrets-0.1.0-draft/package.wit | 27 -- _examples/invoke/wkg.lock | 12 + 89 files changed, 373 insertions(+), 2324 deletions(-) delete mode 100644 _examples/http-client/gen/wasmcloud/messaging/consumer/abi.go delete mode 100644 _examples/http-client/gen/wasmcloud/messaging/consumer/consumer.wit.go delete mode 100644 _examples/http-client/gen/wasmcloud/messaging/consumer/empty.s delete mode 100644 _examples/http-client/gen/wasmcloud/messaging/types/types.wit.go delete mode 100644 _examples/http-client/wit/deps.lock delete mode 100644 _examples/http-client/wit/deps.toml create mode 100644 _examples/http-client/wit/deps/wasmcloud-component-go-0.1.0/package.wit delete mode 100644 _examples/http-client/wit/deps/wasmcloud-component-go/world.wit create mode 100644 _examples/http-client/wkg.lock delete mode 100644 _examples/http-server/gen/wasmcloud/messaging/consumer/abi.go delete mode 100644 _examples/http-server/gen/wasmcloud/messaging/consumer/consumer.wit.go delete mode 100644 _examples/http-server/gen/wasmcloud/messaging/consumer/empty.s delete mode 100644 _examples/http-server/gen/wasmcloud/messaging/types/types.wit.go delete mode 100644 _examples/http-server/wit/deps.lock delete mode 100644 _examples/http-server/wit/deps.toml create mode 100644 _examples/http-server/wit/deps/wasmcloud-component-go-0.1.0/package.wit delete mode 100644 _examples/http-server/wit/deps/wasmcloud-component-go/world.wit create mode 100644 _examples/http-server/wkg.lock delete mode 100644 _examples/invoke/gen/wasmcloud/messaging/consumer/abi.go delete mode 100644 _examples/invoke/gen/wasmcloud/messaging/consumer/consumer.wit.go delete mode 100644 _examples/invoke/gen/wasmcloud/messaging/consumer/empty.s delete mode 100644 _examples/invoke/gen/wasmcloud/messaging/types/types.wit.go delete mode 100644 _examples/invoke/wit/deps.lock delete mode 100644 _examples/invoke/wit/deps.toml create mode 100644 _examples/invoke/wit/deps/wasmcloud-component-go-0.1.0/package.wit delete mode 100644 _examples/invoke/wit/deps/wasmcloud-component-go/world.wit create mode 100644 _examples/invoke/wkg.lock diff --git a/_examples/http-client/gen/wasi/cli/environment/environment.wit.go b/_examples/http-client/gen/wasi/cli/environment/environment.wit.go index 48e066d..d338d5f 100644 --- a/_examples/http-client/gen/wasi/cli/environment/environment.wit.go +++ b/_examples/http-client/gen/wasi/cli/environment/environment.wit.go @@ -9,15 +9,6 @@ import ( // GetEnvironment represents the imported function "get-environment". // -// Get the POSIX-style environment variables. -// -// Each environment variable is provided as a pair of string variable names -// and string value. -// -// Morally, these are a value import, but until value imports are available -// in the component model, this import function should return the same -// values each time it is called. -// // get-environment: func() -> list> // //go:nosplit @@ -32,8 +23,6 @@ func wasmimport_GetEnvironment(result *cm.List[[2]string]) // GetArguments represents the imported function "get-arguments". // -// Get the POSIX-style arguments to the program. -// // get-arguments: func() -> list // //go:nosplit @@ -48,9 +37,6 @@ func wasmimport_GetArguments(result *cm.List[string]) // InitialCWD represents the imported function "initial-cwd". // -// Return a path that programs should use as their initial current working -// directory, interpreting `.` as shorthand for this. -// // initial-cwd: func() -> option // //go:nosplit diff --git a/_examples/http-client/gen/wasi/cli/exit/exit.wit.go b/_examples/http-client/gen/wasi/cli/exit/exit.wit.go index 3fccd93..f101203 100644 --- a/_examples/http-client/gen/wasi/cli/exit/exit.wit.go +++ b/_examples/http-client/gen/wasi/cli/exit/exit.wit.go @@ -9,8 +9,6 @@ import ( // Exit represents the imported function "exit". // -// Exit the current instance and any linked instances. -// // exit: func(status: result) // //go:nosplit diff --git a/_examples/http-client/gen/wasi/cli/terminal-input/terminal-input.wit.go b/_examples/http-client/gen/wasi/cli/terminal-input/terminal-input.wit.go index e0114e0..e0c9780 100644 --- a/_examples/http-client/gen/wasi/cli/terminal-input/terminal-input.wit.go +++ b/_examples/http-client/gen/wasi/cli/terminal-input/terminal-input.wit.go @@ -1,12 +1,6 @@ // Code generated by wit-bindgen-go. DO NOT EDIT. // Package terminalinput represents the imported interface "wasi:cli/terminal-input@0.2.0". -// -// Terminal input. -// -// In the future, this may include functions for disabling echoing, -// disabling input buffering so that keyboard events are sent through -// immediately, querying supported features, and so on. package terminalinput import ( @@ -15,8 +9,6 @@ import ( // TerminalInput represents the imported resource "wasi:cli/terminal-input@0.2.0#terminal-input". // -// The input side of a terminal. -// // resource terminal-input type TerminalInput cm.Resource diff --git a/_examples/http-client/gen/wasi/cli/terminal-output/terminal-output.wit.go b/_examples/http-client/gen/wasi/cli/terminal-output/terminal-output.wit.go index a63b0e6..fc6492a 100644 --- a/_examples/http-client/gen/wasi/cli/terminal-output/terminal-output.wit.go +++ b/_examples/http-client/gen/wasi/cli/terminal-output/terminal-output.wit.go @@ -1,12 +1,6 @@ // Code generated by wit-bindgen-go. DO NOT EDIT. // Package terminaloutput represents the imported interface "wasi:cli/terminal-output@0.2.0". -// -// Terminal output. -// -// In the future, this may include functions for querying the terminal -// size, being notified of terminal size changes, querying supported -// features, and so on. package terminaloutput import ( @@ -15,8 +9,6 @@ import ( // TerminalOutput represents the imported resource "wasi:cli/terminal-output@0.2.0#terminal-output". // -// The output side of a terminal. -// // resource terminal-output type TerminalOutput cm.Resource diff --git a/_examples/http-client/gen/wasi/cli/terminal-stderr/terminal-stderr.wit.go b/_examples/http-client/gen/wasi/cli/terminal-stderr/terminal-stderr.wit.go index b295731..bb1a9ed 100644 --- a/_examples/http-client/gen/wasi/cli/terminal-stderr/terminal-stderr.wit.go +++ b/_examples/http-client/gen/wasi/cli/terminal-stderr/terminal-stderr.wit.go @@ -1,9 +1,6 @@ // Code generated by wit-bindgen-go. DO NOT EDIT. // Package terminalstderr represents the imported interface "wasi:cli/terminal-stderr@0.2.0". -// -// An interface providing an optional `terminal-output` for stderr as a -// link-time authority. package terminalstderr import ( @@ -13,9 +10,6 @@ import ( // GetTerminalStderr represents the imported function "get-terminal-stderr". // -// If stderr is connected to a terminal, return a `terminal-output` handle -// allowing further interaction with it. -// // get-terminal-stderr: func() -> option // //go:nosplit diff --git a/_examples/http-client/gen/wasi/cli/terminal-stdin/terminal-stdin.wit.go b/_examples/http-client/gen/wasi/cli/terminal-stdin/terminal-stdin.wit.go index fcbc8a1..e1ed5a4 100644 --- a/_examples/http-client/gen/wasi/cli/terminal-stdin/terminal-stdin.wit.go +++ b/_examples/http-client/gen/wasi/cli/terminal-stdin/terminal-stdin.wit.go @@ -1,9 +1,6 @@ // Code generated by wit-bindgen-go. DO NOT EDIT. // Package terminalstdin represents the imported interface "wasi:cli/terminal-stdin@0.2.0". -// -// An interface providing an optional `terminal-input` for stdin as a -// link-time authority. package terminalstdin import ( @@ -13,9 +10,6 @@ import ( // GetTerminalStdin represents the imported function "get-terminal-stdin". // -// If stdin is connected to a terminal, return a `terminal-input` handle -// allowing further interaction with it. -// // get-terminal-stdin: func() -> option // //go:nosplit diff --git a/_examples/http-client/gen/wasi/cli/terminal-stdout/terminal-stdout.wit.go b/_examples/http-client/gen/wasi/cli/terminal-stdout/terminal-stdout.wit.go index b5caaa4..accb754 100644 --- a/_examples/http-client/gen/wasi/cli/terminal-stdout/terminal-stdout.wit.go +++ b/_examples/http-client/gen/wasi/cli/terminal-stdout/terminal-stdout.wit.go @@ -1,9 +1,6 @@ // Code generated by wit-bindgen-go. DO NOT EDIT. // Package terminalstdout represents the imported interface "wasi:cli/terminal-stdout@0.2.0". -// -// An interface providing an optional `terminal-output` for stdout as a -// link-time authority. package terminalstdout import ( @@ -13,9 +10,6 @@ import ( // GetTerminalStdout represents the imported function "get-terminal-stdout". // -// If stdout is connected to a terminal, return a `terminal-output` handle -// allowing further interaction with it. -// // get-terminal-stdout: func() -> option // //go:nosplit diff --git a/_examples/http-client/gen/wasi/config/runtime/runtime.wit.go b/_examples/http-client/gen/wasi/config/runtime/runtime.wit.go index edf169f..65b7b41 100644 --- a/_examples/http-client/gen/wasi/config/runtime/runtime.wit.go +++ b/_examples/http-client/gen/wasi/config/runtime/runtime.wit.go @@ -9,8 +9,6 @@ import ( // ConfigError represents the variant "wasi:config/runtime@0.2.0-draft#config-error". // -// An error type that encapsulates the different errors that can occur fetching config -// // variant config-error { // upstream(string), // io(string), @@ -18,11 +16,6 @@ import ( type ConfigError cm.Variant[uint8, string, string] // ConfigErrorUpstream returns a [ConfigError] of case "upstream". -// -// This indicates an error from an "upstream" config source. -// As this could be almost _anything_ (such as Vault, Kubernetes ConfigMaps, KeyValue -// buckets, etc), -// the error message is a string. func ConfigErrorUpstream(data string) ConfigError { return cm.New[ConfigError](0, data) } @@ -33,14 +26,6 @@ func (self *ConfigError) Upstream() *string { } // ConfigErrorIO returns a [ConfigError] of case "io". -// -// This indicates an error from an I/O operation. -// As this could be almost _anything_ (such as a file read, network connection, etc), -// the error message is a string. -// Depending on how this ends up being consumed, -// we may consider moving this to use the `wasi:io/error` type instead. -// For simplicity right now in supporting multiple implementations, it is being left -// as a string. func ConfigErrorIO(data string) ConfigError { return cm.New[ConfigError](1, data) } @@ -52,8 +37,6 @@ func (self *ConfigError) IO() *string { // Get represents the imported function "get". // -// Gets a single opaque config value set at the given key if it exists -// // get: func(key: string) -> result, config-error> // //go:nosplit @@ -69,8 +52,6 @@ func wasmimport_Get(key0 *uint8, key1 uint32, result *cm.Result[OptionStringShap // GetAll represents the imported function "get-all". // -// Gets a list of all set config data -// // get-all: func() -> result>, config-error> // //go:nosplit diff --git a/_examples/http-client/gen/wasi/logging/logging/logging.wit.go b/_examples/http-client/gen/wasi/logging/logging/logging.wit.go index 15b6e95..0535dfa 100644 --- a/_examples/http-client/gen/wasi/logging/logging/logging.wit.go +++ b/_examples/http-client/gen/wasi/logging/logging/logging.wit.go @@ -1,18 +1,13 @@ // Code generated by wit-bindgen-go. DO NOT EDIT. -// Package logging represents the imported interface "wasi:logging/logging". -// -// WASI Logging is a logging API intended to let users emit log messages with -// simple priority levels and context values. +// Package logging represents the imported interface "wasi:logging/logging@0.1.0-draft". package logging import ( "github.com/bytecodealliance/wasm-tools-go/cm" ) -// Level represents the enum "wasi:logging/logging#level". -// -// A log level, describing a kind of message. +// Level represents the enum "wasi:logging/logging@0.1.0-draft#level". // // enum level { // trace, @@ -25,25 +20,11 @@ import ( type Level uint8 const ( - // Describes messages about the values of variables and the flow of - // control within a program. LevelTrace Level = iota - - // Describes messages likely to be of interest to someone debugging a - // program. LevelDebug - - // Describes messages likely to be of interest to someone monitoring a - // program. LevelInfo - - // Describes messages indicating hazardous situations. LevelWarn - - // Describes messages indicating serious errors. LevelError - - // Describes messages indicating fatal errors. LevelCritical ) @@ -63,13 +44,6 @@ func (e Level) String() string { // Log represents the imported function "log". // -// Emit a log message. -// -// A log message has a `level` describing what kind of message is being -// sent, a context, which is an uninterpreted string meant to help -// consumers group similar messages, and a string containing the message -// text. -// // log: func(level: level, context: string, message: string) // //go:nosplit @@ -81,6 +55,6 @@ func Log(level Level, context string, message string) { return } -//go:wasmimport wasi:logging/logging log +//go:wasmimport wasi:logging/logging@0.1.0-draft log //go:noescape func wasmimport_Log(level0 uint32, context0 *uint8, context1 uint32, message0 *uint8, message1 uint32) diff --git a/_examples/http-client/gen/wasmcloud/bus/lattice/lattice.wit.go b/_examples/http-client/gen/wasmcloud/bus/lattice/lattice.wit.go index 9e04515..5239e79 100644 --- a/_examples/http-client/gen/wasmcloud/bus/lattice/lattice.wit.go +++ b/_examples/http-client/gen/wasmcloud/bus/lattice/lattice.wit.go @@ -9,8 +9,6 @@ import ( // CallTargetInterface represents the imported resource "wasmcloud:bus/lattice@1.0.0#call-target-interface". // -// Interface target. This represents an interface, which can be selected by `set-link-name`. -// // resource call-target-interface type CallTargetInterface cm.Resource @@ -49,12 +47,6 @@ func wasmimport_NewCallTargetInterface(namespace0 *uint8, namespace1 uint32, pac // SetLinkName represents the imported function "set-link-name". // -// Set an optional link name to use for all interfaces specified. This is advanced -// functionality only available within wasmcloud and, as such, is exposed here as -// part of the -// wasmcloud:bus package. This is used when you are linking multiple of the same interfaces -// (i.e. a keyvalue implementation for caching and another one for secrets) to a component -// // set-link-name: func(name: string, interfaces: list) // //go:nosplit diff --git a/_examples/http-client/gen/wasmcloud/messaging/consumer/abi.go b/_examples/http-client/gen/wasmcloud/messaging/consumer/abi.go deleted file mode 100644 index 1e44dea..0000000 --- a/_examples/http-client/gen/wasmcloud/messaging/consumer/abi.go +++ /dev/null @@ -1,32 +0,0 @@ -// Code generated by wit-bindgen-go. DO NOT EDIT. - -package consumer - -import ( - "github.com/bytecodealliance/wasm-tools-go/cm" - "github.com/wasmCloud/component-sdk-go/_examples/http-client/gen/wasmcloud/messaging/types" - "unsafe" -) - -// BrokerMessageShape is used for storage in variant or result types. -type BrokerMessageShape struct { - shape [unsafe.Sizeof(types.BrokerMessage{})]byte -} - -func lower_OptionString(v cm.Option[string]) (f0 uint32, f1 *uint8, f2 uint32) { - some := v.Some() - if some != nil { - f0 = 1 - v1, v2 := cm.LowerString(*some) - f1 = (*uint8)(v1) - f2 = (uint32)(v2) - } - return -} - -func lower_BrokerMessage(v types.BrokerMessage) (f0 *uint8, f1 uint32, f2 *uint8, f3 uint32, f4 uint32, f5 *uint8, f6 uint32) { - f0, f1 = cm.LowerString(v.Subject) - f2, f3 = cm.LowerList(v.Body) - f4, f5, f6 = lower_OptionString(v.ReplyTo) - return -} diff --git a/_examples/http-client/gen/wasmcloud/messaging/consumer/consumer.wit.go b/_examples/http-client/gen/wasmcloud/messaging/consumer/consumer.wit.go deleted file mode 100644 index ce8e6ef..0000000 --- a/_examples/http-client/gen/wasmcloud/messaging/consumer/consumer.wit.go +++ /dev/null @@ -1,46 +0,0 @@ -// Code generated by wit-bindgen-go. DO NOT EDIT. - -// Package consumer represents the imported interface "wasmcloud:messaging/consumer@0.2.0". -package consumer - -import ( - "github.com/bytecodealliance/wasm-tools-go/cm" - "github.com/wasmCloud/component-sdk-go/_examples/http-client/gen/wasmcloud/messaging/types" -) - -// Request represents the imported function "request". -// -// Perform a request operation on a subject -// -// request: func(subject: string, body: list, timeout-ms: u32) -> result -// -//go:nosplit -func Request(subject string, body cm.List[uint8], timeoutMs uint32) (result cm.Result[BrokerMessageShape, types.BrokerMessage, string]) { - subject0, subject1 := cm.LowerString(subject) - body0, body1 := cm.LowerList(body) - timeoutMs0 := (uint32)(timeoutMs) - wasmimport_Request((*uint8)(subject0), (uint32)(subject1), (*uint8)(body0), (uint32)(body1), (uint32)(timeoutMs0), &result) - return -} - -//go:wasmimport wasmcloud:messaging/consumer@0.2.0 request -//go:noescape -func wasmimport_Request(subject0 *uint8, subject1 uint32, body0 *uint8, body1 uint32, timeoutMs0 uint32, result *cm.Result[BrokerMessageShape, types.BrokerMessage, string]) - -// Publish represents the imported function "publish". -// -// Publish a message to a subject without awaiting a response -// -// publish: func(msg: broker-message) -> result<_, string> -// -//go:nosplit -func Publish(msg types.BrokerMessage) (result cm.Result[string, struct{}, string]) { - msg0, msg1, msg2, msg3, msg4, msg5, msg6 := lower_BrokerMessage(msg) - wasmimport_Publish((*uint8)(msg0), (uint32)(msg1), (*uint8)(msg2), (uint32)(msg3), (uint32)(msg4), (*uint8)(msg5), (uint32)(msg6), &result) - return -} - -//go:wasmimport wasmcloud:messaging/consumer@0.2.0 publish -//go:noescape -func wasmimport_Publish(msg0 *uint8, msg1 uint32, msg2 *uint8, msg3 uint32, msg4 uint32, msg5 *uint8, msg6 uint32, result *cm.Result[string, struct{}, string]) diff --git a/_examples/http-client/gen/wasmcloud/messaging/consumer/empty.s b/_examples/http-client/gen/wasmcloud/messaging/consumer/empty.s deleted file mode 100644 index 5444f20..0000000 --- a/_examples/http-client/gen/wasmcloud/messaging/consumer/empty.s +++ /dev/null @@ -1,3 +0,0 @@ -// This file exists for testing this package without WebAssembly, -// allowing empty function bodies with a //go:wasmimport directive. -// See https://pkg.go.dev/cmd/compile for more information. diff --git a/_examples/http-client/gen/wasmcloud/messaging/types/types.wit.go b/_examples/http-client/gen/wasmcloud/messaging/types/types.wit.go deleted file mode 100644 index d7cbb6b..0000000 --- a/_examples/http-client/gen/wasmcloud/messaging/types/types.wit.go +++ /dev/null @@ -1,26 +0,0 @@ -// Code generated by wit-bindgen-go. DO NOT EDIT. - -// Package types represents the imported interface "wasmcloud:messaging/types@0.2.0". -// -// Types common to message broker interactions -package types - -import ( - "github.com/bytecodealliance/wasm-tools-go/cm" -) - -// BrokerMessage represents the record "wasmcloud:messaging/types@0.2.0#broker-message". -// -// A message sent to or received from a broker -// -// record broker-message { -// subject: string, -// body: list, -// reply-to: option, -// } -type BrokerMessage struct { - _ cm.HostLayout - Subject string - Body cm.List[uint8] - ReplyTo cm.Option[string] -} diff --git a/_examples/http-client/gen/wasmcloud/secrets/reveal/reveal.wit.go b/_examples/http-client/gen/wasmcloud/secrets/reveal/reveal.wit.go index ac4c1b8..13febbe 100644 --- a/_examples/http-client/gen/wasmcloud/secrets/reveal/reveal.wit.go +++ b/_examples/http-client/gen/wasmcloud/secrets/reveal/reveal.wit.go @@ -10,9 +10,6 @@ import ( // Reveal represents the imported function "reveal". // -// Reveals the value of a secret to the caller. -// This lets you easily audit your code to discover where secrets are being used. -// // reveal: func(s: borrow) -> secret-value // //go:nosplit diff --git a/_examples/http-client/gen/wasmcloud/secrets/store/store.wit.go b/_examples/http-client/gen/wasmcloud/secrets/store/store.wit.go index 09dbab5..57ddee2 100644 --- a/_examples/http-client/gen/wasmcloud/secrets/store/store.wit.go +++ b/_examples/http-client/gen/wasmcloud/secrets/store/store.wit.go @@ -9,8 +9,6 @@ import ( // SecretsError represents the variant "wasmcloud:secrets/store@0.1.0-draft#secrets-error". // -// An error type that encapsulates the different errors that can occur fetching secrets -// // variant secrets-error { // upstream(string), // io(string), @@ -19,11 +17,6 @@ import ( type SecretsError cm.Variant[uint8, string, string] // SecretsErrorUpstream returns a [SecretsError] of case "upstream". -// -// This indicates an error from an "upstream" secrets source. -// As this could be almost _anything_ (such as Vault, Kubernetes Secrets, KeyValue -// buckets, etc), -// the error message is a string. func SecretsErrorUpstream(data string) SecretsError { return cm.New[SecretsError](0, data) } @@ -34,14 +27,6 @@ func (self *SecretsError) Upstream() *string { } // SecretsErrorIO returns a [SecretsError] of case "io". -// -// This indicates an error from an I/O operation. -// As this could be almost _anything_ (such as a file read, network connection, etc), -// the error message is a string. -// Depending on how this ends up being consumed, -// we may consider moving this to use the `wasi:io/error` type instead. -// For simplicity right now in supporting multiple implementations, it is being left -// as a string. func SecretsErrorIO(data string) SecretsError { return cm.New[SecretsError](1, data) } @@ -52,10 +37,6 @@ func (self *SecretsError) IO() *string { } // SecretsErrorNotFound returns a [SecretsError] of case "not-found". -// -// This indicates that the secret was not found. Generally "not found" errors will -// be handled by the upstream secrets backend, but there are cases where the host -// may need to return this error. func SecretsErrorNotFound() SecretsError { var data struct{} return cm.New[SecretsError](2, data) @@ -68,9 +49,6 @@ func (self *SecretsError) NotFound() bool { // SecretValue represents the variant "wasmcloud:secrets/store@0.1.0-draft#secret-value". // -// A secret value can be either a string or a byte array, which lets you -// store binary data as a secret. -// // variant secret-value { // %string(string), // bytes(list), @@ -78,8 +56,6 @@ func (self *SecretsError) NotFound() bool { type SecretValue cm.Variant[uint8, string, cm.List[uint8]] // SecretValueString returns a [SecretValue] of case "string". -// -// A string value func SecretValueString(data string) SecretValue { return cm.New[SecretValue](0, data) } @@ -90,8 +66,6 @@ func (self *SecretValue) String() *string { } // SecretValueBytes returns a [SecretValue] of case "bytes". -// -// A byte array value func SecretValueBytes(data cm.List[uint8]) SecretValue { return cm.New[SecretValue](1, data) } @@ -103,11 +77,6 @@ func (self *SecretValue) Bytes() *cm.List[uint8] { // Secret represents the imported resource "wasmcloud:secrets/store@0.1.0-draft#secret". // -// A secret is a resource that can only be borrowed. This allows you to -// pass around handles to secrets and not reveal the values until a -// component needs them. -// You need to use the reveal interface to get the value. -// // resource secret type Secret cm.Resource @@ -128,8 +97,6 @@ func wasmimport_SecretResourceDrop(self0 uint32) // Get represents the imported function "get". // -// Gets a single opaque secrets value set at the given key if it exists -// // get: func(key: string) -> result // //go:nosplit diff --git a/_examples/http-client/wasmcloud.toml b/_examples/http-client/wasmcloud.toml index c0b416f..969a6cf 100644 --- a/_examples/http-client/wasmcloud.toml +++ b/_examples/http-client/wasmcloud.toml @@ -1,9 +1,10 @@ name = "http_client" -language = "tinygo" +language = "other" type = "component" version = "0.1.0" [component] +build_command = "tinygo build -target=wasip2 --wit-package ./wit --wit-world example -o build/http_client.wasm main.go" wit_world = "example" wasm_target = "wasm32-wasi-preview2" destination = "build/http_client_s.wasm" diff --git a/_examples/http-client/wit/deps.lock b/_examples/http-client/wit/deps.lock deleted file mode 100644 index 22c6b1d..0000000 --- a/_examples/http-client/wit/deps.lock +++ /dev/null @@ -1,49 +0,0 @@ -["wasi-cli-0.2.0"] -sha256 = "13b041ec2314d48107929c335df3ca81b1bb0a35bfec38e206a59162a4c209cd" -sha512 = "725886b3244f4894a1121cd66e1bea0775964ca1b3811be3ae43a4c692cb7d5f27d851072637b8ec64bd5e71e85bb5e860f8331fe8f77353d9d7868ce1d72a8e" - -["wasi-clocks-0.2.0"] -sha256 = "daf7133b4f60ba73185449327dd48d2b324799db858ab463bcd32d954a9ff394" -sha512 = "5992296c504aebfad359ab1676bba63b5d22e33112c240a437ee733433aa50552144242f8998180ff36f0da56e5f65691dbb1898331ce878bd9fa439b8909742" - -["wasi-config-0.2.0-draft"] -sha256 = "5c6b4a10b21fbab2397d579c6f8bf8a484160dfdf20b6343080b0bad097849a3" -sha512 = "d3cf5fd1d12590aefd561330337870e2e468c84753c11e19bccd165c916a696722cc29af3572984e6256088b6e683763675d5b8cec3d195f9e2961fe405629b8" - -["wasi-filesystem-0.2.0"] -sha256 = "739d4fc43cd51421382e5d1a0cf643a2985691d480ae75600cdcd382665b3e55" -sha512 = "67f61ef46833060cc4d7a258da7a82024830762c4ecfd522d32bdc5e6bf4df26043f9a8c13ea38b191df180176826aa7b163816618a939015efff5987557dc16" - -["wasi-http-0.2.0"] -sha256 = "f22b6f3b3c12289e522041067b0a2db99a27c181e9ef3ed36930aa0286232d63" -sha512 = "f9b38ef4f58cb9e069b51ee45df52ce6ca9af0a9774c3d09dc99598f36afcd902557221be2f1a6bcccdecb880e4d7436b533e03f4b9250d5b0e1466afd3a62ce" - -["wasi-io-0.2.0"] -sha256 = "0bc0cc0d474a5c4f3c2e2092664c4e235a0390e5d206d3bdc4007488d9d5e00f" -sha512 = "497f37742a94ca32eaa77dce5d9144682e743b30c2d702d37726d43735a25fa9d421afbf5945da158c0e46a0adf941f607b0e0f5d26494af52f021265f78329c" - -["wasi-logging-0.1.0-draft"] -sha256 = "619c4d2336045bab9129e5af568decd5e963006291d496a23cddf796f3a61c2e" -sha512 = "c163aa6f4e566cb85d373f25e590e552fc2530fdf50946c38d305e9f2cd189d86ff8540d163e42acd2cebbe3cef98967cd1efb14ce196da132fcf6caf4f6155d" - -["wasi-random-0.2.0"] -sha256 = "efcdf344435591830f5fbed67a2c215bba112893518a8ef4c7234a4796b8dbcd" -sha512 = "c78a10e9b6401116eac703430609a849854a27a4ff3bc7737d514536a9c16a2fc206a35f8f96b7c40f254d6a66e6873361970754fa69b856025886cd462a2832" - -["wasi-sockets-0.2.0"] -sha256 = "aa3c13fee8c788c95de5a917a54d776d5adb2afd90a77224864941ce27c5d471" -sha512 = "4e3be65dd127ccd4bfa1af8f86fea556d6e22d25e4b637f9b9ebf66ae1f6331f904edff042adc9be16fec511e3295170e6c13516715d2cd3e5aaffbd96158fa9" - -["wasmcloud-bus-1.0.0"] -sha256 = "f823b5c8293cb585092107120139c34c405f57362761a133d543f5d68c65d591" -sha512 = "12e6aa4eac6139b60ea72cc7b6ded6ac9b144b15557be9f2329b6e84b5a161d8f6344674afd0526a883cb61e34c06fee9dbadbaee1d783cd957bc43dab4bfc2d" - -[wasmcloud-component-go] -path = "../../../wit" -sha256 = "995bd9ad8d0523f04480196b6746da80ddc5daf2e3be6b126c224d1fe9bda103" -sha512 = "e5af5fbb4242fc151d83ce86fa05d54274eb33a42b8856453659a1191d5142cd3792c914df8db330a9f692089974bbd1e6d3695142a8e5416d10b5b856839ce9" -deps = ["wasi-cli-0.2.0", "wasi-clocks-0.2.0", "wasi-config-0.2.0-draft", "wasi-filesystem-0.2.0", "wasi-http-0.2.0", "wasi-io-0.2.0", "wasi-logging-0.1.0-draft", "wasi-random-0.2.0", "wasi-sockets-0.2.0", "wasmcloud-bus-1.0.0", "wasmcloud-secrets-0.1.0-draft"] - -["wasmcloud-secrets-0.1.0-draft"] -sha256 = "8e0ec182ea30a420744887cdb42660bf703194eaf8ecf2f0dc0efc4159247ea4" -sha512 = "f0037028e47d307b1551068fcdb9249a0a1cd3d7d1e8d99f33713ec1ee22bc5242fe63155a9f7aaa0492640df2c79ea40ed0839e2add222c069787b59c09f1b3" diff --git a/_examples/http-client/wit/deps.toml b/_examples/http-client/wit/deps.toml deleted file mode 100644 index 4d1db6f..0000000 --- a/_examples/http-client/wit/deps.toml +++ /dev/null @@ -1 +0,0 @@ -wasmcloud-component-go = "../../../wit" diff --git a/_examples/http-client/wit/deps/wasi-cli-0.2.0/package.wit b/_examples/http-client/wit/deps/wasi-cli-0.2.0/package.wit index 0a2737b..f8f1976 100644 --- a/_examples/http-client/wit/deps/wasi-cli-0.2.0/package.wit +++ b/_examples/http-client/wit/deps/wasi-cli-0.2.0/package.wit @@ -1,32 +1,15 @@ package wasi:cli@0.2.0; -interface environment { - /// Get the POSIX-style environment variables. - /// - /// Each environment variable is provided as a pair of string variable names - /// and string value. - /// - /// Morally, these are a value import, but until value imports are available - /// in the component model, this import function should return the same - /// values each time it is called. - get-environment: func() -> list>; - - /// Get the POSIX-style arguments to the program. - get-arguments: func() -> list; +interface stdout { + use wasi:io/streams@0.2.0.{output-stream}; - /// Return a path that programs should use as their initial current working - /// directory, interpreting `.` as shorthand for this. - initial-cwd: func() -> option; + get-stdout: func() -> output-stream; } -interface exit { - /// Exit the current instance and any linked instances. - exit: func(status: result); -} +interface stderr { + use wasi:io/streams@0.2.0.{output-stream}; -interface run { - /// Run the program. - run: func() -> result; + get-stderr: func() -> output-stream; } interface stdin { @@ -35,125 +18,41 @@ interface stdin { get-stdin: func() -> input-stream; } -interface stdout { - use wasi:io/streams@0.2.0.{output-stream}; +interface environment { + get-environment: func() -> list>; - get-stdout: func() -> output-stream; -} + get-arguments: func() -> list; -interface stderr { - use wasi:io/streams@0.2.0.{output-stream}; + initial-cwd: func() -> option; +} - get-stderr: func() -> output-stream; +interface exit { + exit: func(status: result); } -/// Terminal input. -/// -/// In the future, this may include functions for disabling echoing, -/// disabling input buffering so that keyboard events are sent through -/// immediately, querying supported features, and so on. interface terminal-input { - /// The input side of a terminal. resource terminal-input; } -/// Terminal output. -/// -/// In the future, this may include functions for querying the terminal -/// size, being notified of terminal size changes, querying supported -/// features, and so on. interface terminal-output { - /// The output side of a terminal. resource terminal-output; } -/// An interface providing an optional `terminal-input` for stdin as a -/// link-time authority. interface terminal-stdin { use terminal-input.{terminal-input}; - /// If stdin is connected to a terminal, return a `terminal-input` handle - /// allowing further interaction with it. get-terminal-stdin: func() -> option; } -/// An interface providing an optional `terminal-output` for stdout as a -/// link-time authority. interface terminal-stdout { use terminal-output.{terminal-output}; - /// If stdout is connected to a terminal, return a `terminal-output` handle - /// allowing further interaction with it. get-terminal-stdout: func() -> option; } -/// An interface providing an optional `terminal-output` for stderr as a -/// link-time authority. interface terminal-stderr { use terminal-output.{terminal-output}; - /// If stderr is connected to a terminal, return a `terminal-output` handle - /// allowing further interaction with it. get-terminal-stderr: func() -> option; } -world imports { - import environment; - import exit; - import wasi:io/error@0.2.0; - import wasi:io/poll@0.2.0; - import wasi:io/streams@0.2.0; - import stdin; - import stdout; - import stderr; - import terminal-input; - import terminal-output; - import terminal-stdin; - import terminal-stdout; - import terminal-stderr; - import wasi:clocks/monotonic-clock@0.2.0; - import wasi:clocks/wall-clock@0.2.0; - import wasi:filesystem/types@0.2.0; - import wasi:filesystem/preopens@0.2.0; - import wasi:sockets/network@0.2.0; - import wasi:sockets/instance-network@0.2.0; - import wasi:sockets/udp@0.2.0; - import wasi:sockets/udp-create-socket@0.2.0; - import wasi:sockets/tcp@0.2.0; - import wasi:sockets/tcp-create-socket@0.2.0; - import wasi:sockets/ip-name-lookup@0.2.0; - import wasi:random/random@0.2.0; - import wasi:random/insecure@0.2.0; - import wasi:random/insecure-seed@0.2.0; -} -world command { - import environment; - import exit; - import wasi:io/error@0.2.0; - import wasi:io/poll@0.2.0; - import wasi:io/streams@0.2.0; - import stdin; - import stdout; - import stderr; - import terminal-input; - import terminal-output; - import terminal-stdin; - import terminal-stdout; - import terminal-stderr; - import wasi:clocks/monotonic-clock@0.2.0; - import wasi:clocks/wall-clock@0.2.0; - import wasi:filesystem/types@0.2.0; - import wasi:filesystem/preopens@0.2.0; - import wasi:sockets/network@0.2.0; - import wasi:sockets/instance-network@0.2.0; - import wasi:sockets/udp@0.2.0; - import wasi:sockets/udp-create-socket@0.2.0; - import wasi:sockets/tcp@0.2.0; - import wasi:sockets/tcp-create-socket@0.2.0; - import wasi:sockets/ip-name-lookup@0.2.0; - import wasi:random/random@0.2.0; - import wasi:random/insecure@0.2.0; - import wasi:random/insecure-seed@0.2.0; - - export run; -} diff --git a/_examples/http-client/wit/deps/wasi-config-0.2.0-draft/package.wit b/_examples/http-client/wit/deps/wasi-config-0.2.0-draft/package.wit index 7065b9b..d514554 100644 --- a/_examples/http-client/wit/deps/wasi-config-0.2.0-draft/package.wit +++ b/_examples/http-client/wit/deps/wasi-config-0.2.0-draft/package.wit @@ -1,28 +1,13 @@ package wasi:config@0.2.0-draft; interface runtime { - /// An error type that encapsulates the different errors that can occur fetching config variant config-error { - /// This indicates an error from an "upstream" config source. - /// As this could be almost _anything_ (such as Vault, Kubernetes ConfigMaps, KeyValue buckets, etc), - /// the error message is a string. upstream(string), - /// This indicates an error from an I/O operation. - /// As this could be almost _anything_ (such as a file read, network connection, etc), - /// the error message is a string. - /// Depending on how this ends up being consumed, - /// we may consider moving this to use the `wasi:io/error` type instead. - /// For simplicity right now in supporting multiple implementations, it is being left as a string. io(string), } - /// Gets a single opaque config value set at the given key if it exists get: func(key: string) -> result, config-error>; - /// Gets a list of all set config data get-all: func() -> result>, config-error>; } -world imports { - import runtime; -} diff --git a/_examples/http-client/wit/deps/wasi-io-0.2.0/package.wit b/_examples/http-client/wit/deps/wasi-io-0.2.0/package.wit index 1840029..962734d 100644 --- a/_examples/http-client/wit/deps/wasi-io-0.2.0/package.wit +++ b/_examples/http-client/wit/deps/wasi-io-0.2.0/package.wit @@ -1,11 +1,5 @@ package wasi:io@0.2.0; -interface error { - resource error { - to-debug-string: func() -> string; - } -} - interface poll { resource pollable { ready: func() -> bool; @@ -15,6 +9,12 @@ interface poll { poll: func(in: list>) -> list; } +interface error { + resource error { + to-debug-string: func() -> string; + } +} + interface streams { use error.{error}; use poll.{pollable}; diff --git a/_examples/http-client/wit/deps/wasi-logging-0.1.0-draft/package.wit b/_examples/http-client/wit/deps/wasi-logging-0.1.0-draft/package.wit index df4e8de..70349a7 100644 --- a/_examples/http-client/wit/deps/wasi-logging-0.1.0-draft/package.wit +++ b/_examples/http-client/wit/deps/wasi-logging-0.1.0-draft/package.wit @@ -1,36 +1,15 @@ -package wasi:logging; +package wasi:logging@0.1.0-draft; -/// WASI Logging is a logging API intended to let users emit log messages with -/// simple priority levels and context values. interface logging { - /// A log level, describing a kind of message. enum level { - /// Describes messages about the values of variables and the flow of - /// control within a program. trace, - /// Describes messages likely to be of interest to someone debugging a - /// program. debug, - /// Describes messages likely to be of interest to someone monitoring a - /// program. info, - /// Describes messages indicating hazardous situations. warn, - /// Describes messages indicating serious errors. error, - /// Describes messages indicating fatal errors. critical, } - /// Emit a log message. - /// - /// A log message has a `level` describing what kind of message is being - /// sent, a context, which is an uninterpreted string meant to help - /// consumers group similar messages, and a string containing the message - /// text. log: func(level: level, context: string, message: string); } -world imports { - import logging; -} diff --git a/_examples/http-client/wit/deps/wasmcloud-bus-1.0.0/package.wit b/_examples/http-client/wit/deps/wasmcloud-bus-1.0.0/package.wit index 1008a6f..2a7cd93 100644 --- a/_examples/http-client/wit/deps/wasmcloud-bus-1.0.0/package.wit +++ b/_examples/http-client/wit/deps/wasmcloud-bus-1.0.0/package.wit @@ -1,15 +1,10 @@ package wasmcloud:bus@1.0.0; interface lattice { - /// Interface target. This represents an interface, which can be selected by `set-link-name`. resource call-target-interface { constructor(namespace: string, %package: string, %interface: string); } - /// Set an optional link name to use for all interfaces specified. This is advanced - /// functionality only available within wasmcloud and, as such, is exposed here as part of the - /// wasmcloud:bus package. This is used when you are linking multiple of the same interfaces - /// (i.e. a keyvalue implementation for caching and another one for secrets) to a component set-link-name: func(name: string, interfaces: list); } diff --git a/_examples/http-client/wit/deps/wasmcloud-component-go-0.1.0/package.wit b/_examples/http-client/wit/deps/wasmcloud-component-go-0.1.0/package.wit new file mode 100644 index 0000000..75caf04 --- /dev/null +++ b/_examples/http-client/wit/deps/wasmcloud-component-go-0.1.0/package.wit @@ -0,0 +1,85 @@ +package wasmcloud:component-go@0.1.0; + +world exports { + import wasi:io/poll@0.2.0; + import wasi:clocks/monotonic-clock@0.2.0; + import wasi:io/error@0.2.0; + import wasi:io/streams@0.2.0; + import wasi:http/types@0.2.0; + + export wasi:http/incoming-handler@0.2.0; +} +world imports { + import wasi:logging/logging@0.1.0-draft; + import wasi:config/runtime@0.2.0-draft; + import wasi:io/poll@0.2.0; + import wasi:clocks/monotonic-clock@0.2.0; + import wasi:io/error@0.2.0; + import wasi:io/streams@0.2.0; + import wasi:http/types@0.2.0; + import wasi:http/outgoing-handler@0.2.0; + import wasmcloud:bus/lattice@1.0.0; + import wasmcloud:secrets/store@0.1.0-draft; + import wasmcloud:secrets/reveal@0.1.0-draft; + import wasi:cli/environment@0.2.0; + import wasi:cli/exit@0.2.0; + import wasi:cli/stdin@0.2.0; + import wasi:cli/stdout@0.2.0; + import wasi:cli/stderr@0.2.0; + import wasi:cli/terminal-input@0.2.0; + import wasi:cli/terminal-output@0.2.0; + import wasi:cli/terminal-stdin@0.2.0; + import wasi:cli/terminal-stdout@0.2.0; + import wasi:cli/terminal-stderr@0.2.0; + import wasi:clocks/wall-clock@0.2.0; + import wasi:filesystem/types@0.2.0; + import wasi:filesystem/preopens@0.2.0; + import wasi:sockets/network@0.2.0; + import wasi:sockets/instance-network@0.2.0; + import wasi:sockets/udp@0.2.0; + import wasi:sockets/udp-create-socket@0.2.0; + import wasi:sockets/tcp@0.2.0; + import wasi:sockets/tcp-create-socket@0.2.0; + import wasi:sockets/ip-name-lookup@0.2.0; + import wasi:random/random@0.2.0; + import wasi:random/insecure@0.2.0; + import wasi:random/insecure-seed@0.2.0; +} +world sdk { + import wasi:io/poll@0.2.0; + import wasi:clocks/monotonic-clock@0.2.0; + import wasi:io/error@0.2.0; + import wasi:io/streams@0.2.0; + import wasi:http/types@0.2.0; + import wasi:logging/logging@0.1.0-draft; + import wasi:config/runtime@0.2.0-draft; + import wasi:http/outgoing-handler@0.2.0; + import wasmcloud:bus/lattice@1.0.0; + import wasmcloud:secrets/store@0.1.0-draft; + import wasmcloud:secrets/reveal@0.1.0-draft; + import wasi:cli/environment@0.2.0; + import wasi:cli/exit@0.2.0; + import wasi:cli/stdin@0.2.0; + import wasi:cli/stdout@0.2.0; + import wasi:cli/stderr@0.2.0; + import wasi:cli/terminal-input@0.2.0; + import wasi:cli/terminal-output@0.2.0; + import wasi:cli/terminal-stdin@0.2.0; + import wasi:cli/terminal-stdout@0.2.0; + import wasi:cli/terminal-stderr@0.2.0; + import wasi:clocks/wall-clock@0.2.0; + import wasi:filesystem/types@0.2.0; + import wasi:filesystem/preopens@0.2.0; + import wasi:sockets/network@0.2.0; + import wasi:sockets/instance-network@0.2.0; + import wasi:sockets/udp@0.2.0; + import wasi:sockets/udp-create-socket@0.2.0; + import wasi:sockets/tcp@0.2.0; + import wasi:sockets/tcp-create-socket@0.2.0; + import wasi:sockets/ip-name-lookup@0.2.0; + import wasi:random/random@0.2.0; + import wasi:random/insecure@0.2.0; + import wasi:random/insecure-seed@0.2.0; + + export wasi:http/incoming-handler@0.2.0; +} diff --git a/_examples/http-client/wit/deps/wasmcloud-component-go/world.wit b/_examples/http-client/wit/deps/wasmcloud-component-go/world.wit deleted file mode 100644 index f881ff8..0000000 --- a/_examples/http-client/wit/deps/wasmcloud-component-go/world.wit +++ /dev/null @@ -1,26 +0,0 @@ -package wasmcloud:component-go@0.1.0; - -world exports { - // wasi - export wasi:http/incoming-handler@0.2.0; -} - -world imports { - // tinygo - include wasi:cli/imports@0.2.0; - - // wasi - import wasi:logging/logging; - import wasi:config/runtime@0.2.0-draft; - import wasi:http/outgoing-handler@0.2.0; - - // wasmcloud - import wasmcloud:bus/lattice@1.0.0; - import wasmcloud:secrets/store@0.1.0-draft; - import wasmcloud:secrets/reveal@0.1.0-draft; -} - -world sdk { - include exports; - include imports; -} diff --git a/_examples/http-client/wit/deps/wasmcloud-secrets-0.1.0-draft/package.wit b/_examples/http-client/wit/deps/wasmcloud-secrets-0.1.0-draft/package.wit index a431b95..3a93ea4 100644 --- a/_examples/http-client/wit/deps/wasmcloud-secrets-0.1.0-draft/package.wit +++ b/_examples/http-client/wit/deps/wasmcloud-secrets-0.1.0-draft/package.wit @@ -1,52 +1,25 @@ -/// This WIT interface powers secret support in wasmCloud -/// -/// See RFC #2190 https://github.com/wasmCloud/wasmCloud/issues/2190 package wasmcloud:secrets@0.1.0-draft; interface store { - /// An error type that encapsulates the different errors that can occur fetching secrets variant secrets-error { - /// This indicates an error from an "upstream" secrets source. - /// As this could be almost _anything_ (such as Vault, Kubernetes Secrets, KeyValue buckets, etc), - /// the error message is a string. upstream(string), - /// This indicates an error from an I/O operation. - /// As this could be almost _anything_ (such as a file read, network connection, etc), - /// the error message is a string. - /// Depending on how this ends up being consumed, - /// we may consider moving this to use the `wasi:io/error` type instead. - /// For simplicity right now in supporting multiple implementations, it is being left as a string. io(string), - /// This indicates that the secret was not found. Generally "not found" errors will - /// be handled by the upstream secrets backend, but there are cases where the host - /// may need to return this error. not-found, } - /// A secret value can be either a string or a byte array, which lets you - /// store binary data as a secret. variant secret-value { - /// A string value %string(string), - /// A byte array value bytes(list), } - /// A secret is a resource that can only be borrowed. This allows you to - /// pass around handles to secrets and not reveal the values until a - /// component needs them. - /// You need to use the reveal interface to get the value. resource secret; - /// Gets a single opaque secrets value set at the given key if it exists get: func(key: string) -> result; } interface reveal { use store.{secret, secret-value}; - /// Reveals the value of a secret to the caller. - /// This lets you easily audit your code to discover where secrets are being used. reveal: func(s: borrow) -> secret-value; } diff --git a/_examples/http-client/wkg.lock b/_examples/http-client/wkg.lock new file mode 100644 index 0000000..e830db8 --- /dev/null +++ b/_examples/http-client/wkg.lock @@ -0,0 +1,21 @@ +# This file is automatically generated. +# It is not intended for manual editing. +version = 1 + +[[packages]] +name = "wasi:http" +registry = "wasi.dev" + +[[packages.versions]] +requirement = "=0.2.0" +version = "0.2.0" +digest = "sha256:5a568e6e2d60c1ce51220e1833cdd5b88db9f615720edc762a9b4a6f36b383bd" + +[[packages]] +name = "wasmcloud:component-go" +registry = "wasmcloud.com" + +[[packages.versions]] +requirement = "=0.1.0" +version = "0.1.0" +digest = "sha256:de3e9af7dedd0d9e882f68f1bee533c7af9c6a1947eb40cbf1ef6163b7d41784" diff --git a/_examples/http-server/bindings.wadge_test.go b/_examples/http-server/bindings.wadge_test.go index ba67635..fa461b9 100644 --- a/_examples/http-server/bindings.wadge_test.go +++ b/_examples/http-server/bindings.wadge_test.go @@ -1989,7 +1989,7 @@ func wasmimport_Log(level0 uint32, context0 *uint8, context1 uint32, message0 *u var __p runtime.Pinner defer __p.Unpin() if __err := wadge.WithCurrentInstance(func(__instance *wadge.Instance) error { - return __instance.Call("wasi:logging/logging", "log", func() unsafe.Pointer { + return __instance.Call("wasi:logging/logging@0.1.0-draft", "log", func() unsafe.Pointer { ptr := unsafe.Pointer(&level0) __p.Pin(ptr) return ptr diff --git a/_examples/http-server/gen/wasi/cli/environment/environment.wit.go b/_examples/http-server/gen/wasi/cli/environment/environment.wit.go index 48e066d..d338d5f 100644 --- a/_examples/http-server/gen/wasi/cli/environment/environment.wit.go +++ b/_examples/http-server/gen/wasi/cli/environment/environment.wit.go @@ -9,15 +9,6 @@ import ( // GetEnvironment represents the imported function "get-environment". // -// Get the POSIX-style environment variables. -// -// Each environment variable is provided as a pair of string variable names -// and string value. -// -// Morally, these are a value import, but until value imports are available -// in the component model, this import function should return the same -// values each time it is called. -// // get-environment: func() -> list> // //go:nosplit @@ -32,8 +23,6 @@ func wasmimport_GetEnvironment(result *cm.List[[2]string]) // GetArguments represents the imported function "get-arguments". // -// Get the POSIX-style arguments to the program. -// // get-arguments: func() -> list // //go:nosplit @@ -48,9 +37,6 @@ func wasmimport_GetArguments(result *cm.List[string]) // InitialCWD represents the imported function "initial-cwd". // -// Return a path that programs should use as their initial current working -// directory, interpreting `.` as shorthand for this. -// // initial-cwd: func() -> option // //go:nosplit diff --git a/_examples/http-server/gen/wasi/cli/exit/exit.wit.go b/_examples/http-server/gen/wasi/cli/exit/exit.wit.go index 3fccd93..f101203 100644 --- a/_examples/http-server/gen/wasi/cli/exit/exit.wit.go +++ b/_examples/http-server/gen/wasi/cli/exit/exit.wit.go @@ -9,8 +9,6 @@ import ( // Exit represents the imported function "exit". // -// Exit the current instance and any linked instances. -// // exit: func(status: result) // //go:nosplit diff --git a/_examples/http-server/gen/wasi/cli/terminal-input/terminal-input.wit.go b/_examples/http-server/gen/wasi/cli/terminal-input/terminal-input.wit.go index e0114e0..e0c9780 100644 --- a/_examples/http-server/gen/wasi/cli/terminal-input/terminal-input.wit.go +++ b/_examples/http-server/gen/wasi/cli/terminal-input/terminal-input.wit.go @@ -1,12 +1,6 @@ // Code generated by wit-bindgen-go. DO NOT EDIT. // Package terminalinput represents the imported interface "wasi:cli/terminal-input@0.2.0". -// -// Terminal input. -// -// In the future, this may include functions for disabling echoing, -// disabling input buffering so that keyboard events are sent through -// immediately, querying supported features, and so on. package terminalinput import ( @@ -15,8 +9,6 @@ import ( // TerminalInput represents the imported resource "wasi:cli/terminal-input@0.2.0#terminal-input". // -// The input side of a terminal. -// // resource terminal-input type TerminalInput cm.Resource diff --git a/_examples/http-server/gen/wasi/cli/terminal-output/terminal-output.wit.go b/_examples/http-server/gen/wasi/cli/terminal-output/terminal-output.wit.go index a63b0e6..fc6492a 100644 --- a/_examples/http-server/gen/wasi/cli/terminal-output/terminal-output.wit.go +++ b/_examples/http-server/gen/wasi/cli/terminal-output/terminal-output.wit.go @@ -1,12 +1,6 @@ // Code generated by wit-bindgen-go. DO NOT EDIT. // Package terminaloutput represents the imported interface "wasi:cli/terminal-output@0.2.0". -// -// Terminal output. -// -// In the future, this may include functions for querying the terminal -// size, being notified of terminal size changes, querying supported -// features, and so on. package terminaloutput import ( @@ -15,8 +9,6 @@ import ( // TerminalOutput represents the imported resource "wasi:cli/terminal-output@0.2.0#terminal-output". // -// The output side of a terminal. -// // resource terminal-output type TerminalOutput cm.Resource diff --git a/_examples/http-server/gen/wasi/cli/terminal-stderr/terminal-stderr.wit.go b/_examples/http-server/gen/wasi/cli/terminal-stderr/terminal-stderr.wit.go index 4ca4137..4d9f0c7 100644 --- a/_examples/http-server/gen/wasi/cli/terminal-stderr/terminal-stderr.wit.go +++ b/_examples/http-server/gen/wasi/cli/terminal-stderr/terminal-stderr.wit.go @@ -1,9 +1,6 @@ // Code generated by wit-bindgen-go. DO NOT EDIT. // Package terminalstderr represents the imported interface "wasi:cli/terminal-stderr@0.2.0". -// -// An interface providing an optional `terminal-output` for stderr as a -// link-time authority. package terminalstderr import ( @@ -13,9 +10,6 @@ import ( // GetTerminalStderr represents the imported function "get-terminal-stderr". // -// If stderr is connected to a terminal, return a `terminal-output` handle -// allowing further interaction with it. -// // get-terminal-stderr: func() -> option // //go:nosplit diff --git a/_examples/http-server/gen/wasi/cli/terminal-stdin/terminal-stdin.wit.go b/_examples/http-server/gen/wasi/cli/terminal-stdin/terminal-stdin.wit.go index e6f21cd..903ea32 100644 --- a/_examples/http-server/gen/wasi/cli/terminal-stdin/terminal-stdin.wit.go +++ b/_examples/http-server/gen/wasi/cli/terminal-stdin/terminal-stdin.wit.go @@ -1,9 +1,6 @@ // Code generated by wit-bindgen-go. DO NOT EDIT. // Package terminalstdin represents the imported interface "wasi:cli/terminal-stdin@0.2.0". -// -// An interface providing an optional `terminal-input` for stdin as a -// link-time authority. package terminalstdin import ( @@ -13,9 +10,6 @@ import ( // GetTerminalStdin represents the imported function "get-terminal-stdin". // -// If stdin is connected to a terminal, return a `terminal-input` handle -// allowing further interaction with it. -// // get-terminal-stdin: func() -> option // //go:nosplit diff --git a/_examples/http-server/gen/wasi/cli/terminal-stdout/terminal-stdout.wit.go b/_examples/http-server/gen/wasi/cli/terminal-stdout/terminal-stdout.wit.go index 3f91695..a694bad 100644 --- a/_examples/http-server/gen/wasi/cli/terminal-stdout/terminal-stdout.wit.go +++ b/_examples/http-server/gen/wasi/cli/terminal-stdout/terminal-stdout.wit.go @@ -1,9 +1,6 @@ // Code generated by wit-bindgen-go. DO NOT EDIT. // Package terminalstdout represents the imported interface "wasi:cli/terminal-stdout@0.2.0". -// -// An interface providing an optional `terminal-output` for stdout as a -// link-time authority. package terminalstdout import ( @@ -13,9 +10,6 @@ import ( // GetTerminalStdout represents the imported function "get-terminal-stdout". // -// If stdout is connected to a terminal, return a `terminal-output` handle -// allowing further interaction with it. -// // get-terminal-stdout: func() -> option // //go:nosplit diff --git a/_examples/http-server/gen/wasi/config/runtime/runtime.wit.go b/_examples/http-server/gen/wasi/config/runtime/runtime.wit.go index edf169f..65b7b41 100644 --- a/_examples/http-server/gen/wasi/config/runtime/runtime.wit.go +++ b/_examples/http-server/gen/wasi/config/runtime/runtime.wit.go @@ -9,8 +9,6 @@ import ( // ConfigError represents the variant "wasi:config/runtime@0.2.0-draft#config-error". // -// An error type that encapsulates the different errors that can occur fetching config -// // variant config-error { // upstream(string), // io(string), @@ -18,11 +16,6 @@ import ( type ConfigError cm.Variant[uint8, string, string] // ConfigErrorUpstream returns a [ConfigError] of case "upstream". -// -// This indicates an error from an "upstream" config source. -// As this could be almost _anything_ (such as Vault, Kubernetes ConfigMaps, KeyValue -// buckets, etc), -// the error message is a string. func ConfigErrorUpstream(data string) ConfigError { return cm.New[ConfigError](0, data) } @@ -33,14 +26,6 @@ func (self *ConfigError) Upstream() *string { } // ConfigErrorIO returns a [ConfigError] of case "io". -// -// This indicates an error from an I/O operation. -// As this could be almost _anything_ (such as a file read, network connection, etc), -// the error message is a string. -// Depending on how this ends up being consumed, -// we may consider moving this to use the `wasi:io/error` type instead. -// For simplicity right now in supporting multiple implementations, it is being left -// as a string. func ConfigErrorIO(data string) ConfigError { return cm.New[ConfigError](1, data) } @@ -52,8 +37,6 @@ func (self *ConfigError) IO() *string { // Get represents the imported function "get". // -// Gets a single opaque config value set at the given key if it exists -// // get: func(key: string) -> result, config-error> // //go:nosplit @@ -69,8 +52,6 @@ func wasmimport_Get(key0 *uint8, key1 uint32, result *cm.Result[OptionStringShap // GetAll represents the imported function "get-all". // -// Gets a list of all set config data -// // get-all: func() -> result>, config-error> // //go:nosplit diff --git a/_examples/http-server/gen/wasi/logging/logging/logging.wit.go b/_examples/http-server/gen/wasi/logging/logging/logging.wit.go index 15b6e95..0535dfa 100644 --- a/_examples/http-server/gen/wasi/logging/logging/logging.wit.go +++ b/_examples/http-server/gen/wasi/logging/logging/logging.wit.go @@ -1,18 +1,13 @@ // Code generated by wit-bindgen-go. DO NOT EDIT. -// Package logging represents the imported interface "wasi:logging/logging". -// -// WASI Logging is a logging API intended to let users emit log messages with -// simple priority levels and context values. +// Package logging represents the imported interface "wasi:logging/logging@0.1.0-draft". package logging import ( "github.com/bytecodealliance/wasm-tools-go/cm" ) -// Level represents the enum "wasi:logging/logging#level". -// -// A log level, describing a kind of message. +// Level represents the enum "wasi:logging/logging@0.1.0-draft#level". // // enum level { // trace, @@ -25,25 +20,11 @@ import ( type Level uint8 const ( - // Describes messages about the values of variables and the flow of - // control within a program. LevelTrace Level = iota - - // Describes messages likely to be of interest to someone debugging a - // program. LevelDebug - - // Describes messages likely to be of interest to someone monitoring a - // program. LevelInfo - - // Describes messages indicating hazardous situations. LevelWarn - - // Describes messages indicating serious errors. LevelError - - // Describes messages indicating fatal errors. LevelCritical ) @@ -63,13 +44,6 @@ func (e Level) String() string { // Log represents the imported function "log". // -// Emit a log message. -// -// A log message has a `level` describing what kind of message is being -// sent, a context, which is an uninterpreted string meant to help -// consumers group similar messages, and a string containing the message -// text. -// // log: func(level: level, context: string, message: string) // //go:nosplit @@ -81,6 +55,6 @@ func Log(level Level, context string, message string) { return } -//go:wasmimport wasi:logging/logging log +//go:wasmimport wasi:logging/logging@0.1.0-draft log //go:noescape func wasmimport_Log(level0 uint32, context0 *uint8, context1 uint32, message0 *uint8, message1 uint32) diff --git a/_examples/http-server/gen/wasmcloud/bus/lattice/lattice.wit.go b/_examples/http-server/gen/wasmcloud/bus/lattice/lattice.wit.go index 9e04515..5239e79 100644 --- a/_examples/http-server/gen/wasmcloud/bus/lattice/lattice.wit.go +++ b/_examples/http-server/gen/wasmcloud/bus/lattice/lattice.wit.go @@ -9,8 +9,6 @@ import ( // CallTargetInterface represents the imported resource "wasmcloud:bus/lattice@1.0.0#call-target-interface". // -// Interface target. This represents an interface, which can be selected by `set-link-name`. -// // resource call-target-interface type CallTargetInterface cm.Resource @@ -49,12 +47,6 @@ func wasmimport_NewCallTargetInterface(namespace0 *uint8, namespace1 uint32, pac // SetLinkName represents the imported function "set-link-name". // -// Set an optional link name to use for all interfaces specified. This is advanced -// functionality only available within wasmcloud and, as such, is exposed here as -// part of the -// wasmcloud:bus package. This is used when you are linking multiple of the same interfaces -// (i.e. a keyvalue implementation for caching and another one for secrets) to a component -// // set-link-name: func(name: string, interfaces: list) // //go:nosplit diff --git a/_examples/http-server/gen/wasmcloud/messaging/consumer/abi.go b/_examples/http-server/gen/wasmcloud/messaging/consumer/abi.go deleted file mode 100644 index 70f60eb..0000000 --- a/_examples/http-server/gen/wasmcloud/messaging/consumer/abi.go +++ /dev/null @@ -1,32 +0,0 @@ -// Code generated by wit-bindgen-go. DO NOT EDIT. - -package consumer - -import ( - "github.com/bytecodealliance/wasm-tools-go/cm" - "github.com/wasmCloud/component-sdk-go/_examples/http-server/gen/wasmcloud/messaging/types" - "unsafe" -) - -// BrokerMessageShape is used for storage in variant or result types. -type BrokerMessageShape struct { - shape [unsafe.Sizeof(types.BrokerMessage{})]byte -} - -func lower_OptionString(v cm.Option[string]) (f0 uint32, f1 *uint8, f2 uint32) { - some := v.Some() - if some != nil { - f0 = 1 - v1, v2 := cm.LowerString(*some) - f1 = (*uint8)(v1) - f2 = (uint32)(v2) - } - return -} - -func lower_BrokerMessage(v types.BrokerMessage) (f0 *uint8, f1 uint32, f2 *uint8, f3 uint32, f4 uint32, f5 *uint8, f6 uint32) { - f0, f1 = cm.LowerString(v.Subject) - f2, f3 = cm.LowerList(v.Body) - f4, f5, f6 = lower_OptionString(v.ReplyTo) - return -} diff --git a/_examples/http-server/gen/wasmcloud/messaging/consumer/consumer.wit.go b/_examples/http-server/gen/wasmcloud/messaging/consumer/consumer.wit.go deleted file mode 100644 index 3d360f4..0000000 --- a/_examples/http-server/gen/wasmcloud/messaging/consumer/consumer.wit.go +++ /dev/null @@ -1,46 +0,0 @@ -// Code generated by wit-bindgen-go. DO NOT EDIT. - -// Package consumer represents the imported interface "wasmcloud:messaging/consumer@0.2.0". -package consumer - -import ( - "github.com/bytecodealliance/wasm-tools-go/cm" - "github.com/wasmCloud/component-sdk-go/_examples/http-server/gen/wasmcloud/messaging/types" -) - -// Request represents the imported function "request". -// -// Perform a request operation on a subject -// -// request: func(subject: string, body: list, timeout-ms: u32) -> result -// -//go:nosplit -func Request(subject string, body cm.List[uint8], timeoutMs uint32) (result cm.Result[BrokerMessageShape, types.BrokerMessage, string]) { - subject0, subject1 := cm.LowerString(subject) - body0, body1 := cm.LowerList(body) - timeoutMs0 := (uint32)(timeoutMs) - wasmimport_Request((*uint8)(subject0), (uint32)(subject1), (*uint8)(body0), (uint32)(body1), (uint32)(timeoutMs0), &result) - return -} - -//go:wasmimport wasmcloud:messaging/consumer@0.2.0 request -//go:noescape -func wasmimport_Request(subject0 *uint8, subject1 uint32, body0 *uint8, body1 uint32, timeoutMs0 uint32, result *cm.Result[BrokerMessageShape, types.BrokerMessage, string]) - -// Publish represents the imported function "publish". -// -// Publish a message to a subject without awaiting a response -// -// publish: func(msg: broker-message) -> result<_, string> -// -//go:nosplit -func Publish(msg types.BrokerMessage) (result cm.Result[string, struct{}, string]) { - msg0, msg1, msg2, msg3, msg4, msg5, msg6 := lower_BrokerMessage(msg) - wasmimport_Publish((*uint8)(msg0), (uint32)(msg1), (*uint8)(msg2), (uint32)(msg3), (uint32)(msg4), (*uint8)(msg5), (uint32)(msg6), &result) - return -} - -//go:wasmimport wasmcloud:messaging/consumer@0.2.0 publish -//go:noescape -func wasmimport_Publish(msg0 *uint8, msg1 uint32, msg2 *uint8, msg3 uint32, msg4 uint32, msg5 *uint8, msg6 uint32, result *cm.Result[string, struct{}, string]) diff --git a/_examples/http-server/gen/wasmcloud/messaging/consumer/empty.s b/_examples/http-server/gen/wasmcloud/messaging/consumer/empty.s deleted file mode 100644 index 5444f20..0000000 --- a/_examples/http-server/gen/wasmcloud/messaging/consumer/empty.s +++ /dev/null @@ -1,3 +0,0 @@ -// This file exists for testing this package without WebAssembly, -// allowing empty function bodies with a //go:wasmimport directive. -// See https://pkg.go.dev/cmd/compile for more information. diff --git a/_examples/http-server/gen/wasmcloud/messaging/types/types.wit.go b/_examples/http-server/gen/wasmcloud/messaging/types/types.wit.go deleted file mode 100644 index d7cbb6b..0000000 --- a/_examples/http-server/gen/wasmcloud/messaging/types/types.wit.go +++ /dev/null @@ -1,26 +0,0 @@ -// Code generated by wit-bindgen-go. DO NOT EDIT. - -// Package types represents the imported interface "wasmcloud:messaging/types@0.2.0". -// -// Types common to message broker interactions -package types - -import ( - "github.com/bytecodealliance/wasm-tools-go/cm" -) - -// BrokerMessage represents the record "wasmcloud:messaging/types@0.2.0#broker-message". -// -// A message sent to or received from a broker -// -// record broker-message { -// subject: string, -// body: list, -// reply-to: option, -// } -type BrokerMessage struct { - _ cm.HostLayout - Subject string - Body cm.List[uint8] - ReplyTo cm.Option[string] -} diff --git a/_examples/http-server/gen/wasmcloud/secrets/reveal/reveal.wit.go b/_examples/http-server/gen/wasmcloud/secrets/reveal/reveal.wit.go index b209d91..b944ad9 100644 --- a/_examples/http-server/gen/wasmcloud/secrets/reveal/reveal.wit.go +++ b/_examples/http-server/gen/wasmcloud/secrets/reveal/reveal.wit.go @@ -10,9 +10,6 @@ import ( // Reveal represents the imported function "reveal". // -// Reveals the value of a secret to the caller. -// This lets you easily audit your code to discover where secrets are being used. -// // reveal: func(s: borrow) -> secret-value // //go:nosplit diff --git a/_examples/http-server/gen/wasmcloud/secrets/store/store.wit.go b/_examples/http-server/gen/wasmcloud/secrets/store/store.wit.go index 09dbab5..57ddee2 100644 --- a/_examples/http-server/gen/wasmcloud/secrets/store/store.wit.go +++ b/_examples/http-server/gen/wasmcloud/secrets/store/store.wit.go @@ -9,8 +9,6 @@ import ( // SecretsError represents the variant "wasmcloud:secrets/store@0.1.0-draft#secrets-error". // -// An error type that encapsulates the different errors that can occur fetching secrets -// // variant secrets-error { // upstream(string), // io(string), @@ -19,11 +17,6 @@ import ( type SecretsError cm.Variant[uint8, string, string] // SecretsErrorUpstream returns a [SecretsError] of case "upstream". -// -// This indicates an error from an "upstream" secrets source. -// As this could be almost _anything_ (such as Vault, Kubernetes Secrets, KeyValue -// buckets, etc), -// the error message is a string. func SecretsErrorUpstream(data string) SecretsError { return cm.New[SecretsError](0, data) } @@ -34,14 +27,6 @@ func (self *SecretsError) Upstream() *string { } // SecretsErrorIO returns a [SecretsError] of case "io". -// -// This indicates an error from an I/O operation. -// As this could be almost _anything_ (such as a file read, network connection, etc), -// the error message is a string. -// Depending on how this ends up being consumed, -// we may consider moving this to use the `wasi:io/error` type instead. -// For simplicity right now in supporting multiple implementations, it is being left -// as a string. func SecretsErrorIO(data string) SecretsError { return cm.New[SecretsError](1, data) } @@ -52,10 +37,6 @@ func (self *SecretsError) IO() *string { } // SecretsErrorNotFound returns a [SecretsError] of case "not-found". -// -// This indicates that the secret was not found. Generally "not found" errors will -// be handled by the upstream secrets backend, but there are cases where the host -// may need to return this error. func SecretsErrorNotFound() SecretsError { var data struct{} return cm.New[SecretsError](2, data) @@ -68,9 +49,6 @@ func (self *SecretsError) NotFound() bool { // SecretValue represents the variant "wasmcloud:secrets/store@0.1.0-draft#secret-value". // -// A secret value can be either a string or a byte array, which lets you -// store binary data as a secret. -// // variant secret-value { // %string(string), // bytes(list), @@ -78,8 +56,6 @@ func (self *SecretsError) NotFound() bool { type SecretValue cm.Variant[uint8, string, cm.List[uint8]] // SecretValueString returns a [SecretValue] of case "string". -// -// A string value func SecretValueString(data string) SecretValue { return cm.New[SecretValue](0, data) } @@ -90,8 +66,6 @@ func (self *SecretValue) String() *string { } // SecretValueBytes returns a [SecretValue] of case "bytes". -// -// A byte array value func SecretValueBytes(data cm.List[uint8]) SecretValue { return cm.New[SecretValue](1, data) } @@ -103,11 +77,6 @@ func (self *SecretValue) Bytes() *cm.List[uint8] { // Secret represents the imported resource "wasmcloud:secrets/store@0.1.0-draft#secret". // -// A secret is a resource that can only be borrowed. This allows you to -// pass around handles to secrets and not reveal the values until a -// component needs them. -// You need to use the reveal interface to get the value. -// // resource secret type Secret cm.Resource @@ -128,8 +97,6 @@ func wasmimport_SecretResourceDrop(self0 uint32) // Get represents the imported function "get". // -// Gets a single opaque secrets value set at the given key if it exists -// // get: func(key: string) -> result // //go:nosplit diff --git a/_examples/http-server/wasmcloud.toml b/_examples/http-server/wasmcloud.toml index d8f1dd4..b6e70bc 100644 --- a/_examples/http-server/wasmcloud.toml +++ b/_examples/http-server/wasmcloud.toml @@ -1,9 +1,10 @@ name = "http_server" -language = "tinygo" +language = "other" type = "component" version = "0.1.0" [component] +build_command = "tinygo build -target=wasip2 --wit-package ./wit --wit-world example -o build/http_server.wasm main.go" wit_world = "example" wasm_target = "wasm32-wasi-preview2" destination = "build/http_server_s.wasm" diff --git a/_examples/http-server/wit/deps.lock b/_examples/http-server/wit/deps.lock deleted file mode 100644 index 22c6b1d..0000000 --- a/_examples/http-server/wit/deps.lock +++ /dev/null @@ -1,49 +0,0 @@ -["wasi-cli-0.2.0"] -sha256 = "13b041ec2314d48107929c335df3ca81b1bb0a35bfec38e206a59162a4c209cd" -sha512 = "725886b3244f4894a1121cd66e1bea0775964ca1b3811be3ae43a4c692cb7d5f27d851072637b8ec64bd5e71e85bb5e860f8331fe8f77353d9d7868ce1d72a8e" - -["wasi-clocks-0.2.0"] -sha256 = "daf7133b4f60ba73185449327dd48d2b324799db858ab463bcd32d954a9ff394" -sha512 = "5992296c504aebfad359ab1676bba63b5d22e33112c240a437ee733433aa50552144242f8998180ff36f0da56e5f65691dbb1898331ce878bd9fa439b8909742" - -["wasi-config-0.2.0-draft"] -sha256 = "5c6b4a10b21fbab2397d579c6f8bf8a484160dfdf20b6343080b0bad097849a3" -sha512 = "d3cf5fd1d12590aefd561330337870e2e468c84753c11e19bccd165c916a696722cc29af3572984e6256088b6e683763675d5b8cec3d195f9e2961fe405629b8" - -["wasi-filesystem-0.2.0"] -sha256 = "739d4fc43cd51421382e5d1a0cf643a2985691d480ae75600cdcd382665b3e55" -sha512 = "67f61ef46833060cc4d7a258da7a82024830762c4ecfd522d32bdc5e6bf4df26043f9a8c13ea38b191df180176826aa7b163816618a939015efff5987557dc16" - -["wasi-http-0.2.0"] -sha256 = "f22b6f3b3c12289e522041067b0a2db99a27c181e9ef3ed36930aa0286232d63" -sha512 = "f9b38ef4f58cb9e069b51ee45df52ce6ca9af0a9774c3d09dc99598f36afcd902557221be2f1a6bcccdecb880e4d7436b533e03f4b9250d5b0e1466afd3a62ce" - -["wasi-io-0.2.0"] -sha256 = "0bc0cc0d474a5c4f3c2e2092664c4e235a0390e5d206d3bdc4007488d9d5e00f" -sha512 = "497f37742a94ca32eaa77dce5d9144682e743b30c2d702d37726d43735a25fa9d421afbf5945da158c0e46a0adf941f607b0e0f5d26494af52f021265f78329c" - -["wasi-logging-0.1.0-draft"] -sha256 = "619c4d2336045bab9129e5af568decd5e963006291d496a23cddf796f3a61c2e" -sha512 = "c163aa6f4e566cb85d373f25e590e552fc2530fdf50946c38d305e9f2cd189d86ff8540d163e42acd2cebbe3cef98967cd1efb14ce196da132fcf6caf4f6155d" - -["wasi-random-0.2.0"] -sha256 = "efcdf344435591830f5fbed67a2c215bba112893518a8ef4c7234a4796b8dbcd" -sha512 = "c78a10e9b6401116eac703430609a849854a27a4ff3bc7737d514536a9c16a2fc206a35f8f96b7c40f254d6a66e6873361970754fa69b856025886cd462a2832" - -["wasi-sockets-0.2.0"] -sha256 = "aa3c13fee8c788c95de5a917a54d776d5adb2afd90a77224864941ce27c5d471" -sha512 = "4e3be65dd127ccd4bfa1af8f86fea556d6e22d25e4b637f9b9ebf66ae1f6331f904edff042adc9be16fec511e3295170e6c13516715d2cd3e5aaffbd96158fa9" - -["wasmcloud-bus-1.0.0"] -sha256 = "f823b5c8293cb585092107120139c34c405f57362761a133d543f5d68c65d591" -sha512 = "12e6aa4eac6139b60ea72cc7b6ded6ac9b144b15557be9f2329b6e84b5a161d8f6344674afd0526a883cb61e34c06fee9dbadbaee1d783cd957bc43dab4bfc2d" - -[wasmcloud-component-go] -path = "../../../wit" -sha256 = "995bd9ad8d0523f04480196b6746da80ddc5daf2e3be6b126c224d1fe9bda103" -sha512 = "e5af5fbb4242fc151d83ce86fa05d54274eb33a42b8856453659a1191d5142cd3792c914df8db330a9f692089974bbd1e6d3695142a8e5416d10b5b856839ce9" -deps = ["wasi-cli-0.2.0", "wasi-clocks-0.2.0", "wasi-config-0.2.0-draft", "wasi-filesystem-0.2.0", "wasi-http-0.2.0", "wasi-io-0.2.0", "wasi-logging-0.1.0-draft", "wasi-random-0.2.0", "wasi-sockets-0.2.0", "wasmcloud-bus-1.0.0", "wasmcloud-secrets-0.1.0-draft"] - -["wasmcloud-secrets-0.1.0-draft"] -sha256 = "8e0ec182ea30a420744887cdb42660bf703194eaf8ecf2f0dc0efc4159247ea4" -sha512 = "f0037028e47d307b1551068fcdb9249a0a1cd3d7d1e8d99f33713ec1ee22bc5242fe63155a9f7aaa0492640df2c79ea40ed0839e2add222c069787b59c09f1b3" diff --git a/_examples/http-server/wit/deps.toml b/_examples/http-server/wit/deps.toml deleted file mode 100644 index 4d1db6f..0000000 --- a/_examples/http-server/wit/deps.toml +++ /dev/null @@ -1 +0,0 @@ -wasmcloud-component-go = "../../../wit" diff --git a/_examples/http-server/wit/deps/wasi-cli-0.2.0/package.wit b/_examples/http-server/wit/deps/wasi-cli-0.2.0/package.wit index 0a2737b..f8f1976 100644 --- a/_examples/http-server/wit/deps/wasi-cli-0.2.0/package.wit +++ b/_examples/http-server/wit/deps/wasi-cli-0.2.0/package.wit @@ -1,32 +1,15 @@ package wasi:cli@0.2.0; -interface environment { - /// Get the POSIX-style environment variables. - /// - /// Each environment variable is provided as a pair of string variable names - /// and string value. - /// - /// Morally, these are a value import, but until value imports are available - /// in the component model, this import function should return the same - /// values each time it is called. - get-environment: func() -> list>; - - /// Get the POSIX-style arguments to the program. - get-arguments: func() -> list; +interface stdout { + use wasi:io/streams@0.2.0.{output-stream}; - /// Return a path that programs should use as their initial current working - /// directory, interpreting `.` as shorthand for this. - initial-cwd: func() -> option; + get-stdout: func() -> output-stream; } -interface exit { - /// Exit the current instance and any linked instances. - exit: func(status: result); -} +interface stderr { + use wasi:io/streams@0.2.0.{output-stream}; -interface run { - /// Run the program. - run: func() -> result; + get-stderr: func() -> output-stream; } interface stdin { @@ -35,125 +18,41 @@ interface stdin { get-stdin: func() -> input-stream; } -interface stdout { - use wasi:io/streams@0.2.0.{output-stream}; +interface environment { + get-environment: func() -> list>; - get-stdout: func() -> output-stream; -} + get-arguments: func() -> list; -interface stderr { - use wasi:io/streams@0.2.0.{output-stream}; + initial-cwd: func() -> option; +} - get-stderr: func() -> output-stream; +interface exit { + exit: func(status: result); } -/// Terminal input. -/// -/// In the future, this may include functions for disabling echoing, -/// disabling input buffering so that keyboard events are sent through -/// immediately, querying supported features, and so on. interface terminal-input { - /// The input side of a terminal. resource terminal-input; } -/// Terminal output. -/// -/// In the future, this may include functions for querying the terminal -/// size, being notified of terminal size changes, querying supported -/// features, and so on. interface terminal-output { - /// The output side of a terminal. resource terminal-output; } -/// An interface providing an optional `terminal-input` for stdin as a -/// link-time authority. interface terminal-stdin { use terminal-input.{terminal-input}; - /// If stdin is connected to a terminal, return a `terminal-input` handle - /// allowing further interaction with it. get-terminal-stdin: func() -> option; } -/// An interface providing an optional `terminal-output` for stdout as a -/// link-time authority. interface terminal-stdout { use terminal-output.{terminal-output}; - /// If stdout is connected to a terminal, return a `terminal-output` handle - /// allowing further interaction with it. get-terminal-stdout: func() -> option; } -/// An interface providing an optional `terminal-output` for stderr as a -/// link-time authority. interface terminal-stderr { use terminal-output.{terminal-output}; - /// If stderr is connected to a terminal, return a `terminal-output` handle - /// allowing further interaction with it. get-terminal-stderr: func() -> option; } -world imports { - import environment; - import exit; - import wasi:io/error@0.2.0; - import wasi:io/poll@0.2.0; - import wasi:io/streams@0.2.0; - import stdin; - import stdout; - import stderr; - import terminal-input; - import terminal-output; - import terminal-stdin; - import terminal-stdout; - import terminal-stderr; - import wasi:clocks/monotonic-clock@0.2.0; - import wasi:clocks/wall-clock@0.2.0; - import wasi:filesystem/types@0.2.0; - import wasi:filesystem/preopens@0.2.0; - import wasi:sockets/network@0.2.0; - import wasi:sockets/instance-network@0.2.0; - import wasi:sockets/udp@0.2.0; - import wasi:sockets/udp-create-socket@0.2.0; - import wasi:sockets/tcp@0.2.0; - import wasi:sockets/tcp-create-socket@0.2.0; - import wasi:sockets/ip-name-lookup@0.2.0; - import wasi:random/random@0.2.0; - import wasi:random/insecure@0.2.0; - import wasi:random/insecure-seed@0.2.0; -} -world command { - import environment; - import exit; - import wasi:io/error@0.2.0; - import wasi:io/poll@0.2.0; - import wasi:io/streams@0.2.0; - import stdin; - import stdout; - import stderr; - import terminal-input; - import terminal-output; - import terminal-stdin; - import terminal-stdout; - import terminal-stderr; - import wasi:clocks/monotonic-clock@0.2.0; - import wasi:clocks/wall-clock@0.2.0; - import wasi:filesystem/types@0.2.0; - import wasi:filesystem/preopens@0.2.0; - import wasi:sockets/network@0.2.0; - import wasi:sockets/instance-network@0.2.0; - import wasi:sockets/udp@0.2.0; - import wasi:sockets/udp-create-socket@0.2.0; - import wasi:sockets/tcp@0.2.0; - import wasi:sockets/tcp-create-socket@0.2.0; - import wasi:sockets/ip-name-lookup@0.2.0; - import wasi:random/random@0.2.0; - import wasi:random/insecure@0.2.0; - import wasi:random/insecure-seed@0.2.0; - - export run; -} diff --git a/_examples/http-server/wit/deps/wasi-config-0.2.0-draft/package.wit b/_examples/http-server/wit/deps/wasi-config-0.2.0-draft/package.wit index 7065b9b..d514554 100644 --- a/_examples/http-server/wit/deps/wasi-config-0.2.0-draft/package.wit +++ b/_examples/http-server/wit/deps/wasi-config-0.2.0-draft/package.wit @@ -1,28 +1,13 @@ package wasi:config@0.2.0-draft; interface runtime { - /// An error type that encapsulates the different errors that can occur fetching config variant config-error { - /// This indicates an error from an "upstream" config source. - /// As this could be almost _anything_ (such as Vault, Kubernetes ConfigMaps, KeyValue buckets, etc), - /// the error message is a string. upstream(string), - /// This indicates an error from an I/O operation. - /// As this could be almost _anything_ (such as a file read, network connection, etc), - /// the error message is a string. - /// Depending on how this ends up being consumed, - /// we may consider moving this to use the `wasi:io/error` type instead. - /// For simplicity right now in supporting multiple implementations, it is being left as a string. io(string), } - /// Gets a single opaque config value set at the given key if it exists get: func(key: string) -> result, config-error>; - /// Gets a list of all set config data get-all: func() -> result>, config-error>; } -world imports { - import runtime; -} diff --git a/_examples/http-server/wit/deps/wasi-io-0.2.0/package.wit b/_examples/http-server/wit/deps/wasi-io-0.2.0/package.wit index 1840029..962734d 100644 --- a/_examples/http-server/wit/deps/wasi-io-0.2.0/package.wit +++ b/_examples/http-server/wit/deps/wasi-io-0.2.0/package.wit @@ -1,11 +1,5 @@ package wasi:io@0.2.0; -interface error { - resource error { - to-debug-string: func() -> string; - } -} - interface poll { resource pollable { ready: func() -> bool; @@ -15,6 +9,12 @@ interface poll { poll: func(in: list>) -> list; } +interface error { + resource error { + to-debug-string: func() -> string; + } +} + interface streams { use error.{error}; use poll.{pollable}; diff --git a/_examples/http-server/wit/deps/wasi-logging-0.1.0-draft/package.wit b/_examples/http-server/wit/deps/wasi-logging-0.1.0-draft/package.wit index df4e8de..70349a7 100644 --- a/_examples/http-server/wit/deps/wasi-logging-0.1.0-draft/package.wit +++ b/_examples/http-server/wit/deps/wasi-logging-0.1.0-draft/package.wit @@ -1,36 +1,15 @@ -package wasi:logging; +package wasi:logging@0.1.0-draft; -/// WASI Logging is a logging API intended to let users emit log messages with -/// simple priority levels and context values. interface logging { - /// A log level, describing a kind of message. enum level { - /// Describes messages about the values of variables and the flow of - /// control within a program. trace, - /// Describes messages likely to be of interest to someone debugging a - /// program. debug, - /// Describes messages likely to be of interest to someone monitoring a - /// program. info, - /// Describes messages indicating hazardous situations. warn, - /// Describes messages indicating serious errors. error, - /// Describes messages indicating fatal errors. critical, } - /// Emit a log message. - /// - /// A log message has a `level` describing what kind of message is being - /// sent, a context, which is an uninterpreted string meant to help - /// consumers group similar messages, and a string containing the message - /// text. log: func(level: level, context: string, message: string); } -world imports { - import logging; -} diff --git a/_examples/http-server/wit/deps/wasmcloud-bus-1.0.0/package.wit b/_examples/http-server/wit/deps/wasmcloud-bus-1.0.0/package.wit index 1008a6f..2a7cd93 100644 --- a/_examples/http-server/wit/deps/wasmcloud-bus-1.0.0/package.wit +++ b/_examples/http-server/wit/deps/wasmcloud-bus-1.0.0/package.wit @@ -1,15 +1,10 @@ package wasmcloud:bus@1.0.0; interface lattice { - /// Interface target. This represents an interface, which can be selected by `set-link-name`. resource call-target-interface { constructor(namespace: string, %package: string, %interface: string); } - /// Set an optional link name to use for all interfaces specified. This is advanced - /// functionality only available within wasmcloud and, as such, is exposed here as part of the - /// wasmcloud:bus package. This is used when you are linking multiple of the same interfaces - /// (i.e. a keyvalue implementation for caching and another one for secrets) to a component set-link-name: func(name: string, interfaces: list); } diff --git a/_examples/http-server/wit/deps/wasmcloud-component-go-0.1.0/package.wit b/_examples/http-server/wit/deps/wasmcloud-component-go-0.1.0/package.wit new file mode 100644 index 0000000..75caf04 --- /dev/null +++ b/_examples/http-server/wit/deps/wasmcloud-component-go-0.1.0/package.wit @@ -0,0 +1,85 @@ +package wasmcloud:component-go@0.1.0; + +world exports { + import wasi:io/poll@0.2.0; + import wasi:clocks/monotonic-clock@0.2.0; + import wasi:io/error@0.2.0; + import wasi:io/streams@0.2.0; + import wasi:http/types@0.2.0; + + export wasi:http/incoming-handler@0.2.0; +} +world imports { + import wasi:logging/logging@0.1.0-draft; + import wasi:config/runtime@0.2.0-draft; + import wasi:io/poll@0.2.0; + import wasi:clocks/monotonic-clock@0.2.0; + import wasi:io/error@0.2.0; + import wasi:io/streams@0.2.0; + import wasi:http/types@0.2.0; + import wasi:http/outgoing-handler@0.2.0; + import wasmcloud:bus/lattice@1.0.0; + import wasmcloud:secrets/store@0.1.0-draft; + import wasmcloud:secrets/reveal@0.1.0-draft; + import wasi:cli/environment@0.2.0; + import wasi:cli/exit@0.2.0; + import wasi:cli/stdin@0.2.0; + import wasi:cli/stdout@0.2.0; + import wasi:cli/stderr@0.2.0; + import wasi:cli/terminal-input@0.2.0; + import wasi:cli/terminal-output@0.2.0; + import wasi:cli/terminal-stdin@0.2.0; + import wasi:cli/terminal-stdout@0.2.0; + import wasi:cli/terminal-stderr@0.2.0; + import wasi:clocks/wall-clock@0.2.0; + import wasi:filesystem/types@0.2.0; + import wasi:filesystem/preopens@0.2.0; + import wasi:sockets/network@0.2.0; + import wasi:sockets/instance-network@0.2.0; + import wasi:sockets/udp@0.2.0; + import wasi:sockets/udp-create-socket@0.2.0; + import wasi:sockets/tcp@0.2.0; + import wasi:sockets/tcp-create-socket@0.2.0; + import wasi:sockets/ip-name-lookup@0.2.0; + import wasi:random/random@0.2.0; + import wasi:random/insecure@0.2.0; + import wasi:random/insecure-seed@0.2.0; +} +world sdk { + import wasi:io/poll@0.2.0; + import wasi:clocks/monotonic-clock@0.2.0; + import wasi:io/error@0.2.0; + import wasi:io/streams@0.2.0; + import wasi:http/types@0.2.0; + import wasi:logging/logging@0.1.0-draft; + import wasi:config/runtime@0.2.0-draft; + import wasi:http/outgoing-handler@0.2.0; + import wasmcloud:bus/lattice@1.0.0; + import wasmcloud:secrets/store@0.1.0-draft; + import wasmcloud:secrets/reveal@0.1.0-draft; + import wasi:cli/environment@0.2.0; + import wasi:cli/exit@0.2.0; + import wasi:cli/stdin@0.2.0; + import wasi:cli/stdout@0.2.0; + import wasi:cli/stderr@0.2.0; + import wasi:cli/terminal-input@0.2.0; + import wasi:cli/terminal-output@0.2.0; + import wasi:cli/terminal-stdin@0.2.0; + import wasi:cli/terminal-stdout@0.2.0; + import wasi:cli/terminal-stderr@0.2.0; + import wasi:clocks/wall-clock@0.2.0; + import wasi:filesystem/types@0.2.0; + import wasi:filesystem/preopens@0.2.0; + import wasi:sockets/network@0.2.0; + import wasi:sockets/instance-network@0.2.0; + import wasi:sockets/udp@0.2.0; + import wasi:sockets/udp-create-socket@0.2.0; + import wasi:sockets/tcp@0.2.0; + import wasi:sockets/tcp-create-socket@0.2.0; + import wasi:sockets/ip-name-lookup@0.2.0; + import wasi:random/random@0.2.0; + import wasi:random/insecure@0.2.0; + import wasi:random/insecure-seed@0.2.0; + + export wasi:http/incoming-handler@0.2.0; +} diff --git a/_examples/http-server/wit/deps/wasmcloud-component-go/world.wit b/_examples/http-server/wit/deps/wasmcloud-component-go/world.wit deleted file mode 100644 index f881ff8..0000000 --- a/_examples/http-server/wit/deps/wasmcloud-component-go/world.wit +++ /dev/null @@ -1,26 +0,0 @@ -package wasmcloud:component-go@0.1.0; - -world exports { - // wasi - export wasi:http/incoming-handler@0.2.0; -} - -world imports { - // tinygo - include wasi:cli/imports@0.2.0; - - // wasi - import wasi:logging/logging; - import wasi:config/runtime@0.2.0-draft; - import wasi:http/outgoing-handler@0.2.0; - - // wasmcloud - import wasmcloud:bus/lattice@1.0.0; - import wasmcloud:secrets/store@0.1.0-draft; - import wasmcloud:secrets/reveal@0.1.0-draft; -} - -world sdk { - include exports; - include imports; -} diff --git a/_examples/http-server/wit/deps/wasmcloud-secrets-0.1.0-draft/package.wit b/_examples/http-server/wit/deps/wasmcloud-secrets-0.1.0-draft/package.wit index a431b95..3a93ea4 100644 --- a/_examples/http-server/wit/deps/wasmcloud-secrets-0.1.0-draft/package.wit +++ b/_examples/http-server/wit/deps/wasmcloud-secrets-0.1.0-draft/package.wit @@ -1,52 +1,25 @@ -/// This WIT interface powers secret support in wasmCloud -/// -/// See RFC #2190 https://github.com/wasmCloud/wasmCloud/issues/2190 package wasmcloud:secrets@0.1.0-draft; interface store { - /// An error type that encapsulates the different errors that can occur fetching secrets variant secrets-error { - /// This indicates an error from an "upstream" secrets source. - /// As this could be almost _anything_ (such as Vault, Kubernetes Secrets, KeyValue buckets, etc), - /// the error message is a string. upstream(string), - /// This indicates an error from an I/O operation. - /// As this could be almost _anything_ (such as a file read, network connection, etc), - /// the error message is a string. - /// Depending on how this ends up being consumed, - /// we may consider moving this to use the `wasi:io/error` type instead. - /// For simplicity right now in supporting multiple implementations, it is being left as a string. io(string), - /// This indicates that the secret was not found. Generally "not found" errors will - /// be handled by the upstream secrets backend, but there are cases where the host - /// may need to return this error. not-found, } - /// A secret value can be either a string or a byte array, which lets you - /// store binary data as a secret. variant secret-value { - /// A string value %string(string), - /// A byte array value bytes(list), } - /// A secret is a resource that can only be borrowed. This allows you to - /// pass around handles to secrets and not reveal the values until a - /// component needs them. - /// You need to use the reveal interface to get the value. resource secret; - /// Gets a single opaque secrets value set at the given key if it exists get: func(key: string) -> result; } interface reveal { use store.{secret, secret-value}; - /// Reveals the value of a secret to the caller. - /// This lets you easily audit your code to discover where secrets are being used. reveal: func(s: borrow) -> secret-value; } diff --git a/_examples/http-server/wkg.lock b/_examples/http-server/wkg.lock new file mode 100644 index 0000000..e830db8 --- /dev/null +++ b/_examples/http-server/wkg.lock @@ -0,0 +1,21 @@ +# This file is automatically generated. +# It is not intended for manual editing. +version = 1 + +[[packages]] +name = "wasi:http" +registry = "wasi.dev" + +[[packages.versions]] +requirement = "=0.2.0" +version = "0.2.0" +digest = "sha256:5a568e6e2d60c1ce51220e1833cdd5b88db9f615720edc762a9b4a6f36b383bd" + +[[packages]] +name = "wasmcloud:component-go" +registry = "wasmcloud.com" + +[[packages.versions]] +requirement = "=0.1.0" +version = "0.1.0" +digest = "sha256:de3e9af7dedd0d9e882f68f1bee533c7af9c6a1947eb40cbf1ef6163b7d41784" diff --git a/_examples/invoke/gen/wasi/cli/environment/environment.wit.go b/_examples/invoke/gen/wasi/cli/environment/environment.wit.go index 48e066d..d338d5f 100644 --- a/_examples/invoke/gen/wasi/cli/environment/environment.wit.go +++ b/_examples/invoke/gen/wasi/cli/environment/environment.wit.go @@ -9,15 +9,6 @@ import ( // GetEnvironment represents the imported function "get-environment". // -// Get the POSIX-style environment variables. -// -// Each environment variable is provided as a pair of string variable names -// and string value. -// -// Morally, these are a value import, but until value imports are available -// in the component model, this import function should return the same -// values each time it is called. -// // get-environment: func() -> list> // //go:nosplit @@ -32,8 +23,6 @@ func wasmimport_GetEnvironment(result *cm.List[[2]string]) // GetArguments represents the imported function "get-arguments". // -// Get the POSIX-style arguments to the program. -// // get-arguments: func() -> list // //go:nosplit @@ -48,9 +37,6 @@ func wasmimport_GetArguments(result *cm.List[string]) // InitialCWD represents the imported function "initial-cwd". // -// Return a path that programs should use as their initial current working -// directory, interpreting `.` as shorthand for this. -// // initial-cwd: func() -> option // //go:nosplit diff --git a/_examples/invoke/gen/wasi/cli/exit/exit.wit.go b/_examples/invoke/gen/wasi/cli/exit/exit.wit.go index 3fccd93..f101203 100644 --- a/_examples/invoke/gen/wasi/cli/exit/exit.wit.go +++ b/_examples/invoke/gen/wasi/cli/exit/exit.wit.go @@ -9,8 +9,6 @@ import ( // Exit represents the imported function "exit". // -// Exit the current instance and any linked instances. -// // exit: func(status: result) // //go:nosplit diff --git a/_examples/invoke/gen/wasi/cli/terminal-input/terminal-input.wit.go b/_examples/invoke/gen/wasi/cli/terminal-input/terminal-input.wit.go index e0114e0..e0c9780 100644 --- a/_examples/invoke/gen/wasi/cli/terminal-input/terminal-input.wit.go +++ b/_examples/invoke/gen/wasi/cli/terminal-input/terminal-input.wit.go @@ -1,12 +1,6 @@ // Code generated by wit-bindgen-go. DO NOT EDIT. // Package terminalinput represents the imported interface "wasi:cli/terminal-input@0.2.0". -// -// Terminal input. -// -// In the future, this may include functions for disabling echoing, -// disabling input buffering so that keyboard events are sent through -// immediately, querying supported features, and so on. package terminalinput import ( @@ -15,8 +9,6 @@ import ( // TerminalInput represents the imported resource "wasi:cli/terminal-input@0.2.0#terminal-input". // -// The input side of a terminal. -// // resource terminal-input type TerminalInput cm.Resource diff --git a/_examples/invoke/gen/wasi/cli/terminal-output/terminal-output.wit.go b/_examples/invoke/gen/wasi/cli/terminal-output/terminal-output.wit.go index a63b0e6..fc6492a 100644 --- a/_examples/invoke/gen/wasi/cli/terminal-output/terminal-output.wit.go +++ b/_examples/invoke/gen/wasi/cli/terminal-output/terminal-output.wit.go @@ -1,12 +1,6 @@ // Code generated by wit-bindgen-go. DO NOT EDIT. // Package terminaloutput represents the imported interface "wasi:cli/terminal-output@0.2.0". -// -// Terminal output. -// -// In the future, this may include functions for querying the terminal -// size, being notified of terminal size changes, querying supported -// features, and so on. package terminaloutput import ( @@ -15,8 +9,6 @@ import ( // TerminalOutput represents the imported resource "wasi:cli/terminal-output@0.2.0#terminal-output". // -// The output side of a terminal. -// // resource terminal-output type TerminalOutput cm.Resource diff --git a/_examples/invoke/gen/wasi/cli/terminal-stderr/terminal-stderr.wit.go b/_examples/invoke/gen/wasi/cli/terminal-stderr/terminal-stderr.wit.go index 575b0db..21c1188 100644 --- a/_examples/invoke/gen/wasi/cli/terminal-stderr/terminal-stderr.wit.go +++ b/_examples/invoke/gen/wasi/cli/terminal-stderr/terminal-stderr.wit.go @@ -1,9 +1,6 @@ // Code generated by wit-bindgen-go. DO NOT EDIT. // Package terminalstderr represents the imported interface "wasi:cli/terminal-stderr@0.2.0". -// -// An interface providing an optional `terminal-output` for stderr as a -// link-time authority. package terminalstderr import ( @@ -13,9 +10,6 @@ import ( // GetTerminalStderr represents the imported function "get-terminal-stderr". // -// If stderr is connected to a terminal, return a `terminal-output` handle -// allowing further interaction with it. -// // get-terminal-stderr: func() -> option // //go:nosplit diff --git a/_examples/invoke/gen/wasi/cli/terminal-stdin/terminal-stdin.wit.go b/_examples/invoke/gen/wasi/cli/terminal-stdin/terminal-stdin.wit.go index 617cad1..1679530 100644 --- a/_examples/invoke/gen/wasi/cli/terminal-stdin/terminal-stdin.wit.go +++ b/_examples/invoke/gen/wasi/cli/terminal-stdin/terminal-stdin.wit.go @@ -1,9 +1,6 @@ // Code generated by wit-bindgen-go. DO NOT EDIT. // Package terminalstdin represents the imported interface "wasi:cli/terminal-stdin@0.2.0". -// -// An interface providing an optional `terminal-input` for stdin as a -// link-time authority. package terminalstdin import ( @@ -13,9 +10,6 @@ import ( // GetTerminalStdin represents the imported function "get-terminal-stdin". // -// If stdin is connected to a terminal, return a `terminal-input` handle -// allowing further interaction with it. -// // get-terminal-stdin: func() -> option // //go:nosplit diff --git a/_examples/invoke/gen/wasi/cli/terminal-stdout/terminal-stdout.wit.go b/_examples/invoke/gen/wasi/cli/terminal-stdout/terminal-stdout.wit.go index 55bb868..4546e17 100644 --- a/_examples/invoke/gen/wasi/cli/terminal-stdout/terminal-stdout.wit.go +++ b/_examples/invoke/gen/wasi/cli/terminal-stdout/terminal-stdout.wit.go @@ -1,9 +1,6 @@ // Code generated by wit-bindgen-go. DO NOT EDIT. // Package terminalstdout represents the imported interface "wasi:cli/terminal-stdout@0.2.0". -// -// An interface providing an optional `terminal-output` for stdout as a -// link-time authority. package terminalstdout import ( @@ -13,9 +10,6 @@ import ( // GetTerminalStdout represents the imported function "get-terminal-stdout". // -// If stdout is connected to a terminal, return a `terminal-output` handle -// allowing further interaction with it. -// // get-terminal-stdout: func() -> option // //go:nosplit diff --git a/_examples/invoke/gen/wasi/config/runtime/runtime.wit.go b/_examples/invoke/gen/wasi/config/runtime/runtime.wit.go index edf169f..65b7b41 100644 --- a/_examples/invoke/gen/wasi/config/runtime/runtime.wit.go +++ b/_examples/invoke/gen/wasi/config/runtime/runtime.wit.go @@ -9,8 +9,6 @@ import ( // ConfigError represents the variant "wasi:config/runtime@0.2.0-draft#config-error". // -// An error type that encapsulates the different errors that can occur fetching config -// // variant config-error { // upstream(string), // io(string), @@ -18,11 +16,6 @@ import ( type ConfigError cm.Variant[uint8, string, string] // ConfigErrorUpstream returns a [ConfigError] of case "upstream". -// -// This indicates an error from an "upstream" config source. -// As this could be almost _anything_ (such as Vault, Kubernetes ConfigMaps, KeyValue -// buckets, etc), -// the error message is a string. func ConfigErrorUpstream(data string) ConfigError { return cm.New[ConfigError](0, data) } @@ -33,14 +26,6 @@ func (self *ConfigError) Upstream() *string { } // ConfigErrorIO returns a [ConfigError] of case "io". -// -// This indicates an error from an I/O operation. -// As this could be almost _anything_ (such as a file read, network connection, etc), -// the error message is a string. -// Depending on how this ends up being consumed, -// we may consider moving this to use the `wasi:io/error` type instead. -// For simplicity right now in supporting multiple implementations, it is being left -// as a string. func ConfigErrorIO(data string) ConfigError { return cm.New[ConfigError](1, data) } @@ -52,8 +37,6 @@ func (self *ConfigError) IO() *string { // Get represents the imported function "get". // -// Gets a single opaque config value set at the given key if it exists -// // get: func(key: string) -> result, config-error> // //go:nosplit @@ -69,8 +52,6 @@ func wasmimport_Get(key0 *uint8, key1 uint32, result *cm.Result[OptionStringShap // GetAll represents the imported function "get-all". // -// Gets a list of all set config data -// // get-all: func() -> result>, config-error> // //go:nosplit diff --git a/_examples/invoke/gen/wasi/http/outgoing-handler/outgoing-handler.wit.go b/_examples/invoke/gen/wasi/http/outgoing-handler/outgoing-handler.wit.go index 703cfc2..3889a6a 100644 --- a/_examples/invoke/gen/wasi/http/outgoing-handler/outgoing-handler.wit.go +++ b/_examples/invoke/gen/wasi/http/outgoing-handler/outgoing-handler.wit.go @@ -1,9 +1,6 @@ // Code generated by wit-bindgen-go. DO NOT EDIT. // Package outgoinghandler represents the imported interface "wasi:http/outgoing-handler@0.2.0". -// -// This interface defines a handler of outgoing HTTP Requests. It should be -// imported by components which wish to make HTTP Requests. package outgoinghandler import ( @@ -13,17 +10,6 @@ import ( // Handle represents the imported function "handle". // -// This function is invoked with an outgoing HTTP Request, and it returns -// a resource `future-incoming-response` which represents an HTTP Response -// which may arrive in the future. -// -// The `options` argument accepts optional parameters for the HTTP -// protocol's transport layer. -// -// This function may return an error if the `outgoing-request` is invalid -// or not allowed to be made. Otherwise, protocol errors are reported -// through the `future-incoming-response`. -// // handle: func(request: outgoing-request, options: option) -> result // diff --git a/_examples/invoke/gen/wasi/http/types/types.wit.go b/_examples/invoke/gen/wasi/http/types/types.wit.go index 24f0a7a..6114993 100644 --- a/_examples/invoke/gen/wasi/http/types/types.wit.go +++ b/_examples/invoke/gen/wasi/http/types/types.wit.go @@ -1,10 +1,6 @@ // Code generated by wit-bindgen-go. DO NOT EDIT. // Package types represents the imported interface "wasi:http/types@0.2.0". -// -// This interface defines all of the types and methods for implementing -// HTTP Requests and Responses, both incoming and outgoing, as well as -// their headers, trailers, and bodies. package types import ( @@ -17,8 +13,6 @@ import ( // Method represents the variant "wasi:http/types@0.2.0#method". // -// This type corresponds to HTTP standard Methods. -// // variant method { // get, // head, @@ -144,8 +138,6 @@ func (self *Method) Other() *string { // Scheme represents the variant "wasi:http/types@0.2.0#scheme". // -// This type corresponds to HTTP standard Related Schemes. -// // variant scheme { // HTTP, // HTTPS, @@ -187,8 +179,6 @@ func (self *Scheme) Other() *string { // DNSErrorPayload represents the record "wasi:http/types@0.2.0#DNS-error-payload". // -// Defines the case payload type for `DNS-error` above: -// // record DNS-error-payload { // rcode: option, // info-code: option, @@ -201,8 +191,6 @@ type DNSErrorPayload struct { // TLSAlertReceivedPayload represents the record "wasi:http/types@0.2.0#TLS-alert-received-payload". // -// Defines the case payload type for `TLS-alert-received` above: -// // record TLS-alert-received-payload { // alert-id: option, // alert-message: option, @@ -215,8 +203,6 @@ type TLSAlertReceivedPayload struct { // FieldSizePayload represents the record "wasi:http/types@0.2.0#field-size-payload". // -// Defines the case payload type for `HTTP-response-{header,trailer}-size` above: -// // record field-size-payload { // field-name: option, // field-size: option, @@ -229,9 +215,6 @@ type FieldSizePayload struct { // ErrorCode represents the variant "wasi:http/types@0.2.0#error-code". // -// These cases are inspired by the IANA HTTP Proxy Error Types: -// https://www.iana.org/assignments/http-proxy-status/http-proxy-status.xhtml#table-http-proxy-error-types -// // variant error-code { // DNS-timeout, // DNS-error(DNS-error-payload), @@ -680,12 +663,6 @@ func (self *ErrorCode) ConfigurationError() bool { } // ErrorCodeInternalError returns a [ErrorCode] of case "internal-error". -// -// This is a catch-all error for anything that doesn't fit cleanly into a -// more specific case. It also includes an optional string for an -// unstructured description of the error. Users should not depend on the -// string for diagnosing errors, as it's not required to be consistent -// between implementations. func ErrorCodeInternalError(data cm.Option[string]) ErrorCode { return cm.New[ErrorCode](38, data) } @@ -697,9 +674,6 @@ func (self *ErrorCode) InternalError() *cm.Option[string] { // HeaderError represents the variant "wasi:http/types@0.2.0#header-error". // -// This type enumerates the different kinds of errors that may occur when -// setting or appending to a `fields` resource. -// // variant header-error { // invalid-syntax, // forbidden, @@ -708,17 +682,8 @@ func (self *ErrorCode) InternalError() *cm.Option[string] { type HeaderError uint8 const ( - // This error indicates that a `field-key` or `field-value` was - // syntactically invalid when used with an operation that sets headers in a - // `fields`. HeaderErrorInvalidSyntax HeaderError = iota - - // This error indicates that a forbidden `field-key` was used when trying - // to set a header in a `fields`. HeaderErrorForbidden - - // This error indicates that the operation on the `fields` was not - // permitted because the fields are immutable. HeaderErrorImmutable ) @@ -735,33 +700,16 @@ func (e HeaderError) String() string { // FieldKey represents the string "wasi:http/types@0.2.0#field-key". // -// Field keys are always strings. -// // type field-key = string type FieldKey string // FieldValue represents the list "wasi:http/types@0.2.0#field-value". // -// Field values should always be ASCII strings. However, in -// reality, HTTP implementations often have to interpret malformed values, -// so they are provided as a list of bytes. -// // type field-value = list type FieldValue cm.List[uint8] // Fields represents the imported resource "wasi:http/types@0.2.0#fields". // -// This following block defines the `fields` resource which corresponds to -// HTTP standard Fields. Fields are a common representation used for both -// Headers and Trailers. -// -// A `fields` may be mutable or immutable. A `fields` created using the -// constructor, `from-list`, or `clone` will be mutable, but a `fields` -// resource given by other means (including, but not limited to, -// `incoming-request.headers`, `outgoing-request.headers`) might be be -// immutable. In an immutable fields, the `set`, `append`, and `delete` -// operations will fail with `header-error.immutable`. -// // resource fields type Fields cm.Resource @@ -782,10 +730,6 @@ func wasmimport_FieldsResourceDrop(self0 uint32) // NewFields represents the imported constructor for resource "fields". // -// Construct an empty HTTP Fields. -// -// The resulting `fields` is mutable. -// // constructor() // //go:nosplit @@ -801,22 +745,6 @@ func wasmimport_NewFields() (result0 uint32) // FieldsFromList represents the imported static function "from-list". // -// Construct an HTTP Fields. -// -// The resulting `fields` is mutable. -// -// The list represents each key-value pair in the Fields. Keys -// which have multiple values are represented by multiple entries in this -// list with the same key. -// -// The tuple is a pair of the field key, represented as a string, and -// Value, represented as a list of bytes. In a valid Fields, all keys -// and values are valid UTF-8 strings. However, values are not always -// well-formed, so they are represented as a raw list of bytes. -// -// An error result will be returned if any header or value was -// syntactically invalid, or if a header was forbidden. -// // from-list: static func(entries: list>) -> result // @@ -833,11 +761,6 @@ func wasmimport_FieldsFromList(entries0 *cm.Tuple[FieldKey, FieldValue], entries // Append represents the imported method "append". // -// Append a value for a key. Does not change or delete any existing -// values for that key. -// -// Fails with `header-error.immutable` if the `fields` are immutable. -// // append: func(name: field-key, value: field-value) -> result<_, header-error> // //go:nosplit @@ -855,10 +778,6 @@ func wasmimport_FieldsAppend(self0 uint32, name0 *uint8, name1 uint32, value0 *u // Clone represents the imported method "clone". // -// Make a deep copy of the Fields. Equivelant in behavior to calling the -// `fields` constructor on the return value of `entries`. The resulting -// `fields` is mutable. -// // clone: func() -> fields // //go:nosplit @@ -875,11 +794,6 @@ func wasmimport_FieldsClone(self0 uint32) (result0 uint32) // Delete represents the imported method "delete". // -// Delete all values for a key. Does nothing if no values for the key -// exist. -// -// Fails with `header-error.immutable` if the `fields` are immutable. -// // delete: func(name: field-key) -> result<_, header-error> // //go:nosplit @@ -896,13 +810,6 @@ func wasmimport_FieldsDelete(self0 uint32, name0 *uint8, name1 uint32, result *c // Entries represents the imported method "entries". // -// Retrieve the full set of keys and values in the Fields. Like the -// constructor, the list represents each key-value pair. -// -// The outer list represents each key-value pair in the Fields. Keys -// which have multiple values are represented by multiple entries in this -// list with the same key. -// // entries: func() -> list> // //go:nosplit @@ -918,11 +825,6 @@ func wasmimport_FieldsEntries(self0 uint32, result *cm.List[cm.Tuple[FieldKey, F // Get represents the imported method "get". // -// Get all of the values corresponding to a key. If the key is not present -// in this `fields`, an empty list is returned. However, if the key is -// present but empty, this is represented by a list with one or more -// empty field-values present. -// // get: func(name: field-key) -> list // //go:nosplit @@ -939,9 +841,6 @@ func wasmimport_FieldsGet(self0 uint32, name0 *uint8, name1 uint32, result *cm.L // Has represents the imported method "has". // -// Returns `true` when the key is present in this `fields`. If the key is -// syntactically invalid, `false` is returned. -// // has: func(name: field-key) -> bool // //go:nosplit @@ -959,11 +858,6 @@ func wasmimport_FieldsHas(self0 uint32, name0 *uint8, name1 uint32) (result0 uin // Set represents the imported method "set". // -// Set all of the values for a key. Clears any existing values for that -// key, if they have been set. -// -// Fails with `header-error.immutable` if the `fields` are immutable. -// // set: func(name: field-key, value: list) -> result<_, header-error> // //go:nosplit @@ -981,8 +875,6 @@ func wasmimport_FieldsSet(self0 uint32, name0 *uint8, name1 uint32, value0 *Fiel // IncomingRequest represents the imported resource "wasi:http/types@0.2.0#incoming-request". // -// Represents an incoming HTTP Request. -// // resource incoming-request type IncomingRequest cm.Resource @@ -1003,8 +895,6 @@ func wasmimport_IncomingRequestResourceDrop(self0 uint32) // Authority represents the imported method "authority". // -// Returns the authority from the request, if it was present. -// // authority: func() -> option // //go:nosplit @@ -1020,9 +910,6 @@ func wasmimport_IncomingRequestAuthority(self0 uint32, result *cm.Option[string] // Consume represents the imported method "consume". // -// Gives the `incoming-body` associated with this request. Will only -// return success at most once, and subsequent calls will return error. -// // consume: func() -> result // //go:nosplit @@ -1038,15 +925,6 @@ func wasmimport_IncomingRequestConsume(self0 uint32, result *cm.Result[IncomingB // Headers represents the imported method "headers". // -// Get the `headers` associated with the request. -// -// The returned `headers` resource is immutable: `set`, `append`, and -// `delete` operations will fail with `header-error.immutable`. -// -// The `headers` returned are a child resource: it must be dropped before -// the parent `incoming-request` is dropped. Dropping this -// `incoming-request` before all children are dropped will trap. -// // headers: func() -> headers // //go:nosplit @@ -1063,8 +941,6 @@ func wasmimport_IncomingRequestHeaders(self0 uint32) (result0 uint32) // Method represents the imported method "method". // -// Returns the method of the incoming request. -// // method: func() -> method // //go:nosplit @@ -1080,8 +956,6 @@ func wasmimport_IncomingRequestMethod(self0 uint32, result *Method) // PathWithQuery represents the imported method "path-with-query". // -// Returns the path with query parameters from the request, as a string. -// // path-with-query: func() -> option // //go:nosplit @@ -1097,8 +971,6 @@ func wasmimport_IncomingRequestPathWithQuery(self0 uint32, result *cm.Option[str // Scheme represents the imported method "scheme". // -// Returns the protocol scheme from the request. -// // scheme: func() -> option // //go:nosplit @@ -1114,8 +986,6 @@ func wasmimport_IncomingRequestScheme(self0 uint32, result *cm.Option[Scheme]) // OutgoingRequest represents the imported resource "wasi:http/types@0.2.0#outgoing-request". // -// Represents an outgoing HTTP Request. -// // resource outgoing-request type OutgoingRequest cm.Resource @@ -1136,17 +1006,6 @@ func wasmimport_OutgoingRequestResourceDrop(self0 uint32) // NewOutgoingRequest represents the imported constructor for resource "outgoing-request". // -// Construct a new `outgoing-request` with a default `method` of `GET`, and -// `none` values for `path-with-query`, `scheme`, and `authority`. -// -// * `headers` is the HTTP Headers for the Request. -// -// It is possible to construct, or manipulate with the accessor functions -// below, an `outgoing-request` with an invalid combination of `scheme` -// and `authority`, or `headers` which are not permitted to be sent. -// It is the obligation of the `outgoing-handler.handle` implementation -// to reject invalid constructions of `outgoing-request`. -// // constructor(headers: headers) // //go:nosplit @@ -1163,10 +1022,6 @@ func wasmimport_NewOutgoingRequest(headers0 uint32) (result0 uint32) // Authority represents the imported method "authority". // -// Get the HTTP Authority for the Request. A value of `none` may be used -// with Related Schemes which do not require an Authority. The HTTP and -// HTTPS schemes always require an authority. -// // authority: func() -> option // //go:nosplit @@ -1182,13 +1037,6 @@ func wasmimport_OutgoingRequestAuthority(self0 uint32, result *cm.Option[string] // Body represents the imported method "body". // -// Returns the resource corresponding to the outgoing Body for this -// Request. -// -// Returns success on the first call: the `outgoing-body` resource for -// this `outgoing-request` can be retrieved at most once. Subsequent -// calls will return error. -// // body: func() -> result // //go:nosplit @@ -1204,15 +1052,6 @@ func wasmimport_OutgoingRequestBody(self0 uint32, result *cm.Result[OutgoingBody // Headers represents the imported method "headers". // -// Get the headers associated with the Request. -// -// The returned `headers` resource is immutable: `set`, `append`, and -// `delete` operations will fail with `header-error.immutable`. -// -// This headers resource is a child: it must be dropped before the parent -// `outgoing-request` is dropped, or its ownership is transfered to -// another component by e.g. `outgoing-handler.handle`. -// // headers: func() -> headers // //go:nosplit @@ -1229,8 +1068,6 @@ func wasmimport_OutgoingRequestHeaders(self0 uint32) (result0 uint32) // Method represents the imported method "method". // -// Get the Method for the Request. -// // method: func() -> method // //go:nosplit @@ -1246,9 +1083,6 @@ func wasmimport_OutgoingRequestMethod(self0 uint32, result *Method) // PathWithQuery represents the imported method "path-with-query". // -// Get the combination of the HTTP Path and Query for the Request. -// When `none`, this represents an empty Path and empty Query. -// // path-with-query: func() -> option // //go:nosplit @@ -1264,9 +1098,6 @@ func wasmimport_OutgoingRequestPathWithQuery(self0 uint32, result *cm.Option[str // Scheme represents the imported method "scheme". // -// Get the HTTP Related Scheme for the Request. When `none`, the -// implementation may choose an appropriate default scheme. -// // scheme: func() -> option // //go:nosplit @@ -1282,11 +1113,6 @@ func wasmimport_OutgoingRequestScheme(self0 uint32, result *cm.Option[Scheme]) // SetAuthority represents the imported method "set-authority". // -// Set the HTTP Authority for the Request. A value of `none` may be used -// with Related Schemes which do not require an Authority. The HTTP and -// HTTPS schemes always require an authority. Fails if the string given is -// not a syntactically valid uri authority. -// // set-authority: func(authority: option) -> result // //go:nosplit @@ -1304,9 +1130,6 @@ func wasmimport_OutgoingRequestSetAuthority(self0 uint32, authority0 uint32, aut // SetMethod represents the imported method "set-method". // -// Set the Method for the Request. Fails if the string present in a -// `method.other` argument is not a syntactically valid method. -// // set-method: func(method: method) -> result // //go:nosplit @@ -1324,10 +1147,6 @@ func wasmimport_OutgoingRequestSetMethod(self0 uint32, method0 uint32, method1 * // SetPathWithQuery represents the imported method "set-path-with-query". // -// Set the combination of the HTTP Path and Query for the Request. -// When `none`, this represents an empty Path and empty Query. Fails is the -// string given is not a syntactically valid path and query uri component. -// // set-path-with-query: func(path-with-query: option) -> result // //go:nosplit @@ -1345,10 +1164,6 @@ func wasmimport_OutgoingRequestSetPathWithQuery(self0 uint32, pathWithQuery0 uin // SetScheme represents the imported method "set-scheme". // -// Set the HTTP Related Scheme for the Request. When `none`, the -// implementation may choose an appropriate default scheme. Fails if the -// string given is not a syntactically valid uri scheme. -// // set-scheme: func(scheme: option) -> result // //go:nosplit @@ -1366,13 +1181,6 @@ func wasmimport_OutgoingRequestSetScheme(self0 uint32, scheme0 uint32, scheme1 u // RequestOptions represents the imported resource "wasi:http/types@0.2.0#request-options". // -// Parameters for making an HTTP Request. Each of these parameters is -// currently an optional timeout applicable to the transport layer of the -// HTTP protocol. -// -// These timeouts are separate from any the user may use to bound a -// blocking call to `wasi:io/poll.poll`. -// // resource request-options type RequestOptions cm.Resource @@ -1393,8 +1201,6 @@ func wasmimport_RequestOptionsResourceDrop(self0 uint32) // NewRequestOptions represents the imported constructor for resource "request-options". // -// Construct a default `request-options` value. -// // constructor() // //go:nosplit @@ -1410,9 +1216,6 @@ func wasmimport_NewRequestOptions() (result0 uint32) // BetweenBytesTimeout represents the imported method "between-bytes-timeout". // -// The timeout for receiving subsequent chunks of bytes in the Response -// body stream. -// // between-bytes-timeout: func() -> option // //go:nosplit @@ -1428,8 +1231,6 @@ func wasmimport_RequestOptionsBetweenBytesTimeout(self0 uint32, result *cm.Optio // ConnectTimeout represents the imported method "connect-timeout". // -// The timeout for the initial connect to the HTTP Server. -// // connect-timeout: func() -> option // //go:nosplit @@ -1445,8 +1246,6 @@ func wasmimport_RequestOptionsConnectTimeout(self0 uint32, result *cm.Option[mon // FirstByteTimeout represents the imported method "first-byte-timeout". // -// The timeout for receiving the first byte of the Response body. -// // first-byte-timeout: func() -> option // //go:nosplit @@ -1462,10 +1261,6 @@ func wasmimport_RequestOptionsFirstByteTimeout(self0 uint32, result *cm.Option[m // SetBetweenBytesTimeout represents the imported method "set-between-bytes-timeout". // -// Set the timeout for receiving subsequent chunks of bytes in the Response -// body stream. An error return value indicates that this timeout is not -// supported. -// // set-between-bytes-timeout: func(duration: option) -> result // //go:nosplit @@ -1483,9 +1278,6 @@ func wasmimport_RequestOptionsSetBetweenBytesTimeout(self0 uint32, duration0 uin // SetConnectTimeout represents the imported method "set-connect-timeout". // -// Set the timeout for the initial connect to the HTTP Server. An error -// return value indicates that this timeout is not supported. -// // set-connect-timeout: func(duration: option) -> result // //go:nosplit @@ -1503,9 +1295,6 @@ func wasmimport_RequestOptionsSetConnectTimeout(self0 uint32, duration0 uint32, // SetFirstByteTimeout represents the imported method "set-first-byte-timeout". // -// Set the timeout for receiving the first byte of the Response body. An -// error return value indicates that this timeout is not supported. -// // set-first-byte-timeout: func(duration: option) -> result // //go:nosplit @@ -1523,12 +1312,6 @@ func wasmimport_RequestOptionsSetFirstByteTimeout(self0 uint32, duration0 uint32 // ResponseOutparam represents the imported resource "wasi:http/types@0.2.0#response-outparam". // -// Represents the ability to send an HTTP Response. -// -// This resource is used by the `wasi:http/incoming-handler` interface to -// allow a Response to be sent corresponding to the Request provided as the -// other argument to `incoming-handler.handle`. -// // resource response-outparam type ResponseOutparam cm.Resource @@ -1549,16 +1332,6 @@ func wasmimport_ResponseOutparamResourceDrop(self0 uint32) // ResponseOutparamSet represents the imported static function "set". // -// Set the value of the `response-outparam` to either send a response, -// or indicate an error. -// -// This method consumes the `response-outparam` to ensure that it is -// called at most once. If it is never called, the implementation -// will respond with an error. -// -// The user may provide an `error` to `response` to allow the -// implementation determine how to respond with an HTTP error response. -// // set: static func(param: response-outparam, response: result) // @@ -1576,15 +1349,11 @@ func wasmimport_ResponseOutparamSet(param0 uint32, response0 uint32, response1 u // StatusCode represents the u16 "wasi:http/types@0.2.0#status-code". // -// This type corresponds to the HTTP standard Status Code. -// // type status-code = u16 type StatusCode uint16 // IncomingResponse represents the imported resource "wasi:http/types@0.2.0#incoming-response". // -// Represents an incoming HTTP Response. -// // resource incoming-response type IncomingResponse cm.Resource @@ -1605,9 +1374,6 @@ func wasmimport_IncomingResponseResourceDrop(self0 uint32) // Consume represents the imported method "consume". // -// Returns the incoming body. May be called at most once. Returns error -// if called additional times. -// // consume: func() -> result // //go:nosplit @@ -1623,14 +1389,6 @@ func wasmimport_IncomingResponseConsume(self0 uint32, result *cm.Result[Incoming // Headers represents the imported method "headers". // -// Returns the headers from the incoming response. -// -// The returned `headers` resource is immutable: `set`, `append`, and -// `delete` operations will fail with `header-error.immutable`. -// -// This headers resource is a child: it must be dropped before the parent -// `incoming-response` is dropped. -// // headers: func() -> headers // //go:nosplit @@ -1647,8 +1405,6 @@ func wasmimport_IncomingResponseHeaders(self0 uint32) (result0 uint32) // Status represents the imported method "status". // -// Returns the status code from the incoming response. -// // status: func() -> status-code // //go:nosplit @@ -1665,15 +1421,6 @@ func wasmimport_IncomingResponseStatus(self0 uint32) (result0 uint32) // IncomingBody represents the imported resource "wasi:http/types@0.2.0#incoming-body". // -// Represents an incoming HTTP Request or Response's Body. -// -// A body has both its contents - a stream of bytes - and a (possibly -// empty) set of trailers, indicating that the full contents of the -// body have been received. This resource represents the contents as -// an `input-stream` and the delivery of trailers as a `future-trailers`, -// and ensures that the user of this interface may only be consuming either -// the body contents or waiting on trailers at any given time. -// // resource incoming-body type IncomingBody cm.Resource @@ -1694,9 +1441,6 @@ func wasmimport_IncomingBodyResourceDrop(self0 uint32) // IncomingBodyFinish represents the imported static function "finish". // -// Takes ownership of `incoming-body`, and returns a `future-trailers`. -// This function will trap if the `input-stream` child is still alive. -// // finish: static func(this: incoming-body) -> future-trailers // //go:nosplit @@ -1713,22 +1457,6 @@ func wasmimport_IncomingBodyFinish(this0 uint32) (result0 uint32) // Stream represents the imported method "stream". // -// Returns the contents of the body, as a stream of bytes. -// -// Returns success on first call: the stream representing the contents -// can be retrieved at most once. Subsequent calls will return error. -// -// The returned `input-stream` resource is a child: it must be dropped -// before the parent `incoming-body` is dropped, or consumed by -// `incoming-body.finish`. -// -// This invariant ensures that the implementation can determine whether -// the user is consuming the contents of the body, waiting on the -// `future-trailers` to be ready, or neither. This allows for network -// backpressure is to be applied when the user is consuming the body, -// and for that backpressure to not inhibit delivery of the trailers if -// the user does not read the entire body. -// // %stream: func() -> result // //go:nosplit @@ -1744,12 +1472,6 @@ func wasmimport_IncomingBodyStream(self0 uint32, result *cm.Result[streams.Input // FutureTrailers represents the imported resource "wasi:http/types@0.2.0#future-trailers". // -// Represents a future which may eventaully return trailers, or an error. -// -// In the case that the incoming HTTP Request or Response did not have any -// trailers, this future will resolve to the empty set of trailers once the -// complete Request or Response body has been received. -// // resource future-trailers type FutureTrailers cm.Resource @@ -1770,26 +1492,6 @@ func wasmimport_FutureTrailersResourceDrop(self0 uint32) // Get represents the imported method "get". // -// Returns the contents of the trailers, or an error which occured, -// once the future is ready. -// -// The outer `option` represents future readiness. Users can wait on this -// `option` to become `some` using the `subscribe` method. -// -// The outer `result` is used to retrieve the trailers or error at most -// once. It will be success on the first call in which the outer option -// is `some`, and error on subsequent calls. -// -// The inner `result` represents that either the HTTP Request or Response -// body, as well as any trailers, were received successfully, or that an -// error occured receiving them. The optional `trailers` indicates whether -// or not trailers were present in the body. -// -// When some `trailers` are returned by this method, the `trailers` -// resource is immutable, and a child. Use of the `set`, `append`, or -// `delete` methods will return an error, and the resource must be -// dropped before the parent `future-trailers` is dropped. -// // get: func() -> option, error-code>>> // //go:nosplit @@ -1805,10 +1507,6 @@ func wasmimport_FutureTrailersGet(self0 uint32, result *cm.Option[cm.Result[cm.R // Subscribe represents the imported method "subscribe". // -// Returns a pollable which becomes ready when either the trailers have -// been received, or an error has occured. When this pollable is ready, -// the `get` method will return `some`. -// // subscribe: func() -> pollable // //go:nosplit @@ -1825,8 +1523,6 @@ func wasmimport_FutureTrailersSubscribe(self0 uint32) (result0 uint32) // OutgoingResponse represents the imported resource "wasi:http/types@0.2.0#outgoing-response". // -// Represents an outgoing HTTP Response. -// // resource outgoing-response type OutgoingResponse cm.Resource @@ -1847,12 +1543,6 @@ func wasmimport_OutgoingResponseResourceDrop(self0 uint32) // NewOutgoingResponse represents the imported constructor for resource "outgoing-response". // -// Construct an `outgoing-response`, with a default `status-code` of `200`. -// If a different `status-code` is needed, it must be set via the -// `set-status-code` method. -// -// * `headers` is the HTTP Headers for the Response. -// // constructor(headers: headers) // //go:nosplit @@ -1869,12 +1559,6 @@ func wasmimport_NewOutgoingResponse(headers0 uint32) (result0 uint32) // Body represents the imported method "body". // -// Returns the resource corresponding to the outgoing Body for this Response. -// -// Returns success on the first call: the `outgoing-body` resource for -// this `outgoing-response` can be retrieved at most once. Subsequent -// calls will return error. -// // body: func() -> result // //go:nosplit @@ -1890,15 +1574,6 @@ func wasmimport_OutgoingResponseBody(self0 uint32, result *cm.Result[OutgoingBod // Headers represents the imported method "headers". // -// Get the headers associated with the Request. -// -// The returned `headers` resource is immutable: `set`, `append`, and -// `delete` operations will fail with `header-error.immutable`. -// -// This headers resource is a child: it must be dropped before the parent -// `outgoing-request` is dropped, or its ownership is transfered to -// another component by e.g. `outgoing-handler.handle`. -// // headers: func() -> headers // //go:nosplit @@ -1915,9 +1590,6 @@ func wasmimport_OutgoingResponseHeaders(self0 uint32) (result0 uint32) // SetStatusCode represents the imported method "set-status-code". // -// Set the HTTP Status Code for the Response. Fails if the status-code -// given is not a valid http status code. -// // set-status-code: func(status-code: status-code) -> result // //go:nosplit @@ -1935,8 +1607,6 @@ func wasmimport_OutgoingResponseSetStatusCode(self0 uint32, statusCode0 uint32) // StatusCode represents the imported method "status-code". // -// Get the HTTP Status Code for the Response. -// // status-code: func() -> status-code // //go:nosplit @@ -1953,23 +1623,6 @@ func wasmimport_OutgoingResponseStatusCode(self0 uint32) (result0 uint32) // OutgoingBody represents the imported resource "wasi:http/types@0.2.0#outgoing-body". // -// Represents an outgoing HTTP Request or Response's Body. -// -// A body has both its contents - a stream of bytes - and a (possibly -// empty) set of trailers, inducating the full contents of the body -// have been sent. This resource represents the contents as an -// `output-stream` child resource, and the completion of the body (with -// optional trailers) with a static function that consumes the -// `outgoing-body` resource, and ensures that the user of this interface -// may not write to the body contents after the body has been finished. -// -// If the user code drops this resource, as opposed to calling the static -// method `finish`, the implementation should treat the body as incomplete, -// and that an error has occured. The implementation should propogate this -// error to the HTTP protocol by whatever means it has available, -// including: corrupting the body on the wire, aborting the associated -// Request, or sending a late status code for the Response. -// // resource outgoing-body type OutgoingBody cm.Resource @@ -1990,16 +1643,6 @@ func wasmimport_OutgoingBodyResourceDrop(self0 uint32) // OutgoingBodyFinish represents the imported static function "finish". // -// Finalize an outgoing body, optionally providing trailers. This must be -// called to signal that the response is complete. If the `outgoing-body` -// is dropped without calling `outgoing-body.finalize`, the implementation -// should treat the body as corrupted. -// -// Fails if the body's `outgoing-request` or `outgoing-response` was -// constructed with a Content-Length header, and the contents written -// to the body (via `write`) does not match the value given in the -// Content-Length. -// // finish: static func(this: outgoing-body, trailers: option) -> result<_, // error-code> // @@ -2017,16 +1660,6 @@ func wasmimport_OutgoingBodyFinish(this0 uint32, trailers0 uint32, trailers1 uin // Write represents the imported method "write". // -// Returns a stream for writing the body contents. -// -// The returned `output-stream` is a child resource: it must be dropped -// before the parent `outgoing-body` resource is dropped (or finished), -// otherwise the `outgoing-body` drop or `finish` will trap. -// -// Returns success on the first call: the `output-stream` resource for -// this `outgoing-body` may be retrieved at most once. Subsequent calls -// will return error. -// // write: func() -> result // //go:nosplit @@ -2042,12 +1675,6 @@ func wasmimport_OutgoingBodyWrite(self0 uint32, result *cm.Result[streams.Output // FutureIncomingResponse represents the imported resource "wasi:http/types@0.2.0#future-incoming-response". // -// Represents a future which may eventaully return an incoming HTTP -// Response, or an error. -// -// This resource is returned by the `wasi:http/outgoing-handler` interface to -// provide the HTTP Response corresponding to the sent Request. -// // resource future-incoming-response type FutureIncomingResponse cm.Resource @@ -2068,21 +1695,6 @@ func wasmimport_FutureIncomingResponseResourceDrop(self0 uint32) // Get represents the imported method "get". // -// Returns the incoming HTTP Response, or an error, once one is ready. -// -// The outer `option` represents future readiness. Users can wait on this -// `option` to become `some` using the `subscribe` method. -// -// The outer `result` is used to retrieve the response or error at most -// once. It will be success on the first call in which the outer option -// is `some`, and error on subsequent calls. -// -// The inner `result` represents that either the incoming HTTP Response -// status and headers have recieved successfully, or that an error -// occured. Errors may also occur while consuming the response body, -// but those will be reported by the `incoming-body` and its -// `output-stream` child. -// // get: func() -> option>> // //go:nosplit @@ -2098,10 +1710,6 @@ func wasmimport_FutureIncomingResponseGet(self0 uint32, result *cm.Option[cm.Res // Subscribe represents the imported method "subscribe". // -// Returns a pollable which becomes ready when either the Response has -// been received, or an error has occured. When this pollable is ready, -// the `get` method will return `some`. -// // subscribe: func() -> pollable // //go:nosplit @@ -2118,18 +1726,6 @@ func wasmimport_FutureIncomingResponseSubscribe(self0 uint32) (result0 uint32) // HTTPErrorCode represents the imported function "http-error-code". // -// Attempts to extract a http-related `error` from the wasi:io `error` -// provided. -// -// Stream operations which return -// `wasi:io/stream/stream-error::last-operation-failed` have a payload of -// type `wasi:io/error/error` with more information about the operation -// that failed. This payload can be passed through to this function to see -// if there's http-related information about the error to return. -// -// Note that this function is fallible because not all io-errors are -// http-related errors. -// // http-error-code: func(err: borrow) -> option // //go:nosplit diff --git a/_examples/invoke/gen/wasi/logging/logging/logging.wit.go b/_examples/invoke/gen/wasi/logging/logging/logging.wit.go index 15b6e95..0535dfa 100644 --- a/_examples/invoke/gen/wasi/logging/logging/logging.wit.go +++ b/_examples/invoke/gen/wasi/logging/logging/logging.wit.go @@ -1,18 +1,13 @@ // Code generated by wit-bindgen-go. DO NOT EDIT. -// Package logging represents the imported interface "wasi:logging/logging". -// -// WASI Logging is a logging API intended to let users emit log messages with -// simple priority levels and context values. +// Package logging represents the imported interface "wasi:logging/logging@0.1.0-draft". package logging import ( "github.com/bytecodealliance/wasm-tools-go/cm" ) -// Level represents the enum "wasi:logging/logging#level". -// -// A log level, describing a kind of message. +// Level represents the enum "wasi:logging/logging@0.1.0-draft#level". // // enum level { // trace, @@ -25,25 +20,11 @@ import ( type Level uint8 const ( - // Describes messages about the values of variables and the flow of - // control within a program. LevelTrace Level = iota - - // Describes messages likely to be of interest to someone debugging a - // program. LevelDebug - - // Describes messages likely to be of interest to someone monitoring a - // program. LevelInfo - - // Describes messages indicating hazardous situations. LevelWarn - - // Describes messages indicating serious errors. LevelError - - // Describes messages indicating fatal errors. LevelCritical ) @@ -63,13 +44,6 @@ func (e Level) String() string { // Log represents the imported function "log". // -// Emit a log message. -// -// A log message has a `level` describing what kind of message is being -// sent, a context, which is an uninterpreted string meant to help -// consumers group similar messages, and a string containing the message -// text. -// // log: func(level: level, context: string, message: string) // //go:nosplit @@ -81,6 +55,6 @@ func Log(level Level, context string, message string) { return } -//go:wasmimport wasi:logging/logging log +//go:wasmimport wasi:logging/logging@0.1.0-draft log //go:noescape func wasmimport_Log(level0 uint32, context0 *uint8, context1 uint32, message0 *uint8, message1 uint32) diff --git a/_examples/invoke/gen/wasmcloud/bus/lattice/lattice.wit.go b/_examples/invoke/gen/wasmcloud/bus/lattice/lattice.wit.go index 9e04515..5239e79 100644 --- a/_examples/invoke/gen/wasmcloud/bus/lattice/lattice.wit.go +++ b/_examples/invoke/gen/wasmcloud/bus/lattice/lattice.wit.go @@ -9,8 +9,6 @@ import ( // CallTargetInterface represents the imported resource "wasmcloud:bus/lattice@1.0.0#call-target-interface". // -// Interface target. This represents an interface, which can be selected by `set-link-name`. -// // resource call-target-interface type CallTargetInterface cm.Resource @@ -49,12 +47,6 @@ func wasmimport_NewCallTargetInterface(namespace0 *uint8, namespace1 uint32, pac // SetLinkName represents the imported function "set-link-name". // -// Set an optional link name to use for all interfaces specified. This is advanced -// functionality only available within wasmcloud and, as such, is exposed here as -// part of the -// wasmcloud:bus package. This is used when you are linking multiple of the same interfaces -// (i.e. a keyvalue implementation for caching and another one for secrets) to a component -// // set-link-name: func(name: string, interfaces: list) // //go:nosplit diff --git a/_examples/invoke/gen/wasmcloud/messaging/consumer/abi.go b/_examples/invoke/gen/wasmcloud/messaging/consumer/abi.go deleted file mode 100644 index 1bd06fe..0000000 --- a/_examples/invoke/gen/wasmcloud/messaging/consumer/abi.go +++ /dev/null @@ -1,32 +0,0 @@ -// Code generated by wit-bindgen-go. DO NOT EDIT. - -package consumer - -import ( - "github.com/bytecodealliance/wasm-tools-go/cm" - "github.com/wasmCloud/component-sdk-go/_examples/invoke/gen/wasmcloud/messaging/types" - "unsafe" -) - -// BrokerMessageShape is used for storage in variant or result types. -type BrokerMessageShape struct { - shape [unsafe.Sizeof(types.BrokerMessage{})]byte -} - -func lower_OptionString(v cm.Option[string]) (f0 uint32, f1 *uint8, f2 uint32) { - some := v.Some() - if some != nil { - f0 = 1 - v1, v2 := cm.LowerString(*some) - f1 = (*uint8)(v1) - f2 = (uint32)(v2) - } - return -} - -func lower_BrokerMessage(v types.BrokerMessage) (f0 *uint8, f1 uint32, f2 *uint8, f3 uint32, f4 uint32, f5 *uint8, f6 uint32) { - f0, f1 = cm.LowerString(v.Subject) - f2, f3 = cm.LowerList(v.Body) - f4, f5, f6 = lower_OptionString(v.ReplyTo) - return -} diff --git a/_examples/invoke/gen/wasmcloud/messaging/consumer/consumer.wit.go b/_examples/invoke/gen/wasmcloud/messaging/consumer/consumer.wit.go deleted file mode 100644 index 83e798a..0000000 --- a/_examples/invoke/gen/wasmcloud/messaging/consumer/consumer.wit.go +++ /dev/null @@ -1,46 +0,0 @@ -// Code generated by wit-bindgen-go. DO NOT EDIT. - -// Package consumer represents the imported interface "wasmcloud:messaging/consumer@0.2.0". -package consumer - -import ( - "github.com/bytecodealliance/wasm-tools-go/cm" - "github.com/wasmCloud/component-sdk-go/_examples/invoke/gen/wasmcloud/messaging/types" -) - -// Request represents the imported function "request". -// -// Perform a request operation on a subject -// -// request: func(subject: string, body: list, timeout-ms: u32) -> result -// -//go:nosplit -func Request(subject string, body cm.List[uint8], timeoutMs uint32) (result cm.Result[BrokerMessageShape, types.BrokerMessage, string]) { - subject0, subject1 := cm.LowerString(subject) - body0, body1 := cm.LowerList(body) - timeoutMs0 := (uint32)(timeoutMs) - wasmimport_Request((*uint8)(subject0), (uint32)(subject1), (*uint8)(body0), (uint32)(body1), (uint32)(timeoutMs0), &result) - return -} - -//go:wasmimport wasmcloud:messaging/consumer@0.2.0 request -//go:noescape -func wasmimport_Request(subject0 *uint8, subject1 uint32, body0 *uint8, body1 uint32, timeoutMs0 uint32, result *cm.Result[BrokerMessageShape, types.BrokerMessage, string]) - -// Publish represents the imported function "publish". -// -// Publish a message to a subject without awaiting a response -// -// publish: func(msg: broker-message) -> result<_, string> -// -//go:nosplit -func Publish(msg types.BrokerMessage) (result cm.Result[string, struct{}, string]) { - msg0, msg1, msg2, msg3, msg4, msg5, msg6 := lower_BrokerMessage(msg) - wasmimport_Publish((*uint8)(msg0), (uint32)(msg1), (*uint8)(msg2), (uint32)(msg3), (uint32)(msg4), (*uint8)(msg5), (uint32)(msg6), &result) - return -} - -//go:wasmimport wasmcloud:messaging/consumer@0.2.0 publish -//go:noescape -func wasmimport_Publish(msg0 *uint8, msg1 uint32, msg2 *uint8, msg3 uint32, msg4 uint32, msg5 *uint8, msg6 uint32, result *cm.Result[string, struct{}, string]) diff --git a/_examples/invoke/gen/wasmcloud/messaging/consumer/empty.s b/_examples/invoke/gen/wasmcloud/messaging/consumer/empty.s deleted file mode 100644 index 5444f20..0000000 --- a/_examples/invoke/gen/wasmcloud/messaging/consumer/empty.s +++ /dev/null @@ -1,3 +0,0 @@ -// This file exists for testing this package without WebAssembly, -// allowing empty function bodies with a //go:wasmimport directive. -// See https://pkg.go.dev/cmd/compile for more information. diff --git a/_examples/invoke/gen/wasmcloud/messaging/types/types.wit.go b/_examples/invoke/gen/wasmcloud/messaging/types/types.wit.go deleted file mode 100644 index 6fbc9e9..0000000 --- a/_examples/invoke/gen/wasmcloud/messaging/types/types.wit.go +++ /dev/null @@ -1,25 +0,0 @@ -// Code generated by wit-bindgen-go. DO NOT EDIT. - -// Package types represents the imported interface "wasmcloud:messaging/types@0.2.0". -// -// Types common to message broker interactions -package types - -import ( - "github.com/bytecodealliance/wasm-tools-go/cm" -) - -// BrokerMessage represents the record "wasmcloud:messaging/types@0.2.0#broker-message". -// -// A message sent to or received from a broker -// -// record broker-message { -// subject: string, -// body: list, -// reply-to: option, -// } -type BrokerMessage struct { - Subject string - Body cm.List[uint8] - ReplyTo cm.Option[string] -} diff --git a/_examples/invoke/gen/wasmcloud/secrets/reveal/reveal.wit.go b/_examples/invoke/gen/wasmcloud/secrets/reveal/reveal.wit.go index 1c33cb2..150a62d 100644 --- a/_examples/invoke/gen/wasmcloud/secrets/reveal/reveal.wit.go +++ b/_examples/invoke/gen/wasmcloud/secrets/reveal/reveal.wit.go @@ -10,9 +10,6 @@ import ( // Reveal represents the imported function "reveal". // -// Reveals the value of a secret to the caller. -// This lets you easily audit your code to discover where secrets are being used. -// // reveal: func(s: borrow) -> secret-value // //go:nosplit diff --git a/_examples/invoke/gen/wasmcloud/secrets/store/store.wit.go b/_examples/invoke/gen/wasmcloud/secrets/store/store.wit.go index 09dbab5..57ddee2 100644 --- a/_examples/invoke/gen/wasmcloud/secrets/store/store.wit.go +++ b/_examples/invoke/gen/wasmcloud/secrets/store/store.wit.go @@ -9,8 +9,6 @@ import ( // SecretsError represents the variant "wasmcloud:secrets/store@0.1.0-draft#secrets-error". // -// An error type that encapsulates the different errors that can occur fetching secrets -// // variant secrets-error { // upstream(string), // io(string), @@ -19,11 +17,6 @@ import ( type SecretsError cm.Variant[uint8, string, string] // SecretsErrorUpstream returns a [SecretsError] of case "upstream". -// -// This indicates an error from an "upstream" secrets source. -// As this could be almost _anything_ (such as Vault, Kubernetes Secrets, KeyValue -// buckets, etc), -// the error message is a string. func SecretsErrorUpstream(data string) SecretsError { return cm.New[SecretsError](0, data) } @@ -34,14 +27,6 @@ func (self *SecretsError) Upstream() *string { } // SecretsErrorIO returns a [SecretsError] of case "io". -// -// This indicates an error from an I/O operation. -// As this could be almost _anything_ (such as a file read, network connection, etc), -// the error message is a string. -// Depending on how this ends up being consumed, -// we may consider moving this to use the `wasi:io/error` type instead. -// For simplicity right now in supporting multiple implementations, it is being left -// as a string. func SecretsErrorIO(data string) SecretsError { return cm.New[SecretsError](1, data) } @@ -52,10 +37,6 @@ func (self *SecretsError) IO() *string { } // SecretsErrorNotFound returns a [SecretsError] of case "not-found". -// -// This indicates that the secret was not found. Generally "not found" errors will -// be handled by the upstream secrets backend, but there are cases where the host -// may need to return this error. func SecretsErrorNotFound() SecretsError { var data struct{} return cm.New[SecretsError](2, data) @@ -68,9 +49,6 @@ func (self *SecretsError) NotFound() bool { // SecretValue represents the variant "wasmcloud:secrets/store@0.1.0-draft#secret-value". // -// A secret value can be either a string or a byte array, which lets you -// store binary data as a secret. -// // variant secret-value { // %string(string), // bytes(list), @@ -78,8 +56,6 @@ func (self *SecretsError) NotFound() bool { type SecretValue cm.Variant[uint8, string, cm.List[uint8]] // SecretValueString returns a [SecretValue] of case "string". -// -// A string value func SecretValueString(data string) SecretValue { return cm.New[SecretValue](0, data) } @@ -90,8 +66,6 @@ func (self *SecretValue) String() *string { } // SecretValueBytes returns a [SecretValue] of case "bytes". -// -// A byte array value func SecretValueBytes(data cm.List[uint8]) SecretValue { return cm.New[SecretValue](1, data) } @@ -103,11 +77,6 @@ func (self *SecretValue) Bytes() *cm.List[uint8] { // Secret represents the imported resource "wasmcloud:secrets/store@0.1.0-draft#secret". // -// A secret is a resource that can only be borrowed. This allows you to -// pass around handles to secrets and not reveal the values until a -// component needs them. -// You need to use the reveal interface to get the value. -// // resource secret type Secret cm.Resource @@ -128,8 +97,6 @@ func wasmimport_SecretResourceDrop(self0 uint32) // Get represents the imported function "get". // -// Gets a single opaque secrets value set at the given key if it exists -// // get: func(key: string) -> result // //go:nosplit diff --git a/_examples/invoke/wadge_bindings_test.go b/_examples/invoke/wadge_bindings_test.go index 566930d..a8bdfcf 100644 --- a/_examples/invoke/wadge_bindings_test.go +++ b/_examples/invoke/wadge_bindings_test.go @@ -17,7 +17,7 @@ func wasmimport_Log(level0 uint32, context0 *uint8, context1 uint32, message0 *u var __p runtime.Pinner defer __p.Unpin() if __err := wadge.WithCurrentInstance(func(__instance *wadge.Instance) error { - return __instance.Call("wasi:logging/logging", "log", func() unsafe.Pointer { + return __instance.Call("wasi:logging/logging@0.1.0-draft", "log", func() unsafe.Pointer { ptr := unsafe.Pointer(&level0) __p.Pin(ptr) return ptr diff --git a/_examples/invoke/wasmcloud.toml b/_examples/invoke/wasmcloud.toml index 47baf15..05e875d 100644 --- a/_examples/invoke/wasmcloud.toml +++ b/_examples/invoke/wasmcloud.toml @@ -1,9 +1,10 @@ name = "invoke" -language = "tinygo" +language = "other" type = "component" version = "0.1.0" [component] +build_command = "tinygo build -target=wasip2 --wit-package ./wit --wit-world example -o build/invoke.wasm main.go" wit_world = "example" wasm_target = "wasm32-wasi-preview2" destination = "build/invoke_s.wasm" diff --git a/_examples/invoke/wit/deps.lock b/_examples/invoke/wit/deps.lock deleted file mode 100644 index 22c6b1d..0000000 --- a/_examples/invoke/wit/deps.lock +++ /dev/null @@ -1,49 +0,0 @@ -["wasi-cli-0.2.0"] -sha256 = "13b041ec2314d48107929c335df3ca81b1bb0a35bfec38e206a59162a4c209cd" -sha512 = "725886b3244f4894a1121cd66e1bea0775964ca1b3811be3ae43a4c692cb7d5f27d851072637b8ec64bd5e71e85bb5e860f8331fe8f77353d9d7868ce1d72a8e" - -["wasi-clocks-0.2.0"] -sha256 = "daf7133b4f60ba73185449327dd48d2b324799db858ab463bcd32d954a9ff394" -sha512 = "5992296c504aebfad359ab1676bba63b5d22e33112c240a437ee733433aa50552144242f8998180ff36f0da56e5f65691dbb1898331ce878bd9fa439b8909742" - -["wasi-config-0.2.0-draft"] -sha256 = "5c6b4a10b21fbab2397d579c6f8bf8a484160dfdf20b6343080b0bad097849a3" -sha512 = "d3cf5fd1d12590aefd561330337870e2e468c84753c11e19bccd165c916a696722cc29af3572984e6256088b6e683763675d5b8cec3d195f9e2961fe405629b8" - -["wasi-filesystem-0.2.0"] -sha256 = "739d4fc43cd51421382e5d1a0cf643a2985691d480ae75600cdcd382665b3e55" -sha512 = "67f61ef46833060cc4d7a258da7a82024830762c4ecfd522d32bdc5e6bf4df26043f9a8c13ea38b191df180176826aa7b163816618a939015efff5987557dc16" - -["wasi-http-0.2.0"] -sha256 = "f22b6f3b3c12289e522041067b0a2db99a27c181e9ef3ed36930aa0286232d63" -sha512 = "f9b38ef4f58cb9e069b51ee45df52ce6ca9af0a9774c3d09dc99598f36afcd902557221be2f1a6bcccdecb880e4d7436b533e03f4b9250d5b0e1466afd3a62ce" - -["wasi-io-0.2.0"] -sha256 = "0bc0cc0d474a5c4f3c2e2092664c4e235a0390e5d206d3bdc4007488d9d5e00f" -sha512 = "497f37742a94ca32eaa77dce5d9144682e743b30c2d702d37726d43735a25fa9d421afbf5945da158c0e46a0adf941f607b0e0f5d26494af52f021265f78329c" - -["wasi-logging-0.1.0-draft"] -sha256 = "619c4d2336045bab9129e5af568decd5e963006291d496a23cddf796f3a61c2e" -sha512 = "c163aa6f4e566cb85d373f25e590e552fc2530fdf50946c38d305e9f2cd189d86ff8540d163e42acd2cebbe3cef98967cd1efb14ce196da132fcf6caf4f6155d" - -["wasi-random-0.2.0"] -sha256 = "efcdf344435591830f5fbed67a2c215bba112893518a8ef4c7234a4796b8dbcd" -sha512 = "c78a10e9b6401116eac703430609a849854a27a4ff3bc7737d514536a9c16a2fc206a35f8f96b7c40f254d6a66e6873361970754fa69b856025886cd462a2832" - -["wasi-sockets-0.2.0"] -sha256 = "aa3c13fee8c788c95de5a917a54d776d5adb2afd90a77224864941ce27c5d471" -sha512 = "4e3be65dd127ccd4bfa1af8f86fea556d6e22d25e4b637f9b9ebf66ae1f6331f904edff042adc9be16fec511e3295170e6c13516715d2cd3e5aaffbd96158fa9" - -["wasmcloud-bus-1.0.0"] -sha256 = "f823b5c8293cb585092107120139c34c405f57362761a133d543f5d68c65d591" -sha512 = "12e6aa4eac6139b60ea72cc7b6ded6ac9b144b15557be9f2329b6e84b5a161d8f6344674afd0526a883cb61e34c06fee9dbadbaee1d783cd957bc43dab4bfc2d" - -[wasmcloud-component-go] -path = "../../../wit" -sha256 = "995bd9ad8d0523f04480196b6746da80ddc5daf2e3be6b126c224d1fe9bda103" -sha512 = "e5af5fbb4242fc151d83ce86fa05d54274eb33a42b8856453659a1191d5142cd3792c914df8db330a9f692089974bbd1e6d3695142a8e5416d10b5b856839ce9" -deps = ["wasi-cli-0.2.0", "wasi-clocks-0.2.0", "wasi-config-0.2.0-draft", "wasi-filesystem-0.2.0", "wasi-http-0.2.0", "wasi-io-0.2.0", "wasi-logging-0.1.0-draft", "wasi-random-0.2.0", "wasi-sockets-0.2.0", "wasmcloud-bus-1.0.0", "wasmcloud-secrets-0.1.0-draft"] - -["wasmcloud-secrets-0.1.0-draft"] -sha256 = "8e0ec182ea30a420744887cdb42660bf703194eaf8ecf2f0dc0efc4159247ea4" -sha512 = "f0037028e47d307b1551068fcdb9249a0a1cd3d7d1e8d99f33713ec1ee22bc5242fe63155a9f7aaa0492640df2c79ea40ed0839e2add222c069787b59c09f1b3" diff --git a/_examples/invoke/wit/deps.toml b/_examples/invoke/wit/deps.toml deleted file mode 100644 index 4d1db6f..0000000 --- a/_examples/invoke/wit/deps.toml +++ /dev/null @@ -1 +0,0 @@ -wasmcloud-component-go = "../../../wit" diff --git a/_examples/invoke/wit/deps/wasi-cli-0.2.0/package.wit b/_examples/invoke/wit/deps/wasi-cli-0.2.0/package.wit index 0a2737b..20147d0 100644 --- a/_examples/invoke/wit/deps/wasi-cli-0.2.0/package.wit +++ b/_examples/invoke/wit/deps/wasi-cli-0.2.0/package.wit @@ -1,34 +1,17 @@ package wasi:cli@0.2.0; interface environment { - /// Get the POSIX-style environment variables. - /// - /// Each environment variable is provided as a pair of string variable names - /// and string value. - /// - /// Morally, these are a value import, but until value imports are available - /// in the component model, this import function should return the same - /// values each time it is called. get-environment: func() -> list>; - /// Get the POSIX-style arguments to the program. get-arguments: func() -> list; - /// Return a path that programs should use as their initial current working - /// directory, interpreting `.` as shorthand for this. initial-cwd: func() -> option; } interface exit { - /// Exit the current instance and any linked instances. exit: func(status: result); } -interface run { - /// Run the program. - run: func() -> result; -} - interface stdin { use wasi:io/streams@0.2.0.{input-stream}; @@ -47,113 +30,29 @@ interface stderr { get-stderr: func() -> output-stream; } -/// Terminal input. -/// -/// In the future, this may include functions for disabling echoing, -/// disabling input buffering so that keyboard events are sent through -/// immediately, querying supported features, and so on. interface terminal-input { - /// The input side of a terminal. resource terminal-input; } -/// Terminal output. -/// -/// In the future, this may include functions for querying the terminal -/// size, being notified of terminal size changes, querying supported -/// features, and so on. interface terminal-output { - /// The output side of a terminal. resource terminal-output; } -/// An interface providing an optional `terminal-input` for stdin as a -/// link-time authority. interface terminal-stdin { use terminal-input.{terminal-input}; - /// If stdin is connected to a terminal, return a `terminal-input` handle - /// allowing further interaction with it. get-terminal-stdin: func() -> option; } -/// An interface providing an optional `terminal-output` for stdout as a -/// link-time authority. interface terminal-stdout { use terminal-output.{terminal-output}; - /// If stdout is connected to a terminal, return a `terminal-output` handle - /// allowing further interaction with it. get-terminal-stdout: func() -> option; } -/// An interface providing an optional `terminal-output` for stderr as a -/// link-time authority. interface terminal-stderr { use terminal-output.{terminal-output}; - /// If stderr is connected to a terminal, return a `terminal-output` handle - /// allowing further interaction with it. get-terminal-stderr: func() -> option; } -world imports { - import environment; - import exit; - import wasi:io/error@0.2.0; - import wasi:io/poll@0.2.0; - import wasi:io/streams@0.2.0; - import stdin; - import stdout; - import stderr; - import terminal-input; - import terminal-output; - import terminal-stdin; - import terminal-stdout; - import terminal-stderr; - import wasi:clocks/monotonic-clock@0.2.0; - import wasi:clocks/wall-clock@0.2.0; - import wasi:filesystem/types@0.2.0; - import wasi:filesystem/preopens@0.2.0; - import wasi:sockets/network@0.2.0; - import wasi:sockets/instance-network@0.2.0; - import wasi:sockets/udp@0.2.0; - import wasi:sockets/udp-create-socket@0.2.0; - import wasi:sockets/tcp@0.2.0; - import wasi:sockets/tcp-create-socket@0.2.0; - import wasi:sockets/ip-name-lookup@0.2.0; - import wasi:random/random@0.2.0; - import wasi:random/insecure@0.2.0; - import wasi:random/insecure-seed@0.2.0; -} -world command { - import environment; - import exit; - import wasi:io/error@0.2.0; - import wasi:io/poll@0.2.0; - import wasi:io/streams@0.2.0; - import stdin; - import stdout; - import stderr; - import terminal-input; - import terminal-output; - import terminal-stdin; - import terminal-stdout; - import terminal-stderr; - import wasi:clocks/monotonic-clock@0.2.0; - import wasi:clocks/wall-clock@0.2.0; - import wasi:filesystem/types@0.2.0; - import wasi:filesystem/preopens@0.2.0; - import wasi:sockets/network@0.2.0; - import wasi:sockets/instance-network@0.2.0; - import wasi:sockets/udp@0.2.0; - import wasi:sockets/udp-create-socket@0.2.0; - import wasi:sockets/tcp@0.2.0; - import wasi:sockets/tcp-create-socket@0.2.0; - import wasi:sockets/ip-name-lookup@0.2.0; - import wasi:random/random@0.2.0; - import wasi:random/insecure@0.2.0; - import wasi:random/insecure-seed@0.2.0; - - export run; -} diff --git a/_examples/invoke/wit/deps/wasi-config-0.2.0-draft/package.wit b/_examples/invoke/wit/deps/wasi-config-0.2.0-draft/package.wit index 7065b9b..d514554 100644 --- a/_examples/invoke/wit/deps/wasi-config-0.2.0-draft/package.wit +++ b/_examples/invoke/wit/deps/wasi-config-0.2.0-draft/package.wit @@ -1,28 +1,13 @@ package wasi:config@0.2.0-draft; interface runtime { - /// An error type that encapsulates the different errors that can occur fetching config variant config-error { - /// This indicates an error from an "upstream" config source. - /// As this could be almost _anything_ (such as Vault, Kubernetes ConfigMaps, KeyValue buckets, etc), - /// the error message is a string. upstream(string), - /// This indicates an error from an I/O operation. - /// As this could be almost _anything_ (such as a file read, network connection, etc), - /// the error message is a string. - /// Depending on how this ends up being consumed, - /// we may consider moving this to use the `wasi:io/error` type instead. - /// For simplicity right now in supporting multiple implementations, it is being left as a string. io(string), } - /// Gets a single opaque config value set at the given key if it exists get: func(key: string) -> result, config-error>; - /// Gets a list of all set config data get-all: func() -> result>, config-error>; } -world imports { - import runtime; -} diff --git a/_examples/invoke/wit/deps/wasi-http-0.2.0/package.wit b/_examples/invoke/wit/deps/wasi-http-0.2.0/package.wit index 11f7ff4..63031a8 100644 --- a/_examples/invoke/wit/deps/wasi-http-0.2.0/package.wit +++ b/_examples/invoke/wit/deps/wasi-http-0.2.0/package.wit @@ -1,15 +1,11 @@ package wasi:http@0.2.0; -/// This interface defines all of the types and methods for implementing -/// HTTP Requests and Responses, both incoming and outgoing, as well as -/// their headers, trailers, and bodies. interface types { use wasi:clocks/monotonic-clock@0.2.0.{duration}; use wasi:io/streams@0.2.0.{input-stream, output-stream}; use wasi:io/error@0.2.0.{error as io-error}; use wasi:io/poll@0.2.0.{pollable}; - /// This type corresponds to HTTP standard Methods. variant method { get, head, @@ -23,33 +19,27 @@ interface types { other(string), } - /// This type corresponds to HTTP standard Related Schemes. variant scheme { HTTP, HTTPS, other(string), } - /// Defines the case payload type for `DNS-error` above: record DNS-error-payload { rcode: option, info-code: option, } - /// Defines the case payload type for `TLS-alert-received` above: record TLS-alert-received-payload { alert-id: option, alert-message: option, } - /// Defines the case payload type for `HTTP-response-{header,trailer}-size` above: record field-size-payload { field-name: option, field-size: option, } - /// These cases are inspired by the IANA HTTP Proxy Error Types: - /// https://www.iana.org/assignments/http-proxy-status/http-proxy-status.xhtml#table-http-proxy-error-types variant error-code { DNS-timeout, DNS-error(DNS-error-payload), @@ -89,483 +79,120 @@ interface types { HTTP-protocol-error, loop-detected, configuration-error, - /// This is a catch-all error for anything that doesn't fit cleanly into a - /// more specific case. It also includes an optional string for an - /// unstructured description of the error. Users should not depend on the - /// string for diagnosing errors, as it's not required to be consistent - /// between implementations. internal-error(option), } - /// This type enumerates the different kinds of errors that may occur when - /// setting or appending to a `fields` resource. variant header-error { - /// This error indicates that a `field-key` or `field-value` was - /// syntactically invalid when used with an operation that sets headers in a - /// `fields`. invalid-syntax, - /// This error indicates that a forbidden `field-key` was used when trying - /// to set a header in a `fields`. forbidden, - /// This error indicates that the operation on the `fields` was not - /// permitted because the fields are immutable. immutable, } - /// Field keys are always strings. type field-key = string; - /// Field values should always be ASCII strings. However, in - /// reality, HTTP implementations often have to interpret malformed values, - /// so they are provided as a list of bytes. type field-value = list; - /// This following block defines the `fields` resource which corresponds to - /// HTTP standard Fields. Fields are a common representation used for both - /// Headers and Trailers. - /// - /// A `fields` may be mutable or immutable. A `fields` created using the - /// constructor, `from-list`, or `clone` will be mutable, but a `fields` - /// resource given by other means (including, but not limited to, - /// `incoming-request.headers`, `outgoing-request.headers`) might be be - /// immutable. In an immutable fields, the `set`, `append`, and `delete` - /// operations will fail with `header-error.immutable`. resource fields { - /// Construct an empty HTTP Fields. - /// - /// The resulting `fields` is mutable. constructor(); - /// Construct an HTTP Fields. - /// - /// The resulting `fields` is mutable. - /// - /// The list represents each key-value pair in the Fields. Keys - /// which have multiple values are represented by multiple entries in this - /// list with the same key. - /// - /// The tuple is a pair of the field key, represented as a string, and - /// Value, represented as a list of bytes. In a valid Fields, all keys - /// and values are valid UTF-8 strings. However, values are not always - /// well-formed, so they are represented as a raw list of bytes. - /// - /// An error result will be returned if any header or value was - /// syntactically invalid, or if a header was forbidden. from-list: static func(entries: list>) -> result; - /// Get all of the values corresponding to a key. If the key is not present - /// in this `fields`, an empty list is returned. However, if the key is - /// present but empty, this is represented by a list with one or more - /// empty field-values present. get: func(name: field-key) -> list; - /// Returns `true` when the key is present in this `fields`. If the key is - /// syntactically invalid, `false` is returned. has: func(name: field-key) -> bool; - /// Set all of the values for a key. Clears any existing values for that - /// key, if they have been set. - /// - /// Fails with `header-error.immutable` if the `fields` are immutable. set: func(name: field-key, value: list) -> result<_, header-error>; - /// Delete all values for a key. Does nothing if no values for the key - /// exist. - /// - /// Fails with `header-error.immutable` if the `fields` are immutable. delete: func(name: field-key) -> result<_, header-error>; - /// Append a value for a key. Does not change or delete any existing - /// values for that key. - /// - /// Fails with `header-error.immutable` if the `fields` are immutable. append: func(name: field-key, value: field-value) -> result<_, header-error>; - /// Retrieve the full set of keys and values in the Fields. Like the - /// constructor, the list represents each key-value pair. - /// - /// The outer list represents each key-value pair in the Fields. Keys - /// which have multiple values are represented by multiple entries in this - /// list with the same key. entries: func() -> list>; - /// Make a deep copy of the Fields. Equivelant in behavior to calling the - /// `fields` constructor on the return value of `entries`. The resulting - /// `fields` is mutable. clone: func() -> fields; } - /// Headers is an alias for Fields. type headers = fields; - /// Trailers is an alias for Fields. type trailers = fields; - /// Represents an incoming HTTP Request. resource incoming-request { - /// Returns the method of the incoming request. method: func() -> method; - /// Returns the path with query parameters from the request, as a string. path-with-query: func() -> option; - /// Returns the protocol scheme from the request. scheme: func() -> option; - /// Returns the authority from the request, if it was present. authority: func() -> option; - /// Get the `headers` associated with the request. - /// - /// The returned `headers` resource is immutable: `set`, `append`, and - /// `delete` operations will fail with `header-error.immutable`. - /// - /// The `headers` returned are a child resource: it must be dropped before - /// the parent `incoming-request` is dropped. Dropping this - /// `incoming-request` before all children are dropped will trap. headers: func() -> headers; - /// Gives the `incoming-body` associated with this request. Will only - /// return success at most once, and subsequent calls will return error. consume: func() -> result; } - /// Represents an outgoing HTTP Request. resource outgoing-request { - /// Construct a new `outgoing-request` with a default `method` of `GET`, and - /// `none` values for `path-with-query`, `scheme`, and `authority`. - /// - /// * `headers` is the HTTP Headers for the Request. - /// - /// It is possible to construct, or manipulate with the accessor functions - /// below, an `outgoing-request` with an invalid combination of `scheme` - /// and `authority`, or `headers` which are not permitted to be sent. - /// It is the obligation of the `outgoing-handler.handle` implementation - /// to reject invalid constructions of `outgoing-request`. constructor(headers: headers); - /// Returns the resource corresponding to the outgoing Body for this - /// Request. - /// - /// Returns success on the first call: the `outgoing-body` resource for - /// this `outgoing-request` can be retrieved at most once. Subsequent - /// calls will return error. body: func() -> result; - /// Get the Method for the Request. method: func() -> method; - /// Set the Method for the Request. Fails if the string present in a - /// `method.other` argument is not a syntactically valid method. set-method: func(method: method) -> result; - /// Get the combination of the HTTP Path and Query for the Request. - /// When `none`, this represents an empty Path and empty Query. path-with-query: func() -> option; - /// Set the combination of the HTTP Path and Query for the Request. - /// When `none`, this represents an empty Path and empty Query. Fails is the - /// string given is not a syntactically valid path and query uri component. set-path-with-query: func(path-with-query: option) -> result; - /// Get the HTTP Related Scheme for the Request. When `none`, the - /// implementation may choose an appropriate default scheme. scheme: func() -> option; - /// Set the HTTP Related Scheme for the Request. When `none`, the - /// implementation may choose an appropriate default scheme. Fails if the - /// string given is not a syntactically valid uri scheme. set-scheme: func(scheme: option) -> result; - /// Get the HTTP Authority for the Request. A value of `none` may be used - /// with Related Schemes which do not require an Authority. The HTTP and - /// HTTPS schemes always require an authority. authority: func() -> option; - /// Set the HTTP Authority for the Request. A value of `none` may be used - /// with Related Schemes which do not require an Authority. The HTTP and - /// HTTPS schemes always require an authority. Fails if the string given is - /// not a syntactically valid uri authority. set-authority: func(authority: option) -> result; - /// Get the headers associated with the Request. - /// - /// The returned `headers` resource is immutable: `set`, `append`, and - /// `delete` operations will fail with `header-error.immutable`. - /// - /// This headers resource is a child: it must be dropped before the parent - /// `outgoing-request` is dropped, or its ownership is transfered to - /// another component by e.g. `outgoing-handler.handle`. headers: func() -> headers; } - /// Parameters for making an HTTP Request. Each of these parameters is - /// currently an optional timeout applicable to the transport layer of the - /// HTTP protocol. - /// - /// These timeouts are separate from any the user may use to bound a - /// blocking call to `wasi:io/poll.poll`. resource request-options { - /// Construct a default `request-options` value. constructor(); - /// The timeout for the initial connect to the HTTP Server. connect-timeout: func() -> option; - /// Set the timeout for the initial connect to the HTTP Server. An error - /// return value indicates that this timeout is not supported. set-connect-timeout: func(duration: option) -> result; - /// The timeout for receiving the first byte of the Response body. first-byte-timeout: func() -> option; - /// Set the timeout for receiving the first byte of the Response body. An - /// error return value indicates that this timeout is not supported. set-first-byte-timeout: func(duration: option) -> result; - /// The timeout for receiving subsequent chunks of bytes in the Response - /// body stream. between-bytes-timeout: func() -> option; - /// Set the timeout for receiving subsequent chunks of bytes in the Response - /// body stream. An error return value indicates that this timeout is not - /// supported. set-between-bytes-timeout: func(duration: option) -> result; } - /// Represents the ability to send an HTTP Response. - /// - /// This resource is used by the `wasi:http/incoming-handler` interface to - /// allow a Response to be sent corresponding to the Request provided as the - /// other argument to `incoming-handler.handle`. resource response-outparam { - /// Set the value of the `response-outparam` to either send a response, - /// or indicate an error. - /// - /// This method consumes the `response-outparam` to ensure that it is - /// called at most once. If it is never called, the implementation - /// will respond with an error. - /// - /// The user may provide an `error` to `response` to allow the - /// implementation determine how to respond with an HTTP error response. set: static func(param: response-outparam, response: result); } - /// This type corresponds to the HTTP standard Status Code. type status-code = u16; - /// Represents an incoming HTTP Response. resource incoming-response { - /// Returns the status code from the incoming response. status: func() -> status-code; - /// Returns the headers from the incoming response. - /// - /// The returned `headers` resource is immutable: `set`, `append`, and - /// `delete` operations will fail with `header-error.immutable`. - /// - /// This headers resource is a child: it must be dropped before the parent - /// `incoming-response` is dropped. headers: func() -> headers; - /// Returns the incoming body. May be called at most once. Returns error - /// if called additional times. consume: func() -> result; } - /// Represents an incoming HTTP Request or Response's Body. - /// - /// A body has both its contents - a stream of bytes - and a (possibly - /// empty) set of trailers, indicating that the full contents of the - /// body have been received. This resource represents the contents as - /// an `input-stream` and the delivery of trailers as a `future-trailers`, - /// and ensures that the user of this interface may only be consuming either - /// the body contents or waiting on trailers at any given time. resource incoming-body { - /// Returns the contents of the body, as a stream of bytes. - /// - /// Returns success on first call: the stream representing the contents - /// can be retrieved at most once. Subsequent calls will return error. - /// - /// The returned `input-stream` resource is a child: it must be dropped - /// before the parent `incoming-body` is dropped, or consumed by - /// `incoming-body.finish`. - /// - /// This invariant ensures that the implementation can determine whether - /// the user is consuming the contents of the body, waiting on the - /// `future-trailers` to be ready, or neither. This allows for network - /// backpressure is to be applied when the user is consuming the body, - /// and for that backpressure to not inhibit delivery of the trailers if - /// the user does not read the entire body. %stream: func() -> result; - /// Takes ownership of `incoming-body`, and returns a `future-trailers`. - /// This function will trap if the `input-stream` child is still alive. finish: static func(this: incoming-body) -> future-trailers; } - /// Represents a future which may eventaully return trailers, or an error. - /// - /// In the case that the incoming HTTP Request or Response did not have any - /// trailers, this future will resolve to the empty set of trailers once the - /// complete Request or Response body has been received. resource future-trailers { - /// Returns a pollable which becomes ready when either the trailers have - /// been received, or an error has occured. When this pollable is ready, - /// the `get` method will return `some`. subscribe: func() -> pollable; - /// Returns the contents of the trailers, or an error which occured, - /// once the future is ready. - /// - /// The outer `option` represents future readiness. Users can wait on this - /// `option` to become `some` using the `subscribe` method. - /// - /// The outer `result` is used to retrieve the trailers or error at most - /// once. It will be success on the first call in which the outer option - /// is `some`, and error on subsequent calls. - /// - /// The inner `result` represents that either the HTTP Request or Response - /// body, as well as any trailers, were received successfully, or that an - /// error occured receiving them. The optional `trailers` indicates whether - /// or not trailers were present in the body. - /// - /// When some `trailers` are returned by this method, the `trailers` - /// resource is immutable, and a child. Use of the `set`, `append`, or - /// `delete` methods will return an error, and the resource must be - /// dropped before the parent `future-trailers` is dropped. get: func() -> option, error-code>>>; } - /// Represents an outgoing HTTP Response. resource outgoing-response { - /// Construct an `outgoing-response`, with a default `status-code` of `200`. - /// If a different `status-code` is needed, it must be set via the - /// `set-status-code` method. - /// - /// * `headers` is the HTTP Headers for the Response. constructor(headers: headers); - /// Get the HTTP Status Code for the Response. status-code: func() -> status-code; - /// Set the HTTP Status Code for the Response. Fails if the status-code - /// given is not a valid http status code. set-status-code: func(status-code: status-code) -> result; - /// Get the headers associated with the Request. - /// - /// The returned `headers` resource is immutable: `set`, `append`, and - /// `delete` operations will fail with `header-error.immutable`. - /// - /// This headers resource is a child: it must be dropped before the parent - /// `outgoing-request` is dropped, or its ownership is transfered to - /// another component by e.g. `outgoing-handler.handle`. headers: func() -> headers; - /// Returns the resource corresponding to the outgoing Body for this Response. - /// - /// Returns success on the first call: the `outgoing-body` resource for - /// this `outgoing-response` can be retrieved at most once. Subsequent - /// calls will return error. body: func() -> result; } - /// Represents an outgoing HTTP Request or Response's Body. - /// - /// A body has both its contents - a stream of bytes - and a (possibly - /// empty) set of trailers, inducating the full contents of the body - /// have been sent. This resource represents the contents as an - /// `output-stream` child resource, and the completion of the body (with - /// optional trailers) with a static function that consumes the - /// `outgoing-body` resource, and ensures that the user of this interface - /// may not write to the body contents after the body has been finished. - /// - /// If the user code drops this resource, as opposed to calling the static - /// method `finish`, the implementation should treat the body as incomplete, - /// and that an error has occured. The implementation should propogate this - /// error to the HTTP protocol by whatever means it has available, - /// including: corrupting the body on the wire, aborting the associated - /// Request, or sending a late status code for the Response. resource outgoing-body { - /// Returns a stream for writing the body contents. - /// - /// The returned `output-stream` is a child resource: it must be dropped - /// before the parent `outgoing-body` resource is dropped (or finished), - /// otherwise the `outgoing-body` drop or `finish` will trap. - /// - /// Returns success on the first call: the `output-stream` resource for - /// this `outgoing-body` may be retrieved at most once. Subsequent calls - /// will return error. write: func() -> result; - /// Finalize an outgoing body, optionally providing trailers. This must be - /// called to signal that the response is complete. If the `outgoing-body` - /// is dropped without calling `outgoing-body.finalize`, the implementation - /// should treat the body as corrupted. - /// - /// Fails if the body's `outgoing-request` or `outgoing-response` was - /// constructed with a Content-Length header, and the contents written - /// to the body (via `write`) does not match the value given in the - /// Content-Length. finish: static func(this: outgoing-body, trailers: option) -> result<_, error-code>; } - /// Represents a future which may eventaully return an incoming HTTP - /// Response, or an error. - /// - /// This resource is returned by the `wasi:http/outgoing-handler` interface to - /// provide the HTTP Response corresponding to the sent Request. resource future-incoming-response { - /// Returns a pollable which becomes ready when either the Response has - /// been received, or an error has occured. When this pollable is ready, - /// the `get` method will return `some`. subscribe: func() -> pollable; - /// Returns the incoming HTTP Response, or an error, once one is ready. - /// - /// The outer `option` represents future readiness. Users can wait on this - /// `option` to become `some` using the `subscribe` method. - /// - /// The outer `result` is used to retrieve the response or error at most - /// once. It will be success on the first call in which the outer option - /// is `some`, and error on subsequent calls. - /// - /// The inner `result` represents that either the incoming HTTP Response - /// status and headers have recieved successfully, or that an error - /// occured. Errors may also occur while consuming the response body, - /// but those will be reported by the `incoming-body` and its - /// `output-stream` child. get: func() -> option>>; } - /// Attempts to extract a http-related `error` from the wasi:io `error` - /// provided. - /// - /// Stream operations which return - /// `wasi:io/stream/stream-error::last-operation-failed` have a payload of - /// type `wasi:io/error/error` with more information about the operation - /// that failed. This payload can be passed through to this function to see - /// if there's http-related information about the error to return. - /// - /// Note that this function is fallible because not all io-errors are - /// http-related errors. http-error-code: func(err: borrow) -> option; } -/// This interface defines a handler of incoming HTTP Requests. It should -/// be exported by components which can respond to HTTP Requests. interface incoming-handler { use types.{incoming-request, response-outparam}; - /// This function is invoked with an incoming HTTP Request, and a resource - /// `response-outparam` which provides the capability to reply with an HTTP - /// Response. The response is sent by calling the `response-outparam.set` - /// method, which allows execution to continue after the response has been - /// sent. This enables both streaming to the response body, and performing other - /// work. - /// - /// The implementor of this function must write a response to the - /// `response-outparam` before returning, or else the caller will respond - /// with an error on its behalf. handle: func(request: incoming-request, response-out: response-outparam); } -/// This interface defines a handler of outgoing HTTP Requests. It should be -/// imported by components which wish to make HTTP Requests. interface outgoing-handler { use types.{outgoing-request, request-options, future-incoming-response, error-code}; - /// This function is invoked with an outgoing HTTP Request, and it returns - /// a resource `future-incoming-response` which represents an HTTP Response - /// which may arrive in the future. - /// - /// The `options` argument accepts optional parameters for the HTTP - /// protocol's transport layer. - /// - /// This function may return an error if the `outgoing-request` is invalid - /// or not allowed to be made. Otherwise, protocol errors are reported - /// through the `future-incoming-response`. handle: func(request: outgoing-request, options: option) -> result; } -/// The `wasi:http/proxy` world captures a widely-implementable intersection of -/// hosts that includes HTTP forward and reverse proxies. Components targeting -/// this world may concurrently stream in and out any number of incoming and -/// outgoing HTTP requests. -world proxy { - import wasi:random/random@0.2.0; - import wasi:io/error@0.2.0; - import wasi:io/poll@0.2.0; - import wasi:io/streams@0.2.0; - import wasi:cli/stdout@0.2.0; - import wasi:cli/stderr@0.2.0; - import wasi:cli/stdin@0.2.0; - import wasi:clocks/monotonic-clock@0.2.0; - import types; - import outgoing-handler; - import wasi:clocks/wall-clock@0.2.0; - - export incoming-handler; -} diff --git a/_examples/invoke/wit/deps/wasi-io-0.2.0/package.wit b/_examples/invoke/wit/deps/wasi-io-0.2.0/package.wit index 1840029..962734d 100644 --- a/_examples/invoke/wit/deps/wasi-io-0.2.0/package.wit +++ b/_examples/invoke/wit/deps/wasi-io-0.2.0/package.wit @@ -1,11 +1,5 @@ package wasi:io@0.2.0; -interface error { - resource error { - to-debug-string: func() -> string; - } -} - interface poll { resource pollable { ready: func() -> bool; @@ -15,6 +9,12 @@ interface poll { poll: func(in: list>) -> list; } +interface error { + resource error { + to-debug-string: func() -> string; + } +} + interface streams { use error.{error}; use poll.{pollable}; diff --git a/_examples/invoke/wit/deps/wasi-logging-0.1.0-draft/package.wit b/_examples/invoke/wit/deps/wasi-logging-0.1.0-draft/package.wit index df4e8de..70349a7 100644 --- a/_examples/invoke/wit/deps/wasi-logging-0.1.0-draft/package.wit +++ b/_examples/invoke/wit/deps/wasi-logging-0.1.0-draft/package.wit @@ -1,36 +1,15 @@ -package wasi:logging; +package wasi:logging@0.1.0-draft; -/// WASI Logging is a logging API intended to let users emit log messages with -/// simple priority levels and context values. interface logging { - /// A log level, describing a kind of message. enum level { - /// Describes messages about the values of variables and the flow of - /// control within a program. trace, - /// Describes messages likely to be of interest to someone debugging a - /// program. debug, - /// Describes messages likely to be of interest to someone monitoring a - /// program. info, - /// Describes messages indicating hazardous situations. warn, - /// Describes messages indicating serious errors. error, - /// Describes messages indicating fatal errors. critical, } - /// Emit a log message. - /// - /// A log message has a `level` describing what kind of message is being - /// sent, a context, which is an uninterpreted string meant to help - /// consumers group similar messages, and a string containing the message - /// text. log: func(level: level, context: string, message: string); } -world imports { - import logging; -} diff --git a/_examples/invoke/wit/deps/wasmcloud-bus-1.0.0/package.wit b/_examples/invoke/wit/deps/wasmcloud-bus-1.0.0/package.wit index 1008a6f..2a7cd93 100644 --- a/_examples/invoke/wit/deps/wasmcloud-bus-1.0.0/package.wit +++ b/_examples/invoke/wit/deps/wasmcloud-bus-1.0.0/package.wit @@ -1,15 +1,10 @@ package wasmcloud:bus@1.0.0; interface lattice { - /// Interface target. This represents an interface, which can be selected by `set-link-name`. resource call-target-interface { constructor(namespace: string, %package: string, %interface: string); } - /// Set an optional link name to use for all interfaces specified. This is advanced - /// functionality only available within wasmcloud and, as such, is exposed here as part of the - /// wasmcloud:bus package. This is used when you are linking multiple of the same interfaces - /// (i.e. a keyvalue implementation for caching and another one for secrets) to a component set-link-name: func(name: string, interfaces: list); } diff --git a/_examples/invoke/wit/deps/wasmcloud-component-go-0.1.0/package.wit b/_examples/invoke/wit/deps/wasmcloud-component-go-0.1.0/package.wit new file mode 100644 index 0000000..75caf04 --- /dev/null +++ b/_examples/invoke/wit/deps/wasmcloud-component-go-0.1.0/package.wit @@ -0,0 +1,85 @@ +package wasmcloud:component-go@0.1.0; + +world exports { + import wasi:io/poll@0.2.0; + import wasi:clocks/monotonic-clock@0.2.0; + import wasi:io/error@0.2.0; + import wasi:io/streams@0.2.0; + import wasi:http/types@0.2.0; + + export wasi:http/incoming-handler@0.2.0; +} +world imports { + import wasi:logging/logging@0.1.0-draft; + import wasi:config/runtime@0.2.0-draft; + import wasi:io/poll@0.2.0; + import wasi:clocks/monotonic-clock@0.2.0; + import wasi:io/error@0.2.0; + import wasi:io/streams@0.2.0; + import wasi:http/types@0.2.0; + import wasi:http/outgoing-handler@0.2.0; + import wasmcloud:bus/lattice@1.0.0; + import wasmcloud:secrets/store@0.1.0-draft; + import wasmcloud:secrets/reveal@0.1.0-draft; + import wasi:cli/environment@0.2.0; + import wasi:cli/exit@0.2.0; + import wasi:cli/stdin@0.2.0; + import wasi:cli/stdout@0.2.0; + import wasi:cli/stderr@0.2.0; + import wasi:cli/terminal-input@0.2.0; + import wasi:cli/terminal-output@0.2.0; + import wasi:cli/terminal-stdin@0.2.0; + import wasi:cli/terminal-stdout@0.2.0; + import wasi:cli/terminal-stderr@0.2.0; + import wasi:clocks/wall-clock@0.2.0; + import wasi:filesystem/types@0.2.0; + import wasi:filesystem/preopens@0.2.0; + import wasi:sockets/network@0.2.0; + import wasi:sockets/instance-network@0.2.0; + import wasi:sockets/udp@0.2.0; + import wasi:sockets/udp-create-socket@0.2.0; + import wasi:sockets/tcp@0.2.0; + import wasi:sockets/tcp-create-socket@0.2.0; + import wasi:sockets/ip-name-lookup@0.2.0; + import wasi:random/random@0.2.0; + import wasi:random/insecure@0.2.0; + import wasi:random/insecure-seed@0.2.0; +} +world sdk { + import wasi:io/poll@0.2.0; + import wasi:clocks/monotonic-clock@0.2.0; + import wasi:io/error@0.2.0; + import wasi:io/streams@0.2.0; + import wasi:http/types@0.2.0; + import wasi:logging/logging@0.1.0-draft; + import wasi:config/runtime@0.2.0-draft; + import wasi:http/outgoing-handler@0.2.0; + import wasmcloud:bus/lattice@1.0.0; + import wasmcloud:secrets/store@0.1.0-draft; + import wasmcloud:secrets/reveal@0.1.0-draft; + import wasi:cli/environment@0.2.0; + import wasi:cli/exit@0.2.0; + import wasi:cli/stdin@0.2.0; + import wasi:cli/stdout@0.2.0; + import wasi:cli/stderr@0.2.0; + import wasi:cli/terminal-input@0.2.0; + import wasi:cli/terminal-output@0.2.0; + import wasi:cli/terminal-stdin@0.2.0; + import wasi:cli/terminal-stdout@0.2.0; + import wasi:cli/terminal-stderr@0.2.0; + import wasi:clocks/wall-clock@0.2.0; + import wasi:filesystem/types@0.2.0; + import wasi:filesystem/preopens@0.2.0; + import wasi:sockets/network@0.2.0; + import wasi:sockets/instance-network@0.2.0; + import wasi:sockets/udp@0.2.0; + import wasi:sockets/udp-create-socket@0.2.0; + import wasi:sockets/tcp@0.2.0; + import wasi:sockets/tcp-create-socket@0.2.0; + import wasi:sockets/ip-name-lookup@0.2.0; + import wasi:random/random@0.2.0; + import wasi:random/insecure@0.2.0; + import wasi:random/insecure-seed@0.2.0; + + export wasi:http/incoming-handler@0.2.0; +} diff --git a/_examples/invoke/wit/deps/wasmcloud-component-go/world.wit b/_examples/invoke/wit/deps/wasmcloud-component-go/world.wit deleted file mode 100644 index f881ff8..0000000 --- a/_examples/invoke/wit/deps/wasmcloud-component-go/world.wit +++ /dev/null @@ -1,26 +0,0 @@ -package wasmcloud:component-go@0.1.0; - -world exports { - // wasi - export wasi:http/incoming-handler@0.2.0; -} - -world imports { - // tinygo - include wasi:cli/imports@0.2.0; - - // wasi - import wasi:logging/logging; - import wasi:config/runtime@0.2.0-draft; - import wasi:http/outgoing-handler@0.2.0; - - // wasmcloud - import wasmcloud:bus/lattice@1.0.0; - import wasmcloud:secrets/store@0.1.0-draft; - import wasmcloud:secrets/reveal@0.1.0-draft; -} - -world sdk { - include exports; - include imports; -} diff --git a/_examples/invoke/wit/deps/wasmcloud-secrets-0.1.0-draft/package.wit b/_examples/invoke/wit/deps/wasmcloud-secrets-0.1.0-draft/package.wit index a431b95..3a93ea4 100644 --- a/_examples/invoke/wit/deps/wasmcloud-secrets-0.1.0-draft/package.wit +++ b/_examples/invoke/wit/deps/wasmcloud-secrets-0.1.0-draft/package.wit @@ -1,52 +1,25 @@ -/// This WIT interface powers secret support in wasmCloud -/// -/// See RFC #2190 https://github.com/wasmCloud/wasmCloud/issues/2190 package wasmcloud:secrets@0.1.0-draft; interface store { - /// An error type that encapsulates the different errors that can occur fetching secrets variant secrets-error { - /// This indicates an error from an "upstream" secrets source. - /// As this could be almost _anything_ (such as Vault, Kubernetes Secrets, KeyValue buckets, etc), - /// the error message is a string. upstream(string), - /// This indicates an error from an I/O operation. - /// As this could be almost _anything_ (such as a file read, network connection, etc), - /// the error message is a string. - /// Depending on how this ends up being consumed, - /// we may consider moving this to use the `wasi:io/error` type instead. - /// For simplicity right now in supporting multiple implementations, it is being left as a string. io(string), - /// This indicates that the secret was not found. Generally "not found" errors will - /// be handled by the upstream secrets backend, but there are cases where the host - /// may need to return this error. not-found, } - /// A secret value can be either a string or a byte array, which lets you - /// store binary data as a secret. variant secret-value { - /// A string value %string(string), - /// A byte array value bytes(list), } - /// A secret is a resource that can only be borrowed. This allows you to - /// pass around handles to secrets and not reveal the values until a - /// component needs them. - /// You need to use the reveal interface to get the value. resource secret; - /// Gets a single opaque secrets value set at the given key if it exists get: func(key: string) -> result; } interface reveal { use store.{secret, secret-value}; - /// Reveals the value of a secret to the caller. - /// This lets you easily audit your code to discover where secrets are being used. reveal: func(s: borrow) -> secret-value; } diff --git a/_examples/invoke/wkg.lock b/_examples/invoke/wkg.lock new file mode 100644 index 0000000..5e100f7 --- /dev/null +++ b/_examples/invoke/wkg.lock @@ -0,0 +1,12 @@ +# This file is automatically generated. +# It is not intended for manual editing. +version = 1 + +[[packages]] +name = "wasmcloud:component-go" +registry = "wasmcloud.com" + +[[packages.versions]] +requirement = "=0.1.0" +version = "0.1.0" +digest = "sha256:de3e9af7dedd0d9e882f68f1bee533c7af9c6a1947eb40cbf1ef6163b7d41784"