This commit is contained in:
DieMyst
2021-06-03 17:27:32 +03:00
parent 821986d6cb
commit cf8a45cb0b
7 changed files with 556 additions and 2 deletions

23
aqua/examples/via.aqua Normal file
View File

@ -0,0 +1,23 @@
import "@fluencelabs/aqua-lib/builtin.aqua"
service CustomId("cid"):
id(s: string) -> string
func viaArr(node_id: string, viaAr: []string) -> Info:
on node_id via viaAr:
p <- Peer.identify()
<- p
func viaStream(node_id: string, viaStr: []string) -> Info:
str: *string
for v <- viaStr:
str <- CustomId.id(v)
on node_id via str:
p <- Peer.identify()
<- p
func viaOpt(relay: string, node_id: string, viaOpt: ?string) -> Info:
on node_id via viaOpt:
p <- Peer.identify()
<- p

View File

@ -0,0 +1,107 @@
/**
*
* 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.4-SNAPSHOT
*
*/
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 getTwoResults(client: FluenceClient, relay: string): Promise<number[]> {
let request: RequestFlow;
const promise = new Promise<number[]>((resolve, reject) => {
request = new RequestFlowBuilder()
.disableInjections()
.withRawScript(
`
(xor
(seq
(seq
(seq
(seq
(seq
(call %init_peer_id% ("getDataSrv" "-relay-") [] -relay-)
(call %init_peer_id% ("getDataSrv" "relay") [] relay)
)
(call -relay- ("op" "identity") [])
)
(xor
(seq
(seq
(seq
(seq
(seq
(call relay ("op" "string_to_b58") [%init_peer_id%] k)
(call relay ("kad" "neighborhood") [k false] nodes)
)
(fold nodes n
(par
(xor
(call n ("peer" "timestamp_sec") [] $res)
(null)
)
(next n)
)
)
)
(call relay ("op" "identity") [$res.$.[0]!])
)
(call relay ("op" "identity") [$res.$.[1]!])
)
(call relay ("op" "identity") [$res.$.[2]!])
)
(seq
(seq
(call -relay- ("op" "identity") [])
(call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 1])
)
(call -relay- ("op" "identity") [])
)
)
)
(call -relay- ("op" "identity") [])
)
(xor
(call %init_peer_id% ("callbackSrv" "response") [$res])
(call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 2])
)
)
(seq
(call -relay- ("op" "identity") [])
(call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 3])
)
)
`,
)
.configHandler((h) => {
h.on('getDataSrv', '-relay-', () => {
return client.relayPeerId!;
});
h.on('getDataSrv', 'relay', () => {return relay;});
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 getTwoResults');
})
.build();
});
await client.initiateFlow(request!);
return promise;
}

View File

@ -0,0 +1,77 @@
/**
*
* 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.4-SNAPSHOT
*
*/
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 useOptional(client: FluenceClient, opt: string | null): Promise<string> {
let request: RequestFlow;
const promise = new Promise<string>((resolve, reject) => {
request = new RequestFlowBuilder()
.disableInjections()
.withRawScript(
`
(xor
(seq
(seq
(seq
(seq
(call %init_peer_id% ("getDataSrv" "-relay-") [] -relay-)
(call %init_peer_id% ("getDataSrv" "opt") [] opt)
)
(call %init_peer_id% ("test2" "getStr") [opt] res)
)
(fold opt i
(seq
(call %init_peer_id% ("test2" "getStr2") [i])
(next i)
)
)
)
(xor
(call %init_peer_id% ("callbackSrv" "response") [res.$.[0]!])
(call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 1])
)
)
(seq
(call -relay- ("op" "identity") [])
(call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 2])
)
)
`,
)
.configHandler((h) => {
h.on('getDataSrv', '-relay-', () => {
return client.relayPeerId!;
});
h.on('getDataSrv', 'opt', () => {return opt === null ? [] : [opt];});
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 useOptional');
})
.build();
});
await client.initiateFlow(request!);
return promise;
}

View File

@ -0,0 +1,324 @@
/**
*
* 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.4-SNAPSHOT
*
*/
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 viaArr(client: FluenceClient, node_id: string, viaAr: string[]): Promise<{external_addresses:string[]}> {
let request: RequestFlow;
const promise = new Promise<{external_addresses:string[]}>((resolve, reject) => {
request = 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" "node_id") [] node_id)
)
(call %init_peer_id% ("getDataSrv" "viaAr") [] viaAr)
)
(call -relay- ("op" "identity") [])
)
(fold viaAr -via-peer-
(seq
(call -via-peer- ("op" "identity") [])
(next -via-peer-)
)
)
)
(xor
(call node_id ("peer" "identify") [] p)
(seq
(seq
(seq
(fold viaAr -via-peer-
(seq
(call -via-peer- ("op" "identity") [])
(next -via-peer-)
)
)
(call -relay- ("op" "identity") [])
)
(call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 1])
)
(call -relay- ("op" "identity") [])
)
)
)
(fold viaAr -via-peer-
(seq
(call -via-peer- ("op" "identity") [])
(next -via-peer-)
)
)
)
(call -relay- ("op" "identity") [])
)
(xor
(call %init_peer_id% ("callbackSrv" "response") [p])
(call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 2])
)
)
(seq
(call -relay- ("op" "identity") [])
(call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 3])
)
)
`,
)
.configHandler((h) => {
h.on('getDataSrv', '-relay-', () => {
return client.relayPeerId!;
});
h.on('getDataSrv', 'node_id', () => {return node_id;});
h.on('getDataSrv', 'viaAr', () => {return viaAr;});
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 viaArr');
})
.build();
});
await client.initiateFlow(request!);
return promise;
}
export async function viaStream(client: FluenceClient, node_id: string, viaStr: string[]): Promise<{external_addresses:string[]}> {
let request: RequestFlow;
const promise = new Promise<{external_addresses:string[]}>((resolve, reject) => {
request = 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" "node_id") [] node_id)
)
(call %init_peer_id% ("getDataSrv" "viaStr") [] viaStr)
)
(fold viaStr v
(seq
(call %init_peer_id% ("cid" "id") [v] $str)
(next v)
)
)
)
(call -relay- ("op" "identity") [])
)
(fold $str -via-peer-
(seq
(call -via-peer- ("op" "identity") [])
(next -via-peer-)
)
)
)
(xor
(call node_id ("peer" "identify") [] p)
(seq
(seq
(seq
(fold $str -via-peer-
(seq
(call -via-peer- ("op" "identity") [])
(next -via-peer-)
)
)
(call -relay- ("op" "identity") [])
)
(call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 1])
)
(call -relay- ("op" "identity") [])
)
)
)
(fold $str -via-peer-
(seq
(call -via-peer- ("op" "identity") [])
(next -via-peer-)
)
)
)
(call -relay- ("op" "identity") [])
)
(xor
(call %init_peer_id% ("callbackSrv" "response") [p])
(call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 2])
)
)
(seq
(call -relay- ("op" "identity") [])
(call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 3])
)
)
`,
)
.configHandler((h) => {
h.on('getDataSrv', '-relay-', () => {
return client.relayPeerId!;
});
h.on('getDataSrv', 'node_id', () => {return node_id;});
h.on('getDataSrv', 'viaStr', () => {return viaStr;});
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 viaStream');
})
.build();
});
await client.initiateFlow(request!);
return promise;
}
export async function viaOpt(client: FluenceClient, relay: string, node_id: string, viaOpt: string | null): Promise<{external_addresses:string[]}> {
let request: RequestFlow;
const promise = new Promise<{external_addresses:string[]}>((resolve, reject) => {
request = 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" "relay") [] relay)
)
(call %init_peer_id% ("getDataSrv" "node_id") [] node_id)
)
(call %init_peer_id% ("getDataSrv" "viaOpt") [] viaOpt)
)
(call -relay- ("op" "identity") [])
)
(fold viaOpt -via-peer-
(seq
(call -via-peer- ("op" "identity") [])
(next -via-peer-)
)
)
)
(xor
(call node_id ("peer" "identify") [] p)
(seq
(seq
(seq
(fold viaOpt -via-peer-
(seq
(call -via-peer- ("op" "identity") [])
(next -via-peer-)
)
)
(call -relay- ("op" "identity") [])
)
(call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 1])
)
(call -relay- ("op" "identity") [])
)
)
)
(fold viaOpt -via-peer-
(seq
(call -via-peer- ("op" "identity") [])
(next -via-peer-)
)
)
)
(call -relay- ("op" "identity") [])
)
(xor
(call %init_peer_id% ("callbackSrv" "response") [p])
(call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 2])
)
)
(seq
(call -relay- ("op" "identity") [])
(call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 3])
)
)
`,
)
.configHandler((h) => {
h.on('getDataSrv', '-relay-', () => {
return client.relayPeerId!;
});
h.on('getDataSrv', 'relay', () => {return relay;});
h.on('getDataSrv', 'node_id', () => {return node_id;});
h.on('getDataSrv', 'viaOpt', () => {return viaOpt === null ? [] : [viaOpt];});
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 viaOpt');
})
.build();
});
await client.initiateFlow(request!);
return promise;
}

17
src/examples/viaCall.ts Normal file
View File

@ -0,0 +1,17 @@
import {FluenceClient, registerServiceFunction} from "@fluencelabs/fluence";
import {krasnodar} from "@fluencelabs/fluence-network-environment";
import {viaArr, viaOpt, viaStream} from "../compiled/examples/via";
export async function viaCall(client: FluenceClient): Promise<string[][]> {
registerServiceFunction(client, "cid", "id", (args: any[], _) => {
return args[0]
})
let res = await viaArr(client, krasnodar[3].peerId, [krasnodar[2].peerId, krasnodar[1].peerId])
let res2 = await viaOpt(client, client.relayPeerId!, krasnodar[3].peerId, krasnodar[2].peerId)
let res3 = await viaOpt(client, client.relayPeerId!, krasnodar[3].peerId, krasnodar[2].peerId || null)
let res4 = await viaStream(client, krasnodar[3].peerId, [krasnodar[2].peerId, krasnodar[1].peerId])
return [res.external_addresses, res2.external_addresses, res3.external_addresses, res4.external_addresses]
}

View File

@ -1,12 +1,12 @@
#!/usr/bin/env node
import {createClient, registerServiceFunction} from "@fluencelabs/fluence";
import {testNet} from "@fluencelabs/fluence-network-environment";
import {krasnodar} from "@fluencelabs/fluence-network-environment";
import {helloWorld} from "./compiled/examples/helloWorld";
const main = async () => {
// each compiled aqua function require a connected client
const client = await createClient(testNet[0]);
const client = await createClient(krasnodar[0]);
// example to how register a local service
// it could be used in aqua code as follows

View File

@ -16,6 +16,7 @@ import {streamCall} from "./examples/streamCall";
import {topologyCall} from "./examples/topologyCall";
import {foldJoinCall} from "./examples/foldJoinCall";
import {useOptionalCall} from "./examples/useOptionalCall";
import {viaCall} from "./examples/viaCall";
let deepEqual = require('deep-equal')
function checkCall(name: string, expected: any, actual: any, callBackOnError: () => void) {
@ -96,6 +97,9 @@ const main = async () => {
// option.aqua
let optionResult = await useOptionalCall(client)
// via.aqua
let viaResult = await viaCall(client)
await client.disconnect();
let success = true;
@ -129,6 +133,8 @@ const main = async () => {
checkCall("useOptional", optionResult, "hello", cb)
checkCallBy("via", viaResult, (res) => res.every( (val, i, arr) => deepEqual(val, arr[0]) ), cb)
if (success) {
process.exit(0)
} else {