Fix zero to empty object conversion error (#40)

This commit is contained in:
Pavel 2021-04-20 14:19:08 +03:00 committed by GitHub
parent f14baeb618
commit 8ddccd3c60
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
7 changed files with 34 additions and 56 deletions

6
package-lock.json generated
View File

@ -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",

View File

@ -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<string[]> {
async function callIdentifyOnInitPeerId(client: FluenceClient): Promise<string[]> {
let request;
const promise = new Promise<string[]>((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);

View File

@ -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();
});

View File

@ -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();
});
});

View File

@ -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);

View File

@ -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 () => {

View File

@ -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),
};
};