echo greeter

This commit is contained in:
Pavel Murygin 2022-02-18 23:52:49 +03:00
parent 98adfe858f
commit cf839b51d8
7 changed files with 15380 additions and 7900 deletions

View File

@ -0,0 +1,8 @@
module.exports = {
semi: true,
trailingComma: 'all',
singleQuote: true,
printWidth: 120,
tabWidth: 4,
useTabs: false,
};

View File

@ -0,0 +1,5 @@
module.exports = {
preset: 'ts-jest',
testEnvironment: 'node',
testPathIgnorePatterns: ['dist'],
};

File diff suppressed because it is too large Load Diff

View File

@ -1,49 +1,51 @@
{
"name": "echo-greeter-example",
"version": "0.1.0",
"description": "Fluence Echo Greeter Example",
"main": "./dist/src/index.js",
"typings": "./dist/src/index.d.ts",
"files": [
"dist/*"
],
"bic": [
"client-peer/*",
"*.aqua",
"package-lock.json"
],
"dependencies": {
"@fluencelabs/fluence": "0.19.1",
"@fluencelabs/fluence-network-environment": "^1.0.13",
"it-all": "^1.0.5"
},
"scripts": {
"compile-aqua": "aqua -i ../aqua -o src/_aqua",
"prebuild": "npm run compile-aqua",
"build": "tsc",
"prestart:local": "npm run build",
"start:local": "node dist/src/index.js local",
"prestart:remote": "npm run build",
"start:remote": "node dist/src/index.js krasnodar",
"start": "npm run start:remote"
},
"repository": {
"type": "git",
"url": "git+https://github.com/fluencelabs/examples/aqua-examples/echo-greeter"
},
"keywords": [
"aqua",
"fluence"
],
"author": "Fluence Labs",
"license": "MIT",
"bugs": {
"url": "git+https://github.com/fluencelabs/examples/issues"
},
"homepage": "git+https://github.com/fluencelabs/examples/aqua-examples/echo-greeter#readme",
"devDependencies": {
"@fluencelabs/aqua": "^0.6.0-275",
"@fluencelabs/aqua-lib": "^0.4.0",
"typescript": "^4.5.5"
}
"name": "echo-greeter-example",
"version": "0.1.0",
"description": "Fluence Echo Greeter Example",
"main": "./dist/src/index.js",
"typings": "./dist/src/index.d.ts",
"files": [
"dist/*"
],
"bic": [
"client-peer/*",
"*.aqua",
"package-lock.json"
],
"dependencies": {
"@fluencelabs/fluence": "0.19.1",
"@fluencelabs/fluence-network-environment": "^1.0.13",
"it-all": "^1.0.5"
},
"scripts": {
"prestart": "npm run compile-aqua",
"start": "node -r ts-node/register src/index.ts",
"test": "jest",
"compile-aqua": "aqua --import . -i ../aqua/ -o ./src/_aqua",
"watch-aqua": "chokidar \"**/*.aqua\" -c \"npm run compile-aqua\""
},
"repository": {
"type": "git",
"url": "git+https://github.com/fluencelabs/examples/aqua-examples/echo-greeter"
},
"keywords": [
"aqua",
"fluence"
],
"author": "Fluence Labs",
"license": "MIT",
"bugs": {
"url": "git+https://github.com/fluencelabs/examples/issues"
},
"homepage": "git+https://github.com/fluencelabs/examples/aqua-examples/echo-greeter#readme",
"devDependencies": {
"@fluencelabs/aqua": "^0.6.0-272",
"@fluencelabs/aqua-lib": "^0.4.0",
"chokidar-cli": "^3.0.0",
"ts-node": "^10.2.1",
"typescript": "^4.4.2",
"@types/jest": "^27.0.3",
"jest": "^27.4.0",
"ts-jest": "^27.0.7"
}
}

View File

@ -0,0 +1,34 @@
import { main } from '../main';
describe('smoke test', () => {
it('should work', async () => {
console.log = jest.fn();
await main();
expect(console.log).toBeCalledTimes(6);
expect(console.log).toHaveBeenNthCalledWith(2, expect.stringMatching('echo result'), 'Jim,John,Jake,');
expect(console.log).toHaveBeenNthCalledWith(3, expect.stringMatching('greeting result'), 'Hi, Jim');
expect(console.log).toHaveBeenNthCalledWith(4, expect.stringMatching('seq result'), [
'Hi, Jim',
'Hi, John',
'Hi, Jake',
]);
expect(console.log).toHaveBeenNthCalledWith(5, expect.stringMatching('par result'), [
'Hi, Jim',
'Hi, Jim',
'Hi, John',
'Hi, John',
'Hi, Jake',
'Hi, Jake',
]);
expect(console.log).toHaveBeenNthCalledWith(6, expect.stringMatching('par improved signature result'), [
'Hi, Jim',
'Bye, Jim',
'Hi, John',
'Bye, John',
'Hi, Jake',
'Bye, Jake',
]);
});
});

View File

@ -1,153 +1,8 @@
/*
* Copyright 2021 Fluence Labs Limited
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
import { setLogLevel, Fluence, FluencePeer } from "@fluencelabs/fluence";
import { krasnodar, Node } from "@fluencelabs/fluence-network-environment";
import {
echo,
greeting,
echo_greeting_seq,
echo_greeting_par,
echo_greeting_par_alternative,
echo_greeting_par_improved,
} from "./_aqua/echo_greeter";
interface EchoResult {
echo: string;
}
interface NodeServicePair {
node: string;
service_id: string;
}
interface EchoService {
node: string;
service_id: string;
names: Array<string>;
}
interface GreetingService {
node: string;
service_id: string;
greet: boolean;
}
let greeting_topos: Array<NodeServicePair> = [
{
node: "12D3KooWFtf3rfCDAfWwt6oLZYZbDfn9Vn7bv7g6QjjQxUUEFVBt",
service_id: "5cf520ff-dd65-47d7-a51a-2bf08dfe2ede",
},
{
node: "12D3KooWJd3HaMJ1rpLY1kQvcjRPEvnDwcXrH8mJvk7ypcZXqXGE",
service_id: "5a03906b-3217-40a2-93fb-7e83be735408",
},
];
let echo_topos: Array<NodeServicePair> = [
{
node: "12D3KooWFtf3rfCDAfWwt6oLZYZbDfn9Vn7bv7g6QjjQxUUEFVBt",
service_id: "fb5f7126-e1ee-4ecf-81e7-20804cb7203b",
},
{
node: "12D3KooWJd3HaMJ1rpLY1kQvcjRPEvnDwcXrH8mJvk7ypcZXqXGE",
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,
service_id: greeting_topos[0].service_id,
greet: true,
},
{
node: greeting_topos[1].node,
service_id: greeting_topos[1].service_id,
greet: false,
},
];
let names: Array<string> = ["Jim", "John", "Jake"];
// let greeting_service =
async function main() {
// console.log("hello");
// setLogLevel('DEBUG');
await Fluence.start({ connectTo: krasnodar[2] });
console.log(
"created a fluence client %s with relay %s",
Fluence.getStatus().peerId,
Fluence.getStatus().relayPeerId
);
let echo_result = await echo(
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(
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(
names,
true,
echo_topos[0].node,
echo_topos[0].service_id,
greeting_topos[0].service_id
);
console.log("seq result : ", seq_result);
let par_result = await echo_greeting_par(
true,
echo_service,
greeting_services
);
console.log("par result : ", par_result);
par_result = await echo_greeting_par_improved(
echo_service,
greeting_services
);
console.log("par improved signature result : ", par_result);
return;
}
import { main } from './main';
main()
.then(() => process.exit(0))
.catch((error) => {
console.error(error);
process.exit(1);
});
.then(() => process.exit(0))
.catch((error) => {
console.error(error);
process.exit(1);
});

View File

@ -0,0 +1,128 @@
/*
* Copyright 2021 Fluence Labs Limited
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
import { setLogLevel, Fluence, FluencePeer } from '@fluencelabs/fluence';
import { krasnodar, Node } from '@fluencelabs/fluence-network-environment';
import {
echo,
greeting,
echo_greeting_seq,
echo_greeting_par,
echo_greeting_par_alternative,
echo_greeting_par_improved,
} from './_aqua/echo_greeter';
interface EchoResult {
echo: string;
}
interface NodeServicePair {
node: string;
service_id: string;
}
interface EchoService {
node: string;
service_id: string;
names: Array<string>;
}
interface GreetingService {
node: string;
service_id: string;
greet: boolean;
}
let greeting_topos: Array<NodeServicePair> = [
{
node: '12D3KooWFtf3rfCDAfWwt6oLZYZbDfn9Vn7bv7g6QjjQxUUEFVBt',
service_id: '5cf520ff-dd65-47d7-a51a-2bf08dfe2ede',
},
{
node: '12D3KooWJd3HaMJ1rpLY1kQvcjRPEvnDwcXrH8mJvk7ypcZXqXGE',
service_id: '5a03906b-3217-40a2-93fb-7e83be735408',
},
];
let echo_topos: Array<NodeServicePair> = [
{
node: '12D3KooWFtf3rfCDAfWwt6oLZYZbDfn9Vn7bv7g6QjjQxUUEFVBt',
service_id: 'fb5f7126-e1ee-4ecf-81e7-20804cb7203b',
},
{
node: '12D3KooWJd3HaMJ1rpLY1kQvcjRPEvnDwcXrH8mJvk7ypcZXqXGE',
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,
service_id: greeting_topos[0].service_id,
greet: true,
},
{
node: greeting_topos[1].node,
service_id: greeting_topos[1].service_id,
greet: false,
},
];
let names: Array<string> = ['Jim', 'John', 'Jake'];
export async function main() {
// console.log("hello");
// setLogLevel('DEBUG');
await Fluence.start({ connectTo: krasnodar[2] });
console.log(
'created a fluence client %s with relay %s',
Fluence.getStatus().peerId,
Fluence.getStatus().relayPeerId,
);
let echo_result = await echo(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(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(
names,
true,
echo_topos[0].node,
echo_topos[0].service_id,
greeting_topos[0].service_id,
);
console.log('seq result : ', seq_result);
let par_result = await echo_greeting_par(true, echo_service, greeting_services);
console.log('par result : ', par_result);
par_result = await echo_greeting_par_improved(echo_service, greeting_services);
console.log('par improved signature result : ', par_result);
await Fluence.stop();
}