#holochain #http-gateway #bridge #world #web2 #testing #testing-http

bin+lib holochain_http_gateway

The Holochain HTTP Gateway for providing a way to bridge from the web2 world into Holochain

1 unstable release

new 0.1.0 Mar 12, 2025

#2 in #web2

Apache-2.0

110KB
2K SLoC

Holochain HTTP Gateway

The Holochain HTTP Gateway for providing a way to bridge from the web2 world into Holochain

Running HTTP Gateway locally

Prerequisites

Enter the Nix devShell with nix develop or make sure that you have rustup and holochain-cli installed.

Instructions

Clean the Holochain conductor sandbox with:

hc sandbox clean

Create a new sandboxed conductor with the lair keystore running in the Holochain process, entering a passphrase when prompted:

hc sandbox create --in-process-lair

Run the sandboxed conductor and enter the same passphrase as entered when creating it:

hc sandbox run

Make note of the admin_port

machine:hc-http-gw$ hc sandbox run
hc-sandbox: Conductor launched #!0 {"admin_port":41191,"app_ports":[]}

In a separate terminal, also in the Nix devShell, we need to install the hApps that you want to use. For example, we can use the test fixture (fixture1) but it needs to be built first with the package script:

./fixture/package.sh

Install the test fixture with:

hc sandbox call install-app fixture/package/happ1/fixture1.happ

Now run the gateway, setting the address of the admin websocket to localhost, the port to the "admin_port" that was printed when running the sandboxed conductor, the allowed apps to the installed fixture and the allowed functions to the functions from the test fixture.

HC_GW_ADMIN_WS_URL="ws://localhost:41191" HC_GW_ALLOWED_APP_IDS="fixture1" HC_GW_ALLOWED_FNS_fixture1="coordinator1/get_all_1" cargo run

In another new terminal, also in the Nix devShell, check that we get a response to the health-check:

curl -i localhost:8090/health
machine:hc-http-gw$ curl -i localhost:8090/health
HTTP/1.1 200 OK
content-type: text/plain; charset=utf-8
content-length: 2
date: Wed, 12 Mar 2025 15:25:13 GMT

Ok⏎

For the next steps, we'll need the DNA hash that the app was installed with.

hc sandbox call list-dnas
machine:hc-http-gw$ hc sandbox call list-dnas
hc-sandbox: DNAs: [DnaHash(uhC0kwgZaQK05lgFwcYb_LrtAXTAckaS41nxNVO_zRMdpsuAeA0uN)]

The value you need is uhC0kwgZaQK05lgFwcYb_LrtAXTAckaS41nxNVO_zRMdpsuAeA0uN.

Calling the get_all_1 function on the fixture using the DNA hash found above should now return an empty JSON array:

curl -i localhost:8090/uhC0kwgZaQK05lgFwcYb_LrtAXTAckaS41nxNVO_zRMdpsuAeA0uN/fixture1/coordinator1/get_all_1
machine:hc-http-gw$ curl -i localhost:8090/uhC0kwgZaQK05lgFwcYb_LrtAXTAckaS41nxNVO_zRMdpsuAeA0uN/fixture1/coordinator1/get_all_1
HTTP/1.1 200 OK
content-type: text/plain; charset=utf-8
content-length: 2
date: Wed, 12 Mar 2025 15:26:00 GMT

[]⏎

Now let's add some data. First, authorise the zome call:

hc sandbox zome-call-auth fixture1

and create the data:

hc sandbox zome-call fixture1 uhC0kwgZaQK05lgFwcYb_LrtAXTAckaS41nxNVO_zRMdpsuAeA0uN coordinator1 create_1 'null'

Now the created data can be retrieved with

curl -i localhost:8090/uhC0kwgZaQK05lgFwcYb_LrtAXTAckaS41nxNVO_zRMdpsuAeA0uN/fixture1/coordinator1/get_all_1
machine:hc-http-gw$ curl -i localhost:8090/uhC0kwgZaQK05lgFwcYb_LrtAXTAckaS41nxNVO_zRMdpsuAeA0uN/fixture1/coordinator1/get_all_1
HTTP/1.1 200 OK
content-type: text/plain; charset=utf-8
content-length: 50
date: Wed, 12 Mar 2025 17:54:50 GMT

[{"value":"create_1_2025-03-12T17:54:06.337428Z"}]⏎

Testing HTTP Gateway

Enter the Nix devShell with nix develop or make sure that you have rustup, perl, go, and holochain-cli installed.

Then, build and package the test fixtures as hApps with the package script:

./fixture/package.sh

Then, simply run

cargo test

Or to run without the slower integration tests:

cargo test --lib --bins

Dependencies

~88MB
~1.5M SLoC