Typescript HTTP Password Checker
This repository contains a WebAssembly Component written in Typescript, which:
- Implements a 
wasi:http-compliant HTTP handler - Uses the 
httpserverprovider 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:
valibot(similar tozodbut with better tree-shaking)check-password-strength(a community project for checking password strength)
Dependencies
![WARN] When building this project, ensure you are using a stable NodeJS release.
Use of node version management tools (ex.
nvmor more newer NVM compatible tools likefnm) are recommended -- a.nvmrcfile is included for easy use.
Building this project relies on the following installed software:
| Name | Description | 
|---|---|
wash | Wasmcloud Shell controls your wasmcloud host instances and enables building components | 
npm | Node 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:
wash devwash dev does many things for you:
- Starts the wasmCloud host that can run your WebAssembly component
 - Builds this project (including necessary 
npmscript 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):
curl localhost:8000/api/v1/check --data '{"value": "test"}'You should see a JSON response like:
{
  "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:
❯ pgrep -la ghcr_io
4007604 /tmp/wasmcloudcache/NBCBQOZPJXTJEZDV2VNY32KGEMTLFVP2XJRZJ5FWEJJOXESJXXR2RO46/ghcr_io_wasmcloud_http_server_0_23_1