This is a friendly fork of https://github.com/Kong/proxy-wasm-assemblyscript-sdk/, We have developed a more user-friendly wasm-assemblyscript SDK based on this repository.
Create a new project:
npm init
npm install --save-dev assemblyscript
npx asinit .Include "use": "abort=abort_proc_exit" to the asconfig.json file as part of
the options passed to asc compiler:
{
  "options": {
    "use": "abort=abort_proc_exit"
  }
}
Add "@higress/proxy-wasm-assemblyscript-sdk": "0.0.2" to your dependencies then run npm install.
Copy this into assembly/index.ts:
export * from "@higress/proxy-wasm-assemblyscript-sdk/proxy";
import {
  RootContext,
  Context,
  registerRootContext,
  FilterHeadersStatusValues,
  stream_context
} from "@higress/proxy-wasm-assemblyscript-sdk";
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");To 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).
Configure envoy with your filter:
          - 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