Skip to content
This repository was archived by the owner on Jul 10, 2025. It is now read-only.
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 4 additions & 4 deletions package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@
"author": "Fluence Labs",
"license": "Apache-2.0",
"dependencies": {
"@fluencelabs/aquamarine-stepper": "0.4.4",
"@fluencelabs/aquamarine-interpreter": "^0.7.0",
"async": "3.2.0",
"base64-js": "1.3.1",
"bs58": "4.0.1",
Expand Down
10 changes: 8 additions & 2 deletions src/__test__/integration/builtins.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,10 @@ import {
} from '../../internal/builtins';
import { ModuleConfig } from '../../internal/moduleConfig';
import { createConnectedClient } from '../util';
import {checkConnection} from "../../api";
import { checkConnection } from '../../api';
import log from 'loglevel';
import { generatePeerId } from '../..';
import { FluenceClientImpl } from '../../internal/FluenceClientImpl';

const dev2multiaddr = '/dns4/dev.fluence.dev/tcp/19003/wss/p2p/12D3KooWBUJifCTgaxAUrcM9JysqCcS4CS8tiYH5hExbdWCAoNwb';
const dev3multiaddr = '/dns4/dev.fluence.dev/tcp/19004/wss/p2p/12D3KooWJbJFaZ3k5sNd8DjQgg3aERoKtBAnirEvPV8yp76kEXHB';
Expand Down Expand Up @@ -45,7 +48,10 @@ describe('Builtins usage suite', () => {
});

it('check_connection', async function () {
const client = await createConnectedClient(dev2multiaddr);
const peerId = await generatePeerId();
const client = new FluenceClientImpl(peerId);
await client.local();
await client.connect(dev2multiaddr);

let isConnected = await checkConnection(client);

Expand Down
10 changes: 5 additions & 5 deletions src/__test__/integration/client.spec.ts
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
import {encode} from 'bs58';
import {generatePeerId, peerIdToSeed, seedToPeerId} from '../../internal/peerIdUtils';
import {FluenceClientImpl} from '../../internal/FluenceClientImpl';
import {createConnectedClient} from '../util';
import { encode } from 'bs58';
import { generatePeerId, peerIdToSeed, seedToPeerId } from '../../internal/peerIdUtils';
import { FluenceClientImpl } from '../../internal/FluenceClientImpl';
import { createConnectedClient } from '../util';
import log from 'loglevel';
import {createClient} from '../../api';
import { createClient } from '../../api';
import Multiaddr from 'multiaddr';

const devNodeAddress = '/dns4/dev.fluence.dev/tcp/19001/wss/p2p/12D3KooWEXNUbCXooUwHrHBbrmjsrpHXoEphPwbjQXEGyzbqKnE9';
Expand Down
19 changes: 18 additions & 1 deletion src/__test__/unit/ast.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,24 @@ describe('== AST parsing suite', () => {
Call: {
peer_part: { PeerPk: { Variable: 'node' } },
function_part: { ServiceIdWithFuncName: [{ Literal: 'service' }, { Literal: 'function' }] },
args: [{ Variable: '1' }, { Variable: '2' }, { Variable: '3' }, { Variable: 'arg' }],
args: [
{
Number: {
Int: 1,
},
},
{
Number: {
Int: 2,
},
},
{
Number: {
Int: 3,
},
},
{ Variable: 'arg' },
],
output: { Scalar: 'output' },
},
});
Expand Down
10 changes: 4 additions & 6 deletions src/__test__/util.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
import {generatePeerId} from '..';
import {FluenceClientImpl} from '../internal/FluenceClientImpl';
import { generatePeerId } from '..';
import { createClient } from '../api';
import { FluenceClientImpl } from '../internal/FluenceClientImpl';

export const createLocalClient = async () => {
const peerId = await generatePeerId();
Expand All @@ -9,8 +10,5 @@ export const createLocalClient = async () => {
};

export const createConnectedClient = async (node: string) => {
const peerId = await generatePeerId();
const client = new FluenceClientImpl(peerId);
await client.connect(node);
return client;
return (await createClient(node)) as FluenceClientImpl;
};
21 changes: 10 additions & 11 deletions src/api.ts
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ import Multiaddr from 'multiaddr';
import PeerId, { isPeerId } from 'peer-id';
import { generatePeerId, seedToPeerId } from './internal/peerIdUtils';
import { FluenceClientImpl } from './internal/FluenceClientImpl';
import log from "loglevel";
import log from 'loglevel';

type Node = {
peerId: string;
Expand Down Expand Up @@ -45,8 +45,8 @@ export const createClient = async (
}

await client.connect(theAddress);
if (!await checkConnection(client)) {
throw new Error("Connection check failed. Check if the node is working or try to connect to another node")
if (!(await checkConnection(client))) {
throw new Error('Connection check failed. Check if the node is working or try to connect to another node');
}
}

Expand Down Expand Up @@ -158,8 +158,8 @@ export const sendParticleAsFetch = async <T>(

export const checkConnection = async (client: FluenceClient): Promise<boolean> => {
let msg = Math.random().toString(36).substring(7);
let callbackFn = "checkConnection"
let callbackService = "_callback"
let callbackFn = 'checkConnection';
let callbackService = '_callback';

const particle = new Particle(
`
Expand All @@ -171,23 +171,22 @@ export const checkConnection = async (client: FluenceClient): Promise<boolean> =
{
__relay: client.relayPeerId,
myPeerId: client.selfPeerId,
msg
msg,
},
3000
);

if (!client.isConnected) {
return false;
}

try {
let result = await sendParticleAsFetch<string[][]>(client, particle, callbackFn, callbackService)
let result = await sendParticleAsFetch<string[][]>(client, particle, callbackFn, callbackService);
if (result[0][0] != msg) {
log.warn("unexpected behavior. 'identity' must return arguments the passed arguments.")
log.warn("unexpected behavior. 'identity' must return arguments the passed arguments.");
}
return true;
} catch (e) {
log.error("Error on establishing connection: ", e)
log.error('Error on establishing connection: ', e);
return false;
}
}
};
23 changes: 13 additions & 10 deletions src/internal/stepper.ts
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ import { ParticleHandler, CallServiceResult, SecurityTetraplet } from './commonT

import PeerId from 'peer-id';
import log from 'loglevel';
import wasmBs64 from '@fluencelabs/aquamarine-stepper';
import wasmBs64 from '@fluencelabs/aquamarine-interpreter';

export type InterpreterInvoke = (
init_user_id: string,
Expand All @@ -33,8 +33,8 @@ type ImportObject = {
'./aquamarine_client_bg.js': {
// fn call_service_impl(service_id: String, fn_name: String, args: String, security_tetraplets: String) -> String;
// prettier-ignore
__wbg_callserviceimpl_5e179a02949d2e6b: (arg0: any, arg1: any, arg2: any, arg3: any, arg4: any, arg5: any, arg6: any, arg7: any, arg8: any, ) => void;
__wbg_getcurrentpeeridimpl_a7ef0866adbc56ef: (arg0: any) => void;
__wbg_callserviceimpl_d9f9208b7e581e24: (arg0: any, arg1: any, arg2: any, arg3: any, arg4: any, arg5: any, arg6: any, arg7: any, arg8: any, ) => void;
__wbg_getcurrentpeeridimpl_c6a63062490312cd: (arg0: any) => void;
__wbindgen_throw: (arg: any) => void;
};
host: LogImport;
Expand Down Expand Up @@ -130,21 +130,24 @@ const theParticleHandler = (
args: string,
tetraplets: string,
): CallServiceResult => {
let argsObject;
let tetrapletsObject: SecurityTetraplet[][];
try {
let argsObject = JSON.parse(args);
argsObject = JSON.parse(args);
if (!Array.isArray(argsObject)) {
throw new Error('args is not an array');
}

let tetrapletsObject: SecurityTetraplet[][] = JSON.parse(tetraplets);
return callback(service_id, fn_name, argsObject, tetrapletsObject);
tetrapletsObject = JSON.parse(tetraplets);
} catch (err) {
console.error('Cannot parse arguments: ' + JSON.stringify(err));
return {
result: JSON.stringify('Cannot parse arguments: ' + JSON.stringify(err)),
ret_code: 1,
};
}

return callback(service_id, fn_name, argsObject, tetrapletsObject);
};

/// Returns import object that describes host functions called by AIR interpreter
Expand All @@ -154,7 +157,7 @@ function newImportObject(particleHandler: ParticleHandler, cfg: HostImportsConfi
// If so, an error with a new name will be occurred after wasm initialization.
'./aquamarine_client_bg.js': {
// prettier-ignore
__wbg_callserviceimpl_5e179a02949d2e6b: (arg0: any, arg1: any, arg2: any, arg3: any, arg4: any, arg5: any, arg6: any, arg7: any, arg8: any) => {
__wbg_callserviceimpl_d9f9208b7e581e24: (arg0: any, arg1: any, arg2: any, arg3: any, arg4: any, arg5: any, arg6: any, arg7: any, arg8: any) => {
let wasm = cfg.exports;
try {
let serviceId = getStringFromWasm0(wasm, arg1, arg2);
Expand All @@ -178,7 +181,7 @@ function newImportObject(particleHandler: ParticleHandler, cfg: HostImportsConfi
free(wasm, arg7, arg8);
}
},
__wbg_getcurrentpeeridimpl_a7ef0866adbc56ef: (arg0: any) => {
__wbg_getcurrentpeeridimpl_c6a63062490312cd: (arg0: any) => {
let peerIdStr = peerId.toB58String();
let wasm = cfg.exports;
return_current_peer_id(wasm, peerIdStr, arg0);
Expand All @@ -195,8 +198,8 @@ function newLogImport(cfg: HostImportsConfig): ImportObject {
return {
host: log_import(cfg),
'./aquamarine_client_bg.js': {
__wbg_callserviceimpl_5e179a02949d2e6b: (_) => {},
__wbg_getcurrentpeeridimpl_a7ef0866adbc56ef: (_) => {},
__wbg_callserviceimpl_d9f9208b7e581e24: (_) => {},
__wbg_getcurrentpeeridimpl_c6a63062490312cd: (_) => {},
__wbindgen_throw: (_) => {},
},
};
Expand Down