Skip to main content
Version: 1.x

Typescript HTTP Password Checker

This repository contains a WebAssembly Component written in Typescript, which:

  • Implements a wasi:http-compliant HTTP handler
  • Uses the httpserver provider to serve requests
  • Provides APIs for checking a password (from a secret store, and from an incoming TLS-encrypted request)
  • Can be declaratively provisioned with wadm

This example also serves as a great example of using JS ecosystem projects, notably:

Dependencies

![WARN] When building this project, ensure you are using a stable NodeJS release.

Use of node version management tools (ex. nvm or more newer NVM compatible tools like fnm) are recommended -- a .nvmrc file is included for easy use.

Building this project relies on the following installed software:

NameDescription
washWasmcloud Shell controls your wasmcloud host instances and enables building components
npmNode Package Manager (NPM) which manages packages for for the NodeJS ecosystem
node[NodeJS runtime][nodejs] (see .nvmrc for version)

Quickstart

To get started developing this repository quickly, clone the repo and run wash dev:

console
wash dev

wash dev does many things for you:

  • Starts the wasmCloud host that can run your WebAssembly component
  • Builds this project (including necessary npm script targets)
  • Builds a declarative WADM manifest consisting of:
    • Your locally built component
    • A HTTP server provider which will receive requests from the outside world (on port 8000 by default)
    • Necessary links between providers and your component so your component can handle web traffic
  • Deploys the built manifest (i.e all dependencies to run this application) locally
  • Watches your code for changes and re-deploys when necessary.

Send a request to the running component

Once wash dev is serving your component, to send a request to the running component (via the HTTP server provider):

console
curl localhost:8000/api/v1/check --data '{"value": "test"}'

You should see a JSON response like:

json
{
  "status": "success",
  "data": {
    "status": "success",
    "data": {
      "strength": "very-weak",
      "length": 4,
      "contains": [
        "lowercase"
      ]
    }
  }
}

Adding Capabilities

To learn how to extend this example with additional capabilities, see the Adding Capabilities section of the wasmCloud documentation.

Issues/ FAQ

curl produces a "failed to invoke" error

If curling produces

➜ curl localhost:8000
failed to invoke `wrpc:http/incoming-handler.handle`: failed to invoke `wrpc:http/incoming-handler@0.1.0.handle`: failed to shutdown synchronous parameter channel: not connected%

You may need to just wait a little bit -- the HTTP server takes a second or two to start up.

If the issue persists, you may have a lingering HTTP server provider running on your system. You can use pgrep to find it:

console
❯ pgrep -la ghcr_io
4007604 /tmp/wasmcloudcache/NBCBQOZPJXTJEZDV2VNY32KGEMTLFVP2XJRZJ5FWEJJOXESJXXR2RO46/ghcr_io_wasmcloud_http_server_0_23_1