1515 */
1616
1717import { MarineService } from '@fluencelabs/marine-js/dist/MarineService' ;
18- import type { Env , MarineServiceConfig } from '@fluencelabs/marine-js/dist/config' ;
19- import type { JSONArray , JSONObject , LogMessage } from '@fluencelabs/marine-js/dist/types' ;
18+ import type { Env , MarineModuleConfig , MarineServiceConfig , ModuleDescriptor } from '@fluencelabs/marine-js/dist/config'
19+ import type { JSONArray , JSONObject , LogMessage , CallParameters } from '@fluencelabs/marine-js/dist/types' ;
2020import { Buffer } from 'buffer' ;
2121// @ts -ignore
2222import { Observable , Subject } from 'threads/observable' ;
@@ -26,6 +26,26 @@ import { expose } from 'threads/worker';
2626let marineServices = new Map < string , MarineService > ( ) ;
2727let controlModule : WebAssembly . Module | undefined ;
2828
29+ const createSimpleModuleDescriptor = ( name : string , envs ?: Env ) : ModuleDescriptor => {
30+ return {
31+ import_name : name ,
32+ config : {
33+ logger_enabled : true ,
34+ logging_mask : 0 ,
35+ wasi : {
36+ envs : { ...envs } ,
37+ preopened_files : new Set ( ) ,
38+ mapped_dirs : new Map ,
39+ }
40+ }
41+ }
42+ }
43+ const createSimpleMarineService = ( name : string , env ? : Env ) : MarineServiceConfig => {
44+ return {
45+ modules_config : [ createSimpleModuleDescriptor ( name , env ) ] ,
46+ }
47+ }
48+
2949const onLogMessage = new Subject < LogMessage > ( ) ;
3050
3151const asArray = ( buf : SharedArrayBuffer | Buffer ) => {
@@ -40,20 +60,20 @@ const toExpose = {
4060 createService : async (
4161 wasm : SharedArrayBuffer | Buffer ,
4262 serviceId : string ,
43- marineConfig ?: MarineServiceConfig ,
4463 envs ?: Env ,
4564 ) : Promise < void > => {
4665 if ( ! controlModule ) {
4766 throw new Error ( 'MarineJS is not initialized. To initialize call `init` function' ) ;
4867 }
4968
50- const service = await WebAssembly . compile ( asArray ( wasm ) ) ;
69+ const marineConfig = createSimpleMarineService ( serviceId , envs ) ;
70+ const modules = { [ serviceId ] : new Uint8Array ( wasm ) }
5171 const srv = new MarineService (
5272 controlModule ,
53- service ,
5473 serviceId ,
5574 onLogMessage . next . bind ( onLogMessage ) ,
5675 marineConfig ,
76+ modules ,
5777 envs ,
5878 ) ;
5979 await srv . init ( ) ;
@@ -67,7 +87,7 @@ const toExpose = {
6787 onLogMessage . complete ( ) ;
6888 } ,
6989
70- callService : ( serviceId : string , functionName : string , args : JSONArray | JSONObject , callParams : any ) : unknown => {
90+ callService : ( serviceId : string , functionName : string , args : JSONArray | JSONObject , callParams : CallParameters ) : unknown => {
7191 const srv = marineServices . get ( serviceId ) ;
7292 if ( ! srv ) {
7393 throw new Error ( `service with id=${ serviceId } not found` ) ;
0 commit comments