2023-02-13 17:41:35 +03:00
import * as platform from 'platform' ;
import { FluencePeer } from '@fluencelabs/js-peer/dist/js-peer/FluencePeer.js' ;
2023-02-16 14:38:48 +03:00
import { callAquaFunction } from '@fluencelabs/js-peer/dist/compilerSupport/callFunction.js' ;
import { registerService } from '@fluencelabs/js-peer/dist/compilerSupport/registerService.js' ;
2023-02-13 17:41:35 +03:00
import { MarineBasedAvmRunner } from '@fluencelabs/js-peer/dist/js-peer/avm.js' ;
2023-02-15 20:56:42 +07:00
import { MarineBackgroundRunner } from '@fluencelabs/js-peer/dist/marine/worker/index.js' ;
2023-02-13 17:41:35 +03:00
import { marineLogFunction } from '@fluencelabs/js-peer/dist/js-peer/utils.js' ;
import { WasmLoaderFromNpm } from '@fluencelabs/js-peer/dist/marine/deps-loader/node.js' ;
import { WorkerLoader } from '@fluencelabs/js-peer/dist/marine/worker-script/workerLoader.js' ;
throwIfNotSupported ( ) ;
export const defaultNames = {
avm : {
file : 'avm.wasm' ,
package : '@fluencelabs/avm' ,
} ,
marine : {
file : 'marine-js.wasm' ,
package : '@fluencelabs/marine-js' ,
} ,
} ;
2023-02-16 14:38:48 +03:00
export const createClient = ( ) = > {
2023-02-13 17:41:35 +03:00
const workerLoader = new WorkerLoader ( ) ;
const controlModuleLoader = new WasmLoaderFromNpm ( defaultNames . marine . package , defaultNames . marine . file ) ;
const avmModuleLoader = new WasmLoaderFromNpm ( defaultNames . avm . package , defaultNames . avm . file ) ;
const marine = new MarineBackgroundRunner ( workerLoader , controlModuleLoader , marineLogFunction ) ;
const avm = new MarineBasedAvmRunner ( marine , avmModuleLoader , undefined ) ;
return new FluencePeer ( marine , avm ) ;
} ;
2023-02-16 14:38:48 +03:00
const publicFluenceInterface = {
clientFactory : createClient ,
defaultClient : createClient ( ) ,
callAquaFunction ,
registerService ,
} ;
2023-02-13 17:41:35 +03:00
// @ts-ignore
2023-02-16 14:38:48 +03:00
globalThis . fluence = publicFluenceInterface ;
2023-02-13 17:41:35 +03:00
function throwIfNotSupported() {
if ( platform . name === 'Node.js' && platform . version ) {
const version = platform . version . split ( '.' ) . map ( Number ) ;
const major = version [ 0 ] ;
if ( major < 16 ) {
throw new Error (
2023-02-16 14:38:48 +03:00
'Fluence JS Client requires node.js version >= "16.x"; Detected ' +
2023-02-13 17:41:35 +03:00
platform . description +
' Please update node.js to version 16 or higher.\nYou can use https://nvm.sh utility to update node.js version: "nvm install 17 && nvm use 17 && nvm alias default 17"' ,
) ;
}
}
}