Interceptor Example
This example demonstrates an interceptor that wraps a component with cross-cutting logging advice.
Structure
wit/package.wit: WIT interfaces for the greeter and logger worldsgreeter/: Wasm component that exports agreetfunctionlogger/: Wasm component that exportsmodulewise:interceptor/adviceand implements generic logging before and after each invocationconfig.toml: Component and capability configurationwasi-logging-to-stdout.wasm: WASI logging adapter (fetched from an OCI registry on first build)
Building and Running
Change into the examples/interceptor directory.
- Build the components:
- Run the example:
Output:
... INFO [interceptor]: Before greet(name: "World")
... INFO [interceptor]: After greet -> "Hello, World!"
"Hello, World!"
Configuration
[component.greeter] uri = "./target/wasm32-unknown-unknown/release/greeter.wasm" interceptors = ["logging-advice"] [component.logging-advice] uri = "./target/wasm32-unknown-unknown/release/logger.wasm" imports = ["stdout-logger"] [component.stdout-logger] uri = "./wasi-logging-to-stdout.wasm" imports = ["wasip2"] [capability.wasip2] type = "wasi:p2"
How It Works
The interceptors property on the greeter refers to generic advice, so the runtime generates an interceptor component at startup. The generated interceptor composes the logging-advice component with the greeter component, so that the advice is applied to each exported function of the greeter.