From ccf8379dd49da22f39863c75ddba00312442049e Mon Sep 17 00:00:00 2001 From: Pavel Murygin Date: Fri, 9 Sep 2022 17:14:39 +0300 Subject: [PATCH 1/9] Bump versions --- packages/fluence-js/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/fluence-js/package.json b/packages/fluence-js/package.json index 38d4f93f7..e71e1b12b 100644 --- a/packages/fluence-js/package.json +++ b/packages/fluence-js/package.json @@ -1,6 +1,6 @@ { "name": "@fluencelabs/fluence", - "version": "0.24.1", + "version": "0.24.2", "description": "TypeScript implementation of Fluence Peer", "main": "./dist/index.js", "typings": "./dist/index.d.ts", From 171301727fe5d8760c27cc50d13902db5e6da44b Mon Sep 17 00:00:00 2001 From: Pavel Murygin Date: Fri, 9 Sep 2022 17:36:51 +0300 Subject: [PATCH 2/9] Update marine and avm --- packages/fluence-js/package.json | 4 ++-- pnpm-lock.yaml | 16 ++++++++-------- 2 files changed, 10 insertions(+), 10 deletions(-) diff --git a/packages/fluence-js/package.json b/packages/fluence-js/package.json index e71e1b12b..0c757e112 100644 --- a/packages/fluence-js/package.json +++ b/packages/fluence-js/package.json @@ -25,11 +25,11 @@ "copy-marine": "dist/tools/copyMarine.js" }, "dependencies": { - "@fluencelabs/avm": "0.27.8", + "@fluencelabs/avm": "0.28.8", "@fluencelabs/connection": "workspace:0.2.0", "@fluencelabs/interfaces": "workspace:0.1.0", "@fluencelabs/keypair": "workspace:0.2.0", - "@fluencelabs/marine-js": "0.3.10", + "@fluencelabs/marine-js": "0.3.16", "async": "3.2.3", "base64-js": "^1.5.1", "browser-or-node": "^2.0.0", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 8e48b641b..bb8e3a4c5 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -58,12 +58,12 @@ importers: specifiers: '@fluencelabs/aqua': ^0.7.2-307 '@fluencelabs/aqua-lib': ^0.5.1 - '@fluencelabs/avm': 0.27.8 + '@fluencelabs/avm': 0.28.8 '@fluencelabs/connection': workspace:0.2.0 '@fluencelabs/fluence-network-environment': ^1.0.13 '@fluencelabs/interfaces': workspace:0.1.0 '@fluencelabs/keypair': workspace:0.2.0 - '@fluencelabs/marine-js': 0.3.10 + '@fluencelabs/marine-js': 0.3.16 '@types/bs58': ^4.0.1 '@types/jest': ^27.5.1 '@types/platform': ^1.3.4 @@ -89,11 +89,11 @@ importers: typescript: ^4.6.4 uuid: 8.3.2 dependencies: - '@fluencelabs/avm': 0.27.8 + '@fluencelabs/avm': 0.28.8 '@fluencelabs/connection': link:../fluence-connection '@fluencelabs/interfaces': link:../fluence-interfaces '@fluencelabs/keypair': link:../fluence-keypair - '@fluencelabs/marine-js': 0.3.10_rl5xm3oiydas7snsul2pa47p2m + '@fluencelabs/marine-js': 0.3.16_rl5xm3oiydas7snsul2pa47p2m async: 3.2.3 base64-js: 1.5.1 browser-or-node: 2.0.0 @@ -505,8 +505,8 @@ packages: resolution: {integrity: sha512-BD7pr3ZRHLIb9XVt08i+/fX2+B4l5zln6j+5mEIJmDBQETv6Gz7NdsgKn0jUQueBcztR+mw5w7byM66yf6xEnA==} dev: true - /@fluencelabs/avm/0.27.8: - resolution: {integrity: sha512-8d0iGs7dtYC/pneMkSWadgEWsKyGQOsi+BFtR6Pxh73tkAAEhiCydbgu1CTDNffV7eO2MztlGEYMib2x38M0bw==} + /@fluencelabs/avm/0.28.8: + resolution: {integrity: sha512-s3s5Y+qRmXXXUFYawXlWwK4CRtfuQWAi2UkyqzTieBS2hS/V6IZ+OZkV3XvBpF2CNWO7lH2gGzo4anhlg8KMIA==} dev: false /@fluencelabs/fluence-network-environment/1.0.13: @@ -571,8 +571,8 @@ packages: - typescript dev: true - /@fluencelabs/marine-js/0.3.10_rl5xm3oiydas7snsul2pa47p2m: - resolution: {integrity: sha512-1eVDMQjC5si6+4EcGu684dhSnfTFxBxARaQsL0un4sHHBqXp9qD5rmuyTYyQ+GHEEqez3cnen9xD09SptqqvoQ==} + /@fluencelabs/marine-js/0.3.16_rl5xm3oiydas7snsul2pa47p2m: + resolution: {integrity: sha512-LJ1rj530L0qDX0fGF6LO14bGY5pycN6KVqpC01snIqIP550vslEj5DzMewzKcnll4jObtTX6n5cQtn2kq/NvrA==} dependencies: '@wasmer/wasi': 0.12.0 '@wasmer/wasmfs': 0.12.0 From f6cbefaf2c0c7f5b2d6f1370096ea3471345343d Mon Sep 17 00:00:00 2001 From: Pavel Murygin Date: Sat, 10 Sep 2022 00:17:26 +0300 Subject: [PATCH 3/9] Utilize new avm interface --- .../fluence-js/src/internal/FluencePeer.ts | 151 +++++++----------- packages/fluence-js/src/internal/avm.ts | 65 -------- 2 files changed, 59 insertions(+), 157 deletions(-) delete mode 100644 packages/fluence-js/src/internal/avm.ts diff --git a/packages/fluence-js/src/internal/FluencePeer.ts b/packages/fluence-js/src/internal/FluencePeer.ts index 8ab0ed56a..d779fd5c8 100644 --- a/packages/fluence-js/src/internal/FluencePeer.ts +++ b/packages/fluence-js/src/internal/FluencePeer.ts @@ -18,7 +18,13 @@ import 'buffer'; import { RelayConnection } from '@fluencelabs/connection'; import { FluenceConnection } from '@fluencelabs/interfaces'; import { KeyPair } from '@fluencelabs/keypair'; -import { FluenceAppService, loadDefaults, loadWasmFromFileSystem, loadWasmFromServer } from '@fluencelabs/marine-js'; +import { + FluenceAppService, + IFluenceAppService, + loadDefaults, + loadWasmFromFileSystem, + loadWasmFromServer, +} from '@fluencelabs/marine-js'; import type { MultiaddrInput } from 'multiaddr'; import { CallServiceData, CallServiceResult, GenericCallServiceHandler, ResultCodes } from './commonTypes'; import { PeerIdB58 } from './commonTypes'; @@ -31,9 +37,8 @@ import { defaultSigGuard, Sig } from './builtins/Sig'; import { registerSig } from './_aqua/services'; import Buffer from './Buffer'; -import { AVM, AvmRunner } from './avm'; import { isBrowser, isNode } from 'browser-or-node'; -import { InterpreterResult, LogLevel } from '@fluencelabs/avm'; +import { deserializeAvmResult, InterpreterResult, LogLevel, serializeAvmArgs } from '@fluencelabs/avm'; /** * Node of the Fluence network specified as a pair of node's multiaddr and it's peer id @@ -100,12 +105,6 @@ export interface PeerConfig { */ defaultTtlMs?: number; - /** - * @deprecated. AVM run through marine-js infrastructure. - * @see marineJS option to configure AVM - */ - avmRunner?: AvmRunner; - /** * This option allows to specify the location of various dependencies needed for marine-js. * Each key specifies the location of the corresponding dependency. @@ -306,9 +305,7 @@ export class FluencePeer { this._keyPair = undefined; // This will set peer to non-initialized state and stop particle processing this._stopParticleProcessing(); await this.disconnect(); - await this._avmRunner?.terminate(); await this._fluenceAppService?.terminate(); - this._avmRunner = undefined; this._fluenceAppService = undefined; this._classServices = undefined; @@ -331,12 +328,8 @@ export class FluencePeer { new Error("Can't use avm: peer is not initialized"); } - const args = JSON.stringify([air]); - const rawRes = await this._fluenceAppService!.callService('avm', 'ast', args, undefined); - let res; + const res = (await this._fluenceAppService!.callService('avm', 'ast', [air], undefined)) as string; try { - res = JSON.parse(rawRes); - res = res.result as string; if (res.startsWith('error')) { return { success: false, @@ -349,7 +342,7 @@ export class FluencePeer { }; } } catch (err) { - throw new Error('Failed to call avm. Raw result: ' + rawRes + '. Error: ' + err); + throw new Error('Failed to call avm. Result: ' + res + '. Error: ' + err); } }, createNewParticle: (script: string, ttl: number = this._defaultTTL) => { @@ -454,8 +447,6 @@ export class FluencePeer { undefined, marineLogLevelToEnvs(this._marineLogLevel), ); - this._avmRunner = config?.avmRunner || new AVM(this._fluenceAppService); - await this._avmRunner.init(config?.avmLogLevel || 'off'); registerDefaultServices(this); @@ -520,11 +511,6 @@ export class FluencePeer { private _defaultTTL: number = DEFAULT_TTL; private _keyPair: KeyPair | undefined; private _connection?: FluenceConnection; - - /** - * @deprecated. AVM run through marine-js infrastructure. This field is needed for backward compatibility with the previous API - */ - private _avmRunner?: AvmRunner; private _fluenceAppService?: FluenceAppService; private _timeouts: Array = []; private _particleQueues = new Map>(); @@ -576,7 +562,7 @@ export class FluencePeer { () => { item.onStageChange({ stage: 'sent' }); }, - (e) => { + (e: any) => { log.error(e); }, ); @@ -605,7 +591,7 @@ export class FluencePeer { concatMap(async (item) => { const status = this.getStatus(); - if (!status.isInitialized || this._avmRunner === undefined) { + if (!status.isInitialized || this._fluenceAppService === undefined) { // If `.stop()` was called return null to stop particle processing immediately return null; } @@ -615,14 +601,37 @@ export class FluencePeer { // MUST happen sequentially (in a critical section). // Otherwise the race between runner might occur corrupting the prevData - const result = await runAvmRunner(status.peerId, this._avmRunner, item.particle, prevData); - const newData = Buffer.from(result.data); - prevData = newData; + const args = serializeAvmArgs( + { + initPeerId: item.particle.initPeerId, + currentPeerId: status.peerId, + timestamp: item.particle.timestamp, + ttl: item.particle.ttl, + }, + item.particle.script, + prevData, + item.particle.data, + item.particle.callResults, + ); + + item.particle.logTo('debug', 'Sending particle to interpreter'); + log.debug('prevData: ', dataToString(prevData)); + let avmCallResult: InterpreterResult | Error; + try { + const res = await this._fluenceAppService.callService('avm', 'invoke', args, undefined); + avmCallResult = deserializeAvmResult(res); + } catch (e) { + avmCallResult = e instanceof Error ? e : new Error((e as any).toString()); + } + + if (!(avmCallResult instanceof Error) && avmCallResult.retCode === 0) { + const newData = Buffer.from(avmCallResult.data); + prevData = newData; + } return { ...item, - result: result, - newData: newData, + result: avmCallResult, }; }), ) @@ -633,11 +642,23 @@ export class FluencePeer { } // Do not continue if there was an error in particle interpretation - if (!isInterpretationSuccessful(item.result)) { + if (item.result instanceof Error) { + log.error('Interpreter failed: ', jsonify(item.result.message)); + item.onStageChange({ stage: 'interpreterError', errorMessage: item.result.message }); + return; + } + + const toLog = { ...item.result, data: dataToString(item.result.data) }; + if (item.result.retCode !== 0) { + log.error('Interpreter failed: ', jsonify(toLog)); item.onStageChange({ stage: 'interpreterError', errorMessage: item.result.errorMessage }); return; + } else { + log.debug('Interpreter result: ', jsonify(toLog)); } + const newData = Buffer.from(item.result.data); + setTimeout(() => { item.onStageChange({ stage: 'interpreted' }); }, 0); @@ -645,7 +666,7 @@ export class FluencePeer { // send particle further if requested if (item.result.nextPeerPks.length > 0) { const newParticle = item.particle.clone(); - newParticle.data = item.newData; + newParticle.data = newData; this._outgoingParticles.next({ ...item, particle: newParticle, @@ -700,31 +721,12 @@ export class FluencePeer { const particleId = req.particleContext.particleId; if (this._fluenceAppService && this._marineServices.has(req.serviceId)) { - const args = JSON.stringify(req.args); - const rawResult = await this._fluenceAppService.callService(req.serviceId, req.fnName, args, undefined); - - try { - const result = JSON.parse(rawResult); - if (typeof result.error === 'string' && result.error.length > 0) { - return { - retCode: ResultCodes.error, - result: result.error, - }; - } + const result = await this._fluenceAppService.callService(req.serviceId, req.fnName, req.args, undefined); - if (result.result === undefined) { - throw new Error( - `Call to marine-js returned no error and empty result. Original request: ${jsonify(req)}`, - ); - } - - return { - retCode: ResultCodes.success, - result: result.result, - }; - } catch (e) { - throw new Error(`Call to marine-js. Result parsing error: ${e}, original text: ${rawResult}`); - } + return { + retCode: ResultCodes.success, + result: result, + }; } const key = serviceFnKey(req.serviceId, req.fnName); @@ -805,10 +807,6 @@ async function configToConnection( return res; } -function isInterpretationSuccessful(result: InterpreterResult) { - return result.retCode === 0; -} - function serviceFnKey(serviceId: string, fnName: string) { return `${serviceId}/${fnName}`; } @@ -821,37 +819,6 @@ function registerDefaultServices(peer: FluencePeer) { }); } -async function runAvmRunner( - currentPeerId: PeerIdB58, - runner: AvmRunner, - particle: Particle, - prevData: Uint8Array, -): Promise { - particle.logTo('debug', 'Sending particle to interpreter'); - log.debug('prevData: ', dataToString(prevData)); - const interpreterResult = await runner.run( - particle.script, - prevData, - particle.data, - { - initPeerId: particle.initPeerId, - currentPeerId: currentPeerId, - timestamp: particle.timestamp, - ttl: particle.ttl, - }, - particle.callResults, - ); - - const toLog = { ...interpreterResult, data: dataToString(interpreterResult.data) }; - - if (isInterpretationSuccessful(interpreterResult)) { - log.debug('Interpreter result: ', jsonify(toLog)); - } else { - log.error('Interpreter failed: ', jsonify(toLog)); - } - return interpreterResult; -} - function filterExpiredParticles(onParticleExpiration: (item: ParticleQueueItem) => void) { return pipe( tap((item: ParticleQueueItem) => { diff --git a/packages/fluence-js/src/internal/avm.ts b/packages/fluence-js/src/internal/avm.ts deleted file mode 100644 index 5118dbc4e..000000000 --- a/packages/fluence-js/src/internal/avm.ts +++ /dev/null @@ -1,65 +0,0 @@ -/* - * Copyright 2022 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 { callAvm, CallResultsArray, InterpreterResult, LogLevel, RunParameters } from '@fluencelabs/avm'; -import { FluenceAppService } from '@fluencelabs/marine-js'; - -/** - * @deprecated. AVM run through marine-js infrastructure. This type is needed for backward compatibility with the previous API - */ -export type AvmRunner = { - init: (logLevel: LogLevel) => Promise; - terminate: () => Promise; - run: ( - air: string, - prevData: Uint8Array, - data: Uint8Array, - params: RunParameters, - callResults: CallResultsArray, - ) => Promise; -}; - -/** - * @deprecated. AVM run through marine-js infrastructure. This type is needed for backward compatibility with the previous API - */ -export class AVM implements AvmRunner { - private _fluenceAppService: FluenceAppService; - - constructor(fluenceAppService: FluenceAppService) { - this._fluenceAppService = fluenceAppService; - } - - async init(logLevel: LogLevel): Promise {} - - async terminate(): Promise {} - - async run( - air: string, - prevData: Uint8Array, - data: Uint8Array, - runParams: RunParameters, - callResults: CallResultsArray, - ): Promise { - return callAvm( - (args) => this._fluenceAppService.callService('avm', 'invoke', args, undefined), - runParams, - air, - prevData, - data, - callResults, - ); - } -} From a4e1c1acc9327894eefd7892d03f9cf5ec7fd5cb Mon Sep 17 00:00:00 2001 From: Pavel Murygin Date: Mon, 12 Sep 2022 01:47:38 +0300 Subject: [PATCH 4/9] use proper type for call service result --- packages/fluence-js/src/internal/FluencePeer.ts | 4 ++-- packages/fluence-js/src/internal/commonTypes.ts | 6 +++++- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/packages/fluence-js/src/internal/FluencePeer.ts b/packages/fluence-js/src/internal/FluencePeer.ts index d779fd5c8..85bed119b 100644 --- a/packages/fluence-js/src/internal/FluencePeer.ts +++ b/packages/fluence-js/src/internal/FluencePeer.ts @@ -38,7 +38,7 @@ import { registerSig } from './_aqua/services'; import Buffer from './Buffer'; import { isBrowser, isNode } from 'browser-or-node'; -import { deserializeAvmResult, InterpreterResult, LogLevel, serializeAvmArgs } from '@fluencelabs/avm'; +import { deserializeAvmResult, InterpreterResult, JSONValue, LogLevel, serializeAvmArgs } from '@fluencelabs/avm'; /** * Node of the Fluence network specified as a pair of node's multiaddr and it's peer id @@ -725,7 +725,7 @@ export class FluencePeer { return { retCode: ResultCodes.success, - result: result, + result: result as JSONValue, }; } diff --git a/packages/fluence-js/src/internal/commonTypes.ts b/packages/fluence-js/src/internal/commonTypes.ts index 0810d8500..7857b0325 100644 --- a/packages/fluence-js/src/internal/commonTypes.ts +++ b/packages/fluence-js/src/internal/commonTypes.ts @@ -125,7 +125,7 @@ export interface CallServiceData { /** * Type for all the possible objects that can be returned to the AVM */ -export type CallServiceResultType = object | boolean | number | string | null; +export type CallServiceResultType = JSONValue; /** * Generic call service handler @@ -146,3 +146,7 @@ export interface CallServiceResult { */ result: CallServiceResultType; } + +export type JSONValue = string | number | boolean | null | { [x: string]: JSONValue } | Array; +export type JSONArray = Array; +export type JSONObject = { [x: string]: JSONValue }; From 20cfea461aef1bb9a0eb74843b4451aaec4f8e6a Mon Sep 17 00:00:00 2001 From: Pavel Murygin Date: Mon, 12 Sep 2022 01:50:48 +0300 Subject: [PATCH 5/9] Should be a breaking change --- packages/fluence-js/package.json | 2 +- packages/fluence-js/src/internal/FluencePeer.ts | 8 +------- 2 files changed, 2 insertions(+), 8 deletions(-) diff --git a/packages/fluence-js/package.json b/packages/fluence-js/package.json index 0c757e112..025f924ed 100644 --- a/packages/fluence-js/package.json +++ b/packages/fluence-js/package.json @@ -1,6 +1,6 @@ { "name": "@fluencelabs/fluence", - "version": "0.24.2", + "version": "0.25.0", "description": "TypeScript implementation of Fluence Peer", "main": "./dist/index.js", "typings": "./dist/index.d.ts", diff --git a/packages/fluence-js/src/internal/FluencePeer.ts b/packages/fluence-js/src/internal/FluencePeer.ts index 85bed119b..18792365f 100644 --- a/packages/fluence-js/src/internal/FluencePeer.ts +++ b/packages/fluence-js/src/internal/FluencePeer.ts @@ -18,13 +18,7 @@ import 'buffer'; import { RelayConnection } from '@fluencelabs/connection'; import { FluenceConnection } from '@fluencelabs/interfaces'; import { KeyPair } from '@fluencelabs/keypair'; -import { - FluenceAppService, - IFluenceAppService, - loadDefaults, - loadWasmFromFileSystem, - loadWasmFromServer, -} from '@fluencelabs/marine-js'; +import { FluenceAppService, loadDefaults, loadWasmFromFileSystem, loadWasmFromServer } from '@fluencelabs/marine-js'; import type { MultiaddrInput } from 'multiaddr'; import { CallServiceData, CallServiceResult, GenericCallServiceHandler, ResultCodes } from './commonTypes'; import { PeerIdB58 } from './commonTypes'; From bc4cc02ee9d155045566d5606784dc0da4c5d582 Mon Sep 17 00:00:00 2001 From: Pavel Murygin Date: Mon, 12 Sep 2022 13:07:33 +0300 Subject: [PATCH 6/9] Fix PR comment --- packages/fluence-js/src/internal/FluencePeer.ts | 8 ++++++-- packages/fluence-js/src/internal/utils.ts | 4 ++++ 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/packages/fluence-js/src/internal/FluencePeer.ts b/packages/fluence-js/src/internal/FluencePeer.ts index 18792365f..528ae6224 100644 --- a/packages/fluence-js/src/internal/FluencePeer.ts +++ b/packages/fluence-js/src/internal/FluencePeer.ts @@ -23,7 +23,7 @@ import type { MultiaddrInput } from 'multiaddr'; import { CallServiceData, CallServiceResult, GenericCallServiceHandler, ResultCodes } from './commonTypes'; import { PeerIdB58 } from './commonTypes'; import { Particle, ParticleExecutionStage, ParticleQueueItem } from './Particle'; -import { throwIfNotSupported, dataToString, jsonify, MarineLoglevel, marineLogLevelToEnvs } from './utils'; +import { throwIfNotSupported, dataToString, jsonify, MarineLoglevel, marineLogLevelToEnvs, isString } from './utils'; import { concatMap, filter, pipe, Subject, tap } from 'rxjs'; import log from 'loglevel'; import { builtInServices } from './builtins/common'; @@ -322,7 +322,11 @@ export class FluencePeer { new Error("Can't use avm: peer is not initialized"); } - const res = (await this._fluenceAppService!.callService('avm', 'ast', [air], undefined)) as string; + const res = await this._fluenceAppService!.callService('avm', 'ast', [air], undefined); + if (!isString(res)) { + throw new Error(`Call to avm:ast expected to return string. Actual return: ${res}`); + } + try { if (res.startsWith('error')) { return { diff --git a/packages/fluence-js/src/internal/utils.ts b/packages/fluence-js/src/internal/utils.ts index 5d983acde..a5e8c5397 100644 --- a/packages/fluence-js/src/internal/utils.ts +++ b/packages/fluence-js/src/internal/utils.ts @@ -173,3 +173,7 @@ export type MarineLoglevel = LogLevel; export const marineLogLevelToEnvs = (marineLogLevel: MarineLoglevel | undefined) => marineLogLevel ? { WASM_LOG: marineLogLevel } : undefined; + +export const isString = (x: unknown): x is string => { + return x === null && typeof x !== 'string'; +}; From 1adae0900ff30221d71d047cff878a90bad4f111 Mon Sep 17 00:00:00 2001 From: Pavel Murygin Date: Mon, 12 Sep 2022 13:11:46 +0300 Subject: [PATCH 7/9] fix PR comment --- packages/fluence-js/src/internal/FluencePeer.ts | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/packages/fluence-js/src/internal/FluencePeer.ts b/packages/fluence-js/src/internal/FluencePeer.ts index 528ae6224..eac7e2511 100644 --- a/packages/fluence-js/src/internal/FluencePeer.ts +++ b/packages/fluence-js/src/internal/FluencePeer.ts @@ -651,10 +651,9 @@ export class FluencePeer { log.error('Interpreter failed: ', jsonify(toLog)); item.onStageChange({ stage: 'interpreterError', errorMessage: item.result.errorMessage }); return; - } else { - log.debug('Interpreter result: ', jsonify(toLog)); } + log.debug('Interpreter result: ', jsonify(toLog)); const newData = Buffer.from(item.result.data); setTimeout(() => { From 345bdf3212c56099c911393969140b0456989c14 Mon Sep 17 00:00:00 2001 From: Pavel Murygin Date: Mon, 12 Sep 2022 13:13:30 +0300 Subject: [PATCH 8/9] fix PR comment contd --- packages/fluence-js/src/internal/FluencePeer.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/fluence-js/src/internal/FluencePeer.ts b/packages/fluence-js/src/internal/FluencePeer.ts index eac7e2511..009769a79 100644 --- a/packages/fluence-js/src/internal/FluencePeer.ts +++ b/packages/fluence-js/src/internal/FluencePeer.ts @@ -654,7 +654,6 @@ export class FluencePeer { } log.debug('Interpreter result: ', jsonify(toLog)); - const newData = Buffer.from(item.result.data); setTimeout(() => { item.onStageChange({ stage: 'interpreted' }); @@ -663,6 +662,7 @@ export class FluencePeer { // send particle further if requested if (item.result.nextPeerPks.length > 0) { const newParticle = item.particle.clone(); + const newData = Buffer.from(item.result.data); newParticle.data = newData; this._outgoingParticles.next({ ...item, From 67a19d5607cbc7202ee438096a32460d5b8b1ece Mon Sep 17 00:00:00 2001 From: Pavel Murygin Date: Mon, 12 Sep 2022 13:21:56 +0300 Subject: [PATCH 9/9] fix failing tests --- packages/fluence-js/src/internal/utils.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/fluence-js/src/internal/utils.ts b/packages/fluence-js/src/internal/utils.ts index a5e8c5397..556697b92 100644 --- a/packages/fluence-js/src/internal/utils.ts +++ b/packages/fluence-js/src/internal/utils.ts @@ -175,5 +175,5 @@ export const marineLogLevelToEnvs = (marineLogLevel: MarineLoglevel | undefined) marineLogLevel ? { WASM_LOG: marineLogLevel } : undefined; export const isString = (x: unknown): x is string => { - return x === null && typeof x !== 'string'; + return x !== null && typeof x === 'string'; };