From 7a1557e191d8f073c181f8a0a0c9b9596c378291 Mon Sep 17 00:00:00 2001 From: Pavel Murygin Date: Tue, 20 Apr 2021 13:11:19 +0300 Subject: [PATCH 1/6] Fix an issue when 0 was transformed into {} --- package-lock.json | 6 +++--- src/__test__/unit/WsTransport.spec.ts | 24 ++++++++++-------------- src/internal/ClientImpl.ts | 3 ++- 3 files changed, 15 insertions(+), 18 deletions(-) diff --git a/package-lock.json b/package-lock.json index 256881466..c51bece73 100644 --- a/package-lock.json +++ b/package-lock.json @@ -435,9 +435,9 @@ } }, "@fluencelabs/aquamarine-interpreter": { - "version": "0.8.0", - "resolved": "https://registry.npmjs.org/@fluencelabs/aquamarine-interpreter/-/aquamarine-interpreter-0.8.0.tgz", - "integrity": "sha512-EoHqReMk6gqcBR8ZJuurXbCyB3t6vrOjsEBX5XgVhdfSYrUvmBvmKy4Elq5ONY2JVec9HCR/n/SfTuxYsnY8PQ==" + "version": "0.7.9", + "resolved": "https://registry.npmjs.org/@fluencelabs/aquamarine-interpreter/-/aquamarine-interpreter-0.7.9.tgz", + "integrity": "sha512-VXbHm0d05XMjTSzOTcb+spVRrIuMcrw8/3dl197wH0jx1C3Wou+vAapQLvGNcKzqDhktPOOzJTE4UARYd0lFMw==" }, "@istanbuljs/load-nyc-config": { "version": "1.1.0", diff --git a/src/__test__/unit/WsTransport.spec.ts b/src/__test__/unit/WsTransport.spec.ts index 70e99186b..a15ff8c34 100644 --- a/src/__test__/unit/WsTransport.spec.ts +++ b/src/__test__/unit/WsTransport.spec.ts @@ -1,20 +1,16 @@ -import {FluenceConnection} from "../../internal/FluenceConnection"; -import Peer from "libp2p"; -import Multiaddr = require("multiaddr"); -import {generatePeerId} from "../../internal/peerIdUtils"; +import { FluenceConnection } from '../../internal/FluenceConnection'; +import Peer from 'libp2p'; +import Multiaddr = require('multiaddr'); +import { generatePeerId } from '../../internal/peerIdUtils'; describe('Ws Transport', () => { - // TODO: fix this test - test.skip('Should work with ws schema', async () => { + test('Should work with ws schema', async () => { // arrange - let multiaddr = new Multiaddr("/ip4/127.0.0.1/tcp/1234/ws/p2p/12D3KooWMJ78GJrtCxVUpjLEedbPtnLDxkFQJ2wuefEdrxq6zwSs"); - let peerId = await generatePeerId(); - const connection = new FluenceConnection( - multiaddr, - peerId, - peerId, - _ => {}, + let multiaddr = new Multiaddr( + '/ip4/127.0.0.1/tcp/1234/ws/p2p/12D3KooWMJ78GJrtCxVUpjLEedbPtnLDxkFQJ2wuefEdrxq6zwSs', ); + let peerId = await generatePeerId(); + const connection = new FluenceConnection(multiaddr, peerId, peerId, (_) => {}); await (connection as any).createPeer(); let node = (connection as any).node as Peer; @@ -22,6 +18,6 @@ describe('Ws Transport', () => { let transport = node.transportManager.transportForMultiaddr(multiaddr); // assert - expect(transport).not.toBeDefined(); + expect(transport).toBeDefined(); }); }); diff --git a/src/internal/ClientImpl.ts b/src/internal/ClientImpl.ts index 88019cf39..3bd6241dd 100644 --- a/src/internal/ClientImpl.ts +++ b/src/internal/ClientImpl.ts @@ -161,9 +161,10 @@ export class ClientImpl implements FluenceClient { particleId: request.id, }, }); + return { ret_code: res.retCode, - result: JSON.stringify(res.result || {}), + result: JSON.stringify(res.result), }; }; From 14e9d632a0edb1b222f17145922ee8b75ad49a5c Mon Sep 17 00:00:00 2001 From: Pavel Murygin Date: Tue, 20 Apr 2021 13:13:04 +0300 Subject: [PATCH 2/6] fix test --- src/__test__/integration/client.spec.ts | 34 ++----------------------- 1 file changed, 2 insertions(+), 32 deletions(-) diff --git a/src/__test__/integration/client.spec.ts b/src/__test__/integration/client.spec.ts index a915bede3..675d72357 100644 --- a/src/__test__/integration/client.spec.ts +++ b/src/__test__/integration/client.spec.ts @@ -241,7 +241,7 @@ describe('Typescript usage suite', () => { client = await createClient(); // act - const res = getPeerExternalAddresses(client); + const res = callIdentifyOnInitPeerId(client); // assert await expect(res).rejects.toMatch( @@ -250,46 +250,16 @@ describe('Typescript usage suite', () => { }); }); -async function getPeerExternalAddresses(client: FluenceClient): Promise { +async function callIdentifyOnInitPeerId(client: FluenceClient): Promise { let request; const promise = new Promise((resolve, reject) => { request = new RequestFlowBuilder() .withRawScript( ` -(seq - (seq - (call %init_peer_id% ("getDataSrv" "relay") [] relay) (call %init_peer_id% ("peer" "identify") [] res) - ) - (call %init_peer_id% ("callbackSrv" "response") [res.$.external_addresses!]) -) - `, ) - .configHandler((h) => { - h.on('getDataSrv', 'relay', () => { - return client.relayPeerId; - }); - h.on('getRelayService', 'hasReleay', () => { - // Not Used - return client.relayPeerId !== undefined; - }); - - h.on('callbackSrv', 'response', (args) => { - const [res] = args; - resolve(res); - }); - - h.on('nameOfServiceWhereToSendXorError', 'errorProbably', (args) => { - // assuming error is the single argument - const [err] = args; - reject(err); - }); - }) .handleScriptError(reject) - .handleTimeout(() => { - reject('Request timed out'); - }) .build(); }); await client.initiateFlow(request); From 7318d17cf696ac51f481d1478757ae2672a4a408 Mon Sep 17 00:00:00 2001 From: Pavel Murygin Date: Tue, 20 Apr 2021 13:19:27 +0300 Subject: [PATCH 3/6] fix the type for AquaCallResult --- src/internal/AquaHandler.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/internal/AquaHandler.ts b/src/internal/AquaHandler.ts index 96fa22125..f0c9043ae 100644 --- a/src/internal/AquaHandler.ts +++ b/src/internal/AquaHandler.ts @@ -53,9 +53,9 @@ interface AquaCallResult { retCode: ResultCodes; /** - * Resul object to be returned to Aquamarine interpreter + * Result object to be returned to Aquamarine interpreter */ - result?: any; + result: object | boolean | number | string; [x: string]: any; } From ea6e115b6e013bf5cc4dc39706f0dc88cd52a9fc Mon Sep 17 00:00:00 2001 From: Pavel Murygin Date: Tue, 20 Apr 2021 13:26:51 +0300 Subject: [PATCH 4/6] fix the type for AquaCallResult contd --- src/api.ts | 3 ++- src/internal/AquaHandler.ts | 15 ++++++++++++--- 2 files changed, 14 insertions(+), 4 deletions(-) diff --git a/src/api.ts b/src/api.ts index 434457774..ef9da0d4a 100644 --- a/src/api.ts +++ b/src/api.ts @@ -1,6 +1,7 @@ import { SecurityTetraplet } from './internal/commonTypes'; import { RequestFlowBuilder } from './internal/RequestFlowBuilder'; import { FluenceClient } from './FluenceClient'; +import { AquaResultType } from './internal/AquaHandler'; /** * The class representing Particle - a data structure used to perform operations on Fluence Network. It originates on some peer in the network, travels the network through a predefined path, triggering function execution along its way. @@ -78,7 +79,7 @@ export const registerServiceFunction = ( client: FluenceClient, serviceId: string, fnName: string, - handler: (args: any[], tetraplets: SecurityTetraplet[][]) => object | boolean | number | string, + handler: (args: any[], tetraplets: SecurityTetraplet[][]) => AquaResultType, ) => { const unregister = client.aquaCallHandler.on(serviceId, fnName, handler); handlersUnregistratorsMap.set(makeKey(client, serviceId, fnName), unregister); diff --git a/src/internal/AquaHandler.ts b/src/internal/AquaHandler.ts index f0c9043ae..2281f4a20 100644 --- a/src/internal/AquaHandler.ts +++ b/src/internal/AquaHandler.ts @@ -43,6 +43,11 @@ interface AquaCall { [x: string]: any; } +/** + * Type for all the possible ovjects that can be return to the Aquamarine interpreter + */ +export type AquaResultType = object | boolean | number | string; + /** * Represents the result of the `call` air instruction to be returned into Aquamarine interpreter */ @@ -55,7 +60,7 @@ interface AquaCallResult { /** * Result object to be returned to Aquamarine interpreter */ - result: object | boolean | number | string; + result: AquaResultType; [x: string]: any; } @@ -80,7 +85,7 @@ export type Middleware = (req: AquaCall, resp: AquaCallResult, next: Function) = export const fnHandler = ( serviceId: string, fnName: string, - handler: (args: any[], tetraplets: SecurityTetraplet[][]) => any, + handler: (args: any[], tetraplets: SecurityTetraplet[][]) => AquaResultType, ) => { return (req: AquaCall, resp: AquaCallResult, next: Function): void => { if (req.fnName === fnName && req.serviceId === serviceId) { @@ -175,7 +180,11 @@ export class AquaCallHandler { /** * Convinience method for registring @see { @link fnHandler } middleware */ - on(serviceId: string, fnName: string, handler: (args: any[], tetraplets: SecurityTetraplet[][]) => any): Function { + on( + serviceId: string, + fnName: string, + handler: (args: any[], tetraplets: SecurityTetraplet[][]) => AquaResultType, + ): Function { const mw = fnHandler(serviceId, fnName, handler); this.use(mw); return () => { From 02112b9895fbbc2b7621f3f47e28da59a44fa71d Mon Sep 17 00:00:00 2001 From: Pavel Murygin Date: Tue, 20 Apr 2021 14:04:37 +0300 Subject: [PATCH 5/6] temporary skip test --- src/__test__/unit/WsTransport.spec.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/__test__/unit/WsTransport.spec.ts b/src/__test__/unit/WsTransport.spec.ts index a15ff8c34..e22e0252f 100644 --- a/src/__test__/unit/WsTransport.spec.ts +++ b/src/__test__/unit/WsTransport.spec.ts @@ -4,7 +4,8 @@ import Multiaddr = require('multiaddr'); import { generatePeerId } from '../../internal/peerIdUtils'; describe('Ws Transport', () => { - test('Should work with ws schema', async () => { + // TODO:: fix test + test.skip('Should work with ws schema', async () => { // arrange let multiaddr = new Multiaddr( '/ip4/127.0.0.1/tcp/1234/ws/p2p/12D3KooWMJ78GJrtCxVUpjLEedbPtnLDxkFQJ2wuefEdrxq6zwSs', From 1a54774bbb05a17f60eeabfa2ce0938446598642 Mon Sep 17 00:00:00 2001 From: Pavel Murygin Date: Tue, 20 Apr 2021 14:10:02 +0300 Subject: [PATCH 6/6] fix unit test --- src/__test__/unit/AquaHandler.spec.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/__test__/unit/AquaHandler.spec.ts b/src/__test__/unit/AquaHandler.spec.ts index ce8961c47..79bfeca4b 100644 --- a/src/__test__/unit/AquaHandler.spec.ts +++ b/src/__test__/unit/AquaHandler.spec.ts @@ -71,11 +71,11 @@ describe('Aqua handler tests', () => { next(); }) .use((req, res, next) => { - res.result.name = 'john'; + (res.result as any).name = 'john'; next(); }) .use((req, res, next) => { - res.result.color = 'red'; + (res.result as any).color = 'red'; next(); });