Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/solo-io/proxy-runtime
https://github.com/solo-io/proxy-runtime
Last synced: about 2 months ago
JSON representation
- Host: GitHub
- URL: https://github.com/solo-io/proxy-runtime
- Owner: solo-io
- License: apache-2.0
- Created: 2020-01-19T21:16:46.000Z (over 4 years ago)
- Default Branch: master
- Last Pushed: 2024-01-31T15:46:24.000Z (8 months ago)
- Last Synced: 2024-07-21T11:33:40.784Z (about 2 months ago)
- Language: TypeScript
- Size: 317 KB
- Stars: 86
- Watchers: 40
- Forks: 25
- Open Issues: 13
-
Metadata Files:
- Readme: README.md
- License: LICENSE.txt
Awesome Lists containing this project
README
How to use the SDK:
# Local development
Clone this repo to somewhere on disk.Create a new project:
```shell
npm install --save-dev assemblyscript
npx asinit .
```add `--use abort=abort_proc_exit` to the `asc` in packages.json. for example:
```json
"asbuild:debug": "asc assembly/index.ts -b build/untouched.wasm --use abort=abort_proc_exit -t build/untouched.wat --sourceMap http://127.0.0.1:8081/build/untouched.wasm.map --debug",
"asbuild:release": "asc assembly/index.ts -b build/optimized.wasm --use abort=abort_proc_exit -t build/optimized.wat --sourceMap --optimize",
```Add `"@solo-io/proxy-runtime": "file:/home/yuval/Projects/solo/proxy-assemblyscript"` to your dependencies.
run `npm install`# using NPM
Just include the `@solo-io/proxy-runtime` package.
# Hello, World
## Code
Copy this into assembly/index.ts:```ts
export * from "@solo-io/proxy-runtime/proxy"; // this exports the required functions for the proxy to interact with us.
import { RootContext, Context, registerRootContext, FilterHeadersStatusValues, stream_context } from "@solo-io/proxy-runtime";class AddHeaderRoot extends RootContext {
createContext(context_id: u32): Context {
return new AddHeader(context_id, this);
}
}class AddHeader extends Context {
constructor(context_id: u32, root_context: AddHeaderRoot) {
super(context_id, root_context);
}
onResponseHeaders(a: u32, end_of_stream: bool): FilterHeadersStatusValues {
const root_context = this.root_context;
if (root_context.getConfiguration() == "") {
stream_context.headers.response.add("hello", "world!");
} else {
stream_context.headers.response.add("hello", root_context.getConfiguration());
}
return FilterHeadersStatusValues.Continue;
}
}registerRootContext((context_id: u32) => { return new AddHeaderRoot(context_id); }, "add_header");
```
## buildTo build, simply run:
```
npm run asbuild
```build results will be in the build folder. `untouched.wasm` and `optimized.wasm` are the compiled
file that we will use (you only need one of them, if unsure use `optimized.wasm`).## Run
Configure envoy with your filter:
```yaml
- name: envoy.filters.http.wasm
config:
config:
name: "add_header"
root_id: "add_header"
configuration: "what ever you want"
vm_config:
vm_id: "my_vm_id"
runtime: "envoy.wasm.runtime.v8"
code:
local:
filename: /PATH/TO/CODE/build/optimized.wasm
allow_precompiled: false
```