Libraries
import
declaration allows to use functions, services and data types defined in another module on the file system. While it's a very simple mechanic, together with NPM flexibility it enables full-blown package management in Aqua.
Available Aqua Libraries
- Builtin services API: @fluencelabs/aqua-lib (see on NPM)
- Registry: @fluencelabs/registry (see on NPM)
- IPFS API: @fluencelabs/aqua-ipfs (see on NPM)
How To Use Aqua Libraries
To use a library, you need to download it by adding the library to dependencies
in package.json
and then running npm install
.
If you're not familiar with NPM, package.json
is a project definition file. You can specify dependencies
to be downloaded from npm and define custom commands (scripts
), which can be executed from the command line, e.g. npm run compile-aqua.
To create an NPM project, run npm init
in a directory of your choice and follow the instructions.
Here's an example of adding aqua-lib
to package.json
dependencies:
json
{"name": "my-awesome-project","version": "0.0.1","dependencies": {"@fluencelabs/aqua-lib": "0.1.10"}}
json
{"name": "my-awesome-project","version": "0.0.1","dependencies": {"@fluencelabs/aqua-lib": "0.1.10"}}
After running npm i
, you will have @fluencelabs/aqua-lib
in node_modules
In Aqua
After the library is downloaded, you can import it in your .aqua
script as documented in Modularity:
typescript
import "@fluencelabs/aqua-lib/builtin.aqua"
typescript
import "@fluencelabs/aqua-lib/builtin.aqua"
Check out corresponding pages for the API of available libraries.
In TypeScript and JavaScript
To execute Aqua functions, you need to be connected to the Fluence network. The easiest way is to add JS SDK to dependencies
:
json
"dependencies": {"@fluencelabs/registry": "0.3.2","@fluencelabs/fluence": "0.21.5","@fluencelabs/fluence-network-environment": "1.0.13"}
json
"dependencies": {"@fluencelabs/registry": "0.3.2","@fluencelabs/fluence": "0.21.5","@fluencelabs/fluence-network-environment": "1.0.13"}
After executing npm install
, the Aqua API is ready to use. Now you need to export registry
functions to TypeScript, that's easy. Create a file export.aqua
:
aqua
import createRouteAndRegisterBlocking, resolveRoute from "@fluencelabs/registry/routing.aqua"export createRouteAndRegisterBlocking, resolveRoute
aqua
import createRouteAndRegisterBlocking, resolveRoute from "@fluencelabs/registry/routing.aqua"export createRouteAndRegisterBlocking, resolveRoute
Now, install Aqua compiler and compile your Aqua code to TypeScript:
sh
npm install --save-dev @fluencelabs/aquaaqua -i . -o src/generated/
sh
npm install --save-dev @fluencelabs/aquaaqua -i . -o src/generated/
That's it. Now let's call some functions on the Registry service:
typescript
import { Fluence } from "@fluencelabs/fluence";import { krasnodar } from "@fluencelabs/fluence-network-environment";import { createRouteAndRegisterBlocking, resolveRoute } from "./generated/export";async function main() {// connect to the Fluence networkawait Fluence.start({ connectTo: krasnodar[1] });let label = "myLabel";let value = "put anything useful here";let serviceId = "Foo";let ack = 5;// create route and register for itlet relay = Fluence.getStatus().relayPeerId;let route_id = await createRouteAndRegisterBlocking(label, value, relay, serviceId,(s) => console.log(`node ${s} saved the record`),ack);// this will contain peer as route providerlet providers = await resolveRoute(route_id, ack);}main().then(() => process.exit(0)).catch(error => {console.error(error);process.exit(1);});
typescript
import { Fluence } from "@fluencelabs/fluence";import { krasnodar } from "@fluencelabs/fluence-network-environment";import { createRouteAndRegisterBlocking, resolveRoute } from "./generated/export";async function main() {// connect to the Fluence networkawait Fluence.start({ connectTo: krasnodar[1] });let label = "myLabel";let value = "put anything useful here";let serviceId = "Foo";let ack = 5;// create route and register for itlet relay = Fluence.getStatus().relayPeerId;let route_id = await createRouteAndRegisterBlocking(label, value, relay, serviceId,(s) => console.log(`node ${s} saved the record`),ack);// this will contain peer as route providerlet providers = await resolveRoute(route_id, ack);}main().then(() => process.exit(0)).catch(error => {console.error(error);process.exit(1);});