Integrate Marine JS into Fluence peer (#149)

This commit is contained in:
Pavel 2022-04-21 14:13:26 +03:00 committed by GitHub
parent 945c8f1bce
commit 954c20e2c0
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
29 changed files with 6378 additions and 1307 deletions

13
aqua/tests/marine-js.aqua Normal file
View File

@ -0,0 +1,13 @@
data GreetingRecord:
str: string
num: i32
service Greeting("greeting"):
greeting(name: string) -> string
greeting_record() -> GreetingRecord
func call(arg: string) -> string:
res1 <- Greeting.greeting(arg)
res2 <- Greeting.greeting(res1)
res3 <- Greeting.greeting(res2)
<- res3

File diff suppressed because one or more lines are too long

View File

@ -102,6 +102,8 @@
<ul class="tsd-index-list">
<li class="tsd-kind-method tsd-parent-kind-class"><a href="FluencePeer.html#getServices" class="tsd-kind-icon">get<wbr>Services</a></li>
<li class="tsd-kind-method tsd-parent-kind-class"><a href="FluencePeer.html#getStatus" class="tsd-kind-icon">get<wbr>Status</a></li>
<li class="tsd-kind-method tsd-parent-kind-class"><a href="FluencePeer.html#registerMarineService" class="tsd-kind-icon">register<wbr>Marine<wbr>Service</a></li>
<li class="tsd-kind-method tsd-parent-kind-class"><a href="FluencePeer.html#removeMarineService" class="tsd-kind-icon">remove<wbr>Marine<wbr>Service</a></li>
<li class="tsd-kind-method tsd-parent-kind-class"><a href="FluencePeer.html#start" class="tsd-kind-icon">start</a></li>
<li class="tsd-kind-method tsd-parent-kind-class"><a href="FluencePeer.html#stop" class="tsd-kind-icon">stop</a></li>
<li class="tsd-kind-method tsd-parent-kind-class tsd-is-static"><a href="FluencePeer.html#isInstance" class="tsd-kind-icon">is<wbr>Instance</a></li>
@ -122,7 +124,7 @@
<li class="tsd-description">
<aside class="tsd-sources">
<ul>
<li>Defined in <a href="https://github.com/fluencelabs/fluence-js/blob/0c32288/src/internal/FluencePeer.ts#L150">internal/FluencePeer.ts:150</a></li>
<li>Defined in <a href="https://github.com/fluencelabs/fluence-js/blob/9a26165/src/internal/FluencePeer.ts#L176">src/internal/FluencePeer.ts:176</a></li>
</ul>
</aside>
<div class="tsd-comment tsd-typography">
@ -147,7 +149,7 @@
<li class="tsd-description">
<aside class="tsd-sources">
<ul>
<li>Defined in <a href="https://github.com/fluencelabs/fluence-js/blob/0c32288/src/internal/FluencePeer.ts#L269">internal/FluencePeer.ts:269</a></li>
<li>Defined in <a href="https://github.com/fluencelabs/fluence-js/blob/9a26165/src/internal/FluencePeer.ts#L330">src/internal/FluencePeer.ts:330</a></li>
</ul>
</aside>
<div class="tsd-comment tsd-typography">
@ -296,7 +298,7 @@
<li class="tsd-description">
<aside class="tsd-sources">
<ul>
<li>Defined in <a href="https://github.com/fluencelabs/fluence-js/blob/0c32288/src/internal/FluencePeer.ts#L242">internal/FluencePeer.ts:242</a></li>
<li>Defined in <a href="https://github.com/fluencelabs/fluence-js/blob/9a26165/src/internal/FluencePeer.ts#L274">src/internal/FluencePeer.ts:274</a></li>
</ul>
</aside>
<h4 class="tsd-returns-title">Returns <span class="tsd-signature-symbol">{ </span>sig<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">Sig</span><span class="tsd-signature-symbol"> }</span></h4>
@ -318,7 +320,7 @@
<li class="tsd-description">
<aside class="tsd-sources">
<ul>
<li>Defined in <a href="https://github.com/fluencelabs/fluence-js/blob/0c32288/src/internal/FluencePeer.ts#L168">internal/FluencePeer.ts:168</a></li>
<li>Defined in <a href="https://github.com/fluencelabs/fluence-js/blob/9a26165/src/internal/FluencePeer.ts#L194">src/internal/FluencePeer.ts:194</a></li>
</ul>
</aside>
<div class="tsd-comment tsd-typography">
@ -330,6 +332,80 @@
</li>
</ul>
</section>
<section class="tsd-panel tsd-member tsd-kind-method tsd-parent-kind-class">
<a name="registerMarineService" class="tsd-anchor"></a>
<h3>register<wbr>Marine<wbr>Service</h3>
<ul class="tsd-signatures tsd-kind-method tsd-parent-kind-class">
<li class="tsd-signature tsd-kind-icon">register<wbr>Marine<wbr>Service<span class="tsd-signature-symbol">(</span>wasm<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">SharedArrayBuffer</span><span class="tsd-signature-symbol"> | </span><span class="tsd-signature-type">Buffer</span>, serviceId<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">string</span><span class="tsd-signature-symbol">)</span><span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">Promise</span><span class="tsd-signature-symbol">&lt;</span><span class="tsd-signature-type">void</span><span class="tsd-signature-symbol">&gt;</span></li>
</ul>
<ul class="tsd-descriptions">
<li class="tsd-description">
<aside class="tsd-sources">
<ul>
<li>Defined in <a href="https://github.com/fluencelabs/fluence-js/blob/9a26165/src/internal/FluencePeer.ts#L289">src/internal/FluencePeer.ts:289</a></li>
</ul>
</aside>
<div class="tsd-comment tsd-typography">
<div class="lead">
<p>Registers marine service within the Fluence peer from wasm file.
Following helper functions can be used to load wasm files:</p>
<ul>
<li>loadWasmFromFileSystem</li>
<li>loadWasmFromNpmPackage</li>
<li>loadWasmFromServer</li>
</ul>
</div>
</div>
<h4 class="tsd-parameters-title">Parameters</h4>
<ul class="tsd-parameters">
<li>
<h5>wasm: <span class="tsd-signature-type">SharedArrayBuffer</span><span class="tsd-signature-symbol"> | </span><span class="tsd-signature-type">Buffer</span></h5>
<div class="tsd-comment tsd-typography">
<p>buffer with the wasm file for service</p>
</div>
</li>
<li>
<h5>serviceId: <span class="tsd-signature-type">string</span></h5>
<div class="tsd-comment tsd-typography">
<p>the service id by which the service can be accessed in aqua</p>
</div>
</li>
</ul>
<h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">Promise</span><span class="tsd-signature-symbol">&lt;</span><span class="tsd-signature-type">void</span><span class="tsd-signature-symbol">&gt;</span></h4>
</li>
</ul>
</section>
<section class="tsd-panel tsd-member tsd-kind-method tsd-parent-kind-class">
<a name="removeMarineService" class="tsd-anchor"></a>
<h3>remove<wbr>Marine<wbr>Service</h3>
<ul class="tsd-signatures tsd-kind-method tsd-parent-kind-class">
<li class="tsd-signature tsd-kind-icon">remove<wbr>Marine<wbr>Service<span class="tsd-signature-symbol">(</span>serviceId<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">string</span><span class="tsd-signature-symbol">)</span><span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">void</span></li>
</ul>
<ul class="tsd-descriptions">
<li class="tsd-description">
<aside class="tsd-sources">
<ul>
<li>Defined in <a href="https://github.com/fluencelabs/fluence-js/blob/9a26165/src/internal/FluencePeer.ts#L302">src/internal/FluencePeer.ts:302</a></li>
</ul>
</aside>
<div class="tsd-comment tsd-typography">
<div class="lead">
<p>Removes the specified marine service from the Fluence peer</p>
</div>
</div>
<h4 class="tsd-parameters-title">Parameters</h4>
<ul class="tsd-parameters">
<li>
<h5>serviceId: <span class="tsd-signature-type">string</span></h5>
<div class="tsd-comment tsd-typography">
<p>the service id to remove</p>
</div>
</li>
</ul>
<h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">void</span></h4>
</li>
</ul>
</section>
<section class="tsd-panel tsd-member tsd-kind-method tsd-parent-kind-class">
<a name="start" class="tsd-anchor"></a>
<h3>start</h3>
@ -340,7 +416,7 @@
<li class="tsd-description">
<aside class="tsd-sources">
<ul>
<li>Defined in <a href="https://github.com/fluencelabs/fluence-js/blob/0c32288/src/internal/FluencePeer.ts#L184">internal/FluencePeer.ts:184</a></li>
<li>Defined in <a href="https://github.com/fluencelabs/fluence-js/blob/9a26165/src/internal/FluencePeer.ts#L210">src/internal/FluencePeer.ts:210</a></li>
</ul>
</aside>
<div class="tsd-comment tsd-typography">
@ -372,7 +448,7 @@
<li class="tsd-description">
<aside class="tsd-sources">
<ul>
<li>Defined in <a href="https://github.com/fluencelabs/fluence-js/blob/0c32288/src/internal/FluencePeer.ts#L252">internal/FluencePeer.ts:252</a></li>
<li>Defined in <a href="https://github.com/fluencelabs/fluence-js/blob/9a26165/src/internal/FluencePeer.ts#L310">src/internal/FluencePeer.ts:310</a></li>
</ul>
</aside>
<div class="tsd-comment tsd-typography">
@ -395,7 +471,7 @@
<li class="tsd-description">
<aside class="tsd-sources">
<ul>
<li>Defined in <a href="https://github.com/fluencelabs/fluence-js/blob/0c32288/src/internal/FluencePeer.ts#L157">internal/FluencePeer.ts:157</a></li>
<li>Defined in <a href="https://github.com/fluencelabs/fluence-js/blob/9a26165/src/internal/FluencePeer.ts#L183">src/internal/FluencePeer.ts:183</a></li>
</ul>
</aside>
<div class="tsd-comment tsd-typography">
@ -446,6 +522,12 @@
<li class=" tsd-kind-method tsd-parent-kind-class">
<a href="FluencePeer.html#getStatus" class="tsd-kind-icon">get<wbr>Status</a>
</li>
<li class=" tsd-kind-method tsd-parent-kind-class">
<a href="FluencePeer.html#registerMarineService" class="tsd-kind-icon">register<wbr>Marine<wbr>Service</a>
</li>
<li class=" tsd-kind-method tsd-parent-kind-class">
<a href="FluencePeer.html#removeMarineService" class="tsd-kind-icon">remove<wbr>Marine<wbr>Service</a>
</li>
<li class=" tsd-kind-method tsd-parent-kind-class">
<a href="FluencePeer.html#start" class="tsd-kind-icon">start</a>
</li>
@ -480,6 +562,15 @@
<li class=" tsd-kind-variable">
<a href="../modules.html#Fluence" class="tsd-kind-icon">Fluence</a>
</li>
<li class=" tsd-kind-function tsd-is-external">
<a href="../modules.html#loadWasmFromFileSystem" class="tsd-kind-icon">load<wbr>Wasm<wbr>From<wbr>File<wbr>System</a>
</li>
<li class=" tsd-kind-function tsd-is-external">
<a href="../modules.html#loadWasmFromNpmPackage" class="tsd-kind-icon">load<wbr>Wasm<wbr>From<wbr>Npm<wbr>Package</a>
</li>
<li class=" tsd-kind-function tsd-is-external">
<a href="../modules.html#loadWasmFromServer" class="tsd-kind-icon">load<wbr>Wasm<wbr>From<wbr>Server</a>
</li>
<li class=" tsd-kind-function">
<a href="../modules.html#setLogLevel" class="tsd-kind-icon">set<wbr>Log<wbr>Level</a>
</li>

View File

@ -115,7 +115,7 @@
<li class="tsd-description">
<aside class="tsd-sources">
<ul>
<li>Defined in <a href="https://github.com/fluencelabs/fluence-js/blob/0c32288/src/internal/KeyPair.ts#L26">internal/KeyPair.ts:26</a></li>
<li>Defined in <a href="https://github.com/fluencelabs/fluence-js/blob/9a26165/src/internal/KeyPair.ts#L26">src/internal/KeyPair.ts:26</a></li>
</ul>
</aside>
<h4 class="tsd-parameters-title">Parameters</h4>
@ -137,7 +137,7 @@
<div class="tsd-signature tsd-kind-icon">Libp2p<wbr>Peer<wbr>Id<span class="tsd-signature-symbol">:</span> <span class="tsd-signature-type">PeerId</span></div>
<aside class="tsd-sources">
<ul>
<li>Defined in <a href="https://github.com/fluencelabs/fluence-js/blob/0c32288/src/internal/KeyPair.ts#L24">internal/KeyPair.ts:24</a></li>
<li>Defined in <a href="https://github.com/fluencelabs/fluence-js/blob/9a26165/src/internal/KeyPair.ts#L24">src/internal/KeyPair.ts:24</a></li>
</ul>
</aside>
<div class="tsd-comment tsd-typography">
@ -159,7 +159,7 @@
<li class="tsd-description">
<aside class="tsd-sources">
<ul>
<li>Defined in <a href="https://github.com/fluencelabs/fluence-js/blob/0c32288/src/internal/KeyPair.ts#L62">internal/KeyPair.ts:62</a></li>
<li>Defined in <a href="https://github.com/fluencelabs/fluence-js/blob/9a26165/src/internal/KeyPair.ts#L62">src/internal/KeyPair.ts:62</a></li>
</ul>
</aside>
<h4 class="tsd-parameters-title">Parameters</h4>
@ -182,7 +182,7 @@
<li class="tsd-description">
<aside class="tsd-sources">
<ul>
<li>Defined in <a href="https://github.com/fluencelabs/fluence-js/blob/0c32288/src/internal/KeyPair.ts#L51">internal/KeyPair.ts:51</a></li>
<li>Defined in <a href="https://github.com/fluencelabs/fluence-js/blob/9a26165/src/internal/KeyPair.ts#L51">src/internal/KeyPair.ts:51</a></li>
</ul>
</aside>
<h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">string</span></h4>
@ -199,7 +199,7 @@
<li class="tsd-description">
<aside class="tsd-sources">
<ul>
<li>Defined in <a href="https://github.com/fluencelabs/fluence-js/blob/0c32288/src/internal/KeyPair.ts#L58">internal/KeyPair.ts:58</a></li>
<li>Defined in <a href="https://github.com/fluencelabs/fluence-js/blob/9a26165/src/internal/KeyPair.ts#L58">src/internal/KeyPair.ts:58</a></li>
</ul>
</aside>
<h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">Uint8Array</span></h4>
@ -217,7 +217,7 @@
<li class="tsd-description">
<aside class="tsd-sources">
<ul>
<li>Defined in <a href="https://github.com/fluencelabs/fluence-js/blob/0c32288/src/internal/KeyPair.ts#L66">internal/KeyPair.ts:66</a></li>
<li>Defined in <a href="https://github.com/fluencelabs/fluence-js/blob/9a26165/src/internal/KeyPair.ts#L66">src/internal/KeyPair.ts:66</a></li>
</ul>
</aside>
<h4 class="tsd-parameters-title">Parameters</h4>
@ -243,7 +243,7 @@
<li class="tsd-description">
<aside class="tsd-sources">
<ul>
<li>Defined in <a href="https://github.com/fluencelabs/fluence-js/blob/0c32288/src/internal/KeyPair.ts#L35">internal/KeyPair.ts:35</a></li>
<li>Defined in <a href="https://github.com/fluencelabs/fluence-js/blob/9a26165/src/internal/KeyPair.ts#L35">src/internal/KeyPair.ts:35</a></li>
</ul>
</aside>
<div class="tsd-comment tsd-typography">
@ -274,7 +274,7 @@
<li class="tsd-description">
<aside class="tsd-sources">
<ul>
<li>Defined in <a href="https://github.com/fluencelabs/fluence-js/blob/0c32288/src/internal/KeyPair.ts#L46">internal/KeyPair.ts:46</a></li>
<li>Defined in <a href="https://github.com/fluencelabs/fluence-js/blob/9a26165/src/internal/KeyPair.ts#L46">src/internal/KeyPair.ts:46</a></li>
</ul>
</aside>
<div class="tsd-comment tsd-typography">
@ -355,6 +355,15 @@
<li class=" tsd-kind-variable">
<a href="../modules.html#Fluence" class="tsd-kind-icon">Fluence</a>
</li>
<li class=" tsd-kind-function tsd-is-external">
<a href="../modules.html#loadWasmFromFileSystem" class="tsd-kind-icon">load<wbr>Wasm<wbr>From<wbr>File<wbr>System</a>
</li>
<li class=" tsd-kind-function tsd-is-external">
<a href="../modules.html#loadWasmFromNpmPackage" class="tsd-kind-icon">load<wbr>Wasm<wbr>From<wbr>Npm<wbr>Package</a>
</li>
<li class=" tsd-kind-function tsd-is-external">
<a href="../modules.html#loadWasmFromServer" class="tsd-kind-icon">load<wbr>Wasm<wbr>From<wbr>Server</a>
</li>
<li class=" tsd-kind-function">
<a href="../modules.html#setLogLevel" class="tsd-kind-icon">set<wbr>Log<wbr>Level</a>
</li>

View File

@ -108,6 +108,15 @@
<li class=" tsd-kind-variable">
<a href="modules.html#Fluence" class="tsd-kind-icon">Fluence</a>
</li>
<li class=" tsd-kind-function tsd-is-external">
<a href="modules.html#loadWasmFromFileSystem" class="tsd-kind-icon">load<wbr>Wasm<wbr>From<wbr>File<wbr>System</a>
</li>
<li class=" tsd-kind-function tsd-is-external">
<a href="modules.html#loadWasmFromNpmPackage" class="tsd-kind-icon">load<wbr>Wasm<wbr>From<wbr>Npm<wbr>Package</a>
</li>
<li class=" tsd-kind-function tsd-is-external">
<a href="modules.html#loadWasmFromServer" class="tsd-kind-icon">load<wbr>Wasm<wbr>From<wbr>Server</a>
</li>
<li class=" tsd-kind-function">
<a href="modules.html#setLogLevel" class="tsd-kind-icon">set<wbr>Log<wbr>Level</a>
</li>

View File

@ -118,7 +118,7 @@
<div class="tsd-signature tsd-kind-icon">init<wbr>Peer<wbr>Id<span class="tsd-signature-symbol">:</span> <span class="tsd-signature-type">string</span></div>
<aside class="tsd-sources">
<ul>
<li>Defined in <a href="https://github.com/fluencelabs/fluence-js/blob/0c32288/src/internal/commonTypes.ts#L37">internal/commonTypes.ts:37</a></li>
<li>Defined in <a href="https://github.com/fluencelabs/fluence-js/blob/9a26165/src/internal/commonTypes.ts#L37">src/internal/commonTypes.ts:37</a></li>
</ul>
</aside>
<div class="tsd-comment tsd-typography">
@ -133,7 +133,7 @@
<div class="tsd-signature tsd-kind-icon">particle<wbr>Id<span class="tsd-signature-symbol">:</span> <span class="tsd-signature-type">string</span></div>
<aside class="tsd-sources">
<ul>
<li>Defined in <a href="https://github.com/fluencelabs/fluence-js/blob/0c32288/src/internal/commonTypes.ts#L32">internal/commonTypes.ts:32</a></li>
<li>Defined in <a href="https://github.com/fluencelabs/fluence-js/blob/9a26165/src/internal/commonTypes.ts#L32">src/internal/commonTypes.ts:32</a></li>
</ul>
</aside>
<div class="tsd-comment tsd-typography">
@ -148,7 +148,7 @@
<div class="tsd-signature tsd-kind-icon">signature<span class="tsd-signature-symbol">:</span> <span class="tsd-signature-type">string</span></div>
<aside class="tsd-sources">
<ul>
<li>Defined in <a href="https://github.com/fluencelabs/fluence-js/blob/0c32288/src/internal/commonTypes.ts#L52">internal/commonTypes.ts:52</a></li>
<li>Defined in <a href="https://github.com/fluencelabs/fluence-js/blob/9a26165/src/internal/commonTypes.ts#L52">src/internal/commonTypes.ts:52</a></li>
</ul>
</aside>
<div class="tsd-comment tsd-typography">
@ -163,7 +163,7 @@
<div class="tsd-signature tsd-kind-icon">tetraplets<span class="tsd-signature-symbol">:</span> <span class="tsd-signature-symbol">{</span><span class="tsd-signature-symbol">[ </span><span class="tsd-signature-type">key</span><span class="tsd-signature-symbol"> in </span><span class="tsd-signature-type">string</span><span class="tsd-signature-symbol">]</span><span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">SecurityTetraplet</span><span class="tsd-signature-symbol">[]</span><span class="tsd-signature-symbol"> }</span></div>
<aside class="tsd-sources">
<ul>
<li>Defined in <a href="https://github.com/fluencelabs/fluence-js/blob/0c32288/src/internal/commonTypes.ts#L57">internal/commonTypes.ts:57</a></li>
<li>Defined in <a href="https://github.com/fluencelabs/fluence-js/blob/9a26165/src/internal/commonTypes.ts#L57">src/internal/commonTypes.ts:57</a></li>
</ul>
</aside>
<div class="tsd-comment tsd-typography">
@ -178,7 +178,7 @@
<div class="tsd-signature tsd-kind-icon">timestamp<span class="tsd-signature-symbol">:</span> <span class="tsd-signature-type">number</span></div>
<aside class="tsd-sources">
<ul>
<li>Defined in <a href="https://github.com/fluencelabs/fluence-js/blob/0c32288/src/internal/commonTypes.ts#L42">internal/commonTypes.ts:42</a></li>
<li>Defined in <a href="https://github.com/fluencelabs/fluence-js/blob/9a26165/src/internal/commonTypes.ts#L42">src/internal/commonTypes.ts:42</a></li>
</ul>
</aside>
<div class="tsd-comment tsd-typography">
@ -193,7 +193,7 @@
<div class="tsd-signature tsd-kind-icon">ttl<span class="tsd-signature-symbol">:</span> <span class="tsd-signature-type">number</span></div>
<aside class="tsd-sources">
<ul>
<li>Defined in <a href="https://github.com/fluencelabs/fluence-js/blob/0c32288/src/internal/commonTypes.ts#L47">internal/commonTypes.ts:47</a></li>
<li>Defined in <a href="https://github.com/fluencelabs/fluence-js/blob/9a26165/src/internal/commonTypes.ts#L47">src/internal/commonTypes.ts:47</a></li>
</ul>
</aside>
<div class="tsd-comment tsd-typography">
@ -262,6 +262,15 @@
<li class=" tsd-kind-variable">
<a href="../modules.html#Fluence" class="tsd-kind-icon">Fluence</a>
</li>
<li class=" tsd-kind-function tsd-is-external">
<a href="../modules.html#loadWasmFromFileSystem" class="tsd-kind-icon">load<wbr>Wasm<wbr>From<wbr>File<wbr>System</a>
</li>
<li class=" tsd-kind-function tsd-is-external">
<a href="../modules.html#loadWasmFromNpmPackage" class="tsd-kind-icon">load<wbr>Wasm<wbr>From<wbr>Npm<wbr>Package</a>
</li>
<li class=" tsd-kind-function tsd-is-external">
<a href="../modules.html#loadWasmFromServer" class="tsd-kind-icon">load<wbr>Wasm<wbr>From<wbr>Server</a>
</li>
<li class=" tsd-kind-function">
<a href="../modules.html#setLogLevel" class="tsd-kind-icon">set<wbr>Log<wbr>Level</a>
</li>

View File

@ -95,6 +95,7 @@
<li class="tsd-kind-property tsd-parent-kind-interface"><a href="PeerConfig.html#debug" class="tsd-kind-icon">debug</a></li>
<li class="tsd-kind-property tsd-parent-kind-interface"><a href="PeerConfig.html#defaultTtlMs" class="tsd-kind-icon">default<wbr>Ttl<wbr>Ms</a></li>
<li class="tsd-kind-property tsd-parent-kind-interface"><a href="PeerConfig.html#dialTimeoutMs" class="tsd-kind-icon">dial<wbr>Timeout<wbr>Ms</a></li>
<li class="tsd-kind-property tsd-parent-kind-interface"><a href="PeerConfig.html#marineJS" class="tsd-kind-icon">marineJS</a></li>
<li class="tsd-kind-property tsd-parent-kind-interface"><a href="PeerConfig.html#skipCheckConnection" class="tsd-kind-icon">skip<wbr>Check<wbr>Connection</a></li>
</ul>
</section>
@ -109,7 +110,7 @@
<div class="tsd-signature tsd-kind-icon">Key<wbr>Pair<span class="tsd-signature-symbol">:</span> <a href="../classes/KeyPair.html" class="tsd-signature-type" data-tsd-kind="Class">KeyPair</a></div>
<aside class="tsd-sources">
<ul>
<li>Defined in <a href="https://github.com/fluencelabs/fluence-js/blob/0c32288/src/internal/FluencePeer.ts#L72">internal/FluencePeer.ts:72</a></li>
<li>Defined in <a href="https://github.com/fluencelabs/fluence-js/blob/9a26165/src/internal/FluencePeer.ts#L74">src/internal/FluencePeer.ts:74</a></li>
</ul>
</aside>
<div class="tsd-comment tsd-typography">
@ -125,7 +126,7 @@
<div class="tsd-signature tsd-kind-icon">avm<wbr>Log<wbr>Level<span class="tsd-signature-symbol">:</span> <span class="tsd-signature-type">LogLevel</span></div>
<aside class="tsd-sources">
<ul>
<li>Defined in <a href="https://github.com/fluencelabs/fluence-js/blob/0c32288/src/internal/FluencePeer.ts#L66">internal/FluencePeer.ts:66</a></li>
<li>Defined in <a href="https://github.com/fluencelabs/fluence-js/blob/9a26165/src/internal/FluencePeer.ts#L68">src/internal/FluencePeer.ts:68</a></li>
</ul>
</aside>
<div class="tsd-comment tsd-typography">
@ -140,13 +141,18 @@
<div class="tsd-signature tsd-kind-icon">avm<wbr>Runner<span class="tsd-signature-symbol">:</span> <span class="tsd-signature-type">AvmRunner</span></div>
<aside class="tsd-sources">
<ul>
<li>Defined in <a href="https://github.com/fluencelabs/fluence-js/blob/0c32288/src/internal/FluencePeer.ts#L103">internal/FluencePeer.ts:103</a></li>
<li>Defined in <a href="https://github.com/fluencelabs/fluence-js/blob/9a26165/src/internal/FluencePeer.ts#L106">src/internal/FluencePeer.ts:106</a></li>
</ul>
</aside>
<div class="tsd-comment tsd-typography">
<div class="lead">
<p>Plugable AVM runner implementation. If not specified AvmBackgroundRunner will be used</p>
</div>
<dl class="tsd-comment-tags">
<dt>deprecated.</dt>
<dd><p>AVM run through marine-js infrastructure.</p>
</dd>
<dt>see</dt>
<dd><p>marineJS option to configure AVM</p>
</dd>
</dl>
</div>
</section>
<section class="tsd-panel tsd-member tsd-kind-property tsd-parent-kind-interface">
@ -155,7 +161,7 @@
<div class="tsd-signature tsd-kind-icon">check<wbr>Connection<wbr>Timeout<wbr>Ms<span class="tsd-signature-symbol">:</span> <span class="tsd-signature-type">number</span></div>
<aside class="tsd-sources">
<ul>
<li>Defined in <a href="https://github.com/fluencelabs/fluence-js/blob/0c32288/src/internal/FluencePeer.ts#L79">internal/FluencePeer.ts:79</a></li>
<li>Defined in <a href="https://github.com/fluencelabs/fluence-js/blob/9a26165/src/internal/FluencePeer.ts#L81">src/internal/FluencePeer.ts:81</a></li>
</ul>
</aside>
<div class="tsd-comment tsd-typography">
@ -172,7 +178,7 @@
<div class="tsd-signature tsd-kind-icon">connect<wbr>To<span class="tsd-signature-symbol">:</span> <span class="tsd-signature-type">string</span><span class="tsd-signature-symbol"> | </span><span class="tsd-signature-type">Multiaddr</span><span class="tsd-signature-symbol"> | </span><span class="tsd-signature-type">Node</span></div>
<aside class="tsd-sources">
<ul>
<li>Defined in <a href="https://github.com/fluencelabs/fluence-js/blob/0c32288/src/internal/FluencePeer.ts#L61">internal/FluencePeer.ts:61</a></li>
<li>Defined in <a href="https://github.com/fluencelabs/fluence-js/blob/9a26165/src/internal/FluencePeer.ts#L63">src/internal/FluencePeer.ts:63</a></li>
</ul>
</aside>
<div class="tsd-comment tsd-typography">
@ -194,7 +200,7 @@
<div class="tsd-signature tsd-kind-icon">debug<span class="tsd-signature-symbol">:</span> <span class="tsd-signature-symbol">{ </span>printParticleId<span class="tsd-signature-symbol">?: </span><span class="tsd-signature-type">boolean</span><span class="tsd-signature-symbol"> }</span></div>
<aside class="tsd-sources">
<ul>
<li>Defined in <a href="https://github.com/fluencelabs/fluence-js/blob/0c32288/src/internal/FluencePeer.ts#L108">internal/FluencePeer.ts:108</a></li>
<li>Defined in <a href="https://github.com/fluencelabs/fluence-js/blob/9a26165/src/internal/FluencePeer.ts#L134">src/internal/FluencePeer.ts:134</a></li>
</ul>
</aside>
<div class="tsd-comment tsd-typography">
@ -223,7 +229,7 @@
<div class="tsd-signature tsd-kind-icon">default<wbr>Ttl<wbr>Ms<span class="tsd-signature-symbol">:</span> <span class="tsd-signature-type">number</span></div>
<aside class="tsd-sources">
<ul>
<li>Defined in <a href="https://github.com/fluencelabs/fluence-js/blob/0c32288/src/internal/FluencePeer.ts#L98">internal/FluencePeer.ts:98</a></li>
<li>Defined in <a href="https://github.com/fluencelabs/fluence-js/blob/9a26165/src/internal/FluencePeer.ts#L100">src/internal/FluencePeer.ts:100</a></li>
</ul>
</aside>
<div class="tsd-comment tsd-typography">
@ -240,7 +246,7 @@
<div class="tsd-signature tsd-kind-icon">dial<wbr>Timeout<wbr>Ms<span class="tsd-signature-symbol">:</span> <span class="tsd-signature-type">number</span></div>
<aside class="tsd-sources">
<ul>
<li>Defined in <a href="https://github.com/fluencelabs/fluence-js/blob/0c32288/src/internal/FluencePeer.ts#L91">internal/FluencePeer.ts:91</a></li>
<li>Defined in <a href="https://github.com/fluencelabs/fluence-js/blob/9a26165/src/internal/FluencePeer.ts#L93">src/internal/FluencePeer.ts:93</a></li>
</ul>
</aside>
<div class="tsd-comment tsd-typography">
@ -249,13 +255,60 @@
</div>
</div>
</section>
<section class="tsd-panel tsd-member tsd-kind-property tsd-parent-kind-interface">
<a name="marineJS" class="tsd-anchor"></a>
<h3><span class="tsd-flag ts-flagOptional">Optional</span> marineJS</h3>
<div class="tsd-signature tsd-kind-icon">marineJS<span class="tsd-signature-symbol">:</span> <span class="tsd-signature-symbol">{ </span>avmWasmPath<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">string</span><span class="tsd-signature-symbol">; </span>marineWasmPath<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">string</span><span class="tsd-signature-symbol">; </span>workerScriptPath<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">string</span><span class="tsd-signature-symbol"> }</span></div>
<aside class="tsd-sources">
<ul>
<li>Defined in <a href="https://github.com/fluencelabs/fluence-js/blob/9a26165/src/internal/FluencePeer.ts#L114">src/internal/FluencePeer.ts:114</a></li>
</ul>
</aside>
<div class="tsd-comment tsd-typography">
<div class="lead">
<p>This option allows to specify the location of various dependencies needed for marine-js.
Each key specifies the location of the corresponding dependency.
If Fluence peer is started inside browser the location is treated as the path to the file relative to origin.
IF Fluence peer is started in nodejs the location is treated as the full path to file on the file system.</p>
</div>
</div>
<div class="tsd-type-declaration">
<h4>Type declaration</h4>
<ul class="tsd-parameters">
<li class="tsd-parameter">
<h5>avm<wbr>Wasm<wbr>Path<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">string</span></h5>
<div class="tsd-comment tsd-typography">
<div class="lead">
<p>Configures the path to AVM wasm module</p>
</div>
</div>
</li>
<li class="tsd-parameter">
<h5>marine<wbr>Wasm<wbr>Path<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">string</span></h5>
<div class="tsd-comment tsd-typography">
<div class="lead">
<p>Configures the path to marine-js control wasm module</p>
</div>
</div>
</li>
<li class="tsd-parameter">
<h5>worker<wbr>Script<wbr>Path<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">string</span></h5>
<div class="tsd-comment tsd-typography">
<div class="lead">
<p>Configures path to the marine-js worker script.</p>
</div>
</div>
</li>
</ul>
</div>
</section>
<section class="tsd-panel tsd-member tsd-kind-property tsd-parent-kind-interface">
<a name="skipCheckConnection" class="tsd-anchor"></a>
<h3><span class="tsd-flag ts-flagOptional">Optional</span> skip<wbr>Check<wbr>Connection</h3>
<div class="tsd-signature tsd-kind-icon">skip<wbr>Check<wbr>Connection<span class="tsd-signature-symbol">:</span> <span class="tsd-signature-type">boolean</span></div>
<aside class="tsd-sources">
<ul>
<li>Defined in <a href="https://github.com/fluencelabs/fluence-js/blob/0c32288/src/internal/FluencePeer.ts#L86">internal/FluencePeer.ts:86</a></li>
<li>Defined in <a href="https://github.com/fluencelabs/fluence-js/blob/9a26165/src/internal/FluencePeer.ts#L88">src/internal/FluencePeer.ts:88</a></li>
</ul>
</aside>
<div class="tsd-comment tsd-typography">
@ -316,6 +369,9 @@
<li class=" tsd-kind-property tsd-parent-kind-interface">
<a href="PeerConfig.html#dialTimeoutMs" class="tsd-kind-icon">dial<wbr>Timeout<wbr>Ms</a>
</li>
<li class=" tsd-kind-property tsd-parent-kind-interface">
<a href="PeerConfig.html#marineJS" class="tsd-kind-icon">marineJS</a>
</li>
<li class=" tsd-kind-property tsd-parent-kind-interface">
<a href="PeerConfig.html#skipCheckConnection" class="tsd-kind-icon">skip<wbr>Check<wbr>Connection</a>
</li>
@ -335,6 +391,15 @@
<li class=" tsd-kind-variable">
<a href="../modules.html#Fluence" class="tsd-kind-icon">Fluence</a>
</li>
<li class=" tsd-kind-function tsd-is-external">
<a href="../modules.html#loadWasmFromFileSystem" class="tsd-kind-icon">load<wbr>Wasm<wbr>From<wbr>File<wbr>System</a>
</li>
<li class=" tsd-kind-function tsd-is-external">
<a href="../modules.html#loadWasmFromNpmPackage" class="tsd-kind-icon">load<wbr>Wasm<wbr>From<wbr>Npm<wbr>Package</a>
</li>
<li class=" tsd-kind-function tsd-is-external">
<a href="../modules.html#loadWasmFromServer" class="tsd-kind-icon">load<wbr>Wasm<wbr>From<wbr>Server</a>
</li>
<li class=" tsd-kind-function">
<a href="../modules.html#setLogLevel" class="tsd-kind-icon">set<wbr>Log<wbr>Level</a>
</li>

View File

@ -104,7 +104,7 @@
<div class="tsd-signature tsd-kind-icon">is<wbr>Connected<span class="tsd-signature-symbol">:</span> <span class="tsd-signature-type">Boolean</span></div>
<aside class="tsd-sources">
<ul>
<li>Defined in <a href="https://github.com/fluencelabs/fluence-js/blob/0c32288/src/internal/FluencePeer.ts#L129">internal/FluencePeer.ts:129</a></li>
<li>Defined in <a href="https://github.com/fluencelabs/fluence-js/blob/9a26165/src/internal/FluencePeer.ts#L155">src/internal/FluencePeer.ts:155</a></li>
</ul>
</aside>
<div class="tsd-comment tsd-typography">
@ -119,7 +119,7 @@
<div class="tsd-signature tsd-kind-icon">is<wbr>Initialized<span class="tsd-signature-symbol">:</span> <span class="tsd-signature-type">Boolean</span></div>
<aside class="tsd-sources">
<ul>
<li>Defined in <a href="https://github.com/fluencelabs/fluence-js/blob/0c32288/src/internal/FluencePeer.ts#L124">internal/FluencePeer.ts:124</a></li>
<li>Defined in <a href="https://github.com/fluencelabs/fluence-js/blob/9a26165/src/internal/FluencePeer.ts#L150">src/internal/FluencePeer.ts:150</a></li>
</ul>
</aside>
<div class="tsd-comment tsd-typography">
@ -134,7 +134,7 @@
<div class="tsd-signature tsd-kind-icon">peer<wbr>Id<span class="tsd-signature-symbol">:</span> <span class="tsd-signature-type">string</span></div>
<aside class="tsd-sources">
<ul>
<li>Defined in <a href="https://github.com/fluencelabs/fluence-js/blob/0c32288/src/internal/FluencePeer.ts#L134">internal/FluencePeer.ts:134</a></li>
<li>Defined in <a href="https://github.com/fluencelabs/fluence-js/blob/9a26165/src/internal/FluencePeer.ts#L160">src/internal/FluencePeer.ts:160</a></li>
</ul>
</aside>
<div class="tsd-comment tsd-typography">
@ -149,7 +149,7 @@
<div class="tsd-signature tsd-kind-icon">relay<wbr>Peer<wbr>Id<span class="tsd-signature-symbol">:</span> <span class="tsd-signature-type">string</span></div>
<aside class="tsd-sources">
<ul>
<li>Defined in <a href="https://github.com/fluencelabs/fluence-js/blob/0c32288/src/internal/FluencePeer.ts#L139">internal/FluencePeer.ts:139</a></li>
<li>Defined in <a href="https://github.com/fluencelabs/fluence-js/blob/9a26165/src/internal/FluencePeer.ts#L165">src/internal/FluencePeer.ts:165</a></li>
</ul>
</aside>
<div class="tsd-comment tsd-typography">
@ -212,6 +212,15 @@
<li class=" tsd-kind-variable">
<a href="../modules.html#Fluence" class="tsd-kind-icon">Fluence</a>
</li>
<li class=" tsd-kind-function tsd-is-external">
<a href="../modules.html#loadWasmFromFileSystem" class="tsd-kind-icon">load<wbr>Wasm<wbr>From<wbr>File<wbr>System</a>
</li>
<li class=" tsd-kind-function tsd-is-external">
<a href="../modules.html#loadWasmFromNpmPackage" class="tsd-kind-icon">load<wbr>Wasm<wbr>From<wbr>Npm<wbr>Package</a>
</li>
<li class=" tsd-kind-function tsd-is-external">
<a href="../modules.html#loadWasmFromServer" class="tsd-kind-icon">load<wbr>Wasm<wbr>From<wbr>Server</a>
</li>
<li class=" tsd-kind-function">
<a href="../modules.html#setLogLevel" class="tsd-kind-icon">set<wbr>Log<wbr>Level</a>
</li>

View File

@ -92,6 +92,9 @@
<section class="tsd-index-section ">
<h3>Functions</h3>
<ul class="tsd-index-list">
<li class="tsd-kind-function tsd-is-external"><a href="modules.html#loadWasmFromFileSystem" class="tsd-kind-icon">load<wbr>Wasm<wbr>From<wbr>File<wbr>System</a></li>
<li class="tsd-kind-function tsd-is-external"><a href="modules.html#loadWasmFromNpmPackage" class="tsd-kind-icon">load<wbr>Wasm<wbr>From<wbr>Npm<wbr>Package</a></li>
<li class="tsd-kind-function tsd-is-external"><a href="modules.html#loadWasmFromServer" class="tsd-kind-icon">load<wbr>Wasm<wbr>From<wbr>Server</a></li>
<li class="tsd-kind-function"><a href="modules.html#setLogLevel" class="tsd-kind-icon">set<wbr>Log<wbr>Level</a></li>
</ul>
</section>
@ -106,7 +109,7 @@
<div class="tsd-signature tsd-kind-icon">Avm<wbr>Loglevel<span class="tsd-signature-symbol">:</span> <span class="tsd-signature-type">LogLevel</span></div>
<aside class="tsd-sources">
<ul>
<li>Defined in <a href="https://github.com/fluencelabs/fluence-js/blob/0c32288/src/internal/FluencePeer.ts#L45">internal/FluencePeer.ts:45</a></li>
<li>Defined in <a href="https://github.com/fluencelabs/fluence-js/blob/9a26165/src/internal/FluencePeer.ts#L47">src/internal/FluencePeer.ts:47</a></li>
</ul>
</aside>
<div class="tsd-comment tsd-typography">
@ -122,7 +125,7 @@
<div class="tsd-signature tsd-kind-icon">Peer<wbr>IdB58<span class="tsd-signature-symbol">:</span> <span class="tsd-signature-type">string</span></div>
<aside class="tsd-sources">
<ul>
<li>Defined in <a href="https://github.com/fluencelabs/fluence-js/blob/0c32288/src/internal/commonTypes.ts#L22">internal/commonTypes.ts:22</a></li>
<li>Defined in <a href="https://github.com/fluencelabs/fluence-js/blob/9a26165/src/internal/commonTypes.ts#L22">src/internal/commonTypes.ts:22</a></li>
</ul>
</aside>
<div class="tsd-comment tsd-typography">
@ -137,10 +140,10 @@
<section class="tsd-panel tsd-member tsd-kind-variable">
<a name="Fluence" class="tsd-anchor"></a>
<h3><span class="tsd-flag ts-flagConst">Const</span> Fluence</h3>
<div class="tsd-signature tsd-kind-icon">Fluence<span class="tsd-signature-symbol">:</span> <span class="tsd-signature-symbol">{ </span>getPeer<span class="tsd-signature-symbol">: </span><span class="tsd-signature-symbol">(</span><span class="tsd-signature-symbol">)</span><span class="tsd-signature-symbol"> =&gt; </span><a href="classes/FluencePeer.html" class="tsd-signature-type" data-tsd-kind="Class">FluencePeer</a><span class="tsd-signature-symbol">; </span>getStatus<span class="tsd-signature-symbol">: </span><span class="tsd-signature-symbol">(</span><span class="tsd-signature-symbol">)</span><span class="tsd-signature-symbol"> =&gt; </span><a href="interfaces/PeerStatus.html" class="tsd-signature-type" data-tsd-kind="Interface">PeerStatus</a><span class="tsd-signature-symbol">; </span>start<span class="tsd-signature-symbol">: </span><span class="tsd-signature-symbol">(</span>config<span class="tsd-signature-symbol">?: </span><a href="interfaces/PeerConfig.html" class="tsd-signature-type" data-tsd-kind="Interface">PeerConfig</a><span class="tsd-signature-symbol">)</span><span class="tsd-signature-symbol"> =&gt; </span><span class="tsd-signature-type">Promise</span><span class="tsd-signature-symbol">&lt;</span><span class="tsd-signature-type">void</span><span class="tsd-signature-symbol">&gt;</span><span class="tsd-signature-symbol">; </span>stop<span class="tsd-signature-symbol">: </span><span class="tsd-signature-symbol">(</span><span class="tsd-signature-symbol">)</span><span class="tsd-signature-symbol"> =&gt; </span><span class="tsd-signature-type">Promise</span><span class="tsd-signature-symbol">&lt;</span><span class="tsd-signature-type">void</span><span class="tsd-signature-symbol">&gt;</span><span class="tsd-signature-symbol"> }</span><span class="tsd-signature-symbol"> = ...</span></div>
<div class="tsd-signature tsd-kind-icon">Fluence<span class="tsd-signature-symbol">:</span> <span class="tsd-signature-symbol">{ </span>getPeer<span class="tsd-signature-symbol">: </span><span class="tsd-signature-symbol">(</span><span class="tsd-signature-symbol">)</span><span class="tsd-signature-symbol"> =&gt; </span><a href="classes/FluencePeer.html" class="tsd-signature-type" data-tsd-kind="Class">FluencePeer</a><span class="tsd-signature-symbol">; </span>getStatus<span class="tsd-signature-symbol">: </span><span class="tsd-signature-symbol">(</span><span class="tsd-signature-symbol">)</span><span class="tsd-signature-symbol"> =&gt; </span><a href="interfaces/PeerStatus.html" class="tsd-signature-type" data-tsd-kind="Interface">PeerStatus</a><span class="tsd-signature-symbol">; </span>registerMarineService<span class="tsd-signature-symbol">: </span><span class="tsd-signature-symbol">(</span>wasm<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">SharedArrayBuffer</span><span class="tsd-signature-symbol"> | </span><span class="tsd-signature-type">Buffer</span>, serviceId<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">string</span><span class="tsd-signature-symbol">)</span><span class="tsd-signature-symbol"> =&gt; </span><span class="tsd-signature-type">Promise</span><span class="tsd-signature-symbol">&lt;</span><span class="tsd-signature-type">void</span><span class="tsd-signature-symbol">&gt;</span><span class="tsd-signature-symbol">; </span>removeMarineService<span class="tsd-signature-symbol">: </span><span class="tsd-signature-symbol">(</span>serviceId<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">string</span><span class="tsd-signature-symbol">)</span><span class="tsd-signature-symbol"> =&gt; </span><span class="tsd-signature-type">void</span><span class="tsd-signature-symbol">; </span>start<span class="tsd-signature-symbol">: </span><span class="tsd-signature-symbol">(</span>config<span class="tsd-signature-symbol">?: </span><a href="interfaces/PeerConfig.html" class="tsd-signature-type" data-tsd-kind="Interface">PeerConfig</a><span class="tsd-signature-symbol">)</span><span class="tsd-signature-symbol"> =&gt; </span><span class="tsd-signature-type">Promise</span><span class="tsd-signature-symbol">&lt;</span><span class="tsd-signature-type">void</span><span class="tsd-signature-symbol">&gt;</span><span class="tsd-signature-symbol">; </span>stop<span class="tsd-signature-symbol">: </span><span class="tsd-signature-symbol">(</span><span class="tsd-signature-symbol">)</span><span class="tsd-signature-symbol"> =&gt; </span><span class="tsd-signature-type">Promise</span><span class="tsd-signature-symbol">&lt;</span><span class="tsd-signature-type">void</span><span class="tsd-signature-symbol">&gt;</span><span class="tsd-signature-symbol"> }</span><span class="tsd-signature-symbol"> = ...</span></div>
<aside class="tsd-sources">
<ul>
<li>Defined in <a href="https://github.com/fluencelabs/fluence-js/blob/0c32288/src/index.ts#L36">index.ts:36</a></li>
<li>Defined in <a href="https://github.com/fluencelabs/fluence-js/blob/9a26165/src/index.ts#L37">src/index.ts:37</a></li>
</ul>
</aside>
<div class="tsd-comment tsd-typography">
@ -193,6 +196,76 @@
</li>
</ul>
</li>
<li class="tsd-parameter">
<h5>register<wbr>Marine<wbr>Service<span class="tsd-signature-symbol">: </span><span class="tsd-signature-symbol">(</span>wasm<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">SharedArrayBuffer</span><span class="tsd-signature-symbol"> | </span><span class="tsd-signature-type">Buffer</span>, serviceId<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">string</span><span class="tsd-signature-symbol">)</span><span class="tsd-signature-symbol"> =&gt; </span><span class="tsd-signature-type">Promise</span><span class="tsd-signature-symbol">&lt;</span><span class="tsd-signature-type">void</span><span class="tsd-signature-symbol">&gt;</span></h5>
<ul class="tsd-parameters">
<li class="tsd-parameter-signature">
<ul class="tsd-signatures tsd-kind-type-literal tsd-parent-kind-type-literal">
<li class="tsd-signature tsd-kind-icon"><span class="tsd-signature-symbol">(</span>wasm<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">SharedArrayBuffer</span><span class="tsd-signature-symbol"> | </span><span class="tsd-signature-type">Buffer</span>, serviceId<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">string</span><span class="tsd-signature-symbol">)</span><span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">Promise</span><span class="tsd-signature-symbol">&lt;</span><span class="tsd-signature-type">void</span><span class="tsd-signature-symbol">&gt;</span></li>
</ul>
<ul class="tsd-descriptions">
<li class="tsd-description">
<div class="tsd-comment tsd-typography">
<div class="lead">
<p>Registers marine service within the default Fluence peer from wasm file.
Following helper functions can be used to load wasm files:</p>
<ul>
<li>loadWasmFromFileSystem</li>
<li>loadWasmFromNpmPackage</li>
<li>loadWasmFromServer</li>
</ul>
</div>
</div>
<h4 class="tsd-parameters-title">Parameters</h4>
<ul class="tsd-parameters">
<li>
<h5>wasm: <span class="tsd-signature-type">SharedArrayBuffer</span><span class="tsd-signature-symbol"> | </span><span class="tsd-signature-type">Buffer</span></h5>
<div class="tsd-comment tsd-typography">
<p>buffer with the wasm file for service</p>
</div>
</li>
<li>
<h5>serviceId: <span class="tsd-signature-type">string</span></h5>
<div class="tsd-comment tsd-typography">
<p>the service id by which the service can be accessed in aqua</p>
</div>
</li>
</ul>
<h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">Promise</span><span class="tsd-signature-symbol">&lt;</span><span class="tsd-signature-type">void</span><span class="tsd-signature-symbol">&gt;</span></h4>
</li>
</ul>
</li>
</ul>
</li>
<li class="tsd-parameter">
<h5>remove<wbr>Marine<wbr>Service<span class="tsd-signature-symbol">: </span><span class="tsd-signature-symbol">(</span>serviceId<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">string</span><span class="tsd-signature-symbol">)</span><span class="tsd-signature-symbol"> =&gt; </span><span class="tsd-signature-type">void</span></h5>
<ul class="tsd-parameters">
<li class="tsd-parameter-signature">
<ul class="tsd-signatures tsd-kind-type-literal tsd-parent-kind-type-literal">
<li class="tsd-signature tsd-kind-icon"><span class="tsd-signature-symbol">(</span>serviceId<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">string</span><span class="tsd-signature-symbol">)</span><span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">void</span></li>
</ul>
<ul class="tsd-descriptions">
<li class="tsd-description">
<div class="tsd-comment tsd-typography">
<div class="lead">
<p>Removes the specified marine service from the default Fluence peer</p>
</div>
</div>
<h4 class="tsd-parameters-title">Parameters</h4>
<ul class="tsd-parameters">
<li>
<h5>serviceId: <span class="tsd-signature-type">string</span></h5>
<div class="tsd-comment tsd-typography">
<p>the service id to remove</p>
</div>
</li>
</ul>
<h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">void</span></h4>
</li>
</ul>
</li>
</ul>
</li>
<li class="tsd-parameter">
<h5>start<span class="tsd-signature-symbol">: </span><span class="tsd-signature-symbol">(</span>config<span class="tsd-signature-symbol">?: </span><a href="interfaces/PeerConfig.html" class="tsd-signature-type" data-tsd-kind="Interface">PeerConfig</a><span class="tsd-signature-symbol">)</span><span class="tsd-signature-symbol"> =&gt; </span><span class="tsd-signature-type">Promise</span><span class="tsd-signature-symbol">&lt;</span><span class="tsd-signature-type">void</span><span class="tsd-signature-symbol">&gt;</span></h5>
<ul class="tsd-parameters">
@ -250,6 +323,116 @@
</section>
<section class="tsd-panel-group tsd-member-group ">
<h2>Functions</h2>
<section class="tsd-panel tsd-member tsd-kind-function tsd-is-external">
<a name="loadWasmFromFileSystem" class="tsd-anchor"></a>
<h3><span class="tsd-flag ts-flagConst">Const</span> load<wbr>Wasm<wbr>From<wbr>File<wbr>System</h3>
<ul class="tsd-signatures tsd-kind-function tsd-is-external">
<li class="tsd-signature tsd-kind-icon">load<wbr>Wasm<wbr>From<wbr>File<wbr>System<span class="tsd-signature-symbol">(</span>filePath<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">string</span><span class="tsd-signature-symbol">)</span><span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">Promise</span><span class="tsd-signature-symbol">&lt;</span><span class="tsd-signature-type">SharedArrayBuffer</span><span class="tsd-signature-symbol">&gt;</span></li>
</ul>
<ul class="tsd-descriptions">
<li class="tsd-description">
<aside class="tsd-sources">
<ul>
<li>Defined in node_modules/@fluencelabs/marine-js/dist/loadWasmHelpers.d.ts:28</li>
</ul>
</aside>
<div class="tsd-comment tsd-typography">
<div class="lead">
<p>Load wasm file from the file system. Only works in nodejs environment.
The functions returns SharedArrayBuffer compatible with FluenceAppService methods.</p>
</div>
</div>
<h4 class="tsd-parameters-title">Parameters</h4>
<ul class="tsd-parameters">
<li>
<h5>filePath: <span class="tsd-signature-type">string</span></h5>
<div class="tsd-comment tsd-typography">
<p>path to the wasm file</p>
</div>
</li>
</ul>
<h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">Promise</span><span class="tsd-signature-symbol">&lt;</span><span class="tsd-signature-type">SharedArrayBuffer</span><span class="tsd-signature-symbol">&gt;</span></h4>
<p>SharedArrayBuffer with the wasm file</p>
</li>
</ul>
</section>
<section class="tsd-panel tsd-member tsd-kind-function tsd-is-external">
<a name="loadWasmFromNpmPackage" class="tsd-anchor"></a>
<h3><span class="tsd-flag ts-flagConst">Const</span> load<wbr>Wasm<wbr>From<wbr>Npm<wbr>Package</h3>
<ul class="tsd-signatures tsd-kind-function tsd-is-external">
<li class="tsd-signature tsd-kind-icon">load<wbr>Wasm<wbr>From<wbr>Npm<wbr>Package<span class="tsd-signature-symbol">(</span>source<span class="tsd-signature-symbol">: </span><span class="tsd-signature-symbol">{ </span>file<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">string</span><span class="tsd-signature-symbol">; </span>package<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">string</span><span class="tsd-signature-symbol"> }</span><span class="tsd-signature-symbol">)</span><span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">Promise</span><span class="tsd-signature-symbol">&lt;</span><span class="tsd-signature-type">SharedArrayBuffer</span><span class="tsd-signature-symbol">&gt;</span></li>
</ul>
<ul class="tsd-descriptions">
<li class="tsd-description">
<aside class="tsd-sources">
<ul>
<li>Defined in node_modules/@fluencelabs/marine-js/dist/loadWasmHelpers.d.ts:18</li>
</ul>
</aside>
<div class="tsd-comment tsd-typography">
<div class="lead">
<p>Load wasm file from npm package. Only works in nodejs environment.
The function returns SharedArrayBuffer compatible with FluenceAppService methods.</p>
</div>
</div>
<h4 class="tsd-parameters-title">Parameters</h4>
<ul class="tsd-parameters">
<li>
<h5>source: <span class="tsd-signature-symbol">{ </span>file<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">string</span><span class="tsd-signature-symbol">; </span>package<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">string</span><span class="tsd-signature-symbol"> }</span></h5>
<div class="tsd-comment tsd-typography">
<p>object specifying the source of the file. Consist two fields: package name and file path.</p>
</div>
<ul class="tsd-parameters">
<li class="tsd-parameter">
<h5>file<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">string</span></h5>
</li>
<li class="tsd-parameter">
<h5>package<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">string</span></h5>
</li>
</ul>
</li>
</ul>
<h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">Promise</span><span class="tsd-signature-symbol">&lt;</span><span class="tsd-signature-type">SharedArrayBuffer</span><span class="tsd-signature-symbol">&gt;</span></h4>
<p>SharedArrayBuffer with the wasm file</p>
</li>
</ul>
</section>
<section class="tsd-panel tsd-member tsd-kind-function tsd-is-external">
<a name="loadWasmFromServer" class="tsd-anchor"></a>
<h3><span class="tsd-flag ts-flagConst">Const</span> load<wbr>Wasm<wbr>From<wbr>Server</h3>
<ul class="tsd-signatures tsd-kind-function tsd-is-external">
<li class="tsd-signature tsd-kind-icon">load<wbr>Wasm<wbr>From<wbr>Server<span class="tsd-signature-symbol">(</span>filePath<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">string</span><span class="tsd-signature-symbol">)</span><span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">Promise</span><span class="tsd-signature-symbol">&lt;</span><span class="tsd-signature-type">SharedArrayBuffer</span><span class="tsd-signature-symbol"> | </span><span class="tsd-signature-type">Buffer</span><span class="tsd-signature-symbol">&gt;</span></li>
</ul>
<ul class="tsd-descriptions">
<li class="tsd-description">
<aside class="tsd-sources">
<ul>
<li>Defined in node_modules/@fluencelabs/marine-js/dist/loadWasmHelpers.d.ts:11</li>
</ul>
</aside>
<div class="tsd-comment tsd-typography">
<div class="lead">
<p>Load wasm file from the server. Only works in browsers.
The function will try load file into SharedArrayBuffer if the site is cross-origin isolated.
Otherwise the return value fallbacks to Buffer which is less performant but is still compatible with FluenceAppService methods.
We strongly recommend to set-up cross-origin headers. For more details see: See <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/SharedArrayBuffer#security_requirements">https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/SharedArrayBuffer#security_requirements</a>
Filename is relative to current origin.</p>
</div>
</div>
<h4 class="tsd-parameters-title">Parameters</h4>
<ul class="tsd-parameters">
<li>
<h5>filePath: <span class="tsd-signature-type">string</span></h5>
<div class="tsd-comment tsd-typography">
<p>path to the wasm file relative to current origin</p>
</div>
</li>
</ul>
<h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">Promise</span><span class="tsd-signature-symbol">&lt;</span><span class="tsd-signature-type">SharedArrayBuffer</span><span class="tsd-signature-symbol"> | </span><span class="tsd-signature-type">Buffer</span><span class="tsd-signature-symbol">&gt;</span></h4>
<p>Either SharedArrayBuffer or Buffer with the wasm file</p>
</li>
</ul>
</section>
<section class="tsd-panel tsd-member tsd-kind-function">
<a name="setLogLevel" class="tsd-anchor"></a>
<h3><span class="tsd-flag ts-flagConst">Const</span> set<wbr>Log<wbr>Level</h3>
@ -260,7 +443,7 @@
<li class="tsd-description">
<aside class="tsd-sources">
<ul>
<li>Defined in <a href="https://github.com/fluencelabs/fluence-js/blob/0c32288/src/index.ts#L25">index.ts:25</a></li>
<li>Defined in <a href="https://github.com/fluencelabs/fluence-js/blob/9a26165/src/index.ts#L26">src/index.ts:26</a></li>
</ul>
</aside>
<h4 class="tsd-parameters-title">Parameters</h4>
@ -309,6 +492,15 @@
<li class=" tsd-kind-variable">
<a href="modules.html#Fluence" class="tsd-kind-icon">Fluence</a>
</li>
<li class=" tsd-kind-function tsd-is-external">
<a href="modules.html#loadWasmFromFileSystem" class="tsd-kind-icon">load<wbr>Wasm<wbr>From<wbr>File<wbr>System</a>
</li>
<li class=" tsd-kind-function tsd-is-external">
<a href="modules.html#loadWasmFromNpmPackage" class="tsd-kind-icon">load<wbr>Wasm<wbr>From<wbr>Npm<wbr>Package</a>
</li>
<li class=" tsd-kind-function tsd-is-external">
<a href="modules.html#loadWasmFromServer" class="tsd-kind-icon">load<wbr>Wasm<wbr>From<wbr>Server</a>
</li>
<li class=" tsd-kind-function">
<a href="modules.html#setLogLevel" class="tsd-kind-icon">set<wbr>Log<wbr>Level</a>
</li>

6219
package-lock.json generated

File diff suppressed because it is too large Load Diff

View File

@ -19,15 +19,14 @@
"author": "Fluence Labs",
"license": "Apache-2.0",
"bin": {
"copy-avm-public": "dist/tools/copyAvmPublic.js"
"copy-marine": "dist/tools/copyMarine.js"
},
"dependencies": {
"@chainsafe/libp2p-noise": "^4.1.1",
"@fluencelabs/avm": "^0.21.3",
"@fluencelabs/avm-runner-background": "0.2.0",
"@fluencelabs/avm-runner-interface": "^0.2.0",
"@fluencelabs/marine-js": "0.1.0",
"@fluencelabs/avm": "0.23.0",
"@fluencelabs/marine-js": "0.2.3",
"async": "3.2.0",
"browser-or-node": "^2.0.0",
"bs58": "4.0.1",
"buffer": "^6.0.3",
"cids": "0.8.1",

View File

@ -0,0 +1,150 @@
/**
*
* This file is auto-generated. Do not edit manually: changes may be erased.
* Generated by Aqua compiler: https://github.com/fluencelabs/aqua/.
* If you find any bugs, please write an issue on GitHub: https://github.com/fluencelabs/aqua/issues
* Aqua version: 0.7.0-285
*
*/
import { Fluence, FluencePeer } from '../../index';
import { CallParams, callFunction, registerService } from '../../internal/compilerSupport/v3';
// Services
export interface GreetingDef {
greeting: (name: string, callParams: CallParams<'name'>) => string | Promise<string>;
greeting_record: (
callParams: CallParams<null>,
) => { num: number; str: string } | Promise<{ num: number; str: string }>;
}
export function registerGreeting(service: GreetingDef): void;
export function registerGreeting(serviceId: string, service: GreetingDef): void;
export function registerGreeting(peer: FluencePeer, service: GreetingDef): void;
export function registerGreeting(peer: FluencePeer, serviceId: string, service: GreetingDef): void;
export function registerGreeting(...args: any) {
registerService(args, {
defaultServiceId: 'greeting',
functions: {
tag: 'labeledProduct',
fields: {
greeting: {
tag: 'arrow',
domain: {
tag: 'labeledProduct',
fields: {
name: {
tag: 'scalar',
name: 'string',
},
},
},
codomain: {
tag: 'unlabeledProduct',
items: [
{
tag: 'scalar',
name: 'string',
},
],
},
},
greeting_record: {
tag: 'arrow',
domain: {
tag: 'nil',
},
codomain: {
tag: 'unlabeledProduct',
items: [
{
tag: 'struct',
name: 'GreetingRecord',
fields: {
num: {
tag: 'scalar',
name: 'i32',
},
str: {
tag: 'scalar',
name: 'string',
},
},
},
],
},
},
},
},
});
}
// Functions
export function call(arg: string, config?: { ttl?: number }): Promise<string>;
export function call(peer: FluencePeer, arg: string, config?: { ttl?: number }): Promise<string>;
export function call(...args: any) {
let script = `
(xor
(seq
(seq
(seq
(seq
(seq
(call %init_peer_id% ("getDataSrv" "-relay-") [] -relay-)
(call %init_peer_id% ("getDataSrv" "arg") [] arg)
)
(call %init_peer_id% ("greeting" "greeting") [arg] res1)
)
(call %init_peer_id% ("greeting" "greeting") [res1] res2)
)
(call %init_peer_id% ("greeting" "greeting") [res2] res3)
)
(xor
(call %init_peer_id% ("callbackSrv" "response") [res3])
(call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 1])
)
)
(call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 2])
)
`;
return callFunction(
args,
{
functionName: 'call',
arrow: {
tag: 'arrow',
domain: {
tag: 'labeledProduct',
fields: {
arg: {
tag: 'scalar',
name: 'string',
},
},
},
codomain: {
tag: 'unlabeledProduct',
items: [
{
tag: 'scalar',
name: 'string',
},
],
},
},
names: {
relay: '-relay-',
getDataSrv: 'getDataSrv',
callbackSrv: 'callbackSrv',
responseSrv: 'callbackSrv',
responseFnName: 'response',
errorHandlingSrv: 'errorHandlingSrv',
errorFnName: 'error',
},
},
script,
);
}

Binary file not shown.

View File

@ -0,0 +1,25 @@
import { Fluence } from '../../index';
import fs from 'fs';
import { call } from '../_aqua/marine-js';
describe('Marine js tests', () => {
beforeEach(async () => {
await Fluence.start();
});
afterEach(async () => {
await Fluence.stop();
});
it('should call marine service correctly', async () => {
// arrange
const wasm = fs.readFileSync(__dirname + '/greeting.wasm');
await Fluence.registerMarineService(wasm, 'greeting');
// act
const res = await call('test');
// assert
expect(res).toBe('Hi, Hi, Hi, test');
});
});

View File

@ -1,264 +0,0 @@
import { CallServiceData, ResultCodes } from '../../internal/commonTypes';
import { CallServiceHandler } from '../../internal/compilerSupport/LegacyCallServiceHandler';
const req = (): CallServiceData => ({
serviceId: 'service',
fnName: 'fn name',
args: [],
tetraplets: [],
particleContext: {
particleId: 'id',
initPeerId: 'init peer id',
timestamp: 595951200,
ttl: 595961200,
signature: 'sig',
},
});
const res = () => ({
res,
});
describe('Call service handler tests', () => {
it('Should work without middlewares', () => {
// arrange
const handler = new CallServiceHandler();
// act
const res = handler.execute(req());
// assert
expect(res).not.toBeUndefined();
});
it('Should work with no-op middleware', () => {
// arrange
const handler = new CallServiceHandler();
handler.use((req, res, next) => {
next();
});
// act
const res = handler.execute(req());
// assert
expect(res).not.toBeUndefined();
});
it('Should work with two overlapping middlewares', () => {
// arrange
const handler = new CallServiceHandler();
handler
.use((req, res, next) => {
res.result = { hello: 'world' };
})
.use((req, res, next) => {
res.result = { hello: 'incorect' };
next();
});
// act
const res = handler.execute(req());
// assert
expect(res).toMatchObject({
result: { hello: 'world' },
});
});
it('Should work with two NON-overlapping middlewares', () => {
// arrange
const handler = new CallServiceHandler();
handler
.use((req, res, next) => {
res.result = {};
next();
})
.use((req, res, next) => {
(res.result as any).name = 'john';
next();
})
.use((req, res, next) => {
(res.result as any).color = 'red';
next();
});
// act
const res = handler.execute(req());
// assert
expect(res).toMatchObject({
result: { name: 'john', color: 'red' },
});
});
describe('Service handler tests', () => {
it('Should register service function', () => {
// arrange
const handler = new CallServiceHandler();
handler.on('service', 'function', (args) => {
return { called: args };
});
// act
const res = handler.execute({
...req(),
serviceId: 'service',
fnName: 'function',
args: ['hello', 'world'],
});
// assert
expect(res).toMatchObject({
retCode: ResultCodes.success,
result: { called: ['hello', 'world'] },
});
});
it('Should register event', async () => {
// arrange
const handler = new CallServiceHandler();
const returnPromise = new Promise((resolve) => {
handler.onEvent('service', 'function', (args) => {
resolve({ called: args });
});
});
handler.onEvent('service', 'function', (args) => {
return { called: args };
});
// act
const res = handler.execute({
...req(),
serviceId: 'service',
fnName: 'function',
args: ['hello', 'world'],
});
// assert
await expect(returnPromise).resolves.toMatchObject({ called: ['hello', 'world'] });
});
it('Should register multiple service functions', () => {
// arrange
const handler = new CallServiceHandler();
handler.on('service', 'function1', (args) => {
return 'called function1';
});
handler.on('service', 'function2', (args) => {
return 'called function2';
});
// act
const res1 = handler.execute({
...req(),
serviceId: 'service',
fnName: 'function1',
});
const res2 = handler.execute({
...req(),
serviceId: 'service',
fnName: 'function2',
});
// assert
expect(res1).toMatchObject({
retCode: ResultCodes.success,
result: 'called function1',
});
expect(res2).toMatchObject({
retCode: ResultCodes.success,
result: 'called function2',
});
});
it('Should override previous function registration', () => {
// arrange
const handler = new CallServiceHandler();
handler.on('service', 'function', (args) => {
return { called: args };
});
handler.on('service', 'function', (args) => {
return 'overridden';
});
// act
const res = handler.execute({
...req(),
serviceId: 'service',
fnName: 'function',
});
// assert
expect(res).toMatchObject({
retCode: ResultCodes.success,
result: 'overridden',
});
});
});
describe('Middleware combination tests', () => {
it('Should work with NON overlapping function registration', () => {
// arrange
const base = new CallServiceHandler();
base.on('service', 'function1', (args) => {
return 'called function1';
});
const another = new CallServiceHandler();
base.on('service', 'function2', (args) => {
return 'called function2';
});
base.combineWith(another);
// act
const res1 = base.execute({
...req(),
serviceId: 'service',
fnName: 'function1',
});
const res2 = base.execute({
...req(),
serviceId: 'service',
fnName: 'function2',
});
// assert
expect(res1).toMatchObject({
retCode: ResultCodes.success,
result: 'called function1',
});
expect(res2).toMatchObject({
retCode: ResultCodes.success,
result: 'called function2',
});
});
it('Should work with overlapping function registration', () => {
// arrange
const base = new CallServiceHandler();
base.on('service', 'function', (args) => {
return { called: args };
});
const another = new CallServiceHandler();
another.on('service', 'function', (args) => {
return 'overridden';
});
base.combineWith(another);
// act
const res = base.execute({
...req(),
serviceId: 'service',
fnName: 'function',
});
// assert
expect(res).toMatchObject({
retCode: ResultCodes.success,
result: 'overridden',
});
});
});
});

View File

@ -21,6 +21,7 @@ export { PeerStatus } from './internal/FluencePeer';
export { KeyPair } from './internal/KeyPair';
export { FluencePeer, AvmLoglevel, PeerConfig } from './internal/FluencePeer';
export { PeerIdB58, CallParams } from './internal/commonTypes';
export { loadWasmFromFileSystem, loadWasmFromNpmPackage, loadWasmFromServer } from '@fluencelabs/marine-js';
export const setLogLevel = (level: LogLevelDesc) => {
log.setLevel(level);
@ -66,4 +67,25 @@ export const Fluence = {
getPeer: (): FluencePeer => {
return defaultPeer;
},
/**
* Registers marine service within the default Fluence peer from wasm file.
* Following helper functions can be used to load wasm files:
* * loadWasmFromFileSystem
* * loadWasmFromNpmPackage
* * loadWasmFromServer
* @param wasm - buffer with the wasm file for service
* @param serviceId - the service id by which the service can be accessed in aqua
*/
registerMarineService: (wasm: SharedArrayBuffer | Buffer, serviceId: string): Promise<void> => {
return defaultPeer.registerMarineService(wasm, serviceId);
},
/**
* Removes the specified marine service from the default Fluence peer
* @param serviceId - the service id to remove
*/
removeMarineService: (serviceId: string): void => {
defaultPeer.removeMarineService(serviceId);
},
};

View File

@ -1,3 +1,19 @@
/*
* 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 { isBrowser } from 'browser-or-node';
import { Buffer as BufferPolyfill } from 'buffer';

View File

@ -24,11 +24,13 @@ import { throwIfNotSupported, dataToString, jsonify } from './utils';
import { concatMap, filter, pipe, Subject, tap } from 'rxjs';
import log from 'loglevel';
import { builtInServices } from './builtins/common';
import { AvmRunner, InterpreterResult, LogLevel } from '@fluencelabs/avm-runner-interface';
import { AvmRunnerBackground } from '@fluencelabs/avm-runner-background';
import { defaultSigGuard, Sig } from './builtins/Sig';
import { registerSig } from './_aqua/services';
import Buffer from './Buffer';
import { FluenceAppService, loadDefaults, loadWasmFromFileSystem, loadWasmFromServer } from '@fluencelabs/marine-js';
import { AVM, AvmRunner } from './avm';
import { isBrowser, isNode } from 'browser-or-node';
import { InterpreterResult, LogLevel } from '@fluencelabs/avm';
/**
* Node of the Fluence network specified as a pair of node's multiaddr and it's peer id
@ -98,10 +100,34 @@ export interface PeerConfig {
defaultTtlMs?: number;
/**
* Plugable AVM runner implementation. If not specified AvmBackgroundRunner will be used
* @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.
* If Fluence peer is started inside browser the location is treated as the path to the file relative to origin.
* IF Fluence peer is started in nodejs the location is treated as the full path to file on the file system.
*/
marineJS?: {
/**
* Configures path to the marine-js worker script.
*/
workerScriptPath: string;
/**
* Configures the path to marine-js control wasm module
*/
marineWasmPath: string;
/**
* Configures the path to AVM wasm module
*/
avmWasmPath: string;
};
/**
* Enables\disabled various debugging features
*/
@ -199,7 +225,13 @@ export class FluencePeer {
? config?.defaultTtlMs
: DEFAULT_TTL;
this._avmRunner = config?.avmRunner || new AvmRunnerBackground();
this._fluenceAppService = new FluenceAppService(config?.marineJS?.workerScriptPath);
const marineDeps = config?.marineJS
? await loadMarineAndAvm(config.marineJS.marineWasmPath, config.marineJS.avmWasmPath)
: await loadDefaults();
await this._fluenceAppService.init(marineDeps.marine);
await this._fluenceAppService.createService(marineDeps.avm, 'avm');
this._avmRunner = config?.avmRunner || new AVM(this._fluenceAppService);
await this._avmRunner.init(config?.avmLogLevel || 'off');
if (config?.connectTo) {
@ -245,6 +277,32 @@ export class FluencePeer {
};
}
/**
* Registers marine service within the Fluence peer from wasm file.
* Following helper functions can be used to load wasm files:
* * loadWasmFromFileSystem
* * loadWasmFromNpmPackage
* * loadWasmFromServer
* @param wasm - buffer with the wasm file for service
* @param serviceId - the service id by which the service can be accessed in aqua
*/
async registerMarineService(wasm: SharedArrayBuffer | Buffer, serviceId: string): Promise<void> {
if (this._containsService(serviceId)) {
throw new Error(`Service with '${serviceId}' id already exists`);
}
await this._fluenceAppService.createService(wasm, serviceId);
this._marineServices.add(serviceId);
}
/**
* Removes the specified marine service from the Fluence peer
* @param serviceId - the service id to remove
*/
removeMarineService(serviceId: string): void {
this._marineServices.delete(serviceId);
}
/**
* Un-initializes the peer: stops all the underlying workflows, stops the Aqua VM
* and disconnects from the Fluence network
@ -255,10 +313,13 @@ export class FluencePeer {
this._stopParticleProcessing();
await this._disconnect();
await this._avmRunner?.terminate();
await this._fluenceAppService?.terminate();
this._avmRunner = undefined;
this._fluenceAppService = undefined;
this._particleSpecificHandlers.clear();
this._commonHandlers.clear();
this._marineServices.clear();
}
// internal api
@ -357,6 +418,7 @@ export class FluencePeer {
// Call service handler
private _marineServices = new Set<string>();
private _particleSpecificHandlers = new Map<string, Map<string, GenericCallServiceHandler>>();
private _commonHandlers = new Map<string, GenericCallServiceHandler>();
@ -364,6 +426,10 @@ export class FluencePeer {
sig: Sig;
};
private _containsService(serviceId: string): boolean {
return this._marineServices.has(serviceId) || this._commonHandlers.has(serviceId);
}
// Internal peer state
private _printParticleId: boolean = false;
@ -371,7 +437,12 @@ export class FluencePeer {
private _relayPeerId: PeerIdB58 | null = null;
private _keyPair: KeyPair;
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<NodeJS.Timeout> = [];
private _particleQueues = new Map<string, Subject<ParticleQueueItem>>();
@ -534,6 +605,32 @@ export class FluencePeer {
log.debug('executing call service handler', jsonify(req));
const particleId = req.particleContext.particleId;
if (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,
};
}
if (!result.result) {
throw 'Call to marine-js returned no error and empty result. Original request: ' + jsonify(req);
}
return {
retCode: ResultCodes.success,
result: result.result,
};
} catch (e) {
throw 'Call to marine-js. Result parsing error: ' + e + ', original text: ' + rawResult;
}
}
const key = serviceFnKey(req.serviceId, req.fnName);
const psh = this._particleSpecificHandlers.get(particleId);
let handler: GenericCallServiceHandler;
@ -637,3 +734,35 @@ function filterExpiredParticles(onParticleExpiration: (item: ParticleQueueItem)
filter((x: ParticleQueueItem) => !x.particle.hasExpired()),
);
}
async function loadMarineAndAvm(
marinePath: string,
avmPath: string,
): Promise<{
marine: SharedArrayBuffer | Buffer;
avm: SharedArrayBuffer | Buffer;
}> {
let promises: [Promise<SharedArrayBuffer | Buffer>, Promise<SharedArrayBuffer | Buffer>];
// check if we are running inside the browser and instantiate worker with the corresponding script
if (isBrowser) {
promises = [
// force new line
loadWasmFromServer(marinePath),
loadWasmFromServer(avmPath),
];
} else if (isNode) {
promises = [
// force new line
loadWasmFromFileSystem(marinePath),
loadWasmFromFileSystem(avmPath),
];
} else {
throw new Error('Unknown environment');
}
const [marine, avm] = await Promise.all(promises);
return {
marine,
avm,
};
}

View File

@ -16,11 +16,11 @@
import { v4 as uuidv4 } from 'uuid';
import { fromByteArray, toByteArray } from 'base64-js';
import { CallResultsArray, LogLevel } from '@fluencelabs/avm-runner-interface';
import log from 'loglevel';
import { ParticleContext } from './commonTypes';
import { dataToString, jsonify } from './utils';
import Buffer from './Buffer';
import { CallResultsArray, LogLevel } from '@fluencelabs/avm';
export class Particle {
id: string;

69
src/internal/avm.ts Normal file
View File

@ -0,0 +1,69 @@
/*
* 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 } 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<void>;
terminate: () => Promise<void>;
run: (
air: string,
prevData: Uint8Array,
data: Uint8Array,
params: {
initPeerId: string;
currentPeerId: string;
},
callResults: CallResultsArray,
) => Promise<InterpreterResult>;
};
/**
* @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<void> {}
async terminate(): Promise<void> {}
async run(
air: string,
prevData: Uint8Array,
data: Uint8Array,
params: { initPeerId: string; currentPeerId: string },
callResults: CallResultsArray,
): Promise<InterpreterResult> {
return callAvm(
(args) => this._fluenceAppService.callService('avm', 'invoke', args, undefined),
params.initPeerId,
params.currentPeerId,
air,
prevData,
data,
callResults,
);
}
}

View File

@ -1,4 +1,4 @@
import { SecurityTetraplet } from '@fluencelabs/avm-runner-interface';
import { SecurityTetraplet } from '@fluencelabs/avm';
import { CallParams, PeerIdB58 } from '../commonTypes';
import { KeyPair } from '../KeyPair';
import { SigDef } from '../_aqua/services';

View File

@ -14,12 +14,12 @@
* limitations under the License.
*/
import { CallServiceResult } from '@fluencelabs/avm-runner-interface';
import { encode, decode } from 'bs58';
import { sha256 } from 'multiformats/hashes/sha2';
import { ResultCodes } from '../commonTypes';
import { jsonify } from '../utils';
import Buffer from '../Buffer';
import { CallServiceResult } from '@fluencelabs/avm';
const success = (result: any): CallServiceResult => {
return {

View File

@ -14,7 +14,7 @@
* limitations under the License.
*/
import { SecurityTetraplet } from '@fluencelabs/avm-runner-interface';
import { SecurityTetraplet } from '@fluencelabs/avm';
/**
* Peer ID's id as a base58 string (multihash/CIDv0).

View File

@ -1,222 +0,0 @@
/*
* Copyright 2021 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 { CallServiceData, CallServiceResult, CallServiceResultType, ResultCodes } from '../commonTypes';
/**
* @deprecated This class exists to glue legacy RequestFlowBuilder api with restructured async FluencePeer.
* v2 version of compiler support should be used instead
*/
export const callLegacyCallServiceHandler = (
req: CallServiceData,
commonHandler: CallServiceHandler,
particleSpecificHandler?: CallServiceHandler,
): CallServiceResult => {
// trying particle-specific handler
if (particleSpecificHandler !== undefined) {
var res = particleSpecificHandler.execute(req);
}
if (res?.result === undefined) {
// if it didn't return any result trying to run the common handler
res = commonHandler.execute(req);
}
if (res.retCode === undefined) {
res = {
retCode: ResultCodes.error,
result: `The handler did not set any result. Make sure you are calling the right peer and the handler has been registered. Original request data was: serviceId='${req.serviceId}' fnName='${req.fnName}' args='${req.args}'`,
};
}
if (res.result === undefined) {
res.result = null;
}
return res;
};
/**
* @deprecated
* Type for the middleware used in CallServiceHandler middleware chain.
* In a nutshell middleware is a function of request, response and function to trigger the next middleware in chain.
* Each middleware is free to write additional properties to either request or response object.
* When the chain finishes the response is passed back to AVM
* @param { CallServiceData } req - information about the air `call` instruction
* @param { CallServiceResult } resp - response to be passed to AVM
* @param { Function } next - function which invokes next middleware in chain
*/
export type Middleware = (req: CallServiceData, resp: CallServiceResult, next: Function) => void;
/**
* @deprecated
*/
type CallParams = any;
/**
* @deprecated
* Convenience middleware factory. Registers a handler for a pair of 'serviceId/fnName'.
* The return value of the handler is passed back to AVM
* @param { string } serviceId - The identifier of service which would be used to make calls from AVM
* @param { string } fnName - The identifier of function which would be used to make calls from AVM
* @param { (args: any[], tetraplets: SecurityTetraplet[][]) => object } handler - The handler which should handle the call. The result is any object passed back to AVM
*/
export const fnHandler = (
serviceId: string,
fnName: string,
handler: (args: any[], callParams: CallParams) => CallServiceResultType,
) => {
return (req: CallServiceData, resp: CallServiceResult, next: Function): void => {
if (req.fnName === fnName && req.serviceId === serviceId) {
const res = handler(req.args, req.particleContext);
resp.retCode = ResultCodes.success;
resp.result = res;
}
next();
};
};
/**
* @deprecated
* Convenience middleware factory. Registers a handler for a pair of 'serviceId/fnName'.
* Similar to @see { @link fnHandler } but instead returns and empty object immediately runs the handler asynchronously
* @param { string } serviceId - The identifier of service which would be used to make calls from AVM
* @param { string } fnName - The identifier of function which would be used to make calls from AVM
* @param { (args: any[], tetraplets: SecurityTetraplet[][]) => void } handler - The handler which should handle the call.
*/
export const fnAsEventHandler = (
serviceId: string, // force format
fnName: string,
handler: (args: any[], callParams: CallParams) => void,
) => {
return (req: CallServiceData, resp: CallServiceResult, next: Function): void => {
if (req.fnName === fnName && req.serviceId === serviceId) {
setTimeout(() => {
handler(req.args, req.particleContext);
}, 0);
resp.retCode = ResultCodes.success;
resp.result = {};
}
next();
};
};
/**
* @deprecated
*/
type CallServiceFunction = (req: CallServiceData, resp: CallServiceResult) => void;
/**
* @deprecated
* Class defines the handling of a `call` air instruction executed by AVM on the local peer.
* All the execution process is defined by the chain of middlewares - architecture popular among backend web frameworks.
* Each middleware has the form of `(req: Call, resp: CallServiceResult, next: Function) => void;`
* A handler starts with an empty middleware chain and does nothing.
* To execute the handler use @see { @link execute } function
*/
export class CallServiceHandler {
private middlewares: Middleware[] = [];
/**
* Appends middleware to the chain of middlewares
* @param { Middleware } middleware
*/
use(middleware: Middleware): CallServiceHandler {
this.middlewares.push(middleware);
return this;
}
/**
* Removes the middleware from the chain of middlewares
* @param { Middleware } middleware
*/
unUse(middleware: Middleware): CallServiceHandler {
const index = this.middlewares.indexOf(middleware);
if (index !== -1) {
this.middlewares.splice(index, 1);
}
return this;
}
/**
* Combine handler with another one. Combination is done by copying middleware chain from the argument's handler into current one.
* Please note, that current handler's middlewares take precedence over the ones from handler to be combined with
* @param { CallServiceHandler } other - CallServiceHandler to be combined with
*/
combineWith(other: CallServiceHandler): CallServiceHandler {
this.middlewares = [...this.middlewares, ...other.middlewares];
return this;
}
/**
* Convenience method for registering @see { @link fnHandler } middleware
*/
on(
serviceId: string, // force format
fnName: string,
handler: (args: any[], callParams: CallParams) => CallServiceResultType,
): Function {
const mw = fnHandler(serviceId, fnName, handler);
this.use(mw);
return () => {
this.unUse(mw);
};
}
/**
* Convenience method for registering @see { @link fnAsEventHandler } middleware
*/
onEvent(
serviceId: string, // force format
fnName: string,
handler: (args: any[], callParams: CallParams) => void,
): Function {
const mw = fnAsEventHandler(serviceId, fnName, handler);
this.use(mw);
return () => {
this.unUse(mw);
};
}
/**
* Collapses middleware chain into a single function.
*/
buildFunction(): CallServiceFunction {
const result = this.middlewares.reduceRight<CallServiceFunction>(
(agg, cur) => {
return (req, resp) => {
cur(req, resp, () => agg(req, resp));
};
},
(req, res) => {},
);
return result;
}
/**
* Executes the handler with the specified Call request. Return the result response
*/
execute(req: CallServiceData): CallServiceResult {
const res: CallServiceResult = {
retCode: undefined,
result: undefined,
};
this.buildFunction()(req, res);
return res;
}
}

View File

@ -14,7 +14,7 @@
* limitations under the License.
*/
import { SecurityTetraplet } from '@fluencelabs/avm-runner-interface';
import { SecurityTetraplet } from '@fluencelabs/avm';
import { match } from 'ts-pattern';
import { CallParams, Fluence, FluencePeer } from '../../index';
import { CallServiceData, GenericCallServiceHandler, CallServiceResult, ResultCodes } from '../commonTypes';

View File

@ -1,4 +1,4 @@
import { SecurityTetraplet } from '@fluencelabs/avm-runner-interface';
import { SecurityTetraplet } from '@fluencelabs/avm';
import { Particle } from 'src/internal/Particle';
import { match } from 'ts-pattern';
import {

View File

@ -151,7 +151,11 @@ export function throwIfNotSupported() {
const version = platform.version.split('.').map(Number);
const major = version[0];
if (major < 16) {
throw new Error('FluenceJS requires node.js version >= "16.x"; Detected ' + 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"');
throw new Error(
'FluenceJS requires node.js version >= "16.x"; Detected ' +
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"',
);
}
}
}

View File

@ -1,5 +0,0 @@
#! /usr/bin/env node
require('@fluencelabs/avm/dist/copyAvm');
require('@fluencelabs/avm-runner-background/dist/copyRunnerScript');
require('@fluencelabs/marine-js/dist/copyMarine.js');

46
src/tools/copyMarine.ts Normal file
View File

@ -0,0 +1,46 @@
#! /usr/bin/env node
import fs from 'fs';
import path from 'path';
const firstArgument = process.argv[2];
if (!firstArgument) {
console.log(`Expected exactly 1 argument, got 0. Usage: ${path.basename(process.argv[1])} <destination directory>`);
process.exit(1);
}
let destPath = firstArgument;
if (!path.isAbsolute(destPath)) {
destPath = path.join(process.cwd(), destPath);
}
async function copyFile(packageName: string, fileName: string) {
const modulePath = require.resolve(packageName);
const source = path.join(path.dirname(modulePath), fileName);
const dest = path.join(destPath, fileName);
console.log(`copying ${fileName}`);
console.log('from: ', source);
console.log('to: ', dest);
await fs.promises.copyFile(source, dest);
}
async function main() {
console.log('ensure directory exists: ', destPath);
await fs.promises.mkdir(destPath, { recursive: true });
await Promise.all([
copyFile('@fluencelabs/marine-js', 'marine-js.web.js'),
copyFile('@fluencelabs/marine-js', 'marine-js.wasm'),
copyFile('@fluencelabs/avm', 'avm.wasm'),
]);
}
main()
.then(() => {
console.log('done!');
})
.catch((err) => {
console.error('Something went wrong!', err);
});