mirror of
https://github.com/fluencelabs/fluence-js.git
synced 2024-12-05 02:10:18 +00:00
feat: use marine-js 0.7.2 (#321)
* use marine-js 0.5.0 * increace some timeouts * increace some timeouts * use latest marine + remove larger timeouts * propagate CallParameters type * use marine 0.7.2 * Temp use node 18 and 20 * Comment out node 20.x --------- Co-authored-by: Anatoly Laskaris <github_me@nahsi.dev>
This commit is contained in:
parent
f82a37ee96
commit
c99a509c87
2
.github/workflows/tests.yml
vendored
2
.github/workflows/tests.yml
vendored
@ -37,8 +37,8 @@ jobs:
|
|||||||
strategy:
|
strategy:
|
||||||
matrix:
|
matrix:
|
||||||
node-version:
|
node-version:
|
||||||
- 16.x
|
|
||||||
- 18.x
|
- 18.x
|
||||||
|
# - 20.x
|
||||||
|
|
||||||
steps:
|
steps:
|
||||||
- name: Import secrets
|
- name: Import secrets
|
||||||
|
@ -29,7 +29,7 @@
|
|||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@fluencelabs/avm": "0.43.1",
|
"@fluencelabs/avm": "0.43.1",
|
||||||
"@fluencelabs/marine-js": "0.3.45",
|
"@fluencelabs/marine-js": "0.7.2",
|
||||||
"microbundle": "0.15.1",
|
"microbundle": "0.15.1",
|
||||||
"dts-bundle-generator": "7.2.0"
|
"dts-bundle-generator": "7.2.0"
|
||||||
}
|
}
|
||||||
|
@ -25,7 +25,7 @@
|
|||||||
"@fluencelabs/js-peer": "0.9.1",
|
"@fluencelabs/js-peer": "0.9.1",
|
||||||
"@fluencelabs/interfaces": "0.8.1",
|
"@fluencelabs/interfaces": "0.8.1",
|
||||||
"@fluencelabs/avm": "0.43.1",
|
"@fluencelabs/avm": "0.43.1",
|
||||||
"@fluencelabs/marine-js": "0.3.45",
|
"@fluencelabs/marine-js": "0.7.2",
|
||||||
"platform": "1.3.6"
|
"platform": "1.3.6"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
|
@ -23,7 +23,7 @@
|
|||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@fluencelabs/avm": "0.43.1",
|
"@fluencelabs/avm": "0.43.1",
|
||||||
"@fluencelabs/marine-js": "0.3.45",
|
"@fluencelabs/marine-js": "0.7.2",
|
||||||
"@types/node": "16.11.59",
|
"@types/node": "16.11.59",
|
||||||
"@types/jest": "28.1.0",
|
"@types/jest": "28.1.0",
|
||||||
"jest": "28.1.0",
|
"jest": "28.1.0",
|
||||||
|
@ -51,6 +51,6 @@
|
|||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@multiformats/multiaddr": "11.3.0",
|
"@multiformats/multiaddr": "11.3.0",
|
||||||
"@fluencelabs/avm": "0.43.1",
|
"@fluencelabs/avm": "0.43.1",
|
||||||
"@fluencelabs/marine-js": "0.3.45"
|
"@fluencelabs/marine-js": "0.7.2"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -19,7 +19,7 @@
|
|||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@fluencelabs/interfaces": "0.8.1",
|
"@fluencelabs/interfaces": "0.8.1",
|
||||||
"@fluencelabs/avm": "0.43.1",
|
"@fluencelabs/avm": "0.43.1",
|
||||||
"@fluencelabs/marine-js": "0.3.45",
|
"@fluencelabs/marine-js": "0.7.2",
|
||||||
"multiformats": "11.0.1",
|
"multiformats": "11.0.1",
|
||||||
"debug": "4.3.4",
|
"debug": "4.3.4",
|
||||||
"async": "3.2.4",
|
"async": "3.2.4",
|
||||||
|
@ -25,6 +25,7 @@ import {
|
|||||||
ParticleExecutionStage,
|
ParticleExecutionStage,
|
||||||
ParticleQueueItem,
|
ParticleQueueItem,
|
||||||
} from '../particle/Particle.js';
|
} from '../particle/Particle.js';
|
||||||
|
import { defaultCallParameters } from "@fluencelabs/marine-js/dist/types"
|
||||||
import { jsonify, isString } from '../util/utils.js';
|
import { jsonify, isString } from '../util/utils.js';
|
||||||
import { concatMap, filter, pipe, Subject, tap, Unsubscribable } from 'rxjs';
|
import { concatMap, filter, pipe, Subject, tap, Unsubscribable } from 'rxjs';
|
||||||
import { defaultSigGuard, Sig } from '../services/Sig.js';
|
import { defaultSigGuard, Sig } from '../services/Sig.js';
|
||||||
@ -184,7 +185,7 @@ export abstract class FluencePeer {
|
|||||||
new Error("Can't use avm: peer is not initialized");
|
new Error("Can't use avm: peer is not initialized");
|
||||||
}
|
}
|
||||||
|
|
||||||
const res = await this.marineHost.callService('avm', 'ast', [air], undefined);
|
const res = await this.marineHost.callService('avm', 'ast', [air], defaultCallParameters);
|
||||||
if (!isString(res)) {
|
if (!isString(res)) {
|
||||||
throw new Error(`Call to avm:ast expected to return string. Actual return: ${res}`);
|
throw new Error(`Call to avm:ast expected to return string. Actual return: ${res}`);
|
||||||
}
|
}
|
||||||
@ -521,7 +522,8 @@ export abstract class FluencePeer {
|
|||||||
log_particle.trace('id %s. executing call service handler %j', particleId, req);
|
log_particle.trace('id %s. executing call service handler %j', particleId, req);
|
||||||
|
|
||||||
if (this.marineHost && this.marineHost.hasService(req.serviceId)) {
|
if (this.marineHost && this.marineHost.hasService(req.serviceId)) {
|
||||||
const result = await this.marineHost.callService(req.serviceId, req.fnName, req.args, undefined);
|
// TODO build correct CallParameters instead of default ones
|
||||||
|
const result = await this.marineHost.callService(req.serviceId, req.fnName, req.args, defaultCallParameters);
|
||||||
|
|
||||||
return {
|
return {
|
||||||
retCode: ResultCodes.success,
|
retCode: ResultCodes.success,
|
||||||
|
@ -16,6 +16,7 @@
|
|||||||
import type { CallResultsArray, InterpreterResult, RunParameters } from '@fluencelabs/avm';
|
import type { CallResultsArray, InterpreterResult, RunParameters } from '@fluencelabs/avm';
|
||||||
import { deserializeAvmResult, serializeAvmArgs } from '@fluencelabs/avm';
|
import { deserializeAvmResult, serializeAvmArgs } from '@fluencelabs/avm';
|
||||||
import { IAvmRunner, IMarineHost, IWasmLoader } from '../marine/interfaces.js';
|
import { IAvmRunner, IMarineHost, IWasmLoader } from '../marine/interfaces.js';
|
||||||
|
import { defaultCallParameters } from "@fluencelabs/marine-js/dist/types"
|
||||||
|
|
||||||
export class MarineBasedAvmRunner implements IAvmRunner {
|
export class MarineBasedAvmRunner implements IAvmRunner {
|
||||||
constructor(private marine: IMarineHost, private avmWasmLoader: IWasmLoader) {}
|
constructor(private marine: IMarineHost, private avmWasmLoader: IWasmLoader) {}
|
||||||
@ -31,7 +32,7 @@ export class MarineBasedAvmRunner implements IAvmRunner {
|
|||||||
|
|
||||||
let avmCallResult: InterpreterResult | Error;
|
let avmCallResult: InterpreterResult | Error;
|
||||||
try {
|
try {
|
||||||
const res = await this.marine.callService('avm', 'invoke', args, undefined);
|
const res = await this.marine.callService('avm', 'invoke', args, defaultCallParameters);
|
||||||
avmCallResult = deserializeAvmResult(res);
|
avmCallResult = deserializeAvmResult(res);
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
avmCallResult = e instanceof Error ? e : new Error((e as any).toString());
|
avmCallResult = e instanceof Error ? e : new Error((e as any).toString());
|
||||||
|
@ -14,7 +14,7 @@
|
|||||||
* limitations under the License.
|
* limitations under the License.
|
||||||
*/
|
*/
|
||||||
import { CallResultsArray, InterpreterResult, RunParameters } from '@fluencelabs/avm';
|
import { CallResultsArray, InterpreterResult, RunParameters } from '@fluencelabs/avm';
|
||||||
import { IStartable, JSONArray, JSONObject } from '../util/commonTypes.js';
|
import { IStartable, JSONArray, JSONObject, CallParameters } from '../util/commonTypes.js';
|
||||||
import { Buffer } from 'buffer';
|
import { Buffer } from 'buffer';
|
||||||
// @ts-ignore
|
// @ts-ignore
|
||||||
import type { WorkerImplementation } from 'threads/dist/types/master';
|
import type { WorkerImplementation } from 'threads/dist/types/master';
|
||||||
@ -45,7 +45,7 @@ export interface IMarineHost extends IStartable {
|
|||||||
serviceId: string,
|
serviceId: string,
|
||||||
functionName: string,
|
functionName: string,
|
||||||
args: JSONArray | JSONObject,
|
args: JSONArray | JSONObject,
|
||||||
callParams: any,
|
callParams: CallParameters,
|
||||||
): Promise<unknown>;
|
): Promise<unknown>;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -15,8 +15,8 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
import { MarineService } from '@fluencelabs/marine-js/dist/MarineService';
|
import { MarineService } from '@fluencelabs/marine-js/dist/MarineService';
|
||||||
import type { Env, MarineServiceConfig } from '@fluencelabs/marine-js/dist/config';
|
import type { Env, MarineModuleConfig, MarineServiceConfig, ModuleDescriptor } from '@fluencelabs/marine-js/dist/config'
|
||||||
import type { JSONArray, JSONObject, LogMessage } from '@fluencelabs/marine-js/dist/types';
|
import type { JSONArray, JSONObject, LogMessage, CallParameters } from '@fluencelabs/marine-js/dist/types';
|
||||||
import { Buffer } from 'buffer';
|
import { Buffer } from 'buffer';
|
||||||
// @ts-ignore
|
// @ts-ignore
|
||||||
import { Observable, Subject } from 'threads/observable';
|
import { Observable, Subject } from 'threads/observable';
|
||||||
@ -26,6 +26,26 @@ import { expose } from 'threads/worker';
|
|||||||
let marineServices = new Map<string, MarineService>();
|
let marineServices = new Map<string, MarineService>();
|
||||||
let controlModule: WebAssembly.Module | undefined;
|
let controlModule: WebAssembly.Module | undefined;
|
||||||
|
|
||||||
|
const createSimpleModuleDescriptor = (name: string, envs?: Env): ModuleDescriptor => {
|
||||||
|
return {
|
||||||
|
import_name: name,
|
||||||
|
config: {
|
||||||
|
logger_enabled: true,
|
||||||
|
logging_mask: 0,
|
||||||
|
wasi: {
|
||||||
|
envs: {...envs},
|
||||||
|
preopened_files: new Set(),
|
||||||
|
mapped_dirs: new Map,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
const createSimpleMarineService = (name: string, env? : Env): MarineServiceConfig => {
|
||||||
|
return {
|
||||||
|
modules_config: [createSimpleModuleDescriptor(name, env)],
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
const onLogMessage = new Subject<LogMessage>();
|
const onLogMessage = new Subject<LogMessage>();
|
||||||
|
|
||||||
const asArray = (buf: SharedArrayBuffer | Buffer) => {
|
const asArray = (buf: SharedArrayBuffer | Buffer) => {
|
||||||
@ -40,20 +60,20 @@ const toExpose = {
|
|||||||
createService: async (
|
createService: async (
|
||||||
wasm: SharedArrayBuffer | Buffer,
|
wasm: SharedArrayBuffer | Buffer,
|
||||||
serviceId: string,
|
serviceId: string,
|
||||||
marineConfig?: MarineServiceConfig,
|
|
||||||
envs?: Env,
|
envs?: Env,
|
||||||
): Promise<void> => {
|
): Promise<void> => {
|
||||||
if (!controlModule) {
|
if (!controlModule) {
|
||||||
throw new Error('MarineJS is not initialized. To initialize call `init` function');
|
throw new Error('MarineJS is not initialized. To initialize call `init` function');
|
||||||
}
|
}
|
||||||
|
|
||||||
const service = await WebAssembly.compile(asArray(wasm));
|
const marineConfig = createSimpleMarineService(serviceId, envs);
|
||||||
|
const modules = {[serviceId]: new Uint8Array(wasm)}
|
||||||
const srv = new MarineService(
|
const srv = new MarineService(
|
||||||
controlModule,
|
controlModule,
|
||||||
service,
|
|
||||||
serviceId,
|
serviceId,
|
||||||
onLogMessage.next.bind(onLogMessage),
|
onLogMessage.next.bind(onLogMessage),
|
||||||
marineConfig,
|
marineConfig,
|
||||||
|
modules,
|
||||||
envs,
|
envs,
|
||||||
);
|
);
|
||||||
await srv.init();
|
await srv.init();
|
||||||
@ -67,7 +87,7 @@ const toExpose = {
|
|||||||
onLogMessage.complete();
|
onLogMessage.complete();
|
||||||
},
|
},
|
||||||
|
|
||||||
callService: (serviceId: string, functionName: string, args: JSONArray | JSONObject, callParams: any): unknown => {
|
callService: (serviceId: string, functionName: string, args: JSONArray | JSONObject, callParams: CallParameters): unknown => {
|
||||||
const srv = marineServices.get(serviceId);
|
const srv = marineServices.get(serviceId);
|
||||||
if (!srv) {
|
if (!srv) {
|
||||||
throw new Error(`service with id=${serviceId} not found`);
|
throw new Error(`service with id=${serviceId} not found`);
|
||||||
|
@ -14,7 +14,7 @@
|
|||||||
* limitations under the License.
|
* limitations under the License.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
import type { JSONArray, JSONObject } from '@fluencelabs/marine-js/dist/types';
|
import type { JSONArray, JSONObject, CallParameters } from '@fluencelabs/marine-js/dist/types';
|
||||||
import { LogFunction, logLevelToEnv } from '@fluencelabs/marine-js/dist/types';
|
import { LogFunction, logLevelToEnv } from '@fluencelabs/marine-js/dist/types';
|
||||||
import type { MarineBackgroundInterface } from '../worker-script/index.js';
|
import type { MarineBackgroundInterface } from '../worker-script/index.js';
|
||||||
// @ts-ignore
|
// @ts-ignore
|
||||||
@ -73,7 +73,7 @@ export class MarineBackgroundRunner implements IMarineHost {
|
|||||||
// We enable all possible log levels passing the control for exact printouts to the logger
|
// We enable all possible log levels passing the control for exact printouts to the logger
|
||||||
const env = logLevelToEnv('trace');
|
const env = logLevelToEnv('trace');
|
||||||
this.loggers.set(serviceId, marineLogger(serviceId));
|
this.loggers.set(serviceId, marineLogger(serviceId));
|
||||||
await this.workerThread.createService(serviceModule, serviceId, undefined, env);
|
await this.workerThread.createService(serviceModule, serviceId, env);
|
||||||
this.marineServices.add(serviceId);
|
this.marineServices.add(serviceId);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -81,7 +81,7 @@ export class MarineBackgroundRunner implements IMarineHost {
|
|||||||
serviceId: string,
|
serviceId: string,
|
||||||
functionName: string,
|
functionName: string,
|
||||||
args: JSONArray | JSONObject,
|
args: JSONArray | JSONObject,
|
||||||
callParams: any,
|
callParams: CallParameters,
|
||||||
): Promise<unknown> {
|
): Promise<unknown> {
|
||||||
if (!this.workerThread) {
|
if (!this.workerThread) {
|
||||||
throw 'Worker is not initialized';
|
throw 'Worker is not initialized';
|
||||||
|
@ -14,6 +14,8 @@
|
|||||||
* limitations under the License.
|
* limitations under the License.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
export { CallParameters} from "@fluencelabs/marine-js/dist/types";
|
||||||
|
|
||||||
export interface IStartable {
|
export interface IStartable {
|
||||||
start(): Promise<void>;
|
start(): Promise<void>;
|
||||||
stop(): Promise<void>;
|
stop(): Promise<void>;
|
||||||
|
24
pnpm-lock.yaml
generated
24
pnpm-lock.yaml
generated
@ -148,8 +148,8 @@ importers:
|
|||||||
specifier: 0.43.1
|
specifier: 0.43.1
|
||||||
version: 0.43.1
|
version: 0.43.1
|
||||||
'@fluencelabs/marine-js':
|
'@fluencelabs/marine-js':
|
||||||
specifier: 0.3.45
|
specifier: 0.7.2
|
||||||
version: 0.3.45
|
version: 0.7.2
|
||||||
dts-bundle-generator:
|
dts-bundle-generator:
|
||||||
specifier: 7.2.0
|
specifier: 7.2.0
|
||||||
version: 7.2.0
|
version: 7.2.0
|
||||||
@ -169,8 +169,8 @@ importers:
|
|||||||
specifier: 0.9.1
|
specifier: 0.9.1
|
||||||
version: link:../../core/js-peer
|
version: link:../../core/js-peer
|
||||||
'@fluencelabs/marine-js':
|
'@fluencelabs/marine-js':
|
||||||
specifier: 0.3.45
|
specifier: 0.7.2
|
||||||
version: 0.3.45
|
version: 0.7.2
|
||||||
platform:
|
platform:
|
||||||
specifier: 1.3.6
|
specifier: 1.3.6
|
||||||
version: 1.3.6
|
version: 1.3.6
|
||||||
@ -220,8 +220,8 @@ importers:
|
|||||||
specifier: 0.43.1
|
specifier: 0.43.1
|
||||||
version: 0.43.1
|
version: 0.43.1
|
||||||
'@fluencelabs/marine-js':
|
'@fluencelabs/marine-js':
|
||||||
specifier: 0.3.45
|
specifier: 0.7.2
|
||||||
version: 0.3.45
|
version: 0.7.2
|
||||||
'@rollup/plugin-inject':
|
'@rollup/plugin-inject':
|
||||||
specifier: 5.0.3
|
specifier: 5.0.3
|
||||||
version: 5.0.3
|
version: 5.0.3
|
||||||
@ -262,8 +262,8 @@ importers:
|
|||||||
specifier: 0.43.1
|
specifier: 0.43.1
|
||||||
version: 0.43.1
|
version: 0.43.1
|
||||||
'@fluencelabs/marine-js':
|
'@fluencelabs/marine-js':
|
||||||
specifier: 0.3.45
|
specifier: 0.7.2
|
||||||
version: 0.3.45
|
version: 0.7.2
|
||||||
'@multiformats/multiaddr':
|
'@multiformats/multiaddr':
|
||||||
specifier: 11.3.0
|
specifier: 11.3.0
|
||||||
version: 11.3.0
|
version: 11.3.0
|
||||||
@ -280,8 +280,8 @@ importers:
|
|||||||
specifier: 0.8.1
|
specifier: 0.8.1
|
||||||
version: link:../interfaces
|
version: link:../interfaces
|
||||||
'@fluencelabs/marine-js':
|
'@fluencelabs/marine-js':
|
||||||
specifier: 0.3.45
|
specifier: 0.7.2
|
||||||
version: 0.3.45
|
version: 0.7.2
|
||||||
'@libp2p/crypto':
|
'@libp2p/crypto':
|
||||||
specifier: 1.0.8
|
specifier: 1.0.8
|
||||||
version: 1.0.8(uint8arraylist@2.4.3)
|
version: 1.0.8(uint8arraylist@2.4.3)
|
||||||
@ -2999,8 +2999,8 @@ packages:
|
|||||||
- typescript
|
- typescript
|
||||||
dev: true
|
dev: true
|
||||||
|
|
||||||
/@fluencelabs/marine-js@0.3.45:
|
/@fluencelabs/marine-js@0.7.2:
|
||||||
resolution: {integrity: sha512-GmeTvaC9n6zM6FPPyoHXwe2I8F9mEeE9DKzJcqy4FkUmpI11Fu4HrTvKgJyTURJkZSu8cfrjA7ZVeYuDGHeimQ==}
|
resolution: {integrity: sha512-etjbXDgzyZkK82UZvtuIU3bfy5f52siDUy1m+T5Y5r70k82xYdZZ8vgWVgB6ivi2f3aDyQjgNTfzWQjKFpAReQ==}
|
||||||
dependencies:
|
dependencies:
|
||||||
'@wasmer/wasi': 0.12.0
|
'@wasmer/wasi': 0.12.0
|
||||||
'@wasmer/wasmfs': 0.12.0
|
'@wasmer/wasmfs': 0.12.0
|
||||||
|
Loading…
Reference in New Issue
Block a user