From 2e237ba18ac93aa1d7074b6bcab53cead24c9330 Mon Sep 17 00:00:00 2001 From: Pavel Murygin Date: Fri, 22 Apr 2022 19:57:37 +0300 Subject: [PATCH 1/7] Add config option to config logging --- src/index.ts | 2 +- src/internal/FluencePeer.ts | 16 ++++++++++++---- 2 files changed, 13 insertions(+), 5 deletions(-) diff --git a/src/index.ts b/src/index.ts index f21e9457a..aea16bd37 100644 --- a/src/index.ts +++ b/src/index.ts @@ -19,7 +19,7 @@ import { FluencePeer, PeerConfig } from './internal/FluencePeer'; export { PeerStatus } from './internal/FluencePeer'; export { KeyPair } from './internal/KeyPair'; -export { FluencePeer, AvmLoglevel, PeerConfig } from './internal/FluencePeer'; +export { FluencePeer, MarineLoglevel as AvmLoglevel, PeerConfig } from './internal/FluencePeer'; export { PeerIdB58, CallParams } from './internal/commonTypes'; export { loadWasmFromFileSystem, loadWasmFromNpmPackage, loadWasmFromServer } from '@fluencelabs/marine-js'; diff --git a/src/internal/FluencePeer.ts b/src/internal/FluencePeer.ts index 3b34f2986..87d53345b 100644 --- a/src/internal/FluencePeer.ts +++ b/src/internal/FluencePeer.ts @@ -44,7 +44,7 @@ type Node = { * Enum representing the log level used in Aqua VM. * Possible values: 'info', 'trace', 'debug', 'info', 'warn', 'error', 'off'; */ -export type AvmLoglevel = LogLevel; +export type MarineLoglevel = LogLevel; const DEFAULT_TTL = 7000; @@ -63,9 +63,10 @@ export interface PeerConfig { connectTo?: string | Multiaddr | Node; /** - * Specify log level for Aqua VM running on the peer + * @deprecated. AVM run through marine-js infrastructure. + * @see debug.marineLogLevel option to configure logging level of AVM */ - avmLogLevel?: AvmLoglevel; + avmLogLevel?: MarineLoglevel; /** * Specify the KeyPair to be used to identify the Fluence Peer. @@ -137,6 +138,11 @@ export interface PeerConfig { * Useful to see what particle id is responsible for aqua function */ printParticleId?: boolean; + + /** + * Log level for marine services. By default logging is turned off. + */ + marineLogLevel?: LogLevel; }; } @@ -291,7 +297,8 @@ export class FluencePeer { throw new Error(`Service with '${serviceId}' id already exists`); } - await this._fluenceAppService.createService(wasm, serviceId); + const envs = this._marineLogLevel ? { WASM_LOG: this._marineLogLevel } : undefined; + await this._fluenceAppService.createService(wasm, serviceId, undefined, envs); this._marineServices.add(serviceId); } @@ -419,6 +426,7 @@ export class FluencePeer { // Call service handler private _marineServices = new Set(); + private _marineLogLevel?: MarineLoglevel; private _particleSpecificHandlers = new Map>(); private _commonHandlers = new Map(); From 1db64e77405911eec0f9a180353a4741b49db7fc Mon Sep 17 00:00:00 2001 From: Pavel Murygin Date: Fri, 22 Apr 2022 19:57:37 +0300 Subject: [PATCH 2/7] Fix package name --- package-lock.json | 14 +++++++------- package.json | 2 +- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/package-lock.json b/package-lock.json index 9d06d96ea..41c99a820 100644 --- a/package-lock.json +++ b/package-lock.json @@ -11,7 +11,7 @@ "dependencies": { "@chainsafe/libp2p-noise": "^4.1.1", "@fluencelabs/avm": "0.23.0", - "@fluencelabs/marine-js": "0.2.3", + "@fluencelabs/marine-js": "0.2.0-fix-marine-js-logging-config.0", "async": "3.2.0", "browser-or-node": "^2.0.0", "bs58": "4.0.1", @@ -786,9 +786,9 @@ } }, "node_modules/@fluencelabs/marine-js": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/@fluencelabs/marine-js/-/marine-js-0.2.3.tgz", - "integrity": "sha512-cveky0ATIQGvZ3qSczXhQFBRZEiKgfuporIieqMyrN9PPkRjW3zDPG6LAkbUBS1YDQzeqLnRPTCOxhoVUS4Nsw==", + "version": "0.2.0-fix-marine-js-logging-config.0", + "resolved": "https://registry.npmjs.org/@fluencelabs/marine-js/-/marine-js-0.2.0-fix-marine-js-logging-config.0.tgz", + "integrity": "sha512-SYDG7/fzRuyJmCT5qqhV6lGctSYDx8MOVbgQ8h5Sj1sf6P1HVT1aEKG102jCznE7zbQ+FcAOwSG20cDQizj7bg==", "dependencies": { "@wasmer/wasi": "^0.12.0", "@wasmer/wasmfs": "^0.12.0", @@ -12945,9 +12945,9 @@ "dev": true }, "@fluencelabs/marine-js": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/@fluencelabs/marine-js/-/marine-js-0.2.3.tgz", - "integrity": "sha512-cveky0ATIQGvZ3qSczXhQFBRZEiKgfuporIieqMyrN9PPkRjW3zDPG6LAkbUBS1YDQzeqLnRPTCOxhoVUS4Nsw==", + "version": "0.2.0-fix-marine-js-logging-config.0", + "resolved": "https://registry.npmjs.org/@fluencelabs/marine-js/-/marine-js-0.2.0-fix-marine-js-logging-config.0.tgz", + "integrity": "sha512-SYDG7/fzRuyJmCT5qqhV6lGctSYDx8MOVbgQ8h5Sj1sf6P1HVT1aEKG102jCznE7zbQ+FcAOwSG20cDQizj7bg==", "requires": { "@wasmer/wasi": "^0.12.0", "@wasmer/wasmfs": "^0.12.0", diff --git a/package.json b/package.json index ae6327bbb..b767eb2ae 100644 --- a/package.json +++ b/package.json @@ -24,7 +24,7 @@ "dependencies": { "@chainsafe/libp2p-noise": "^4.1.1", "@fluencelabs/avm": "0.23.0", - "@fluencelabs/marine-js": "0.2.3", + "@fluencelabs/marine-js": "0.2.0-fix-marine-js-logging-config.0", "async": "3.2.0", "browser-or-node": "^2.0.0", "bs58": "4.0.1", From 3ae8f84373dcc47f6a220e162e3f6f4532590c2a Mon Sep 17 00:00:00 2001 From: Pavel Murygin Date: Sat, 23 Apr 2022 14:29:57 +0300 Subject: [PATCH 3/7] bump version --- package-lock.json | 14 +++++++------- package.json | 2 +- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/package-lock.json b/package-lock.json index 41c99a820..cd7d25f7e 100644 --- a/package-lock.json +++ b/package-lock.json @@ -11,7 +11,7 @@ "dependencies": { "@chainsafe/libp2p-noise": "^4.1.1", "@fluencelabs/avm": "0.23.0", - "@fluencelabs/marine-js": "0.2.0-fix-marine-js-logging-config.0", + "@fluencelabs/marine-js": "0.2.0-fix-marine-js-logging-config.5", "async": "3.2.0", "browser-or-node": "^2.0.0", "bs58": "4.0.1", @@ -786,9 +786,9 @@ } }, "node_modules/@fluencelabs/marine-js": { - "version": "0.2.0-fix-marine-js-logging-config.0", - "resolved": "https://registry.npmjs.org/@fluencelabs/marine-js/-/marine-js-0.2.0-fix-marine-js-logging-config.0.tgz", - "integrity": "sha512-SYDG7/fzRuyJmCT5qqhV6lGctSYDx8MOVbgQ8h5Sj1sf6P1HVT1aEKG102jCznE7zbQ+FcAOwSG20cDQizj7bg==", + "version": "0.2.0-fix-marine-js-logging-config.5", + "resolved": "https://registry.npmjs.org/@fluencelabs/marine-js/-/marine-js-0.2.0-fix-marine-js-logging-config.5.tgz", + "integrity": "sha512-0sF/zXE7CBv2Q1zkb3K8MMjb7jpkgtmU83tMC14lGG4QZlVoDQvlfFV7nffTHxtF32gcvPxiN1yPDvQzuXOQ0g==", "dependencies": { "@wasmer/wasi": "^0.12.0", "@wasmer/wasmfs": "^0.12.0", @@ -12945,9 +12945,9 @@ "dev": true }, "@fluencelabs/marine-js": { - "version": "0.2.0-fix-marine-js-logging-config.0", - "resolved": "https://registry.npmjs.org/@fluencelabs/marine-js/-/marine-js-0.2.0-fix-marine-js-logging-config.0.tgz", - "integrity": "sha512-SYDG7/fzRuyJmCT5qqhV6lGctSYDx8MOVbgQ8h5Sj1sf6P1HVT1aEKG102jCznE7zbQ+FcAOwSG20cDQizj7bg==", + "version": "0.2.0-fix-marine-js-logging-config.5", + "resolved": "https://registry.npmjs.org/@fluencelabs/marine-js/-/marine-js-0.2.0-fix-marine-js-logging-config.5.tgz", + "integrity": "sha512-0sF/zXE7CBv2Q1zkb3K8MMjb7jpkgtmU83tMC14lGG4QZlVoDQvlfFV7nffTHxtF32gcvPxiN1yPDvQzuXOQ0g==", "requires": { "@wasmer/wasi": "^0.12.0", "@wasmer/wasmfs": "^0.12.0", diff --git a/package.json b/package.json index b767eb2ae..abf9add73 100644 --- a/package.json +++ b/package.json @@ -24,7 +24,7 @@ "dependencies": { "@chainsafe/libp2p-noise": "^4.1.1", "@fluencelabs/avm": "0.23.0", - "@fluencelabs/marine-js": "0.2.0-fix-marine-js-logging-config.0", + "@fluencelabs/marine-js": "0.2.0-fix-marine-js-logging-config.5", "async": "3.2.0", "browser-or-node": "^2.0.0", "bs58": "4.0.1", From 84b5d88c0fe1916192b8e4cb3d94e16b17e059af Mon Sep 17 00:00:00 2001 From: Pavel Murygin Date: Sat, 23 Apr 2022 16:03:24 +0300 Subject: [PATCH 4/7] Add tests for marine js logging --- aqua/tests/marine-js-logging.aqua | 16 ++ package-lock.json | 14 +- package.json | 2 +- src/__test__/_aqua/marine-js-logging.ts | 167 ++++++++++++++++++ src/__test__/integration/greeting-record.wasm | Bin 0 -> 74010 bytes src/__test__/integration/marine-js.spec.ts | 31 +++- src/internal/FluencePeer.ts | 4 + 7 files changed, 224 insertions(+), 10 deletions(-) create mode 100644 aqua/tests/marine-js-logging.aqua create mode 100644 src/__test__/_aqua/marine-js-logging.ts create mode 100755 src/__test__/integration/greeting-record.wasm diff --git a/aqua/tests/marine-js-logging.aqua b/aqua/tests/marine-js-logging.aqua new file mode 100644 index 000000000..9ca1ff928 --- /dev/null +++ b/aqua/tests/marine-js-logging.aqua @@ -0,0 +1,16 @@ +data GreetingRecord: + str: string + num: i32 + +service GreetingRecord: + greeting_record() -> GreetingRecord + log_debug() + log_error() + log_info() + log_trace() + log_warn() + void_fn() + +func call_info(srvId: string): + GreetingRecord srvId + GreetingRecord.log_info() diff --git a/package-lock.json b/package-lock.json index cd7d25f7e..069fae57b 100644 --- a/package-lock.json +++ b/package-lock.json @@ -11,7 +11,7 @@ "dependencies": { "@chainsafe/libp2p-noise": "^4.1.1", "@fluencelabs/avm": "0.23.0", - "@fluencelabs/marine-js": "0.2.0-fix-marine-js-logging-config.5", + "@fluencelabs/marine-js": "0.2.0-fix-marine-js-logging-config.6", "async": "3.2.0", "browser-or-node": "^2.0.0", "bs58": "4.0.1", @@ -786,9 +786,9 @@ } }, "node_modules/@fluencelabs/marine-js": { - "version": "0.2.0-fix-marine-js-logging-config.5", - "resolved": "https://registry.npmjs.org/@fluencelabs/marine-js/-/marine-js-0.2.0-fix-marine-js-logging-config.5.tgz", - "integrity": "sha512-0sF/zXE7CBv2Q1zkb3K8MMjb7jpkgtmU83tMC14lGG4QZlVoDQvlfFV7nffTHxtF32gcvPxiN1yPDvQzuXOQ0g==", + "version": "0.2.0-fix-marine-js-logging-config.6", + "resolved": "https://registry.npmjs.org/@fluencelabs/marine-js/-/marine-js-0.2.0-fix-marine-js-logging-config.6.tgz", + "integrity": "sha512-icjhRfnhSyXtqqkCmpedEtcd1EPw6hfYcyJCFew/w2eyfRA75IrVMIt2Wir6NszGtXcJ4gn++DuZbfuQJV1c1g==", "dependencies": { "@wasmer/wasi": "^0.12.0", "@wasmer/wasmfs": "^0.12.0", @@ -12945,9 +12945,9 @@ "dev": true }, "@fluencelabs/marine-js": { - "version": "0.2.0-fix-marine-js-logging-config.5", - "resolved": "https://registry.npmjs.org/@fluencelabs/marine-js/-/marine-js-0.2.0-fix-marine-js-logging-config.5.tgz", - "integrity": "sha512-0sF/zXE7CBv2Q1zkb3K8MMjb7jpkgtmU83tMC14lGG4QZlVoDQvlfFV7nffTHxtF32gcvPxiN1yPDvQzuXOQ0g==", + "version": "0.2.0-fix-marine-js-logging-config.6", + "resolved": "https://registry.npmjs.org/@fluencelabs/marine-js/-/marine-js-0.2.0-fix-marine-js-logging-config.6.tgz", + "integrity": "sha512-icjhRfnhSyXtqqkCmpedEtcd1EPw6hfYcyJCFew/w2eyfRA75IrVMIt2Wir6NszGtXcJ4gn++DuZbfuQJV1c1g==", "requires": { "@wasmer/wasi": "^0.12.0", "@wasmer/wasmfs": "^0.12.0", diff --git a/package.json b/package.json index abf9add73..2353f0f98 100644 --- a/package.json +++ b/package.json @@ -24,7 +24,7 @@ "dependencies": { "@chainsafe/libp2p-noise": "^4.1.1", "@fluencelabs/avm": "0.23.0", - "@fluencelabs/marine-js": "0.2.0-fix-marine-js-logging-config.5", + "@fluencelabs/marine-js": "0.2.0-fix-marine-js-logging-config.6", "async": "3.2.0", "browser-or-node": "^2.0.0", "bs58": "4.0.1", diff --git a/src/__test__/_aqua/marine-js-logging.ts b/src/__test__/_aqua/marine-js-logging.ts new file mode 100644 index 000000000..357c06d2a --- /dev/null +++ b/src/__test__/_aqua/marine-js-logging.ts @@ -0,0 +1,167 @@ +/** + * + * 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-287 + * + */ +import { Fluence, FluencePeer } from '../../index'; +import { CallParams, callFunction, registerService } from '../../internal/compilerSupport/v3'; + +// Services + +export interface GreetingRecordDef { + greeting_record: ( + callParams: CallParams, + ) => { num: number; str: string } | Promise<{ num: number; str: string }>; + log_debug: (callParams: CallParams) => void | Promise; + log_error: (callParams: CallParams) => void | Promise; + log_info: (callParams: CallParams) => void | Promise; + log_trace: (callParams: CallParams) => void | Promise; + log_warn: (callParams: CallParams) => void | Promise; + void_fn: (callParams: CallParams) => void | Promise; +} +export function registerGreetingRecord(serviceId: string, service: GreetingRecordDef): void; +export function registerGreetingRecord(peer: FluencePeer, serviceId: string, service: GreetingRecordDef): void; + +export function registerGreetingRecord(...args: any) { + registerService(args, { + functions: { + tag: 'labeledProduct', + fields: { + 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', + }, + }, + }, + ], + }, + }, + log_debug: { + tag: 'arrow', + domain: { + tag: 'nil', + }, + codomain: { + tag: 'nil', + }, + }, + log_error: { + tag: 'arrow', + domain: { + tag: 'nil', + }, + codomain: { + tag: 'nil', + }, + }, + log_info: { + tag: 'arrow', + domain: { + tag: 'nil', + }, + codomain: { + tag: 'nil', + }, + }, + log_trace: { + tag: 'arrow', + domain: { + tag: 'nil', + }, + codomain: { + tag: 'nil', + }, + }, + log_warn: { + tag: 'arrow', + domain: { + tag: 'nil', + }, + codomain: { + tag: 'nil', + }, + }, + void_fn: { + tag: 'arrow', + domain: { + tag: 'nil', + }, + codomain: { + tag: 'nil', + }, + }, + }, + }, + }); +} + +// Functions + +export function call_info(srvId: string, config?: { ttl?: number }): Promise; + +export function call_info(peer: FluencePeer, srvId: string, config?: { ttl?: number }): Promise; + +export function call_info(...args: any) { + let script = ` + (xor + (seq + (seq + (call %init_peer_id% ("getDataSrv" "-relay-") [] -relay-) + (call %init_peer_id% ("getDataSrv" "srvId") [] srvId) + ) + (call %init_peer_id% (srvId "log_info") []) + ) + (call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 1]) + ) + `; + return callFunction( + args, + { + functionName: 'call_info', + arrow: { + tag: 'arrow', + domain: { + tag: 'labeledProduct', + fields: { + srvId: { + tag: 'scalar', + name: 'string', + }, + }, + }, + codomain: { + tag: 'nil', + }, + }, + names: { + relay: '-relay-', + getDataSrv: 'getDataSrv', + callbackSrv: 'callbackSrv', + responseSrv: 'callbackSrv', + responseFnName: 'response', + errorHandlingSrv: 'errorHandlingSrv', + errorFnName: 'error', + }, + }, + script, + ); +} diff --git a/src/__test__/integration/greeting-record.wasm b/src/__test__/integration/greeting-record.wasm new file mode 100755 index 0000000000000000000000000000000000000000..943ee81809033fcb6cbdbbc700d373c54dce7c92 GIT binary patch literal 74010 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 Hj!gSMy&r27 literal 0 HcmV?d00001 diff --git a/src/__test__/integration/marine-js.spec.ts b/src/__test__/integration/marine-js.spec.ts index 227042ed0..91c68ed7e 100644 --- a/src/__test__/integration/marine-js.spec.ts +++ b/src/__test__/integration/marine-js.spec.ts @@ -1,6 +1,7 @@ -import { Fluence } from '../../index'; +import { Fluence, FluencePeer } from '../../index'; import fs from 'fs'; import { call } from '../_aqua/marine-js'; +import { call_info } from '../_aqua/marine-js-logging'; describe('Marine js tests', () => { beforeEach(async () => { @@ -13,7 +14,7 @@ describe('Marine js tests', () => { it('should call marine service correctly', async () => { // arrange - const wasm = fs.readFileSync(__dirname + '/greeting.wasm'); + const wasm = await fs.promises.readFile(__dirname + '/greeting.wasm'); await Fluence.registerMarineService(wasm, 'greeting'); // act @@ -22,4 +23,30 @@ describe('Marine js tests', () => { // assert expect(res).toBe('Hi, Hi, Hi, test'); }); + + // TODO: make test working + it.skip('logging should work', async () => { + // arrange + const peer = new FluencePeer(); + try { + jest.spyOn(global.console, 'info').mockImplementation(() => {}); + + await peer.start({ + debug: { + marineLogLevel: 'debug', + }, + }); + const wasm = await fs.promises.readFile(__dirname + '/greeting-record.wasm'); + await peer.registerMarineService(wasm, 'greeting'); + + // act + await call_info(peer, 'greeting'); + + // assert + expect(console.info).toBeCalledTimes(1); + expect(console.info).toHaveBeenNthCalledWith(1, '[marine service "greeting"]: info'); + } finally { + await peer.stop(); + } + }); }); diff --git a/src/internal/FluencePeer.ts b/src/internal/FluencePeer.ts index 87d53345b..c0ca9297d 100644 --- a/src/internal/FluencePeer.ts +++ b/src/internal/FluencePeer.ts @@ -231,6 +231,10 @@ export class FluencePeer { ? config?.defaultTtlMs : DEFAULT_TTL; + if (config?.debug?.marineLogLevel) { + this._marineLogLevel = config.debug.marineLogLevel; + } + this._fluenceAppService = new FluenceAppService(config?.marineJS?.workerScriptPath); const marineDeps = config?.marineJS ? await loadMarineAndAvm(config.marineJS.marineWasmPath, config.marineJS.avmWasmPath) From 4fcb39b45cbd94b44a268af75e04a9931800df2e Mon Sep 17 00:00:00 2001 From: Pavel Murygin Date: Sat, 23 Apr 2022 16:52:20 +0300 Subject: [PATCH 5/7] Use release version of marine-js --- package-lock.json | 14 +++++++------- package.json | 2 +- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/package-lock.json b/package-lock.json index 069fae57b..490148288 100644 --- a/package-lock.json +++ b/package-lock.json @@ -11,7 +11,7 @@ "dependencies": { "@chainsafe/libp2p-noise": "^4.1.1", "@fluencelabs/avm": "0.23.0", - "@fluencelabs/marine-js": "0.2.0-fix-marine-js-logging-config.6", + "@fluencelabs/marine-js": "0.2.5", "async": "3.2.0", "browser-or-node": "^2.0.0", "bs58": "4.0.1", @@ -786,9 +786,9 @@ } }, "node_modules/@fluencelabs/marine-js": { - "version": "0.2.0-fix-marine-js-logging-config.6", - "resolved": "https://registry.npmjs.org/@fluencelabs/marine-js/-/marine-js-0.2.0-fix-marine-js-logging-config.6.tgz", - "integrity": "sha512-icjhRfnhSyXtqqkCmpedEtcd1EPw6hfYcyJCFew/w2eyfRA75IrVMIt2Wir6NszGtXcJ4gn++DuZbfuQJV1c1g==", + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/@fluencelabs/marine-js/-/marine-js-0.2.5.tgz", + "integrity": "sha512-nGXuXdZd9gJX6dRyZcesnoRhZmSNCJFbHA25TKJ36x8KB+AKt+FCgRBht8M0+DlwBYow5mqOZlebz3XgSpRWVA==", "dependencies": { "@wasmer/wasi": "^0.12.0", "@wasmer/wasmfs": "^0.12.0", @@ -12945,9 +12945,9 @@ "dev": true }, "@fluencelabs/marine-js": { - "version": "0.2.0-fix-marine-js-logging-config.6", - "resolved": "https://registry.npmjs.org/@fluencelabs/marine-js/-/marine-js-0.2.0-fix-marine-js-logging-config.6.tgz", - "integrity": "sha512-icjhRfnhSyXtqqkCmpedEtcd1EPw6hfYcyJCFew/w2eyfRA75IrVMIt2Wir6NszGtXcJ4gn++DuZbfuQJV1c1g==", + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/@fluencelabs/marine-js/-/marine-js-0.2.5.tgz", + "integrity": "sha512-nGXuXdZd9gJX6dRyZcesnoRhZmSNCJFbHA25TKJ36x8KB+AKt+FCgRBht8M0+DlwBYow5mqOZlebz3XgSpRWVA==", "requires": { "@wasmer/wasi": "^0.12.0", "@wasmer/wasmfs": "^0.12.0", diff --git a/package.json b/package.json index 2353f0f98..24302710e 100644 --- a/package.json +++ b/package.json @@ -24,7 +24,7 @@ "dependencies": { "@chainsafe/libp2p-noise": "^4.1.1", "@fluencelabs/avm": "0.23.0", - "@fluencelabs/marine-js": "0.2.0-fix-marine-js-logging-config.6", + "@fluencelabs/marine-js": "0.2.5", "async": "3.2.0", "browser-or-node": "^2.0.0", "bs58": "4.0.1", From 1b5673e7427d52777e485847951028e73d057296 Mon Sep 17 00:00:00 2001 From: Pavel Murygin Date: Sat, 23 Apr 2022 17:05:21 +0300 Subject: [PATCH 6/7] Generate docs --- docs/assets/js/search.js | 2 +- docs/classes/FluencePeer.html | 18 +++++++-------- docs/classes/KeyPair.html | 16 ++++++------- docs/interfaces/CallParams.html | 12 +++++----- docs/interfaces/PeerConfig.html | 41 ++++++++++++++++++++++----------- docs/interfaces/PeerStatus.html | 8 +++---- docs/modules.html | 8 +++---- 7 files changed, 59 insertions(+), 46 deletions(-) diff --git a/docs/assets/js/search.js b/docs/assets/js/search.js index c9ad0a60e..9979e843f 100644 --- a/docs/assets/js/search.js +++ b/docs/assets/js/search.js @@ -1 +1 @@ -window.searchData = {"kinds":{"32":"Variable","64":"Function","128":"Class","256":"Interface","512":"Constructor","1024":"Property","2048":"Method","65536":"Type literal","262144":"Accessor","4194304":"Type alias"},"rows":[{"id":0,"kind":64,"name":"setLogLevel","url":"modules.html#setLogLevel","classes":"tsd-kind-function"},{"id":1,"kind":32,"name":"Fluence","url":"modules.html#Fluence","classes":"tsd-kind-variable"},{"id":2,"kind":65536,"name":"__type","url":"modules.html#Fluence.__type","classes":"tsd-kind-type-literal tsd-parent-kind-variable","parent":"Fluence"},{"id":3,"kind":1024,"name":"start","url":"modules.html#Fluence.__type.start","classes":"tsd-kind-property tsd-parent-kind-type-literal","parent":"Fluence.__type"},{"id":4,"kind":65536,"name":"__type","url":"modules.html#Fluence.__type.__type-5","classes":"tsd-kind-type-literal tsd-parent-kind-type-literal","parent":"Fluence.__type"},{"id":5,"kind":1024,"name":"stop","url":"modules.html#Fluence.__type.stop","classes":"tsd-kind-property tsd-parent-kind-type-literal","parent":"Fluence.__type"},{"id":6,"kind":65536,"name":"__type","url":"modules.html#Fluence.__type.__type-6","classes":"tsd-kind-type-literal tsd-parent-kind-type-literal","parent":"Fluence.__type"},{"id":7,"kind":1024,"name":"getStatus","url":"modules.html#Fluence.__type.getStatus","classes":"tsd-kind-property tsd-parent-kind-type-literal","parent":"Fluence.__type"},{"id":8,"kind":65536,"name":"__type","url":"modules.html#Fluence.__type.__type-2","classes":"tsd-kind-type-literal tsd-parent-kind-type-literal","parent":"Fluence.__type"},{"id":9,"kind":1024,"name":"getPeer","url":"modules.html#Fluence.__type.getPeer","classes":"tsd-kind-property tsd-parent-kind-type-literal","parent":"Fluence.__type"},{"id":10,"kind":65536,"name":"__type","url":"modules.html#Fluence.__type.__type-1","classes":"tsd-kind-type-literal tsd-parent-kind-type-literal","parent":"Fluence.__type"},{"id":11,"kind":1024,"name":"registerMarineService","url":"modules.html#Fluence.__type.registerMarineService","classes":"tsd-kind-property tsd-parent-kind-type-literal","parent":"Fluence.__type"},{"id":12,"kind":65536,"name":"__type","url":"modules.html#Fluence.__type.__type-3","classes":"tsd-kind-type-literal tsd-parent-kind-type-literal","parent":"Fluence.__type"},{"id":13,"kind":1024,"name":"removeMarineService","url":"modules.html#Fluence.__type.removeMarineService","classes":"tsd-kind-property tsd-parent-kind-type-literal","parent":"Fluence.__type"},{"id":14,"kind":65536,"name":"__type","url":"modules.html#Fluence.__type.__type-4","classes":"tsd-kind-type-literal tsd-parent-kind-type-literal","parent":"Fluence.__type"},{"id":15,"kind":256,"name":"PeerStatus","url":"interfaces/PeerStatus.html","classes":"tsd-kind-interface"},{"id":16,"kind":1024,"name":"isInitialized","url":"interfaces/PeerStatus.html#isInitialized","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"PeerStatus"},{"id":17,"kind":1024,"name":"isConnected","url":"interfaces/PeerStatus.html#isConnected","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"PeerStatus"},{"id":18,"kind":1024,"name":"peerId","url":"interfaces/PeerStatus.html#peerId","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"PeerStatus"},{"id":19,"kind":1024,"name":"relayPeerId","url":"interfaces/PeerStatus.html#relayPeerId","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"PeerStatus"},{"id":20,"kind":128,"name":"KeyPair","url":"classes/KeyPair.html","classes":"tsd-kind-class"},{"id":21,"kind":2048,"name":"fromEd25519SK","url":"classes/KeyPair.html#fromEd25519SK","classes":"tsd-kind-method tsd-parent-kind-class tsd-is-static","parent":"KeyPair"},{"id":22,"kind":2048,"name":"randomEd25519","url":"classes/KeyPair.html#randomEd25519","classes":"tsd-kind-method tsd-parent-kind-class tsd-is-static","parent":"KeyPair"},{"id":23,"kind":512,"name":"constructor","url":"classes/KeyPair.html#constructor","classes":"tsd-kind-constructor tsd-parent-kind-class","parent":"KeyPair"},{"id":24,"kind":1024,"name":"Libp2pPeerId","url":"classes/KeyPair.html#Libp2pPeerId","classes":"tsd-kind-property tsd-parent-kind-class","parent":"KeyPair"},{"id":25,"kind":2048,"name":"toB58String","url":"classes/KeyPair.html#toB58String","classes":"tsd-kind-method tsd-parent-kind-class","parent":"KeyPair"},{"id":26,"kind":2048,"name":"toEd25519PrivateKey","url":"classes/KeyPair.html#toEd25519PrivateKey","classes":"tsd-kind-method tsd-parent-kind-class","parent":"KeyPair"},{"id":27,"kind":2048,"name":"signBytes","url":"classes/KeyPair.html#signBytes","classes":"tsd-kind-method tsd-parent-kind-class","parent":"KeyPair"},{"id":28,"kind":2048,"name":"verify","url":"classes/KeyPair.html#verify","classes":"tsd-kind-method tsd-parent-kind-class","parent":"KeyPair"},{"id":29,"kind":128,"name":"FluencePeer","url":"classes/FluencePeer.html","classes":"tsd-kind-class"},{"id":30,"kind":2048,"name":"isInstance","url":"classes/FluencePeer.html#isInstance","classes":"tsd-kind-method tsd-parent-kind-class tsd-is-static","parent":"FluencePeer"},{"id":31,"kind":512,"name":"constructor","url":"classes/FluencePeer.html#constructor","classes":"tsd-kind-constructor tsd-parent-kind-class","parent":"FluencePeer"},{"id":32,"kind":2048,"name":"getStatus","url":"classes/FluencePeer.html#getStatus","classes":"tsd-kind-method tsd-parent-kind-class","parent":"FluencePeer"},{"id":33,"kind":2048,"name":"start","url":"classes/FluencePeer.html#start","classes":"tsd-kind-method tsd-parent-kind-class","parent":"FluencePeer"},{"id":34,"kind":2048,"name":"getServices","url":"classes/FluencePeer.html#getServices","classes":"tsd-kind-method tsd-parent-kind-class","parent":"FluencePeer"},{"id":35,"kind":2048,"name":"registerMarineService","url":"classes/FluencePeer.html#registerMarineService","classes":"tsd-kind-method tsd-parent-kind-class","parent":"FluencePeer"},{"id":36,"kind":2048,"name":"removeMarineService","url":"classes/FluencePeer.html#removeMarineService","classes":"tsd-kind-method tsd-parent-kind-class","parent":"FluencePeer"},{"id":37,"kind":2048,"name":"stop","url":"classes/FluencePeer.html#stop","classes":"tsd-kind-method tsd-parent-kind-class","parent":"FluencePeer"},{"id":38,"kind":262144,"name":"internals","url":"classes/FluencePeer.html#internals","classes":"tsd-kind-get-signature tsd-parent-kind-class","parent":"FluencePeer"},{"id":39,"kind":4194304,"name":"AvmLoglevel","url":"modules.html#AvmLoglevel","classes":"tsd-kind-type-alias"},{"id":40,"kind":256,"name":"PeerConfig","url":"interfaces/PeerConfig.html","classes":"tsd-kind-interface"},{"id":41,"kind":1024,"name":"connectTo","url":"interfaces/PeerConfig.html#connectTo","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"PeerConfig"},{"id":42,"kind":1024,"name":"avmLogLevel","url":"interfaces/PeerConfig.html#avmLogLevel","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"PeerConfig"},{"id":43,"kind":1024,"name":"KeyPair","url":"interfaces/PeerConfig.html#KeyPair","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"PeerConfig"},{"id":44,"kind":1024,"name":"checkConnectionTimeoutMs","url":"interfaces/PeerConfig.html#checkConnectionTimeoutMs","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"PeerConfig"},{"id":45,"kind":1024,"name":"skipCheckConnection","url":"interfaces/PeerConfig.html#skipCheckConnection","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"PeerConfig"},{"id":46,"kind":1024,"name":"dialTimeoutMs","url":"interfaces/PeerConfig.html#dialTimeoutMs","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"PeerConfig"},{"id":47,"kind":1024,"name":"defaultTtlMs","url":"interfaces/PeerConfig.html#defaultTtlMs","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"PeerConfig"},{"id":48,"kind":1024,"name":"avmRunner","url":"interfaces/PeerConfig.html#avmRunner","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"PeerConfig"},{"id":49,"kind":1024,"name":"marineJS","url":"interfaces/PeerConfig.html#marineJS","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"PeerConfig"},{"id":50,"kind":65536,"name":"__type","url":"interfaces/PeerConfig.html#__type-1","classes":"tsd-kind-type-literal tsd-parent-kind-interface","parent":"PeerConfig"},{"id":51,"kind":1024,"name":"workerScriptPath","url":"interfaces/PeerConfig.html#__type-1.workerScriptPath","classes":"tsd-kind-property tsd-parent-kind-type-literal","parent":"PeerConfig.__type"},{"id":52,"kind":1024,"name":"marineWasmPath","url":"interfaces/PeerConfig.html#__type-1.marineWasmPath","classes":"tsd-kind-property tsd-parent-kind-type-literal","parent":"PeerConfig.__type"},{"id":53,"kind":1024,"name":"avmWasmPath","url":"interfaces/PeerConfig.html#__type-1.avmWasmPath","classes":"tsd-kind-property tsd-parent-kind-type-literal","parent":"PeerConfig.__type"},{"id":54,"kind":1024,"name":"debug","url":"interfaces/PeerConfig.html#debug","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"PeerConfig"},{"id":55,"kind":65536,"name":"__type","url":"interfaces/PeerConfig.html#__type","classes":"tsd-kind-type-literal tsd-parent-kind-interface","parent":"PeerConfig"},{"id":56,"kind":1024,"name":"printParticleId","url":"interfaces/PeerConfig.html#__type.printParticleId","classes":"tsd-kind-property tsd-parent-kind-type-literal","parent":"PeerConfig.__type"},{"id":57,"kind":4194304,"name":"PeerIdB58","url":"modules.html#PeerIdB58","classes":"tsd-kind-type-alias"},{"id":58,"kind":256,"name":"CallParams","url":"interfaces/CallParams.html","classes":"tsd-kind-interface tsd-has-type-parameter"},{"id":59,"kind":1024,"name":"particleId","url":"interfaces/CallParams.html#particleId","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"CallParams"},{"id":60,"kind":1024,"name":"initPeerId","url":"interfaces/CallParams.html#initPeerId","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"CallParams"},{"id":61,"kind":1024,"name":"timestamp","url":"interfaces/CallParams.html#timestamp","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"CallParams"},{"id":62,"kind":1024,"name":"ttl","url":"interfaces/CallParams.html#ttl","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"CallParams"},{"id":63,"kind":1024,"name":"signature","url":"interfaces/CallParams.html#signature","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"CallParams"},{"id":64,"kind":1024,"name":"tetraplets","url":"interfaces/CallParams.html#tetraplets","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"CallParams"}],"index":{"version":"2.3.9","fields":["name","parent"],"fieldVectors":[["name/0",[0,37.842]],["parent/0",[]],["name/1",[1,32.734]],["parent/1",[]],["name/2",[2,19.384]],["parent/2",[1,3.071]],["name/3",[3,32.734]],["parent/3",[4,1.561]],["name/4",[2,19.384]],["parent/4",[4,1.561]],["name/5",[5,32.734]],["parent/5",[4,1.561]],["name/6",[2,19.384]],["parent/6",[4,1.561]],["name/7",[6,32.734]],["parent/7",[4,1.561]],["name/8",[2,19.384]],["parent/8",[4,1.561]],["name/9",[7,37.842]],["parent/9",[4,1.561]],["name/10",[2,19.384]],["parent/10",[4,1.561]],["name/11",[8,32.734]],["parent/11",[4,1.561]],["name/12",[2,19.384]],["parent/12",[4,1.561]],["name/13",[9,32.734]],["parent/13",[4,1.561]],["name/14",[2,19.384]],["parent/14",[4,1.561]],["name/15",[10,24.849]],["parent/15",[]],["name/16",[11,37.842]],["parent/16",[10,2.332]],["name/17",[12,37.842]],["parent/17",[10,2.332]],["name/18",[13,37.842]],["parent/18",[10,2.332]],["name/19",[14,37.842]],["parent/19",[10,2.332]],["name/20",[15,18.383]],["parent/20",[]],["name/21",[16,37.842]],["parent/21",[15,1.725]],["name/22",[17,37.842]],["parent/22",[15,1.725]],["name/23",[18,32.734]],["parent/23",[15,1.725]],["name/24",[19,37.842]],["parent/24",[15,1.725]],["name/25",[20,37.842]],["parent/25",[15,1.725]],["name/26",[21,37.842]],["parent/26",[15,1.725]],["name/27",[22,37.842]],["parent/27",[15,1.725]],["name/28",[23,37.842]],["parent/28",[15,1.725]],["name/29",[24,18.383]],["parent/29",[]],["name/30",[25,37.842]],["parent/30",[24,1.725]],["name/31",[18,32.734]],["parent/31",[24,1.725]],["name/32",[6,32.734]],["parent/32",[24,1.725]],["name/33",[3,32.734]],["parent/33",[24,1.725]],["name/34",[26,37.842]],["parent/34",[24,1.725]],["name/35",[8,32.734]],["parent/35",[24,1.725]],["name/36",[9,32.734]],["parent/36",[24,1.725]],["name/37",[5,32.734]],["parent/37",[24,1.725]],["name/38",[27,37.842]],["parent/38",[24,1.725]],["name/39",[28,32.734]],["parent/39",[]],["name/40",[29,15.87]],["parent/40",[]],["name/41",[30,37.842]],["parent/41",[29,1.489]],["name/42",[28,32.734]],["parent/42",[29,1.489]],["name/43",[15,18.383]],["parent/43",[29,1.489]],["name/44",[31,37.842]],["parent/44",[29,1.489]],["name/45",[32,37.842]],["parent/45",[29,1.489]],["name/46",[33,37.842]],["parent/46",[29,1.489]],["name/47",[34,37.842]],["parent/47",[29,1.489]],["name/48",[35,37.842]],["parent/48",[29,1.489]],["name/49",[36,37.842]],["parent/49",[29,1.489]],["name/50",[2,19.384]],["parent/50",[29,1.489]],["name/51",[37,37.842]],["parent/51",[38,2.52]],["name/52",[39,37.842]],["parent/52",[38,2.52]],["name/53",[40,37.842]],["parent/53",[38,2.52]],["name/54",[41,37.842]],["parent/54",[29,1.489]],["name/55",[2,19.384]],["parent/55",[29,1.489]],["name/56",[42,37.842]],["parent/56",[38,2.52]],["name/57",[43,37.842]],["parent/57",[]],["name/58",[44,21.748]],["parent/58",[]],["name/59",[45,37.842]],["parent/59",[44,2.041]],["name/60",[46,37.842]],["parent/60",[44,2.041]],["name/61",[47,37.842]],["parent/61",[44,2.041]],["name/62",[48,37.842]],["parent/62",[44,2.041]],["name/63",[49,37.842]],["parent/63",[44,2.041]],["name/64",[50,37.842]],["parent/64",[44,2.041]]],"invertedIndex":[["__type",{"_index":2,"name":{"2":{},"4":{},"6":{},"8":{},"10":{},"12":{},"14":{},"50":{},"55":{}},"parent":{}}],["avmloglevel",{"_index":28,"name":{"39":{},"42":{}},"parent":{}}],["avmrunner",{"_index":35,"name":{"48":{}},"parent":{}}],["avmwasmpath",{"_index":40,"name":{"53":{}},"parent":{}}],["callparams",{"_index":44,"name":{"58":{}},"parent":{"59":{},"60":{},"61":{},"62":{},"63":{},"64":{}}}],["checkconnectiontimeoutms",{"_index":31,"name":{"44":{}},"parent":{}}],["connectto",{"_index":30,"name":{"41":{}},"parent":{}}],["constructor",{"_index":18,"name":{"23":{},"31":{}},"parent":{}}],["debug",{"_index":41,"name":{"54":{}},"parent":{}}],["defaultttlms",{"_index":34,"name":{"47":{}},"parent":{}}],["dialtimeoutms",{"_index":33,"name":{"46":{}},"parent":{}}],["fluence",{"_index":1,"name":{"1":{}},"parent":{"2":{}}}],["fluence.__type",{"_index":4,"name":{},"parent":{"3":{},"4":{},"5":{},"6":{},"7":{},"8":{},"9":{},"10":{},"11":{},"12":{},"13":{},"14":{}}}],["fluencepeer",{"_index":24,"name":{"29":{}},"parent":{"30":{},"31":{},"32":{},"33":{},"34":{},"35":{},"36":{},"37":{},"38":{}}}],["fromed25519sk",{"_index":16,"name":{"21":{}},"parent":{}}],["getpeer",{"_index":7,"name":{"9":{}},"parent":{}}],["getservices",{"_index":26,"name":{"34":{}},"parent":{}}],["getstatus",{"_index":6,"name":{"7":{},"32":{}},"parent":{}}],["initpeerid",{"_index":46,"name":{"60":{}},"parent":{}}],["internals",{"_index":27,"name":{"38":{}},"parent":{}}],["isconnected",{"_index":12,"name":{"17":{}},"parent":{}}],["isinitialized",{"_index":11,"name":{"16":{}},"parent":{}}],["isinstance",{"_index":25,"name":{"30":{}},"parent":{}}],["keypair",{"_index":15,"name":{"20":{},"43":{}},"parent":{"21":{},"22":{},"23":{},"24":{},"25":{},"26":{},"27":{},"28":{}}}],["libp2ppeerid",{"_index":19,"name":{"24":{}},"parent":{}}],["marinejs",{"_index":36,"name":{"49":{}},"parent":{}}],["marinewasmpath",{"_index":39,"name":{"52":{}},"parent":{}}],["particleid",{"_index":45,"name":{"59":{}},"parent":{}}],["peerconfig",{"_index":29,"name":{"40":{}},"parent":{"41":{},"42":{},"43":{},"44":{},"45":{},"46":{},"47":{},"48":{},"49":{},"50":{},"54":{},"55":{}}}],["peerconfig.__type",{"_index":38,"name":{},"parent":{"51":{},"52":{},"53":{},"56":{}}}],["peerid",{"_index":13,"name":{"18":{}},"parent":{}}],["peeridb58",{"_index":43,"name":{"57":{}},"parent":{}}],["peerstatus",{"_index":10,"name":{"15":{}},"parent":{"16":{},"17":{},"18":{},"19":{}}}],["printparticleid",{"_index":42,"name":{"56":{}},"parent":{}}],["randomed25519",{"_index":17,"name":{"22":{}},"parent":{}}],["registermarineservice",{"_index":8,"name":{"11":{},"35":{}},"parent":{}}],["relaypeerid",{"_index":14,"name":{"19":{}},"parent":{}}],["removemarineservice",{"_index":9,"name":{"13":{},"36":{}},"parent":{}}],["setloglevel",{"_index":0,"name":{"0":{}},"parent":{}}],["signature",{"_index":49,"name":{"63":{}},"parent":{}}],["signbytes",{"_index":22,"name":{"27":{}},"parent":{}}],["skipcheckconnection",{"_index":32,"name":{"45":{}},"parent":{}}],["start",{"_index":3,"name":{"3":{},"33":{}},"parent":{}}],["stop",{"_index":5,"name":{"5":{},"37":{}},"parent":{}}],["tetraplets",{"_index":50,"name":{"64":{}},"parent":{}}],["timestamp",{"_index":47,"name":{"61":{}},"parent":{}}],["tob58string",{"_index":20,"name":{"25":{}},"parent":{}}],["toed25519privatekey",{"_index":21,"name":{"26":{}},"parent":{}}],["ttl",{"_index":48,"name":{"62":{}},"parent":{}}],["verify",{"_index":23,"name":{"28":{}},"parent":{}}],["workerscriptpath",{"_index":37,"name":{"51":{}},"parent":{}}]],"pipeline":[]}} \ No newline at end of file +window.searchData = {"kinds":{"32":"Variable","64":"Function","128":"Class","256":"Interface","512":"Constructor","1024":"Property","2048":"Method","65536":"Type literal","262144":"Accessor","4194304":"Type alias"},"rows":[{"id":0,"kind":64,"name":"setLogLevel","url":"modules.html#setLogLevel","classes":"tsd-kind-function"},{"id":1,"kind":32,"name":"Fluence","url":"modules.html#Fluence","classes":"tsd-kind-variable"},{"id":2,"kind":65536,"name":"__type","url":"modules.html#Fluence.__type","classes":"tsd-kind-type-literal tsd-parent-kind-variable","parent":"Fluence"},{"id":3,"kind":1024,"name":"start","url":"modules.html#Fluence.__type.start","classes":"tsd-kind-property tsd-parent-kind-type-literal","parent":"Fluence.__type"},{"id":4,"kind":65536,"name":"__type","url":"modules.html#Fluence.__type.__type-5","classes":"tsd-kind-type-literal tsd-parent-kind-type-literal","parent":"Fluence.__type"},{"id":5,"kind":1024,"name":"stop","url":"modules.html#Fluence.__type.stop","classes":"tsd-kind-property tsd-parent-kind-type-literal","parent":"Fluence.__type"},{"id":6,"kind":65536,"name":"__type","url":"modules.html#Fluence.__type.__type-6","classes":"tsd-kind-type-literal tsd-parent-kind-type-literal","parent":"Fluence.__type"},{"id":7,"kind":1024,"name":"getStatus","url":"modules.html#Fluence.__type.getStatus","classes":"tsd-kind-property tsd-parent-kind-type-literal","parent":"Fluence.__type"},{"id":8,"kind":65536,"name":"__type","url":"modules.html#Fluence.__type.__type-2","classes":"tsd-kind-type-literal tsd-parent-kind-type-literal","parent":"Fluence.__type"},{"id":9,"kind":1024,"name":"getPeer","url":"modules.html#Fluence.__type.getPeer","classes":"tsd-kind-property tsd-parent-kind-type-literal","parent":"Fluence.__type"},{"id":10,"kind":65536,"name":"__type","url":"modules.html#Fluence.__type.__type-1","classes":"tsd-kind-type-literal tsd-parent-kind-type-literal","parent":"Fluence.__type"},{"id":11,"kind":1024,"name":"registerMarineService","url":"modules.html#Fluence.__type.registerMarineService","classes":"tsd-kind-property tsd-parent-kind-type-literal","parent":"Fluence.__type"},{"id":12,"kind":65536,"name":"__type","url":"modules.html#Fluence.__type.__type-3","classes":"tsd-kind-type-literal tsd-parent-kind-type-literal","parent":"Fluence.__type"},{"id":13,"kind":1024,"name":"removeMarineService","url":"modules.html#Fluence.__type.removeMarineService","classes":"tsd-kind-property tsd-parent-kind-type-literal","parent":"Fluence.__type"},{"id":14,"kind":65536,"name":"__type","url":"modules.html#Fluence.__type.__type-4","classes":"tsd-kind-type-literal tsd-parent-kind-type-literal","parent":"Fluence.__type"},{"id":15,"kind":256,"name":"PeerStatus","url":"interfaces/PeerStatus.html","classes":"tsd-kind-interface"},{"id":16,"kind":1024,"name":"isInitialized","url":"interfaces/PeerStatus.html#isInitialized","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"PeerStatus"},{"id":17,"kind":1024,"name":"isConnected","url":"interfaces/PeerStatus.html#isConnected","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"PeerStatus"},{"id":18,"kind":1024,"name":"peerId","url":"interfaces/PeerStatus.html#peerId","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"PeerStatus"},{"id":19,"kind":1024,"name":"relayPeerId","url":"interfaces/PeerStatus.html#relayPeerId","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"PeerStatus"},{"id":20,"kind":128,"name":"KeyPair","url":"classes/KeyPair.html","classes":"tsd-kind-class"},{"id":21,"kind":2048,"name":"fromEd25519SK","url":"classes/KeyPair.html#fromEd25519SK","classes":"tsd-kind-method tsd-parent-kind-class tsd-is-static","parent":"KeyPair"},{"id":22,"kind":2048,"name":"randomEd25519","url":"classes/KeyPair.html#randomEd25519","classes":"tsd-kind-method tsd-parent-kind-class tsd-is-static","parent":"KeyPair"},{"id":23,"kind":512,"name":"constructor","url":"classes/KeyPair.html#constructor","classes":"tsd-kind-constructor tsd-parent-kind-class","parent":"KeyPair"},{"id":24,"kind":1024,"name":"Libp2pPeerId","url":"classes/KeyPair.html#Libp2pPeerId","classes":"tsd-kind-property tsd-parent-kind-class","parent":"KeyPair"},{"id":25,"kind":2048,"name":"toB58String","url":"classes/KeyPair.html#toB58String","classes":"tsd-kind-method tsd-parent-kind-class","parent":"KeyPair"},{"id":26,"kind":2048,"name":"toEd25519PrivateKey","url":"classes/KeyPair.html#toEd25519PrivateKey","classes":"tsd-kind-method tsd-parent-kind-class","parent":"KeyPair"},{"id":27,"kind":2048,"name":"signBytes","url":"classes/KeyPair.html#signBytes","classes":"tsd-kind-method tsd-parent-kind-class","parent":"KeyPair"},{"id":28,"kind":2048,"name":"verify","url":"classes/KeyPair.html#verify","classes":"tsd-kind-method tsd-parent-kind-class","parent":"KeyPair"},{"id":29,"kind":128,"name":"FluencePeer","url":"classes/FluencePeer.html","classes":"tsd-kind-class"},{"id":30,"kind":2048,"name":"isInstance","url":"classes/FluencePeer.html#isInstance","classes":"tsd-kind-method tsd-parent-kind-class tsd-is-static","parent":"FluencePeer"},{"id":31,"kind":512,"name":"constructor","url":"classes/FluencePeer.html#constructor","classes":"tsd-kind-constructor tsd-parent-kind-class","parent":"FluencePeer"},{"id":32,"kind":2048,"name":"getStatus","url":"classes/FluencePeer.html#getStatus","classes":"tsd-kind-method tsd-parent-kind-class","parent":"FluencePeer"},{"id":33,"kind":2048,"name":"start","url":"classes/FluencePeer.html#start","classes":"tsd-kind-method tsd-parent-kind-class","parent":"FluencePeer"},{"id":34,"kind":2048,"name":"getServices","url":"classes/FluencePeer.html#getServices","classes":"tsd-kind-method tsd-parent-kind-class","parent":"FluencePeer"},{"id":35,"kind":2048,"name":"registerMarineService","url":"classes/FluencePeer.html#registerMarineService","classes":"tsd-kind-method tsd-parent-kind-class","parent":"FluencePeer"},{"id":36,"kind":2048,"name":"removeMarineService","url":"classes/FluencePeer.html#removeMarineService","classes":"tsd-kind-method tsd-parent-kind-class","parent":"FluencePeer"},{"id":37,"kind":2048,"name":"stop","url":"classes/FluencePeer.html#stop","classes":"tsd-kind-method tsd-parent-kind-class","parent":"FluencePeer"},{"id":38,"kind":262144,"name":"internals","url":"classes/FluencePeer.html#internals","classes":"tsd-kind-get-signature tsd-parent-kind-class","parent":"FluencePeer"},{"id":39,"kind":4194304,"name":"AvmLoglevel","url":"modules.html#AvmLoglevel","classes":"tsd-kind-type-alias"},{"id":40,"kind":256,"name":"PeerConfig","url":"interfaces/PeerConfig.html","classes":"tsd-kind-interface"},{"id":41,"kind":1024,"name":"connectTo","url":"interfaces/PeerConfig.html#connectTo","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"PeerConfig"},{"id":42,"kind":1024,"name":"avmLogLevel","url":"interfaces/PeerConfig.html#avmLogLevel","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"PeerConfig"},{"id":43,"kind":1024,"name":"KeyPair","url":"interfaces/PeerConfig.html#KeyPair","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"PeerConfig"},{"id":44,"kind":1024,"name":"checkConnectionTimeoutMs","url":"interfaces/PeerConfig.html#checkConnectionTimeoutMs","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"PeerConfig"},{"id":45,"kind":1024,"name":"skipCheckConnection","url":"interfaces/PeerConfig.html#skipCheckConnection","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"PeerConfig"},{"id":46,"kind":1024,"name":"dialTimeoutMs","url":"interfaces/PeerConfig.html#dialTimeoutMs","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"PeerConfig"},{"id":47,"kind":1024,"name":"defaultTtlMs","url":"interfaces/PeerConfig.html#defaultTtlMs","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"PeerConfig"},{"id":48,"kind":1024,"name":"avmRunner","url":"interfaces/PeerConfig.html#avmRunner","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"PeerConfig"},{"id":49,"kind":1024,"name":"marineJS","url":"interfaces/PeerConfig.html#marineJS","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"PeerConfig"},{"id":50,"kind":65536,"name":"__type","url":"interfaces/PeerConfig.html#__type-1","classes":"tsd-kind-type-literal tsd-parent-kind-interface","parent":"PeerConfig"},{"id":51,"kind":1024,"name":"workerScriptPath","url":"interfaces/PeerConfig.html#__type-1.workerScriptPath","classes":"tsd-kind-property tsd-parent-kind-type-literal","parent":"PeerConfig.__type"},{"id":52,"kind":1024,"name":"marineWasmPath","url":"interfaces/PeerConfig.html#__type-1.marineWasmPath","classes":"tsd-kind-property tsd-parent-kind-type-literal","parent":"PeerConfig.__type"},{"id":53,"kind":1024,"name":"avmWasmPath","url":"interfaces/PeerConfig.html#__type-1.avmWasmPath","classes":"tsd-kind-property tsd-parent-kind-type-literal","parent":"PeerConfig.__type"},{"id":54,"kind":1024,"name":"debug","url":"interfaces/PeerConfig.html#debug","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"PeerConfig"},{"id":55,"kind":65536,"name":"__type","url":"interfaces/PeerConfig.html#__type","classes":"tsd-kind-type-literal tsd-parent-kind-interface","parent":"PeerConfig"},{"id":56,"kind":1024,"name":"printParticleId","url":"interfaces/PeerConfig.html#__type.printParticleId","classes":"tsd-kind-property tsd-parent-kind-type-literal","parent":"PeerConfig.__type"},{"id":57,"kind":1024,"name":"marineLogLevel","url":"interfaces/PeerConfig.html#__type.marineLogLevel","classes":"tsd-kind-property tsd-parent-kind-type-literal","parent":"PeerConfig.__type"},{"id":58,"kind":4194304,"name":"PeerIdB58","url":"modules.html#PeerIdB58","classes":"tsd-kind-type-alias"},{"id":59,"kind":256,"name":"CallParams","url":"interfaces/CallParams.html","classes":"tsd-kind-interface tsd-has-type-parameter"},{"id":60,"kind":1024,"name":"particleId","url":"interfaces/CallParams.html#particleId","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"CallParams"},{"id":61,"kind":1024,"name":"initPeerId","url":"interfaces/CallParams.html#initPeerId","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"CallParams"},{"id":62,"kind":1024,"name":"timestamp","url":"interfaces/CallParams.html#timestamp","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"CallParams"},{"id":63,"kind":1024,"name":"ttl","url":"interfaces/CallParams.html#ttl","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"CallParams"},{"id":64,"kind":1024,"name":"signature","url":"interfaces/CallParams.html#signature","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"CallParams"},{"id":65,"kind":1024,"name":"tetraplets","url":"interfaces/CallParams.html#tetraplets","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"CallParams"}],"index":{"version":"2.3.9","fields":["name","parent"],"fieldVectors":[["name/0",[0,37.992]],["parent/0",[]],["name/1",[1,32.884]],["parent/1",[]],["name/2",[2,19.534]],["parent/2",[1,3.089]],["name/3",[3,32.884]],["parent/3",[4,1.577]],["name/4",[2,19.534]],["parent/4",[4,1.577]],["name/5",[5,32.884]],["parent/5",[4,1.577]],["name/6",[2,19.534]],["parent/6",[4,1.577]],["name/7",[6,32.884]],["parent/7",[4,1.577]],["name/8",[2,19.534]],["parent/8",[4,1.577]],["name/9",[7,37.992]],["parent/9",[4,1.577]],["name/10",[2,19.534]],["parent/10",[4,1.577]],["name/11",[8,32.884]],["parent/11",[4,1.577]],["name/12",[2,19.534]],["parent/12",[4,1.577]],["name/13",[9,32.884]],["parent/13",[4,1.577]],["name/14",[2,19.534]],["parent/14",[4,1.577]],["name/15",[10,24.999]],["parent/15",[]],["name/16",[11,37.992]],["parent/16",[10,2.348]],["name/17",[12,37.992]],["parent/17",[10,2.348]],["name/18",[13,37.992]],["parent/18",[10,2.348]],["name/19",[14,37.992]],["parent/19",[10,2.348]],["name/20",[15,18.533]],["parent/20",[]],["name/21",[16,37.992]],["parent/21",[15,1.741]],["name/22",[17,37.992]],["parent/22",[15,1.741]],["name/23",[18,32.884]],["parent/23",[15,1.741]],["name/24",[19,37.992]],["parent/24",[15,1.741]],["name/25",[20,37.992]],["parent/25",[15,1.741]],["name/26",[21,37.992]],["parent/26",[15,1.741]],["name/27",[22,37.992]],["parent/27",[15,1.741]],["name/28",[23,37.992]],["parent/28",[15,1.741]],["name/29",[24,18.533]],["parent/29",[]],["name/30",[25,37.992]],["parent/30",[24,1.741]],["name/31",[18,32.884]],["parent/31",[24,1.741]],["name/32",[6,32.884]],["parent/32",[24,1.741]],["name/33",[3,32.884]],["parent/33",[24,1.741]],["name/34",[26,37.992]],["parent/34",[24,1.741]],["name/35",[8,32.884]],["parent/35",[24,1.741]],["name/36",[9,32.884]],["parent/36",[24,1.741]],["name/37",[5,32.884]],["parent/37",[24,1.741]],["name/38",[27,37.992]],["parent/38",[24,1.741]],["name/39",[28,32.884]],["parent/39",[]],["name/40",[29,16.02]],["parent/40",[]],["name/41",[30,37.992]],["parent/41",[29,1.505]],["name/42",[28,32.884]],["parent/42",[29,1.505]],["name/43",[15,18.533]],["parent/43",[29,1.505]],["name/44",[31,37.992]],["parent/44",[29,1.505]],["name/45",[32,37.992]],["parent/45",[29,1.505]],["name/46",[33,37.992]],["parent/46",[29,1.505]],["name/47",[34,37.992]],["parent/47",[29,1.505]],["name/48",[35,37.992]],["parent/48",[29,1.505]],["name/49",[36,37.992]],["parent/49",[29,1.505]],["name/50",[2,19.534]],["parent/50",[29,1.505]],["name/51",[37,37.992]],["parent/51",[38,2.348]],["name/52",[39,37.992]],["parent/52",[38,2.348]],["name/53",[40,37.992]],["parent/53",[38,2.348]],["name/54",[41,37.992]],["parent/54",[29,1.505]],["name/55",[2,19.534]],["parent/55",[29,1.505]],["name/56",[42,37.992]],["parent/56",[38,2.348]],["name/57",[43,37.992]],["parent/57",[38,2.348]],["name/58",[44,37.992]],["parent/58",[]],["name/59",[45,21.898]],["parent/59",[]],["name/60",[46,37.992]],["parent/60",[45,2.057]],["name/61",[47,37.992]],["parent/61",[45,2.057]],["name/62",[48,37.992]],["parent/62",[45,2.057]],["name/63",[49,37.992]],["parent/63",[45,2.057]],["name/64",[50,37.992]],["parent/64",[45,2.057]],["name/65",[51,37.992]],["parent/65",[45,2.057]]],"invertedIndex":[["__type",{"_index":2,"name":{"2":{},"4":{},"6":{},"8":{},"10":{},"12":{},"14":{},"50":{},"55":{}},"parent":{}}],["avmloglevel",{"_index":28,"name":{"39":{},"42":{}},"parent":{}}],["avmrunner",{"_index":35,"name":{"48":{}},"parent":{}}],["avmwasmpath",{"_index":40,"name":{"53":{}},"parent":{}}],["callparams",{"_index":45,"name":{"59":{}},"parent":{"60":{},"61":{},"62":{},"63":{},"64":{},"65":{}}}],["checkconnectiontimeoutms",{"_index":31,"name":{"44":{}},"parent":{}}],["connectto",{"_index":30,"name":{"41":{}},"parent":{}}],["constructor",{"_index":18,"name":{"23":{},"31":{}},"parent":{}}],["debug",{"_index":41,"name":{"54":{}},"parent":{}}],["defaultttlms",{"_index":34,"name":{"47":{}},"parent":{}}],["dialtimeoutms",{"_index":33,"name":{"46":{}},"parent":{}}],["fluence",{"_index":1,"name":{"1":{}},"parent":{"2":{}}}],["fluence.__type",{"_index":4,"name":{},"parent":{"3":{},"4":{},"5":{},"6":{},"7":{},"8":{},"9":{},"10":{},"11":{},"12":{},"13":{},"14":{}}}],["fluencepeer",{"_index":24,"name":{"29":{}},"parent":{"30":{},"31":{},"32":{},"33":{},"34":{},"35":{},"36":{},"37":{},"38":{}}}],["fromed25519sk",{"_index":16,"name":{"21":{}},"parent":{}}],["getpeer",{"_index":7,"name":{"9":{}},"parent":{}}],["getservices",{"_index":26,"name":{"34":{}},"parent":{}}],["getstatus",{"_index":6,"name":{"7":{},"32":{}},"parent":{}}],["initpeerid",{"_index":47,"name":{"61":{}},"parent":{}}],["internals",{"_index":27,"name":{"38":{}},"parent":{}}],["isconnected",{"_index":12,"name":{"17":{}},"parent":{}}],["isinitialized",{"_index":11,"name":{"16":{}},"parent":{}}],["isinstance",{"_index":25,"name":{"30":{}},"parent":{}}],["keypair",{"_index":15,"name":{"20":{},"43":{}},"parent":{"21":{},"22":{},"23":{},"24":{},"25":{},"26":{},"27":{},"28":{}}}],["libp2ppeerid",{"_index":19,"name":{"24":{}},"parent":{}}],["marinejs",{"_index":36,"name":{"49":{}},"parent":{}}],["marineloglevel",{"_index":43,"name":{"57":{}},"parent":{}}],["marinewasmpath",{"_index":39,"name":{"52":{}},"parent":{}}],["particleid",{"_index":46,"name":{"60":{}},"parent":{}}],["peerconfig",{"_index":29,"name":{"40":{}},"parent":{"41":{},"42":{},"43":{},"44":{},"45":{},"46":{},"47":{},"48":{},"49":{},"50":{},"54":{},"55":{}}}],["peerconfig.__type",{"_index":38,"name":{},"parent":{"51":{},"52":{},"53":{},"56":{},"57":{}}}],["peerid",{"_index":13,"name":{"18":{}},"parent":{}}],["peeridb58",{"_index":44,"name":{"58":{}},"parent":{}}],["peerstatus",{"_index":10,"name":{"15":{}},"parent":{"16":{},"17":{},"18":{},"19":{}}}],["printparticleid",{"_index":42,"name":{"56":{}},"parent":{}}],["randomed25519",{"_index":17,"name":{"22":{}},"parent":{}}],["registermarineservice",{"_index":8,"name":{"11":{},"35":{}},"parent":{}}],["relaypeerid",{"_index":14,"name":{"19":{}},"parent":{}}],["removemarineservice",{"_index":9,"name":{"13":{},"36":{}},"parent":{}}],["setloglevel",{"_index":0,"name":{"0":{}},"parent":{}}],["signature",{"_index":50,"name":{"64":{}},"parent":{}}],["signbytes",{"_index":22,"name":{"27":{}},"parent":{}}],["skipcheckconnection",{"_index":32,"name":{"45":{}},"parent":{}}],["start",{"_index":3,"name":{"3":{},"33":{}},"parent":{}}],["stop",{"_index":5,"name":{"5":{},"37":{}},"parent":{}}],["tetraplets",{"_index":51,"name":{"65":{}},"parent":{}}],["timestamp",{"_index":48,"name":{"62":{}},"parent":{}}],["tob58string",{"_index":20,"name":{"25":{}},"parent":{}}],["toed25519privatekey",{"_index":21,"name":{"26":{}},"parent":{}}],["ttl",{"_index":49,"name":{"63":{}},"parent":{}}],["verify",{"_index":23,"name":{"28":{}},"parent":{}}],["workerscriptpath",{"_index":37,"name":{"51":{}},"parent":{}}]],"pipeline":[]}} \ No newline at end of file diff --git a/docs/classes/FluencePeer.html b/docs/classes/FluencePeer.html index b6896303d..1117f2c75 100644 --- a/docs/classes/FluencePeer.html +++ b/docs/classes/FluencePeer.html @@ -124,7 +124,7 @@

constructor

  • @@ -298,7 +298,7 @@

    getServices

  • Returns { sig: Sig }

    @@ -320,7 +320,7 @@

    getStatus

  • @@ -342,7 +342,7 @@

    registerMarineService

  • @@ -385,7 +385,7 @@

    removeMarineService

  • @@ -416,7 +416,7 @@

    start

  • @@ -448,7 +448,7 @@

    stop

  • @@ -471,7 +471,7 @@

    Static isInstance

  • diff --git a/docs/classes/KeyPair.html b/docs/classes/KeyPair.html index 0368da35a..b510be01f 100644 --- a/docs/classes/KeyPair.html +++ b/docs/classes/KeyPair.html @@ -115,7 +115,7 @@

    constructor

  • Parameters

    @@ -137,7 +137,7 @@

    Libp2pPeerId

    Libp2pPeerId: PeerId
    @@ -159,7 +159,7 @@

    signBytes

  • Parameters

    @@ -182,7 +182,7 @@

    toB58String

  • Returns string

    @@ -199,7 +199,7 @@

    toEd25519PrivateKey

  • Returns Uint8Array

    @@ -217,7 +217,7 @@

    verify

  • Parameters

    @@ -243,7 +243,7 @@

    Static fromEd25519SK

  • @@ -274,7 +274,7 @@

    Static randomEd25519

  • diff --git a/docs/interfaces/CallParams.html b/docs/interfaces/CallParams.html index 8644899b6..f11f51efc 100644 --- a/docs/interfaces/CallParams.html +++ b/docs/interfaces/CallParams.html @@ -118,7 +118,7 @@

    initPeerId

    initPeerId: string
    @@ -133,7 +133,7 @@

    particleId

    particleId: string
    @@ -148,7 +148,7 @@

    signature

    signature: string
    @@ -163,7 +163,7 @@

    tetraplets

    tetraplets: {[ key in string]: SecurityTetraplet[] }
    @@ -178,7 +178,7 @@

    timestamp

    timestamp: number
    @@ -193,7 +193,7 @@

    ttl

    ttl: number
    diff --git a/docs/interfaces/PeerConfig.html b/docs/interfaces/PeerConfig.html index dc0f23cbf..0c848df37 100644 --- a/docs/interfaces/PeerConfig.html +++ b/docs/interfaces/PeerConfig.html @@ -110,7 +110,7 @@

    Optional KeyPair

    KeyPair: KeyPair
    @@ -126,13 +126,18 @@

    Optional avmLogLevel
    avmLogLevel: LogLevel
    -
    -

    Specify log level for Aqua VM running on the peer

    -
    +
    +
    deprecated.
    +

    AVM run through marine-js infrastructure.

    +
    +
    see
    +

    debug.marineLogLevel option to configure logging level of AVM

    +
    +
    @@ -141,7 +146,7 @@

    Optional avmRunner

    avmRunner: AvmRunner
    @@ -161,7 +166,7 @@

    Optional checkConnection<
    checkConnectionTimeoutMs: number
    @@ -178,7 +183,7 @@

    Optional connectTo

    connectTo: string | Multiaddr | Node
    @@ -197,10 +202,10 @@

    Optional connectTo

    Optional debug

    -
    debug: { printParticleId?: boolean }
    +
    debug: { marineLogLevel?: LogLevel; printParticleId?: boolean }
    @@ -211,6 +216,14 @@

    Optional debug

    Type declaration

  • @@ -149,7 +149,7 @@

    internals