update version, examples, aqua

This commit is contained in:
boneyard93501 2021-09-05 14:48:53 -05:00
parent 50cf3010bd
commit d958c9cfa5
14 changed files with 1221 additions and 2447 deletions

View File

@ -114,7 +114,15 @@ Any one of the peers will do and we can deploy our services with the `fldist` to
```text
# deploy greeting service
fldist --node-id 12D3KooWJd3HaMJ1rpLY1kQvcjRPEvnDwcXrH8mJvk7ypcZXqXGE new_service --ms artifacts/greeting.wasm:configs/greeting_cfg.json --name greeting-demo
fldist --node-id 12D3KooWJd3HaMJ1rpLY1kQvcjRPEvnDwcXrH8mJvk7ypcZXqXGE \
new_service \
--ms artifacts/greeting.wasm:configs/greeting_cfg.json \
--name greeting-demo
```
Which gives us the service id for the greeting service:
```text
service id: 9436af06-86ab-4df3-ba2a-ad29e37043c2
service created successfully
```
@ -123,24 +131,31 @@ and
```text
# deploy echo service
fldist --node-id 12D3KooWJd3HaMJ1rpLY1kQvcjRPEvnDwcXrH8mJvk7ypcZXqXGE new_service --ms artifacts/echo_service.wasm:configs/echo_service_cfg.json --name echo-demo
fldist --node-id 12D3KooWJd3HaMJ1rpLY1kQvcjRPEvnDwcXrH8mJvk7ypcZXqXGE \
new_service \
--ms artifacts/echo_service.wasm:configs/echo_service_cfg.json \
--name echo-demo
```
Which gives as the id for the echo service:
```text
service id: ff3f3aa0-daeb-4555-b596-0f653df2ace9
service created successfully
```
Note the return of the service id for each services deployed as we need the peer and service id to compose our services into decentralized apps.
Take note of the service id for each service deployed as we need the peer and service id to execute each service.
## Building A Decentralized Greeting Application With Aqua
We're ready to build our application with Aqua as our composition medium from the greeting and echo service. Creating Aqua scripts requires the specifications of each service's public API. Marine offers us a convenient way to export Aqua-compatible interface definitions:
```aqua
% marine aqua artifacts/greeting.wasm
-- marine aqua artifacts/greeting.wasm
service Greeting:
greeting(name: string, greeter: bool) -> string
%
% marine aqua artifacts/echo_service.wasm
-- marine aqua artifacts/echo_service.wasm
data Echo:
echo: string
@ -148,10 +163,10 @@ service EchoService:
echo(inputs: []string) -> []Echo
```
Of course, we can pipe the `marina aqua` interfaces into an aqua file of your choice, e.g. `marine aqua artifacts/greeting.wasm >> aqua-scripts/my_aqua.aqua`, to get things started. Before we dive into the Aqua development, let's compile the already created Aqua program `aqua-scripts\echo_greeter.aqua` with `aqua-cli`:
Of course, we can pipe the `marina aqua` interfaces into an aqua file of your choice, e.g. `marine aqua artifacts/greeting.wasm >> aqua-scripts/my_aqua.aqua`, to get things started. Before we dive into the Aqua development, let's compile the already created Aqua program `aqua-scripts\echo_greeter.aqua` with `aqua`:
```text
% aqua-cli -i aqua-scripts -o aqua-compiled -a
aqua -i aqua-scripts -o aqua-compiled -a
```
Since we compile with the `-a` flag, we generate aqua intermediate representation (AIR) files which are located in the `air-scripts` directory. Further below, we'll see how to generate ready-to use Typescript stubs generated by the Aqua compiler.
@ -164,7 +179,7 @@ echo-services: [("12D3KooWFtf3rfCDAfWwt6oLZYZbDfn9Vn7bv7g6QjjQxUUEFVBt", "fb5f71
greeting-services: [("12D3KooWJd3HaMJ1rpLY1kQvcjRPEvnDwcXrH8mJvk7ypcZXqXGE", "5a03906b-3217-40a2-93fb-7e83be735408"), ("12D3KooWFtf3rfCDAfWwt6oLZYZbDfn9Vn7bv7g6QjjQxUUEFVBt", "5cf520ff-dd65-47d7-a51a-2bf08dfe2ede")]
```
Below is the first attempt at using Aqua to compose our two-services into the desired application workflow: the execution of a greeting service for each output provided by the upstream service.
Below is the first attempt at using Aqua to compose our two services into the desired application workflow: the execution of a greeting service for each output provided by the upstream echo service.
```aqua
-- aqua-scripts/echo_greeter.aqua
@ -199,7 +214,7 @@ func echo_greeting_seq(names: []string, greet: bool, node: string, echo_service_
<- res <- 8
```
The first section of the Aqua file are the public interfaces exposed from the underlying Wasm services, which we obtained earlier from the marine cli. Our composition of the services into our application happens with the `echo_greeting_seq` function. Before we run through the function body, let's have a look at the function signature:
The first section of the Aqua file are the public interfaces exposed from the underlying Wasm services, which we obtained earlier. Our composition of the services into our application happens with the `echo_greeting_seq` function. Before we run through the function body, let's have a look at the function signature:
```aqua
-- this function encapsulates our workflow logic
@ -207,12 +222,13 @@ func echo_greeting_seq(names: []string, greet: bool, node: string, echo_service_
```
Recall that
* the echo service takes an array of strings and
* the greeting service takes a string and a boolean
Our first two argument slots take care of that. Aside from the actual Wasm function inputs, we also need to provide information with respect to the location and identity of the services we want to utilize. In this instance, we provide service ids for both the echo and greeting service, respectively, and one peer id. This indicates that both services are hosted on the same node, which is possible but not necessary or even desirable.
* the echo service takes an array of strings as input arguments and
* the greeting service takes a string and a boolean as input arguments
In the function body:
Our first two argument slots in `echo_greeting_seq` take care of that. Aside from the actual Wasm function inputs, we also need to provide information with respect to the location and identity of the services we want to utilize. In this instance, we provide service ids for both the echo and greeting service, respectively, and one peer id. This indicates that both services are hosted on the same node, which is possible but not necessary or even desirable.
In the function body we:
1. Declare a streaming variable to accept greeting function returns
2. Specify the node on which we want to execute the following function body
@ -223,15 +239,16 @@ In the function body:
7. Call the Greeting service with a name and the greet parameters in sequence
8. Return the results array
Let's run the compiled Aqua code with the `fldist` cli toolL
Let's run the compiled Aqua code with the `fldist` cli tool:
```text
fldist run_air \
-p aqua-compiled/echo_greeter.echo_greeting_seq.air \
-d '{"names":["jim", "john", "james"], \
"greet": true, \
"node":"12D3KooWJd3HaMJ1rpLY1kQvcjRPEvnDwcXrH8mJvk7ypcZXqXGE", \ "greeting_service_id":"5a03906b-3217-40a2-93fb-7e83be735408", \
"echo_service_id": "893a6fb8-43b9-4b11-8786-93300bd68bc8"}' \
-d '{"names":["jim", "john", "james"],
"greet": true,
"node":"12D3KooWJd3HaMJ1rpLY1kQvcjRPEvnDwcXrH8mJvk7ypcZXqXGE", "greeting_service_id":"5a03906b-3217-40a2-93fb-7e83be735408",
"echo_service_id": "893a6fb8-43b9-4b11-8786-93300bd68bc8"
}' \
--generated
```
@ -278,12 +295,12 @@ Again, we can execute our workflow with the `fldist` tool:
```text
fldist run_air \
-p aqua-compiled/echo_greeter.echo_greeting_seq_2.air \
-d '{"names":["jim", "john", "james"], \
"greet": true, \
"greeting_topo":{"node":"12D3KooWJd3HaMJ1rpLY1kQvcjRPEvnDwcXrH8mJvk7ypcZXqXGE", \
"service_id":"5a03906b-3217-40a2-93fb-7e83be735408"}, \
"echo_topo": {"node": "12D3KooWFtf3rfCDAfWwt6oLZYZbDfn9Vn7bv7g6QjjQxUUEFVBt", \
"service_id": "fb5f7126-e1ee-4ecf-81e7-20804cb7203b"}}' \
-d '{"names":["jim", "john", "james"],
"greet": true,
"greeting_topo":{"node":"12D3KooWJd3HaMJ1rpLY1kQvcjRPEvnDwcXrH8mJvk7ypcZXqXGE",
"service_id":"5a03906b-3217-40a2-93fb-7e83be735408"},
"echo_topo": {"node": "12D3KooWFtf3rfCDAfWwt6oLZYZbDfn9Vn7bv7g6QjjQxUUEFVBt",
"service_id": "fb5f7126-e1ee-4ecf-81e7-20804cb7203b"}}'
--generated
```
@ -299,7 +316,7 @@ Regardless of the difference in service hosts, we of course get the expected res
]
```
Both workflow examples we've seen are executing service calls in sequence. Let's kick it up a notch and process echo service outputs in parallel. Of course, we need to have the necessary greeting services deployed on different peers otherwise parallel processing defaults to sequential processing. Also, to continue to keep things compact, we introduce the `EchoServiceInput` struct.
Both workflow examples we've seen are **seq**uentially executing service calls. Let's kick it up a notch and process echo service outputs in **par**allel. Of course, we need to have the necessary greeting services deployed on different peers otherwise parallel processing defaults to sequential processing. Also, to continue to keep things compact, we introduce the `EchoServiceInput` struct.
```aqua
@ -308,6 +325,7 @@ data EchoServiceInput:
service_id: string
names: []string
-- call parallel with echo service
func echo_greeting_par(greet: bool, echo_service: EchoServiceInput, greeting_services: []NodeServicePair) -> []string:
res: *string
on echo_service.node:
@ -315,9 +333,9 @@ func echo_greeting_par(greet: bool, echo_service: EchoServiceInput, greeting_ser
echo_results <- EchoService.echo(echo_service.names)
for result <- echo_results:
for greeting_service <- greeting_services:
par for greeting_service <- greeting_services: --< parallelization takes place
GreetingService greeting_service.service_id
par on greeting_service.node:
on greeting_service.node:
res <- GreetingService.greeting(result.echo, greet)
OpString.identity(res!5)
<- res
@ -357,46 +375,43 @@ And our result is:
]
```
Since we got three input names and two greeting services, we expect, and got, six results where the parallelization is on each echo-service result. Of course, we can change the parallelization to cover the echo-service results array for each provided service:
Our updated Auqa composition function now reads:
Since we got three input names and two greeting services, we expect, and got, six results where the parallelization is on each echo-service result. Of course, we can change the point of parallelization to cover the echo-service results array for each provided service. Our updated Auqa composition function now reads:
```aqua
func echo_greeting_par_inverse(greet: bool, echo_service: EchoServiceInput, greeting_services: []NodeServicePair) -> []string:
-- call parallel with echo service, alternate version
func echo_greeting_par_alternative(greet: bool, echo_service: EchoServiceInput, greeting_services: []NodeServicePair) -> []string:
res: *string
on echo_service.node:
EchoService echo_service.service_id
echo_results <- EchoService.echo(echo_service.names)
for result <- echo_results:
for greeting_service <- greeting_services:
GreetingService greeting_service.service_id
par on greeting_service.node:
for result <- echo_results:
par on greeting_service.node: --< Parallelization at the array level
res <- GreetingService.greeting(result.echo, greet)
OpString.identity(res!3)
OpString.identity(res!5)
<- res
```
And running the workflow with the updated data:
```text
fldist run_air \
-p aqua-compiled/echo_greeter.echo_greeting_par_inverse.air \
-d '{"echo_service":{"names":["jim", "john", "james"], \
"node": "12D3KooWFtf3rfCDAfWwt6oLZYZbDfn9Vn7bv7g6QjjQxUUEFVBt", \
"service_id": "fb5f7126-e1ee-4ecf-81e7-20804cb7203b"}, \
"greeting_services":[{"node":"12D3KooWJd3HaMJ1rpLY1kQvcjRPEvnDwcXrH8mJvk7ypcZXqXGE", \
"service_id":"5a03906b-3217-40a2-93fb-7e83be735408"}, \
{"node":"12D3KooWFtf3rfCDAfWwt6oLZYZbDfn9Vn7bv7g6QjjQxUUEFVBt", \
"service_id":"5cf520ff-dd65-47d7-a51a-2bf08dfe2ede"}], \
-d '{"echo_service":{"names":["jim", "john", "james"],
"node": "12D3KooWFtf3rfCDAfWwt6oLZYZbDfn9Vn7bv7g6QjjQxUUEFVBt",
"service_id": "fb5f7126-e1ee-4ecf-81e7-20804cb7203b"},
"greeting_services":[{"node":"12D3KooWJd3HaMJ1rpLY1kQvcjRPEvnDwcXrH8mJvk7ypcZXqXGE",
"service_id":"5a03906b-3217-40a2-93fb-7e83be735408"},
{"node":"12D3KooWFtf3rfCDAfWwt6oLZYZbDfn9Vn7bv7g6QjjQxUUEFVBt",
"service_id":"5cf520ff-dd65-47d7-a51a-2bf08dfe2ede"}],
"greet": true}' \
--generated
```
gives us the updated result:
```text
[
[
@ -409,43 +424,29 @@ gives us the updated result:
]
```
With a very minor modification, i.e., the placement of `par`, we can drastically later the (re-)use of deployed services!
With minor modifications to our Aqua functions, we can make those parallelizations a little more useful by suppling the *greet* parameter for each service. Let's add a `GreetingServiceInput` struct and update the function signatures and bodies:
With some additional modifications to our Aqua function, we can further improve readability by supplying the *greet* parameter for each service. Let's add a `GreetingServiceInput` struct and update the function signatures and bodies:
``aqua
```aqua
data GreetingServiceInput:
node: string
service_id: string
greet: bool
func echo_greeting_par_greet(echo_service: EchoServiceInput, greeting_services: []GreetingServiceInput) -> []string:
func echo_greeting_par_improved(echo_service: EchoServiceInput, greeting_services: []GreetingServiceInput) -> []string:
res: *string
on echo_service.node:
EchoService echo_service.service_id
echo_results <- EchoService.echo(echo_service.names)
for result <- echo_results:
for greeting_service <- greeting_services:
par for greeting_service <- greeting_services:
GreetingService greeting_service.service_id
par on greeting_service.node:
res <- GreetingService.greeting(result.echo, greeting_service.greet). <-- update
on greeting_service.node:
res <- GreetingService.greeting(result.echo, greeting_service.greet). --< update
OpString.identity(res!5)
<- res
func echo_greeting_par_inverse_greet(greet: bool, echo_service: EchoServiceInput, greeting_services: []GreetingServiceInput) -> []string:
res: *string
on echo_service.node:
EchoService echo_service.service_id
echo_results <- EchoService.echo(echo_service.names)
for greeting_service <- greeting_services:
GreetingService greeting_service.service_id
par on greeting_service.node:
for result <- echo_results:
res <- GreetingService.greeting(result.echo, greeting_service.greet) <-- update
OpString.identity(res!3)
<- res
```
Run the workflow with the updated json string:
@ -453,15 +454,15 @@ Run the workflow with the updated json string:
```test
fldist run_air
-p aqua-compiled/echo_greeter.echo_greeting_par_greet.air \
-d '{"echo_service":{"names":["jim", "john", "james"], \
"node": "12D3KooWFtf3rfCDAfWwt6oLZYZbDfn9Vn7bv7g6QjjQxUUEFVBt", \
"service_id": "fb5f7126-e1ee-4ecf-81e7-20804cb7203b"},\
"greeting_services":[{"node":"12D3KooWJd3HaMJ1rpLY1kQvcjRPEvnDwcXrH8mJvk7ypcZXqXGE", \
"service_id":"5a03906b-3217-40a2-93fb-7e83be735408", \
"greet":true}, \
{"node":"12D3KooWFtf3rfCDAfWwt6oLZYZbDfn9Vn7bv7g6QjjQxUUEFVBt", \
"service_id":"5cf520ff-dd65-47d7-a51a-2bf08dfe2ede", \
-p aqua-compiled/echo_greeter.echo_greeting_par_improved.air \
-d '{"echo_service":{"names":["jim", "john", "james"],
"node": "12D3KooWFtf3rfCDAfWwt6oLZYZbDfn9Vn7bv7g6QjjQxUUEFVBt",
"service_id": "fb5f7126-e1ee-4ecf-81e7-20804cb7203b"},
"greeting_services":[{"node":"12D3KooWJd3HaMJ1rpLY1kQvcjRPEvnDwcXrH8mJvk7ypcZXqXGE",
"service_id":"5a03906b-3217-40a2-93fb-7e83be735408",
"greet":true},
{"node":"12D3KooWFtf3rfCDAfWwt6oLZYZbDfn9Vn7bv7g6QjjQxUUEFVBt",
"service_id":"5cf520ff-dd65-47d7-a51a-2bf08dfe2ede",
"greet":false}]}' \
--generated
```
@ -481,122 +482,35 @@ Which gives us:
]
```
And for the inverted loop version:
```test
fldist run_air \
-p aqua-compiled/echo_greeter.echo_greeting_par_inverse_greet.air \
-d '{"echo_service":{"names":["jim", "john", "james"],\
"node": "12D3KooWFtf3rfCDAfWwt6oLZYZbDfn9Vn7bv7g6QjjQxUUEFVBt", \
"service_id": "fb5f7126-e1ee-4ecf-81e7-20804cb7203b"},\
"greeting_services":[{"node":"12D3KooWJd3HaMJ1rpLY1kQvcjRPEvnDwcXrH8mJvk7ypcZXqXGE",\
"service_id":"5a03906b-3217-40a2-93fb-7e83be735408", \
"greet":true},\
{"node":"12D3KooWFtf3rfCDAfWwt6oLZYZbDfn9Vn7bv7g6QjjQxUUEFVBt", \
"service_id":"5cf520ff-dd65-47d7-a51a-2bf08dfe2ede", \
"greet":false}]}' \
--generated
```
We get:
```test
[
[
"Hi, jim",
"Hi, john",
"Hi, james",
"Bye, jim",
"Bye, john",
"Bye, james"
]
]
```
In this section, we explored how we can use Aqua to program hosted services into applications. Along the way, we investigated sequential and parallel workflows and discovered that changes in processing or workflow logic are taken care of at the Aqua level not requiring any changes to the deployed services. Throughout our experimentation with Aqua and deployed services, we used the `fldist` tool as our local cli client peer. In the next section, we introduce the develppment and use of a Typescript client peer.
Again, with very minor adjustments to our Aqua function, we can significantly improve the re-use of already deployed services.
In this section, we explored how we can use Aqua to program hosted services into applications. Along the way, we investigated sequential and parallel workflows and discovered that changes in processing or workflow logic are taken care of at the Aqua level not requiring any changes to the deployed services. Throughout our experimentation with Aqua and deployed services, we used the `fldist` tool as our local cli client peer. In the next section, we introduce the development and use of a Typescript client peer.
### Developing And Working With A Typescript Client
In the previous section we used `fldist` cli as our local peer client to run the execution of our compiled Aqua scripts on the network. Alternatively, Aqua code can be compiled to Typescript utilizing the Fluence [JS-SDK](https://github.com/fluencelabs/fluence-js).
In the previous section we used `fldist` as our local peer client to run the execution of our compiled Aqua scripts on the network. Alternatively, Aqua code can be directly compiled to Typescript utilizing the Fluence [JS-SDK](https://github.com/fluencelabs/fluence-js).
Let's install the required packages:
```text
% cd client-peer
% npm install
cd client-peer
npm install
```
And compile our Aqua file to a Typescript stub:
```text
% npm run compile-aqua
npm run compile-aqua
> echo-greeter-example@0.1.0 compile-aqua /Users/bebo/localdev/examples-rework/aqua-examples/echo-greeter/client-peer
> aqua-cli -i ../aqua-scripts -o src/
> aqua -i ../aqua-scripts -o src/
java -jar /Users/bebo/localdev/examples-rework/aqua-examples/echo-greeter/client-peer/node_modules/@fluencelabs/aqua-cli/aqua-cli.jar -m node_modules -i ../aqua-scripts -o src/
[info] Aqua Compiler 0.1.9-163
[info] Result /Users/bebo/localdev/examples-rework/aqua-examples/echo-greeter/client-peer/src/echo_greeter.ts: compilation OK (6 functions)
```
The ensuing, auto-generated file is called `echo_greeter.ts` and was copied to the `src` directory. Let's have a look:
```typescript
// src/echo-greeter.ts
import { FluenceClient, PeerIdB58 } from '@fluencelabs/fluence';
import { RequestFlowBuilder } from '@fluencelabs/fluence/dist/api.unstable';
import { RequestFlow } from '@fluencelabs/fluence/dist/internal/RequestFlow';
export async function echo_greeting_par_greet(client: FluenceClient, echo_service: {names:string[];node:string;service_id:string}, greeting_services: {greet:boolean;node:string;service_id:string}[], config?: {ttl?: number}): Promise<string[]> {
let request: RequestFlow;
const promise = new Promise<string[]>((resolve, reject) => {
const r = new RequestFlowBuilder()
.disableInjections()
.withRawScript(
`
(xor
// <snip>
(call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 4])
)
`,
)
.configHandler((h) => {
h.on('getDataSrv', '-relay-', () => {
return client.relayPeerId!;
});
h.on('getDataSrv', 'echo_service', () => {return echo_service;});
h.on('getDataSrv', 'greeting_services', () => {return greeting_services;});
h.onEvent('callbackSrv', 'response', (args) => {
const [res] = args;
resolve(res);
});
h.onEvent('errorHandlingSrv', 'error', (args) => {
// assuming error is the single argument
const [err] = args;
reject(err);
});
})
.handleScriptError(reject)
.handleTimeout(() => {
reject('Request timed out for echo_greeting_par_greet');
})
if(config?.ttl) {
r.withTTL(config.ttl)
}
request = r.build();
});
await client.initiateFlow(request!);
return promise;
}
// <snip>
```
The Aqua compiler auto-generated the Typescript functions corresponding to each of the Aqua functions we implemented. All we have to do is use them!
The ensuing, auto-generated file is called `echo_greeter.ts` and was copied to the `src` directory. The Aqua compiler auto-generated the Typescript functions corresponding to each of the Aqua functions we implemented. All we have to do is use them!
Let's look at the simple `src/index.ts` implementation using each of the workflow functions:
@ -607,14 +521,16 @@ Let's look at the simple `src/index.ts` implementation using each of the workflo
import { createClient, setLogLevel, FluenceClient } from "@fluencelabs/fluence";
import { krasnodar, Node } from "@fluencelabs/fluence-network-environment";
import {
echo,
greeting,
echo_greeting_seq,
echo_greeting_seq_2,
echo_greeting_par,
echo_greeting_par_inverse,
echo_greeting_par_greet,
echo_greeting_par_inverse_greet,
echo_greeting_par_alternative
} from "./echo_greeter";
interface EchoResult {
echo: string;
}
interface NodeServicePair {
node: string;
service_id: string;
@ -642,7 +558,6 @@ let greeting_topos: Array<NodeServicePair> = [
service_id: "5a03906b-3217-40a2-93fb-7e83be735408",
},
];
let echo_topos: Array<NodeServicePair> = [
{
node: "12D3KooWFtf3rfCDAfWwt6oLZYZbDfn9Vn7bv7g6QjjQxUUEFVBt",
@ -653,13 +568,11 @@ let echo_topos: Array<NodeServicePair> = [
service_id: "893a6fb8-43b9-4b11-8786-93300bd68bc8",
},
];
let echo_service: EchoService = {
node: echo_topos[0].node,
service_id: echo_topos[0].service_id,
names: ["Jim", "John", "Jake"],
};
let greeting_services: Array<GreetingService> = [
{
node: greeting_topos[0].node,
@ -675,6 +588,8 @@ let greeting_services: Array<GreetingService> = [
let names: Array<string> = ["Jim", "John", "Jake"];
// let greeting_service =
async function main() {
// console.log("hello");
// setLogLevel('DEBUG');
@ -686,7 +601,30 @@ async function main() {
fluence.relayPeerId
);
let network_result = await echo_greeting_seq(
let echo_result = await echo(
fluence,
names,
echo_topos[0].node,
echo_topos[0].service_id
);
let result = "";
for (let item of echo_result) {
result += item.echo + ","
}
console.log("echo result : ", result);
let greeting_result = await greeting(
fluence,
names[0],
true,
greeting_topos[0].node,
greeting_topos[0].service_id
);
console.log("greeting result : ", greeting_result);
// echo_greeting_par(greet: bool, echo_service: EchoServiceInput, greeting_services: []NodeServicePair) -> []string:
let seq_result = await echo_greeting_seq(
fluence,
names,
true,
@ -694,48 +632,33 @@ async function main() {
echo_topos[0].service_id,
greeting_topos[0].service_id
);
console.log("seq result : ", network_result);
console.log("seq result : ", seq_result);
network_result = await echo_greeting_seq_2(
fluence,
names,
true,
echo_topos[0],
greeting_topos[0]
);
console.log("seq result with improved signature : ", network_result);
// echo_greeting_par(greet: bool, echo_service: EchoServiceInput, greeting_services: []NodeServicePair) -> []string:
network_result = await echo_greeting_par(
fluence,
true,
echo_service,
greeting_topos
);
console.log("par result : ", network_result);
network_result = await echo_greeting_par_inverse(
let par_result = await echo_greeting_par(
fluence,
true,
echo_service,
greeting_services
);
console.log("par inverse result : ", network_result);
console.log("par result : ", par_result);
network_result = await echo_greeting_par_greet(
par_result = await echo_greeting_par_alternative(
fluence,
true,
echo_service,
greeting_services
);
console.log("par alternative result : ", par_result);
par_result = await echo_greeting_par_improved(
fluence,
echo_service,
greeting_services
);
console.log("par result with greet variation : ", network_result);
console.log("par improved signature result : ", par_result);
network_result = await echo_greeting_par_inverse_greet(
fluence,
echo_service,
greeting_services
);
console.log("par inverse result with greet variation : ", network_result);
return;
@ -747,10 +670,9 @@ main()
console.error(error);
process.exit(1);
});
```
The client implementation
The client implementation:
* Imports the necessary js-sdk
* Imports the Fluence test network information
@ -759,7 +681,6 @@ The client implementation
* Creates a client handler for our selected testnet and relay node
* Runs and logs each of the workflow functions
Let's run our client peer:
```text
@ -769,10 +690,10 @@ npm run start
Which gives us the same results as before:
```text
created a fluence client 12D3KooWJa3k63oTRhyMAaW4LzGjHTVyThNoxM4i8yxFAZQqN7Q4 with relay 12D3KooWKnEqMfYo9zvfHmqTLpLdiHXPe4SVqUWcWHDJdFGrSmcA
created a fluence client 12D3KooWRE4k3qT8Z5x22EjGF3g8vkvo7nPWbkQxRowxkTgfBM6A with relay 12D3KooWKnEqMfYo9zvfHmqTLpLdiHXPe4SVqUWcWHDJdFGrSmcA
echo result : Jim,John,Jake,
greeting result : Hi, Jim
seq result : [ 'Hi, Jim', 'Hi, John', 'Hi, Jake' ]
seq result with improved signature : [ 'Hi, Jim', 'Hi, John', 'Hi, Jake' ]
par result : [
'Hi, Jim',
'Hi, Jim',
@ -781,7 +702,7 @@ par result : [
'Hi, Jake',
'Hi, Jake'
]
par inverse result : [
par alternative result : [
'Hi, Jim',
'Hi, John',
'Hi, Jake',
@ -789,7 +710,7 @@ par inverse result : [
'Hi, John',
'Hi, Jake'
]
par result with greet variation : [
par improved signature result : [
'Hi, Jim',
'Bye, Jim',
'Hi, John',
@ -797,32 +718,4 @@ par result with greet variation : [
'Hi, Jake',
'Bye, Jake'
]
par inverse result with greet variation : [
'Hi, Jim',
'Hi, John',
'Hi, Jake',
'Bye, Jim',
'Bye, John',
'Bye, Jake'
]
```

View File

@ -1,71 +0,0 @@
(xor
(seq
(seq
(seq
(seq
(seq
(seq
(seq
(seq
(seq
(call %init_peer_id% ("getDataSrv" "-relay-") [] -relay-)
(call %init_peer_id% ("getDataSrv" "greet") [] greet)
)
(call %init_peer_id% ("getDataSrv" "echo_service") [] echo_service)
)
(call %init_peer_id% ("getDataSrv" "greeting_services") [] greeting_services)
)
(call -relay- ("op" "noop") [])
)
(xor
(seq
(call -relay- ("op" "noop") [])
(call echo_service.$.node! (echo_service.$.service_id! "echo") [echo_service.$.names!] echo_results)
)
(seq
(call -relay- ("op" "noop") [])
(call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 1])
)
)
)
(call -relay- ("op" "noop") [])
)
(fold echo_results result
(seq
(fold greeting_services greeting_service
(seq
(seq
(par
(seq
(seq
(xor
(call greeting_service.$.node! (greeting_service.$.service_id! "greeting") [result.$.echo! greet] $res)
(seq
(call -relay- ("op" "noop") [])
(call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 2])
)
)
(call -relay- ("op" "noop") [])
)
(call %init_peer_id% ("op" "noop") [])
)
(null)
)
(call -relay- ("op" "noop") [])
)
(next greeting_service)
)
)
(next result)
)
)
)
(call %init_peer_id% ("op" "identity") [$res.$.[5]!])
)
(xor
(call %init_peer_id% ("callbackSrv" "response") [$res])
(call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 3])
)
)
(call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 4])
)

View File

@ -1,68 +0,0 @@
(xor
(seq
(seq
(seq
(seq
(seq
(seq
(seq
(seq
(call %init_peer_id% ("getDataSrv" "-relay-") [] -relay-)
(call %init_peer_id% ("getDataSrv" "echo_service") [] echo_service)
)
(call %init_peer_id% ("getDataSrv" "greeting_services") [] greeting_services)
)
(call -relay- ("op" "noop") [])
)
(xor
(seq
(call -relay- ("op" "noop") [])
(call echo_service.$.node! (echo_service.$.service_id! "echo") [echo_service.$.names!] echo_results)
)
(seq
(call -relay- ("op" "noop") [])
(call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 1])
)
)
)
(call -relay- ("op" "noop") [])
)
(fold echo_results result
(seq
(fold greeting_services greeting_service
(seq
(seq
(par
(seq
(seq
(xor
(call greeting_service.$.node! (greeting_service.$.service_id! "greeting") [result.$.echo! greeting_service.$.greet!] $res)
(seq
(call -relay- ("op" "noop") [])
(call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 2])
)
)
(call -relay- ("op" "noop") [])
)
(call %init_peer_id% ("op" "noop") [])
)
(null)
)
(call -relay- ("op" "noop") [])
)
(next greeting_service)
)
)
(next result)
)
)
)
(call %init_peer_id% ("op" "identity") [$res.$.[5]!])
)
(xor
(call %init_peer_id% ("callbackSrv" "response") [$res])
(call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 3])
)
)
(call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 4])
)

View File

@ -1,71 +0,0 @@
(xor
(seq
(seq
(seq
(seq
(seq
(seq
(seq
(seq
(seq
(call %init_peer_id% ("getDataSrv" "-relay-") [] -relay-)
(call %init_peer_id% ("getDataSrv" "greet") [] greet)
)
(call %init_peer_id% ("getDataSrv" "echo_service") [] echo_service)
)
(call %init_peer_id% ("getDataSrv" "greeting_services") [] greeting_services)
)
(call -relay- ("op" "noop") [])
)
(xor
(seq
(call -relay- ("op" "noop") [])
(call echo_service.$.node! (echo_service.$.service_id! "echo") [echo_service.$.names!] echo_results)
)
(seq
(call -relay- ("op" "noop") [])
(call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 1])
)
)
)
(call -relay- ("op" "noop") [])
)
(fold greeting_services greeting_service
(seq
(seq
(par
(seq
(seq
(xor
(fold echo_results result
(seq
(call greeting_service.$.node! (greeting_service.$.service_id! "greeting") [result.$.echo! greet] $res)
(next result)
)
)
(seq
(call -relay- ("op" "noop") [])
(call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 2])
)
)
(call -relay- ("op" "noop") [])
)
(call %init_peer_id% ("op" "noop") [])
)
(null)
)
(call -relay- ("op" "noop") [])
)
(next greeting_service)
)
)
)
(call %init_peer_id% ("op" "identity") [$res.$.[3]!])
)
(xor
(call %init_peer_id% ("callbackSrv" "response") [$res])
(call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 3])
)
)
(call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 4])
)

View File

@ -1,68 +0,0 @@
(xor
(seq
(seq
(seq
(seq
(seq
(seq
(seq
(seq
(call %init_peer_id% ("getDataSrv" "-relay-") [] -relay-)
(call %init_peer_id% ("getDataSrv" "echo_service") [] echo_service)
)
(call %init_peer_id% ("getDataSrv" "greeting_services") [] greeting_services)
)
(call -relay- ("op" "noop") [])
)
(xor
(seq
(call -relay- ("op" "noop") [])
(call echo_service.$.node! (echo_service.$.service_id! "echo") [echo_service.$.names!] echo_results)
)
(seq
(call -relay- ("op" "noop") [])
(call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 1])
)
)
)
(call -relay- ("op" "noop") [])
)
(fold greeting_services greeting_service
(seq
(seq
(par
(seq
(seq
(xor
(fold echo_results result
(seq
(call greeting_service.$.node! (greeting_service.$.service_id! "greeting") [result.$.echo! greeting_service.$.greet!] $res)
(next result)
)
)
(seq
(call -relay- ("op" "noop") [])
(call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 2])
)
)
(call -relay- ("op" "noop") [])
)
(call %init_peer_id% ("op" "noop") [])
)
(null)
)
(call -relay- ("op" "noop") [])
)
(next greeting_service)
)
)
)
(call %init_peer_id% ("op" "identity") [$res.$.[3]!])
)
(xor
(call %init_peer_id% ("callbackSrv" "response") [$res])
(call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 3])
)
)
(call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 4])
)

View File

@ -1,51 +0,0 @@
(xor
(seq
(seq
(seq
(seq
(seq
(seq
(seq
(seq
(seq
(call %init_peer_id% ("getDataSrv" "-relay-") [] -relay-)
(call %init_peer_id% ("getDataSrv" "names") [] names)
)
(call %init_peer_id% ("getDataSrv" "greet") [] greet)
)
(call %init_peer_id% ("getDataSrv" "node") [] node)
)
(call %init_peer_id% ("getDataSrv" "echo_service_id") [] echo_service_id)
)
(call %init_peer_id% ("getDataSrv" "greeting_service_id") [] greeting_service_id)
)
(call -relay- ("op" "noop") [])
)
(xor
(seq
(seq
(call -relay- ("op" "noop") [])
(call node (echo_service_id "echo") [names] echo_names)
)
(fold echo_names result
(seq
(call node (greeting_service_id "greeting") [result.$.echo! greet] $res)
(next result)
)
)
)
(seq
(call -relay- ("op" "noop") [])
(call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 1])
)
)
)
(call -relay- ("op" "noop") [])
)
(xor
(call %init_peer_id% ("callbackSrv" "response") [$res])
(call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 2])
)
)
(call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 3])
)

View File

@ -1,57 +0,0 @@
(xor
(seq
(seq
(seq
(seq
(seq
(seq
(seq
(seq
(seq
(call %init_peer_id% ("getDataSrv" "-relay-") [] -relay-)
(call %init_peer_id% ("getDataSrv" "names") [] names)
)
(call %init_peer_id% ("getDataSrv" "greet") [] greet)
)
(call %init_peer_id% ("getDataSrv" "echo_topo") [] echo_topo)
)
(call %init_peer_id% ("getDataSrv" "greeting_topo") [] greeting_topo)
)
(call -relay- ("op" "noop") [])
)
(xor
(seq
(call -relay- ("op" "noop") [])
(call echo_topo.$.node! (echo_topo.$.service_id! "echo") [names] echo_names)
)
(seq
(seq
(call -relay- ("op" "noop") [])
(call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 1])
)
(call -relay- ("op" "noop") [])
)
)
)
(xor
(fold echo_names result
(seq
(call greeting_topo.$.node! (greeting_topo.$.service_id! "greeting") [result.$.echo! greet] $res)
(next result)
)
)
(seq
(call -relay- ("op" "noop") [])
(call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 2])
)
)
)
(call -relay- ("op" "noop") [])
)
(xor
(call %init_peer_id% ("callbackSrv" "response") [$res])
(call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 3])
)
)
(call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 4])
)

View File

@ -17,14 +17,13 @@ func echo(names: []string, node: string, echo_service: string) -> []EchoResult:
res <- EchoService.echo(names)
<- res
func greeting(name:string, greet:bool, node:string, greeting_service_id: string) -> string:
on node:
GreetingService greeting_service_id
res <- GreetingService.greeting(name, greet)
<- res
-- call echo service and and sequentailly call greeting service on each name
-- one service, on one node for all processing needs
func echo_greeting_seq(names: []string, greet: bool, node: string, echo_service_id: string,greeting_service_id: string) -> []string:
@ -43,25 +42,72 @@ data NodeServicePair:
node: string
service_id: string
-- revised Aqua function to accommodate (node, service) separation
func echo_greeting_seq_2(names: []string, greet: bool, echo_topo: NodeServicePair, greeting_topo: NodeServicePair) -> []string:
res: *string
on echo_topo.node:
EchoService echo_topo.service_id
echo_names <- EchoService.echo(names)
on greeting_topo.node:
GreetingService greeting_topo.service_id
for result <- echo_names:
res <- GreetingService.greeting(result.echo, greet)
<- res
data EchoServiceInput:
node: string
service_id: string
names: []string
-- call echo service
func echo_greeting_par(names: []string, greet: bool, echo_service: EchoServiceInput, greeting_services: []NodeServicePair) -> []string:
-- call parallel with echo service
func echo_greeting_par(greet: bool, echo_service: EchoServiceInput, greeting_services: []NodeServicePair) -> []string:
res: *string
on echo_service.node:
EchoService echo_service.service_id
echo_results <- EchoService.echo(names)
echo_results <- EchoService.echo(echo_service.names)
for result <- echo_results par:
for greeting_service <- greeting_services:
for result <- echo_results:
par for greeting_service <- greeting_services:
GreetingService greeting_service.service_id
on greeting_service.node:
res_2 <- GreetingService.greeting(result.echo, greet)
-- this is super annoying
OpString.identity(res_2!2)
res <- GreetingService.greeting(result.echo, greet)
OpString.identity(res!5)
<- res
-- call parallel with echo service, alternate version
func echo_greeting_par_alternative(greet: bool, echo_service: EchoServiceInput, greeting_services: []NodeServicePair) -> []string:
res: *string
on echo_service.node:
EchoService echo_service.service_id
echo_results <- EchoService.echo(echo_service.names)
for result <- echo_results:
for greeting_service <- greeting_services:
GreetingService greeting_service.service_id
par on greeting_service.node:
res <- GreetingService.greeting(result.echo, greet)
OpString.identity(res!5)
<- res
-- updated input struct
data GreetingServiceInput:
node: string
service_id: string
greet: bool
func echo_greeting_par_improved(echo_service: EchoServiceInput, greeting_services: []GreetingServiceInput) -> []string:
res: *string
on echo_service.node:
EchoService echo_service.service_id
echo_results <- EchoService.echo(echo_service.names)
for result <- echo_results:
par for greeting_service <- greeting_services:
GreetingService greeting_service.service_id
on greeting_service.node:
res <- GreetingService.greeting(result.echo, greeting_service.greet)
OpString.identity(res!5)
<- res

View File

@ -36,9 +36,23 @@ var __generator = (this && this.__generator) || function (thisArg, body) {
}
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.echo_greeting_par_inverse_greet = exports.echo_greeting_seq_2 = exports.echo_greeting_seq = exports.echo_greeting_par_inverse = exports.echo_greeting_par = exports.echo_greeting_par_greet = void 0;
exports.echo_greeting_par_alternative = exports.echo_greeting_seq = exports.greeting = exports.echo = exports.echo_greeting_par = exports.echo_greeting_par_improved = exports.echo_greeting_seq_2 = void 0;
var api_unstable_1 = require("@fluencelabs/fluence/dist/api.unstable");
function echo_greeting_par_greet(client, echo_service, greeting_services, config) {
// Services
//OpString
//defaultId = "op"
//identity: (s: string) => void
//END OpString
//EchoService
//defaultId = undefined
//echo: (arg0: string[]) => {echo:string}[]
//END EchoService
//GreetingService
//defaultId = "service-id"
//greeting: (arg0: string, arg1: boolean) => string
//END GreetingService
// Functions
function echo_greeting_seq_2(client, names, greet, echo_topo, greeting_topo, config) {
return __awaiter(this, void 0, void 0, function () {
var request, promise;
return __generator(this, function (_a) {
@ -47,7 +61,53 @@ function echo_greeting_par_greet(client, echo_service, greeting_services, config
promise = new Promise(function (resolve, reject) {
var r = new api_unstable_1.RequestFlowBuilder()
.disableInjections()
.withRawScript("\n(xor\n (seq\n (seq\n (seq\n (seq\n (seq\n (seq\n (seq\n (seq\n (call %init_peer_id% (\"getDataSrv\" \"-relay-\") [] -relay-)\n (call %init_peer_id% (\"getDataSrv\" \"echo_service\") [] echo_service)\n )\n (call %init_peer_id% (\"getDataSrv\" \"greeting_services\") [] greeting_services)\n )\n (call -relay- (\"op\" \"noop\") [])\n )\n (xor\n (seq\n (call -relay- (\"op\" \"noop\") [])\n (call echo_service.$.node! (echo_service.$.service_id! \"echo\") [echo_service.$.names!] echo_results)\n )\n (seq\n (call -relay- (\"op\" \"noop\") [])\n (call %init_peer_id% (\"errorHandlingSrv\" \"error\") [%last_error% 1])\n )\n )\n )\n (call -relay- (\"op\" \"noop\") [])\n )\n (fold echo_results result\n (seq\n (fold greeting_services greeting_service\n (seq\n (seq\n (par\n (seq\n (seq\n (xor\n (call greeting_service.$.node! (greeting_service.$.service_id! \"greeting\") [result.$.echo! greeting_service.$.greet!] $res)\n (seq\n (call -relay- (\"op\" \"noop\") [])\n (call %init_peer_id% (\"errorHandlingSrv\" \"error\") [%last_error% 2])\n )\n )\n (call -relay- (\"op\" \"noop\") [])\n )\n (call %init_peer_id% (\"op\" \"noop\") [])\n )\n (null)\n )\n (call -relay- (\"op\" \"noop\") [])\n )\n (next greeting_service)\n )\n )\n (next result)\n )\n )\n )\n (call %init_peer_id% (\"op\" \"identity\") [$res.$.[5]!])\n )\n (xor\n (call %init_peer_id% (\"callbackSrv\" \"response\") [$res])\n (call %init_peer_id% (\"errorHandlingSrv\" \"error\") [%last_error% 3])\n )\n )\n (call %init_peer_id% (\"errorHandlingSrv\" \"error\") [%last_error% 4])\n)\n\n ")
.withRawScript("\n(xor\n (seq\n (seq\n (seq\n (seq\n (seq\n (seq\n (seq\n (seq\n (seq\n (call %init_peer_id% (\"getDataSrv\" \"-relay-\") [] -relay-)\n (call %init_peer_id% (\"getDataSrv\" \"names\") [] names)\n )\n (call %init_peer_id% (\"getDataSrv\" \"greet\") [] greet)\n )\n (call %init_peer_id% (\"getDataSrv\" \"echo_topo\") [] echo_topo)\n )\n (call %init_peer_id% (\"getDataSrv\" \"greeting_topo\") [] greeting_topo)\n )\n (call -relay- (\"op\" \"noop\") [])\n )\n (xor\n (seq\n (call -relay- (\"op\" \"noop\") [])\n (call echo_topo.$.node! (echo_topo.$.service_id! \"echo\") [names] echo_names)\n )\n (seq\n (seq\n (call -relay- (\"op\" \"noop\") [])\n (call %init_peer_id% (\"errorHandlingSrv\" \"error\") [%last_error% 1])\n )\n (call -relay- (\"op\" \"noop\") [])\n )\n )\n )\n (xor\n (fold echo_names result\n (seq\n (call greeting_topo.$.node! (greeting_topo.$.service_id! \"greeting\") [result.$.echo! greet] $res)\n (next result)\n )\n )\n (seq\n (call -relay- (\"op\" \"noop\") [])\n (call %init_peer_id% (\"errorHandlingSrv\" \"error\") [%last_error% 2])\n )\n )\n )\n (call -relay- (\"op\" \"noop\") [])\n )\n (xor\n (call %init_peer_id% (\"callbackSrv\" \"response\") [$res])\n (call %init_peer_id% (\"errorHandlingSrv\" \"error\") [%last_error% 3])\n )\n )\n (call %init_peer_id% (\"errorHandlingSrv\" \"error\") [%last_error% 4])\n)\n\n ")
.configHandler(function (h) {
h.on('getDataSrv', '-relay-', function () {
return client.relayPeerId;
});
h.on('getDataSrv', 'names', function () { return names; });
h.on('getDataSrv', 'greet', function () { return greet; });
h.on('getDataSrv', 'echo_topo', function () { return echo_topo; });
h.on('getDataSrv', 'greeting_topo', function () { return greeting_topo; });
h.onEvent('callbackSrv', 'response', function (args) {
var res = args[0];
resolve(res);
});
h.onEvent('errorHandlingSrv', 'error', function (args) {
// assuming error is the single argument
var err = args[0];
reject(err);
});
})
.handleScriptError(reject)
.handleTimeout(function () {
reject('Request timed out for echo_greeting_seq_2');
});
if (config && config.ttl) {
r.withTTL(config.ttl);
}
request = r.build();
});
return [4 /*yield*/, client.initiateFlow(request)];
case 1:
_a.sent();
return [2 /*return*/, promise];
}
});
});
}
exports.echo_greeting_seq_2 = echo_greeting_seq_2;
function echo_greeting_par_improved(client, echo_service, greeting_services, config) {
return __awaiter(this, void 0, void 0, function () {
var request, promise;
return __generator(this, function (_a) {
switch (_a.label) {
case 0:
promise = new Promise(function (resolve, reject) {
var r = new api_unstable_1.RequestFlowBuilder()
.disableInjections()
.withRawScript("\n(xor\n (seq\n (seq\n (seq\n (seq\n (seq\n (seq\n (seq\n (seq\n (call %init_peer_id% (\"getDataSrv\" \"-relay-\") [] -relay-)\n (call %init_peer_id% (\"getDataSrv\" \"echo_service\") [] echo_service)\n )\n (call %init_peer_id% (\"getDataSrv\" \"greeting_services\") [] greeting_services)\n )\n (call -relay- (\"op\" \"noop\") [])\n )\n (xor\n (seq\n (call -relay- (\"op\" \"noop\") [])\n (call echo_service.$.node! (echo_service.$.service_id! \"echo\") [echo_service.$.names!] echo_results)\n )\n (seq\n (call -relay- (\"op\" \"noop\") [])\n (call %init_peer_id% (\"errorHandlingSrv\" \"error\") [%last_error% 1])\n )\n )\n )\n (call -relay- (\"op\" \"noop\") [])\n )\n (fold echo_results result\n (seq\n (seq\n (par\n (seq\n (seq\n (call -relay- (\"op\" \"noop\") [])\n (fold greeting_services greeting_service\n (seq\n (seq\n (xor\n (call greeting_service.$.node! (greeting_service.$.service_id! \"greeting\") [result.$.echo! greeting_service.$.greet!] $res)\n (seq\n (call -relay- (\"op\" \"noop\") [])\n (call %init_peer_id% (\"errorHandlingSrv\" \"error\") [%last_error% 2])\n )\n )\n (call -relay- (\"op\" \"noop\") [])\n )\n (next greeting_service)\n )\n )\n )\n (call %init_peer_id% (\"op\" \"noop\") [])\n )\n (null)\n )\n (call -relay- (\"op\" \"noop\") [])\n )\n (next result)\n )\n )\n )\n (call %init_peer_id% (\"op\" \"identity\") [$res.$.[5]!])\n )\n (xor\n (call %init_peer_id% (\"callbackSrv\" \"response\") [$res])\n (call %init_peer_id% (\"errorHandlingSrv\" \"error\") [%last_error% 3])\n )\n )\n (call %init_peer_id% (\"errorHandlingSrv\" \"error\") [%last_error% 4])\n)\n\n ")
.configHandler(function (h) {
h.on('getDataSrv', '-relay-', function () {
return client.relayPeerId;
@ -66,9 +126,9 @@ function echo_greeting_par_greet(client, echo_service, greeting_services, config
})
.handleScriptError(reject)
.handleTimeout(function () {
reject('Request timed out for echo_greeting_par_greet');
reject('Request timed out for echo_greeting_par_improved');
});
if (config === null || config === void 0 ? void 0 : config.ttl) {
if (config && config.ttl) {
r.withTTL(config.ttl);
}
request = r.build();
@ -81,7 +141,7 @@ function echo_greeting_par_greet(client, echo_service, greeting_services, config
});
});
}
exports.echo_greeting_par_greet = echo_greeting_par_greet;
exports.echo_greeting_par_improved = echo_greeting_par_improved;
function echo_greeting_par(client, greet, echo_service, greeting_services, config) {
return __awaiter(this, void 0, void 0, function () {
var request, promise;
@ -91,7 +151,7 @@ function echo_greeting_par(client, greet, echo_service, greeting_services, confi
promise = new Promise(function (resolve, reject) {
var r = new api_unstable_1.RequestFlowBuilder()
.disableInjections()
.withRawScript("\n(xor\n (seq\n (seq\n (seq\n (seq\n (seq\n (seq\n (seq\n (seq\n (seq\n (call %init_peer_id% (\"getDataSrv\" \"-relay-\") [] -relay-)\n (call %init_peer_id% (\"getDataSrv\" \"greet\") [] greet)\n )\n (call %init_peer_id% (\"getDataSrv\" \"echo_service\") [] echo_service)\n )\n (call %init_peer_id% (\"getDataSrv\" \"greeting_services\") [] greeting_services)\n )\n (call -relay- (\"op\" \"noop\") [])\n )\n (xor\n (seq\n (call -relay- (\"op\" \"noop\") [])\n (call echo_service.$.node! (echo_service.$.service_id! \"echo\") [echo_service.$.names!] echo_results)\n )\n (seq\n (call -relay- (\"op\" \"noop\") [])\n (call %init_peer_id% (\"errorHandlingSrv\" \"error\") [%last_error% 1])\n )\n )\n )\n (call -relay- (\"op\" \"noop\") [])\n )\n (fold echo_results result\n (seq\n (fold greeting_services greeting_service\n (seq\n (seq\n (par\n (seq\n (seq\n (xor\n (call greeting_service.$.node! (greeting_service.$.service_id! \"greeting\") [result.$.echo! greet] $res)\n (seq\n (call -relay- (\"op\" \"noop\") [])\n (call %init_peer_id% (\"errorHandlingSrv\" \"error\") [%last_error% 2])\n )\n )\n (call -relay- (\"op\" \"noop\") [])\n )\n (call %init_peer_id% (\"op\" \"noop\") [])\n )\n (null)\n )\n (call -relay- (\"op\" \"noop\") [])\n )\n (next greeting_service)\n )\n )\n (next result)\n )\n )\n )\n (call %init_peer_id% (\"op\" \"identity\") [$res.$.[5]!])\n )\n (xor\n (call %init_peer_id% (\"callbackSrv\" \"response\") [$res])\n (call %init_peer_id% (\"errorHandlingSrv\" \"error\") [%last_error% 3])\n )\n )\n (call %init_peer_id% (\"errorHandlingSrv\" \"error\") [%last_error% 4])\n)\n\n ")
.withRawScript("\n(xor\n (seq\n (seq\n (seq\n (seq\n (seq\n (seq\n (seq\n (seq\n (seq\n (call %init_peer_id% (\"getDataSrv\" \"-relay-\") [] -relay-)\n (call %init_peer_id% (\"getDataSrv\" \"greet\") [] greet)\n )\n (call %init_peer_id% (\"getDataSrv\" \"echo_service\") [] echo_service)\n )\n (call %init_peer_id% (\"getDataSrv\" \"greeting_services\") [] greeting_services)\n )\n (call -relay- (\"op\" \"noop\") [])\n )\n (xor\n (seq\n (call -relay- (\"op\" \"noop\") [])\n (call echo_service.$.node! (echo_service.$.service_id! \"echo\") [echo_service.$.names!] echo_results)\n )\n (seq\n (call -relay- (\"op\" \"noop\") [])\n (call %init_peer_id% (\"errorHandlingSrv\" \"error\") [%last_error% 1])\n )\n )\n )\n (call -relay- (\"op\" \"noop\") [])\n )\n (fold echo_results result\n (seq\n (seq\n (par\n (seq\n (seq\n (call -relay- (\"op\" \"noop\") [])\n (fold greeting_services greeting_service\n (seq\n (seq\n (xor\n (call greeting_service.$.node! (greeting_service.$.service_id! \"greeting\") [result.$.echo! greet] $res)\n (seq\n (call -relay- (\"op\" \"noop\") [])\n (call %init_peer_id% (\"errorHandlingSrv\" \"error\") [%last_error% 2])\n )\n )\n (call -relay- (\"op\" \"noop\") [])\n )\n (next greeting_service)\n )\n )\n )\n (call %init_peer_id% (\"op\" \"noop\") [])\n )\n (null)\n )\n (call -relay- (\"op\" \"noop\") [])\n )\n (next result)\n )\n )\n )\n (call %init_peer_id% (\"op\" \"identity\") [$res.$.[5]!])\n )\n (xor\n (call %init_peer_id% (\"callbackSrv\" \"response\") [$res])\n (call %init_peer_id% (\"errorHandlingSrv\" \"error\") [%last_error% 3])\n )\n )\n (call %init_peer_id% (\"errorHandlingSrv\" \"error\") [%last_error% 4])\n)\n\n ")
.configHandler(function (h) {
h.on('getDataSrv', '-relay-', function () {
return client.relayPeerId;
@ -113,7 +173,7 @@ function echo_greeting_par(client, greet, echo_service, greeting_services, confi
.handleTimeout(function () {
reject('Request timed out for echo_greeting_par');
});
if (config === null || config === void 0 ? void 0 : config.ttl) {
if (config && config.ttl) {
r.withTTL(config.ttl);
}
request = r.build();
@ -127,7 +187,7 @@ function echo_greeting_par(client, greet, echo_service, greeting_services, confi
});
}
exports.echo_greeting_par = echo_greeting_par;
function echo_greeting_par_inverse(client, greet, echo_service, greeting_services, config) {
function echo(client, names, node, echo_service, config) {
return __awaiter(this, void 0, void 0, function () {
var request, promise;
return __generator(this, function (_a) {
@ -136,14 +196,14 @@ function echo_greeting_par_inverse(client, greet, echo_service, greeting_service
promise = new Promise(function (resolve, reject) {
var r = new api_unstable_1.RequestFlowBuilder()
.disableInjections()
.withRawScript("\n(xor\n (seq\n (seq\n (seq\n (seq\n (seq\n (seq\n (seq\n (seq\n (seq\n (call %init_peer_id% (\"getDataSrv\" \"-relay-\") [] -relay-)\n (call %init_peer_id% (\"getDataSrv\" \"greet\") [] greet)\n )\n (call %init_peer_id% (\"getDataSrv\" \"echo_service\") [] echo_service)\n )\n (call %init_peer_id% (\"getDataSrv\" \"greeting_services\") [] greeting_services)\n )\n (call -relay- (\"op\" \"noop\") [])\n )\n (xor\n (seq\n (call -relay- (\"op\" \"noop\") [])\n (call echo_service.$.node! (echo_service.$.service_id! \"echo\") [echo_service.$.names!] echo_results)\n )\n (seq\n (call -relay- (\"op\" \"noop\") [])\n (call %init_peer_id% (\"errorHandlingSrv\" \"error\") [%last_error% 1])\n )\n )\n )\n (call -relay- (\"op\" \"noop\") [])\n )\n (fold greeting_services greeting_service\n (seq\n (seq\n (par\n (seq\n (seq\n (xor\n (fold echo_results result\n (seq\n (call greeting_service.$.node! (greeting_service.$.service_id! \"greeting\") [result.$.echo! greet] $res)\n (next result)\n )\n )\n (seq\n (call -relay- (\"op\" \"noop\") [])\n (call %init_peer_id% (\"errorHandlingSrv\" \"error\") [%last_error% 2])\n )\n )\n (call -relay- (\"op\" \"noop\") [])\n )\n (call %init_peer_id% (\"op\" \"noop\") [])\n )\n (null)\n )\n (call -relay- (\"op\" \"noop\") [])\n )\n (next greeting_service)\n )\n )\n )\n (call %init_peer_id% (\"op\" \"identity\") [$res.$.[3]!])\n )\n (xor\n (call %init_peer_id% (\"callbackSrv\" \"response\") [$res])\n (call %init_peer_id% (\"errorHandlingSrv\" \"error\") [%last_error% 3])\n )\n )\n (call %init_peer_id% (\"errorHandlingSrv\" \"error\") [%last_error% 4])\n)\n\n ")
.withRawScript("\n(xor\n (seq\n (seq\n (seq\n (seq\n (seq\n (seq\n (seq\n (call %init_peer_id% (\"getDataSrv\" \"-relay-\") [] -relay-)\n (call %init_peer_id% (\"getDataSrv\" \"names\") [] names)\n )\n (call %init_peer_id% (\"getDataSrv\" \"node\") [] node)\n )\n (call %init_peer_id% (\"getDataSrv\" \"echo_service\") [] echo_service)\n )\n (call -relay- (\"op\" \"noop\") [])\n )\n (xor\n (seq\n (call -relay- (\"op\" \"noop\") [])\n (call node (echo_service \"echo\") [names] res)\n )\n (seq\n (call -relay- (\"op\" \"noop\") [])\n (call %init_peer_id% (\"errorHandlingSrv\" \"error\") [%last_error% 1])\n )\n )\n )\n (call -relay- (\"op\" \"noop\") [])\n )\n (xor\n (call %init_peer_id% (\"callbackSrv\" \"response\") [res])\n (call %init_peer_id% (\"errorHandlingSrv\" \"error\") [%last_error% 2])\n )\n )\n (call %init_peer_id% (\"errorHandlingSrv\" \"error\") [%last_error% 3])\n)\n\n ")
.configHandler(function (h) {
h.on('getDataSrv', '-relay-', function () {
return client.relayPeerId;
});
h.on('getDataSrv', 'greet', function () { return greet; });
h.on('getDataSrv', 'names', function () { return names; });
h.on('getDataSrv', 'node', function () { return node; });
h.on('getDataSrv', 'echo_service', function () { return echo_service; });
h.on('getDataSrv', 'greeting_services', function () { return greeting_services; });
h.onEvent('callbackSrv', 'response', function (args) {
var res = args[0];
resolve(res);
@ -156,9 +216,9 @@ function echo_greeting_par_inverse(client, greet, echo_service, greeting_service
})
.handleScriptError(reject)
.handleTimeout(function () {
reject('Request timed out for echo_greeting_par_inverse');
reject('Request timed out for echo');
});
if (config === null || config === void 0 ? void 0 : config.ttl) {
if (config && config.ttl) {
r.withTTL(config.ttl);
}
request = r.build();
@ -171,7 +231,53 @@ function echo_greeting_par_inverse(client, greet, echo_service, greeting_service
});
});
}
exports.echo_greeting_par_inverse = echo_greeting_par_inverse;
exports.echo = echo;
function greeting(client, name, greet, node, greeting_service_id, config) {
return __awaiter(this, void 0, void 0, function () {
var request, promise;
return __generator(this, function (_a) {
switch (_a.label) {
case 0:
promise = new Promise(function (resolve, reject) {
var r = new api_unstable_1.RequestFlowBuilder()
.disableInjections()
.withRawScript("\n(xor\n (seq\n (seq\n (seq\n (seq\n (seq\n (seq\n (seq\n (seq\n (call %init_peer_id% (\"getDataSrv\" \"-relay-\") [] -relay-)\n (call %init_peer_id% (\"getDataSrv\" \"name\") [] name)\n )\n (call %init_peer_id% (\"getDataSrv\" \"greet\") [] greet)\n )\n (call %init_peer_id% (\"getDataSrv\" \"node\") [] node)\n )\n (call %init_peer_id% (\"getDataSrv\" \"greeting_service_id\") [] greeting_service_id)\n )\n (call -relay- (\"op\" \"noop\") [])\n )\n (xor\n (seq\n (call -relay- (\"op\" \"noop\") [])\n (call node (greeting_service_id \"greeting\") [name greet] res)\n )\n (seq\n (call -relay- (\"op\" \"noop\") [])\n (call %init_peer_id% (\"errorHandlingSrv\" \"error\") [%last_error% 1])\n )\n )\n )\n (call -relay- (\"op\" \"noop\") [])\n )\n (xor\n (call %init_peer_id% (\"callbackSrv\" \"response\") [res])\n (call %init_peer_id% (\"errorHandlingSrv\" \"error\") [%last_error% 2])\n )\n )\n (call %init_peer_id% (\"errorHandlingSrv\" \"error\") [%last_error% 3])\n)\n\n ")
.configHandler(function (h) {
h.on('getDataSrv', '-relay-', function () {
return client.relayPeerId;
});
h.on('getDataSrv', 'name', function () { return name; });
h.on('getDataSrv', 'greet', function () { return greet; });
h.on('getDataSrv', 'node', function () { return node; });
h.on('getDataSrv', 'greeting_service_id', function () { return greeting_service_id; });
h.onEvent('callbackSrv', 'response', function (args) {
var res = args[0];
resolve(res);
});
h.onEvent('errorHandlingSrv', 'error', function (args) {
// assuming error is the single argument
var err = args[0];
reject(err);
});
})
.handleScriptError(reject)
.handleTimeout(function () {
reject('Request timed out for greeting');
});
if (config && config.ttl) {
r.withTTL(config.ttl);
}
request = r.build();
});
return [4 /*yield*/, client.initiateFlow(request)];
case 1:
_a.sent();
return [2 /*return*/, promise];
}
});
});
}
exports.greeting = greeting;
function echo_greeting_seq(client, names, greet, node, echo_service_id, greeting_service_id, config) {
return __awaiter(this, void 0, void 0, function () {
var request, promise;
@ -205,7 +311,7 @@ function echo_greeting_seq(client, names, greet, node, echo_service_id, greeting
.handleTimeout(function () {
reject('Request timed out for echo_greeting_seq');
});
if (config === null || config === void 0 ? void 0 : config.ttl) {
if (config && config.ttl) {
r.withTTL(config.ttl);
}
request = r.build();
@ -219,7 +325,7 @@ function echo_greeting_seq(client, names, greet, node, echo_service_id, greeting
});
}
exports.echo_greeting_seq = echo_greeting_seq;
function echo_greeting_seq_2(client, names, greet, echo_topo, greeting_topo, config) {
function echo_greeting_par_alternative(client, greet, echo_service, greeting_services, config) {
return __awaiter(this, void 0, void 0, function () {
var request, promise;
return __generator(this, function (_a) {
@ -228,57 +334,12 @@ function echo_greeting_seq_2(client, names, greet, echo_topo, greeting_topo, con
promise = new Promise(function (resolve, reject) {
var r = new api_unstable_1.RequestFlowBuilder()
.disableInjections()
.withRawScript("\n(xor\n (seq\n (seq\n (seq\n (seq\n (seq\n (seq\n (seq\n (seq\n (seq\n (call %init_peer_id% (\"getDataSrv\" \"-relay-\") [] -relay-)\n (call %init_peer_id% (\"getDataSrv\" \"names\") [] names)\n )\n (call %init_peer_id% (\"getDataSrv\" \"greet\") [] greet)\n )\n (call %init_peer_id% (\"getDataSrv\" \"echo_topo\") [] echo_topo)\n )\n (call %init_peer_id% (\"getDataSrv\" \"greeting_topo\") [] greeting_topo)\n )\n (call -relay- (\"op\" \"noop\") [])\n )\n (xor\n (seq\n (call -relay- (\"op\" \"noop\") [])\n (call echo_topo.$.node! (echo_topo.$.service_id! \"echo\") [names] echo_names)\n )\n (seq\n (seq\n (call -relay- (\"op\" \"noop\") [])\n (call %init_peer_id% (\"errorHandlingSrv\" \"error\") [%last_error% 1])\n )\n (call -relay- (\"op\" \"noop\") [])\n )\n )\n )\n (xor\n (fold echo_names result\n (seq\n (call greeting_topo.$.node! (greeting_topo.$.service_id! \"greeting\") [result.$.echo! greet] $res)\n (next result)\n )\n )\n (seq\n (call -relay- (\"op\" \"noop\") [])\n (call %init_peer_id% (\"errorHandlingSrv\" \"error\") [%last_error% 2])\n )\n )\n )\n (call -relay- (\"op\" \"noop\") [])\n )\n (xor\n (call %init_peer_id% (\"callbackSrv\" \"response\") [$res])\n (call %init_peer_id% (\"errorHandlingSrv\" \"error\") [%last_error% 3])\n )\n )\n (call %init_peer_id% (\"errorHandlingSrv\" \"error\") [%last_error% 4])\n)\n\n ")
.withRawScript("\n(xor\n (seq\n (seq\n (seq\n (seq\n (seq\n (seq\n (seq\n (seq\n (seq\n (call %init_peer_id% (\"getDataSrv\" \"-relay-\") [] -relay-)\n (call %init_peer_id% (\"getDataSrv\" \"greet\") [] greet)\n )\n (call %init_peer_id% (\"getDataSrv\" \"echo_service\") [] echo_service)\n )\n (call %init_peer_id% (\"getDataSrv\" \"greeting_services\") [] greeting_services)\n )\n (call -relay- (\"op\" \"noop\") [])\n )\n (xor\n (seq\n (call -relay- (\"op\" \"noop\") [])\n (call echo_service.$.node! (echo_service.$.service_id! \"echo\") [echo_service.$.names!] echo_results)\n )\n (seq\n (call -relay- (\"op\" \"noop\") [])\n (call %init_peer_id% (\"errorHandlingSrv\" \"error\") [%last_error% 1])\n )\n )\n )\n (call -relay- (\"op\" \"noop\") [])\n )\n (fold echo_results result\n (seq\n (fold greeting_services greeting_service\n (seq\n (seq\n (par\n (seq\n (seq\n (xor\n (call greeting_service.$.node! (greeting_service.$.service_id! \"greeting\") [result.$.echo! greet] $res)\n (seq\n (call -relay- (\"op\" \"noop\") [])\n (call %init_peer_id% (\"errorHandlingSrv\" \"error\") [%last_error% 2])\n )\n )\n (call -relay- (\"op\" \"noop\") [])\n )\n (call %init_peer_id% (\"op\" \"noop\") [])\n )\n (null)\n )\n (call -relay- (\"op\" \"noop\") [])\n )\n (next greeting_service)\n )\n )\n (next result)\n )\n )\n )\n (call %init_peer_id% (\"op\" \"identity\") [$res.$.[5]!])\n )\n (xor\n (call %init_peer_id% (\"callbackSrv\" \"response\") [$res])\n (call %init_peer_id% (\"errorHandlingSrv\" \"error\") [%last_error% 3])\n )\n )\n (call %init_peer_id% (\"errorHandlingSrv\" \"error\") [%last_error% 4])\n)\n\n ")
.configHandler(function (h) {
h.on('getDataSrv', '-relay-', function () {
return client.relayPeerId;
});
h.on('getDataSrv', 'names', function () { return names; });
h.on('getDataSrv', 'greet', function () { return greet; });
h.on('getDataSrv', 'echo_topo', function () { return echo_topo; });
h.on('getDataSrv', 'greeting_topo', function () { return greeting_topo; });
h.onEvent('callbackSrv', 'response', function (args) {
var res = args[0];
resolve(res);
});
h.onEvent('errorHandlingSrv', 'error', function (args) {
// assuming error is the single argument
var err = args[0];
reject(err);
});
})
.handleScriptError(reject)
.handleTimeout(function () {
reject('Request timed out for echo_greeting_seq_2');
});
if (config === null || config === void 0 ? void 0 : config.ttl) {
r.withTTL(config.ttl);
}
request = r.build();
});
return [4 /*yield*/, client.initiateFlow(request)];
case 1:
_a.sent();
return [2 /*return*/, promise];
}
});
});
}
exports.echo_greeting_seq_2 = echo_greeting_seq_2;
function echo_greeting_par_inverse_greet(client, echo_service, greeting_services, config) {
return __awaiter(this, void 0, void 0, function () {
var request, promise;
return __generator(this, function (_a) {
switch (_a.label) {
case 0:
promise = new Promise(function (resolve, reject) {
var r = new api_unstable_1.RequestFlowBuilder()
.disableInjections()
.withRawScript("\n(xor\n (seq\n (seq\n (seq\n (seq\n (seq\n (seq\n (seq\n (seq\n (call %init_peer_id% (\"getDataSrv\" \"-relay-\") [] -relay-)\n (call %init_peer_id% (\"getDataSrv\" \"echo_service\") [] echo_service)\n )\n (call %init_peer_id% (\"getDataSrv\" \"greeting_services\") [] greeting_services)\n )\n (call -relay- (\"op\" \"noop\") [])\n )\n (xor\n (seq\n (call -relay- (\"op\" \"noop\") [])\n (call echo_service.$.node! (echo_service.$.service_id! \"echo\") [echo_service.$.names!] echo_results)\n )\n (seq\n (call -relay- (\"op\" \"noop\") [])\n (call %init_peer_id% (\"errorHandlingSrv\" \"error\") [%last_error% 1])\n )\n )\n )\n (call -relay- (\"op\" \"noop\") [])\n )\n (fold greeting_services greeting_service\n (seq\n (seq\n (par\n (seq\n (seq\n (xor\n (fold echo_results result\n (seq\n (call greeting_service.$.node! (greeting_service.$.service_id! \"greeting\") [result.$.echo! greeting_service.$.greet!] $res)\n (next result)\n )\n )\n (seq\n (call -relay- (\"op\" \"noop\") [])\n (call %init_peer_id% (\"errorHandlingSrv\" \"error\") [%last_error% 2])\n )\n )\n (call -relay- (\"op\" \"noop\") [])\n )\n (call %init_peer_id% (\"op\" \"noop\") [])\n )\n (null)\n )\n (call -relay- (\"op\" \"noop\") [])\n )\n (next greeting_service)\n )\n )\n )\n (call %init_peer_id% (\"op\" \"identity\") [$res.$.[3]!])\n )\n (xor\n (call %init_peer_id% (\"callbackSrv\" \"response\") [$res])\n (call %init_peer_id% (\"errorHandlingSrv\" \"error\") [%last_error% 3])\n )\n )\n (call %init_peer_id% (\"errorHandlingSrv\" \"error\") [%last_error% 4])\n)\n\n ")
.configHandler(function (h) {
h.on('getDataSrv', '-relay-', function () {
return client.relayPeerId;
});
h.on('getDataSrv', 'echo_service', function () { return echo_service; });
h.on('getDataSrv', 'greeting_services', function () { return greeting_services; });
h.onEvent('callbackSrv', 'response', function (args) {
@ -293,9 +354,9 @@ function echo_greeting_par_inverse_greet(client, echo_service, greeting_services
})
.handleScriptError(reject)
.handleTimeout(function () {
reject('Request timed out for echo_greeting_par_inverse_greet');
reject('Request timed out for echo_greeting_par_alternative');
});
if (config === null || config === void 0 ? void 0 : config.ttl) {
if (config && config.ttl) {
r.withTTL(config.ttl);
}
request = r.build();
@ -308,4 +369,4 @@ function echo_greeting_par_inverse_greet(client, echo_service, greeting_services
});
});
}
exports.echo_greeting_par_inverse_greet = echo_greeting_par_inverse_greet;
exports.echo_greeting_par_alternative = echo_greeting_par_alternative;

View File

@ -95,38 +95,42 @@ var names = ["Jim", "John", "Jake"];
// let greeting_service =
function main() {
return __awaiter(this, void 0, void 0, function () {
var fluence, network_result;
var fluence, echo_result, result, _i, echo_result_1, item, greeting_result, seq_result, par_result;
return __generator(this, function (_a) {
switch (_a.label) {
case 0: return [4 /*yield*/, fluence_1.createClient(fluence_network_environment_1.krasnodar[2])];
case 1:
fluence = _a.sent();
console.log("created a fluence client %s with relay %s", fluence.selfPeerId, fluence.relayPeerId);
return [4 /*yield*/, echo_greeter_1.echo_greeting_seq(fluence, names, true, echo_topos[0].node, echo_topos[0].service_id, greeting_topos[0].service_id)];
return [4 /*yield*/, echo_greeter_1.echo(fluence, names, echo_topos[0].node, echo_topos[0].service_id)];
case 2:
network_result = _a.sent();
console.log("seq result : ", network_result);
return [4 /*yield*/, echo_greeter_1.echo_greeting_seq_2(fluence, names, true, echo_topos[0], greeting_topos[0])];
echo_result = _a.sent();
result = "";
for (_i = 0, echo_result_1 = echo_result; _i < echo_result_1.length; _i++) {
item = echo_result_1[_i];
result += item.echo + ",";
}
console.log("echo result : ", result);
return [4 /*yield*/, echo_greeter_1.greeting(fluence, names[0], true, greeting_topos[0].node, greeting_topos[0].service_id)];
case 3:
network_result = _a.sent();
console.log("seq result with improved signature : ", network_result);
return [4 /*yield*/, echo_greeter_1.echo_greeting_par(fluence, true, echo_service, greeting_topos)];
greeting_result = _a.sent();
console.log("greeting result : ", greeting_result);
return [4 /*yield*/, echo_greeter_1.echo_greeting_seq(fluence, names, true, echo_topos[0].node, echo_topos[0].service_id, greeting_topos[0].service_id)];
case 4:
// echo_greeting_par(greet: bool, echo_service: EchoServiceInput, greeting_services: []NodeServicePair) -> []string:
network_result = _a.sent();
console.log("par result : ", network_result);
return [4 /*yield*/, echo_greeter_1.echo_greeting_par_inverse(fluence, true, echo_service, greeting_services)];
seq_result = _a.sent();
console.log("seq result : ", seq_result);
return [4 /*yield*/, echo_greeter_1.echo_greeting_par(fluence, true, echo_service, greeting_services)];
case 5:
network_result = _a.sent();
console.log("par inverse result : ", network_result);
return [4 /*yield*/, echo_greeter_1.echo_greeting_par_greet(fluence, echo_service, greeting_services)];
par_result = _a.sent();
console.log("par result : ", par_result);
return [4 /*yield*/, echo_greeter_1.echo_greeting_par_alternative(fluence, true, echo_service, greeting_services)];
case 6:
network_result = _a.sent();
console.log("par result with greet variation : ", network_result);
return [4 /*yield*/, echo_greeter_1.echo_greeting_par_inverse_greet(fluence, echo_service, greeting_services)];
par_result = _a.sent();
console.log("par alternative result : ", par_result);
return [4 /*yield*/, echo_greeter_1.echo_greeting_par_improved(fluence, echo_service, greeting_services)];
case 7:
network_result = _a.sent();
console.log("par inverse result with greet variation : ", network_result);
par_result = _a.sent();
console.log("par improved signature result : ", par_result);
return [2 /*return*/];
}
});

File diff suppressed because it is too large Load Diff

View File

@ -13,13 +13,13 @@
"package-lock.json"
],
"dependencies": {
"@fluencelabs/aqua-lib": "^0.1.9",
"@fluencelabs/fluence": "^0.9.53",
"@fluencelabs/aqua-lib": "^0.1.14",
"@fluencelabs/fluence": "^0.10.1",
"@fluencelabs/fluence-network-environment": "^1.0.10",
"it-all": "^1.0.5"
},
"scripts": {
"compile-aqua": "aqua-cli -i ../aqua-scripts -o src/",
"compile-aqua": "aqua -i ../aqua-scripts -o src/",
"prebuild": "npm run compile-aqua",
"build": "tsc",
"prestart:local": "npm run build",
@ -43,7 +43,7 @@
},
"homepage": "git+https://github.com/fluencelabs/examples/aqua-examples/echo-greeter#readme",
"devDependencies": {
"@fluencelabs/aqua-cli": "0.1.9-163",
"@fluencelabs/aqua": "0.2.2-221",
"typescript": "^3.9.5"
}
}

View File

@ -3,7 +3,7 @@
* This file is auto-generated. Do not edit manually: changes may be erased.
* Generated by Aqua compiler: https://github.com/fluencelabs/aqua/.
* If you find any bugs, please write an issue on GitHub: https://github.com/fluencelabs/aqua/issues
* Aqua version: 0.1.9-163
* Aqua version: 0.2.2-221
*
*/
import { FluenceClient, PeerIdB58 } from '@fluencelabs/fluence';
@ -11,8 +11,138 @@ import { RequestFlowBuilder } from '@fluencelabs/fluence/dist/api.unstable';
import { RequestFlow } from '@fluencelabs/fluence/dist/internal/RequestFlow';
// Services
export async function echo_greeting_par_greet(client: FluenceClient, echo_service: {names:string[];node:string;service_id:string}, greeting_services: {greet:boolean;node:string;service_id:string}[], config?: {ttl?: number}): Promise<string[]> {
//OpString
//defaultId = "op"
//identity: (s: string) => void
//END OpString
//EchoService
//defaultId = undefined
//echo: (arg0: string[]) => {echo:string}[]
//END EchoService
//GreetingService
//defaultId = "service-id"
//greeting: (arg0: string, arg1: boolean) => string
//END GreetingService
// Functions
export async function echo_greeting_seq_2(client: FluenceClient, names: string[], greet: boolean, echo_topo: {node:string;service_id:string}, greeting_topo: {node:string;service_id:string}, config?: {ttl?: number}): Promise<string[]> {
let request: RequestFlow;
const promise = new Promise<string[]>((resolve, reject) => {
const r = new RequestFlowBuilder()
.disableInjections()
.withRawScript(
`
(xor
(seq
(seq
(seq
(seq
(seq
(seq
(seq
(seq
(seq
(call %init_peer_id% ("getDataSrv" "-relay-") [] -relay-)
(call %init_peer_id% ("getDataSrv" "names") [] names)
)
(call %init_peer_id% ("getDataSrv" "greet") [] greet)
)
(call %init_peer_id% ("getDataSrv" "echo_topo") [] echo_topo)
)
(call %init_peer_id% ("getDataSrv" "greeting_topo") [] greeting_topo)
)
(call -relay- ("op" "noop") [])
)
(xor
(seq
(call -relay- ("op" "noop") [])
(call echo_topo.$.node! (echo_topo.$.service_id! "echo") [names] echo_names)
)
(seq
(seq
(call -relay- ("op" "noop") [])
(call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 1])
)
(call -relay- ("op" "noop") [])
)
)
)
(xor
(fold echo_names result
(seq
(call greeting_topo.$.node! (greeting_topo.$.service_id! "greeting") [result.$.echo! greet] $res)
(next result)
)
)
(seq
(call -relay- ("op" "noop") [])
(call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 2])
)
)
)
(call -relay- ("op" "noop") [])
)
(xor
(call %init_peer_id% ("callbackSrv" "response") [$res])
(call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 3])
)
)
(call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 4])
)
`,
)
.configHandler((h) => {
h.on('getDataSrv', '-relay-', () => {
return client.relayPeerId!;
});
h.on('getDataSrv', 'names', () => {return names;});
h.on('getDataSrv', 'greet', () => {return greet;});
h.on('getDataSrv', 'echo_topo', () => {return echo_topo;});
h.on('getDataSrv', 'greeting_topo', () => {return greeting_topo;});
h.onEvent('callbackSrv', 'response', (args) => {
const [res] = args;
resolve(res);
});
h.onEvent('errorHandlingSrv', 'error', (args) => {
// assuming error is the single argument
const [err] = args;
reject(err);
});
})
.handleScriptError(reject)
.handleTimeout(() => {
reject('Request timed out for echo_greeting_seq_2');
})
if(config && config.ttl) {
r.withTTL(config.ttl)
}
request = r.build();
});
await client.initiateFlow(request!);
return promise;
}
export async function echo_greeting_par_improved(client: FluenceClient, echo_service: {names:string[];node:string;service_id:string}, greeting_services: {greet:boolean;node:string;service_id:string}[], config?: {ttl?: number}): Promise<string[]> {
let request: RequestFlow;
const promise = new Promise<string[]>((resolve, reject) => {
const r = new RequestFlowBuilder()
@ -49,11 +179,13 @@ export async function echo_greeting_par_greet(client: FluenceClient, echo_servic
(call -relay- ("op" "noop") [])
)
(fold echo_results result
(seq
(fold greeting_services greeting_service
(seq
(seq
(par
(seq
(seq
(call -relay- ("op" "noop") [])
(fold greeting_services greeting_service
(seq
(seq
(xor
@ -65,15 +197,16 @@ export async function echo_greeting_par_greet(client: FluenceClient, echo_servic
)
(call -relay- ("op" "noop") [])
)
(next greeting_service)
)
)
)
(call %init_peer_id% ("op" "noop") [])
)
(null)
)
(call -relay- ("op" "noop") [])
)
(next greeting_service)
)
)
(next result)
)
)
@ -109,9 +242,9 @@ h.on('getDataSrv', 'greeting_services', () => {return greeting_services;});
})
.handleScriptError(reject)
.handleTimeout(() => {
reject('Request timed out for echo_greeting_par_greet');
reject('Request timed out for echo_greeting_par_improved');
})
if(config?.ttl) {
if(config && config.ttl) {
r.withTTL(config.ttl)
}
request = r.build();
@ -162,11 +295,13 @@ export async function echo_greeting_par(client: FluenceClient, greet: boolean, e
(call -relay- ("op" "noop") [])
)
(fold echo_results result
(seq
(fold greeting_services greeting_service
(seq
(seq
(par
(seq
(seq
(call -relay- ("op" "noop") [])
(fold greeting_services greeting_service
(seq
(seq
(xor
@ -178,15 +313,16 @@ export async function echo_greeting_par(client: FluenceClient, greet: boolean, e
)
(call -relay- ("op" "noop") [])
)
(next greeting_service)
)
)
)
(call %init_peer_id% ("op" "noop") [])
)
(null)
)
(call -relay- ("op" "noop") [])
)
(next greeting_service)
)
)
(next result)
)
)
@ -225,7 +361,7 @@ h.on('getDataSrv', 'greeting_services', () => {return greeting_services;});
.handleTimeout(() => {
reject('Request timed out for echo_greeting_par');
})
if(config?.ttl) {
if(config && config.ttl) {
r.withTTL(config.ttl)
}
request = r.build();
@ -236,9 +372,9 @@ h.on('getDataSrv', 'greeting_services', () => {return greeting_services;});
export async function echo_greeting_par_inverse(client: FluenceClient, greet: boolean, echo_service: {names:string[];node:string;service_id:string}, greeting_services: {node:string;service_id:string}[], config?: {ttl?: number}): Promise<string[]> {
export async function echo(client: FluenceClient, names: string[], node: string, echo_service: string, config?: {ttl?: number}): Promise<{echo:string}[]> {
let request: RequestFlow;
const promise = new Promise<string[]>((resolve, reject) => {
const promise = new Promise<{echo:string}[]>((resolve, reject) => {
const r = new RequestFlowBuilder()
.disableInjections()
.withRawScript(
@ -248,24 +384,22 @@ export async function echo_greeting_par_inverse(client: FluenceClient, greet: bo
(seq
(seq
(seq
(seq
(seq
(seq
(seq
(seq
(call %init_peer_id% ("getDataSrv" "-relay-") [] -relay-)
(call %init_peer_id% ("getDataSrv" "greet") [] greet)
(call %init_peer_id% ("getDataSrv" "names") [] names)
)
(call %init_peer_id% ("getDataSrv" "node") [] node)
)
(call %init_peer_id% ("getDataSrv" "echo_service") [] echo_service)
)
(call %init_peer_id% ("getDataSrv" "greeting_services") [] greeting_services)
)
(call -relay- ("op" "noop") [])
)
(xor
(seq
(call -relay- ("op" "noop") [])
(call echo_service.$.node! (echo_service.$.service_id! "echo") [echo_service.$.names!] echo_results)
(call node (echo_service "echo") [names] res)
)
(seq
(call -relay- ("op" "noop") [])
@ -275,44 +409,12 @@ export async function echo_greeting_par_inverse(client: FluenceClient, greet: bo
)
(call -relay- ("op" "noop") [])
)
(fold greeting_services greeting_service
(seq
(seq
(par
(seq
(seq
(xor
(fold echo_results result
(seq
(call greeting_service.$.node! (greeting_service.$.service_id! "greeting") [result.$.echo! greet] $res)
(next result)
)
)
(seq
(call -relay- ("op" "noop") [])
(call %init_peer_id% ("callbackSrv" "response") [res])
(call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 2])
)
)
(call -relay- ("op" "noop") [])
)
(call %init_peer_id% ("op" "noop") [])
)
(null)
)
(call -relay- ("op" "noop") [])
)
(next greeting_service)
)
)
)
(call %init_peer_id% ("op" "identity") [$res.$.[3]!])
)
(xor
(call %init_peer_id% ("callbackSrv" "response") [$res])
(call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 3])
)
)
(call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 4])
)
`,
@ -321,9 +423,9 @@ export async function echo_greeting_par_inverse(client: FluenceClient, greet: bo
h.on('getDataSrv', '-relay-', () => {
return client.relayPeerId!;
});
h.on('getDataSrv', 'greet', () => {return greet;});
h.on('getDataSrv', 'names', () => {return names;});
h.on('getDataSrv', 'node', () => {return node;});
h.on('getDataSrv', 'echo_service', () => {return echo_service;});
h.on('getDataSrv', 'greeting_services', () => {return greeting_services;});
h.onEvent('callbackSrv', 'response', (args) => {
const [res] = args;
resolve(res);
@ -337,9 +439,93 @@ h.on('getDataSrv', 'greeting_services', () => {return greeting_services;});
})
.handleScriptError(reject)
.handleTimeout(() => {
reject('Request timed out for echo_greeting_par_inverse');
reject('Request timed out for echo');
})
if(config?.ttl) {
if(config && config.ttl) {
r.withTTL(config.ttl)
}
request = r.build();
});
await client.initiateFlow(request!);
return promise;
}
export async function greeting(client: FluenceClient, name: string, greet: boolean, node: string, greeting_service_id: string, config?: {ttl?: number}): Promise<string> {
let request: RequestFlow;
const promise = new Promise<string>((resolve, reject) => {
const r = new RequestFlowBuilder()
.disableInjections()
.withRawScript(
`
(xor
(seq
(seq
(seq
(seq
(seq
(seq
(seq
(seq
(call %init_peer_id% ("getDataSrv" "-relay-") [] -relay-)
(call %init_peer_id% ("getDataSrv" "name") [] name)
)
(call %init_peer_id% ("getDataSrv" "greet") [] greet)
)
(call %init_peer_id% ("getDataSrv" "node") [] node)
)
(call %init_peer_id% ("getDataSrv" "greeting_service_id") [] greeting_service_id)
)
(call -relay- ("op" "noop") [])
)
(xor
(seq
(call -relay- ("op" "noop") [])
(call node (greeting_service_id "greeting") [name greet] res)
)
(seq
(call -relay- ("op" "noop") [])
(call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 1])
)
)
)
(call -relay- ("op" "noop") [])
)
(xor
(call %init_peer_id% ("callbackSrv" "response") [res])
(call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 2])
)
)
(call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 3])
)
`,
)
.configHandler((h) => {
h.on('getDataSrv', '-relay-', () => {
return client.relayPeerId!;
});
h.on('getDataSrv', 'name', () => {return name;});
h.on('getDataSrv', 'greet', () => {return greet;});
h.on('getDataSrv', 'node', () => {return node;});
h.on('getDataSrv', 'greeting_service_id', () => {return greeting_service_id;});
h.onEvent('callbackSrv', 'response', (args) => {
const [res] = args;
resolve(res);
});
h.onEvent('errorHandlingSrv', 'error', (args) => {
// assuming error is the single argument
const [err] = args;
reject(err);
});
})
.handleScriptError(reject)
.handleTimeout(() => {
reject('Request timed out for greeting');
})
if(config && config.ttl) {
r.withTTL(config.ttl)
}
request = r.build();
@ -435,7 +621,7 @@ h.on('getDataSrv', 'greeting_service_id', () => {return greeting_service_id;});
.handleTimeout(() => {
reject('Request timed out for echo_greeting_seq');
})
if(config?.ttl) {
if(config && config.ttl) {
r.withTTL(config.ttl)
}
request = r.build();
@ -446,7 +632,7 @@ h.on('getDataSrv', 'greeting_service_id', () => {return greeting_service_id;});
export async function echo_greeting_seq_2(client: FluenceClient, names: string[], greet: boolean, echo_topo: {node:string;service_id:string}, greeting_topo: {node:string;service_id:string}, config?: {ttl?: number}): Promise<string[]> {
export async function echo_greeting_par_alternative(client: FluenceClient, greet: boolean, echo_service: {names:string[];node:string;service_id:string}, greeting_services: {node:string;service_id:string}[], config?: {ttl?: number}): Promise<string[]> {
let request: RequestFlow;
const promise = new Promise<string[]>((resolve, reject) => {
const r = new RequestFlowBuilder()
@ -464,106 +650,8 @@ export async function echo_greeting_seq_2(client: FluenceClient, names: string[]
(seq
(seq
(call %init_peer_id% ("getDataSrv" "-relay-") [] -relay-)
(call %init_peer_id% ("getDataSrv" "names") [] names)
)
(call %init_peer_id% ("getDataSrv" "greet") [] greet)
)
(call %init_peer_id% ("getDataSrv" "echo_topo") [] echo_topo)
)
(call %init_peer_id% ("getDataSrv" "greeting_topo") [] greeting_topo)
)
(call -relay- ("op" "noop") [])
)
(xor
(seq
(call -relay- ("op" "noop") [])
(call echo_topo.$.node! (echo_topo.$.service_id! "echo") [names] echo_names)
)
(seq
(seq
(call -relay- ("op" "noop") [])
(call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 1])
)
(call -relay- ("op" "noop") [])
)
)
)
(xor
(fold echo_names result
(seq
(call greeting_topo.$.node! (greeting_topo.$.service_id! "greeting") [result.$.echo! greet] $res)
(next result)
)
)
(seq
(call -relay- ("op" "noop") [])
(call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 2])
)
)
)
(call -relay- ("op" "noop") [])
)
(xor
(call %init_peer_id% ("callbackSrv" "response") [$res])
(call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 3])
)
)
(call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 4])
)
`,
)
.configHandler((h) => {
h.on('getDataSrv', '-relay-', () => {
return client.relayPeerId!;
});
h.on('getDataSrv', 'names', () => {return names;});
h.on('getDataSrv', 'greet', () => {return greet;});
h.on('getDataSrv', 'echo_topo', () => {return echo_topo;});
h.on('getDataSrv', 'greeting_topo', () => {return greeting_topo;});
h.onEvent('callbackSrv', 'response', (args) => {
const [res] = args;
resolve(res);
});
h.onEvent('errorHandlingSrv', 'error', (args) => {
// assuming error is the single argument
const [err] = args;
reject(err);
});
})
.handleScriptError(reject)
.handleTimeout(() => {
reject('Request timed out for echo_greeting_seq_2');
})
if(config?.ttl) {
r.withTTL(config.ttl)
}
request = r.build();
});
await client.initiateFlow(request!);
return promise;
}
export async function echo_greeting_par_inverse_greet(client: FluenceClient, echo_service: {names:string[];node:string;service_id:string}, greeting_services: {greet:boolean;node:string;service_id:string}[], config?: {ttl?: number}): Promise<string[]> {
let request: RequestFlow;
const promise = new Promise<string[]>((resolve, reject) => {
const r = new RequestFlowBuilder()
.disableInjections()
.withRawScript(
`
(xor
(seq
(seq
(seq
(seq
(seq
(seq
(seq
(seq
(call %init_peer_id% ("getDataSrv" "-relay-") [] -relay-)
(call %init_peer_id% ("getDataSrv" "echo_service") [] echo_service)
)
(call %init_peer_id% ("getDataSrv" "greeting_services") [] greeting_services)
@ -583,6 +671,8 @@ export async function echo_greeting_par_inverse_greet(client: FluenceClient, ech
)
(call -relay- ("op" "noop") [])
)
(fold echo_results result
(seq
(fold greeting_services greeting_service
(seq
(seq
@ -590,12 +680,7 @@ export async function echo_greeting_par_inverse_greet(client: FluenceClient, ech
(seq
(seq
(xor
(fold echo_results result
(seq
(call greeting_service.$.node! (greeting_service.$.service_id! "greeting") [result.$.echo! greeting_service.$.greet!] $res)
(next result)
)
)
(call greeting_service.$.node! (greeting_service.$.service_id! "greeting") [result.$.echo! greet] $res)
(seq
(call -relay- ("op" "noop") [])
(call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 2])
@ -612,8 +697,11 @@ export async function echo_greeting_par_inverse_greet(client: FluenceClient, ech
(next greeting_service)
)
)
(next result)
)
(call %init_peer_id% ("op" "identity") [$res.$.[3]!])
)
)
(call %init_peer_id% ("op" "identity") [$res.$.[5]!])
)
(xor
(call %init_peer_id% ("callbackSrv" "response") [$res])
@ -629,6 +717,7 @@ export async function echo_greeting_par_inverse_greet(client: FluenceClient, ech
h.on('getDataSrv', '-relay-', () => {
return client.relayPeerId!;
});
h.on('getDataSrv', 'greet', () => {return greet;});
h.on('getDataSrv', 'echo_service', () => {return echo_service;});
h.on('getDataSrv', 'greeting_services', () => {return greeting_services;});
h.onEvent('callbackSrv', 'response', (args) => {
@ -644,9 +733,9 @@ h.on('getDataSrv', 'greeting_services', () => {return greeting_services;});
})
.handleScriptError(reject)
.handleTimeout(() => {
reject('Request timed out for echo_greeting_par_inverse_greet');
reject('Request timed out for echo_greeting_par_alternative');
})
if(config?.ttl) {
if(config && config.ttl) {
r.withTTL(config.ttl)
}
request = r.build();

View File

@ -17,14 +17,18 @@
import { createClient, setLogLevel, FluenceClient } from "@fluencelabs/fluence";
import { krasnodar, Node } from "@fluencelabs/fluence-network-environment";
import {
echo,
greeting,
echo_greeting_seq,
echo_greeting_seq_2,
echo_greeting_par,
echo_greeting_par_inverse,
echo_greeting_par_greet,
echo_greeting_par_inverse_greet,
echo_greeting_par_alternative,
echo_greeting_par_improved
} from "./echo_greeter";
interface EchoResult {
echo: string;
}
interface NodeServicePair {
node: string;
service_id: string;
@ -95,7 +99,31 @@ async function main() {
fluence.relayPeerId
);
let network_result = await echo_greeting_seq(
let echo_result = await echo(
fluence,
names,
echo_topos[0].node,
echo_topos[0].service_id
);
let result = "";
for (let item of echo_result) {
result += item.echo + ","
}
console.log("echo result : ", result);
let greeting_result = await greeting(
fluence,
names[0],
true,
greeting_topos[0].node,
greeting_topos[0].service_id
);
console.log("greeting result : ", greeting_result);
// echo_greeting_par(greet: bool, echo_service: EchoServiceInput, greeting_services: []NodeServicePair) -> []string:
let seq_result = await echo_greeting_seq(
fluence,
names,
true,
@ -103,48 +131,32 @@ async function main() {
echo_topos[0].service_id,
greeting_topos[0].service_id
);
console.log("seq result : ", network_result);
console.log("seq result : ", seq_result);
network_result = await echo_greeting_seq_2(
fluence,
names,
true,
echo_topos[0],
greeting_topos[0]
);
console.log("seq result with improved signature : ", network_result);
// echo_greeting_par(greet: bool, echo_service: EchoServiceInput, greeting_services: []NodeServicePair) -> []string:
network_result = await echo_greeting_par(
fluence,
true,
echo_service,
greeting_topos
);
console.log("par result : ", network_result);
network_result = await echo_greeting_par_inverse(
let par_result = await echo_greeting_par(
fluence,
true,
echo_service,
greeting_services
);
console.log("par inverse result : ", network_result);
console.log("par result : ", par_result);
network_result = await echo_greeting_par_greet(
par_result = await echo_greeting_par_alternative(
fluence,
true,
echo_service,
greeting_services
);
console.log("par alternative result : ", par_result);
par_result = await echo_greeting_par_improved(
fluence,
echo_service,
greeting_services
);
console.log("par result with greet variation : ", network_result);
network_result = await echo_greeting_par_inverse_greet(
fluence,
echo_service,
greeting_services
);
console.log("par inverse result with greet variation : ", network_result);
console.log("par improved signature result : ", par_result);
return;