diff --git a/package-lock.json b/package-lock.json index 25688146..c51bece7 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__/integration/client.spec.ts b/src/__test__/integration/client.spec.ts index a915bede..675d7235 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); diff --git a/src/__test__/unit/AquaHandler.spec.ts b/src/__test__/unit/AquaHandler.spec.ts index ce8961c4..79bfeca4 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(); }); diff --git a/src/__test__/unit/WsTransport.spec.ts b/src/__test__/unit/WsTransport.spec.ts index 70e99186..e22e0252 100644 --- a/src/__test__/unit/WsTransport.spec.ts +++ b/src/__test__/unit/WsTransport.spec.ts @@ -1,20 +1,17 @@ -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 + // 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"); - 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 +19,6 @@ describe('Ws Transport', () => { let transport = node.transportManager.transportForMultiaddr(multiaddr); // assert - expect(transport).not.toBeDefined(); + expect(transport).toBeDefined(); }); }); diff --git a/src/api.ts b/src/api.ts index 43445777..ef9da0d4 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 96fa2212..2281f4a2 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 */ @@ -53,9 +58,9 @@ interface AquaCallResult { retCode: ResultCodes; /** - * Resul object to be returned to Aquamarine interpreter + * Result object to be returned to Aquamarine interpreter */ - result?: any; + 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 () => { diff --git a/src/internal/ClientImpl.ts b/src/internal/ClientImpl.ts index 88019cf3..3bd6241d 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), }; };