From 267ebb687f521ae60557b76cb01c5e9b70525358 Mon Sep 17 00:00:00 2001 From: Pavel Date: Mon, 9 Jan 2023 15:51:15 +0300 Subject: [PATCH] Move non-relevant code from Marine repo into FluenceJS (#227) 1. Move marine-related part into FJS repo (DXJ184) 2. Move towards component-oriented architecture (DXJ183) 3. Different JS Client distros for node.js and web (DXJ185) --- .../workflows/{e2e.yml => e2e.yml.disabled} | 0 ...github.yml => release_github.yml.disabled} | 0 ...ages.yml => release_packages.yml.disabled} | 0 .../{snapshot.yml => snapshot.yml.disabled} | 0 .github/workflows/tests.yml | 134 +- .github/workflows/tests.yml.disabled | 112 + .npmrc | 1 + README.md | 16 +- docs/.nojekyll | 1 - docs/assets/highlight.css | 22 - docs/assets/icons.css | 1043 ----- docs/assets/icons.png | Bin 9615 -> 0 bytes docs/assets/icons@2x.png | Bin 28144 -> 0 bytes docs/assets/main.js | 52 - docs/assets/search.js | 1 - docs/assets/style.css | 1414 ------ docs/assets/widgets.png | Bin 480 -> 0 bytes docs/assets/widgets@2x.png | Bin 855 -> 0 bytes docs/classes/FluencePeer.html | 35 - docs/classes/KeyPair.html | 14 - docs/index.html | 16 - docs/interfaces/CallParams.html | 16 - docs/interfaces/PeerConfig.html | 52 - docs/modules.html | 69 - package-lock.json | 6 + packages/@tests/marine/node/.gitignore | 19 + packages/@tests/marine/node/.prettierrc.js | 8 + packages/@tests/marine/node/jest.config.js | 5 + packages/@tests/marine/node/package.json | 19 + packages/@tests/marine/node/src/test.spec.ts | 54 + packages/@tests/marine/node/tsconfig.json | 17 + packages/@tests/marine/web/.gitignore | 22 + packages/@tests/marine/web/.prettierrc.js | 8 + packages/@tests/marine/web/index.html | 12 + packages/@tests/marine/web/jest.config.js | 9 + packages/@tests/marine/web/package.json.skip | 39 + packages/@tests/marine/web/src/index.ts | 56 + packages/@tests/marine/web/test/test.spec.ts | 115 + packages/@tests/marine/web/tsconfig.json | 23 + packages/@tests/marine/web/webpack.config.js | 65 + packages/@tests/react_test/package.json.skip | 6 +- packages/@tests/react_test/src/App.tsx | 6 +- packages/@tests/smoke/package.json | 7 +- packages/@tests/smoke/src/index.ts | 5 +- .../compiler-support}/.gitignore | 0 .../compiler-support}/.prettierignore | 0 .../compiler-support}/.prettierrc.js | 0 packages/client/compiler-support/README.md | 11 + packages/client/compiler-support/package.json | 28 + packages/client/compiler-support/src/util.ts | 6 + packages/client/compiler-support/src/v3.ts | 175 + .../compiler-support/src}/v4.ts | 6 +- .../compiler-support}/tsconfig.json | 0 .../fluence-js}/.gitignore | 0 packages/client/fluence-js/.prettierignore | 1 + .../fluence-js}/.prettierrc.js | 0 .../fluence-js}/CONTRIBUTING.md | 0 packages/{ => client}/fluence-js/README.md | 0 .../{ => client}/fluence-js/jest.config.js | 0 packages/client/fluence-js/package.json | 32 + packages/{ => client}/fluence-js/src/index.ts | 13 +- packages/client/fluence-js/src/services.ts | 2 + packages/client/fluence-js/tsconfig.json | 21 + .../js-client.node}/.gitignore | 0 .../client/js-client.node/.prettierignore | 1 + .../js-client.node}/.prettierrc.js | 0 packages/client/js-client.node/README.md | 11 + packages/client/js-client.node/package.json | 30 + packages/client/js-client.node/src/index.ts | 29 + packages/client/js-client.node/tsconfig.json | 21 + .../js-client.web}/.gitignore | 0 packages/client/js-client.web/.prettierignore | 1 + .../js-client.web}/.prettierrc.js | 0 packages/client/js-client.web/README.md | 11 + packages/client/js-client.web/package.json | 30 + packages/client/js-client.web/src/index.ts | 23 + packages/client/js-client.web/tsconfig.json | 21 + packages/client/tools/.gitignore | 21 + .../tools}/.npmignore | 0 packages/client/tools/.prettierignore | 1 + packages/client/tools/.prettierrc.js | 8 + .../tools}/CONTRIBUTING.md | 0 packages/client/tools/README.md | 11 + packages/client/tools/package.json | 25 + .../tools => client/tools/src}/copyMarine.ts | 2 +- packages/client/tools/tsconfig.json | 21 + packages/core/connection/.gitignore | 21 + .../connection}/.npmignore | 0 packages/core/connection/.prettierrc.js | 8 + .../connection}/CONTRIBUTING.md | 0 .../connection}/README.md | 0 .../connection}/package.json | 10 +- .../connection}/src/Buffer.ts | 0 .../connection}/src/index.ts | 14 +- .../connection}/tsconfig.json | 0 packages/core/interfaces/.gitignore | 21 + .../interfaces}/.npmignore | 0 packages/core/interfaces/.prettierrc.js | 8 + .../interfaces}/CONTRIBUTING.md | 0 .../interfaces}/README.md | 0 .../interfaces}/package.json | 8 +- packages/core/interfaces/src/index.ts | 90 + .../interfaces}/tsconfig.json | 6 +- packages/core/js-peer/.gitignore | 21 + .../js-peer}/.npmignore | 0 packages/core/js-peer/.prettierignore | 1 + packages/core/js-peer/.prettierrc.js | 8 + packages/core/js-peer/CONTRIBUTING.md | 13 + packages/core/js-peer/README.md | 11 + .../src => core/js-peer/aqua}/node-utils.aqua | 0 .../src => core/js-peer/aqua}/services.aqua | 0 .../js-peer/aqua}/single-module-srv.aqua | 0 packages/core/js-peer/jest.config.js | 6 + .../{fluence-js => core/js-peer}/package.json | 54 +- .../js-peer/src}/FluencePeer.ts | 140 +- .../internal => core/js-peer/src}/Particle.ts | 4 +- .../js-peer}/src/__test__/connection.ts | 0 .../src/__test__/integration/avm.spec.ts | 158 + .../__test__/integration/greeting-record.wasm | Bin .../src/__test__/integration/greeting.wasm | Bin .../__test__/integration/jsonBuiltin.spec.ts | 9 +- .../src/__test__/integration}/marine-js.aqua | 13 + .../__test__/integration/marine-js.spec.ts | 44 +- .../src/__test__/integration/peer.spec.ts | 427 ++ .../src/__test__/integration/sigService.aqua} | 2 +- .../__test__/integration/sigService.spec.ts | 96 + .../src/__test__/integration/srv.aqua} | 10 +- .../src/__test__/integration/srv.spec.ts | 74 + .../src/__test__/unit/KeyPair.spec.ts | 1 - .../js-peer}/src/__test__/unit/ast.spec.ts | 10 +- .../src/__test__/unit/builtInHandler.spec.ts | 8 +- .../src/__test__/unit/compiler/v3.spec.ts | 2 +- .../src/__test__/unit/ephemeral.spec.ts | 12 +- packages/core/js-peer/src/__test__/util.ts | 73 + packages/core/js-peer/src/_aqua/node-utils.ts | 81 + packages/core/js-peer/src/_aqua/services.ts | 139 + .../js-peer/src/_aqua/single-module-srv.ts | 138 + packages/core/js-peer/src/avm.ts | 36 + .../js-peer/src}/builtins/Sig.ts | 0 .../js-peer/src}/builtins/SingleModuleSrv.ts | 16 +- .../js-peer/src}/builtins/common.ts | 15 +- .../js-peer/src}/builtins/securityGuard.ts | 0 .../js-peer/src}/commonTypes.ts | 0 .../src/compilerSupport}/callFunction.ts | 70 +- .../src/compilerSupport}/conversions.ts | 6 +- .../js-peer/src/compilerSupport}/interface.ts | 0 .../src/compilerSupport/registerService.ts | 45 + .../js-peer/src/compilerSupport}/services.ts | 6 +- .../js-peer/src}/ephemeral.ts | 19 +- .../internal => core/js-peer/src}/utils.ts | 44 +- packages/core/js-peer/tsconfig.json | 21 + packages/core/keypair/.gitignore | 21 + packages/core/keypair/.npmignore | 12 + packages/core/keypair/.prettierrc.js | 8 + packages/core/keypair/CONTRIBUTING.md | 13 + .../keypair}/README.md | 0 .../keypair}/package.json | 4 +- .../keypair}/src/index.ts | 0 .../keypair}/tsconfig.json | 0 packages/fluence-interfaces/src/index.ts | 29 - .../aqua/tests/marine-js-logging.aqua | 16 - .../src/__test__/_aqua/marine-js-logging.ts | 168 - .../src/__test__/_aqua/marine-js.ts | 151 - .../src/__test__/_aqua/sig-tests.ts | 264 -- .../src/__test__/_aqua/srv-tests.ts | 341 -- .../src/__test__/integration/avm.spec.ts | 162 - .../src/__test__/integration/peer.spec.ts | 419 -- .../__test__/integration/sigService.spec.ts | 88 - .../src/__test__/integration/srv.spec.ts | 73 - .../src/__test__/unit/compiler/v2.spec.ts | 37 - packages/fluence-js/src/__test__/util.ts | 15 - packages/fluence-js/src/internal/Buffer.ts | 20 - .../src/internal/_aqua/node-utils.ts | 80 - .../fluence-js/src/internal/_aqua/services.ts | 138 - .../src/internal/_aqua/single-module-srv.ts | 137 - .../src/internal/compilerSupport/v2.ts | 553 --- .../src/internal/compilerSupport/v3.ts | 21 - .../compilerSupport/v3impl/registerService.ts | 95 - packages/fluence-js/src/services.ts | 2 - packages/marine/background-runner/.gitignore | 21 + packages/marine/background-runner/.npmignore | 12 + .../marine/background-runner/.prettierrc.js | 8 + .../marine/background-runner/CONTRIBUTING.md | 13 + packages/marine/background-runner/README.md | 11 + .../marine/background-runner/package.json | 27 + .../marine/background-runner/src/index.ts | 76 + .../marine/background-runner/tsconfig.json | 12 + packages/marine/deps-loader.node/.gitignore | 21 + packages/marine/deps-loader.node/.npmignore | 12 + .../marine/deps-loader.node/.prettierrc.js | 8 + .../marine/deps-loader.node/CONTRIBUTING.md | 13 + packages/marine/deps-loader.node/README.md | 11 + packages/marine/deps-loader.node/package.json | 31 + packages/marine/deps-loader.node/postbuild.sh | 4 + packages/marine/deps-loader.node/src/index.ts | 78 + .../marine/deps-loader.node/tsconfig.json | 17 + packages/marine/deps-loader.web/.gitignore | 21 + packages/marine/deps-loader.web/.npmignore | 12 + .../marine/deps-loader.web/.prettierrc.js | 8 + .../marine/deps-loader.web/CONTRIBUTING.md | 13 + packages/marine/deps-loader.web/README.md | 11 + packages/marine/deps-loader.web/package.json | 30 + packages/marine/deps-loader.web/postbuild.sh | 4 + packages/marine/deps-loader.web/src/index.ts | 54 + packages/marine/deps-loader.web/tsconfig.json | 18 + packages/marine/worker-script/.gitignore | 21 + packages/marine/worker-script/.npmignore | 12 + packages/marine/worker-script/.prettierrc.js | 8 + packages/marine/worker-script/CONTRIBUTING.md | 13 + packages/marine/worker-script/README.md | 11 + packages/marine/worker-script/build_b64.sh | 36 + packages/marine/worker-script/package.json | 31 + packages/marine/worker-script/src/index.ts | 82 + packages/marine/worker-script/tsconfig.json | 18 + .../marine/worker-script/webpack.config.js | 47 + .../worker-script/webpack.config.node.js | 10 + .../worker-script/webpack.config.web.js | 10 + pnpm-lock.yaml | 3968 +++++++++++++++-- typedoc.json | 7 - typedoc.md | 16 - 220 files changed, 7421 insertions(+), 6362 deletions(-) rename .github/workflows/{e2e.yml => e2e.yml.disabled} (100%) rename .github/workflows/{release_github.yml => release_github.yml.disabled} (100%) rename .github/workflows/{release_packages.yml => release_packages.yml.disabled} (100%) rename .github/workflows/{snapshot.yml => snapshot.yml.disabled} (100%) create mode 100644 .github/workflows/tests.yml.disabled delete mode 100644 docs/.nojekyll delete mode 100644 docs/assets/highlight.css delete mode 100644 docs/assets/icons.css delete mode 100644 docs/assets/icons.png delete mode 100644 docs/assets/icons@2x.png delete mode 100644 docs/assets/main.js delete mode 100644 docs/assets/search.js delete mode 100644 docs/assets/style.css delete mode 100644 docs/assets/widgets.png delete mode 100644 docs/assets/widgets@2x.png delete mode 100644 docs/classes/FluencePeer.html delete mode 100644 docs/classes/KeyPair.html delete mode 100644 docs/index.html delete mode 100644 docs/interfaces/CallParams.html delete mode 100644 docs/interfaces/PeerConfig.html delete mode 100644 docs/modules.html create mode 100644 package-lock.json create mode 100644 packages/@tests/marine/node/.gitignore create mode 100644 packages/@tests/marine/node/.prettierrc.js create mode 100644 packages/@tests/marine/node/jest.config.js create mode 100644 packages/@tests/marine/node/package.json create mode 100644 packages/@tests/marine/node/src/test.spec.ts create mode 100644 packages/@tests/marine/node/tsconfig.json create mode 100644 packages/@tests/marine/web/.gitignore create mode 100644 packages/@tests/marine/web/.prettierrc.js create mode 100644 packages/@tests/marine/web/index.html create mode 100644 packages/@tests/marine/web/jest.config.js create mode 100644 packages/@tests/marine/web/package.json.skip create mode 100644 packages/@tests/marine/web/src/index.ts create mode 100644 packages/@tests/marine/web/test/test.spec.ts create mode 100644 packages/@tests/marine/web/tsconfig.json create mode 100644 packages/@tests/marine/web/webpack.config.js rename packages/{fluence-connection => client/compiler-support}/.gitignore (100%) rename packages/{fluence-js => client/compiler-support}/.prettierignore (100%) rename packages/{fluence-connection => client/compiler-support}/.prettierrc.js (100%) create mode 100644 packages/client/compiler-support/README.md create mode 100644 packages/client/compiler-support/package.json create mode 100644 packages/client/compiler-support/src/util.ts create mode 100644 packages/client/compiler-support/src/v3.ts rename packages/{fluence-js/src/internal/compilerSupport => client/compiler-support/src}/v4.ts (88%) rename packages/{fluence-js => client/compiler-support}/tsconfig.json (100%) rename packages/{fluence-interfaces => client/fluence-js}/.gitignore (100%) create mode 100644 packages/client/fluence-js/.prettierignore rename packages/{fluence-interfaces => client/fluence-js}/.prettierrc.js (100%) rename packages/{fluence-connection => client/fluence-js}/CONTRIBUTING.md (100%) rename packages/{ => client}/fluence-js/README.md (100%) rename packages/{ => client}/fluence-js/jest.config.js (100%) create mode 100644 packages/client/fluence-js/package.json rename packages/{ => client}/fluence-js/src/index.ts (84%) create mode 100644 packages/client/fluence-js/src/services.ts create mode 100644 packages/client/fluence-js/tsconfig.json rename packages/{fluence-js => client/js-client.node}/.gitignore (100%) create mode 100644 packages/client/js-client.node/.prettierignore rename packages/{fluence-js => client/js-client.node}/.prettierrc.js (100%) create mode 100644 packages/client/js-client.node/README.md create mode 100644 packages/client/js-client.node/package.json create mode 100644 packages/client/js-client.node/src/index.ts create mode 100644 packages/client/js-client.node/tsconfig.json rename packages/{fluence-keypair => client/js-client.web}/.gitignore (100%) create mode 100644 packages/client/js-client.web/.prettierignore rename packages/{fluence-keypair => client/js-client.web}/.prettierrc.js (100%) create mode 100644 packages/client/js-client.web/README.md create mode 100644 packages/client/js-client.web/package.json create mode 100644 packages/client/js-client.web/src/index.ts create mode 100644 packages/client/js-client.web/tsconfig.json create mode 100644 packages/client/tools/.gitignore rename packages/{fluence-connection => client/tools}/.npmignore (100%) create mode 100644 packages/client/tools/.prettierignore create mode 100644 packages/client/tools/.prettierrc.js rename packages/{fluence-interfaces => client/tools}/CONTRIBUTING.md (100%) create mode 100644 packages/client/tools/README.md create mode 100644 packages/client/tools/package.json rename packages/{fluence-js/src/tools => client/tools/src}/copyMarine.ts (94%) create mode 100644 packages/client/tools/tsconfig.json create mode 100644 packages/core/connection/.gitignore rename packages/{fluence-interfaces => core/connection}/.npmignore (100%) create mode 100644 packages/core/connection/.prettierrc.js rename packages/{fluence-js => core/connection}/CONTRIBUTING.md (100%) rename packages/{fluence-connection => core/connection}/README.md (100%) rename packages/{fluence-connection => core/connection}/package.json (79%) rename packages/{fluence-connection => core/connection}/src/Buffer.ts (100%) rename packages/{fluence-connection => core/connection}/src/index.ts (99%) rename packages/{fluence-connection => core/connection}/tsconfig.json (100%) create mode 100644 packages/core/interfaces/.gitignore rename packages/{fluence-js => core/interfaces}/.npmignore (100%) create mode 100644 packages/core/interfaces/.prettierrc.js rename packages/{fluence-keypair => core/interfaces}/CONTRIBUTING.md (100%) rename packages/{fluence-interfaces => core/interfaces}/README.md (100%) rename packages/{fluence-interfaces => core/interfaces}/package.json (68%) create mode 100644 packages/core/interfaces/src/index.ts rename packages/{fluence-interfaces => core/interfaces}/tsconfig.json (80%) create mode 100644 packages/core/js-peer/.gitignore rename packages/{fluence-keypair => core/js-peer}/.npmignore (100%) create mode 100644 packages/core/js-peer/.prettierignore create mode 100644 packages/core/js-peer/.prettierrc.js create mode 100644 packages/core/js-peer/CONTRIBUTING.md create mode 100644 packages/core/js-peer/README.md rename packages/{fluence-js/aqua/src => core/js-peer/aqua}/node-utils.aqua (100%) rename packages/{fluence-js/aqua/src => core/js-peer/aqua}/services.aqua (100%) rename packages/{fluence-js/aqua/src => core/js-peer/aqua}/single-module-srv.aqua (100%) create mode 100644 packages/core/js-peer/jest.config.js rename packages/{fluence-js => core/js-peer}/package.json (50%) rename packages/{fluence-js/src/internal => core/js-peer/src}/FluencePeer.ts (87%) rename packages/{fluence-js/src/internal => core/js-peer/src}/Particle.ts (98%) rename packages/{fluence-js => core/js-peer}/src/__test__/connection.ts (100%) create mode 100644 packages/core/js-peer/src/__test__/integration/avm.spec.ts rename packages/{fluence-js => core/js-peer}/src/__test__/integration/greeting-record.wasm (100%) rename packages/{fluence-js => core/js-peer}/src/__test__/integration/greeting.wasm (100%) rename packages/{fluence-js => core/js-peer}/src/__test__/integration/jsonBuiltin.spec.ts (93%) rename packages/{fluence-js/aqua/tests => core/js-peer/src/__test__/integration}/marine-js.aqua (56%) rename packages/{fluence-js => core/js-peer}/src/__test__/integration/marine-js.spec.ts (54%) create mode 100644 packages/core/js-peer/src/__test__/integration/peer.spec.ts rename packages/{fluence-js/aqua/tests/sig-tests.aqua => core/js-peer/src/__test__/integration/sigService.aqua} (81%) create mode 100644 packages/core/js-peer/src/__test__/integration/sigService.spec.ts rename packages/{fluence-js/aqua/tests/srv-tests.aqua => core/js-peer/src/__test__/integration/srv.aqua} (84%) create mode 100644 packages/core/js-peer/src/__test__/integration/srv.spec.ts rename packages/{fluence-js => core/js-peer}/src/__test__/unit/KeyPair.spec.ts (97%) rename packages/{fluence-js => core/js-peer}/src/__test__/unit/ast.spec.ts (79%) rename packages/{fluence-js => core/js-peer}/src/__test__/unit/builtInHandler.spec.ts (98%) rename packages/{fluence-js => core/js-peer}/src/__test__/unit/compiler/v3.spec.ts (98%) rename packages/{fluence-js => core/js-peer}/src/__test__/unit/ephemeral.spec.ts (86%) create mode 100644 packages/core/js-peer/src/__test__/util.ts create mode 100644 packages/core/js-peer/src/_aqua/node-utils.ts create mode 100644 packages/core/js-peer/src/_aqua/services.ts create mode 100644 packages/core/js-peer/src/_aqua/single-module-srv.ts create mode 100644 packages/core/js-peer/src/avm.ts rename packages/{fluence-js/src/internal => core/js-peer/src}/builtins/Sig.ts (100%) rename packages/{fluence-js/src/internal => core/js-peer/src}/builtins/SingleModuleSrv.ts (92%) rename packages/{fluence-js/src/internal => core/js-peer/src}/builtins/common.ts (97%) rename packages/{fluence-js/src/internal => core/js-peer/src}/builtins/securityGuard.ts (100%) rename packages/{fluence-js/src/internal => core/js-peer/src}/commonTypes.ts (100%) rename packages/{fluence-js/src/internal/compilerSupport/v3impl => core/js-peer/src/compilerSupport}/callFunction.ts (60%) rename packages/{fluence-js/src/internal/compilerSupport/v3impl => core/js-peer/src/compilerSupport}/conversions.ts (96%) rename packages/{fluence-js/src/internal/compilerSupport/v3impl => core/js-peer/src/compilerSupport}/interface.ts (100%) create mode 100644 packages/core/js-peer/src/compilerSupport/registerService.ts rename packages/{fluence-js/src/internal/compilerSupport/v3impl => core/js-peer/src/compilerSupport}/services.ts (97%) rename packages/{fluence-js/src/internal => core/js-peer/src}/ephemeral.ts (92%) rename packages/{fluence-js/src/internal => core/js-peer/src}/utils.ts (84%) create mode 100644 packages/core/js-peer/tsconfig.json create mode 100644 packages/core/keypair/.gitignore create mode 100644 packages/core/keypair/.npmignore create mode 100644 packages/core/keypair/.prettierrc.js create mode 100644 packages/core/keypair/CONTRIBUTING.md rename packages/{fluence-keypair => core/keypair}/README.md (100%) rename packages/{fluence-keypair => core/keypair}/package.json (90%) rename packages/{fluence-keypair => core/keypair}/src/index.ts (100%) rename packages/{fluence-keypair => core/keypair}/tsconfig.json (100%) delete mode 100644 packages/fluence-interfaces/src/index.ts delete mode 100644 packages/fluence-js/aqua/tests/marine-js-logging.aqua delete mode 100644 packages/fluence-js/src/__test__/_aqua/marine-js-logging.ts delete mode 100644 packages/fluence-js/src/__test__/_aqua/marine-js.ts delete mode 100644 packages/fluence-js/src/__test__/_aqua/sig-tests.ts delete mode 100644 packages/fluence-js/src/__test__/_aqua/srv-tests.ts delete mode 100644 packages/fluence-js/src/__test__/integration/avm.spec.ts delete mode 100644 packages/fluence-js/src/__test__/integration/peer.spec.ts delete mode 100644 packages/fluence-js/src/__test__/integration/sigService.spec.ts delete mode 100644 packages/fluence-js/src/__test__/integration/srv.spec.ts delete mode 100644 packages/fluence-js/src/__test__/unit/compiler/v2.spec.ts delete mode 100644 packages/fluence-js/src/__test__/util.ts delete mode 100644 packages/fluence-js/src/internal/Buffer.ts delete mode 100644 packages/fluence-js/src/internal/_aqua/node-utils.ts delete mode 100644 packages/fluence-js/src/internal/_aqua/services.ts delete mode 100644 packages/fluence-js/src/internal/_aqua/single-module-srv.ts delete mode 100644 packages/fluence-js/src/internal/compilerSupport/v2.ts delete mode 100644 packages/fluence-js/src/internal/compilerSupport/v3.ts delete mode 100644 packages/fluence-js/src/internal/compilerSupport/v3impl/registerService.ts delete mode 100644 packages/fluence-js/src/services.ts create mode 100644 packages/marine/background-runner/.gitignore create mode 100644 packages/marine/background-runner/.npmignore create mode 100644 packages/marine/background-runner/.prettierrc.js create mode 100644 packages/marine/background-runner/CONTRIBUTING.md create mode 100644 packages/marine/background-runner/README.md create mode 100644 packages/marine/background-runner/package.json create mode 100644 packages/marine/background-runner/src/index.ts create mode 100644 packages/marine/background-runner/tsconfig.json create mode 100644 packages/marine/deps-loader.node/.gitignore create mode 100644 packages/marine/deps-loader.node/.npmignore create mode 100644 packages/marine/deps-loader.node/.prettierrc.js create mode 100644 packages/marine/deps-loader.node/CONTRIBUTING.md create mode 100644 packages/marine/deps-loader.node/README.md create mode 100644 packages/marine/deps-loader.node/package.json create mode 100755 packages/marine/deps-loader.node/postbuild.sh create mode 100644 packages/marine/deps-loader.node/src/index.ts create mode 100644 packages/marine/deps-loader.node/tsconfig.json create mode 100644 packages/marine/deps-loader.web/.gitignore create mode 100644 packages/marine/deps-loader.web/.npmignore create mode 100644 packages/marine/deps-loader.web/.prettierrc.js create mode 100644 packages/marine/deps-loader.web/CONTRIBUTING.md create mode 100644 packages/marine/deps-loader.web/README.md create mode 100644 packages/marine/deps-loader.web/package.json create mode 100755 packages/marine/deps-loader.web/postbuild.sh create mode 100644 packages/marine/deps-loader.web/src/index.ts create mode 100644 packages/marine/deps-loader.web/tsconfig.json create mode 100644 packages/marine/worker-script/.gitignore create mode 100644 packages/marine/worker-script/.npmignore create mode 100644 packages/marine/worker-script/.prettierrc.js create mode 100644 packages/marine/worker-script/CONTRIBUTING.md create mode 100644 packages/marine/worker-script/README.md create mode 100755 packages/marine/worker-script/build_b64.sh create mode 100644 packages/marine/worker-script/package.json create mode 100644 packages/marine/worker-script/src/index.ts create mode 100644 packages/marine/worker-script/tsconfig.json create mode 100644 packages/marine/worker-script/webpack.config.js create mode 100644 packages/marine/worker-script/webpack.config.node.js create mode 100644 packages/marine/worker-script/webpack.config.web.js delete mode 100644 typedoc.json delete mode 100644 typedoc.md diff --git a/.github/workflows/e2e.yml b/.github/workflows/e2e.yml.disabled similarity index 100% rename from .github/workflows/e2e.yml rename to .github/workflows/e2e.yml.disabled diff --git a/.github/workflows/release_github.yml b/.github/workflows/release_github.yml.disabled similarity index 100% rename from .github/workflows/release_github.yml rename to .github/workflows/release_github.yml.disabled diff --git a/.github/workflows/release_packages.yml b/.github/workflows/release_packages.yml.disabled similarity index 100% rename from .github/workflows/release_packages.yml rename to .github/workflows/release_packages.yml.disabled diff --git a/.github/workflows/snapshot.yml b/.github/workflows/snapshot.yml.disabled similarity index 100% rename from .github/workflows/snapshot.yml rename to .github/workflows/snapshot.yml.disabled diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml index a1078069..5b9ec132 100644 --- a/.github/workflows/tests.yml +++ b/.github/workflows/tests.yml @@ -1,112 +1,42 @@ -name: Run tests with worflow_call +name: Run tests + +defaults: + run: + working-directory: . on: - workflow_call: - inputs: - rust-peer-image: - description: "rust-peer image tag" - type: string - default: "fluencelabs/fluence:minimal" - avm-version: - description: "@fluencelabs/avm version" - type: string - default: "null" - marine-js-version: - description: "@fluencelabs/marine-js version" - type: string - default: "null" - ref: - description: "git ref to checkout to" - type: string - default: "master" - -env: - RUST_PEER_IMAGE: "${{ inputs.rust-peer-image }}" - FORCE_COLOR: true - CI: true + push: jobs: - fluence-js: - name: "Run tests" - runs-on: ubuntu-latest + build: + runs-on: ubuntu-latest - permissions: - contents: read - id-token: write + strategy: + matrix: + node-version: [16.x, 17.x, 18.x] - strategy: - matrix: - node-version: - - 16.x - - 17.x + steps: + - uses: actions/checkout@v2 - steps: - - name: Import secrets - uses: hashicorp/vault-action@v2.4.3 - with: - url: https://vault.fluence.dev - path: jwt/github - role: ci - method: jwt - jwtGithubAudience: "https://github.com/fluencelabs" - jwtTtl: 300 - secrets: | - kv/docker-registry/basicauth/ci username | DOCKER_USERNAME ; - kv/docker-registry/basicauth/ci password | DOCKER_PASSWORD + - name: Setup Node.js ${{ matrix.node-version }} + uses: actions/setup-node@v1 + with: + node-version: ${{ matrix.node-version }} - - name: Login to DockerHub - uses: docker/login-action@v2 - with: - registry: docker.fluence.dev - username: ${{ env.DOCKER_USERNAME }} - password: ${{ env.DOCKER_PASSWORD }} + - name: Setup pnpm + uses: pnpm/action-setup@v2.2.4 + with: + version: 7 - - name: Checkout - uses: actions/checkout@v3 - with: - repository: fluencelabs/fluence-js - ref: ${{ inputs.ref }} + - name: Run container with Fluence node + run: | + docker pull fluencelabs/fluence + docker run -d --rm -e RUST_LOG="info" -p 1210:1210 -p 4310:4310 fluencelabs/fluence -t 1210 -w 4310 -k gKdiCSUr1TFGFEgu2t8Ch1XEUsrN5A2UfBLjSZvfci9SPR3NvZpACfcpPGC3eY4zma1pk7UvYv5zb1VjvPHwCjj --local --aqua-pool-size 2 - - name: Pull rust-peer image - run: docker pull $RUST_PEER_IMAGE - - - name: Run rust-peer - uses: isbang/compose-action@v1.4.1 - with: - compose-file: ".github/e2e/docker-compose.yml" - down-flags: "--volumes" - - - name: Setup pnpm - uses: pnpm/action-setup@v2.2.4 - with: - version: 7 - - - name: Setup node ${{ matrix.node-version }} with self-hosted registry - uses: actions/setup-node@v3 - with: - node-version: ${{ matrix.node-version }} - registry-url: "https://npm.fluence.dev" - cache: "pnpm" - - - run: pnpm i - - - name: Set avm version - if: inputs.avm-version != 'null' - uses: fluencelabs/github-actions/npm-set-dependency@main - with: - package: "@fluencelabs/avm" - version: ${{ inputs.avm-version }} - working-directory: packages/fluence-js - package-manager: pnpm - - - name: Set marine-js version - if: inputs.marine-js-version != 'null' - uses: fluencelabs/github-actions/npm-set-dependency@main - with: - package: "@fluencelabs/marine-js" - version: ${{ inputs.marine-js-version }} - working-directory: packages/fluence-js - package-manager: pnpm - - - run: pnpm -r build - - run: pnpm -r test + - run: pnpm i + - run: pnpm -r build + env: + CI: true + - run: pnpm -r test + env: + CI: true diff --git a/.github/workflows/tests.yml.disabled b/.github/workflows/tests.yml.disabled new file mode 100644 index 00000000..a1078069 --- /dev/null +++ b/.github/workflows/tests.yml.disabled @@ -0,0 +1,112 @@ +name: Run tests with worflow_call + +on: + workflow_call: + inputs: + rust-peer-image: + description: "rust-peer image tag" + type: string + default: "fluencelabs/fluence:minimal" + avm-version: + description: "@fluencelabs/avm version" + type: string + default: "null" + marine-js-version: + description: "@fluencelabs/marine-js version" + type: string + default: "null" + ref: + description: "git ref to checkout to" + type: string + default: "master" + +env: + RUST_PEER_IMAGE: "${{ inputs.rust-peer-image }}" + FORCE_COLOR: true + CI: true + +jobs: + fluence-js: + name: "Run tests" + runs-on: ubuntu-latest + + permissions: + contents: read + id-token: write + + strategy: + matrix: + node-version: + - 16.x + - 17.x + + steps: + - name: Import secrets + uses: hashicorp/vault-action@v2.4.3 + with: + url: https://vault.fluence.dev + path: jwt/github + role: ci + method: jwt + jwtGithubAudience: "https://github.com/fluencelabs" + jwtTtl: 300 + secrets: | + kv/docker-registry/basicauth/ci username | DOCKER_USERNAME ; + kv/docker-registry/basicauth/ci password | DOCKER_PASSWORD + + - name: Login to DockerHub + uses: docker/login-action@v2 + with: + registry: docker.fluence.dev + username: ${{ env.DOCKER_USERNAME }} + password: ${{ env.DOCKER_PASSWORD }} + + - name: Checkout + uses: actions/checkout@v3 + with: + repository: fluencelabs/fluence-js + ref: ${{ inputs.ref }} + + - name: Pull rust-peer image + run: docker pull $RUST_PEER_IMAGE + + - name: Run rust-peer + uses: isbang/compose-action@v1.4.1 + with: + compose-file: ".github/e2e/docker-compose.yml" + down-flags: "--volumes" + + - name: Setup pnpm + uses: pnpm/action-setup@v2.2.4 + with: + version: 7 + + - name: Setup node ${{ matrix.node-version }} with self-hosted registry + uses: actions/setup-node@v3 + with: + node-version: ${{ matrix.node-version }} + registry-url: "https://npm.fluence.dev" + cache: "pnpm" + + - run: pnpm i + + - name: Set avm version + if: inputs.avm-version != 'null' + uses: fluencelabs/github-actions/npm-set-dependency@main + with: + package: "@fluencelabs/avm" + version: ${{ inputs.avm-version }} + working-directory: packages/fluence-js + package-manager: pnpm + + - name: Set marine-js version + if: inputs.marine-js-version != 'null' + uses: fluencelabs/github-actions/npm-set-dependency@main + with: + package: "@fluencelabs/marine-js" + version: ${{ inputs.marine-js-version }} + working-directory: packages/fluence-js + package-manager: pnpm + + - run: pnpm -r build + - run: pnpm -r test diff --git a/.npmrc b/.npmrc index 3e775efb..b6195a45 100644 --- a/.npmrc +++ b/.npmrc @@ -1 +1,2 @@ auto-install-peers=true +save-exact=true diff --git a/README.md b/README.md index ed33792b..a45d4772 100644 --- a/README.md +++ b/README.md @@ -30,12 +30,16 @@ pnpm -r build ### Repository structure -| Folder | Package | Description | -| --------------------------- | ----------------------- | --------------------------------------------- | -| packages/fluence-js | @fluencelabs/fluence-js | TypeScript implementation of the Fluence Peer | -| packages/fluence-interfaces | @fluencelabs/interfaces | Common interfaces used in Fluence Peer | -| packages/fluence-connection | @fluencelabs/connection | Connectivity layer used in Fluence Peer | -| packages/fluence-keypair | @fluencelabs/keypair | Key Pair implementation | +| Folder | Package | Description | +| --------------------------------- | ------------------------------------- | --------------------------------------------- | +| packages/core/js-peer | @fluencelabs/js-peer | TypeScript implementation of the Fluence Peer | +| packages/core/interfaces | @fluencelabs/interfaces | Common interfaces used in Fluence Peer | +| packages/core/connection | @fluencelabs/connection | Connectivity layer used in Fluence Peer | +| packages/core/keypair | @fluencelabs/keypair | Key Pair implementation | +| packages/marine/background-runner | @fluencelabs/marine.background-runner | MarineJS background runner | +| packages/marine/deps-loader.node | @fluencelabs/marine.deps-loader.node | MarineJS deps loader for nodejs | +| packages/marine/deps-loader.web | @fluencelabs/marine.deps-loader.web | MarineJS deps loader for web | +| packages/marine/worker-script | @fluencelabs/marine.worker-script | MarineJS background worker script | ### Running tests diff --git a/docs/.nojekyll b/docs/.nojekyll deleted file mode 100644 index e2ac6616..00000000 --- a/docs/.nojekyll +++ /dev/null @@ -1 +0,0 @@ -TypeDoc added this file to prevent GitHub Pages from using Jekyll. You can turn off this behavior by setting the `githubPages` option to false. \ No newline at end of file diff --git a/docs/assets/highlight.css b/docs/assets/highlight.css deleted file mode 100644 index 6dd4eef7..00000000 --- a/docs/assets/highlight.css +++ /dev/null @@ -1,22 +0,0 @@ -:root { - --light-code-background: #F5F5F5; - --dark-code-background: #1E1E1E; -} - -@media (prefers-color-scheme: light) { :root { - --code-background: var(--light-code-background); -} } - -@media (prefers-color-scheme: dark) { :root { - --code-background: var(--dark-code-background); -} } - -body.light { - --code-background: var(--light-code-background); -} - -body.dark { - --code-background: var(--dark-code-background); -} - -pre, code { background: var(--code-background); } diff --git a/docs/assets/icons.css b/docs/assets/icons.css deleted file mode 100644 index 776a3562..00000000 --- a/docs/assets/icons.css +++ /dev/null @@ -1,1043 +0,0 @@ -.tsd-kind-icon { - display: block; - position: relative; - padding-left: 20px; - text-indent: -20px; -} -.tsd-kind-icon:before { - content: ""; - display: inline-block; - vertical-align: middle; - width: 17px; - height: 17px; - margin: 0 3px 2px 0; - background-image: url(./icons.png); -} -@media (-webkit-min-device-pixel-ratio: 1.5), (min-resolution: 144dpi) { - .tsd-kind-icon:before { - background-image: url(./icons@2x.png); - background-size: 238px 204px; - } -} - -.tsd-signature.tsd-kind-icon:before { - background-position: 0 -153px; -} - -.tsd-kind-object-literal > .tsd-kind-icon:before { - background-position: 0px -17px; -} -.tsd-kind-object-literal.tsd-is-protected > .tsd-kind-icon:before { - background-position: -17px -17px; -} -.tsd-kind-object-literal.tsd-is-private > .tsd-kind-icon:before { - background-position: -34px -17px; -} - -.tsd-kind-class > .tsd-kind-icon:before { - background-position: 0px -34px; -} -.tsd-kind-class.tsd-is-protected > .tsd-kind-icon:before { - background-position: -17px -34px; -} -.tsd-kind-class.tsd-is-private > .tsd-kind-icon:before { - background-position: -34px -34px; -} - -.tsd-kind-class.tsd-has-type-parameter > .tsd-kind-icon:before { - background-position: 0px -51px; -} -.tsd-kind-class.tsd-has-type-parameter.tsd-is-protected - > .tsd-kind-icon:before { - background-position: -17px -51px; -} -.tsd-kind-class.tsd-has-type-parameter.tsd-is-private > .tsd-kind-icon:before { - background-position: -34px -51px; -} - -.tsd-kind-interface > .tsd-kind-icon:before { - background-position: 0px -68px; -} -.tsd-kind-interface.tsd-is-protected > .tsd-kind-icon:before { - background-position: -17px -68px; -} -.tsd-kind-interface.tsd-is-private > .tsd-kind-icon:before { - background-position: -34px -68px; -} - -.tsd-kind-interface.tsd-has-type-parameter > .tsd-kind-icon:before { - background-position: 0px -85px; -} -.tsd-kind-interface.tsd-has-type-parameter.tsd-is-protected - > .tsd-kind-icon:before { - background-position: -17px -85px; -} -.tsd-kind-interface.tsd-has-type-parameter.tsd-is-private - > .tsd-kind-icon:before { - background-position: -34px -85px; -} - -.tsd-kind-namespace > .tsd-kind-icon:before { - background-position: 0px -102px; -} -.tsd-kind-namespace.tsd-is-protected > .tsd-kind-icon:before { - background-position: -17px -102px; -} -.tsd-kind-namespace.tsd-is-private > .tsd-kind-icon:before { - background-position: -34px -102px; -} - -.tsd-kind-module > .tsd-kind-icon:before { - background-position: 0px -102px; -} -.tsd-kind-module.tsd-is-protected > .tsd-kind-icon:before { - background-position: -17px -102px; -} -.tsd-kind-module.tsd-is-private > .tsd-kind-icon:before { - background-position: -34px -102px; -} - -.tsd-kind-enum > .tsd-kind-icon:before { - background-position: 0px -119px; -} -.tsd-kind-enum.tsd-is-protected > .tsd-kind-icon:before { - background-position: -17px -119px; -} -.tsd-kind-enum.tsd-is-private > .tsd-kind-icon:before { - background-position: -34px -119px; -} - -.tsd-kind-enum-member > .tsd-kind-icon:before { - background-position: 0px -136px; -} -.tsd-kind-enum-member.tsd-is-protected > .tsd-kind-icon:before { - background-position: -17px -136px; -} -.tsd-kind-enum-member.tsd-is-private > .tsd-kind-icon:before { - background-position: -34px -136px; -} - -.tsd-kind-signature > .tsd-kind-icon:before { - background-position: 0px -153px; -} -.tsd-kind-signature.tsd-is-protected > .tsd-kind-icon:before { - background-position: -17px -153px; -} -.tsd-kind-signature.tsd-is-private > .tsd-kind-icon:before { - background-position: -34px -153px; -} - -.tsd-kind-type-alias > .tsd-kind-icon:before { - background-position: 0px -170px; -} -.tsd-kind-type-alias.tsd-is-protected > .tsd-kind-icon:before { - background-position: -17px -170px; -} -.tsd-kind-type-alias.tsd-is-private > .tsd-kind-icon:before { - background-position: -34px -170px; -} - -.tsd-kind-type-alias.tsd-has-type-parameter > .tsd-kind-icon:before { - background-position: 0px -187px; -} -.tsd-kind-type-alias.tsd-has-type-parameter.tsd-is-protected - > .tsd-kind-icon:before { - background-position: -17px -187px; -} -.tsd-kind-type-alias.tsd-has-type-parameter.tsd-is-private - > .tsd-kind-icon:before { - background-position: -34px -187px; -} - -.tsd-kind-variable > .tsd-kind-icon:before { - background-position: -136px -0px; -} -.tsd-kind-variable.tsd-is-protected > .tsd-kind-icon:before { - background-position: -153px -0px; -} -.tsd-kind-variable.tsd-is-private > .tsd-kind-icon:before { - background-position: -119px -0px; -} -.tsd-kind-variable.tsd-parent-kind-class > .tsd-kind-icon:before { - background-position: -51px -0px; -} -.tsd-kind-variable.tsd-parent-kind-class.tsd-is-inherited - > .tsd-kind-icon:before { - background-position: -68px -0px; -} -.tsd-kind-variable.tsd-parent-kind-class.tsd-is-protected - > .tsd-kind-icon:before { - background-position: -85px -0px; -} -.tsd-kind-variable.tsd-parent-kind-class.tsd-is-protected.tsd-is-inherited - > .tsd-kind-icon:before { - background-position: -102px -0px; -} -.tsd-kind-variable.tsd-parent-kind-class.tsd-is-private - > .tsd-kind-icon:before { - background-position: -119px -0px; -} -.tsd-kind-variable.tsd-parent-kind-enum > .tsd-kind-icon:before { - background-position: -170px -0px; -} -.tsd-kind-variable.tsd-parent-kind-enum.tsd-is-protected - > .tsd-kind-icon:before { - background-position: -187px -0px; -} -.tsd-kind-variable.tsd-parent-kind-enum.tsd-is-private > .tsd-kind-icon:before { - background-position: -119px -0px; -} -.tsd-kind-variable.tsd-parent-kind-interface > .tsd-kind-icon:before { - background-position: -204px -0px; -} -.tsd-kind-variable.tsd-parent-kind-interface.tsd-is-inherited - > .tsd-kind-icon:before { - background-position: -221px -0px; -} - -.tsd-kind-property > .tsd-kind-icon:before { - background-position: -136px -0px; -} -.tsd-kind-property.tsd-is-protected > .tsd-kind-icon:before { - background-position: -153px -0px; -} -.tsd-kind-property.tsd-is-private > .tsd-kind-icon:before { - background-position: -119px -0px; -} -.tsd-kind-property.tsd-parent-kind-class > .tsd-kind-icon:before { - background-position: -51px -0px; -} -.tsd-kind-property.tsd-parent-kind-class.tsd-is-inherited - > .tsd-kind-icon:before { - background-position: -68px -0px; -} -.tsd-kind-property.tsd-parent-kind-class.tsd-is-protected - > .tsd-kind-icon:before { - background-position: -85px -0px; -} -.tsd-kind-property.tsd-parent-kind-class.tsd-is-protected.tsd-is-inherited - > .tsd-kind-icon:before { - background-position: -102px -0px; -} -.tsd-kind-property.tsd-parent-kind-class.tsd-is-private - > .tsd-kind-icon:before { - background-position: -119px -0px; -} -.tsd-kind-property.tsd-parent-kind-enum > .tsd-kind-icon:before { - background-position: -170px -0px; -} -.tsd-kind-property.tsd-parent-kind-enum.tsd-is-protected - > .tsd-kind-icon:before { - background-position: -187px -0px; -} -.tsd-kind-property.tsd-parent-kind-enum.tsd-is-private > .tsd-kind-icon:before { - background-position: -119px -0px; -} -.tsd-kind-property.tsd-parent-kind-interface > .tsd-kind-icon:before { - background-position: -204px -0px; -} -.tsd-kind-property.tsd-parent-kind-interface.tsd-is-inherited - > .tsd-kind-icon:before { - background-position: -221px -0px; -} - -.tsd-kind-get-signature > .tsd-kind-icon:before { - background-position: -136px -17px; -} -.tsd-kind-get-signature.tsd-is-protected > .tsd-kind-icon:before { - background-position: -153px -17px; -} -.tsd-kind-get-signature.tsd-is-private > .tsd-kind-icon:before { - background-position: -119px -17px; -} -.tsd-kind-get-signature.tsd-parent-kind-class > .tsd-kind-icon:before { - background-position: -51px -17px; -} -.tsd-kind-get-signature.tsd-parent-kind-class.tsd-is-inherited - > .tsd-kind-icon:before { - background-position: -68px -17px; -} -.tsd-kind-get-signature.tsd-parent-kind-class.tsd-is-protected - > .tsd-kind-icon:before { - background-position: -85px -17px; -} -.tsd-kind-get-signature.tsd-parent-kind-class.tsd-is-protected.tsd-is-inherited - > .tsd-kind-icon:before { - background-position: -102px -17px; -} -.tsd-kind-get-signature.tsd-parent-kind-class.tsd-is-private - > .tsd-kind-icon:before { - background-position: -119px -17px; -} -.tsd-kind-get-signature.tsd-parent-kind-enum > .tsd-kind-icon:before { - background-position: -170px -17px; -} -.tsd-kind-get-signature.tsd-parent-kind-enum.tsd-is-protected - > .tsd-kind-icon:before { - background-position: -187px -17px; -} -.tsd-kind-get-signature.tsd-parent-kind-enum.tsd-is-private - > .tsd-kind-icon:before { - background-position: -119px -17px; -} -.tsd-kind-get-signature.tsd-parent-kind-interface > .tsd-kind-icon:before { - background-position: -204px -17px; -} -.tsd-kind-get-signature.tsd-parent-kind-interface.tsd-is-inherited - > .tsd-kind-icon:before { - background-position: -221px -17px; -} - -.tsd-kind-set-signature > .tsd-kind-icon:before { - background-position: -136px -34px; -} -.tsd-kind-set-signature.tsd-is-protected > .tsd-kind-icon:before { - background-position: -153px -34px; -} -.tsd-kind-set-signature.tsd-is-private > .tsd-kind-icon:before { - background-position: -119px -34px; -} -.tsd-kind-set-signature.tsd-parent-kind-class > .tsd-kind-icon:before { - background-position: -51px -34px; -} -.tsd-kind-set-signature.tsd-parent-kind-class.tsd-is-inherited - > .tsd-kind-icon:before { - background-position: -68px -34px; -} -.tsd-kind-set-signature.tsd-parent-kind-class.tsd-is-protected - > .tsd-kind-icon:before { - background-position: -85px -34px; -} -.tsd-kind-set-signature.tsd-parent-kind-class.tsd-is-protected.tsd-is-inherited - > .tsd-kind-icon:before { - background-position: -102px -34px; -} -.tsd-kind-set-signature.tsd-parent-kind-class.tsd-is-private - > .tsd-kind-icon:before { - background-position: -119px -34px; -} -.tsd-kind-set-signature.tsd-parent-kind-enum > .tsd-kind-icon:before { - background-position: -170px -34px; -} -.tsd-kind-set-signature.tsd-parent-kind-enum.tsd-is-protected - > .tsd-kind-icon:before { - background-position: -187px -34px; -} -.tsd-kind-set-signature.tsd-parent-kind-enum.tsd-is-private - > .tsd-kind-icon:before { - background-position: -119px -34px; -} -.tsd-kind-set-signature.tsd-parent-kind-interface > .tsd-kind-icon:before { - background-position: -204px -34px; -} -.tsd-kind-set-signature.tsd-parent-kind-interface.tsd-is-inherited - > .tsd-kind-icon:before { - background-position: -221px -34px; -} - -.tsd-kind-accessor > .tsd-kind-icon:before { - background-position: -136px -51px; -} -.tsd-kind-accessor.tsd-is-protected > .tsd-kind-icon:before { - background-position: -153px -51px; -} -.tsd-kind-accessor.tsd-is-private > .tsd-kind-icon:before { - background-position: -119px -51px; -} -.tsd-kind-accessor.tsd-parent-kind-class > .tsd-kind-icon:before { - background-position: -51px -51px; -} -.tsd-kind-accessor.tsd-parent-kind-class.tsd-is-inherited - > .tsd-kind-icon:before { - background-position: -68px -51px; -} -.tsd-kind-accessor.tsd-parent-kind-class.tsd-is-protected - > .tsd-kind-icon:before { - background-position: -85px -51px; -} -.tsd-kind-accessor.tsd-parent-kind-class.tsd-is-protected.tsd-is-inherited - > .tsd-kind-icon:before { - background-position: -102px -51px; -} -.tsd-kind-accessor.tsd-parent-kind-class.tsd-is-private - > .tsd-kind-icon:before { - background-position: -119px -51px; -} -.tsd-kind-accessor.tsd-parent-kind-enum > .tsd-kind-icon:before { - background-position: -170px -51px; -} -.tsd-kind-accessor.tsd-parent-kind-enum.tsd-is-protected - > .tsd-kind-icon:before { - background-position: -187px -51px; -} -.tsd-kind-accessor.tsd-parent-kind-enum.tsd-is-private > .tsd-kind-icon:before { - background-position: -119px -51px; -} -.tsd-kind-accessor.tsd-parent-kind-interface > .tsd-kind-icon:before { - background-position: -204px -51px; -} -.tsd-kind-accessor.tsd-parent-kind-interface.tsd-is-inherited - > .tsd-kind-icon:before { - background-position: -221px -51px; -} - -.tsd-kind-function > .tsd-kind-icon:before { - background-position: -136px -68px; -} -.tsd-kind-function.tsd-is-protected > .tsd-kind-icon:before { - background-position: -153px -68px; -} -.tsd-kind-function.tsd-is-private > .tsd-kind-icon:before { - background-position: -119px -68px; -} -.tsd-kind-function.tsd-parent-kind-class > .tsd-kind-icon:before { - background-position: -51px -68px; -} -.tsd-kind-function.tsd-parent-kind-class.tsd-is-inherited - > .tsd-kind-icon:before { - background-position: -68px -68px; -} -.tsd-kind-function.tsd-parent-kind-class.tsd-is-protected - > .tsd-kind-icon:before { - background-position: -85px -68px; -} -.tsd-kind-function.tsd-parent-kind-class.tsd-is-protected.tsd-is-inherited - > .tsd-kind-icon:before { - background-position: -102px -68px; -} -.tsd-kind-function.tsd-parent-kind-class.tsd-is-private - > .tsd-kind-icon:before { - background-position: -119px -68px; -} -.tsd-kind-function.tsd-parent-kind-enum > .tsd-kind-icon:before { - background-position: -170px -68px; -} -.tsd-kind-function.tsd-parent-kind-enum.tsd-is-protected - > .tsd-kind-icon:before { - background-position: -187px -68px; -} -.tsd-kind-function.tsd-parent-kind-enum.tsd-is-private > .tsd-kind-icon:before { - background-position: -119px -68px; -} -.tsd-kind-function.tsd-parent-kind-interface > .tsd-kind-icon:before { - background-position: -204px -68px; -} -.tsd-kind-function.tsd-parent-kind-interface.tsd-is-inherited - > .tsd-kind-icon:before { - background-position: -221px -68px; -} - -.tsd-kind-method > .tsd-kind-icon:before { - background-position: -136px -68px; -} -.tsd-kind-method.tsd-is-protected > .tsd-kind-icon:before { - background-position: -153px -68px; -} -.tsd-kind-method.tsd-is-private > .tsd-kind-icon:before { - background-position: -119px -68px; -} -.tsd-kind-method.tsd-parent-kind-class > .tsd-kind-icon:before { - background-position: -51px -68px; -} -.tsd-kind-method.tsd-parent-kind-class.tsd-is-inherited - > .tsd-kind-icon:before { - background-position: -68px -68px; -} -.tsd-kind-method.tsd-parent-kind-class.tsd-is-protected - > .tsd-kind-icon:before { - background-position: -85px -68px; -} -.tsd-kind-method.tsd-parent-kind-class.tsd-is-protected.tsd-is-inherited - > .tsd-kind-icon:before { - background-position: -102px -68px; -} -.tsd-kind-method.tsd-parent-kind-class.tsd-is-private > .tsd-kind-icon:before { - background-position: -119px -68px; -} -.tsd-kind-method.tsd-parent-kind-enum > .tsd-kind-icon:before { - background-position: -170px -68px; -} -.tsd-kind-method.tsd-parent-kind-enum.tsd-is-protected > .tsd-kind-icon:before { - background-position: -187px -68px; -} -.tsd-kind-method.tsd-parent-kind-enum.tsd-is-private > .tsd-kind-icon:before { - background-position: -119px -68px; -} -.tsd-kind-method.tsd-parent-kind-interface > .tsd-kind-icon:before { - background-position: -204px -68px; -} -.tsd-kind-method.tsd-parent-kind-interface.tsd-is-inherited - > .tsd-kind-icon:before { - background-position: -221px -68px; -} - -.tsd-kind-call-signature > .tsd-kind-icon:before { - background-position: -136px -68px; -} -.tsd-kind-call-signature.tsd-is-protected > .tsd-kind-icon:before { - background-position: -153px -68px; -} -.tsd-kind-call-signature.tsd-is-private > .tsd-kind-icon:before { - background-position: -119px -68px; -} -.tsd-kind-call-signature.tsd-parent-kind-class > .tsd-kind-icon:before { - background-position: -51px -68px; -} -.tsd-kind-call-signature.tsd-parent-kind-class.tsd-is-inherited - > .tsd-kind-icon:before { - background-position: -68px -68px; -} -.tsd-kind-call-signature.tsd-parent-kind-class.tsd-is-protected - > .tsd-kind-icon:before { - background-position: -85px -68px; -} -.tsd-kind-call-signature.tsd-parent-kind-class.tsd-is-protected.tsd-is-inherited - > .tsd-kind-icon:before { - background-position: -102px -68px; -} -.tsd-kind-call-signature.tsd-parent-kind-class.tsd-is-private - > .tsd-kind-icon:before { - background-position: -119px -68px; -} -.tsd-kind-call-signature.tsd-parent-kind-enum > .tsd-kind-icon:before { - background-position: -170px -68px; -} -.tsd-kind-call-signature.tsd-parent-kind-enum.tsd-is-protected - > .tsd-kind-icon:before { - background-position: -187px -68px; -} -.tsd-kind-call-signature.tsd-parent-kind-enum.tsd-is-private - > .tsd-kind-icon:before { - background-position: -119px -68px; -} -.tsd-kind-call-signature.tsd-parent-kind-interface > .tsd-kind-icon:before { - background-position: -204px -68px; -} -.tsd-kind-call-signature.tsd-parent-kind-interface.tsd-is-inherited - > .tsd-kind-icon:before { - background-position: -221px -68px; -} - -.tsd-kind-function.tsd-has-type-parameter > .tsd-kind-icon:before { - background-position: -136px -85px; -} -.tsd-kind-function.tsd-has-type-parameter.tsd-is-protected - > .tsd-kind-icon:before { - background-position: -153px -85px; -} -.tsd-kind-function.tsd-has-type-parameter.tsd-is-private - > .tsd-kind-icon:before { - background-position: -119px -85px; -} -.tsd-kind-function.tsd-has-type-parameter.tsd-parent-kind-class - > .tsd-kind-icon:before { - background-position: -51px -85px; -} -.tsd-kind-function.tsd-has-type-parameter.tsd-parent-kind-class.tsd-is-inherited - > .tsd-kind-icon:before { - background-position: -68px -85px; -} -.tsd-kind-function.tsd-has-type-parameter.tsd-parent-kind-class.tsd-is-protected - > .tsd-kind-icon:before { - background-position: -85px -85px; -} -.tsd-kind-function.tsd-has-type-parameter.tsd-parent-kind-class.tsd-is-protected.tsd-is-inherited - > .tsd-kind-icon:before { - background-position: -102px -85px; -} -.tsd-kind-function.tsd-has-type-parameter.tsd-parent-kind-class.tsd-is-private - > .tsd-kind-icon:before { - background-position: -119px -85px; -} -.tsd-kind-function.tsd-has-type-parameter.tsd-parent-kind-enum - > .tsd-kind-icon:before { - background-position: -170px -85px; -} -.tsd-kind-function.tsd-has-type-parameter.tsd-parent-kind-enum.tsd-is-protected - > .tsd-kind-icon:before { - background-position: -187px -85px; -} -.tsd-kind-function.tsd-has-type-parameter.tsd-parent-kind-enum.tsd-is-private - > .tsd-kind-icon:before { - background-position: -119px -85px; -} -.tsd-kind-function.tsd-has-type-parameter.tsd-parent-kind-interface - > .tsd-kind-icon:before { - background-position: -204px -85px; -} -.tsd-kind-function.tsd-has-type-parameter.tsd-parent-kind-interface.tsd-is-inherited - > .tsd-kind-icon:before { - background-position: -221px -85px; -} - -.tsd-kind-method.tsd-has-type-parameter > .tsd-kind-icon:before { - background-position: -136px -85px; -} -.tsd-kind-method.tsd-has-type-parameter.tsd-is-protected - > .tsd-kind-icon:before { - background-position: -153px -85px; -} -.tsd-kind-method.tsd-has-type-parameter.tsd-is-private > .tsd-kind-icon:before { - background-position: -119px -85px; -} -.tsd-kind-method.tsd-has-type-parameter.tsd-parent-kind-class - > .tsd-kind-icon:before { - background-position: -51px -85px; -} -.tsd-kind-method.tsd-has-type-parameter.tsd-parent-kind-class.tsd-is-inherited - > .tsd-kind-icon:before { - background-position: -68px -85px; -} -.tsd-kind-method.tsd-has-type-parameter.tsd-parent-kind-class.tsd-is-protected - > .tsd-kind-icon:before { - background-position: -85px -85px; -} -.tsd-kind-method.tsd-has-type-parameter.tsd-parent-kind-class.tsd-is-protected.tsd-is-inherited - > .tsd-kind-icon:before { - background-position: -102px -85px; -} -.tsd-kind-method.tsd-has-type-parameter.tsd-parent-kind-class.tsd-is-private - > .tsd-kind-icon:before { - background-position: -119px -85px; -} -.tsd-kind-method.tsd-has-type-parameter.tsd-parent-kind-enum - > .tsd-kind-icon:before { - background-position: -170px -85px; -} -.tsd-kind-method.tsd-has-type-parameter.tsd-parent-kind-enum.tsd-is-protected - > .tsd-kind-icon:before { - background-position: -187px -85px; -} -.tsd-kind-method.tsd-has-type-parameter.tsd-parent-kind-enum.tsd-is-private - > .tsd-kind-icon:before { - background-position: -119px -85px; -} -.tsd-kind-method.tsd-has-type-parameter.tsd-parent-kind-interface - > .tsd-kind-icon:before { - background-position: -204px -85px; -} -.tsd-kind-method.tsd-has-type-parameter.tsd-parent-kind-interface.tsd-is-inherited - > .tsd-kind-icon:before { - background-position: -221px -85px; -} - -.tsd-kind-constructor > .tsd-kind-icon:before { - background-position: -136px -102px; -} -.tsd-kind-constructor.tsd-is-protected > .tsd-kind-icon:before { - background-position: -153px -102px; -} -.tsd-kind-constructor.tsd-is-private > .tsd-kind-icon:before { - background-position: -119px -102px; -} -.tsd-kind-constructor.tsd-parent-kind-class > .tsd-kind-icon:before { - background-position: -51px -102px; -} -.tsd-kind-constructor.tsd-parent-kind-class.tsd-is-inherited - > .tsd-kind-icon:before { - background-position: -68px -102px; -} -.tsd-kind-constructor.tsd-parent-kind-class.tsd-is-protected - > .tsd-kind-icon:before { - background-position: -85px -102px; -} -.tsd-kind-constructor.tsd-parent-kind-class.tsd-is-protected.tsd-is-inherited - > .tsd-kind-icon:before { - background-position: -102px -102px; -} -.tsd-kind-constructor.tsd-parent-kind-class.tsd-is-private - > .tsd-kind-icon:before { - background-position: -119px -102px; -} -.tsd-kind-constructor.tsd-parent-kind-enum > .tsd-kind-icon:before { - background-position: -170px -102px; -} -.tsd-kind-constructor.tsd-parent-kind-enum.tsd-is-protected - > .tsd-kind-icon:before { - background-position: -187px -102px; -} -.tsd-kind-constructor.tsd-parent-kind-enum.tsd-is-private - > .tsd-kind-icon:before { - background-position: -119px -102px; -} -.tsd-kind-constructor.tsd-parent-kind-interface > .tsd-kind-icon:before { - background-position: -204px -102px; -} -.tsd-kind-constructor.tsd-parent-kind-interface.tsd-is-inherited - > .tsd-kind-icon:before { - background-position: -221px -102px; -} - -.tsd-kind-constructor-signature > .tsd-kind-icon:before { - background-position: -136px -102px; -} -.tsd-kind-constructor-signature.tsd-is-protected > .tsd-kind-icon:before { - background-position: -153px -102px; -} -.tsd-kind-constructor-signature.tsd-is-private > .tsd-kind-icon:before { - background-position: -119px -102px; -} -.tsd-kind-constructor-signature.tsd-parent-kind-class > .tsd-kind-icon:before { - background-position: -51px -102px; -} -.tsd-kind-constructor-signature.tsd-parent-kind-class.tsd-is-inherited - > .tsd-kind-icon:before { - background-position: -68px -102px; -} -.tsd-kind-constructor-signature.tsd-parent-kind-class.tsd-is-protected - > .tsd-kind-icon:before { - background-position: -85px -102px; -} -.tsd-kind-constructor-signature.tsd-parent-kind-class.tsd-is-protected.tsd-is-inherited - > .tsd-kind-icon:before { - background-position: -102px -102px; -} -.tsd-kind-constructor-signature.tsd-parent-kind-class.tsd-is-private - > .tsd-kind-icon:before { - background-position: -119px -102px; -} -.tsd-kind-constructor-signature.tsd-parent-kind-enum > .tsd-kind-icon:before { - background-position: -170px -102px; -} -.tsd-kind-constructor-signature.tsd-parent-kind-enum.tsd-is-protected - > .tsd-kind-icon:before { - background-position: -187px -102px; -} -.tsd-kind-constructor-signature.tsd-parent-kind-enum.tsd-is-private - > .tsd-kind-icon:before { - background-position: -119px -102px; -} -.tsd-kind-constructor-signature.tsd-parent-kind-interface - > .tsd-kind-icon:before { - background-position: -204px -102px; -} -.tsd-kind-constructor-signature.tsd-parent-kind-interface.tsd-is-inherited - > .tsd-kind-icon:before { - background-position: -221px -102px; -} - -.tsd-kind-index-signature > .tsd-kind-icon:before { - background-position: -136px -119px; -} -.tsd-kind-index-signature.tsd-is-protected > .tsd-kind-icon:before { - background-position: -153px -119px; -} -.tsd-kind-index-signature.tsd-is-private > .tsd-kind-icon:before { - background-position: -119px -119px; -} -.tsd-kind-index-signature.tsd-parent-kind-class > .tsd-kind-icon:before { - background-position: -51px -119px; -} -.tsd-kind-index-signature.tsd-parent-kind-class.tsd-is-inherited - > .tsd-kind-icon:before { - background-position: -68px -119px; -} -.tsd-kind-index-signature.tsd-parent-kind-class.tsd-is-protected - > .tsd-kind-icon:before { - background-position: -85px -119px; -} -.tsd-kind-index-signature.tsd-parent-kind-class.tsd-is-protected.tsd-is-inherited - > .tsd-kind-icon:before { - background-position: -102px -119px; -} -.tsd-kind-index-signature.tsd-parent-kind-class.tsd-is-private - > .tsd-kind-icon:before { - background-position: -119px -119px; -} -.tsd-kind-index-signature.tsd-parent-kind-enum > .tsd-kind-icon:before { - background-position: -170px -119px; -} -.tsd-kind-index-signature.tsd-parent-kind-enum.tsd-is-protected - > .tsd-kind-icon:before { - background-position: -187px -119px; -} -.tsd-kind-index-signature.tsd-parent-kind-enum.tsd-is-private - > .tsd-kind-icon:before { - background-position: -119px -119px; -} -.tsd-kind-index-signature.tsd-parent-kind-interface > .tsd-kind-icon:before { - background-position: -204px -119px; -} -.tsd-kind-index-signature.tsd-parent-kind-interface.tsd-is-inherited - > .tsd-kind-icon:before { - background-position: -221px -119px; -} - -.tsd-kind-event > .tsd-kind-icon:before { - background-position: -136px -136px; -} -.tsd-kind-event.tsd-is-protected > .tsd-kind-icon:before { - background-position: -153px -136px; -} -.tsd-kind-event.tsd-is-private > .tsd-kind-icon:before { - background-position: -119px -136px; -} -.tsd-kind-event.tsd-parent-kind-class > .tsd-kind-icon:before { - background-position: -51px -136px; -} -.tsd-kind-event.tsd-parent-kind-class.tsd-is-inherited > .tsd-kind-icon:before { - background-position: -68px -136px; -} -.tsd-kind-event.tsd-parent-kind-class.tsd-is-protected > .tsd-kind-icon:before { - background-position: -85px -136px; -} -.tsd-kind-event.tsd-parent-kind-class.tsd-is-protected.tsd-is-inherited - > .tsd-kind-icon:before { - background-position: -102px -136px; -} -.tsd-kind-event.tsd-parent-kind-class.tsd-is-private > .tsd-kind-icon:before { - background-position: -119px -136px; -} -.tsd-kind-event.tsd-parent-kind-enum > .tsd-kind-icon:before { - background-position: -170px -136px; -} -.tsd-kind-event.tsd-parent-kind-enum.tsd-is-protected > .tsd-kind-icon:before { - background-position: -187px -136px; -} -.tsd-kind-event.tsd-parent-kind-enum.tsd-is-private > .tsd-kind-icon:before { - background-position: -119px -136px; -} -.tsd-kind-event.tsd-parent-kind-interface > .tsd-kind-icon:before { - background-position: -204px -136px; -} -.tsd-kind-event.tsd-parent-kind-interface.tsd-is-inherited - > .tsd-kind-icon:before { - background-position: -221px -136px; -} - -.tsd-is-static > .tsd-kind-icon:before { - background-position: -136px -153px; -} -.tsd-is-static.tsd-is-protected > .tsd-kind-icon:before { - background-position: -153px -153px; -} -.tsd-is-static.tsd-is-private > .tsd-kind-icon:before { - background-position: -119px -153px; -} -.tsd-is-static.tsd-parent-kind-class > .tsd-kind-icon:before { - background-position: -51px -153px; -} -.tsd-is-static.tsd-parent-kind-class.tsd-is-inherited > .tsd-kind-icon:before { - background-position: -68px -153px; -} -.tsd-is-static.tsd-parent-kind-class.tsd-is-protected > .tsd-kind-icon:before { - background-position: -85px -153px; -} -.tsd-is-static.tsd-parent-kind-class.tsd-is-protected.tsd-is-inherited - > .tsd-kind-icon:before { - background-position: -102px -153px; -} -.tsd-is-static.tsd-parent-kind-class.tsd-is-private > .tsd-kind-icon:before { - background-position: -119px -153px; -} -.tsd-is-static.tsd-parent-kind-enum > .tsd-kind-icon:before { - background-position: -170px -153px; -} -.tsd-is-static.tsd-parent-kind-enum.tsd-is-protected > .tsd-kind-icon:before { - background-position: -187px -153px; -} -.tsd-is-static.tsd-parent-kind-enum.tsd-is-private > .tsd-kind-icon:before { - background-position: -119px -153px; -} -.tsd-is-static.tsd-parent-kind-interface > .tsd-kind-icon:before { - background-position: -204px -153px; -} -.tsd-is-static.tsd-parent-kind-interface.tsd-is-inherited - > .tsd-kind-icon:before { - background-position: -221px -153px; -} - -.tsd-is-static.tsd-kind-function > .tsd-kind-icon:before { - background-position: -136px -170px; -} -.tsd-is-static.tsd-kind-function.tsd-is-protected > .tsd-kind-icon:before { - background-position: -153px -170px; -} -.tsd-is-static.tsd-kind-function.tsd-is-private > .tsd-kind-icon:before { - background-position: -119px -170px; -} -.tsd-is-static.tsd-kind-function.tsd-parent-kind-class > .tsd-kind-icon:before { - background-position: -51px -170px; -} -.tsd-is-static.tsd-kind-function.tsd-parent-kind-class.tsd-is-inherited - > .tsd-kind-icon:before { - background-position: -68px -170px; -} -.tsd-is-static.tsd-kind-function.tsd-parent-kind-class.tsd-is-protected - > .tsd-kind-icon:before { - background-position: -85px -170px; -} -.tsd-is-static.tsd-kind-function.tsd-parent-kind-class.tsd-is-protected.tsd-is-inherited - > .tsd-kind-icon:before { - background-position: -102px -170px; -} -.tsd-is-static.tsd-kind-function.tsd-parent-kind-class.tsd-is-private - > .tsd-kind-icon:before { - background-position: -119px -170px; -} -.tsd-is-static.tsd-kind-function.tsd-parent-kind-enum > .tsd-kind-icon:before { - background-position: -170px -170px; -} -.tsd-is-static.tsd-kind-function.tsd-parent-kind-enum.tsd-is-protected - > .tsd-kind-icon:before { - background-position: -187px -170px; -} -.tsd-is-static.tsd-kind-function.tsd-parent-kind-enum.tsd-is-private - > .tsd-kind-icon:before { - background-position: -119px -170px; -} -.tsd-is-static.tsd-kind-function.tsd-parent-kind-interface - > .tsd-kind-icon:before { - background-position: -204px -170px; -} -.tsd-is-static.tsd-kind-function.tsd-parent-kind-interface.tsd-is-inherited - > .tsd-kind-icon:before { - background-position: -221px -170px; -} - -.tsd-is-static.tsd-kind-method > .tsd-kind-icon:before { - background-position: -136px -170px; -} -.tsd-is-static.tsd-kind-method.tsd-is-protected > .tsd-kind-icon:before { - background-position: -153px -170px; -} -.tsd-is-static.tsd-kind-method.tsd-is-private > .tsd-kind-icon:before { - background-position: -119px -170px; -} -.tsd-is-static.tsd-kind-method.tsd-parent-kind-class > .tsd-kind-icon:before { - background-position: -51px -170px; -} -.tsd-is-static.tsd-kind-method.tsd-parent-kind-class.tsd-is-inherited - > .tsd-kind-icon:before { - background-position: -68px -170px; -} -.tsd-is-static.tsd-kind-method.tsd-parent-kind-class.tsd-is-protected - > .tsd-kind-icon:before { - background-position: -85px -170px; -} -.tsd-is-static.tsd-kind-method.tsd-parent-kind-class.tsd-is-protected.tsd-is-inherited - > .tsd-kind-icon:before { - background-position: -102px -170px; -} -.tsd-is-static.tsd-kind-method.tsd-parent-kind-class.tsd-is-private - > .tsd-kind-icon:before { - background-position: -119px -170px; -} -.tsd-is-static.tsd-kind-method.tsd-parent-kind-enum > .tsd-kind-icon:before { - background-position: -170px -170px; -} -.tsd-is-static.tsd-kind-method.tsd-parent-kind-enum.tsd-is-protected - > .tsd-kind-icon:before { - background-position: -187px -170px; -} -.tsd-is-static.tsd-kind-method.tsd-parent-kind-enum.tsd-is-private - > .tsd-kind-icon:before { - background-position: -119px -170px; -} -.tsd-is-static.tsd-kind-method.tsd-parent-kind-interface - > .tsd-kind-icon:before { - background-position: -204px -170px; -} -.tsd-is-static.tsd-kind-method.tsd-parent-kind-interface.tsd-is-inherited - > .tsd-kind-icon:before { - background-position: -221px -170px; -} - -.tsd-is-static.tsd-kind-call-signature > .tsd-kind-icon:before { - background-position: -136px -170px; -} -.tsd-is-static.tsd-kind-call-signature.tsd-is-protected - > .tsd-kind-icon:before { - background-position: -153px -170px; -} -.tsd-is-static.tsd-kind-call-signature.tsd-is-private > .tsd-kind-icon:before { - background-position: -119px -170px; -} -.tsd-is-static.tsd-kind-call-signature.tsd-parent-kind-class - > .tsd-kind-icon:before { - background-position: -51px -170px; -} -.tsd-is-static.tsd-kind-call-signature.tsd-parent-kind-class.tsd-is-inherited - > .tsd-kind-icon:before { - background-position: -68px -170px; -} -.tsd-is-static.tsd-kind-call-signature.tsd-parent-kind-class.tsd-is-protected - > .tsd-kind-icon:before { - background-position: -85px -170px; -} -.tsd-is-static.tsd-kind-call-signature.tsd-parent-kind-class.tsd-is-protected.tsd-is-inherited - > .tsd-kind-icon:before { - background-position: -102px -170px; -} -.tsd-is-static.tsd-kind-call-signature.tsd-parent-kind-class.tsd-is-private - > .tsd-kind-icon:before { - background-position: -119px -170px; -} -.tsd-is-static.tsd-kind-call-signature.tsd-parent-kind-enum - > .tsd-kind-icon:before { - background-position: -170px -170px; -} -.tsd-is-static.tsd-kind-call-signature.tsd-parent-kind-enum.tsd-is-protected - > .tsd-kind-icon:before { - background-position: -187px -170px; -} -.tsd-is-static.tsd-kind-call-signature.tsd-parent-kind-enum.tsd-is-private - > .tsd-kind-icon:before { - background-position: -119px -170px; -} -.tsd-is-static.tsd-kind-call-signature.tsd-parent-kind-interface - > .tsd-kind-icon:before { - background-position: -204px -170px; -} -.tsd-is-static.tsd-kind-call-signature.tsd-parent-kind-interface.tsd-is-inherited - > .tsd-kind-icon:before { - background-position: -221px -170px; -} - -.tsd-is-static.tsd-kind-event > .tsd-kind-icon:before { - background-position: -136px -187px; -} -.tsd-is-static.tsd-kind-event.tsd-is-protected > .tsd-kind-icon:before { - background-position: -153px -187px; -} -.tsd-is-static.tsd-kind-event.tsd-is-private > .tsd-kind-icon:before { - background-position: -119px -187px; -} -.tsd-is-static.tsd-kind-event.tsd-parent-kind-class > .tsd-kind-icon:before { - background-position: -51px -187px; -} -.tsd-is-static.tsd-kind-event.tsd-parent-kind-class.tsd-is-inherited - > .tsd-kind-icon:before { - background-position: -68px -187px; -} -.tsd-is-static.tsd-kind-event.tsd-parent-kind-class.tsd-is-protected - > .tsd-kind-icon:before { - background-position: -85px -187px; -} -.tsd-is-static.tsd-kind-event.tsd-parent-kind-class.tsd-is-protected.tsd-is-inherited - > .tsd-kind-icon:before { - background-position: -102px -187px; -} -.tsd-is-static.tsd-kind-event.tsd-parent-kind-class.tsd-is-private - > .tsd-kind-icon:before { - background-position: -119px -187px; -} -.tsd-is-static.tsd-kind-event.tsd-parent-kind-enum > .tsd-kind-icon:before { - background-position: -170px -187px; -} -.tsd-is-static.tsd-kind-event.tsd-parent-kind-enum.tsd-is-protected - > .tsd-kind-icon:before { - background-position: -187px -187px; -} -.tsd-is-static.tsd-kind-event.tsd-parent-kind-enum.tsd-is-private - > .tsd-kind-icon:before { - background-position: -119px -187px; -} -.tsd-is-static.tsd-kind-event.tsd-parent-kind-interface - > .tsd-kind-icon:before { - background-position: -204px -187px; -} -.tsd-is-static.tsd-kind-event.tsd-parent-kind-interface.tsd-is-inherited - > .tsd-kind-icon:before { - background-position: -221px -187px; -} diff --git a/docs/assets/icons.png b/docs/assets/icons.png deleted file mode 100644 index 3836d5fe46e48bbe186116855aae879c23935327..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 9615 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 NZmR35l_G4O{0}dcmS_L~ diff --git a/docs/assets/icons@2x.png b/docs/assets/icons@2x.png deleted file mode 100644 index 5a209e2f6d7f915cc9cb6fe7a4264c8be4db87b0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 28144 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 Ce=Object.create;var ue=Object.defineProperty;var Pe=Object.getOwnPropertyDescriptor;var Oe=Object.getOwnPropertyNames;var Re=Object.getPrototypeOf,_e=Object.prototype.hasOwnProperty;var Me=(t,e)=>()=>(e||t((e={exports:{}}).exports,e),e.exports);var De=(t,e,r,n)=>{if(e&&typeof e=="object"||typeof e=="function")for(let i of Oe(e))!_e.call(t,i)&&i!==r&&ue(t,i,{get:()=>e[i],enumerable:!(n=Pe(e,i))||n.enumerable});return t};var Fe=(t,e,r)=>(r=t!=null?Ce(Re(t)):{},De(e||!t||!t.__esModule?ue(r,"default",{value:t,enumerable:!0}):r,t));var pe=Me((de,fe)=>{(function(){var t=function(e){var r=new t.Builder;return r.pipeline.add(t.trimmer,t.stopWordFilter,t.stemmer),r.searchPipeline.add(t.stemmer),e.call(r,r),r.build()};t.version="2.3.9";t.utils={},t.utils.warn=function(e){return function(r){e.console&&console.warn&&console.warn(r)}}(this),t.utils.asString=function(e){return e==null?"":e.toString()},t.utils.clone=function(e){if(e==null)return e;for(var r=Object.create(null),n=Object.keys(e),i=0;i0){var h=t.utils.clone(r)||{};h.position=[a,l],h.index=s.length,s.push(new t.Token(n.slice(a,o),h))}a=o+1}}return s},t.tokenizer.separator=/[\s\-]+/;t.Pipeline=function(){this._stack=[]},t.Pipeline.registeredFunctions=Object.create(null),t.Pipeline.registerFunction=function(e,r){r in this.registeredFunctions&&t.utils.warn("Overwriting existing registered function: "+r),e.label=r,t.Pipeline.registeredFunctions[e.label]=e},t.Pipeline.warnIfFunctionNotRegistered=function(e){var r=e.label&&e.label in this.registeredFunctions;r||t.utils.warn(`Function is not registered with pipeline. This may cause problems when serialising the index. -`,e)},t.Pipeline.load=function(e){var r=new t.Pipeline;return e.forEach(function(n){var i=t.Pipeline.registeredFunctions[n];if(i)r.add(i);else throw new Error("Cannot load unregistered function: "+n)}),r},t.Pipeline.prototype.add=function(){var e=Array.prototype.slice.call(arguments);e.forEach(function(r){t.Pipeline.warnIfFunctionNotRegistered(r),this._stack.push(r)},this)},t.Pipeline.prototype.after=function(e,r){t.Pipeline.warnIfFunctionNotRegistered(r);var n=this._stack.indexOf(e);if(n==-1)throw new Error("Cannot find existingFn");n=n+1,this._stack.splice(n,0,r)},t.Pipeline.prototype.before=function(e,r){t.Pipeline.warnIfFunctionNotRegistered(r);var n=this._stack.indexOf(e);if(n==-1)throw new Error("Cannot find existingFn");this._stack.splice(n,0,r)},t.Pipeline.prototype.remove=function(e){var r=this._stack.indexOf(e);r!=-1&&this._stack.splice(r,1)},t.Pipeline.prototype.run=function(e){for(var r=this._stack.length,n=0;n1&&(oe&&(n=s),o!=e);)i=n-r,s=r+Math.floor(i/2),o=this.elements[s*2];if(o==e||o>e)return s*2;if(ou?h+=2:a==u&&(r+=n[l+1]*i[h+1],l+=2,h+=2);return r},t.Vector.prototype.similarity=function(e){return this.dot(e)/this.magnitude()||0},t.Vector.prototype.toArray=function(){for(var e=new Array(this.elements.length/2),r=1,n=0;r0){var o=s.str.charAt(0),a;o in s.node.edges?a=s.node.edges[o]:(a=new t.TokenSet,s.node.edges[o]=a),s.str.length==1&&(a.final=!0),i.push({node:a,editsRemaining:s.editsRemaining,str:s.str.slice(1)})}if(s.editsRemaining!=0){if("*"in s.node.edges)var u=s.node.edges["*"];else{var u=new t.TokenSet;s.node.edges["*"]=u}if(s.str.length==0&&(u.final=!0),i.push({node:u,editsRemaining:s.editsRemaining-1,str:s.str}),s.str.length>1&&i.push({node:s.node,editsRemaining:s.editsRemaining-1,str:s.str.slice(1)}),s.str.length==1&&(s.node.final=!0),s.str.length>=1){if("*"in s.node.edges)var l=s.node.edges["*"];else{var l=new t.TokenSet;s.node.edges["*"]=l}s.str.length==1&&(l.final=!0),i.push({node:l,editsRemaining:s.editsRemaining-1,str:s.str.slice(1)})}if(s.str.length>1){var h=s.str.charAt(0),p=s.str.charAt(1),v;p in s.node.edges?v=s.node.edges[p]:(v=new t.TokenSet,s.node.edges[p]=v),s.str.length==1&&(v.final=!0),i.push({node:v,editsRemaining:s.editsRemaining-1,str:h+s.str.slice(2)})}}}return n},t.TokenSet.fromString=function(e){for(var r=new t.TokenSet,n=r,i=0,s=e.length;i=e;r--){var n=this.uncheckedNodes[r],i=n.child.toString();i in this.minimizedNodes?n.parent.edges[n.char]=this.minimizedNodes[i]:(n.child._str=i,this.minimizedNodes[i]=n.child),this.uncheckedNodes.pop()}};t.Index=function(e){this.invertedIndex=e.invertedIndex,this.fieldVectors=e.fieldVectors,this.tokenSet=e.tokenSet,this.fields=e.fields,this.pipeline=e.pipeline},t.Index.prototype.search=function(e){return this.query(function(r){var n=new t.QueryParser(e,r);n.parse()})},t.Index.prototype.query=function(e){for(var r=new t.Query(this.fields),n=Object.create(null),i=Object.create(null),s=Object.create(null),o=Object.create(null),a=Object.create(null),u=0;u1?this._b=1:this._b=e},t.Builder.prototype.k1=function(e){this._k1=e},t.Builder.prototype.add=function(e,r){var n=e[this._ref],i=Object.keys(this._fields);this._documents[n]=r||{},this.documentCount+=1;for(var s=0;s=this.length)return t.QueryLexer.EOS;var e=this.str.charAt(this.pos);return this.pos+=1,e},t.QueryLexer.prototype.width=function(){return this.pos-this.start},t.QueryLexer.prototype.ignore=function(){this.start==this.pos&&(this.pos+=1),this.start=this.pos},t.QueryLexer.prototype.backup=function(){this.pos-=1},t.QueryLexer.prototype.acceptDigitRun=function(){var e,r;do e=this.next(),r=e.charCodeAt(0);while(r>47&&r<58);e!=t.QueryLexer.EOS&&this.backup()},t.QueryLexer.prototype.more=function(){return this.pos1&&(e.backup(),e.emit(t.QueryLexer.TERM)),e.ignore(),e.more())return t.QueryLexer.lexText},t.QueryLexer.lexEditDistance=function(e){return e.ignore(),e.acceptDigitRun(),e.emit(t.QueryLexer.EDIT_DISTANCE),t.QueryLexer.lexText},t.QueryLexer.lexBoost=function(e){return e.ignore(),e.acceptDigitRun(),e.emit(t.QueryLexer.BOOST),t.QueryLexer.lexText},t.QueryLexer.lexEOS=function(e){e.width()>0&&e.emit(t.QueryLexer.TERM)},t.QueryLexer.termSeparator=t.tokenizer.separator,t.QueryLexer.lexText=function(e){for(;;){var r=e.next();if(r==t.QueryLexer.EOS)return t.QueryLexer.lexEOS;if(r.charCodeAt(0)==92){e.escapeCharacter();continue}if(r==":")return t.QueryLexer.lexField;if(r=="~")return e.backup(),e.width()>0&&e.emit(t.QueryLexer.TERM),t.QueryLexer.lexEditDistance;if(r=="^")return e.backup(),e.width()>0&&e.emit(t.QueryLexer.TERM),t.QueryLexer.lexBoost;if(r=="+"&&e.width()===1||r=="-"&&e.width()===1)return e.emit(t.QueryLexer.PRESENCE),t.QueryLexer.lexText;if(r.match(t.QueryLexer.termSeparator))return t.QueryLexer.lexTerm}},t.QueryParser=function(e,r){this.lexer=new t.QueryLexer(e),this.query=r,this.currentClause={},this.lexemeIdx=0},t.QueryParser.prototype.parse=function(){this.lexer.run(),this.lexemes=this.lexer.lexemes;for(var e=t.QueryParser.parseClause;e;)e=e(this);return this.query},t.QueryParser.prototype.peekLexeme=function(){return this.lexemes[this.lexemeIdx]},t.QueryParser.prototype.consumeLexeme=function(){var e=this.peekLexeme();return this.lexemeIdx+=1,e},t.QueryParser.prototype.nextClause=function(){var e=this.currentClause;this.query.clause(e),this.currentClause={}},t.QueryParser.parseClause=function(e){var r=e.peekLexeme();if(r!=null)switch(r.type){case t.QueryLexer.PRESENCE:return t.QueryParser.parsePresence;case t.QueryLexer.FIELD:return t.QueryParser.parseField;case t.QueryLexer.TERM:return t.QueryParser.parseTerm;default:var n="expected either a field or a term, found "+r.type;throw r.str.length>=1&&(n+=" with value '"+r.str+"'"),new t.QueryParseError(n,r.start,r.end)}},t.QueryParser.parsePresence=function(e){var r=e.consumeLexeme();if(r!=null){switch(r.str){case"-":e.currentClause.presence=t.Query.presence.PROHIBITED;break;case"+":e.currentClause.presence=t.Query.presence.REQUIRED;break;default:var n="unrecognised presence operator'"+r.str+"'";throw new t.QueryParseError(n,r.start,r.end)}var i=e.peekLexeme();if(i==null){var n="expecting term or field, found nothing";throw new t.QueryParseError(n,r.start,r.end)}switch(i.type){case t.QueryLexer.FIELD:return t.QueryParser.parseField;case t.QueryLexer.TERM:return t.QueryParser.parseTerm;default:var n="expecting term or field, found '"+i.type+"'";throw new t.QueryParseError(n,i.start,i.end)}}},t.QueryParser.parseField=function(e){var r=e.consumeLexeme();if(r!=null){if(e.query.allFields.indexOf(r.str)==-1){var n=e.query.allFields.map(function(o){return"'"+o+"'"}).join(", "),i="unrecognised field '"+r.str+"', possible fields: "+n;throw new t.QueryParseError(i,r.start,r.end)}e.currentClause.fields=[r.str];var s=e.peekLexeme();if(s==null){var i="expecting term, found nothing";throw new t.QueryParseError(i,r.start,r.end)}switch(s.type){case t.QueryLexer.TERM:return t.QueryParser.parseTerm;default:var i="expecting term, found '"+s.type+"'";throw new t.QueryParseError(i,s.start,s.end)}}},t.QueryParser.parseTerm=function(e){var r=e.consumeLexeme();if(r!=null){e.currentClause.term=r.str.toLowerCase(),r.str.indexOf("*")!=-1&&(e.currentClause.usePipeline=!1);var n=e.peekLexeme();if(n==null){e.nextClause();return}switch(n.type){case t.QueryLexer.TERM:return e.nextClause(),t.QueryParser.parseTerm;case t.QueryLexer.FIELD:return e.nextClause(),t.QueryParser.parseField;case t.QueryLexer.EDIT_DISTANCE:return t.QueryParser.parseEditDistance;case t.QueryLexer.BOOST:return t.QueryParser.parseBoost;case t.QueryLexer.PRESENCE:return e.nextClause(),t.QueryParser.parsePresence;default:var i="Unexpected lexeme type '"+n.type+"'";throw new t.QueryParseError(i,n.start,n.end)}}},t.QueryParser.parseEditDistance=function(e){var r=e.consumeLexeme();if(r!=null){var n=parseInt(r.str,10);if(isNaN(n)){var i="edit distance must be numeric";throw new t.QueryParseError(i,r.start,r.end)}e.currentClause.editDistance=n;var s=e.peekLexeme();if(s==null){e.nextClause();return}switch(s.type){case t.QueryLexer.TERM:return e.nextClause(),t.QueryParser.parseTerm;case t.QueryLexer.FIELD:return e.nextClause(),t.QueryParser.parseField;case t.QueryLexer.EDIT_DISTANCE:return t.QueryParser.parseEditDistance;case t.QueryLexer.BOOST:return t.QueryParser.parseBoost;case t.QueryLexer.PRESENCE:return e.nextClause(),t.QueryParser.parsePresence;default:var i="Unexpected lexeme type '"+s.type+"'";throw new t.QueryParseError(i,s.start,s.end)}}},t.QueryParser.parseBoost=function(e){var r=e.consumeLexeme();if(r!=null){var n=parseInt(r.str,10);if(isNaN(n)){var i="boost must be numeric";throw new t.QueryParseError(i,r.start,r.end)}e.currentClause.boost=n;var s=e.peekLexeme();if(s==null){e.nextClause();return}switch(s.type){case t.QueryLexer.TERM:return e.nextClause(),t.QueryParser.parseTerm;case t.QueryLexer.FIELD:return e.nextClause(),t.QueryParser.parseField;case t.QueryLexer.EDIT_DISTANCE:return t.QueryParser.parseEditDistance;case t.QueryLexer.BOOST:return t.QueryParser.parseBoost;case t.QueryLexer.PRESENCE:return e.nextClause(),t.QueryParser.parsePresence;default:var i="Unexpected lexeme type '"+s.type+"'";throw new t.QueryParseError(i,s.start,s.end)}}},function(e,r){typeof define=="function"&&define.amd?define(r):typeof de=="object"?fe.exports=r():e.lunr=r()}(this,function(){return t})})()});var ce=[];function N(t,e){ce.push({selector:e,constructor:t})}var Y=class{constructor(){this.createComponents(document.body)}createComponents(e){ce.forEach(r=>{e.querySelectorAll(r.selector).forEach(n=>{n.dataset.hasInstance||(new r.constructor({el:n}),n.dataset.hasInstance=String(!0))})})}};var k=class{constructor(e){this.el=e.el}};var J=class{constructor(){this.listeners={}}addEventListener(e,r){e in this.listeners||(this.listeners[e]=[]),this.listeners[e].push(r)}removeEventListener(e,r){if(!(e in this.listeners))return;let n=this.listeners[e];for(let i=0,s=n.length;i{let r=Date.now();return(...n)=>{r+e-Date.now()<0&&(t(...n),r=Date.now())}};var ie=class extends J{constructor(){super();this.scrollTop=0;this.lastY=0;this.width=0;this.height=0;this.showToolbar=!0;this.toolbar=document.querySelector(".tsd-page-toolbar"),this.secondaryNav=document.querySelector(".tsd-navigation.secondary"),window.addEventListener("scroll",ne(()=>this.onScroll(),10)),window.addEventListener("resize",ne(()=>this.onResize(),10)),this.onResize(),this.onScroll()}triggerResize(){let r=new CustomEvent("resize",{detail:{width:this.width,height:this.height}});this.dispatchEvent(r)}onResize(){this.width=window.innerWidth||0,this.height=window.innerHeight||0;let r=new CustomEvent("resize",{detail:{width:this.width,height:this.height}});this.dispatchEvent(r)}onScroll(){this.scrollTop=window.scrollY||0;let r=new CustomEvent("scroll",{detail:{scrollTop:this.scrollTop}});this.dispatchEvent(r),this.hideShowToolbar()}hideShowToolbar(){var n;let r=this.showToolbar;this.showToolbar=this.lastY>=this.scrollTop||this.scrollTop<=0,r!==this.showToolbar&&(this.toolbar.classList.toggle("tsd-page-toolbar--hide"),(n=this.secondaryNav)==null||n.classList.toggle("tsd-navigation--toolbar-hide")),this.lastY=this.scrollTop}},Q=ie;Q.instance=new ie;var X=class extends k{constructor(r){super(r);this.anchors=[];this.index=-1;Q.instance.addEventListener("resize",()=>this.onResize()),Q.instance.addEventListener("scroll",n=>this.onScroll(n)),this.createAnchors()}createAnchors(){let r=window.location.href;r.indexOf("#")!=-1&&(r=r.substr(0,r.indexOf("#"))),this.el.querySelectorAll("a").forEach(n=>{let i=n.href;if(i.indexOf("#")==-1||i.substr(0,r.length)!=r)return;let s=i.substr(i.indexOf("#")+1),o=document.querySelector("a.tsd-anchor[name="+s+"]"),a=n.parentNode;!o||!a||this.anchors.push({link:a,anchor:o,position:0})}),this.onResize()}onResize(){let r;for(let i=0,s=this.anchors.length;ii.position-s.position);let n=new CustomEvent("scroll",{detail:{scrollTop:Q.instance.scrollTop}});this.onScroll(n)}onScroll(r){let n=r.detail.scrollTop+5,i=this.anchors,s=i.length-1,o=this.index;for(;o>-1&&i[o].position>n;)o-=1;for(;o-1&&this.anchors[this.index].link.classList.remove("focus"),this.index=o,this.index>-1&&this.anchors[this.index].link.classList.add("focus"))}};var he=(t,e=100)=>{let r;return(...n)=>{clearTimeout(r),r=setTimeout(()=>t(n),e)}};var ge=Fe(pe());function ye(){let t=document.getElementById("tsd-search");if(!t)return;let e=document.getElementById("search-script");t.classList.add("loading"),e&&(e.addEventListener("error",()=>{t.classList.remove("loading"),t.classList.add("failure")}),e.addEventListener("load",()=>{t.classList.remove("loading"),t.classList.add("ready")}),window.searchData&&t.classList.remove("loading"));let r=document.querySelector("#tsd-search input"),n=document.querySelector("#tsd-search .results");if(!r||!n)throw new Error("The input field or the result list wrapper was not found");let i=!1;n.addEventListener("mousedown",()=>i=!0),n.addEventListener("mouseup",()=>{i=!1,t.classList.remove("has-focus")}),r.addEventListener("focus",()=>t.classList.add("has-focus")),r.addEventListener("blur",()=>{i||(i=!1,t.classList.remove("has-focus"))});let s={base:t.dataset.base+"/"};Ae(t,n,r,s)}function Ae(t,e,r,n){r.addEventListener("input",he(()=>{He(t,e,r,n)},200));let i=!1;r.addEventListener("keydown",s=>{i=!0,s.key=="Enter"?ze(e,r):s.key=="Escape"?r.blur():s.key=="ArrowUp"?me(e,-1):s.key==="ArrowDown"?me(e,1):i=!1}),r.addEventListener("keypress",s=>{i&&s.preventDefault()}),document.body.addEventListener("keydown",s=>{s.altKey||s.ctrlKey||s.metaKey||!r.matches(":focus")&&s.key==="/"&&(r.focus(),s.preventDefault())})}function Ve(t,e){t.index||window.searchData&&(e.classList.remove("loading"),e.classList.add("ready"),t.data=window.searchData,t.index=ge.Index.load(window.searchData.index))}function He(t,e,r,n){if(Ve(n,t),!n.index||!n.data)return;e.textContent="";let i=r.value.trim(),s=i?n.index.search(`*${i}*`):[];for(let o=0,a=Math.min(10,s.length);o${ve(u.parent,i)}.${l}`);let h=document.createElement("li");h.classList.value=u.classes;let p=document.createElement("a");p.href=n.base+u.url,p.classList.add("tsd-kind-icon"),p.innerHTML=l,h.append(p),e.appendChild(h)}}function me(t,e){let r=t.querySelector(".current");if(!r)r=t.querySelector(e==1?"li:first-child":"li:last-child"),r&&r.classList.add("current");else{let n=r;if(e===1)do n=n.nextElementSibling;while(n instanceof HTMLElement&&n.offsetParent==null);else do n=n.previousElementSibling;while(n instanceof HTMLElement&&n.offsetParent==null);n&&(r.classList.remove("current"),n.classList.add("current"))}}function ze(t,e){let r=t.querySelector(".current");if(r||(r=t.querySelector("li:first-child")),r){let n=r.querySelector("a");n&&(window.location.href=n.href),e.blur()}}function ve(t,e){if(e==="")return t;let r=t.toLocaleLowerCase(),n=e.toLocaleLowerCase(),i=[],s=0,o=r.indexOf(n);for(;o!=-1;)i.push(se(t.substring(s,o)),`${se(t.substring(o,o+n.length))}`),s=o+n.length,o=r.indexOf(n,s);return i.push(se(t.substring(s))),i.join("")}var Ne={"&":"&","<":"<",">":">","'":"'",'"':"""};function se(t){return t.replace(/[&<>"'"]/g,e=>Ne[e])}var oe=class{constructor(e,r){this.signature=e,this.description=r}addClass(e){return this.signature.classList.add(e),this.description.classList.add(e),this}removeClass(e){return this.signature.classList.remove(e),this.description.classList.remove(e),this}},Z=class extends k{constructor(r){super(r);this.groups=[];this.index=-1;this.createGroups(),this.container&&(this.el.classList.add("active"),Array.from(this.el.children).forEach(n=>{n.addEventListener("touchstart",i=>this.onClick(i)),n.addEventListener("click",i=>this.onClick(i))}),this.container.classList.add("active"),this.setIndex(0))}setIndex(r){if(r<0&&(r=0),r>this.groups.length-1&&(r=this.groups.length-1),this.index==r)return;let n=this.groups[r];if(this.index>-1){let i=this.groups[this.index];i.removeClass("current").addClass("fade-out"),n.addClass("current"),n.addClass("fade-in"),Q.instance.triggerResize(),setTimeout(()=>{i.removeClass("fade-out"),n.removeClass("fade-in")},300)}else n.addClass("current"),Q.instance.triggerResize();this.index=r}createGroups(){let r=this.el.children;if(r.length<2)return;this.container=this.el.nextElementSibling;let n=this.container.children;this.groups=[];for(let i=0;i{n.signature===r.currentTarget&&this.setIndex(i)})}};var C="mousedown",Le="mousemove",_="mouseup",K={x:0,y:0},xe=!1,ae=!1,je=!1,A=!1,Ee=/Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent);document.documentElement.classList.add(Ee?"is-mobile":"not-mobile");Ee&&"ontouchstart"in document.documentElement&&(je=!0,C="touchstart",Le="touchmove",_="touchend");document.addEventListener(C,t=>{ae=!0,A=!1;let e=C=="touchstart"?t.targetTouches[0]:t;K.y=e.pageY||0,K.x=e.pageX||0});document.addEventListener(Le,t=>{if(!!ae&&!A){let e=C=="touchstart"?t.targetTouches[0]:t,r=K.x-(e.pageX||0),n=K.y-(e.pageY||0);A=Math.sqrt(r*r+n*n)>10}});document.addEventListener(_,()=>{ae=!1});document.addEventListener("click",t=>{xe&&(t.preventDefault(),t.stopImmediatePropagation(),xe=!1)});var ee=class extends k{constructor(r){super(r);this.className=this.el.dataset.toggle||"",this.el.addEventListener(_,n=>this.onPointerUp(n)),this.el.addEventListener("click",n=>n.preventDefault()),document.addEventListener(C,n=>this.onDocumentPointerDown(n)),document.addEventListener(_,n=>this.onDocumentPointerUp(n))}setActive(r){if(this.active==r)return;this.active=r,document.documentElement.classList.toggle("has-"+this.className,r),this.el.classList.toggle("active",r);let n=(this.active?"to-has-":"from-has-")+this.className;document.documentElement.classList.add(n),setTimeout(()=>document.documentElement.classList.remove(n),500)}onPointerUp(r){A||(this.setActive(!0),r.preventDefault())}onDocumentPointerDown(r){if(this.active){if(r.target.closest(".col-menu, .tsd-filter-group"))return;this.setActive(!1)}}onDocumentPointerUp(r){if(!A&&this.active&&r.target.closest(".col-menu")){let n=r.target.closest("a");if(n){let i=window.location.href;i.indexOf("#")!=-1&&(i=i.substr(0,i.indexOf("#"))),n.href.substr(0,i.length)==i&&setTimeout(()=>this.setActive(!1),250)}}}};var te=class{constructor(e,r){this.key=e,this.value=r,this.defaultValue=r,this.initialize(),window.localStorage[this.key]&&this.setValue(this.fromLocalStorage(window.localStorage[this.key]))}initialize(){}setValue(e){if(this.value==e)return;let r=this.value;this.value=e,window.localStorage[this.key]=this.toLocalStorage(e),this.handleValueChange(r,e)}},re=class extends te{initialize(){let r=document.querySelector("#tsd-filter-"+this.key);!r||(this.checkbox=r,this.checkbox.addEventListener("change",()=>{this.setValue(this.checkbox.checked)}))}handleValueChange(r,n){!this.checkbox||(this.checkbox.checked=this.value,document.documentElement.classList.toggle("toggle-"+this.key,this.value!=this.defaultValue))}fromLocalStorage(r){return r=="true"}toLocalStorage(r){return r?"true":"false"}},le=class extends te{initialize(){document.documentElement.classList.add("toggle-"+this.key+this.value);let r=document.querySelector("#tsd-filter-"+this.key);if(!r)return;this.select=r;let n=()=>{this.select.classList.add("active")},i=()=>{this.select.classList.remove("active")};this.select.addEventListener(C,n),this.select.addEventListener("mouseover",n),this.select.addEventListener("mouseleave",i),this.select.querySelectorAll("li").forEach(s=>{s.addEventListener(_,o=>{r.classList.remove("active"),this.setValue(o.target.dataset.value||"")})}),document.addEventListener(C,s=>{this.select.contains(s.target)||this.select.classList.remove("active")})}handleValueChange(r,n){this.select.querySelectorAll("li.selected").forEach(o=>{o.classList.remove("selected")});let i=this.select.querySelector('li[data-value="'+n+'"]'),s=this.select.querySelector(".tsd-select-label");i&&s&&(i.classList.add("selected"),s.textContent=i.textContent),document.documentElement.classList.remove("toggle-"+r),document.documentElement.classList.add("toggle-"+n)}fromLocalStorage(r){return r}toLocalStorage(r){return r}},j=class extends k{constructor(r){super(r);this.optionVisibility=new le("visibility","private"),this.optionInherited=new re("inherited",!0),this.optionExternals=new re("externals",!0)}static isSupported(){try{return typeof window.localStorage!="undefined"}catch{return!1}}};function we(t){let e=localStorage.getItem("tsd-theme")||"os";t.value=e,be(e),t.addEventListener("change",()=>{localStorage.setItem("tsd-theme",t.value),be(t.value)})}function be(t){switch(t){case"os":document.body.classList.remove("light","dark");break;case"light":document.body.classList.remove("dark"),document.body.classList.add("light");break;case"dark":document.body.classList.remove("light"),document.body.classList.add("dark");break}}ye();N(X,".menu-highlight");N(Z,".tsd-signatures");N(ee,"a[data-toggle]");j.isSupported()?N(j,"#tsd-filter"):document.documentElement.classList.add("no-filter");var Te=document.getElementById("theme");Te&&we(Te);var Be=new Y;Object.defineProperty(window,"app",{value:Be});})(); -/*! - * lunr.Builder - * Copyright (C) 2020 Oliver Nightingale - */ -/*! - * lunr.Index - * Copyright (C) 2020 Oliver Nightingale - */ -/*! - * lunr.Pipeline - * Copyright (C) 2020 Oliver Nightingale - */ -/*! - * lunr.Set - * Copyright (C) 2020 Oliver Nightingale - */ -/*! - * lunr.TokenSet - * Copyright (C) 2020 Oliver Nightingale - */ -/*! - * lunr.Vector - * Copyright (C) 2020 Oliver Nightingale - */ -/*! - * lunr.stemmer - * Copyright (C) 2020 Oliver Nightingale - * Includes code from - http://tartarus.org/~martin/PorterStemmer/js.txt - */ -/*! - * lunr.stopWordFilter - * Copyright (C) 2020 Oliver Nightingale - */ -/*! - * lunr.tokenizer - * Copyright (C) 2020 Oliver Nightingale - */ -/*! - * lunr.trimmer - * Copyright (C) 2020 Oliver Nightingale - */ -/*! - * lunr.utils - * Copyright (C) 2020 Oliver Nightingale - */ -/** - * lunr - http://lunrjs.com - A bit like Solr, but much smaller and not as bright - 2.3.9 - * Copyright (C) 2020 Oliver Nightingale - * @license MIT - */ diff --git a/docs/assets/search.js b/docs/assets/search.js deleted file mode 100644 index 026068e7..00000000 --- a/docs/assets/search.js +++ /dev/null @@ -1 +0,0 @@ -window.searchData = JSON.parse("{\"kinds\":{\"32\":\"Variable\",\"64\":\"Function\",\"128\":\"Class\",\"256\":\"Interface\",\"512\":\"Constructor\",\"1024\":\"Property\",\"2048\":\"Method\",\"65536\":\"Type literal\",\"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\":4194304,\"name\":\"PeerStatus\",\"url\":\"modules.html#PeerStatus\",\"classes\":\"tsd-kind-type-alias\"},{\"id\":16,\"kind\":128,\"name\":\"KeyPair\",\"url\":\"classes/KeyPair.html\",\"classes\":\"tsd-kind-class\"},{\"id\":17,\"kind\":2048,\"name\":\"fromEd25519SK\",\"url\":\"classes/KeyPair.html#fromEd25519SK\",\"classes\":\"tsd-kind-method tsd-parent-kind-class tsd-is-static\",\"parent\":\"KeyPair\"},{\"id\":18,\"kind\":2048,\"name\":\"randomEd25519\",\"url\":\"classes/KeyPair.html#randomEd25519\",\"classes\":\"tsd-kind-method tsd-parent-kind-class tsd-is-static\",\"parent\":\"KeyPair\"},{\"id\":19,\"kind\":512,\"name\":\"constructor\",\"url\":\"classes/KeyPair.html#constructor\",\"classes\":\"tsd-kind-constructor tsd-parent-kind-class\",\"parent\":\"KeyPair\"},{\"id\":20,\"kind\":1024,\"name\":\"Libp2pPeerId\",\"url\":\"classes/KeyPair.html#Libp2pPeerId\",\"classes\":\"tsd-kind-property tsd-parent-kind-class\",\"parent\":\"KeyPair\"},{\"id\":21,\"kind\":2048,\"name\":\"toB58String\",\"url\":\"classes/KeyPair.html#toB58String\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"KeyPair\"},{\"id\":22,\"kind\":2048,\"name\":\"toEd25519PrivateKey\",\"url\":\"classes/KeyPair.html#toEd25519PrivateKey\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"KeyPair\"},{\"id\":23,\"kind\":2048,\"name\":\"signBytes\",\"url\":\"classes/KeyPair.html#signBytes\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"KeyPair\"},{\"id\":24,\"kind\":2048,\"name\":\"verify\",\"url\":\"classes/KeyPair.html#verify\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"KeyPair\"},{\"id\":25,\"kind\":128,\"name\":\"FluencePeer\",\"url\":\"classes/FluencePeer.html\",\"classes\":\"tsd-kind-class\"},{\"id\":26,\"kind\":2048,\"name\":\"isInstance\",\"url\":\"classes/FluencePeer.html#isInstance\",\"classes\":\"tsd-kind-method tsd-parent-kind-class tsd-is-static\",\"parent\":\"FluencePeer\"},{\"id\":27,\"kind\":512,\"name\":\"constructor\",\"url\":\"classes/FluencePeer.html#constructor\",\"classes\":\"tsd-kind-constructor tsd-parent-kind-class\",\"parent\":\"FluencePeer\"},{\"id\":28,\"kind\":2048,\"name\":\"getStatus\",\"url\":\"classes/FluencePeer.html#getStatus\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"FluencePeer\"},{\"id\":29,\"kind\":2048,\"name\":\"start\",\"url\":\"classes/FluencePeer.html#start\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"FluencePeer\"},{\"id\":30,\"kind\":2048,\"name\":\"getServices\",\"url\":\"classes/FluencePeer.html#getServices\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"FluencePeer\"},{\"id\":31,\"kind\":2048,\"name\":\"registerMarineService\",\"url\":\"classes/FluencePeer.html#registerMarineService\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"FluencePeer\"},{\"id\":32,\"kind\":2048,\"name\":\"removeMarineService\",\"url\":\"classes/FluencePeer.html#removeMarineService\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"FluencePeer\"},{\"id\":33,\"kind\":2048,\"name\":\"stop\",\"url\":\"classes/FluencePeer.html#stop\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"FluencePeer\"},{\"id\":34,\"kind\":256,\"name\":\"PeerConfig\",\"url\":\"interfaces/PeerConfig.html\",\"classes\":\"tsd-kind-interface\"},{\"id\":35,\"kind\":1024,\"name\":\"connectTo\",\"url\":\"interfaces/PeerConfig.html#connectTo\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"PeerConfig\"},{\"id\":36,\"kind\":1024,\"name\":\"avmLogLevel\",\"url\":\"interfaces/PeerConfig.html#avmLogLevel\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"PeerConfig\"},{\"id\":37,\"kind\":1024,\"name\":\"KeyPair\",\"url\":\"interfaces/PeerConfig.html#KeyPair\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"PeerConfig\"},{\"id\":38,\"kind\":1024,\"name\":\"checkConnectionTimeoutMs\",\"url\":\"interfaces/PeerConfig.html#checkConnectionTimeoutMs\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"PeerConfig\"},{\"id\":39,\"kind\":1024,\"name\":\"skipCheckConnection\",\"url\":\"interfaces/PeerConfig.html#skipCheckConnection\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"PeerConfig\"},{\"id\":40,\"kind\":1024,\"name\":\"dialTimeoutMs\",\"url\":\"interfaces/PeerConfig.html#dialTimeoutMs\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"PeerConfig\"},{\"id\":41,\"kind\":1024,\"name\":\"defaultTtlMs\",\"url\":\"interfaces/PeerConfig.html#defaultTtlMs\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"PeerConfig\"},{\"id\":42,\"kind\":1024,\"name\":\"avmRunner\",\"url\":\"interfaces/PeerConfig.html#avmRunner\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"PeerConfig\"},{\"id\":43,\"kind\":1024,\"name\":\"marineJS\",\"url\":\"interfaces/PeerConfig.html#marineJS\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"PeerConfig\"},{\"id\":44,\"kind\":65536,\"name\":\"__type\",\"url\":\"interfaces/PeerConfig.html#__type-1\",\"classes\":\"tsd-kind-type-literal tsd-parent-kind-interface\",\"parent\":\"PeerConfig\"},{\"id\":45,\"kind\":1024,\"name\":\"workerScriptPath\",\"url\":\"interfaces/PeerConfig.html#__type-1.workerScriptPath\",\"classes\":\"tsd-kind-property tsd-parent-kind-type-literal\",\"parent\":\"PeerConfig.__type\"},{\"id\":46,\"kind\":1024,\"name\":\"marineWasmPath\",\"url\":\"interfaces/PeerConfig.html#__type-1.marineWasmPath\",\"classes\":\"tsd-kind-property tsd-parent-kind-type-literal\",\"parent\":\"PeerConfig.__type\"},{\"id\":47,\"kind\":1024,\"name\":\"avmWasmPath\",\"url\":\"interfaces/PeerConfig.html#__type-1.avmWasmPath\",\"classes\":\"tsd-kind-property tsd-parent-kind-type-literal\",\"parent\":\"PeerConfig.__type\"},{\"id\":48,\"kind\":1024,\"name\":\"debug\",\"url\":\"interfaces/PeerConfig.html#debug\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"PeerConfig\"},{\"id\":49,\"kind\":65536,\"name\":\"__type\",\"url\":\"interfaces/PeerConfig.html#__type\",\"classes\":\"tsd-kind-type-literal tsd-parent-kind-interface\",\"parent\":\"PeerConfig\"},{\"id\":50,\"kind\":1024,\"name\":\"printParticleId\",\"url\":\"interfaces/PeerConfig.html#__type.printParticleId\",\"classes\":\"tsd-kind-property tsd-parent-kind-type-literal\",\"parent\":\"PeerConfig.__type\"},{\"id\":51,\"kind\":1024,\"name\":\"marineLogLevel\",\"url\":\"interfaces/PeerConfig.html#__type.marineLogLevel\",\"classes\":\"tsd-kind-property tsd-parent-kind-type-literal\",\"parent\":\"PeerConfig.__type\"},{\"id\":52,\"kind\":4194304,\"name\":\"AvmLoglevel\",\"url\":\"modules.html#AvmLoglevel\",\"classes\":\"tsd-kind-type-alias\"},{\"id\":53,\"kind\":4194304,\"name\":\"PeerIdB58\",\"url\":\"modules.html#PeerIdB58\",\"classes\":\"tsd-kind-type-alias\"},{\"id\":54,\"kind\":256,\"name\":\"CallParams\",\"url\":\"interfaces/CallParams.html\",\"classes\":\"tsd-kind-interface tsd-has-type-parameter\"},{\"id\":55,\"kind\":1024,\"name\":\"particleId\",\"url\":\"interfaces/CallParams.html#particleId\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"CallParams\"},{\"id\":56,\"kind\":1024,\"name\":\"initPeerId\",\"url\":\"interfaces/CallParams.html#initPeerId\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"CallParams\"},{\"id\":57,\"kind\":1024,\"name\":\"timestamp\",\"url\":\"interfaces/CallParams.html#timestamp\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"CallParams\"},{\"id\":58,\"kind\":1024,\"name\":\"ttl\",\"url\":\"interfaces/CallParams.html#ttl\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"CallParams\"},{\"id\":59,\"kind\":1024,\"name\":\"signature\",\"url\":\"interfaces/CallParams.html#signature\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"CallParams\"},{\"id\":60,\"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.217]],[\"parent/0\",[]],[\"name/1\",[1,32.108]],[\"parent/1\",[]],[\"name/2\",[2,18.758]],[\"parent/2\",[1,2.999]],[\"name/3\",[3,32.108]],[\"parent/3\",[4,1.496]],[\"name/4\",[2,18.758]],[\"parent/4\",[4,1.496]],[\"name/5\",[5,32.108]],[\"parent/5\",[4,1.496]],[\"name/6\",[2,18.758]],[\"parent/6\",[4,1.496]],[\"name/7\",[6,32.108]],[\"parent/7\",[4,1.496]],[\"name/8\",[2,18.758]],[\"parent/8\",[4,1.496]],[\"name/9\",[7,37.217]],[\"parent/9\",[4,1.496]],[\"name/10\",[2,18.758]],[\"parent/10\",[4,1.496]],[\"name/11\",[8,32.108]],[\"parent/11\",[4,1.496]],[\"name/12\",[2,18.758]],[\"parent/12\",[4,1.496]],[\"name/13\",[9,32.108]],[\"parent/13\",[4,1.496]],[\"name/14\",[2,18.758]],[\"parent/14\",[4,1.496]],[\"name/15\",[10,37.217]],[\"parent/15\",[]],[\"name/16\",[11,17.758]],[\"parent/16\",[]],[\"name/17\",[12,37.217]],[\"parent/17\",[11,1.658]],[\"name/18\",[13,37.217]],[\"parent/18\",[11,1.658]],[\"name/19\",[14,32.108]],[\"parent/19\",[11,1.658]],[\"name/20\",[15,37.217]],[\"parent/20\",[11,1.658]],[\"name/21\",[16,37.217]],[\"parent/21\",[11,1.658]],[\"name/22\",[17,37.217]],[\"parent/22\",[11,1.658]],[\"name/23\",[18,37.217]],[\"parent/23\",[11,1.658]],[\"name/24\",[19,37.217]],[\"parent/24\",[11,1.658]],[\"name/25\",[20,18.758]],[\"parent/25\",[]],[\"name/26\",[21,37.217]],[\"parent/26\",[20,1.752]],[\"name/27\",[14,32.108]],[\"parent/27\",[20,1.752]],[\"name/28\",[6,32.108]],[\"parent/28\",[20,1.752]],[\"name/29\",[3,32.108]],[\"parent/29\",[20,1.752]],[\"name/30\",[22,37.217]],[\"parent/30\",[20,1.752]],[\"name/31\",[8,32.108]],[\"parent/31\",[20,1.752]],[\"name/32\",[9,32.108]],[\"parent/32\",[20,1.752]],[\"name/33\",[5,32.108]],[\"parent/33\",[20,1.752]],[\"name/34\",[23,15.244]],[\"parent/34\",[]],[\"name/35\",[24,37.217]],[\"parent/35\",[23,1.424]],[\"name/36\",[25,32.108]],[\"parent/36\",[23,1.424]],[\"name/37\",[11,17.758]],[\"parent/37\",[23,1.424]],[\"name/38\",[26,37.217]],[\"parent/38\",[23,1.424]],[\"name/39\",[27,37.217]],[\"parent/39\",[23,1.424]],[\"name/40\",[28,37.217]],[\"parent/40\",[23,1.424]],[\"name/41\",[29,37.217]],[\"parent/41\",[23,1.424]],[\"name/42\",[30,37.217]],[\"parent/42\",[23,1.424]],[\"name/43\",[31,37.217]],[\"parent/43\",[23,1.424]],[\"name/44\",[2,18.758]],[\"parent/44\",[23,1.424]],[\"name/45\",[32,37.217]],[\"parent/45\",[33,2.262]],[\"name/46\",[34,37.217]],[\"parent/46\",[33,2.262]],[\"name/47\",[35,37.217]],[\"parent/47\",[33,2.262]],[\"name/48\",[36,37.217]],[\"parent/48\",[23,1.424]],[\"name/49\",[2,18.758]],[\"parent/49\",[23,1.424]],[\"name/50\",[37,37.217]],[\"parent/50\",[33,2.262]],[\"name/51\",[38,37.217]],[\"parent/51\",[33,2.262]],[\"name/52\",[25,32.108]],[\"parent/52\",[]],[\"name/53\",[39,37.217]],[\"parent/53\",[]],[\"name/54\",[40,21.122]],[\"parent/54\",[]],[\"name/55\",[41,37.217]],[\"parent/55\",[40,1.973]],[\"name/56\",[42,37.217]],[\"parent/56\",[40,1.973]],[\"name/57\",[43,37.217]],[\"parent/57\",[40,1.973]],[\"name/58\",[44,37.217]],[\"parent/58\",[40,1.973]],[\"name/59\",[45,37.217]],[\"parent/59\",[40,1.973]],[\"name/60\",[46,37.217]],[\"parent/60\",[40,1.973]]],\"invertedIndex\":[[\"__type\",{\"_index\":2,\"name\":{\"2\":{},\"4\":{},\"6\":{},\"8\":{},\"10\":{},\"12\":{},\"14\":{},\"44\":{},\"49\":{}},\"parent\":{}}],[\"avmloglevel\",{\"_index\":25,\"name\":{\"36\":{},\"52\":{}},\"parent\":{}}],[\"avmrunner\",{\"_index\":30,\"name\":{\"42\":{}},\"parent\":{}}],[\"avmwasmpath\",{\"_index\":35,\"name\":{\"47\":{}},\"parent\":{}}],[\"callparams\",{\"_index\":40,\"name\":{\"54\":{}},\"parent\":{\"55\":{},\"56\":{},\"57\":{},\"58\":{},\"59\":{},\"60\":{}}}],[\"checkconnectiontimeoutms\",{\"_index\":26,\"name\":{\"38\":{}},\"parent\":{}}],[\"connectto\",{\"_index\":24,\"name\":{\"35\":{}},\"parent\":{}}],[\"constructor\",{\"_index\":14,\"name\":{\"19\":{},\"27\":{}},\"parent\":{}}],[\"debug\",{\"_index\":36,\"name\":{\"48\":{}},\"parent\":{}}],[\"defaultttlms\",{\"_index\":29,\"name\":{\"41\":{}},\"parent\":{}}],[\"dialtimeoutms\",{\"_index\":28,\"name\":{\"40\":{}},\"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\":20,\"name\":{\"25\":{}},\"parent\":{\"26\":{},\"27\":{},\"28\":{},\"29\":{},\"30\":{},\"31\":{},\"32\":{},\"33\":{}}}],[\"fromed25519sk\",{\"_index\":12,\"name\":{\"17\":{}},\"parent\":{}}],[\"getpeer\",{\"_index\":7,\"name\":{\"9\":{}},\"parent\":{}}],[\"getservices\",{\"_index\":22,\"name\":{\"30\":{}},\"parent\":{}}],[\"getstatus\",{\"_index\":6,\"name\":{\"7\":{},\"28\":{}},\"parent\":{}}],[\"initpeerid\",{\"_index\":42,\"name\":{\"56\":{}},\"parent\":{}}],[\"isinstance\",{\"_index\":21,\"name\":{\"26\":{}},\"parent\":{}}],[\"keypair\",{\"_index\":11,\"name\":{\"16\":{},\"37\":{}},\"parent\":{\"17\":{},\"18\":{},\"19\":{},\"20\":{},\"21\":{},\"22\":{},\"23\":{},\"24\":{}}}],[\"libp2ppeerid\",{\"_index\":15,\"name\":{\"20\":{}},\"parent\":{}}],[\"marinejs\",{\"_index\":31,\"name\":{\"43\":{}},\"parent\":{}}],[\"marineloglevel\",{\"_index\":38,\"name\":{\"51\":{}},\"parent\":{}}],[\"marinewasmpath\",{\"_index\":34,\"name\":{\"46\":{}},\"parent\":{}}],[\"particleid\",{\"_index\":41,\"name\":{\"55\":{}},\"parent\":{}}],[\"peerconfig\",{\"_index\":23,\"name\":{\"34\":{}},\"parent\":{\"35\":{},\"36\":{},\"37\":{},\"38\":{},\"39\":{},\"40\":{},\"41\":{},\"42\":{},\"43\":{},\"44\":{},\"48\":{},\"49\":{}}}],[\"peerconfig.__type\",{\"_index\":33,\"name\":{},\"parent\":{\"45\":{},\"46\":{},\"47\":{},\"50\":{},\"51\":{}}}],[\"peeridb58\",{\"_index\":39,\"name\":{\"53\":{}},\"parent\":{}}],[\"peerstatus\",{\"_index\":10,\"name\":{\"15\":{}},\"parent\":{}}],[\"printparticleid\",{\"_index\":37,\"name\":{\"50\":{}},\"parent\":{}}],[\"randomed25519\",{\"_index\":13,\"name\":{\"18\":{}},\"parent\":{}}],[\"registermarineservice\",{\"_index\":8,\"name\":{\"11\":{},\"31\":{}},\"parent\":{}}],[\"removemarineservice\",{\"_index\":9,\"name\":{\"13\":{},\"32\":{}},\"parent\":{}}],[\"setloglevel\",{\"_index\":0,\"name\":{\"0\":{}},\"parent\":{}}],[\"signature\",{\"_index\":45,\"name\":{\"59\":{}},\"parent\":{}}],[\"signbytes\",{\"_index\":18,\"name\":{\"23\":{}},\"parent\":{}}],[\"skipcheckconnection\",{\"_index\":27,\"name\":{\"39\":{}},\"parent\":{}}],[\"start\",{\"_index\":3,\"name\":{\"3\":{},\"29\":{}},\"parent\":{}}],[\"stop\",{\"_index\":5,\"name\":{\"5\":{},\"33\":{}},\"parent\":{}}],[\"tetraplets\",{\"_index\":46,\"name\":{\"60\":{}},\"parent\":{}}],[\"timestamp\",{\"_index\":43,\"name\":{\"57\":{}},\"parent\":{}}],[\"tob58string\",{\"_index\":16,\"name\":{\"21\":{}},\"parent\":{}}],[\"toed25519privatekey\",{\"_index\":17,\"name\":{\"22\":{}},\"parent\":{}}],[\"ttl\",{\"_index\":44,\"name\":{\"58\":{}},\"parent\":{}}],[\"verify\",{\"_index\":19,\"name\":{\"24\":{}},\"parent\":{}}],[\"workerscriptpath\",{\"_index\":32,\"name\":{\"45\":{}},\"parent\":{}}]],\"pipeline\":[]}}"); \ No newline at end of file diff --git a/docs/assets/style.css b/docs/assets/style.css deleted file mode 100644 index 6127b27c..00000000 --- a/docs/assets/style.css +++ /dev/null @@ -1,1414 +0,0 @@ -@import url("./icons.css"); - -:root { - /* Light */ - --light-color-background: #fcfcfc; - --light-color-secondary-background: #fff; - --light-color-text: #222; - --light-color-text-aside: #707070; - --light-color-link: #4da6ff; - --light-color-menu-divider: #eee; - --light-color-menu-divider-focus: #000; - --light-color-menu-label: #707070; - --light-color-panel: var(--light-color-secondary-background); - --light-color-panel-divider: #eee; - --light-color-comment-tag: #707070; - --light-color-comment-tag-text: #fff; - --light-color-ts: #9600ff; - --light-color-ts-interface: #647f1b; - --light-color-ts-enum: #937210; - --light-color-ts-class: #0672de; - --light-color-ts-private: #707070; - --light-color-toolbar: #fff; - --light-color-toolbar-text: #333; - --light-icon-filter: invert(0); - --light-external-icon: url("data:image/svg+xml;utf8,"); - - /* Dark */ - --dark-color-background: #36393f; - --dark-color-secondary-background: #2f3136; - --dark-color-text: #ffffff; - --dark-color-text-aside: #e6e4e4; - --dark-color-link: #00aff4; - --dark-color-menu-divider: #eee; - --dark-color-menu-divider-focus: #000; - --dark-color-menu-label: #707070; - --dark-color-panel: var(--dark-color-secondary-background); - --dark-color-panel-divider: #818181; - --dark-color-comment-tag: #dcddde; - --dark-color-comment-tag-text: #2f3136; - --dark-color-ts: #c97dff; - --dark-color-ts-interface: #9cbe3c; - --dark-color-ts-enum: #d6ab29; - --dark-color-ts-class: #3695f3; - --dark-color-ts-private: #e2e2e2; - --dark-color-toolbar: #34373c; - --dark-color-toolbar-text: #ffffff; - --dark-icon-filter: invert(1); - --dark-external-icon: url("data:image/svg+xml;utf8,"); -} - -@media (prefers-color-scheme: light) { - :root { - --color-background: var(--light-color-background); - --color-secondary-background: var(--light-color-secondary-background); - --color-text: var(--light-color-text); - --color-text-aside: var(--light-color-text-aside); - --color-link: var(--light-color-link); - --color-menu-divider: var(--light-color-menu-divider); - --color-menu-divider-focus: var(--light-color-menu-divider-focus); - --color-menu-label: var(--light-color-menu-label); - --color-panel: var(--light-color-panel); - --color-panel-divider: var(--light-color-panel-divider); - --color-comment-tag: var(--light-color-comment-tag); - --color-comment-tag-text: var(--light-color-comment-tag-text); - --color-ts: var(--light-color-ts); - --color-ts-interface: var(--light-color-ts-interface); - --color-ts-enum: var(--light-color-ts-enum); - --color-ts-class: var(--light-color-ts-class); - --color-ts-private: var(--light-color-ts-private); - --color-toolbar: var(--light-color-toolbar); - --color-toolbar-text: var(--light-color-toolbar-text); - --icon-filter: var(--light-icon-filter); - --external-icon: var(--light-external-icon); - } -} - -@media (prefers-color-scheme: dark) { - :root { - --color-background: var(--dark-color-background); - --color-secondary-background: var(--dark-color-secondary-background); - --color-text: var(--dark-color-text); - --color-text-aside: var(--dark-color-text-aside); - --color-link: var(--dark-color-link); - --color-menu-divider: var(--dark-color-menu-divider); - --color-menu-divider-focus: var(--dark-color-menu-divider-focus); - --color-menu-label: var(--dark-color-menu-label); - --color-panel: var(--dark-color-panel); - --color-panel-divider: var(--dark-color-panel-divider); - --color-comment-tag: var(--dark-color-comment-tag); - --color-comment-tag-text: var(--dark-color-comment-tag-text); - --color-ts: var(--dark-color-ts); - --color-ts-interface: var(--dark-color-ts-interface); - --color-ts-enum: var(--dark-color-ts-enum); - --color-ts-class: var(--dark-color-ts-class); - --color-ts-private: var(--dark-color-ts-private); - --color-toolbar: var(--dark-color-toolbar); - --color-toolbar-text: var(--dark-color-toolbar-text); - --icon-filter: var(--dark-icon-filter); - --external-icon: var(--dark-external-icon); - } -} - -body { - margin: 0; -} - -body.light { - --color-background: var(--light-color-background); - --color-secondary-background: var(--light-color-secondary-background); - --color-text: var(--light-color-text); - --color-text-aside: var(--light-color-text-aside); - --color-link: var(--light-color-link); - --color-menu-divider: var(--light-color-menu-divider); - --color-menu-divider-focus: var(--light-color-menu-divider-focus); - --color-menu-label: var(--light-color-menu-label); - --color-panel: var(--light-color-panel); - --color-panel-divider: var(--light-color-panel-divider); - --color-comment-tag: var(--light-color-comment-tag); - --color-comment-tag-text: var(--light-color-comment-tag-text); - --color-ts: var(--light-color-ts); - --color-ts-interface: var(--light-color-ts-interface); - --color-ts-enum: var(--light-color-ts-enum); - --color-ts-class: var(--light-color-ts-class); - --color-ts-private: var(--light-color-ts-private); - --color-toolbar: var(--light-color-toolbar); - --color-toolbar-text: var(--light-color-toolbar-text); - --icon-filter: var(--light-icon-filter); - --external-icon: var(--light-external-icon); -} - -body.dark { - --color-background: var(--dark-color-background); - --color-secondary-background: var(--dark-color-secondary-background); - --color-text: var(--dark-color-text); - --color-text-aside: var(--dark-color-text-aside); - --color-link: var(--dark-color-link); - --color-menu-divider: var(--dark-color-menu-divider); - --color-menu-divider-focus: var(--dark-color-menu-divider-focus); - --color-menu-label: var(--dark-color-menu-label); - --color-panel: var(--dark-color-panel); - --color-panel-divider: var(--dark-color-panel-divider); - --color-comment-tag: var(--dark-color-comment-tag); - --color-comment-tag-text: var(--dark-color-comment-tag-text); - --color-ts: var(--dark-color-ts); - --color-ts-interface: var(--dark-color-ts-interface); - --color-ts-enum: var(--dark-color-ts-enum); - --color-ts-class: var(--dark-color-ts-class); - --color-ts-private: var(--dark-color-ts-private); - --color-toolbar: var(--dark-color-toolbar); - --color-toolbar-text: var(--dark-color-toolbar-text); - --icon-filter: var(--dark-icon-filter); - --external-icon: var(--dark-external-icon); -} - -h1, -h2, -h3, -h4, -h5, -h6 { - line-height: 1.2; -} - -h1 { - font-size: 2em; - margin: 0.67em 0; -} - -h2 { - font-size: 1.5em; - margin: 0.83em 0; -} - -h3 { - font-size: 1.17em; - margin: 1em 0; -} - -h4, -.tsd-index-panel h3 { - font-size: 1em; - margin: 1.33em 0; -} - -h5 { - font-size: 0.83em; - margin: 1.67em 0; -} - -h6 { - font-size: 0.67em; - margin: 2.33em 0; -} - -pre { - white-space: pre; - white-space: pre-wrap; - word-wrap: break-word; -} - -dl, -menu, -ol, -ul { - margin: 1em 0; -} - -dd { - margin: 0 0 0 40px; -} - -.container { - max-width: 1200px; - margin: 0 auto; - padding: 0 40px; -} -@media (max-width: 640px) { - .container { - padding: 0 20px; - } -} - -.container-main { - padding-bottom: 200px; -} - -.row { - display: flex; - position: relative; - margin: 0 -10px; -} -.row:after { - visibility: hidden; - display: block; - content: ""; - clear: both; - height: 0; -} - -.col-4, -.col-8 { - box-sizing: border-box; - float: left; - padding: 0 10px; -} - -.col-4 { - width: 33.3333333333%; -} -.col-8 { - width: 66.6666666667%; -} - -ul.tsd-descriptions > li > :first-child, -.tsd-panel > :first-child, -.col-8 > :first-child, -.col-4 > :first-child, -ul.tsd-descriptions > li > :first-child > :first-child, -.tsd-panel > :first-child > :first-child, -.col-8 > :first-child > :first-child, -.col-4 > :first-child > :first-child, -ul.tsd-descriptions > li > :first-child > :first-child > :first-child, -.tsd-panel > :first-child > :first-child > :first-child, -.col-8 > :first-child > :first-child > :first-child, -.col-4 > :first-child > :first-child > :first-child { - margin-top: 0; -} -ul.tsd-descriptions > li > :last-child, -.tsd-panel > :last-child, -.col-8 > :last-child, -.col-4 > :last-child, -ul.tsd-descriptions > li > :last-child > :last-child, -.tsd-panel > :last-child > :last-child, -.col-8 > :last-child > :last-child, -.col-4 > :last-child > :last-child, -ul.tsd-descriptions > li > :last-child > :last-child > :last-child, -.tsd-panel > :last-child > :last-child > :last-child, -.col-8 > :last-child > :last-child > :last-child, -.col-4 > :last-child > :last-child > :last-child { - margin-bottom: 0; -} - -@keyframes fade-in { - from { - opacity: 0; - } - to { - opacity: 1; - } -} -@keyframes fade-out { - from { - opacity: 1; - visibility: visible; - } - to { - opacity: 0; - } -} -@keyframes fade-in-delayed { - 0% { - opacity: 0; - } - 33% { - opacity: 0; - } - 100% { - opacity: 1; - } -} -@keyframes fade-out-delayed { - 0% { - opacity: 1; - visibility: visible; - } - 66% { - opacity: 0; - } - 100% { - opacity: 0; - } -} -@keyframes shift-to-left { - from { - transform: translate(0, 0); - } - to { - transform: translate(-25%, 0); - } -} -@keyframes unshift-to-left { - from { - transform: translate(-25%, 0); - } - to { - transform: translate(0, 0); - } -} -@keyframes pop-in-from-right { - from { - transform: translate(100%, 0); - } - to { - transform: translate(0, 0); - } -} -@keyframes pop-out-to-right { - from { - transform: translate(0, 0); - visibility: visible; - } - to { - transform: translate(100%, 0); - } -} -body { - background: var(--color-background); - font-family: "Segoe UI", sans-serif; - font-size: 16px; - color: var(--color-text); -} - -a { - color: var(--color-link); - text-decoration: none; -} -a:hover { - text-decoration: underline; -} -a.external[target="_blank"] { - background-image: var(--external-icon); - background-position: top 3px right; - background-repeat: no-repeat; - padding-right: 13px; -} - -code, -pre { - font-family: Menlo, Monaco, Consolas, "Courier New", monospace; - padding: 0.2em; - margin: 0; - font-size: 14px; -} - -pre { - padding: 10px; -} -pre code { - padding: 0; - font-size: 100%; -} - -blockquote { - margin: 1em 0; - padding-left: 1em; - border-left: 4px solid gray; -} - -.tsd-typography { - line-height: 1.333em; -} -.tsd-typography ul { - list-style: square; - padding: 0 0 0 20px; - margin: 0; -} -.tsd-typography h4, -.tsd-typography .tsd-index-panel h3, -.tsd-index-panel .tsd-typography h3, -.tsd-typography h5, -.tsd-typography h6 { - font-size: 1em; - margin: 0; -} -.tsd-typography h5, -.tsd-typography h6 { - font-weight: normal; -} -.tsd-typography p, -.tsd-typography ul, -.tsd-typography ol { - margin: 1em 0; -} - -@media (min-width: 901px) and (max-width: 1024px) { - html .col-content { - width: 72%; - } - html .col-menu { - width: 28%; - } - html .tsd-navigation { - padding-left: 10px; - } -} -@media (max-width: 900px) { - html .col-content { - float: none; - width: 100%; - } - html .col-menu { - position: fixed !important; - overflow: auto; - -webkit-overflow-scrolling: touch; - z-index: 1024; - top: 0 !important; - bottom: 0 !important; - left: auto !important; - right: 0 !important; - width: 100%; - padding: 20px 20px 0 0; - max-width: 450px; - visibility: hidden; - background-color: var(--color-panel); - transform: translate(100%, 0); - } - html .col-menu > *:last-child { - padding-bottom: 20px; - } - html .overlay { - content: ""; - display: block; - position: fixed; - z-index: 1023; - top: 0; - left: 0; - right: 0; - bottom: 0; - background-color: rgba(0, 0, 0, 0.75); - visibility: hidden; - } - - .to-has-menu .overlay { - animation: fade-in 0.4s; - } - - .to-has-menu :is(header, footer, .col-content) { - animation: shift-to-left 0.4s; - } - - .to-has-menu .col-menu { - animation: pop-in-from-right 0.4s; - } - - .from-has-menu .overlay { - animation: fade-out 0.4s; - } - - .from-has-menu :is(header, footer, .col-content) { - animation: unshift-to-left 0.4s; - } - - .from-has-menu .col-menu { - animation: pop-out-to-right 0.4s; - } - - .has-menu body { - overflow: hidden; - } - .has-menu .overlay { - visibility: visible; - } - .has-menu :is(header, footer, .col-content) { - transform: translate(-25%, 0); - } - .has-menu .col-menu { - visibility: visible; - transform: translate(0, 0); - display: grid; - grid-template-rows: auto 1fr; - max-height: 100vh; - } - .has-menu .tsd-navigation { - max-height: 100%; - } -} - -.tsd-page-title { - padding: 70px 0 20px 0; - margin: 0 0 40px 0; - background: var(--color-panel); - box-shadow: 0 0 5px rgba(0, 0, 0, 0.35); -} -.tsd-page-title h1 { - margin: 0; -} - -.tsd-breadcrumb { - margin: 0; - padding: 0; - color: var(--color-text-aside); -} -.tsd-breadcrumb a { - color: var(--color-text-aside); - text-decoration: none; -} -.tsd-breadcrumb a:hover { - text-decoration: underline; -} -.tsd-breadcrumb li { - display: inline; -} -.tsd-breadcrumb li:after { - content: " / "; -} - -dl.tsd-comment-tags { - overflow: hidden; -} -dl.tsd-comment-tags dt { - float: left; - padding: 1px 5px; - margin: 0 10px 0 0; - border-radius: 4px; - border: 1px solid var(--color-comment-tag); - color: var(--color-comment-tag); - font-size: 0.8em; - font-weight: normal; -} -dl.tsd-comment-tags dd { - margin: 0 0 10px 0; -} -dl.tsd-comment-tags dd:before, -dl.tsd-comment-tags dd:after { - display: table; - content: " "; -} -dl.tsd-comment-tags dd pre, -dl.tsd-comment-tags dd:after { - clear: both; -} -dl.tsd-comment-tags p { - margin: 0; -} - -.tsd-panel.tsd-comment .lead { - font-size: 1.1em; - line-height: 1.333em; - margin-bottom: 2em; -} -.tsd-panel.tsd-comment .lead:last-child { - margin-bottom: 0; -} - -.toggle-protected .tsd-is-private { - display: none; -} - -.toggle-public .tsd-is-private, -.toggle-public .tsd-is-protected, -.toggle-public .tsd-is-private-protected { - display: none; -} - -.toggle-inherited .tsd-is-inherited { - display: none; -} - -.toggle-externals .tsd-is-external { - display: none; -} - -#tsd-filter { - position: relative; - display: inline-block; - height: 40px; - vertical-align: bottom; -} -.no-filter #tsd-filter { - display: none; -} -#tsd-filter .tsd-filter-group { - display: inline-block; - height: 40px; - vertical-align: bottom; - white-space: nowrap; -} -#tsd-filter input { - display: none; -} -@media (max-width: 900px) { - #tsd-filter .tsd-filter-group { - display: block; - position: absolute; - top: 40px; - right: 20px; - height: auto; - background-color: var(--color-panel); - visibility: hidden; - transform: translate(50%, 0); - box-shadow: 0 0 4px rgba(0, 0, 0, 0.25); - } - .has-options #tsd-filter .tsd-filter-group { - visibility: visible; - } - .to-has-options #tsd-filter .tsd-filter-group { - animation: fade-in 0.2s; - } - .from-has-options #tsd-filter .tsd-filter-group { - animation: fade-out 0.2s; - } - #tsd-filter label, - #tsd-filter .tsd-select { - display: block; - padding-right: 20px; - } -} - -footer { - border-top: 1px solid var(--color-panel-divider); - background-color: var(--color-panel); -} -footer:after { - content: ""; - display: table; -} -footer.with-border-bottom { - border-bottom: 1px solid var(--color-panel-divider); -} -footer .tsd-legend-group { - font-size: 0; -} -footer .tsd-legend { - display: inline-block; - width: 25%; - padding: 0; - font-size: 16px; - list-style: none; - line-height: 1.333em; - vertical-align: top; -} -@media (max-width: 900px) { - footer .tsd-legend { - width: 50%; - } -} - -.tsd-hierarchy { - list-style: square; - padding: 0 0 0 20px; - margin: 0; -} -.tsd-hierarchy .target { - font-weight: bold; -} - -.tsd-index-panel .tsd-index-content { - margin-bottom: -30px !important; -} -.tsd-index-panel .tsd-index-section { - margin-bottom: 30px !important; -} -.tsd-index-panel h3 { - margin: 0 -20px 10px -20px; - padding: 0 20px 10px 20px; - border-bottom: 1px solid var(--color-panel-divider); -} -.tsd-index-panel ul.tsd-index-list { - -webkit-column-count: 3; - -moz-column-count: 3; - -ms-column-count: 3; - -o-column-count: 3; - column-count: 3; - -webkit-column-gap: 20px; - -moz-column-gap: 20px; - -ms-column-gap: 20px; - -o-column-gap: 20px; - column-gap: 20px; - padding: 0; - list-style: none; - line-height: 1.333em; -} -@media (max-width: 900px) { - .tsd-index-panel ul.tsd-index-list { - -webkit-column-count: 1; - -moz-column-count: 1; - -ms-column-count: 1; - -o-column-count: 1; - column-count: 1; - } -} -@media (min-width: 901px) and (max-width: 1024px) { - .tsd-index-panel ul.tsd-index-list { - -webkit-column-count: 2; - -moz-column-count: 2; - -ms-column-count: 2; - -o-column-count: 2; - column-count: 2; - } -} -.tsd-index-panel ul.tsd-index-list li { - -webkit-page-break-inside: avoid; - -moz-page-break-inside: avoid; - -ms-page-break-inside: avoid; - -o-page-break-inside: avoid; - page-break-inside: avoid; -} -.tsd-index-panel a, -.tsd-index-panel .tsd-parent-kind-module a { - color: var(--color-ts); -} -.tsd-index-panel .tsd-parent-kind-interface a { - color: var(--color-ts-interface); -} -.tsd-index-panel .tsd-parent-kind-enum a { - color: var(--color-ts-enum); -} -.tsd-index-panel .tsd-parent-kind-class a { - color: var(--color-ts-class); -} -.tsd-index-panel .tsd-kind-module a { - color: var(--color-ts); -} -.tsd-index-panel .tsd-kind-interface a { - color: var(--color-ts-interface); -} -.tsd-index-panel .tsd-kind-enum a { - color: var(--color-ts-enum); -} -.tsd-index-panel .tsd-kind-class a { - color: var(--color-ts-class); -} -.tsd-index-panel .tsd-is-private a { - color: var(--color-ts-private); -} - -.tsd-flag { - display: inline-block; - padding: 0.25em 0.4em; - border-radius: 4px; - color: var(--color-comment-tag-text); - background-color: var(--color-comment-tag); - text-indent: 0; - font-size: 75%; - line-height: 1; - font-weight: normal; -} - -.tsd-anchor { - position: absolute; - top: -100px; -} - -.tsd-member { - position: relative; -} -.tsd-member .tsd-anchor + h3 { - margin-top: 0; - margin-bottom: 0; - border-bottom: none; -} -.tsd-member [data-tsd-kind] { - color: var(--color-ts); -} -.tsd-member [data-tsd-kind="Interface"] { - color: var(--color-ts-interface); -} -.tsd-member [data-tsd-kind="Enum"] { - color: var(--color-ts-enum); -} -.tsd-member [data-tsd-kind="Class"] { - color: var(--color-ts-class); -} -.tsd-member [data-tsd-kind="Private"] { - color: var(--color-ts-private); -} - -.tsd-navigation { - margin: 0 0 0 40px; -} -.tsd-navigation a { - display: block; - padding-top: 2px; - padding-bottom: 2px; - border-left: 2px solid transparent; - color: var(--color-text); - text-decoration: none; - transition: border-left-color 0.1s; -} -.tsd-navigation a:hover { - text-decoration: underline; -} -.tsd-navigation ul { - margin: 0; - padding: 0; - list-style: none; -} -.tsd-navigation li { - padding: 0; -} - -.tsd-navigation.primary { - padding-bottom: 40px; -} -.tsd-navigation.primary a { - display: block; - padding-top: 6px; - padding-bottom: 6px; -} -.tsd-navigation.primary ul li a { - padding-left: 5px; -} -.tsd-navigation.primary ul li li a { - padding-left: 25px; -} -.tsd-navigation.primary ul li li li a { - padding-left: 45px; -} -.tsd-navigation.primary ul li li li li a { - padding-left: 65px; -} -.tsd-navigation.primary ul li li li li li a { - padding-left: 85px; -} -.tsd-navigation.primary ul li li li li li li a { - padding-left: 105px; -} -.tsd-navigation.primary > ul { - border-bottom: 1px solid var(--color-panel-divider); -} -.tsd-navigation.primary li { - border-top: 1px solid var(--color-panel-divider); -} -.tsd-navigation.primary li.current > a { - font-weight: bold; -} -.tsd-navigation.primary li.label span { - display: block; - padding: 20px 0 6px 5px; - color: var(--color-menu-label); -} -.tsd-navigation.primary li.globals + li > span, -.tsd-navigation.primary li.globals + li > a { - padding-top: 20px; -} - -.tsd-navigation.secondary { - max-height: calc(100vh - 1rem - 40px); - overflow: auto; - position: sticky; - top: calc(0.5rem + 40px); - transition: 0.3s; -} -.tsd-navigation.secondary.tsd-navigation--toolbar-hide { - max-height: calc(100vh - 1rem); - top: 0.5rem; -} -.tsd-navigation.secondary ul { - transition: opacity 0.2s; -} -.tsd-navigation.secondary ul li a { - padding-left: 25px; -} -.tsd-navigation.secondary ul li li a { - padding-left: 45px; -} -.tsd-navigation.secondary ul li li li a { - padding-left: 65px; -} -.tsd-navigation.secondary ul li li li li a { - padding-left: 85px; -} -.tsd-navigation.secondary ul li li li li li a { - padding-left: 105px; -} -.tsd-navigation.secondary ul li li li li li li a { - padding-left: 125px; -} -.tsd-navigation.secondary ul.current a { - border-left-color: var(--color-panel-divider); -} -.tsd-navigation.secondary li.focus > a, -.tsd-navigation.secondary ul.current li.focus > a { - border-left-color: var(--color-menu-divider-focus); -} -.tsd-navigation.secondary li.current { - margin-top: 20px; - margin-bottom: 20px; - border-left-color: var(--color-panel-divider); -} -.tsd-navigation.secondary li.current > a { - font-weight: bold; -} - -@media (min-width: 901px) { - .menu-sticky-wrap { - position: static; - } -} - -.tsd-panel { - margin: 20px 0; - padding: 20px; - background-color: var(--color-panel); - box-shadow: 0 0 4px rgba(0, 0, 0, 0.25); -} -.tsd-panel:empty { - display: none; -} -.tsd-panel > h1, -.tsd-panel > h2, -.tsd-panel > h3 { - margin: 1.5em -20px 10px -20px; - padding: 0 20px 10px 20px; - border-bottom: 1px solid var(--color-panel-divider); -} -.tsd-panel > h1.tsd-before-signature, -.tsd-panel > h2.tsd-before-signature, -.tsd-panel > h3.tsd-before-signature { - margin-bottom: 0; - border-bottom: 0; -} -.tsd-panel table { - display: block; - width: 100%; - overflow: auto; - margin-top: 10px; - word-break: normal; - word-break: keep-all; - border-collapse: collapse; -} -.tsd-panel table th { - font-weight: bold; -} -.tsd-panel table th, -.tsd-panel table td { - padding: 6px 13px; - border: 1px solid var(--color-panel-divider); -} -.tsd-panel table tr { - background: var(--color-background); -} -.tsd-panel table tr:nth-child(even) { - background: var(--color-secondary-background); -} - -.tsd-panel-group { - margin: 60px 0; -} -.tsd-panel-group > h1, -.tsd-panel-group > h2, -.tsd-panel-group > h3 { - padding-left: 20px; - padding-right: 20px; -} - -#tsd-search { - transition: background-color 0.2s; -} -#tsd-search .title { - position: relative; - z-index: 2; -} -#tsd-search .field { - position: absolute; - left: 0; - top: 0; - right: 40px; - height: 40px; -} -#tsd-search .field input { - box-sizing: border-box; - position: relative; - top: -50px; - z-index: 1; - width: 100%; - padding: 0 10px; - opacity: 0; - outline: 0; - border: 0; - background: transparent; - color: var(--color-text); -} -#tsd-search .field label { - position: absolute; - overflow: hidden; - right: -40px; -} -#tsd-search .field input, -#tsd-search .title { - transition: opacity 0.2s; -} -#tsd-search .results { - position: absolute; - visibility: hidden; - top: 40px; - width: 100%; - margin: 0; - padding: 0; - list-style: none; - box-shadow: 0 0 4px rgba(0, 0, 0, 0.25); -} -#tsd-search .results li { - padding: 0 10px; - background-color: var(--color-background); -} -#tsd-search .results li:nth-child(even) { - background-color: var(--color-panel); -} -#tsd-search .results li.state { - display: none; -} -#tsd-search .results li.current, -#tsd-search .results li:hover { - background-color: var(--color-panel-divider); -} -#tsd-search .results a { - display: block; -} -#tsd-search .results a:before { - top: 10px; -} -#tsd-search .results span.parent { - color: var(--color-text-aside); - font-weight: normal; -} -#tsd-search.has-focus { - background-color: var(--color-panel-divider); -} -#tsd-search.has-focus .field input { - top: 0; - opacity: 1; -} -#tsd-search.has-focus .title { - z-index: 0; - opacity: 0; -} -#tsd-search.has-focus .results { - visibility: visible; -} -#tsd-search.loading .results li.state.loading { - display: block; -} -#tsd-search.failure .results li.state.failure { - display: block; -} - -.tsd-signature { - margin: 0 0 1em 0; - padding: 10px; - border: 1px solid var(--color-panel-divider); - font-family: Menlo, Monaco, Consolas, "Courier New", monospace; - font-size: 14px; - overflow-x: auto; -} -.tsd-signature.tsd-kind-icon { - padding-left: 30px; -} -.tsd-signature.tsd-kind-icon:before { - top: 10px; - left: 10px; -} -.tsd-panel > .tsd-signature { - margin-left: -20px; - margin-right: -20px; - border-width: 1px 0; -} -.tsd-panel > .tsd-signature.tsd-kind-icon { - padding-left: 40px; -} -.tsd-panel > .tsd-signature.tsd-kind-icon:before { - left: 20px; -} - -.tsd-signature-symbol { - color: var(--color-text-aside); - font-weight: normal; -} - -.tsd-signature-type { - font-style: italic; - font-weight: normal; -} - -.tsd-signatures { - padding: 0; - margin: 0 0 1em 0; - border: 1px solid var(--color-panel-divider); -} -.tsd-signatures .tsd-signature { - margin: 0; - border-width: 1px 0 0 0; - transition: background-color 0.1s; -} -.tsd-signatures .tsd-signature:first-child { - border-top-width: 0; -} -.tsd-signatures .tsd-signature.current { - background-color: var(--color-panel-divider); -} -.tsd-signatures.active > .tsd-signature { - cursor: pointer; -} -.tsd-panel > .tsd-signatures { - margin-left: -20px; - margin-right: -20px; - border-width: 1px 0; -} -.tsd-panel > .tsd-signatures .tsd-signature.tsd-kind-icon { - padding-left: 40px; -} -.tsd-panel > .tsd-signatures .tsd-signature.tsd-kind-icon:before { - left: 20px; -} -.tsd-panel > a.anchor + .tsd-signatures { - border-top-width: 0; - margin-top: -20px; -} - -ul.tsd-descriptions { - position: relative; - overflow: hidden; - padding: 0; - list-style: none; -} -ul.tsd-descriptions.active > .tsd-description { - display: none; -} -ul.tsd-descriptions.active > .tsd-description.current { - display: block; -} -ul.tsd-descriptions.active > .tsd-description.fade-in { - animation: fade-in-delayed 0.3s; -} -ul.tsd-descriptions.active > .tsd-description.fade-out { - animation: fade-out-delayed 0.3s; - position: absolute; - display: block; - top: 0; - left: 0; - right: 0; - opacity: 0; - visibility: hidden; -} -ul.tsd-descriptions h4, -ul.tsd-descriptions .tsd-index-panel h3, -.tsd-index-panel ul.tsd-descriptions h3 { - font-size: 16px; - margin: 1em 0 0.5em 0; -} - -ul.tsd-parameters, -ul.tsd-type-parameters { - list-style: square; - margin: 0; - padding-left: 20px; -} -ul.tsd-parameters > li.tsd-parameter-signature, -ul.tsd-type-parameters > li.tsd-parameter-signature { - list-style: none; - margin-left: -20px; -} -ul.tsd-parameters h5, -ul.tsd-type-parameters h5 { - font-size: 16px; - margin: 1em 0 0.5em 0; -} -ul.tsd-parameters .tsd-comment, -ul.tsd-type-parameters .tsd-comment { - margin-top: -0.5em; -} - -.tsd-sources { - font-size: 14px; - color: var(--color-text-aside); - margin: 0 0 1em 0; -} -.tsd-sources a { - color: var(--color-text-aside); - text-decoration: underline; -} -.tsd-sources ul, -.tsd-sources p { - margin: 0 !important; -} -.tsd-sources ul { - list-style: none; - padding: 0; -} - -.tsd-page-toolbar { - position: fixed; - z-index: 1; - top: 0; - left: 0; - width: 100%; - height: 40px; - color: var(--color-toolbar-text); - background: var(--color-toolbar); - border-bottom: 1px solid var(--color-panel-divider); - transition: transform 0.3s linear; -} -.tsd-page-toolbar a { - color: var(--color-toolbar-text); - text-decoration: none; -} -.tsd-page-toolbar a.title { - font-weight: bold; -} -.tsd-page-toolbar a.title:hover { - text-decoration: underline; -} -.tsd-page-toolbar .table-wrap { - display: table; - width: 100%; - height: 40px; -} -.tsd-page-toolbar .table-cell { - display: table-cell; - position: relative; - white-space: nowrap; - line-height: 40px; -} -.tsd-page-toolbar .table-cell:first-child { - width: 100%; -} - -.tsd-page-toolbar--hide { - transform: translateY(-100%); -} - -.tsd-select .tsd-select-list li:before, -.tsd-select .tsd-select-label:before, -.tsd-widget:before { - content: ""; - display: inline-block; - width: 40px; - height: 40px; - margin: 0 -8px 0 0; - background-image: url(./widgets.png); - background-repeat: no-repeat; - text-indent: -1024px; - vertical-align: bottom; - filter: var(--icon-filter); -} -@media (-webkit-min-device-pixel-ratio: 1.5), (min-resolution: 144dpi) { - .tsd-select .tsd-select-list li:before, - .tsd-select .tsd-select-label:before, - .tsd-widget:before { - background-image: url(./widgets@2x.png); - background-size: 320px 40px; - } -} - -.tsd-widget { - display: inline-block; - overflow: hidden; - opacity: 0.8; - height: 40px; - transition: opacity 0.1s, background-color 0.2s; - vertical-align: bottom; - cursor: pointer; -} -.tsd-widget:hover { - opacity: 0.9; -} -.tsd-widget.active { - opacity: 1; - background-color: var(--color-panel-divider); -} -.tsd-widget.no-caption { - width: 40px; -} -.tsd-widget.no-caption:before { - margin: 0; -} -.tsd-widget.search:before { - background-position: 0 0; -} -.tsd-widget.menu:before { - background-position: -40px 0; -} -.tsd-widget.options:before { - background-position: -80px 0; -} -.tsd-widget.options, -.tsd-widget.menu { - display: none; -} -@media (max-width: 900px) { - .tsd-widget.options, - .tsd-widget.menu { - display: inline-block; - } -} -input[type="checkbox"] + .tsd-widget:before { - background-position: -120px 0; -} -input[type="checkbox"]:checked + .tsd-widget:before { - background-position: -160px 0; -} - -.tsd-select { - position: relative; - display: inline-block; - height: 40px; - transition: opacity 0.1s, background-color 0.2s; - vertical-align: bottom; - cursor: pointer; -} -.tsd-select .tsd-select-label { - opacity: 0.6; - transition: opacity 0.2s; -} -.tsd-select .tsd-select-label:before { - background-position: -240px 0; -} -.tsd-select.active .tsd-select-label { - opacity: 0.8; -} -.tsd-select.active .tsd-select-list { - visibility: visible; - opacity: 1; - transition-delay: 0s; -} -.tsd-select .tsd-select-list { - position: absolute; - visibility: hidden; - top: 40px; - left: 0; - margin: 0; - padding: 0; - opacity: 0; - list-style: none; - box-shadow: 0 0 4px rgba(0, 0, 0, 0.25); - transition: visibility 0s 0.2s, opacity 0.2s; -} -.tsd-select .tsd-select-list li { - padding: 0 20px 0 0; - background-color: var(--color-background); -} -.tsd-select .tsd-select-list li:before { - background-position: 40px 0; -} -.tsd-select .tsd-select-list li:nth-child(even) { - background-color: var(--color-panel); -} -.tsd-select .tsd-select-list li:hover { - background-color: var(--color-panel-divider); -} -.tsd-select .tsd-select-list li.selected:before { - background-position: -200px 0; -} -@media (max-width: 900px) { - .tsd-select .tsd-select-list { - top: 0; - left: auto; - right: 100%; - margin-right: -5px; - } - .tsd-select .tsd-select-label:before { - background-position: -280px 0; - } -} - -img { - max-width: 100%; -} - -.tsd-anchor-icon { - margin-left: 10px; - vertical-align: middle; - color: var(--color-text); -} - -.tsd-anchor-icon svg { - width: 1em; - height: 1em; - visibility: hidden; -} - -.tsd-anchor-link:hover > .tsd-anchor-icon svg { - visibility: visible; -} diff --git a/docs/assets/widgets.png b/docs/assets/widgets.png deleted file mode 100644 index c7380532ac1b45400620011c37c4dcb7aec27a4c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 480 zcmeAS@N?(olHy`uVBq!ia0y~yU~~YoH8@y+q^jrZML>b&o-U3d6^w6h1+IPUz|;DW zIZ;96kdsD>Qv^q=09&hp0GpEni<1IR%gvP3v%OR9*{MuRTKWHZyIbuBt)Ci`cU_&% z1T+i^Y)o{%281-<3TpPAUTzw5v;RY=>1rvxmPl96#kYc9hX!6V^nB|ad#(S+)}?8C zr_H+lT3B#So$T=?$(w3-{rbQ4R<@nsf$}$hwSO)A$8&`(j+wQf=Jwhb0`CvhR5DCf z^OgI)KQemrUFPH+UynC$Y~QHG%DbTVh-Skz{enNU)cV_hPu~{TD7TPZl>0&K>iuE| z7AYn$7)Jrb9GE&SfQW4q&G*@N|4cHI`VakFa5-C!ov&XD)J(qp$rJJ*9e z-sHv}#g*T7Cv048d1v~BEAzM5FztAse#q78WWC^BUCzQ U&wLp6h6BX&boFyt=akR{0G%$)mH+?% diff --git a/docs/assets/widgets@2x.png b/docs/assets/widgets@2x.png deleted file mode 100644 index 4bbbd57272f3b28f47527d4951ad10f950b8ad43..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 855 zcmeAS@N?(olHy`uVBq!ia0y~yU}^xe12~w0Jcmn z@(X6T|9^jgLcx21{)7exgY)a>N6m2F0<`Rqr;B4q1>>88jUdw-7W`c)zLE*mq8W2H z-<&Jl_Hco5BuC5n@AbF5GD82~-e8-v=#zCyUX0F-o}8pPfAv`!GN$ff+TL<~@kgt} z62eO?_|&+>xBmM$@p|z`tIKEdpPf8%qI>4r7@jn<=eta*{3~?g(zz{Ke9zc-G^gr? z-7foa?LcS!hmbwzru}ICvbWLlW8;+l-}!^=c32!^nV`+`C*;0-*Y%l94pC;Cb3GXz zzSf%a!{gVr{Y_lVuUj+a)*Ca+!-Hu%xmP&&X-2CuANY8^i{D7Kg6qzP zXz_ps9+lN8ESH{K4`yu&b~I>N9xGlE&;2u*b?+Go!AhN?m-bxlLvtC#MzDF2kFzfHJ1W7ybqdefSqVhbOykd*Yi%EDuhs z4wF{ft^bv2+DDnKb8gj1FuvcV`M}luS>lO<^)8x>y1#R;a=-ZKwWTQQb)ioBbi;zh zD!f5V)8581to1LL7c9!l^PSC$NBPYif!_vAZhmL4)v4U)4UsrLYiH_9rmQDd?)(e5 z^pcH>qvBg*i0dus2r*mp4;zKvu=P#s-ti;2obl`NjjwoYd>e(oo#j_uyRb<7Pv^If zzZ|mGHmV)8^tbO%^>eqMw(@7(&3g{jEp-Najo7V75xI_ZHK*FA`elF{r5}E*d7+j_R diff --git a/docs/classes/FluencePeer.html b/docs/classes/FluencePeer.html deleted file mode 100644 index b4d12c18..00000000 --- a/docs/classes/FluencePeer.html +++ /dev/null @@ -1,35 +0,0 @@ -FluencePeer | @fluencelabs/fluence
Options
All
  • Public
  • Public/Protected
  • All
Menu
-

This class implements the Fluence protocol for javascript-based environments. -It provides all the necessary features to communicate with Fluence network

-

Hierarchy

  • FluencePeer

Index

Constructors

Methods

  • getServices(): { sig: Sig }
  • registerMarineService(wasm: SharedArrayBuffer | Buffer, serviceId: string): Promise<void>
  • -

    Registers marine service within the Fluence peer from wasm file. -Following helper functions can be used to load wasm files:

    -
      -
    • loadWasmFromFileSystem
    • -
    • loadWasmFromNpmPackage
    • -
    • loadWasmFromServer
    • -
    -

    Parameters

    • wasm: SharedArrayBuffer | Buffer
      -

      buffer with the wasm file for service

      -
    • serviceId: string
      -

      the service id by which the service can be accessed in aqua

      -

    Returns Promise<void>

  • removeMarineService(serviceId: string): void
  • -

    Removes the specified marine service from the Fluence peer

    -

    Parameters

    • serviceId: string
      -

      the service id to remove

      -

    Returns void

  • -

    Initializes the peer: starts the Aqua VM, initializes the default call service handlers -and (optionally) connect to the Fluence network

    -

    Parameters

    • config: PeerConfig = {}
      -

      object specifying peer configuration

      -

    Returns Promise<void>

  • stop(): Promise<void>
  • -

    Un-initializes the peer: stops all the underlying workflows, stops the Aqua VM -and disconnects from the Fluence network

    -

    Returns Promise<void>

  • -

    Checks whether the object is instance of FluencePeer class

    -

    Parameters

    • obj: unknown
      -

      object to check if it is FluencePeer

      -

    Returns obj is FluencePeer

    true if the object is FluencePeer false otherwise

    -

Legend

  • Constructor
  • Property
  • Method
  • Property
  • Static method

Settings

Theme

Generated using TypeDoc

\ No newline at end of file diff --git a/docs/classes/KeyPair.html b/docs/classes/KeyPair.html deleted file mode 100644 index c1f7070f..00000000 --- a/docs/classes/KeyPair.html +++ /dev/null @@ -1,14 +0,0 @@ -KeyPair | @fluencelabs/fluence
Options
All
  • Public
  • Public/Protected
  • All
Menu

Hierarchy

  • KeyPair

Index

Constructors

  • new KeyPair(libp2pPeerId: PeerId): KeyPair

Properties

Libp2pPeerId: PeerId
-

Key pair in libp2p format. Used for backward compatibility with the current FluencePeer implementation

-

Methods

  • signBytes(data: Uint8Array): Promise<Uint8Array>
  • toB58String(): string
  • toEd25519PrivateKey(): Uint8Array
  • verify(data: Uint8Array, signature: Uint8Array): Promise<boolean>
  • fromEd25519SK(arr: Uint8Array): Promise<KeyPair>
  • -

    Generates new KeyPair from ed25519 private key represented as a 32 byte array

    -

    Parameters

    • arr: Uint8Array

    Returns Promise<KeyPair>

      -
    • Promise with the created KeyPair
    • -
    -

Legend

  • Constructor
  • Property
  • Method
  • Property
  • Static method

Settings

Theme

Generated using TypeDoc

\ No newline at end of file diff --git a/docs/index.html b/docs/index.html deleted file mode 100644 index f585759a..00000000 --- a/docs/index.html +++ /dev/null @@ -1,16 +0,0 @@ -@fluencelabs/fluence
Options
All
  • Public
  • Public/Protected
  • All
Menu

@fluencelabs/fluence

- -

Fluence JS

-
-

To start developing applications with Fluence JS refer to the official documentation

-

Fluence JS is an implementation of the Fluence protocol for JavaScript-based environments. It can connect browsers, Node.js applications, and so on to the Fluence p2p network.

-

Similar to the Rust Fluence Peer implementation it includes:

- -

Fluence JS can call services and functions on the Fluence network, and expose new APIs to the p2p network directly from TypeScript and JavaScript. -Aqua language uses Fluence JS as a compilation target, and they are designed to work in tandem.

-

Fluence JS can be used with any framework of your choice (or even without frameworks).

-

Legend

  • Constructor
  • Property
  • Method
  • Property
  • Static method

Settings

Theme

Generated using TypeDoc

\ No newline at end of file diff --git a/docs/interfaces/CallParams.html b/docs/interfaces/CallParams.html deleted file mode 100644 index d49e51a6..00000000 --- a/docs/interfaces/CallParams.html +++ /dev/null @@ -1,16 +0,0 @@ -CallParams | @fluencelabs/fluence
Options
All
  • Public
  • Public/Protected
  • All
Menu

Interface CallParams<ArgName>

-

Additional information about a service call

-

Type parameters

  • ArgName: string | null

    -

Hierarchy

  • CallParams

Index

Properties

initPeerId: string
-

The peer id which created the particle

-
particleId: string
-

The identifier of particle which triggered the call

-
signature?: string
-

Particle's signature

-
tetraplets: ArgName extends string ? Record<ArgName, SecurityTetraplet[]> : Record<string, never>
-

Security tetraplets

-
timestamp: number
-

Particle's timestamp when it was created

-
ttl: number
-

Time to live in milliseconds. The time after the particle should be expired

-

Legend

  • Constructor
  • Property
  • Method
  • Property
  • Static method

Settings

Theme

Generated using TypeDoc

\ No newline at end of file diff --git a/docs/interfaces/PeerConfig.html b/docs/interfaces/PeerConfig.html deleted file mode 100644 index 21f1312f..00000000 --- a/docs/interfaces/PeerConfig.html +++ /dev/null @@ -1,52 +0,0 @@ -PeerConfig | @fluencelabs/fluence
Options
All
  • Public
  • Public/Protected
  • All
Menu

Interface PeerConfig

-

Configuration used when initiating Fluence Peer

-

Hierarchy

  • PeerConfig

Index

Properties

KeyPair?: KeyPair
-

Specify the KeyPair to be used to identify the Fluence Peer. -Will be generated randomly if not specified

-
avmLogLevel?: LogLevel
deprecated.

AVM run through marine-js infrastructure.

-
see

debug.marineLogLevel option to configure logging level of AVM

-
avmRunner?: AvmRunner
deprecated.

AVM run through marine-js infrastructure.

-
see

marineJS option to configure AVM

-
checkConnectionTimeoutMs?: number
-

When the peer established the connection to the network it sends a ping-like message to check if it works correctly. -The options allows to specify the timeout for that message in milliseconds. -If not specified the default timeout will be used

-
connectTo?: ConnectionOption
-

Node in Fluence network to connect to. -Can be in the form of:

-
    -
  • string: multiaddr in string format
  • -
  • Multiaddr: multiaddr object, @see https://github.com/multiformats/js-multiaddr
  • -
  • Node: node structure, @see Node
  • -
  • Implementation of FluenceConnection class, @see FluenceConnection -If not specified the will work locally and would not be able to send or receive particles.
  • -
-
debug?: { marineLogLevel?: LogLevel; printParticleId?: boolean }
-

Enables\disabled various debugging features

-

Type declaration

  • Optional marineLogLevel?: LogLevel
    -

    Log level for marine services. By default logging is turned off.

    -
  • Optional printParticleId?: boolean
    -

    If set to true, newly initiated particle ids will be printed to console. -Useful to see what particle id is responsible for aqua function

    -
defaultTtlMs?: number
-

Sets the default TTL for all particles originating from the peer with no TTL specified. -If the originating particle's TTL is defined then that value will be used -If the option is not set default TTL will be 7000

-
dialTimeoutMs?: number
-

The dialing timeout in milliseconds

-
marineJS?: { avmWasmPath: string; marineWasmPath: string; workerScriptPath: string }
-

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.

-

Type declaration

  • avmWasmPath: string
    -

    Configures the path to AVM wasm module

    -
  • marineWasmPath: string
    -

    Configures the path to marine-js control wasm module

    -
  • workerScriptPath: string
    -

    Configures path to the marine-js worker script.

    -
skipCheckConnection?: boolean
-

When the peer established the connection to the network it sends a ping-like message to check if it works correctly. -If set to true, the ping-like message will be skipped -Default: false

-

Legend

  • Constructor
  • Property
  • Method
  • Property
  • Static method

Settings

Theme

Generated using TypeDoc

\ No newline at end of file diff --git a/docs/modules.html b/docs/modules.html deleted file mode 100644 index 1eeec127..00000000 --- a/docs/modules.html +++ /dev/null @@ -1,69 +0,0 @@ -@fluencelabs/fluence
Options
All
  • Public
  • Public/Protected
  • All
Menu

@fluencelabs/fluence

Index

Type aliases

AvmLoglevel: LogLevel
-

Enum representing the log level used in Aqua VM. -Possible values: 'info', 'trace', 'debug', 'info', 'warn', 'error', 'off';

-
PeerIdB58: string
-

Peer ID's id as a base58 string (multihash/CIDv0).

-
PeerStatus: { isConnected: false; isInitialized: false; peerId: null; relayPeerId: null } | { isConnected: false; isInitialized: true; peerId: PeerIdB58; relayPeerId: null } | { isConnected: true; isInitialized: true; peerId: PeerIdB58; relayPeerId: PeerIdB58 } | { isConnected: true; isDirect: true; isInitialized: true; peerId: PeerIdB58; relayPeerId: null }
-

Information about Fluence Peer connection. -Represented as object with the following keys:

-
    -
  • isInitialized: Is the peer initialized or not.
  • -
  • peerId: Peer Id of the peer. Null if the peer is not initialized
  • -
  • isConnected: Is the peer connected to network or not
  • -
  • relayPeerId: Peer Id of the relay the peer is connected to. If the connection is direct relayPeerId is null
  • -
  • isDirect: True if the peer is connected to the network directly (not through relay)
  • -
-

Variables

Fluence: { getPeer: () => FluencePeer; getStatus: () => PeerStatus; registerMarineService: (wasm: SharedArrayBuffer | Buffer, serviceId: string) => Promise<void>; removeMarineService: (serviceId: string) => void; start: (config?: PeerConfig) => Promise<void>; stop: () => Promise<void> } = ...
-

Public interface to Fluence JS

-

Type declaration

  • getPeer: () => FluencePeer
  • getStatus: () => PeerStatus
  • registerMarineService: (wasm: SharedArrayBuffer | Buffer, serviceId: string) => Promise<void>
      • (wasm: SharedArrayBuffer | Buffer, serviceId: string): Promise<void>
      • -

        Registers marine service within the default Fluence peer from wasm file. -Following helper functions can be used to load wasm files:

        -
          -
        • loadWasmFromFileSystem
        • -
        • loadWasmFromNpmPackage
        • -
        • loadWasmFromServer
        • -
        -

        Parameters

        • wasm: SharedArrayBuffer | Buffer
          -

          buffer with the wasm file for service

          -
        • serviceId: string
          -

          the service id by which the service can be accessed in aqua

          -

        Returns Promise<void>

  • removeMarineService: (serviceId: string) => void
      • (serviceId: string): void
      • -

        Removes the specified marine service from the default Fluence peer

        -

        Parameters

        • serviceId: string
          -

          the service id to remove

          -

        Returns void

  • start: (config?: PeerConfig) => Promise<void>
      • -

        Initializes the default peer: starts the Aqua VM, initializes the default call service handlers -and (optionally) connect to the Fluence network

        -

        Parameters

        • Optional config: PeerConfig
          -

          object specifying peer configuration

          -

        Returns Promise<void>

  • stop: () => Promise<void>
      • (): Promise<void>
      • -

        Un-initializes the default peer: stops all the underlying workflows, stops the Aqua VM -and disconnects from the Fluence network

        -

        Returns Promise<void>

Functions

  • loadWasmFromFileSystem(filePath: string): Promise<SharedArrayBuffer>
  • -

    Load wasm file from the file system. Only works in nodejs environment. -The functions returns SharedArrayBuffer compatible with FluenceAppService methods.

    -

    Parameters

    • filePath: string
      -

      path to the wasm file

      -

    Returns Promise<SharedArrayBuffer>

    SharedArrayBuffer with the wasm file

    -
  • loadWasmFromNpmPackage(source: { file: string; package: string }): Promise<SharedArrayBuffer>
  • -

    Load wasm file from npm package. Only works in nodejs environment. -The function returns SharedArrayBuffer compatible with FluenceAppService methods.

    -

    Parameters

    • source: { file: string; package: string }
      -

      object specifying the source of the file. Consist two fields: package name and file path.

      -
      • file: string
      • package: string

    Returns Promise<SharedArrayBuffer>

    SharedArrayBuffer with the wasm file

    -
  • loadWasmFromServer(filePath: string): Promise<SharedArrayBuffer | Buffer>
  • -

    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 https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/SharedArrayBuffer#security_requirements -Filename is relative to current origin.

    -

    Parameters

    • filePath: string
      -

      path to the wasm file relative to current origin

      -

    Returns Promise<SharedArrayBuffer | Buffer>

    Either SharedArrayBuffer or Buffer with the wasm file

    -
  • setLogLevel(level: LogLevelDesc): void

Legend

  • Constructor
  • Property
  • Method
  • Property
  • Static method

Settings

Theme

Generated using TypeDoc

\ No newline at end of file diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 00000000..9a1505ba --- /dev/null +++ b/package-lock.json @@ -0,0 +1,6 @@ +{ + "name": "fluence-js", + "lockfileVersion": 2, + "requires": true, + "packages": {} +} diff --git a/packages/@tests/marine/node/.gitignore b/packages/@tests/marine/node/.gitignore new file mode 100644 index 00000000..1436c502 --- /dev/null +++ b/packages/@tests/marine/node/.gitignore @@ -0,0 +1,19 @@ +# Logs +logs +*.log +npm-debug.log* +yarn-debug.log* +yarn-error.log* +lerna-debug.log* + +# Compiled binary addons (https://nodejs.org/api/addons.html) +build/Release +bundle/ +/dist/ +/worker/dist/ + +# Dependency directories +node_modules/ +jspm_packages/ + +.idea diff --git a/packages/@tests/marine/node/.prettierrc.js b/packages/@tests/marine/node/.prettierrc.js new file mode 100644 index 00000000..36f36b84 --- /dev/null +++ b/packages/@tests/marine/node/.prettierrc.js @@ -0,0 +1,8 @@ +module.exports = { + semi: true, + trailingComma: 'all', + singleQuote: true, + printWidth: 120, + tabWidth: 4, + useTabs: false, +}; diff --git a/packages/@tests/marine/node/jest.config.js b/packages/@tests/marine/node/jest.config.js new file mode 100644 index 00000000..64e531b4 --- /dev/null +++ b/packages/@tests/marine/node/jest.config.js @@ -0,0 +1,5 @@ +module.exports = { + preset: 'ts-jest', + testEnvironment: 'node', + testPathIgnorePatterns: ['dist'], +}; diff --git a/packages/@tests/marine/node/package.json b/packages/@tests/marine/node/package.json new file mode 100644 index 00000000..b301c9a1 --- /dev/null +++ b/packages/@tests/marine/node/package.json @@ -0,0 +1,19 @@ +{ + "name": "@test/marine_node", + "scripts": { + "build": "tsc", + "test": "jest" + }, + "devDependencies": { + "@types/node": "16.11.59", + "typescript": "^4.0.0", + "@types/jest": "28.1.0", + "jest": "28.1.0", + "ts-jest": "28.0.2" + }, + "dependencies": { + "@fluencelabs/avm": "0.32.1", + "@fluencelabs/marine.background-runner": "workspace:0.1.0", + "@fluencelabs/marine.deps-loader.node": "workspace:0.1.0" + } +} diff --git a/packages/@tests/marine/node/src/test.spec.ts b/packages/@tests/marine/node/src/test.spec.ts new file mode 100644 index 00000000..f8018a43 --- /dev/null +++ b/packages/@tests/marine/node/src/test.spec.ts @@ -0,0 +1,54 @@ +import { MarineBackgroundRunner } from '@fluencelabs/marine.background-runner'; +import { InlinedWorkerLoader, WasmNpmLoader } from '@fluencelabs/marine.deps-loader.node'; +import { callAvm, JSONArray, JSONObject } from '@fluencelabs/avm'; + +const vmPeerId = '12D3KooWNzutuy8WHXDKFqFsATvCR6j9cj2FijYbnd47geRKaQZS'; + +describe('Nodejs integration tests', () => { + it('Smoke test', async () => { + let runner: MarineBackgroundRunner | undefined = undefined; + try { + // arrange + const avm = new WasmNpmLoader('@fluencelabs/avm', 'avm.wasm'); + const control = new WasmNpmLoader('@fluencelabs/marine-js', 'marine-js.wasm'); + const worker = new InlinedWorkerLoader(); + runner = new MarineBackgroundRunner(worker, control, () => {}); + + await avm.start(); + + await runner.start(); + await runner.createService(avm.getValue(), 'avm'); + + const s = `(seq + (par + (call "${vmPeerId}" ("local_service_id" "local_fn_name") [] result_1) + (call "remote_peer_id" ("service_id" "fn_name") [] g) + ) + (call "${vmPeerId}" ("local_service_id" "local_fn_name") [] result_2) + )`; + + // act + const res = await callAvm( + (args: JSONArray | JSONObject) => runner!.callService('avm', 'invoke', args, undefined), + { + currentPeerId: vmPeerId, + initPeerId: vmPeerId, + timestamp: Date.now(), + ttl: 10000, + }, + s, + Buffer.from(''), + Buffer.from(''), + [], + ); + + // assert + expect(res).toMatchObject({ + retCode: 0, + errorMessage: '', + }); + } finally { + runner?.stop(); + } + }); +}); diff --git a/packages/@tests/marine/node/tsconfig.json b/packages/@tests/marine/node/tsconfig.json new file mode 100644 index 00000000..23385c4b --- /dev/null +++ b/packages/@tests/marine/node/tsconfig.json @@ -0,0 +1,17 @@ +{ + "compilerOptions": { + "lib": ["es2015", "dom"], + "outDir": "./dist/", + "target": "es5", + "module": "commonjs", + "strict": true, + "esModuleInterop": true, + "skipLibCheck": true, + "forceConsistentCasingInFileNames": true, + "declaration": true, + "declarationMap": false, + "sourceMap": true + }, + "exclude": ["node_modules", "dist"], + "include": ["src"] +} diff --git a/packages/@tests/marine/web/.gitignore b/packages/@tests/marine/web/.gitignore new file mode 100644 index 00000000..8aadd61a --- /dev/null +++ b/packages/@tests/marine/web/.gitignore @@ -0,0 +1,22 @@ +# Logs +logs +*.log +npm-debug.log* +yarn-debug.log* +yarn-error.log* +lerna-debug.log* + +build/ +public/*.* + +# Compiled binary addons (https://nodejs.org/api/addons.html) +build/Release +bundle/ +/dist/ +/worker/dist/ + +# Dependency directories +node_modules/ +jspm_packages/ + +.idea diff --git a/packages/@tests/marine/web/.prettierrc.js b/packages/@tests/marine/web/.prettierrc.js new file mode 100644 index 00000000..36f36b84 --- /dev/null +++ b/packages/@tests/marine/web/.prettierrc.js @@ -0,0 +1,8 @@ +module.exports = { + semi: true, + trailingComma: 'all', + singleQuote: true, + printWidth: 120, + tabWidth: 4, + useTabs: false, +}; diff --git a/packages/@tests/marine/web/index.html b/packages/@tests/marine/web/index.html new file mode 100644 index 00000000..e3df3163 --- /dev/null +++ b/packages/@tests/marine/web/index.html @@ -0,0 +1,12 @@ + + + + + Webpack App + + +

Hello world!

+

Tip: Check your console

+ + + diff --git a/packages/@tests/marine/web/jest.config.js b/packages/@tests/marine/web/jest.config.js new file mode 100644 index 00000000..22cf0c09 --- /dev/null +++ b/packages/@tests/marine/web/jest.config.js @@ -0,0 +1,9 @@ +module.exports = { + preset: 'jest-puppeteer', + testMatch: ['**/?(*.)+(spec|test).[t]s'], + testPathIgnorePatterns: ['/node_modules/', 'dist'], + testMatch: ['**/test/*.spec.ts'], + transform: { + '^.+\\.ts?$': 'ts-jest', + }, +}; diff --git a/packages/@tests/marine/web/package.json.skip b/packages/@tests/marine/web/package.json.skip new file mode 100644 index 00000000..873234d6 --- /dev/null +++ b/packages/@tests/marine/web/package.json.skip @@ -0,0 +1,39 @@ +{ + "name": "@test/marine_web", + "version": "0.1.0", + "scripts": { + "start": "webpack serve", + "test": "jest", + "build": "webpack --mode=production --node-env=production", + "build:dev": "webpack --mode=development", + "build:prod": "webpack --mode=production --node-env=production", + "watch": "webpack --watch", + "serve": "webpack serve" + }, + "devDependencies": { + "@webpack-cli/generators": "^2.4.1", + "css-loader": "^6.5.1", + "html-webpack-plugin": "^5.5.0", + "install-local": "^3.0.1", + "style-loader": "^3.3.1", + "ts-loader": "^8.3.0", + "typescript": "^4.5.4", + "util": "^0.12.4", + "webpack": "^5.65.0", + "webpack-cli": "^4.9.1", + "webpack-dev-server": "^4.6.0", + "@types/jest": "^27.0.3", + "@types/jest-environment-puppeteer": "^4.4.1", + "@types/puppeteer": "^5.4.4", + "jest": "28.1.0", + "jest-puppeteer": "^6.0.2", + "ts-jest": "28.0.2" + }, + "dependencies": { + "@fluencelabs/marine.deps-loader.web": "workspace:*", + "@fluencelabs/marine.background-runner": "workspace:*", + "@fluencelabs/avm": "0.34.4", + "js-base64": "^3.7.2", + "buffer": "6.0.3" + } +} diff --git a/packages/@tests/marine/web/src/index.ts b/packages/@tests/marine/web/src/index.ts new file mode 100644 index 00000000..1a54defd --- /dev/null +++ b/packages/@tests/marine/web/src/index.ts @@ -0,0 +1,56 @@ +import { Buffer } from 'buffer'; + +// @ts-ignore +window.Buffer = Buffer; + +import { MarineBackgroundRunner } from '@fluencelabs/marine.background-runner'; +import { InlinedWorkerLoader, WasmWebLoader } from '@fluencelabs/marine.deps-loader.web'; +import { callAvm, JSONArray, JSONObject } from '@fluencelabs/avm'; +import { toUint8Array } from 'js-base64'; + +const vmPeerId = '12D3KooWNzutuy8WHXDKFqFsATvCR6j9cj2FijYbnd47geRKaQZS'; + +const b = (s: string) => { + return toUint8Array(s); +}; + +const main = async () => { + const avm = new WasmWebLoader('avm.wasm'); + const control = new WasmWebLoader('marine-js.wasm'); + const worker = new InlinedWorkerLoader(); + const runner = new MarineBackgroundRunner(worker, control, () => {}); + + await runner.start(); + await avm.start(); + const avmVal = await avm.getValue(); + await runner.createService(avmVal, 'avm'); + + const s = `(seq + (par + (call "${vmPeerId}" ("local_service_id" "local_fn_name") [] result_1) + (call "remote_peer_id" ("service_id" "fn_name") [] g) + ) + (call "${vmPeerId}" ("local_service_id" "local_fn_name") [] result_2) + )`; + + // act + const res = await callAvm( + (args: JSONArray | JSONObject) => runner.callService('avm', 'invoke', args, undefined), + { + currentPeerId: vmPeerId, + initPeerId: vmPeerId, + timestamp: Date.now(), + ttl: 10000, + }, + s, + b(''), + b(''), + [], + ); + await runner.stop(); + + return res; +}; + +// @ts-ignore +window.MAIN = main; diff --git a/packages/@tests/marine/web/test/test.spec.ts b/packages/@tests/marine/web/test/test.spec.ts new file mode 100644 index 00000000..23bc281e --- /dev/null +++ b/packages/@tests/marine/web/test/test.spec.ts @@ -0,0 +1,115 @@ +import Webpack from 'webpack'; +import WebpackDevServer from 'webpack-dev-server'; +import webpackConfig from '../webpack.config.js'; +import process from 'process'; +import path from 'path'; +import fs from 'fs'; + +// change directory to the location to the test-project. +// run all the subsequent Webpack scripts in that directory +process.chdir(path.join(__dirname, '..')); + +let server; +const port = 8080; + +jest.setTimeout(10000); + +const startServer = async (modifyConfig?) => { + const loadInBrowserToDebug = false; + // const loadInBrowserToDebug = true; // use this line to debug + + modifyConfig = modifyConfig || ((_) => {}); + + const config: any = webpackConfig(); + modifyConfig(config); + config.devServer.open = loadInBrowserToDebug; + server = await makeServer(config); +}; + +// https://stackoverflow.com/questions/42940550/wait-until-webpack-dev-server-is-ready +function makeServer(config) { + return new Promise((resolve, reject) => { + const compiler = Webpack(config); + + let compiled = false; + let listening = false; + + compiler.hooks.done.tap('tap_name', () => { + // console.log('compiled'); + + if (listening) resolve(server); + else compiled = true; + }); + + const server = new WebpackDevServer(compiler, config.devServer); + + server.listen(port, '0.0.0.0', (err) => { + if (err) return reject(err); + + // console.log('listening'); + + if (compiled) { + resolve(server); + } else { + listening = true; + } + }); + }); +} + +const stopServer = async () => { + console.log('test: stopping server'); + await server.stop(); +}; + +const publicDir = 'public'; + +const copyFile = async (packageName: string, fileName: string) => { + const modulePath = require.resolve(packageName); + const source = path.join(path.dirname(modulePath), fileName); + const dest = path.join(publicDir, fileName); + + return fs.promises.copyFile(source, dest); +}; + +const copyPublicDeps = async () => { + await fs.promises.mkdir(publicDir, { recursive: true }); + return Promise.all([ + copyFile('@fluencelabs/marine-js', 'marine-js.wasm'), + copyFile('@fluencelabs/avm', 'avm.wasm'), + ]); +}; + +const cleanPublicDeps = () => { + return fs.promises.rm(publicDir, { recursive: true, force: true }); +}; + +describe('Browser integration tests', () => { + beforeEach(async () => { + await copyPublicDeps(); + }); + + afterEach(async () => { + await stopServer(); + await cleanPublicDeps(); + }); + + it('Some test', async () => { + console.log('test: starting server...'); + await startServer(); + console.log('test: navigating to page...'); + await page.goto('http://localhost:8080/'); + + console.log('test: running script in browser...'); + const res = await page.evaluate(() => { + // @ts-ignore + return window.MAIN(); + }); + + console.log('test: checking expectations...'); + await expect(res).toMatchObject({ + retCode: 0, + errorMessage: '', + }); + }); +}); diff --git a/packages/@tests/marine/web/tsconfig.json b/packages/@tests/marine/web/tsconfig.json new file mode 100644 index 00000000..9315f3cb --- /dev/null +++ b/packages/@tests/marine/web/tsconfig.json @@ -0,0 +1,23 @@ +{ + "compilerOptions": { + "outDir": "./dist/", + "allowJs": true, + "baseUrl": ".", + "sourceMap": false, + "inlineSources": false, + "pretty": true, + "target": "esnext", + "module": "esnext", + "moduleResolution": "node", + "declaration": false, + "esModuleInterop": true, + "declarationMap": false, + "strict": true, + "noImplicitAny": false, + "alwaysStrict": true, + "noImplicitThis": true, + "strictNullChecks": false + }, + "exclude": ["node_modules", "dist"], + "include": ["src", "test"] +} diff --git a/packages/@tests/marine/web/webpack.config.js b/packages/@tests/marine/web/webpack.config.js new file mode 100644 index 00000000..c294c0f9 --- /dev/null +++ b/packages/@tests/marine/web/webpack.config.js @@ -0,0 +1,65 @@ +// Generated using webpack-cli https://github.com/webpack/webpack-cli + +const path = require('path'); +const HtmlWebpackPlugin = require('html-webpack-plugin'); + +const isProduction = process.env.NODE_ENV == 'production'; + +const stylesHandler = 'style-loader'; + +const config = { + entry: './src/index.ts', + output: { + path: path.resolve(__dirname, 'dist'), + }, + devServer: { + open: true, + host: 'localhost', + static: { + directory: path.join(__dirname, 'public'), + }, + }, + plugins: [ + new HtmlWebpackPlugin({ + template: 'index.html', + }), + + // Add your plugins here + // Learn more about plugins from https://webpack.js.org/configuration/plugins/ + ], + module: { + rules: [ + { + test: /\.(ts|tsx)$/i, + loader: 'ts-loader', + exclude: ['/node_modules/'], + }, + { + test: /\.css$/i, + use: [stylesHandler, 'css-loader'], + }, + { + test: /\.(eot|svg|ttf|woff|woff2|png|jpg|gif)$/i, + type: 'asset', + }, + + // Add your rules for custom modules here + // Learn more about loaders from https://webpack.js.org/loaders/ + ], + }, + resolve: { + extensions: ['.tsx', '.ts', '.js'], + fallback: { + buffer: require.resolve('buffer/'), + }, + }, +}; + +module.exports = () => { + if (isProduction) { + config.mode = 'production'; + } else { + config.mode = 'development'; + } + return config; +}; diff --git a/packages/@tests/react_test/package.json.skip b/packages/@tests/react_test/package.json.skip index e34ae2e3..4fa20ce1 100644 --- a/packages/@tests/react_test/package.json.skip +++ b/packages/@tests/react_test/package.json.skip @@ -3,13 +3,13 @@ "version": "0.1.0", "private": true, "dependencies": { - "@fluencelabs/fluence": "workspace:*", + "@fluencelabs/js-client.web": "workspace:*", "@fluencelabs/fluence-network-environment": "^1.0.13", "@testing-library/jest-dom": "^5.16.5", "@testing-library/react": "^13.4.0", "@testing-library/user-event": "^13.5.0", "@types/jest": "^27.5.2", - "@types/node": "^16.11.56", + "@types/node": "16.11.59", "@types/react": "^18.0.18", "@types/react-dom": "^18.0.6", "react": "^18.2.0", @@ -21,7 +21,7 @@ "scripts": { "start": "react-scripts start", "build": "react-scripts build", - "test": "react-scripts test", + "_test": "react-scripts test", "eject": "react-scripts eject" }, "eslintConfig": { diff --git a/packages/@tests/react_test/src/App.tsx b/packages/@tests/react_test/src/App.tsx index 8c3c34ab..31d83595 100644 --- a/packages/@tests/react_test/src/App.tsx +++ b/packages/@tests/react_test/src/App.tsx @@ -2,16 +2,18 @@ import React, { useEffect, useState } from "react"; import logo from "./logo.svg"; import "./App.css"; -import { Fluence } from "@fluencelabs/fluence"; +import { makeDefaultPeer } from "@fluencelabs/js-client.web"; import { krasnodar } from "@fluencelabs/fluence-network-environment"; const relayNode = krasnodar[4]; +const peer = makeDefaultPeer(); + function App() { const [connected, setConnected] = useState(false); useEffect(() => { - Fluence.start({ connectTo: relayNode }) + peer.start({ connectTo: relayNode }) .then(() => { setConnected(true); }) diff --git a/packages/@tests/smoke/package.json b/packages/@tests/smoke/package.json index e617efdb..41bae191 100644 --- a/packages/@tests/smoke/package.json +++ b/packages/@tests/smoke/package.json @@ -17,10 +17,11 @@ "license": "Apache-2.0", "dependencies": { "@fluencelabs/fluence": "workspace:*", - "ts-node": "^10.9.1" + "@fluencelabs/js-client.node": "workspace:*", + "ts-node": "10.9.1" }, "devDependencies": { - "@types/node": "^18.7.13", - "typescript": "^4.6.4" + "@types/node": "16.11.59", + "typescript": "4.6.4" } } diff --git a/packages/@tests/smoke/src/index.ts b/packages/@tests/smoke/src/index.ts index 2ea67468..3c53b429 100644 --- a/packages/@tests/smoke/src/index.ts +++ b/packages/@tests/smoke/src/index.ts @@ -1,6 +1,7 @@ -import { FluencePeer } from "@fluencelabs/fluence"; +import "@fluencelabs/js-client.node"; +import { Fluence } from "@fluencelabs/fluence"; -const peer = new FluencePeer(); +const peer = Fluence.getPeer(); const main = async () => { await peer.start({}); diff --git a/packages/fluence-connection/.gitignore b/packages/client/compiler-support/.gitignore similarity index 100% rename from packages/fluence-connection/.gitignore rename to packages/client/compiler-support/.gitignore diff --git a/packages/fluence-js/.prettierignore b/packages/client/compiler-support/.prettierignore similarity index 100% rename from packages/fluence-js/.prettierignore rename to packages/client/compiler-support/.prettierignore diff --git a/packages/fluence-connection/.prettierrc.js b/packages/client/compiler-support/.prettierrc.js similarity index 100% rename from packages/fluence-connection/.prettierrc.js rename to packages/client/compiler-support/.prettierrc.js diff --git a/packages/client/compiler-support/README.md b/packages/client/compiler-support/README.md new file mode 100644 index 00000000..fff2385a --- /dev/null +++ b/packages/client/compiler-support/README.md @@ -0,0 +1,11 @@ +# JS Client compiler support + +This package is a part of FluenceJS, the official implementation of the Fluence Peer in typescript. See the [FluenceJS repo](https://github.com/fluencelabs/fluence-js) for more info + +## Contributing + +While the project is still in the early stages of development, you are welcome to track progress and contribute. As the project is undergoing rapid changes, interested contributors should contact the team before embarking on larger pieces of work. All contributors should consult with and agree to our [basic contributing rules](CONTRIBUTING.md). + +## License + +[Apache 2.0](LICENSE) diff --git a/packages/client/compiler-support/package.json b/packages/client/compiler-support/package.json new file mode 100644 index 00000000..771c7aa1 --- /dev/null +++ b/packages/client/compiler-support/package.json @@ -0,0 +1,28 @@ +{ + "name": "@fluencelabs/compiler-support", + "version": "0.1.0", + "description": "TypeScript implementation of Fluence Peer", + "main": "./dist/index.js", + "typings": "./dist/index.d.ts", + "engines": { + "node": ">=10", + "pnpm": ">=3" + }, + "scripts": { + "build": "tsc" + }, + "repository": "https://github.com/fluencelabs/fluence-js", + "author": "Fluence Labs", + "license": "Apache-2.0", + "dependencies": { + "@fluencelabs/js-peer": "workspace:0.1.0" + }, + "devDependencies": { + "@types/node": "16.11.59", + "@types/jest": "28.1.0", + "jest": "28.1.0", + "ts-jest": "28.0.2", + "ts-node": "10.9.1", + "typescript": "4.6.4" + } +} diff --git a/packages/client/compiler-support/src/util.ts b/packages/client/compiler-support/src/util.ts new file mode 100644 index 00000000..49ae8a4a --- /dev/null +++ b/packages/client/compiler-support/src/util.ts @@ -0,0 +1,6 @@ +import type { FluencePeer } from '@fluencelabs/js-peer/dist/FluencePeer'; + +export const getDefaultPeer = (): FluencePeer => { + // @ts-ignore + return globalThis.defaultPeer; +}; diff --git a/packages/client/compiler-support/src/v3.ts b/packages/client/compiler-support/src/v3.ts new file mode 100644 index 00000000..4e62fd80 --- /dev/null +++ b/packages/client/compiler-support/src/v3.ts @@ -0,0 +1,175 @@ +/* + * 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 { FluencePeer } from '@fluencelabs/js-peer/dist/FluencePeer'; +import { FnConfig, FunctionCallDef, ServiceDef } from '@fluencelabs/js-peer/dist/compilerSupport/interface'; +import { registerServiceImpl } from '@fluencelabs/js-peer/dist/compilerSupport/registerService'; +import { callFunctionImpl, getArgumentTypes } from '@fluencelabs/js-peer/dist/compilerSupport/callFunction'; + +import { getDefaultPeer } from './util'; + +export { FluencePeer } from '@fluencelabs/js-peer/dist/FluencePeer'; +export { CallParams } from '@fluencelabs/js-peer/dist/commonTypes'; +export { + ArrayType, + ArrowType, + ArrowWithCallbacks, + ArrowWithoutCallbacks, + BottomType, + FnConfig, + FunctionCallConstants, + FunctionCallDef, + LabeledProductType, + NilType, + NonArrowType, + OptionType, + ProductType, + ScalarNames, + ScalarType, + ServiceDef, + StructType, + TopType, + UnlabeledProductType, +} from '@fluencelabs/js-peer/dist/compilerSupport/interface'; +export { callFunctionImpl } from '@fluencelabs/js-peer/dist/compilerSupport/callFunction'; +export { registerServiceImpl } from '@fluencelabs/js-peer/dist/compilerSupport/registerService'; + +/** + * Convenience function to support Aqua `func` generation backend + * The compiler only need to generate a call the function and provide the corresponding definitions and the air script + * + * @param rawFnArgs - raw arguments passed by user to the generated function + * @param def - function definition generated by the Aqua compiler + * @param script - air script with function execution logic generated by the Aqua compiler + */ +export const callFunction = (rawFnArgs: Array, def: FunctionCallDef, script: string) => { + const { args, peer, config } = extractFunctionArgs(rawFnArgs, def); + return callFunctionImpl(def, script, config || {}, peer, args); +}; + +/** + * Convenience function to support Aqua `service` generation backend + * The compiler only need to generate a call the function and provide the corresponding definitions and the air script + * + * @param args - raw arguments passed by user to the generated function + * @param def - service definition generated by the Aqua compiler + */ +export function registerService(args: any[], def: ServiceDef) { + const { peer, service, serviceId } = extractServiceArgs(args, def.defaultServiceId); + + return registerServiceImpl(peer, def, serviceId, service); +} + +/** + * Arguments could be passed in one these configurations: + * [...actualArgs] + * [peer, ...actualArgs] + * [...actualArgs, config] + * [peer, ...actualArgs, config] + * + * This function select the appropriate configuration and returns + * arguments in a structured way of: { peer, config, args } + */ +const extractFunctionArgs = ( + args: any[], + def: FunctionCallDef, +): { + peer: FluencePeer; + config?: FnConfig; + args: { [key: string]: any }; +} => { + const argumentTypes = getArgumentTypes(def); + const argumentNames = Object.keys(argumentTypes); + const numberOfExpectedArgs = argumentNames.length; + + let peer: FluencePeer; + let structuredArgs: any[]; + let config: FnConfig; + if (FluencePeer.isInstance(args[0])) { + peer = args[0]; + structuredArgs = args.slice(1, numberOfExpectedArgs + 1); + config = args[numberOfExpectedArgs + 1]; + } else { + peer = getDefaultPeer(); + structuredArgs = args.slice(0, numberOfExpectedArgs); + config = args[numberOfExpectedArgs]; + } + + if (structuredArgs.length !== numberOfExpectedArgs) { + throw new Error(`Incorrect number of arguments. Expecting ${numberOfExpectedArgs}`); + } + + const argsRes = argumentNames.reduce((acc, name, index) => ({ ...acc, [name]: structuredArgs[index] }), {}); + + return { + peer: peer, + config: config, + args: argsRes, + }; +}; + +/** + * Arguments could be passed in one these configurations: + * [serviceObject] + * [peer, serviceObject] + * [defaultId, serviceObject] + * [peer, defaultId, serviceObject] + * + * Where serviceObject is the raw object with function definitions passed by user + * + * This function select the appropriate configuration and returns + * arguments in a structured way of: { peer, serviceId, service } + */ +const extractServiceArgs = ( + args: any[], + defaultServiceId?: string, +): { peer: FluencePeer; serviceId: string; service: any } => { + let peer: FluencePeer; + let serviceId: any; + let service: any; + if (FluencePeer.isInstance(args[0])) { + peer = args[0]; + } else { + peer = getDefaultPeer(); + } + + if (typeof args[0] === 'string') { + serviceId = args[0]; + } else if (typeof args[1] === 'string') { + serviceId = args[1]; + } else { + serviceId = defaultServiceId; + } + + // Figuring out which overload is the service. + // If the first argument is not Fluence Peer and it is an object, then it can only be the service def + // If the first argument is peer, we are checking further. The second argument might either be + // an object, that it must be the service object + // or a string, which is the service id. In that case the service is the third argument + if (!FluencePeer.isInstance(args[0]) && typeof args[0] === 'object') { + service = args[0]; + } else if (typeof args[1] === 'object') { + service = args[1]; + } else { + service = args[2]; + } + + return { + peer: peer, + serviceId: serviceId, + service: service, + }; +}; diff --git a/packages/fluence-js/src/internal/compilerSupport/v4.ts b/packages/client/compiler-support/src/v4.ts similarity index 88% rename from packages/fluence-js/src/internal/compilerSupport/v4.ts rename to packages/client/compiler-support/src/v4.ts index 6d747bf9..76d50065 100644 --- a/packages/fluence-js/src/internal/compilerSupport/v4.ts +++ b/packages/client/compiler-support/src/v4.ts @@ -14,8 +14,8 @@ * limitations under the License. */ -export { FluencePeer } from '../FluencePeer'; -export { CallParams as CallParams$$ } from '../commonTypes'; +export { FluencePeer } from './v3'; +export { CallParams as CallParams$$ } from './v3'; export { ArrayType as ArrayType$$, ArrowType as ArrowType$$, @@ -38,4 +38,6 @@ export { UnlabeledProductType as UnlabeledProductType$$, callFunction as callFunction$$, registerService as registerService$$, + registerServiceImpl as registerServiceImpl$$, + callFunctionImpl as callFunctionImpl$$, } from './v3'; diff --git a/packages/fluence-js/tsconfig.json b/packages/client/compiler-support/tsconfig.json similarity index 100% rename from packages/fluence-js/tsconfig.json rename to packages/client/compiler-support/tsconfig.json diff --git a/packages/fluence-interfaces/.gitignore b/packages/client/fluence-js/.gitignore similarity index 100% rename from packages/fluence-interfaces/.gitignore rename to packages/client/fluence-js/.gitignore diff --git a/packages/client/fluence-js/.prettierignore b/packages/client/fluence-js/.prettierignore new file mode 100644 index 00000000..178135c2 --- /dev/null +++ b/packages/client/fluence-js/.prettierignore @@ -0,0 +1 @@ +/dist/ diff --git a/packages/fluence-interfaces/.prettierrc.js b/packages/client/fluence-js/.prettierrc.js similarity index 100% rename from packages/fluence-interfaces/.prettierrc.js rename to packages/client/fluence-js/.prettierrc.js diff --git a/packages/fluence-connection/CONTRIBUTING.md b/packages/client/fluence-js/CONTRIBUTING.md similarity index 100% rename from packages/fluence-connection/CONTRIBUTING.md rename to packages/client/fluence-js/CONTRIBUTING.md diff --git a/packages/fluence-js/README.md b/packages/client/fluence-js/README.md similarity index 100% rename from packages/fluence-js/README.md rename to packages/client/fluence-js/README.md diff --git a/packages/fluence-js/jest.config.js b/packages/client/fluence-js/jest.config.js similarity index 100% rename from packages/fluence-js/jest.config.js rename to packages/client/fluence-js/jest.config.js diff --git a/packages/client/fluence-js/package.json b/packages/client/fluence-js/package.json new file mode 100644 index 00000000..cb0e7227 --- /dev/null +++ b/packages/client/fluence-js/package.json @@ -0,0 +1,32 @@ +{ + "name": "@fluencelabs/fluence", + "version": "0.28.0", + "description": "TypeScript implementation of Fluence Peer", + "main": "./dist/index.js", + "typings": "./dist/index.d.ts", + "engines": { + "node": ">=10", + "pnpm": ">=3" + }, + "scripts": { + "build": "tsc" + }, + "repository": "https://github.com/fluencelabs/fluence-js", + "author": "Fluence Labs", + "license": "Apache-2.0", + "dependencies": { + "loglevel": "1.8.1", + "@fluencelabs/keypair": "workspace:0.2.0", + "@fluencelabs/avm": "0.32.1", + "@fluencelabs/marine-js": "0.3.38", + "@fluencelabs/js-peer": "workspace:0.1.0" + }, + "devDependencies": { + "@types/node": "16.11.59", + "@types/jest": "28.1.0", + "jest": "28.1.0", + "ts-jest": "28.0.2", + "ts-node": "10.9.1", + "typescript": "4.6.4" + } +} diff --git a/packages/fluence-js/src/index.ts b/packages/client/fluence-js/src/index.ts similarity index 84% rename from packages/fluence-js/src/index.ts rename to packages/client/fluence-js/src/index.ts index ee68fe8e..670b7462 100644 --- a/packages/fluence-js/src/index.ts +++ b/packages/client/fluence-js/src/index.ts @@ -17,13 +17,11 @@ import log, { LogLevelDesc } from 'loglevel'; export { KeyPair } from '@fluencelabs/keypair'; -import { FluencePeer, PeerConfig } from './internal/FluencePeer'; +import { FluencePeer, PeerConfig } from '@fluencelabs/js-peer/dist/FluencePeer'; -export { PeerStatus } from './internal/FluencePeer'; -export { FluencePeer, PeerConfig } from './internal/FluencePeer'; -export { MarineLoglevel as AvmLoglevel } from './internal/utils'; -export { PeerIdB58, CallParams } from './internal/commonTypes'; -export { loadWasmFromFileSystem, loadWasmFromNpmPackage, loadWasmFromServer } from '@fluencelabs/marine-js'; +export { PeerStatus } from '@fluencelabs/js-peer/dist/FluencePeer'; +export { FluencePeer, PeerConfig } from '@fluencelabs/js-peer/dist/FluencePeer'; +export { PeerIdB58, CallParams } from '@fluencelabs/js-peer/dist/commonTypes'; export const setLogLevel = (level: LogLevelDesc) => { log.setLevel(level); @@ -31,7 +29,8 @@ export const setLogLevel = (level: LogLevelDesc) => { log.setDefaultLevel('WARN'); -const defaultPeer = new FluencePeer(); +// @ts-ignore +const defaultPeer = globalThis.defaultPeer; /** * Public interface to Fluence JS diff --git a/packages/client/fluence-js/src/services.ts b/packages/client/fluence-js/src/services.ts new file mode 100644 index 00000000..6c642af0 --- /dev/null +++ b/packages/client/fluence-js/src/services.ts @@ -0,0 +1,2 @@ +export * from '@fluencelabs/js-peer/dist/builtins/Sig'; +export { registerSig } from '@fluencelabs/js-peer/dist/_aqua/services'; diff --git a/packages/client/fluence-js/tsconfig.json b/packages/client/fluence-js/tsconfig.json new file mode 100644 index 00000000..0d2020f2 --- /dev/null +++ b/packages/client/fluence-js/tsconfig.json @@ -0,0 +1,21 @@ +{ + "compilerOptions": { + "outDir": "./dist/", + "baseUrl": ".", + "downlevelIteration": true, + "sourceMap": true, + "inlineSources": true, + "allowSyntheticDefaultImports": true, + "resolveJsonModule": true, + "target": "ES5", + "module": "commonjs", + "moduleResolution": "node", + "declaration": true, + "esModuleInterop": true, + "declarationMap": true, + "strict": true, + "skipLibCheck": true + }, + "exclude": ["node_modules", "dist", "bundle"], + "include": ["src/**/*"] +} diff --git a/packages/fluence-js/.gitignore b/packages/client/js-client.node/.gitignore similarity index 100% rename from packages/fluence-js/.gitignore rename to packages/client/js-client.node/.gitignore diff --git a/packages/client/js-client.node/.prettierignore b/packages/client/js-client.node/.prettierignore new file mode 100644 index 00000000..178135c2 --- /dev/null +++ b/packages/client/js-client.node/.prettierignore @@ -0,0 +1 @@ +/dist/ diff --git a/packages/fluence-js/.prettierrc.js b/packages/client/js-client.node/.prettierrc.js similarity index 100% rename from packages/fluence-js/.prettierrc.js rename to packages/client/js-client.node/.prettierrc.js diff --git a/packages/client/js-client.node/README.md b/packages/client/js-client.node/README.md new file mode 100644 index 00000000..87bb724b --- /dev/null +++ b/packages/client/js-client.node/README.md @@ -0,0 +1,11 @@ +# JS Client node + +This package is a part of FluenceJS, the official implementation of the Fluence Peer in typescript. See the [FluenceJS repo](https://github.com/fluencelabs/fluence-js) for more info + +## Contributing + +While the project is still in the early stages of development, you are welcome to track progress and contribute. As the project is undergoing rapid changes, interested contributors should contact the team before embarking on larger pieces of work. All contributors should consult with and agree to our [basic contributing rules](CONTRIBUTING.md). + +## License + +[Apache 2.0](LICENSE) diff --git a/packages/client/js-client.node/package.json b/packages/client/js-client.node/package.json new file mode 100644 index 00000000..06e0a1af --- /dev/null +++ b/packages/client/js-client.node/package.json @@ -0,0 +1,30 @@ +{ + "name": "@fluencelabs/js-client.node", + "version": "0.1.0", + "description": "TypeScript implementation of Fluence Peer", + "main": "./dist/index.js", + "typings": "./dist/index.d.ts", + "engines": { + "node": ">=10", + "pnpm": ">=3" + }, + "scripts": { + "build": "tsc" + }, + "repository": "https://github.com/fluencelabs/fluence-js", + "author": "Fluence Labs", + "license": "Apache-2.0", + "dependencies": { + "@fluencelabs/js-peer": "workspace:0.1.0", + "@fluencelabs/marine.deps-loader.node": "workspace:0.1.0", + "@fluencelabs/marine.background-runner": "workspace:0.1.0" + }, + "devDependencies": { + "@types/node": "16.11.59", + "@types/jest": "28.1.0", + "jest": "28.1.0", + "ts-jest": "28.0.2", + "ts-node": "10.9.1", + "typescript": "4.6.4" + } +} diff --git a/packages/client/js-client.node/src/index.ts b/packages/client/js-client.node/src/index.ts new file mode 100644 index 00000000..1e4c63bb --- /dev/null +++ b/packages/client/js-client.node/src/index.ts @@ -0,0 +1,29 @@ +import { MarineBackgroundRunner } from '@fluencelabs/marine.background-runner'; +import { MarineBasedAvmRunner } from '@fluencelabs/js-peer/dist/avm'; +import { marineLogFunction } from '@fluencelabs/js-peer/dist/utils'; +import { FluencePeer } from '@fluencelabs/js-peer/dist/FluencePeer'; +import { InlinedWorkerLoader, WasmNpmLoader } from '@fluencelabs/marine.deps-loader.node'; + +export const defaultNames = { + avm: { + file: 'avm.wasm', + package: '@fluencelabs/avm', + }, + marine: { + file: 'marine-js.wasm', + package: '@fluencelabs/marine-js', + }, +}; + +export const makeDefaultPeer = () => { + const workerLoader = new InlinedWorkerLoader(); + const controlModuleLoader = new WasmNpmLoader(defaultNames.marine.package, defaultNames.marine.file); + const avmModuleLoader = new WasmNpmLoader(defaultNames.avm.package, defaultNames.avm.file); + + const marine = new MarineBackgroundRunner(workerLoader, controlModuleLoader, marineLogFunction); + const avm = new MarineBasedAvmRunner(marine, avmModuleLoader, undefined); + return new FluencePeer(marine, avm); +}; + +// @ts-ignore +globalThis.defaultPeer = makeDefaultPeer(); diff --git a/packages/client/js-client.node/tsconfig.json b/packages/client/js-client.node/tsconfig.json new file mode 100644 index 00000000..0d2020f2 --- /dev/null +++ b/packages/client/js-client.node/tsconfig.json @@ -0,0 +1,21 @@ +{ + "compilerOptions": { + "outDir": "./dist/", + "baseUrl": ".", + "downlevelIteration": true, + "sourceMap": true, + "inlineSources": true, + "allowSyntheticDefaultImports": true, + "resolveJsonModule": true, + "target": "ES5", + "module": "commonjs", + "moduleResolution": "node", + "declaration": true, + "esModuleInterop": true, + "declarationMap": true, + "strict": true, + "skipLibCheck": true + }, + "exclude": ["node_modules", "dist", "bundle"], + "include": ["src/**/*"] +} diff --git a/packages/fluence-keypair/.gitignore b/packages/client/js-client.web/.gitignore similarity index 100% rename from packages/fluence-keypair/.gitignore rename to packages/client/js-client.web/.gitignore diff --git a/packages/client/js-client.web/.prettierignore b/packages/client/js-client.web/.prettierignore new file mode 100644 index 00000000..178135c2 --- /dev/null +++ b/packages/client/js-client.web/.prettierignore @@ -0,0 +1 @@ +/dist/ diff --git a/packages/fluence-keypair/.prettierrc.js b/packages/client/js-client.web/.prettierrc.js similarity index 100% rename from packages/fluence-keypair/.prettierrc.js rename to packages/client/js-client.web/.prettierrc.js diff --git a/packages/client/js-client.web/README.md b/packages/client/js-client.web/README.md new file mode 100644 index 00000000..b05a79df --- /dev/null +++ b/packages/client/js-client.web/README.md @@ -0,0 +1,11 @@ +# JS Client web + +This package is a part of FluenceJS, the official implementation of the Fluence Peer in typescript. See the [FluenceJS repo](https://github.com/fluencelabs/fluence-js) for more info + +## Contributing + +While the project is still in the early stages of development, you are welcome to track progress and contribute. As the project is undergoing rapid changes, interested contributors should contact the team before embarking on larger pieces of work. All contributors should consult with and agree to our [basic contributing rules](CONTRIBUTING.md). + +## License + +[Apache 2.0](LICENSE) diff --git a/packages/client/js-client.web/package.json b/packages/client/js-client.web/package.json new file mode 100644 index 00000000..778789d3 --- /dev/null +++ b/packages/client/js-client.web/package.json @@ -0,0 +1,30 @@ +{ + "name": "@fluencelabs/js-client.web", + "version": "0.1.0", + "description": "TypeScript implementation of Fluence Peer", + "main": "./dist/index.js", + "typings": "./dist/index.d.ts", + "engines": { + "node": ">=10", + "pnpm": ">=3" + }, + "scripts": { + "build": "tsc" + }, + "repository": "https://github.com/fluencelabs/fluence-js", + "author": "Fluence Labs", + "license": "Apache-2.0", + "dependencies": { + "@fluencelabs/js-peer": "workspace:0.1.0", + "@fluencelabs/marine.deps-loader.web": "workspace:0.1.0", + "@fluencelabs/marine.background-runner": "workspace:0.1.0" + }, + "devDependencies": { + "@types/node": "16.11.59", + "@types/jest": "28.1.0", + "jest": "28.1.0", + "ts-jest": "28.0.2", + "ts-node": "10.9.1", + "typescript": "4.6.4" + } +} diff --git a/packages/client/js-client.web/src/index.ts b/packages/client/js-client.web/src/index.ts new file mode 100644 index 00000000..1b74bdf5 --- /dev/null +++ b/packages/client/js-client.web/src/index.ts @@ -0,0 +1,23 @@ +import { MarineBackgroundRunner } from '@fluencelabs/marine.background-runner'; +import { MarineBasedAvmRunner } from '@fluencelabs/js-peer/dist/avm'; +import { marineLogFunction } from '@fluencelabs/js-peer/dist/utils'; +import { FluencePeer } from '@fluencelabs/js-peer/dist/FluencePeer'; +import { InlinedWorkerLoader, WasmWebLoader } from '@fluencelabs/marine.deps-loader.web'; + +export const defaultNames = { + avm: 'avm.wasm', + marine: 'marine-js.wasm', +}; + +export const makeDefaultPeer = () => { + const workerLoader = new InlinedWorkerLoader(); + const controlModuleLoader = new WasmWebLoader(defaultNames.marine); + const avmModuleLoader = new WasmWebLoader(defaultNames.avm); + + const marine = new MarineBackgroundRunner(workerLoader, controlModuleLoader, marineLogFunction); + const avm = new MarineBasedAvmRunner(marine, avmModuleLoader, undefined); + return new FluencePeer(marine, avm); +}; + +// @ts-ignore +globalThis.defaultPeer = makeDefaultPeer(); diff --git a/packages/client/js-client.web/tsconfig.json b/packages/client/js-client.web/tsconfig.json new file mode 100644 index 00000000..0d2020f2 --- /dev/null +++ b/packages/client/js-client.web/tsconfig.json @@ -0,0 +1,21 @@ +{ + "compilerOptions": { + "outDir": "./dist/", + "baseUrl": ".", + "downlevelIteration": true, + "sourceMap": true, + "inlineSources": true, + "allowSyntheticDefaultImports": true, + "resolveJsonModule": true, + "target": "ES5", + "module": "commonjs", + "moduleResolution": "node", + "declaration": true, + "esModuleInterop": true, + "declarationMap": true, + "strict": true, + "skipLibCheck": true + }, + "exclude": ["node_modules", "dist", "bundle"], + "include": ["src/**/*"] +} diff --git a/packages/client/tools/.gitignore b/packages/client/tools/.gitignore new file mode 100644 index 00000000..1a59a95f --- /dev/null +++ b/packages/client/tools/.gitignore @@ -0,0 +1,21 @@ +# Logs +logs +*.log +npm-debug.log* +yarn-debug.log* +yarn-error.log* +lerna-debug.log* + +# Compiled binary addons (https://nodejs.org/api/addons.html) +build/Release +bundle/ + +dist +esm +types + +# Dependency directories +node_modules/ +jspm_packages/ + +.idea diff --git a/packages/fluence-connection/.npmignore b/packages/client/tools/.npmignore similarity index 100% rename from packages/fluence-connection/.npmignore rename to packages/client/tools/.npmignore diff --git a/packages/client/tools/.prettierignore b/packages/client/tools/.prettierignore new file mode 100644 index 00000000..178135c2 --- /dev/null +++ b/packages/client/tools/.prettierignore @@ -0,0 +1 @@ +/dist/ diff --git a/packages/client/tools/.prettierrc.js b/packages/client/tools/.prettierrc.js new file mode 100644 index 00000000..4e5ea887 --- /dev/null +++ b/packages/client/tools/.prettierrc.js @@ -0,0 +1,8 @@ +module.exports = { + semi: true, + trailingComma: "all", + singleQuote: true, + printWidth: 120, + tabWidth: 4, + useTabs: false +}; diff --git a/packages/fluence-interfaces/CONTRIBUTING.md b/packages/client/tools/CONTRIBUTING.md similarity index 100% rename from packages/fluence-interfaces/CONTRIBUTING.md rename to packages/client/tools/CONTRIBUTING.md diff --git a/packages/client/tools/README.md b/packages/client/tools/README.md new file mode 100644 index 00000000..b4c27fc0 --- /dev/null +++ b/packages/client/tools/README.md @@ -0,0 +1,11 @@ +# Fluence JS Client tools + +This package is a part of FluenceJS, the official implementation of the Fluence Peer in typescript. See the [FluenceJS repo](https://github.com/fluencelabs/fluence-js) for more info + +## Contributing + +While the project is still in the early stages of development, you are welcome to track progress and contribute. As the project is undergoing rapid changes, interested contributors should contact the team before embarking on larger pieces of work. All contributors should consult with and agree to our [basic contributing rules](CONTRIBUTING.md). + +## License + +[Apache 2.0](LICENSE) diff --git a/packages/client/tools/package.json b/packages/client/tools/package.json new file mode 100644 index 00000000..272b1c4b --- /dev/null +++ b/packages/client/tools/package.json @@ -0,0 +1,25 @@ +{ + "name": "@fluencelabs/tools", + "version": "0.1.0", + "description": "Fluence JS Client tools", + "main": "./dist/index.js", + "typings": "./dist/index.d.ts", + "engines": { + "node": ">=10", + "pnpm": ">=3" + }, + "scripts": { + "build": "tsc" + }, + "repository": "https://github.com/fluencelabs/fluence-js", + "author": "Fluence Labs", + "license": "Apache-2.0", + "bin": { + "copy-marine": "dist/copyMarine.js" + }, + "dependencies": {}, + "devDependencies": { + "@types/node": "16.11.59", + "typescript": "4.6.4" + } +} diff --git a/packages/fluence-js/src/tools/copyMarine.ts b/packages/client/tools/src/copyMarine.ts similarity index 94% rename from packages/fluence-js/src/tools/copyMarine.ts rename to packages/client/tools/src/copyMarine.ts index 7e3259b3..ec88be18 100644 --- a/packages/fluence-js/src/tools/copyMarine.ts +++ b/packages/client/tools/src/copyMarine.ts @@ -31,7 +31,7 @@ async function main() { await fs.promises.mkdir(destPath, { recursive: true }); await Promise.all([ - copyFile('@fluencelabs/marine-js', 'marine-js.web.js'), + copyFile('@fluencelabs/marine.worker-script', 'marine-js.web.js'), copyFile('@fluencelabs/marine-js', 'marine-js.wasm'), copyFile('@fluencelabs/avm', 'avm.wasm'), ]); diff --git a/packages/client/tools/tsconfig.json b/packages/client/tools/tsconfig.json new file mode 100644 index 00000000..0d2020f2 --- /dev/null +++ b/packages/client/tools/tsconfig.json @@ -0,0 +1,21 @@ +{ + "compilerOptions": { + "outDir": "./dist/", + "baseUrl": ".", + "downlevelIteration": true, + "sourceMap": true, + "inlineSources": true, + "allowSyntheticDefaultImports": true, + "resolveJsonModule": true, + "target": "ES5", + "module": "commonjs", + "moduleResolution": "node", + "declaration": true, + "esModuleInterop": true, + "declarationMap": true, + "strict": true, + "skipLibCheck": true + }, + "exclude": ["node_modules", "dist", "bundle"], + "include": ["src/**/*"] +} diff --git a/packages/core/connection/.gitignore b/packages/core/connection/.gitignore new file mode 100644 index 00000000..1a59a95f --- /dev/null +++ b/packages/core/connection/.gitignore @@ -0,0 +1,21 @@ +# Logs +logs +*.log +npm-debug.log* +yarn-debug.log* +yarn-error.log* +lerna-debug.log* + +# Compiled binary addons (https://nodejs.org/api/addons.html) +build/Release +bundle/ + +dist +esm +types + +# Dependency directories +node_modules/ +jspm_packages/ + +.idea diff --git a/packages/fluence-interfaces/.npmignore b/packages/core/connection/.npmignore similarity index 100% rename from packages/fluence-interfaces/.npmignore rename to packages/core/connection/.npmignore diff --git a/packages/core/connection/.prettierrc.js b/packages/core/connection/.prettierrc.js new file mode 100644 index 00000000..4e5ea887 --- /dev/null +++ b/packages/core/connection/.prettierrc.js @@ -0,0 +1,8 @@ +module.exports = { + semi: true, + trailingComma: "all", + singleQuote: true, + printWidth: 120, + tabWidth: 4, + useTabs: false +}; diff --git a/packages/fluence-js/CONTRIBUTING.md b/packages/core/connection/CONTRIBUTING.md similarity index 100% rename from packages/fluence-js/CONTRIBUTING.md rename to packages/core/connection/CONTRIBUTING.md diff --git a/packages/fluence-connection/README.md b/packages/core/connection/README.md similarity index 100% rename from packages/fluence-connection/README.md rename to packages/core/connection/README.md diff --git a/packages/fluence-connection/package.json b/packages/core/connection/package.json similarity index 79% rename from packages/fluence-connection/package.json rename to packages/core/connection/package.json index 7d8e0367..ea425085 100644 --- a/packages/fluence-connection/package.json +++ b/packages/core/connection/package.json @@ -15,21 +15,21 @@ "author": "Fluence Labs", "license": "Apache-2.0", "dependencies": { - "@fluencelabs/interfaces": "workspace:0.1.0", + "@fluencelabs/interfaces": "workspace:0.2.0", "peer-id": "0.16.0", "it-length-prefixed": "5.0.3", "it-pipe": "1.1.0", - "@chainsafe/libp2p-noise": "^4.1.1", + "@chainsafe/libp2p-noise": "4.1.1", "libp2p": "0.36.2", - "libp2p-interfaces": "^4.0.6", + "libp2p-interfaces": "4.0.6", "libp2p-mplex": "0.10.7", "libp2p-websockets": "0.16.2", "loglevel": "1.8.1", "multiaddr": "10.0.1", "browser-or-node": "2.0.0", - "buffer": "^6.0.3" + "buffer": "6.0.3" }, "devDependencies": { - "typescript": "^4.6.4" + "typescript": "4.6.4" } } diff --git a/packages/fluence-connection/src/Buffer.ts b/packages/core/connection/src/Buffer.ts similarity index 100% rename from packages/fluence-connection/src/Buffer.ts rename to packages/core/connection/src/Buffer.ts diff --git a/packages/fluence-connection/src/index.ts b/packages/core/connection/src/index.ts similarity index 99% rename from packages/fluence-connection/src/index.ts rename to packages/core/connection/src/index.ts index 008db986..28422334 100644 --- a/packages/fluence-connection/src/index.ts +++ b/packages/core/connection/src/index.ts @@ -25,10 +25,10 @@ import * as log from 'loglevel'; import { Noise } from '@chainsafe/libp2p-noise'; import PeerId from 'peer-id'; import type { MultiaddrInput } from 'multiaddr'; +import { Connection } from 'libp2p-interfaces/src/topology'; import { Multiaddr } from 'multiaddr'; // @ts-ignore import { all as allow_all } from 'libp2p-websockets/src/filters'; -import { Connection } from 'libp2p-interfaces/src/topology'; import Buffer from './Buffer'; export const PROTOCOL_NAME = '/fluence/particle/2.0.0'; @@ -53,7 +53,7 @@ export interface FluenceConnectionOptions { dialTimeoutMs?: number; } -/** +/* * Implementation for JS peers which connects to Fluence through relay node */ export class RelayConnection extends FluenceConnection { @@ -65,9 +65,7 @@ export class RelayConnection extends FluenceConnection { ) { super(); } - private _connection?: Connection; - static async createConnection(options: FluenceConnectionOptions): Promise { const transportKey = Websockets.prototype[Symbol.toStringTag]; const lib2p2Peer = await Lib2p2Peer.create({ @@ -88,13 +86,11 @@ export class RelayConnection extends FluenceConnection { dialTimeout: options?.dialTimeoutMs, }, }); - const relayMultiaddr = new Multiaddr(options.relayAddress); const relayPeerId = relayMultiaddr.getPeerId(); if (relayPeerId === null) { throw new Error('Specified multiaddr is invalid or missing peer id: ' + options.relayAddress); } - return new RelayConnection( // force new line options.peerId.toB58String(), @@ -117,19 +113,15 @@ export class RelayConnection extends FluenceConnection { )} instead.`, ); } - /* TODO:: find out why this doesn't work and a new connection has to be established each time if (this._connection.streams.length !== 1) { throw new Error('Incorrect number of streams in FluenceConnection'); } - const sink = this._connection.streams[0].sink; */ - const conn = await this._lib2p2Peer.dialProtocol(this._relayAddress, PROTOCOL_NAME); const sink = conn.stream.sink; - pipe( // force new line [Buffer.from(particle, 'utf8')], @@ -161,9 +153,7 @@ export class RelayConnection extends FluenceConnection { }, ); }); - log.debug(`dialing to the node with client's address: ` + this._lib2p2Peer.peerId.toB58String()); - try { this._connection = await this._lib2p2Peer.dial(this._relayAddress); } catch (e: any) { diff --git a/packages/fluence-connection/tsconfig.json b/packages/core/connection/tsconfig.json similarity index 100% rename from packages/fluence-connection/tsconfig.json rename to packages/core/connection/tsconfig.json diff --git a/packages/core/interfaces/.gitignore b/packages/core/interfaces/.gitignore new file mode 100644 index 00000000..1a59a95f --- /dev/null +++ b/packages/core/interfaces/.gitignore @@ -0,0 +1,21 @@ +# Logs +logs +*.log +npm-debug.log* +yarn-debug.log* +yarn-error.log* +lerna-debug.log* + +# Compiled binary addons (https://nodejs.org/api/addons.html) +build/Release +bundle/ + +dist +esm +types + +# Dependency directories +node_modules/ +jspm_packages/ + +.idea diff --git a/packages/fluence-js/.npmignore b/packages/core/interfaces/.npmignore similarity index 100% rename from packages/fluence-js/.npmignore rename to packages/core/interfaces/.npmignore diff --git a/packages/core/interfaces/.prettierrc.js b/packages/core/interfaces/.prettierrc.js new file mode 100644 index 00000000..4e5ea887 --- /dev/null +++ b/packages/core/interfaces/.prettierrc.js @@ -0,0 +1,8 @@ +module.exports = { + semi: true, + trailingComma: "all", + singleQuote: true, + printWidth: 120, + tabWidth: 4, + useTabs: false +}; diff --git a/packages/fluence-keypair/CONTRIBUTING.md b/packages/core/interfaces/CONTRIBUTING.md similarity index 100% rename from packages/fluence-keypair/CONTRIBUTING.md rename to packages/core/interfaces/CONTRIBUTING.md diff --git a/packages/fluence-interfaces/README.md b/packages/core/interfaces/README.md similarity index 100% rename from packages/fluence-interfaces/README.md rename to packages/core/interfaces/README.md diff --git a/packages/fluence-interfaces/package.json b/packages/core/interfaces/package.json similarity index 68% rename from packages/fluence-interfaces/package.json rename to packages/core/interfaces/package.json index 36c6d2a0..db7abcd1 100644 --- a/packages/fluence-interfaces/package.json +++ b/packages/core/interfaces/package.json @@ -1,6 +1,6 @@ { "name": "@fluencelabs/interfaces", - "version": "0.1.0", + "version": "0.2.0", "description": "Fluence interfaces", "main": "./dist/index.js", "typings": "./dist/index.d.ts", @@ -16,6 +16,10 @@ "license": "Apache-2.0", "dependencies": {}, "devDependencies": { - "typescript": "^4.6.4" + "typescript": "4.6.4", + "@fluencelabs/avm": "0.31.10", + "@fluencelabs/marine-js": "0.3.38", + "@types/node": "16.11.59", + "threads": "^1.7.0" } } diff --git a/packages/core/interfaces/src/index.ts b/packages/core/interfaces/src/index.ts new file mode 100644 index 00000000..fe6f780f --- /dev/null +++ b/packages/core/interfaces/src/index.ts @@ -0,0 +1,90 @@ +/* + * Copyright 2020 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 type { JSONArray, JSONObject, LogLevel } from '@fluencelabs/marine-js'; +import type { RunParameters, CallResultsArray, InterpreterResult } from '@fluencelabs/avm'; +import type { WorkerImplementation } from 'threads/dist/types/master'; +export type PeerIdB58 = string; + +export type ParticleHandler = (particle: string) => void; + +/** + * Base class for connectivity layer to Fluence Network + */ +export abstract class FluenceConnection { + abstract readonly relayPeerId: PeerIdB58 | null; + abstract connect(onIncomingParticle: ParticleHandler): Promise; + abstract disconnect(): Promise; + abstract sendParticle(nextPeerIds: PeerIdB58[], particle: string): Promise; +} + +export interface IMarine extends IModule { + createService(serviceModule: SharedArrayBuffer | Buffer, serviceId: string, logLevel?: LogLevel): Promise; + + callService( + serviceId: string, + functionName: string, + args: JSONArray | JSONObject, + callParams: any, + ): Promise; +} + +export interface IAvmRunner extends IModule { + run( + runParams: RunParameters, + air: string, + prevData: Uint8Array, + data: Uint8Array, + callResults: CallResultsArray, + ): Promise; +} + +export interface IModule { + start(): Promise; + stop(): Promise; +} + +export interface IValueLoader { + getValue(): T; +} + +export interface IWasmLoader extends IValueLoader, IModule {} + +export interface IWorkerLoader extends IValueLoader, IModule {} + +export class LazyLoader implements IModule, IValueLoader { + private value: T | null = null; + + constructor(private loadValue: () => Promise | T) {} + + getValue(): T { + if (this.value == null) { + throw new Error('Value has not been loaded. Call `start` method to load the value.'); + } + + return this.value; + } + + async start() { + if (this.value !== null) { + return; + } + + this.value = await this.loadValue(); + } + + async stop() {} +} diff --git a/packages/fluence-interfaces/tsconfig.json b/packages/core/interfaces/tsconfig.json similarity index 80% rename from packages/fluence-interfaces/tsconfig.json rename to packages/core/interfaces/tsconfig.json index e0db254b..3fe7a803 100644 --- a/packages/fluence-interfaces/tsconfig.json +++ b/packages/core/interfaces/tsconfig.json @@ -1,14 +1,14 @@ { "compilerOptions": { "outDir": "./dist/", - "lib": ["ES2015"], + "lib": ["ES2017"], "target": "ES5", "module": "commonjs", "skipLibCheck": true, "sourceMap": true, "declaration": true, - "esModuleInterop": true, - }, + "esModuleInterop": true + }, "exclude": ["node_modules", "dist"], "include": ["src/**/*"] } diff --git a/packages/core/js-peer/.gitignore b/packages/core/js-peer/.gitignore new file mode 100644 index 00000000..1a59a95f --- /dev/null +++ b/packages/core/js-peer/.gitignore @@ -0,0 +1,21 @@ +# Logs +logs +*.log +npm-debug.log* +yarn-debug.log* +yarn-error.log* +lerna-debug.log* + +# Compiled binary addons (https://nodejs.org/api/addons.html) +build/Release +bundle/ + +dist +esm +types + +# Dependency directories +node_modules/ +jspm_packages/ + +.idea diff --git a/packages/fluence-keypair/.npmignore b/packages/core/js-peer/.npmignore similarity index 100% rename from packages/fluence-keypair/.npmignore rename to packages/core/js-peer/.npmignore diff --git a/packages/core/js-peer/.prettierignore b/packages/core/js-peer/.prettierignore new file mode 100644 index 00000000..178135c2 --- /dev/null +++ b/packages/core/js-peer/.prettierignore @@ -0,0 +1 @@ +/dist/ diff --git a/packages/core/js-peer/.prettierrc.js b/packages/core/js-peer/.prettierrc.js new file mode 100644 index 00000000..4e5ea887 --- /dev/null +++ b/packages/core/js-peer/.prettierrc.js @@ -0,0 +1,8 @@ +module.exports = { + semi: true, + trailingComma: "all", + singleQuote: true, + printWidth: 120, + tabWidth: 4, + useTabs: false +}; diff --git a/packages/core/js-peer/CONTRIBUTING.md b/packages/core/js-peer/CONTRIBUTING.md new file mode 100644 index 00000000..0e3b264d --- /dev/null +++ b/packages/core/js-peer/CONTRIBUTING.md @@ -0,0 +1,13 @@ +## Contribute Code + +You are welcome to contribute to Fluence. + +Things you need to know: + +1. You need to **agree to the Contributors License Agreement**. This is a common practice in all major Open Source projects. At the current moment we are unable to accept contributions made on behalf of a company. Only individual contributions will be accepted. +2. **Not all proposed contributions can be accepted**. Some features may e.g. just fit a third-party add-on better. The contribution must fit the overall direction of Fluence and really improve it. The more effort you invest, the better you should clarify in advance whether the contribution fits: the best way would be to just open an issue to discuss the contribution you plan to make. + +### Contributor License Agreement + +When you contribute, you have to be aware that your contribution is covered by **Apache License 2.0**, but might relicensed under few other software licenses mentioned in the **Contributor License Agreement**. +In particular you need to agree to the [Contributor License Agreement](https://gist.github.com/fluencelabs-org/3f4cbb3cc14c1c0fb9ad99d8f7316ed7). If you agree to its content, you simply have to click on the link posted by the CLA assistant as a comment to the pull request. Click it to check the CLA, then accept it on the following screen if you agree to it. CLA assistant will save this decision for upcoming contributions and will notify you if there is any change to the CLA in the meantime. diff --git a/packages/core/js-peer/README.md b/packages/core/js-peer/README.md new file mode 100644 index 00000000..271a05d1 --- /dev/null +++ b/packages/core/js-peer/README.md @@ -0,0 +1,11 @@ +# JS Peer + +TDB + +## Contributing + +While the project is still in the early stages of development, you are welcome to track progress and contribute. As the project is undergoing rapid changes, interested contributors should contact the team before embarking on larger pieces of work. All contributors should consult with and agree to our [basic contributing rules](CONTRIBUTING.md). + +## License + +[Apache 2.0](LICENSE) diff --git a/packages/fluence-js/aqua/src/node-utils.aqua b/packages/core/js-peer/aqua/node-utils.aqua similarity index 100% rename from packages/fluence-js/aqua/src/node-utils.aqua rename to packages/core/js-peer/aqua/node-utils.aqua diff --git a/packages/fluence-js/aqua/src/services.aqua b/packages/core/js-peer/aqua/services.aqua similarity index 100% rename from packages/fluence-js/aqua/src/services.aqua rename to packages/core/js-peer/aqua/services.aqua diff --git a/packages/fluence-js/aqua/src/single-module-srv.aqua b/packages/core/js-peer/aqua/single-module-srv.aqua similarity index 100% rename from packages/fluence-js/aqua/src/single-module-srv.aqua rename to packages/core/js-peer/aqua/single-module-srv.aqua diff --git a/packages/core/js-peer/jest.config.js b/packages/core/js-peer/jest.config.js new file mode 100644 index 00000000..05820877 --- /dev/null +++ b/packages/core/js-peer/jest.config.js @@ -0,0 +1,6 @@ +module.exports = { + preset: 'ts-jest', + testEnvironment: 'node', + testTimeout: 10000, + testPathIgnorePatterns: ['dist'], +}; diff --git a/packages/fluence-js/package.json b/packages/core/js-peer/package.json similarity index 50% rename from packages/fluence-js/package.json rename to packages/core/js-peer/package.json index 98b28d43..a35650c3 100644 --- a/packages/fluence-js/package.json +++ b/packages/core/js-peer/package.json @@ -1,6 +1,6 @@ { - "name": "@fluencelabs/fluence", - "version": "0.27.5", + "name": "@fluencelabs/js-peer", + "version": "0.1.0", "description": "TypeScript implementation of Fluence Peer", "main": "./dist/index.js", "typings": "./dist/index.d.ts", @@ -9,55 +9,51 @@ "pnpm": ">=3" }, "scripts": { - "compile-aqua": "npm run compile-aqua:src && npm run compile-aqua:test", - "compile-aqua:src": "aqua -i ./aqua/src/ -o ./src/internal/_aqua", - "compile-aqua:test": "aqua -i ./aqua/tests/ -o ./src/__test__/_aqua", + "build": "tsc", + "compile-aqua": "aqua -i ./aqua/ -o ./src/internal/_aqua", "test": "jest", "test:unit": "jest --testPathPattern=src/__test__/unit", - "test:integration": "jest --testPathPattern=src/__test__/integration", - "build": "tsc", - "build:docs": "typedoc" + "test:integration": "jest --testPathPattern=src/__test__/integration" }, "repository": "https://github.com/fluencelabs/fluence-js", "author": "Fluence Labs", "license": "Apache-2.0", - "bin": { - "copy-marine": "dist/tools/copyMarine.js" - }, "dependencies": { - "@fluencelabs/avm": "0.31.10", + "@fluencelabs/avm": "0.32.1", "@fluencelabs/connection": "workspace:0.2.0", - "@fluencelabs/interfaces": "workspace:0.1.0", + "@fluencelabs/interfaces": "workspace:0.2.0", "@fluencelabs/keypair": "workspace:0.2.0", - "@fluencelabs/marine-js": "0.3.37", + "@fluencelabs/marine-js": "0.3.38", + "@fluencelabs/marine.background-runner": "workspace:0.1.0", "async": "3.2.4", "base64-js": "^1.5.1", - "browser-or-node": "2.0.0", "bs58": "5.0.0", - "buffer": "^6.0.3", + "buffer": "6.0.3", "cids": "1.1.9", "loglevel": "1.8.1", "multiformats": "9.9.0", "peer-id": "0.16.0", - "platform": "^1.3.6", - "rxjs": "^7.5.5", + "platform": "1.3.6", + "rxjs": "7.5.5", "ts-pattern": "3.3.3", "uuid": "8.3.2" }, "devDependencies": { + "@fluencelabs/marine.deps-loader.node": "workspace:0.1.0", "@fluencelabs/aqua": "0.7.7-362", + "@fluencelabs/aqua-api": "0.9.1-373", "@fluencelabs/aqua-lib": "0.6.0", - "@fluencelabs/fluence-network-environment": "^1.0.13", - "@types/bs58": "^4.0.1", - "@types/jest": "^27.5.1", - "@types/platform": "^1.3.4", - "@types/uuid": "^8.3.4", - "jest": "^28.1.0", - "jest-each": "^28.1.3", - "js-base64": "^3.7.2", + "@fluencelabs/fluence-network-environment": "1.0.13", + "@types/bs58": "4.0.1", + "@types/jest": "28.1.0", + "@types/platform": "1.3.4", + "@types/uuid": "8.3.2", + "jest": "28.1.0", + "jest-each": "28.1.3", + "js-base64": "3.7.2", "multiaddr": "10.0.1", - "ts-jest": "^28.0.2", - "typedoc": "^0.22.15", - "typescript": "^4.6.4" + "ts-jest": "28.0.2", + "ts-node": "10.9.1", + "typescript": "4.6.4" } } diff --git a/packages/fluence-js/src/internal/FluencePeer.ts b/packages/core/js-peer/src/FluencePeer.ts similarity index 87% rename from packages/fluence-js/src/internal/FluencePeer.ts rename to packages/core/js-peer/src/FluencePeer.ts index d235e914..5172f731 100644 --- a/packages/fluence-js/src/internal/FluencePeer.ts +++ b/packages/core/js-peer/src/FluencePeer.ts @@ -16,34 +16,25 @@ import 'buffer'; import { RelayConnection } from '@fluencelabs/connection'; -import { FluenceConnection } from '@fluencelabs/interfaces'; +import { FluenceConnection, IAvmRunner, IMarine } from '@fluencelabs/interfaces'; import { KeyPair } from '@fluencelabs/keypair'; -import { FluenceAppService, loadDefaults, loadWasmFromFileSystem, loadWasmFromServer } from '@fluencelabs/marine-js'; import type { MultiaddrInput } from 'multiaddr'; import { CallServiceData, CallServiceResult, GenericCallServiceHandler, ResultCodes } from './commonTypes'; import { PeerIdB58 } from './commonTypes'; import { Particle, ParticleExecutionStage, ParticleQueueItem } from './Particle'; -import { - throwIfNotSupported, - dataToString, - jsonify, - MarineLoglevel, - marineLogLevelToEnvs, - isString, - ServiceError, -} from './utils'; +import { throwIfNotSupported, dataToString, jsonify, isString, ServiceError } from './utils'; import { concatMap, filter, pipe, Subject, tap } from 'rxjs'; import log from 'loglevel'; import { builtInServices } from './builtins/common'; import { defaultSigGuard, Sig } from './builtins/Sig'; import { registerSig } from './_aqua/services'; import { registerSrv } from './_aqua/single-module-srv'; -import Buffer from './Buffer'; +import { Buffer } from 'buffer'; -import { isBrowser, isNode } from 'browser-or-node'; -import { deserializeAvmResult, InterpreterResult, JSONValue, LogLevel, serializeAvmArgs } from '@fluencelabs/avm'; +import { JSONValue } from '@fluencelabs/avm'; import { NodeUtils, Srv } from './builtins/SingleModuleSrv'; import { registerNodeUtils } from './_aqua/node-utils'; +import { LogLevel } from '@fluencelabs/marine-js'; /** * Node of the Fluence network specified as a pair of node's multiaddr and it's peer id @@ -76,7 +67,7 @@ export interface PeerConfig { * @deprecated. AVM run through marine-js infrastructure. * @see debug.marineLogLevel option to configure logging level of AVM */ - avmLogLevel?: MarineLoglevel; + avmLogLevel?: LogLevel | 'off'; /** * Specify the KeyPair to be used to identify the Fluence Peer. @@ -191,6 +182,8 @@ export type PeerStatus = * It provides all the necessary features to communicate with Fluence network */ export class FluencePeer { + constructor(private marine: IMarine, private avmRunner: IAvmRunner) {} + /** * Checks whether the object is instance of FluencePeer class * @param obj - object to check if it is FluencePeer @@ -214,7 +207,7 @@ export class FluencePeer { }; } - if (this._connection === undefined) { + if (this.connection === null) { return { isInitialized: true, peerId: this._keyPair.Libp2pPeerId.toB58String(), @@ -223,7 +216,7 @@ export class FluencePeer { }; } - if (this._connection.relayPeerId === null) { + if (this.connection.relayPeerId === null) { return { isInitialized: true, peerId: this._keyPair.Libp2pPeerId.toB58String(), @@ -237,7 +230,7 @@ export class FluencePeer { isInitialized: true, peerId: this._keyPair.Libp2pPeerId.toB58String(), isConnected: true, - relayPeerId: this._connection.relayPeerId, + relayPeerId: this.connection.relayPeerId, }; } @@ -254,6 +247,7 @@ export class FluencePeer { await this.init(newConfig); const conn = await configToConnection(newConfig.KeyPair, config?.connectTo, config?.dialTimeoutMs); + if (conn !== null) { await this.connect(conn); } @@ -278,19 +272,14 @@ export class FluencePeer { * @param serviceId - the service id by which the service can be accessed in aqua */ async registerMarineService(wasm: SharedArrayBuffer | Buffer, serviceId: string): Promise { - if (!this._fluenceAppService) { + if (!this.marine) { throw new Error("Can't register marine service: peer is not initialized"); } if (this._containsService(serviceId)) { throw new Error(`Service with '${serviceId}' id already exists`); } - await this._fluenceAppService.createService( - wasm, - serviceId, - undefined, - marineLogLevelToEnvs(this._marineLogLevel), - ); + await this.marine.createService(wasm, serviceId, this._marineLogLevel); this._marineServices.add(serviceId); } @@ -310,8 +299,8 @@ export class FluencePeer { this._keyPair = undefined; // This will set peer to non-initialized state and stop particle processing this._stopParticleProcessing(); await this.disconnect(); - await this._fluenceAppService?.terminate(); - this._fluenceAppService = undefined; + await this.marine.stop(); + await this.avmRunner.stop(); this._classServices = undefined; this._particleSpecificHandlers.clear(); @@ -333,7 +322,7 @@ export class FluencePeer { new Error("Can't use avm: peer is not initialized"); } - const res = await this._fluenceAppService!.callService('avm', 'ast', [air], undefined); + const res = await this.marine.callService('avm', 'ast', [air], undefined); if (!isString(res)) { throw new Error(`Call to avm:ast expected to return string. Actual return: ${res}`); } @@ -445,17 +434,8 @@ export class FluencePeer { this._marineLogLevel = config.debug.marineLogLevel; } - 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', - undefined, - marineLogLevelToEnvs(this._marineLogLevel), - ); + await this.marine.start(); + await this.avmRunner.start(); registerDefaultServices(this); @@ -464,11 +444,11 @@ export class FluencePeer { srv: new Srv(this), }; this._classServices.sig.securityGuard = defaultSigGuard(peerId); - registerSig(this, this._classServices.sig); + registerSig(this, 'sig', this._classServices.sig); registerSig(this, peerId, this._classServices.sig); - registerSrv(this, this._classServices.srv); - registerNodeUtils(this, new NodeUtils(this)); + registerSrv(this, 'single_module_srv', this._classServices.srv); + registerNodeUtils(this, 'node_utils', new NodeUtils(this)); this._startParticleProcessing(); } @@ -477,23 +457,19 @@ export class FluencePeer { * @private Subject to change. Do not use this method directly */ async connect(connection: FluenceConnection): Promise { - if (this._connection) { - await this._connection.disconnect(); + if (this.connection) { + await this.connection.disconnect(); } - this._connection = connection; - - await this._connection.connect(this._onIncomingParticle.bind(this)); + this.connection = connection; + await this.connection.connect(this._onIncomingParticle.bind(this)); } /** * @private Subject to change. Do not use this method directly */ async disconnect(): Promise { - if (this._connection) { - await this._connection.disconnect(); - this._connection = undefined; - } + await this.connection?.disconnect(); } // private @@ -506,7 +482,7 @@ export class FluencePeer { // Call service handler private _marineServices = new Set(); - private _marineLogLevel?: MarineLoglevel; + private _marineLogLevel?: LogLevel; private _particleSpecificHandlers = new Map>(); private _commonHandlers = new Map(); @@ -521,11 +497,10 @@ export class FluencePeer { // Internal peer state + private connection: FluenceConnection | null = null; private _printParticleId = false; private _defaultTTL: number = DEFAULT_TTL; private _keyPair: KeyPair | undefined; - private _connection?: FluenceConnection; - private _fluenceAppService?: FluenceAppService; private _timeouts: Array = []; private _particleQueues = new Map>(); @@ -566,13 +541,13 @@ export class FluencePeer { return; } - if (!this._connection) { + if (!this.connection) { item.particle.logTo('error', 'cannot send particle, peer is not connected'); item.onStageChange({ stage: 'sendingError' }); return; } item.particle.logTo('debug', 'sending particle:'); - this._connection.sendParticle(item.nextPeerIds, item.particle.toString()).then( + this.connection?.sendParticle(item.nextPeerIds, item.particle.toString()).then( () => { item.onStageChange({ stage: 'sent' }); }, @@ -605,7 +580,7 @@ export class FluencePeer { concatMap(async (item) => { const status = this.getStatus(); - if (!status.isInitialized || this._fluenceAppService === undefined) { + if (!status.isInitialized || this.marine === undefined) { // If `.stop()` was called return null to stop particle processing immediately return null; } @@ -615,7 +590,10 @@ export class FluencePeer { // MUST happen sequentially (in a critical section). // Otherwise the race between runner might occur corrupting the prevData - const args = serializeAvmArgs( + item.particle.logTo('debug', 'Sending particle to interpreter'); + log.debug('prevData: ', dataToString(prevData)); + + const avmCallResult = await this.avmRunner.run( { initPeerId: item.particle.initPeerId, currentPeerId: status.peerId, @@ -628,16 +606,6 @@ export class FluencePeer { item.particle.callResults, ); - item.particle.logTo('debug', 'Sending particle to interpreter'); - log.debug('prevData: ', dataToString(prevData)); - let avmCallResult: InterpreterResult | Error; - try { - const res = await this._fluenceAppService.callService('avm', 'invoke', args, undefined); - avmCallResult = deserializeAvmResult(res); - } catch (e) { - avmCallResult = e instanceof Error ? e : new Error((e as any).toString()); - } - if (!(avmCallResult instanceof Error) && avmCallResult.retCode === 0) { const newData = Buffer.from(avmCallResult.data); prevData = newData; @@ -749,8 +717,8 @@ export class FluencePeer { log.debug('executing call service handler', jsonify(req)); const particleId = req.particleContext.particleId; - if (this._fluenceAppService && this._marineServices.has(req.serviceId)) { - const result = await this._fluenceAppService.callService(req.serviceId, req.fnName, req.args, undefined); + if (this.marine && this._marineServices.has(req.serviceId)) { + const result = await this.marine.callService(req.serviceId, req.fnName, req.args, undefined); return { retCode: ResultCodes.success, @@ -858,35 +826,3 @@ 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, Promise]; - // 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, - }; -} diff --git a/packages/fluence-js/src/internal/Particle.ts b/packages/core/js-peer/src/Particle.ts similarity index 98% rename from packages/fluence-js/src/internal/Particle.ts rename to packages/core/js-peer/src/Particle.ts index f93a8ab6..ee4c6f1f 100644 --- a/packages/fluence-js/src/internal/Particle.ts +++ b/packages/core/js-peer/src/Particle.ts @@ -13,15 +13,13 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -import 'buffer'; - import { CallResultsArray, LogLevel } from '@fluencelabs/avm'; import { v4 as uuidv4 } from 'uuid'; import { fromByteArray, toByteArray } from 'base64-js'; import log from 'loglevel'; import { ParticleContext } from './commonTypes'; import { dataToString, jsonify } from './utils'; -import Buffer from './Buffer'; +import { Buffer } from 'buffer'; export class Particle { // TODO: make it not optional (should be added to the constructor) diff --git a/packages/fluence-js/src/__test__/connection.ts b/packages/core/js-peer/src/__test__/connection.ts similarity index 100% rename from packages/fluence-js/src/__test__/connection.ts rename to packages/core/js-peer/src/__test__/connection.ts diff --git a/packages/core/js-peer/src/__test__/integration/avm.spec.ts b/packages/core/js-peer/src/__test__/integration/avm.spec.ts new file mode 100644 index 00000000..e3068e66 --- /dev/null +++ b/packages/core/js-peer/src/__test__/integration/avm.spec.ts @@ -0,0 +1,158 @@ +import { handleTimeout } from '../../utils'; +import { registerHandlersHelper, withPeer } from '../util'; + +describe('Avm spec', () => { + it('Simple call', async () => { + await withPeer(async (peer) => { + const res = await new Promise((resolve, reject) => { + const script = ` + (call %init_peer_id% ("print" "print") ["1"]) + `; + const particle = peer.internals.createNewParticle(script); + + if (particle instanceof Error) { + return reject(particle.message); + } + + registerHandlersHelper(peer, particle, { + print: { + print: (args: Array>) => { + const [res] = args; + resolve(res); + }, + }, + }); + + peer.internals.initiateParticle(particle, handleTimeout(reject)); + }); + + expect(res).toBe('1'); + }); + }); + + it('Par call', async () => { + await withPeer(async (peer) => { + const res = await new Promise((resolve, reject) => { + const res: any[] = []; + const script = ` + (seq + (par + (call %init_peer_id% ("print" "print") ["1"]) + (null) + ) + (call %init_peer_id% ("print" "print") ["2"]) + ) + `; + const particle = peer.internals.createNewParticle(script); + + if (particle instanceof Error) { + return reject(particle.message); + } + + registerHandlersHelper(peer, particle, { + print: { + print: (args: any) => { + res.push(args[0]); + if (res.length == 2) { + resolve(res); + } + }, + }, + }); + + peer.internals.initiateParticle(particle, handleTimeout(reject)); + }); + + expect(res).toStrictEqual(['1', '2']); + }); + }); + + it('Timeout in par call: race', async () => { + await withPeer(async (peer) => { + const res = await new Promise((resolve, reject) => { + const script = ` + (seq + (call %init_peer_id% ("op" "identity") ["slow_result"] arg) + (seq + (par + (call %init_peer_id% ("peer" "timeout") [1000 arg] $result) + (call %init_peer_id% ("op" "identity") ["fast_result"] $result) + ) + (seq + (canon %init_peer_id% $result #result) + (call %init_peer_id% ("return" "return") [#result.$[0]]) + ) + ) + ) + `; + const particle = peer.internals.createNewParticle(script); + + if (particle instanceof Error) { + return reject(particle.message); + } + + registerHandlersHelper(peer, particle, { + return: { + return: (args: any) => { + resolve(args[0]); + }, + }, + }); + + peer.internals.initiateParticle(particle, handleTimeout(reject)); + }); + + expect(res).toBe('fast_result'); + }); + }); + + it('Timeout in par call: wait', async () => { + await withPeer(async (peer) => { + const res = await new Promise((resolve, reject) => { + const script = ` + (seq + (call %init_peer_id% ("op" "identity") ["timeout_msg"] arg) + (seq + (seq + (par + (call %init_peer_id% ("peer" "timeout") [1000 arg] $ok_or_err) + (call "invalid_peer" ("op" "identity") ["never"] $ok_or_err) + ) + (xor + (seq + (canon %init_peer_id% $ok_or_err #ok_or_err) + (match #ok_or_err.$[0] "timeout_msg" + (ap "failed_with_timeout" $result) + ) + ) + (ap "impossible happened" $result) + ) + ) + (seq + (canon %init_peer_id% $result #result) + (call %init_peer_id% ("return" "return") [#result.$[0]]) + ) + ) + ) + `; + const particle = peer.internals.createNewParticle(script); + + if (particle instanceof Error) { + return reject(particle.message); + } + + registerHandlersHelper(peer, particle, { + return: { + return: (args: any) => { + resolve(args[0]); + }, + }, + }); + + peer.internals.initiateParticle(particle, handleTimeout(reject)); + }); + + expect(res).toBe('failed_with_timeout'); + }); + }); +}); diff --git a/packages/fluence-js/src/__test__/integration/greeting-record.wasm b/packages/core/js-peer/src/__test__/integration/greeting-record.wasm similarity index 100% rename from packages/fluence-js/src/__test__/integration/greeting-record.wasm rename to packages/core/js-peer/src/__test__/integration/greeting-record.wasm diff --git a/packages/fluence-js/src/__test__/integration/greeting.wasm b/packages/core/js-peer/src/__test__/integration/greeting.wasm similarity index 100% rename from packages/fluence-js/src/__test__/integration/greeting.wasm rename to packages/core/js-peer/src/__test__/integration/greeting.wasm diff --git a/packages/fluence-js/src/__test__/integration/jsonBuiltin.spec.ts b/packages/core/js-peer/src/__test__/integration/jsonBuiltin.spec.ts similarity index 93% rename from packages/fluence-js/src/__test__/integration/jsonBuiltin.spec.ts rename to packages/core/js-peer/src/__test__/integration/jsonBuiltin.spec.ts index 3bfcfb9c..e3f6f92e 100644 --- a/packages/fluence-js/src/__test__/integration/jsonBuiltin.spec.ts +++ b/packages/core/js-peer/src/__test__/integration/jsonBuiltin.spec.ts @@ -1,6 +1,7 @@ -import { Particle } from '../../internal/Particle'; -import { doNothing } from '../../internal/utils'; -import { FluencePeer } from '../../index'; +import { Particle } from '../../Particle'; +import { doNothing } from '../../utils'; +import { FluencePeer } from '../../FluencePeer'; +import { mkTestPeer } from '../util'; let peer: FluencePeer; @@ -12,7 +13,7 @@ describe('Sig service test suite', () => { }); beforeEach(async () => { - peer = new FluencePeer(); + peer = mkTestPeer(); await peer.start(); }); diff --git a/packages/fluence-js/aqua/tests/marine-js.aqua b/packages/core/js-peer/src/__test__/integration/marine-js.aqua similarity index 56% rename from packages/fluence-js/aqua/tests/marine-js.aqua rename to packages/core/js-peer/src/__test__/integration/marine-js.aqua index c9f76222..2de7507f 100644 --- a/packages/fluence-js/aqua/tests/marine-js.aqua +++ b/packages/core/js-peer/src/__test__/integration/marine-js.aqua @@ -11,3 +11,16 @@ func call(arg: string) -> string: res2 <- Greeting.greeting(res1) res3 <- Greeting.greeting(res2) <- res3 + +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/packages/fluence-js/src/__test__/integration/marine-js.spec.ts b/packages/core/js-peer/src/__test__/integration/marine-js.spec.ts similarity index 54% rename from packages/fluence-js/src/__test__/integration/marine-js.spec.ts rename to packages/core/js-peer/src/__test__/integration/marine-js.spec.ts index 9024ae1e..60378dfb 100644 --- a/packages/fluence-js/src/__test__/integration/marine-js.spec.ts +++ b/packages/core/js-peer/src/__test__/integration/marine-js.spec.ts @@ -1,35 +1,35 @@ -import { Fluence, FluencePeer } from '../../index'; import fs from 'fs'; -import { call } from '../_aqua/marine-js'; -import { call_info } from '../_aqua/marine-js-logging'; +import path from 'path'; +import { compileAqua, withPeer } from '../util'; + +let aqua: any; describe('Marine js tests', () => { - beforeEach(async () => { - await Fluence.start(); - }); - - afterEach(async () => { - await Fluence.stop(); + beforeAll(async () => { + const { services, functions } = await compileAqua(path.join(__dirname, './marine-js.aqua')); + aqua = functions; }); it('should call marine service correctly', async () => { - // arrange - const wasm = await fs.promises.readFile(__dirname + '/greeting.wasm'); - await Fluence.registerMarineService(wasm, 'greeting'); + await withPeer(async (peer) => { + // arrange + const wasm = await fs.promises.readFile(__dirname + '/greeting.wasm'); + await peer.registerMarineService(wasm, 'greeting'); - // act - const res = await call('test'); + // act + const res = await aqua.call(peer, { arg: 'test' }); - // assert - expect(res).toBe('Hi, Hi, Hi, test'); + // assert + expect(res).toBe('Hi, Hi, Hi, test'); + }); }); // TODO: console printouts are happening inside web-worker\worker threads. // Find a way to mock functions in background thread it.skip('logging should work', async () => { - // arrange - const peer = new FluencePeer(); - try { + await withPeer(async (peer) => { + // arrange + jest.spyOn(global.console, 'info').mockImplementation(() => {}); await peer.start({ @@ -41,13 +41,11 @@ describe('Marine js tests', () => { await peer.registerMarineService(wasm, 'greeting'); // act - await call_info(peer, 'greeting'); + await aqua.call_info(peer, { arg: 'greeting' }); // assert expect(console.info).toBeCalledTimes(1); expect(console.info).toHaveBeenNthCalledWith(1, '[marine service "greeting"]: info'); - } finally { - await peer.stop(); - } + }); }); }); diff --git a/packages/core/js-peer/src/__test__/integration/peer.spec.ts b/packages/core/js-peer/src/__test__/integration/peer.spec.ts new file mode 100644 index 00000000..d33fec2b --- /dev/null +++ b/packages/core/js-peer/src/__test__/integration/peer.spec.ts @@ -0,0 +1,427 @@ +import { Multiaddr } from 'multiaddr'; + +import { nodes } from '../connection'; +import { checkConnection, doNothing, handleTimeout } from '../../utils'; +import { registerHandlersHelper, mkTestPeer, withPeer, withConnectedPeer } from '../util'; +import { FluencePeer } from '../../FluencePeer'; + +describe('Typescript usage suite', () => { + it('should perform test for FluencePeer class correctly', () => { + // arrange + const peer = mkTestPeer(); + const number = 1; + const object = { str: 'Hello!' }; + const undefinedVal = undefined; + + // act + const isPeerPeer = FluencePeer.isInstance(peer); + const isNumberPeer = FluencePeer.isInstance(number); + const isObjectPeer = FluencePeer.isInstance(object); + const isUndefinedPeer = FluencePeer.isInstance(undefinedVal); + + // act + expect(isPeerPeer).toBe(true); + expect(isNumberPeer).toBe(false); + expect(isObjectPeer).toBe(false); + expect(isUndefinedPeer).toBe(false); + }); + + describe('Should expose correct peer status', () => { + it('Should expose correct status for uninitialized peer', () => { + const peer = mkTestPeer(); + const status = peer.getStatus(); + + expect(status.isConnected).toBe(false); + expect(status.isInitialized).toBe(false); + expect(status.peerId).toBe(null); + expect(status.relayPeerId).toBe(null); + }); + + it('Should expose correct status for initialized but not connected peer', async () => { + await withPeer(async (peer) => { + // arrange + + // act + const status = peer.getStatus(); + + // assert + expect(status.isConnected).toBe(false); + expect(status.isInitialized).toBe(true); + expect(status.peerId).not.toBe(null); + expect(status.relayPeerId).toBe(null); + }); + }); + + it('Should expose correct status for connected peer', async () => { + await withConnectedPeer(async (peer) => { + // arrange + + // act + const status = peer.getStatus(); + + // assert + expect(status.isConnected).toBe(true); + expect(status.isInitialized).toBe(true); + expect(status.peerId).not.toBe(null); + expect(status.relayPeerId).not.toBe(null); + }); + }); + }); + + it('should make a call through network', async () => { + await withConnectedPeer(async (peer) => { + // arrange + + const result = await new Promise((resolve, reject) => { + const script = ` + (xor + (seq + (call %init_peer_id% ("load" "relay") [] init_relay) + (seq + (call init_relay ("op" "identity") ["hello world!"] result) + (call %init_peer_id% ("callback" "callback") [result]) + ) + ) + (seq + (call init_relay ("op" "identity") []) + (call %init_peer_id% ("callback" "error") [%last_error%]) + ) + )`; + const particle = peer.internals.createNewParticle(script); + + if (particle instanceof Error) { + return reject(particle.message); + } + + registerHandlersHelper(peer, particle, { + load: { + relay: () => { + return peer.getStatus().relayPeerId; + }, + }, + callback: { + callback: (args: any) => { + const [val] = args; + resolve(val); + }, + error: (args: any) => { + const [error] = args; + reject(error); + }, + }, + }); + + peer.internals.initiateParticle(particle, handleTimeout(reject)); + }); + + expect(result).toBe('hello world!'); + }); + }); + + it('check connection should work', async function () { + await withConnectedPeer(async (peer) => { + const isConnected = await checkConnection(peer); + + expect(isConnected).toEqual(true); + }); + }); + + it('check connection should work with ttl', async function () { + await withConnectedPeer(async (peer) => { + const isConnected = await checkConnection(peer, 10000); + + expect(isConnected).toEqual(true); + }); + }); + + it('two clients should work inside the same time browser', async () => { + await withConnectedPeer(async (peer1) => { + await withConnectedPeer(async (peer2) => { + const res = new Promise((resolve) => { + peer2.internals.regHandler.common('test', 'test', (req) => { + resolve(req.args[0]); + return { + result: {}, + retCode: 0, + }; + }); + }); + + const script = ` + (seq + (call "${peer1.getStatus().relayPeerId}" ("op" "identity") []) + (call "${peer2.getStatus().peerId}" ("test" "test") ["test"]) + ) + `; + const particle = peer1.internals.createNewParticle(script); + + if (particle instanceof Error) { + throw particle; + } + + peer1.internals.initiateParticle(particle, doNothing); + + expect(await res).toEqual('test'); + }); + }); + }); + + describe('should make connection to network', () => { + it('address as string', async () => { + await withConnectedPeer(async (peer) => { + const isConnected = await checkConnection(peer); + + expect(isConnected).toBeTruthy(); + }); + }); + + it('address as multiaddr', async () => { + await withConnectedPeer(async (peer) => { + const isConnected = await checkConnection(peer); + + expect(isConnected).toBeTruthy(); + }); + }); + + it('address as node', async () => { + await withConnectedPeer(async (peer) => { + const isConnected = await checkConnection(peer); + + expect(isConnected).toBeTruthy(); + }); + }); + + it('With connection options: dialTimeout', async () => { + await withPeer( + async (peer) => { + const isConnected = await checkConnection(peer); + + expect(isConnected).toBeTruthy(); + }, + { connectTo: nodes[0], dialTimeoutMs: 100000 }, + ); + }); + + it('With connection options: skipCheckConnection', async () => { + await withPeer( + async (peer) => { + const isConnected = await checkConnection(peer); + + expect(isConnected).toBeTruthy(); + }, + { connectTo: nodes[0], skipCheckConnection: true }, + ); + }); + + it('With connection options: checkConnectionTTL', async () => { + await withPeer( + async (peer) => { + const isConnected = await checkConnection(peer); + + expect(isConnected).toBeTruthy(); + }, + { connectTo: nodes[0], checkConnectionTimeoutMs: 1000 }, + ); + }); + + it('With connection options: defaultTTL', async () => { + await withPeer( + async (peer) => { + const isConnected = await checkConnection(peer); + + expect(isConnected).toBeFalsy(); + }, + { connectTo: nodes[0], defaultTtlMs: 1 }, + ); + }); + }); + + it('Should successfully call identity on local peer', async function () { + await withPeer(async (peer) => { + const res = await new Promise((resolve, reject) => { + const script = ` + (seq + (call %init_peer_id% ("op" "identity") ["test"] res) + (call %init_peer_id% ("callback" "callback") [res]) + ) + `; + const particle = peer.internals.createNewParticle(script); + + if (particle instanceof Error) { + return reject(particle.message); + } + + registerHandlersHelper(peer, particle, { + callback: { + callback: async (args: any) => { + const [res] = args; + resolve(res); + }, + }, + }); + + peer.internals.initiateParticle(particle, handleTimeout(reject)); + }); + + expect(res).toBe('test'); + }); + }); + + it('Should throw correct message when calling non existing local service', async function () { + await withConnectedPeer(async (peer) => { + const res = callIncorrectService(peer); + + await expect(res).rejects.toMatchObject({ + message: expect.stringContaining( + `No handler has been registered for serviceId='incorrect' fnName='incorrect' args='[]'\"'`, + ), + // instruction: 'call %init_peer_id% ("incorrect" "incorrect") [] res', + }); + }); + }); + + it('Should not crash if undefined is passed as a variable', async () => { + await withPeer(async (peer) => { + const res = await new Promise((resolve, reject) => { + const script = ` + (seq + (call %init_peer_id% ("load" "arg") [] arg) + (seq + (call %init_peer_id% ("op" "identity") [arg] res) + (call %init_peer_id% ("callback" "callback") [res]) + ) + )`; + const particle = peer.internals.createNewParticle(script); + + if (particle instanceof Error) { + return reject(particle.message); + } + + registerHandlersHelper(peer, particle, { + load: { + arg: () => undefined, + }, + callback: { + callback: (args: any) => { + const [val] = args; + resolve(val); + }, + error: (args: any) => { + const [error] = args; + reject(error); + }, + }, + }); + + peer.internals.initiateParticle(particle, handleTimeout(reject)); + }); + + expect(res).toBe(null); + }); + }); + + it('Should not crash if an error ocurred in user-defined handler', async () => { + await withPeer(async (peer) => { + const promise = new Promise((_resolve, reject) => { + const script = ` + (xor + (call %init_peer_id% ("load" "arg") [] arg) + (call %init_peer_id% ("callback" "error") [%last_error%]) + )`; + const particle = peer.internals.createNewParticle(script); + + if (particle instanceof Error) { + return reject(particle.message); + } + + registerHandlersHelper(peer, particle, { + load: { + arg: () => { + throw new Error('my super custom error message'); + }, + }, + callback: { + error: (args: any) => { + const [error] = args; + reject(error); + }, + }, + }); + + peer.internals.initiateParticle(particle, handleTimeout(reject)); + }); + + await expect(promise).rejects.toMatchObject({ + message: expect.stringContaining('my super custom error message'), + }); + }); + }); + + it('Should return error if particle is created on a stopped peer', async () => { + const peer = mkTestPeer(); + const particle = peer.internals.createNewParticle(`(null)`); + + expect(particle instanceof Error).toBe(true); + }); + + it.skip('Should throw correct error when the client tries to send a particle not to the relay', async () => { + await withConnectedPeer(async (peer) => { + const promise = new Promise((resolve, reject) => { + const script = ` + (xor + (call "incorrect_peer_id" ("any" "service") []) + (call %init_peer_id% ("callback" "error") [%last_error%]) + )`; + const particle = peer.internals.createNewParticle(script); + + if (particle instanceof Error) { + return reject(particle.message); + } + + registerHandlersHelper(peer, particle, { + callback: { + error: (args: any) => { + const [error] = args; + reject(error); + }, + }, + }); + + peer.internals.initiateParticle(particle, doNothing); + }); + + await expect(promise).rejects.toMatch( + 'Particle is expected to be sent to only the single peer (relay which client is connected to)', + ); + }); + }); +}); + +async function callIncorrectService(peer: FluencePeer): Promise { + return new Promise((resolve, reject) => { + const script = ` + (xor + (call %init_peer_id% ("incorrect" "incorrect") [] res) + (call %init_peer_id% ("callback" "error") [%last_error%]) + )`; + const particle = peer.internals.createNewParticle(script); + + if (particle instanceof Error) { + return reject(particle.message); + } + + registerHandlersHelper(peer, particle, { + callback: { + callback: (args: any) => { + resolve(args); + }, + error: (args: any) => { + const [error] = args; + reject(error); + }, + }, + }); + + peer.internals.initiateParticle(particle, handleTimeout(reject)); + }); +} diff --git a/packages/fluence-js/aqua/tests/sig-tests.aqua b/packages/core/js-peer/src/__test__/integration/sigService.aqua similarity index 81% rename from packages/fluence-js/aqua/tests/sig-tests.aqua rename to packages/core/js-peer/src/__test__/integration/sigService.aqua index a3ca9a66..409f6b6f 100644 --- a/packages/fluence-js/aqua/tests/sig-tests.aqua +++ b/packages/core/js-peer/src/__test__/integration/sigService.aqua @@ -1,6 +1,6 @@ module Export -import SignResult, Sig from "../src/services.aqua" +import SignResult, Sig from "../../../aqua/services.aqua" export Sig, DataProvider, callSig service DataProvider("data"): diff --git a/packages/core/js-peer/src/__test__/integration/sigService.spec.ts b/packages/core/js-peer/src/__test__/integration/sigService.spec.ts new file mode 100644 index 00000000..3149721f --- /dev/null +++ b/packages/core/js-peer/src/__test__/integration/sigService.spec.ts @@ -0,0 +1,96 @@ +import path from 'path'; +import { KeyPair } from '@fluencelabs/keypair'; +import { allowServiceFn } from '../../builtins/securityGuard'; +import { Sig } from '../../builtins/Sig'; +import { compileAqua, withPeer } from '../util'; +import { registerServiceImpl } from '../../compilerSupport/registerService'; + +let aqua: any; +let sigDef: any; +let dataProviderDef: any; + +describe('Sig service test suite', () => { + beforeAll(async () => { + const { services, functions } = await compileAqua(path.join(__dirname, './sigService.aqua')); + aqua = functions; + sigDef = services.Sig; + dataProviderDef = services.DataProvider; + }); + + it('Use custom sig service, success path', async () => { + await withPeer(async (peer) => { + const customKeyPair = await KeyPair.randomEd25519(); + const customSig = new Sig(customKeyPair); + const data = [1, 2, 3, 4, 5]; + + registerServiceImpl(peer, sigDef, 'CustomSig', customSig); + + registerServiceImpl(peer, dataProviderDef, 'data', { + provide_data: () => { + return data; + }, + }); + + customSig.securityGuard = allowServiceFn('data', 'provide_data'); + + const result = await aqua.callSig(peer, { sigId: 'CustomSig' }); + + expect(result.success).toBe(true); + const isSigCorrect = await customSig.verify(result.signature as number[], data); + expect(isSigCorrect).toBe(true); + }); + }); + + it('Use custom sig service, fail path', async () => { + await withPeer(async (peer) => { + const customKeyPair = await KeyPair.randomEd25519(); + const customSig = new Sig(customKeyPair); + const data = [1, 2, 3, 4, 5]; + + registerServiceImpl(peer, sigDef, 'CustomSig', customSig); + + registerServiceImpl(peer, dataProviderDef, 'data', { + provide_data: () => { + return data; + }, + }); + + customSig.securityGuard = allowServiceFn('wrong', 'wrong'); + + const result = await aqua.callSig(peer, { sigId: 'CustomSig' }); + }); + }); + + it('Default sig service should be resolvable by peer id', async () => { + await withPeer(async (peer) => { + const sig = peer.getServices().sig; + + const data = [1, 2, 3, 4, 5]; + registerServiceImpl(peer, dataProviderDef, 'data', { + provide_data: () => { + return data; + }, + }); + + const callAsSigRes = await aqua.callSig(peer, { sigId: 'sig' }); + const callAsPeerIdRes = await aqua.callSig(peer, { sigId: peer.getStatus().peerId }); + + expect(callAsSigRes.success).toBe(false); + expect(callAsPeerIdRes.success).toBe(false); + + sig.securityGuard = () => true; + + const callAsSigResAfterGuardChange = await aqua.callSig(peer, { sigId: 'sig' }); + const callAsPeerIdResAfterGuardChange = await aqua.callSig(peer, { + sigId: peer.getStatus().peerId, + }); + + expect(callAsSigResAfterGuardChange.success).toBe(true); + expect(callAsPeerIdResAfterGuardChange.success).toBe(true); + + const isValid = await sig.verify(callAsSigResAfterGuardChange.signature as number[], data); + + expect(isValid).toBe(true); + }); + }); +}); diff --git a/packages/fluence-js/aqua/tests/srv-tests.aqua b/packages/core/js-peer/src/__test__/integration/srv.aqua similarity index 84% rename from packages/fluence-js/aqua/tests/srv-tests.aqua rename to packages/core/js-peer/src/__test__/integration/srv.aqua index f390062e..c564b127 100644 --- a/packages/fluence-js/aqua/tests/srv-tests.aqua +++ b/packages/core/js-peer/src/__test__/integration/srv.aqua @@ -1,7 +1,7 @@ module Export -import Srv from "../src/single-module-srv.aqua" -import NodeUtils from "../src/node-utils.aqua" +import Srv from "../../../aqua/single-module-srv.aqua" +import NodeUtils from "../../../aqua/node-utils.aqua" export happy_path, list_services, file_not_found, service_removed, removing_non_exiting service Greeting("greeting"): @@ -25,14 +25,18 @@ func file_not_found() -> string: <- e.error! func service_removed(file_path: string) -> string: + result: *string + file <- NodeUtils.read_file(file_path) created_service <- Srv.create(file.content!) Greeting created_service.service_id! Srv.remove(created_service.service_id!) try: dontcare <- Greeting.greeting("test") + result <<- "ok" catch e: - <- e.message + result <<- e.message + <- result! func removing_non_exiting() -> string: e <- Srv.remove("random_id") diff --git a/packages/core/js-peer/src/__test__/integration/srv.spec.ts b/packages/core/js-peer/src/__test__/integration/srv.spec.ts new file mode 100644 index 00000000..234b5c88 --- /dev/null +++ b/packages/core/js-peer/src/__test__/integration/srv.spec.ts @@ -0,0 +1,74 @@ +import path from 'path'; +import { compileAqua, withPeer } from '../util'; + +let aqua: any; + +describe('Srv service test suite', () => { + beforeAll(async () => { + const { services, functions } = await compileAqua(path.join(__dirname, './srv.aqua')); + aqua = functions; + }); + + it('Use custom srv service, success path', async () => { + await withPeer(async (peer) => { + // arrange + const wasm = path.join(__dirname, './greeting.wasm'); + + // act + const res = await aqua.happy_path(peer, { file_path: wasm }); + + // assert + expect(res).toBe('Hi, test'); + }); + }); + + it('List deployed services', async () => { + await withPeer(async (peer) => { + // arrange + const wasm = path.join(__dirname, './greeting.wasm'); + + // act + const res = await aqua.list_services(peer, { file_path: wasm }); + + // assert + expect(res).toHaveLength(3); + }); + }); + + it('Correct error for removed services', async () => { + await withPeer(async (peer) => { + // arrange + const wasm = path.join(__dirname, './greeting.wasm'); + + // act + const res = await aqua.service_removed(peer, { file_path: wasm }); + + // assert + expect(res).toMatch('No handler has been registered for serviceId'); + }); + }); + + it('Correct error for file not found', async () => { + await withPeer(async (peer) => { + // arrange + + // act + const res = await aqua.file_not_found(peer, {}); + + // assert + expect(res).toMatch("ENOENT: no such file or directory, open '/random/incorrect/file'"); + }); + }); + + it('Correct error for removing non existing service', async () => { + await withPeer(async (peer) => { + // arrange + + // act + const res = await aqua.removing_non_exiting(peer, {}); + + // assert + expect(res).toMatch('Service with id random_id not found'); + }); + }); +}); diff --git a/packages/fluence-js/src/__test__/unit/KeyPair.spec.ts b/packages/core/js-peer/src/__test__/unit/KeyPair.spec.ts similarity index 97% rename from packages/fluence-js/src/__test__/unit/KeyPair.spec.ts rename to packages/core/js-peer/src/__test__/unit/KeyPair.spec.ts index 978f92ce..91a48884 100644 --- a/packages/fluence-js/src/__test__/unit/KeyPair.spec.ts +++ b/packages/core/js-peer/src/__test__/unit/KeyPair.spec.ts @@ -1,5 +1,4 @@ import * as bs58 from 'bs58'; -import * as base64 from 'base64-js'; import { KeyPair } from '@fluencelabs/keypair'; describe('KeyPair tests', () => { diff --git a/packages/fluence-js/src/__test__/unit/ast.spec.ts b/packages/core/js-peer/src/__test__/unit/ast.spec.ts similarity index 79% rename from packages/fluence-js/src/__test__/unit/ast.spec.ts rename to packages/core/js-peer/src/__test__/unit/ast.spec.ts index 4a7aa75a..0a485967 100644 --- a/packages/fluence-js/src/__test__/unit/ast.spec.ts +++ b/packages/core/js-peer/src/__test__/unit/ast.spec.ts @@ -1,16 +1,17 @@ -import { Fluence } from '../../index'; +import { mkTestPeer } from '../util'; + +const peer = mkTestPeer(); describe('Parse ast tests', () => { beforeAll(async () => { - await Fluence.start(); + await peer.start(); }); afterAll(async () => { - await Fluence.stop(); + await peer.stop(); }); it('Correct ast should be parsed correctly', async function () { - const peer = Fluence.getPeer(); const air = `(null)`; const res = await peer.internals.parseAst(air); @@ -21,7 +22,6 @@ describe('Parse ast tests', () => { }); it('Incorrect ast should result in corresponding error', async function () { - const peer = Fluence.getPeer(); const air = `(null`; const res = await peer.internals.parseAst(air); diff --git a/packages/fluence-js/src/__test__/unit/builtInHandler.spec.ts b/packages/core/js-peer/src/__test__/unit/builtInHandler.spec.ts similarity index 98% rename from packages/fluence-js/src/__test__/unit/builtInHandler.spec.ts rename to packages/core/js-peer/src/__test__/unit/builtInHandler.spec.ts index d6722b3b..f17ff737 100644 --- a/packages/fluence-js/src/__test__/unit/builtInHandler.spec.ts +++ b/packages/core/js-peer/src/__test__/unit/builtInHandler.spec.ts @@ -1,10 +1,10 @@ -import { CallParams, CallServiceData } from '../../internal/commonTypes'; +import { CallParams, CallServiceData } from '../../commonTypes'; import each from 'jest-each'; -import { builtInServices } from '../../internal/builtins/common'; +import { builtInServices } from '../../builtins/common'; import { KeyPair } from '@fluencelabs/keypair'; -import { Sig, defaultSigGuard } from '../../internal/builtins/Sig'; +import { Sig, defaultSigGuard } from '../../builtins/Sig'; import { toUint8Array } from 'js-base64'; -import { allowServiceFn } from '../../internal/builtins/securityGuard'; +import { allowServiceFn } from '../../builtins/securityGuard'; const a10b20 = `{ "a": 10, diff --git a/packages/fluence-js/src/__test__/unit/compiler/v3.spec.ts b/packages/core/js-peer/src/__test__/unit/compiler/v3.spec.ts similarity index 98% rename from packages/fluence-js/src/__test__/unit/compiler/v3.spec.ts rename to packages/core/js-peer/src/__test__/unit/compiler/v3.spec.ts index 47c486fd..2eb7b6b9 100644 --- a/packages/fluence-js/src/__test__/unit/compiler/v3.spec.ts +++ b/packages/core/js-peer/src/__test__/unit/compiler/v3.spec.ts @@ -1,5 +1,5 @@ import each from 'jest-each'; -import { aqua2ts, ts2aqua } from '../../../internal/compilerSupport/v3impl/conversions'; +import { aqua2ts, ts2aqua } from '../../../compilerSupport/conversions'; const i32 = { tag: 'scalar', name: 'i32' } as const; diff --git a/packages/fluence-js/src/__test__/unit/ephemeral.spec.ts b/packages/core/js-peer/src/__test__/unit/ephemeral.spec.ts similarity index 86% rename from packages/fluence-js/src/__test__/unit/ephemeral.spec.ts rename to packages/core/js-peer/src/__test__/unit/ephemeral.spec.ts index 89b16ef4..9005b6aa 100644 --- a/packages/fluence-js/src/__test__/unit/ephemeral.spec.ts +++ b/packages/core/js-peer/src/__test__/unit/ephemeral.spec.ts @@ -1,18 +1,20 @@ import { KeyPair } from '@fluencelabs/keypair'; -import { EphemeralNetwork, defaultConfig } from '../../internal/ephemeral'; -import { FluencePeer } from '../../index'; -import { ResultCodes } from '../../internal/commonTypes'; +import { EphemeralNetwork, defaultConfig } from '../../ephemeral'; +import { ResultCodes } from '../../commonTypes'; +import { FluencePeer } from '../../FluencePeer'; +import { mkTestPeer } from '../util'; let en: EphemeralNetwork; let peer: FluencePeer; -describe('Ephemeral networks tests', () => { +// TODO: jest tests hang when running this test. Fix it (DXJ-219) +describe.skip('Ephemeral networks tests', () => { beforeEach(async () => { en = new EphemeralNetwork(defaultConfig); await en.up(); const relay = defaultConfig.peers[0].peerId; - peer = new FluencePeer(); + peer = mkTestPeer(); await peer.init({ KeyPair: await KeyPair.randomEd25519(), }); diff --git a/packages/core/js-peer/src/__test__/util.ts b/packages/core/js-peer/src/__test__/util.ts new file mode 100644 index 00000000..98bdb96b --- /dev/null +++ b/packages/core/js-peer/src/__test__/util.ts @@ -0,0 +1,73 @@ +import api from '@fluencelabs/aqua-api/aqua-api'; +import { InlinedWorkerLoader } from '@fluencelabs/marine.deps-loader.node'; + +import { promises as fs } from 'fs'; +import { FluencePeer, PeerConfig } from '../FluencePeer'; +import { Particle } from '../Particle'; +import { avmModuleLoader, controlModuleLoader, MakeServiceCall } from '../utils'; +import { ServiceDef } from '../compilerSupport/interface'; +import { callFunctionImpl } from '../compilerSupport/callFunction'; + +import { marineLogFunction } from '../utils'; +import { MarineBackgroundRunner } from '@fluencelabs/marine.background-runner'; +import { MarineBasedAvmRunner } from '../avm'; +import { nodes } from './connection'; + +export const registerHandlersHelper = ( + peer: FluencePeer, + particle: Particle, + handlers: Record>, +) => { + Object.entries(handlers).forEach(([serviceId, service]) => { + Object.entries(service).forEach(([fnName, fn]) => { + peer.internals.regHandler.forParticle(particle.id, serviceId, fnName, MakeServiceCall(fn)); + }); + }); +}; + +export type CompiledFnCall = (peer: FluencePeer, args: { [key: string]: any }) => Promise; +export type CompiledFile = { + functions: { [key: string]: CompiledFnCall }; + services: { [key: string]: ServiceDef }; +}; + +export const compileAqua = async (aquaFile: string): Promise => { + await fs.access(aquaFile); + + const compilationResult = await api.Aqua.compile(new api.Path(aquaFile), [], undefined); + + const functions = Object.entries(compilationResult.functions) + .map(([name, fnInfo]) => { + const callFn = (peer: FluencePeer, args: { [key: string]: any }) => { + return callFunctionImpl(fnInfo.funcDef, fnInfo.script, {}, peer, args); + }; + return { [name]: callFn }; + }) + .reduce((agg, obj) => { + return { ...agg, ...obj }; + }, {}); + + return { functions, services: compilationResult.services }; +}; + +export const mkTestPeer = () => { + const workerLoader = new InlinedWorkerLoader(); + + const marine = new MarineBackgroundRunner(workerLoader, controlModuleLoader, marineLogFunction); + const avm = new MarineBasedAvmRunner(marine, avmModuleLoader, undefined); + return new FluencePeer(marine, avm); +}; + +export const withPeer = async (action: (p: FluencePeer) => Promise, config?: PeerConfig) => { + const p = mkTestPeer(); + try { + await p.start(config); + await action(p); + } finally { + await p!.stop(); + } +}; + +export const withConnectedPeer = async (action: (p: FluencePeer) => Promise, config?: PeerConfig) => { + return withPeer(action, { connectTo: nodes[0] }); +}; diff --git a/packages/core/js-peer/src/_aqua/node-utils.ts b/packages/core/js-peer/src/_aqua/node-utils.ts new file mode 100644 index 00000000..1bd05d84 --- /dev/null +++ b/packages/core/js-peer/src/_aqua/node-utils.ts @@ -0,0 +1,81 @@ +/** + * + * 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.7-362 + * + */ +import { CallParams } from '../commonTypes'; +import { registerServiceImpl } from '../compilerSupport/registerService'; +import { FluencePeer } from '../FluencePeer'; + +// Services + +export interface NodeUtilsDef { + read_file: ( + path: string, + callParams: CallParams<'path'>, + ) => + | { content: string | null; error: string | null; success: boolean } + | Promise<{ content: string | null; error: string | null; success: boolean }>; +} + +export function registerNodeUtils(peer: FluencePeer, serviceId: string, service: any) { + registerServiceImpl( + peer, + { + defaultServiceId: 'node_utils', + functions: { + tag: 'labeledProduct', + fields: { + read_file: { + tag: 'arrow', + domain: { + tag: 'labeledProduct', + fields: { + path: { + tag: 'scalar', + name: 'string', + }, + }, + }, + codomain: { + tag: 'unlabeledProduct', + items: [ + { + tag: 'struct', + name: 'ReadFileResult', + fields: { + content: { + tag: 'option', + type: { + tag: 'scalar', + name: 'string', + }, + }, + error: { + tag: 'option', + type: { + tag: 'scalar', + name: 'string', + }, + }, + success: { + tag: 'scalar', + name: 'bool', + }, + }, + }, + ], + }, + }, + }, + }, + }, + serviceId, + service, + ); +} + +// Functions diff --git a/packages/core/js-peer/src/_aqua/services.ts b/packages/core/js-peer/src/_aqua/services.ts new file mode 100644 index 00000000..5fa7535d --- /dev/null +++ b/packages/core/js-peer/src/_aqua/services.ts @@ -0,0 +1,139 @@ +/** + * + * 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.7-362 + * + */ +import { CallParams } from '../commonTypes'; +import { registerServiceImpl } from '../compilerSupport/registerService'; +import { FluencePeer } from '../FluencePeer'; + +// Services + +export interface SigDef { + get_peer_id: (callParams: CallParams) => string | Promise; + sign: ( + data: number[], + callParams: CallParams<'data'>, + ) => + | { error: string | null; signature: number[] | null; success: boolean } + | Promise<{ error: string | null; signature: number[] | null; success: boolean }>; + verify: ( + signature: number[], + data: number[], + callParams: CallParams<'signature' | 'data'>, + ) => boolean | Promise; +} + +export function registerSig(peer: FluencePeer, serviceId: string, service: any) { + registerServiceImpl( + peer, + { + defaultServiceId: 'sig', + functions: { + tag: 'labeledProduct', + fields: { + get_peer_id: { + tag: 'arrow', + domain: { + tag: 'nil', + }, + codomain: { + tag: 'unlabeledProduct', + items: [ + { + tag: 'scalar', + name: 'string', + }, + ], + }, + }, + sign: { + tag: 'arrow', + domain: { + tag: 'labeledProduct', + fields: { + data: { + tag: 'array', + type: { + tag: 'scalar', + name: 'u8', + }, + }, + }, + }, + codomain: { + tag: 'unlabeledProduct', + items: [ + { + tag: 'struct', + name: 'SignResult', + fields: { + error: { + tag: 'option', + type: { + tag: 'scalar', + name: 'string', + }, + }, + signature: { + tag: 'option', + type: { + tag: 'array', + type: { + tag: 'scalar', + name: 'u8', + }, + }, + }, + success: { + tag: 'scalar', + name: 'bool', + }, + }, + }, + ], + }, + }, + verify: { + tag: 'arrow', + domain: { + tag: 'labeledProduct', + fields: { + signature: { + tag: 'array', + type: { + tag: 'scalar', + name: 'u8', + }, + }, + data: { + tag: 'array', + type: { + tag: 'scalar', + name: 'u8', + }, + }, + }, + }, + codomain: { + tag: 'unlabeledProduct', + items: [ + { + tag: 'scalar', + name: 'bool', + }, + ], + }, + }, + }, + }, + }, + serviceId, + service, + ); +} + +// Functions diff --git a/packages/core/js-peer/src/_aqua/single-module-srv.ts b/packages/core/js-peer/src/_aqua/single-module-srv.ts new file mode 100644 index 00000000..0ca0bff2 --- /dev/null +++ b/packages/core/js-peer/src/_aqua/single-module-srv.ts @@ -0,0 +1,138 @@ +/** + * + * 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.7-362 + * + */ +import { CallParams } from '../commonTypes'; +import { registerServiceImpl } from '../compilerSupport/registerService'; +import { FluencePeer } from '../FluencePeer'; + +// Services + +export interface SrvDef { + create: ( + wasm_b64_content: string, + callParams: CallParams<'wasm_b64_content'>, + ) => + | { error: string | null; service_id: string | null; success: boolean } + | Promise<{ error: string | null; service_id: string | null; success: boolean }>; + list: (callParams: CallParams) => string[] | Promise; + remove: ( + service_id: string, + callParams: CallParams<'service_id'>, + ) => { error: string | null; success: boolean } | Promise<{ error: string | null; success: boolean }>; +} + +export function registerSrv(peer: FluencePeer, serviceId: string, service: any) { + registerServiceImpl( + peer, + { + defaultServiceId: 'single_module_srv', + functions: { + tag: 'labeledProduct', + fields: { + create: { + tag: 'arrow', + domain: { + tag: 'labeledProduct', + fields: { + wasm_b64_content: { + tag: 'scalar', + name: 'string', + }, + }, + }, + codomain: { + tag: 'unlabeledProduct', + items: [ + { + tag: 'struct', + name: 'ServiceCreationResult', + fields: { + error: { + tag: 'option', + type: { + tag: 'scalar', + name: 'string', + }, + }, + service_id: { + tag: 'option', + type: { + tag: 'scalar', + name: 'string', + }, + }, + success: { + tag: 'scalar', + name: 'bool', + }, + }, + }, + ], + }, + }, + list: { + tag: 'arrow', + domain: { + tag: 'nil', + }, + codomain: { + tag: 'unlabeledProduct', + items: [ + { + tag: 'array', + type: { + tag: 'scalar', + name: 'string', + }, + }, + ], + }, + }, + remove: { + tag: 'arrow', + domain: { + tag: 'labeledProduct', + fields: { + service_id: { + tag: 'scalar', + name: 'string', + }, + }, + }, + codomain: { + tag: 'unlabeledProduct', + items: [ + { + tag: 'struct', + name: 'RemoveResult', + fields: { + error: { + tag: 'option', + type: { + tag: 'scalar', + name: 'string', + }, + }, + success: { + tag: 'scalar', + name: 'bool', + }, + }, + }, + ], + }, + }, + }, + }, + }, + serviceId, + service, + ); +} + +// Functions diff --git a/packages/core/js-peer/src/avm.ts b/packages/core/js-peer/src/avm.ts new file mode 100644 index 00000000..fd1e8a7c --- /dev/null +++ b/packages/core/js-peer/src/avm.ts @@ -0,0 +1,36 @@ +import type { CallResultsArray, InterpreterResult, RunParameters } from '@fluencelabs/avm'; +import { deserializeAvmResult, serializeAvmArgs } from '@fluencelabs/avm'; +import type { LogLevel } from '@fluencelabs/marine-js'; +import type { IMarine, IAvmRunner, IWasmLoader } from '@fluencelabs/interfaces'; + +export class MarineBasedAvmRunner implements IAvmRunner { + constructor(private marine: IMarine, private avmWasmLoader: IWasmLoader, private logLevel: LogLevel | undefined) {} + + async run( + runParams: RunParameters, + air: string, + prevData: Uint8Array, + data: Uint8Array, + callResults: CallResultsArray, + ): Promise { + const args = serializeAvmArgs(runParams, air, prevData, data, callResults); + + let avmCallResult: InterpreterResult | Error; + try { + const res = await this.marine.callService('avm', 'invoke', args, undefined); + avmCallResult = deserializeAvmResult(res); + } catch (e) { + avmCallResult = e instanceof Error ? e : new Error((e as any).toString()); + } + + return avmCallResult; + } + + async start(): Promise { + await this.marine.start(); + await this.avmWasmLoader.start(); + await this.marine.createService(this.avmWasmLoader.getValue(), 'avm', this.logLevel); + } + + async stop(): Promise {} +} diff --git a/packages/fluence-js/src/internal/builtins/Sig.ts b/packages/core/js-peer/src/builtins/Sig.ts similarity index 100% rename from packages/fluence-js/src/internal/builtins/Sig.ts rename to packages/core/js-peer/src/builtins/Sig.ts diff --git a/packages/fluence-js/src/internal/builtins/SingleModuleSrv.ts b/packages/core/js-peer/src/builtins/SingleModuleSrv.ts similarity index 92% rename from packages/fluence-js/src/internal/builtins/SingleModuleSrv.ts rename to packages/core/js-peer/src/builtins/SingleModuleSrv.ts index c817bfe0..76a1aeb7 100644 --- a/packages/fluence-js/src/internal/builtins/SingleModuleSrv.ts +++ b/packages/core/js-peer/src/builtins/SingleModuleSrv.ts @@ -2,7 +2,6 @@ import { v4 as uuidv4 } from 'uuid'; import { SrvDef } from '../_aqua/single-module-srv'; import { NodeUtilsDef } from '../_aqua/node-utils'; import { FluencePeer } from '../FluencePeer'; -import { isNode } from 'browser-or-node'; import { CallParams } from '../commonTypes'; import { allowOnlyParticleOriginatedAt, SecurityGuard } from './securityGuard'; @@ -87,13 +86,14 @@ export class NodeUtils implements NodeUtilsDef { securityGuard_readFile: SecurityGuard<'path'> = defaultGuard(this.peer); async read_file(path: string, callParams: CallParams<'path'>) { - if (!isNode) { - return { - success: false, - error: 'read_file is only supported in node.js', - content: null, - }; - } + // TODO: split node-only and universal services into different client packages + // if (!isNode) { + // return { + // success: false, + // error: 'read_file is only supported in node.js', + // content: null, + // }; + // } if (!this.securityGuard_readFile(callParams)) { return { diff --git a/packages/fluence-js/src/internal/builtins/common.ts b/packages/core/js-peer/src/builtins/common.ts similarity index 97% rename from packages/fluence-js/src/internal/builtins/common.ts rename to packages/core/js-peer/src/builtins/common.ts index 0a0cd8af..be6cff4d 100644 --- a/packages/fluence-js/src/internal/builtins/common.ts +++ b/packages/core/js-peer/src/builtins/common.ts @@ -20,7 +20,7 @@ import { CallServiceResult } from '@fluencelabs/avm'; import { CallServiceData, GenericCallServiceHandler, ResultCodes } from '../commonTypes'; import { jsonify } from '../utils'; -import Buffer from '../Buffer'; +import { Buffer } from 'buffer'; const success = (result: any): CallServiceResult => { return { @@ -501,7 +501,7 @@ export const builtInServices: Record { export const isObject = (unknown: unknown): unknown is object => { return unknown !== null && typeof unknown === 'object'; }; - diff --git a/packages/fluence-js/src/internal/builtins/securityGuard.ts b/packages/core/js-peer/src/builtins/securityGuard.ts similarity index 100% rename from packages/fluence-js/src/internal/builtins/securityGuard.ts rename to packages/core/js-peer/src/builtins/securityGuard.ts diff --git a/packages/fluence-js/src/internal/commonTypes.ts b/packages/core/js-peer/src/commonTypes.ts similarity index 100% rename from packages/fluence-js/src/internal/commonTypes.ts rename to packages/core/js-peer/src/commonTypes.ts diff --git a/packages/fluence-js/src/internal/compilerSupport/v3impl/callFunction.ts b/packages/core/js-peer/src/compilerSupport/callFunction.ts similarity index 60% rename from packages/fluence-js/src/internal/compilerSupport/v3impl/callFunction.ts rename to packages/core/js-peer/src/compilerSupport/callFunction.ts index 95c117e6..e8d5739d 100644 --- a/packages/fluence-js/src/internal/compilerSupport/v3impl/callFunction.ts +++ b/packages/core/js-peer/src/compilerSupport/callFunction.ts @@ -1,6 +1,6 @@ -import { FnConfig, FunctionCallDef } from './interface'; -import { FluencePeer } from '../../FluencePeer'; -import { Fluence } from '../../../index'; +import { ArrowWithoutCallbacks, FnConfig, FunctionCallDef, NonArrowType } from './interface'; +import { FluencePeer } from '../FluencePeer'; + import { injectRelayService, registerParticleScopeService, @@ -11,20 +11,6 @@ import { injectValueService, } from './services'; -/** - * Convenience function to support Aqua `func` generation backend - * The compiler only need to generate a call the function and provide the corresponding definitions and the air script - * - * @param rawFnArgs - raw arguments passed by user to the generated function - * @param def - function definition generated by the Aqua compiler - * @param script - air script with function execution logic generated by the Aqua compiler - */ -export function callFunction(rawFnArgs: Array, def: FunctionCallDef, script: string): Promise { - const { args, peer, config } = extractArgs(rawFnArgs, def); - - return callFunctionImpl(def, script, config || {}, peer, args); -} - /** * Convenience function which does all the internal work of creating particles * and making necessary service registrations in order to support Aqua function calls @@ -96,7 +82,7 @@ export function callFunctionImpl( return promise; } -const isReturnTypeVoid = (def: FunctionCallDef) => { +const isReturnTypeVoid = (def: FunctionCallDef): boolean => { if (def.arrow.codomain.tag === 'nil') { return true; } @@ -104,55 +90,11 @@ const isReturnTypeVoid = (def: FunctionCallDef) => { return def.arrow.codomain.items.length == 0; }; -/** - * Arguments could be passed in one these configurations: - * [...actualArgs] - * [peer, ...actualArgs] - * [...actualArgs, config] - * [peer, ...actualArgs, config] - * - * This function select the appropriate configuration and returns - * arguments in a structured way of: { peer, config, args } - */ -const extractArgs = ( - args: any[], +export const getArgumentTypes = ( def: FunctionCallDef, ): { - peer: FluencePeer; - config?: FnConfig; - args: { [key: string]: any }; + [key: string]: NonArrowType | ArrowWithoutCallbacks; } => { - const argumentTypes = getArgumentTypes(def); - const argumentNames = Object.keys(argumentTypes); - const numberOfExpectedArgs = argumentNames.length; - - let peer: FluencePeer; - let structuredArgs: any[]; - let config: FnConfig; - if (FluencePeer.isInstance(args[0])) { - peer = args[0]; - structuredArgs = args.slice(1, numberOfExpectedArgs + 1); - config = args[numberOfExpectedArgs + 1]; - } else { - peer = Fluence.getPeer(); - structuredArgs = args.slice(0, numberOfExpectedArgs); - config = args[numberOfExpectedArgs]; - } - - if (structuredArgs.length !== numberOfExpectedArgs) { - throw new Error(`Incorrect number of arguments. Expecting ${numberOfExpectedArgs}`); - } - - const argsRes = argumentNames.reduce((acc, name, index) => ({ ...acc, [name]: structuredArgs[index] }), {}); - - return { - peer: peer, - config: config, - args: argsRes, - }; -}; - -const getArgumentTypes = (def: FunctionCallDef) => { if (def.arrow.domain.tag !== 'labeledProduct') { throw new Error('Should be impossible'); } diff --git a/packages/fluence-js/src/internal/compilerSupport/v3impl/conversions.ts b/packages/core/js-peer/src/compilerSupport/conversions.ts similarity index 96% rename from packages/fluence-js/src/internal/compilerSupport/v3impl/conversions.ts rename to packages/core/js-peer/src/compilerSupport/conversions.ts index 578d491b..39e46e79 100644 --- a/packages/fluence-js/src/internal/compilerSupport/v3impl/conversions.ts +++ b/packages/core/js-peer/src/compilerSupport/conversions.ts @@ -1,7 +1,7 @@ -import { jsonify } from '../../utils'; +import { jsonify } from '../utils'; import { match } from 'ts-pattern'; -import { ArrowType, ArrowWithoutCallbacks, NonArrowType, UnlabeledProductType } from './interface'; -import { CallServiceData } from 'src/internal/commonTypes'; +import { ArrowType, ArrowWithoutCallbacks, NonArrowType } from './interface'; +import { CallServiceData } from '../commonTypes'; /** * Convert value from its representation in aqua language to representation in typescript diff --git a/packages/fluence-js/src/internal/compilerSupport/v3impl/interface.ts b/packages/core/js-peer/src/compilerSupport/interface.ts similarity index 100% rename from packages/fluence-js/src/internal/compilerSupport/v3impl/interface.ts rename to packages/core/js-peer/src/compilerSupport/interface.ts diff --git a/packages/core/js-peer/src/compilerSupport/registerService.ts b/packages/core/js-peer/src/compilerSupport/registerService.ts new file mode 100644 index 00000000..38990e16 --- /dev/null +++ b/packages/core/js-peer/src/compilerSupport/registerService.ts @@ -0,0 +1,45 @@ +import type { FluencePeer } from '../FluencePeer'; +import { ServiceDef } from './interface'; +import { registerGlobalService, userHandlerService } from './services'; + +export const registerServiceImpl = ( + peer: FluencePeer, + def: ServiceDef, + serviceId: string | undefined, + service: any, +) => { + if (!peer.getStatus().isInitialized) { + throw new Error( + 'Could not register the service because the peer is not initialized. Are you passing the wrong peer to the register function?', + ); + } + + // Checking for missing keys + const requiredKeys = def.functions.tag === 'nil' ? [] : Object.keys(def.functions.fields); + const incorrectServiceDefinitions = requiredKeys.filter((f) => !(f in service)); + if (!!incorrectServiceDefinitions.length) { + throw new Error( + `Error registering service ${serviceId}: missing functions: ` + + incorrectServiceDefinitions.map((d) => "'" + d + "'").join(', '), + ); + } + + if (!serviceId) { + serviceId = def.defaultServiceId; + } + + if (!serviceId) { + throw new Error('Service ID must be specified'); + } + + const singleFunctions = def.functions.tag === 'nil' ? [] : Object.entries(def.functions.fields); + for (let singleFunction of singleFunctions) { + let [name, type] = singleFunction; + // The function has type of (arg1, arg2, arg3, ... , callParams) => CallServiceResultType | void + // Account for the fact that user service might be defined as a class - .bind(...) + const userDefinedHandler = service[name].bind(service); + + const serviceDescription = userHandlerService(serviceId, singleFunction, userDefinedHandler); + registerGlobalService(peer, serviceDescription); + } +}; diff --git a/packages/fluence-js/src/internal/compilerSupport/v3impl/services.ts b/packages/core/js-peer/src/compilerSupport/services.ts similarity index 97% rename from packages/fluence-js/src/internal/compilerSupport/v3impl/services.ts rename to packages/core/js-peer/src/compilerSupport/services.ts index b8e5ff40..19f8ef42 100644 --- a/packages/fluence-js/src/internal/compilerSupport/v3impl/services.ts +++ b/packages/core/js-peer/src/compilerSupport/services.ts @@ -1,9 +1,9 @@ import { SecurityTetraplet } from '@fluencelabs/avm'; import { match } from 'ts-pattern'; -import { Particle } from '../../Particle'; -import { CallParams, CallServiceData, GenericCallServiceHandler, ResultCodes } from '../../commonTypes'; -import { FluencePeer } from '../../FluencePeer'; +import { Particle } from '../Particle'; +import { CallParams, CallServiceData, GenericCallServiceHandler, ResultCodes } from '../commonTypes'; +import { FluencePeer } from '../FluencePeer'; import { aquaArgs2Ts, responseServiceValue2ts, returnType2Aqua, ts2aqua } from './conversions'; import { ArrowWithoutCallbacks, FunctionCallConstants, FunctionCallDef, NonArrowType } from './interface'; diff --git a/packages/fluence-js/src/internal/ephemeral.ts b/packages/core/js-peer/src/ephemeral.ts similarity index 92% rename from packages/fluence-js/src/internal/ephemeral.ts rename to packages/core/js-peer/src/ephemeral.ts index ed6a4d85..e472b9c1 100644 --- a/packages/fluence-js/src/internal/ephemeral.ts +++ b/packages/core/js-peer/src/ephemeral.ts @@ -1,9 +1,14 @@ import { FluenceConnection, ParticleHandler } from '@fluencelabs/interfaces'; +import { InlinedWorkerLoader } from '@fluencelabs/marine.deps-loader.node'; + import { keyPairFromBase64Sk } from '@fluencelabs/keypair'; import { PeerIdB58 } from './commonTypes'; -import { FluencePeer } from '../index'; +import { FluencePeer } from './FluencePeer'; import log from 'loglevel'; +import { MarineBackgroundRunner } from '@fluencelabs/marine.background-runner'; +import { avmModuleLoader, controlModuleLoader, marineLogFunction } from './utils'; +import { MarineBasedAvmRunner } from './avm'; interface EphemeralConfig { peers: Array<{ @@ -120,8 +125,14 @@ export class EphemeralNetwork { async up(): Promise { log.debug('Starting ephemeral network up...'); const allPeerIds = this.config.peers.map((x) => x.peerId); + // shared worker for all the peers + const workerLoader = new InlinedWorkerLoader(); + const promises = this.config.peers.map(async (x) => { - const peer = new FluencePeer(); + const logLevel = undefined; + const marine = new MarineBackgroundRunner(workerLoader, controlModuleLoader, marineLogFunction); + const avm = new MarineBasedAvmRunner(marine, avmModuleLoader, logLevel); + const peer = new FluencePeer(marine, avm); const sendParticle = async (nextPeerIds: string[], particle: string): Promise => { this._send(peer.getStatus().peerId!, nextPeerIds, particle); }; @@ -129,7 +140,6 @@ export class EphemeralNetwork { if (kp.getPeerId() !== x.peerId) { throw new Error(`Invalid config: peer id ${x.peerId} does not match the secret key ${x.sk}`); } - await peer.init({ KeyPair: kp, }); @@ -189,7 +199,6 @@ export class EphemeralNetwork { if (relayPeer === undefined) { throw new Error(`Relay with peer Id: ${relay} has not been found in ephemeral network`); } - const connectionCtor = class extends FluenceConnection { relayPeerId = relay; @@ -210,13 +219,11 @@ export class EphemeralNetwork { relayPeer.connections.delete(peerId); me._peers.delete(peerId); } - async sendParticle(nextPeerIds: string[], particle: string): Promise { const peerId = peer.getStatus().peerId!; me._send(peerId, nextPeerIds, particle); } }; - return new connectionCtor(); } diff --git a/packages/fluence-js/src/internal/utils.ts b/packages/core/js-peer/src/utils.ts similarity index 84% rename from packages/fluence-js/src/internal/utils.ts rename to packages/core/js-peer/src/utils.ts index e0adef2b..78494648 100644 --- a/packages/fluence-js/src/internal/utils.ts +++ b/packages/core/js-peer/src/utils.ts @@ -13,16 +13,16 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -import 'buffer'; import log from 'loglevel'; import platform from 'platform'; -import { LogLevel } from '@fluencelabs/avm'; +import { Buffer } from 'buffer'; import { CallServiceData, CallServiceResult, CallServiceResultType, ResultCodes } from './commonTypes'; import { FluencePeer } from './FluencePeer'; import { ParticleExecutionStage } from './Particle'; -import Buffer from './Buffer'; +import { LogFunction } from '@fluencelabs/marine-js'; +import { WasmNpmLoader } from '@fluencelabs/marine.deps-loader.node'; export const MakeServiceCall = (fn: (args: any[]) => CallServiceResultType) => @@ -165,15 +165,6 @@ export function throwIfNotSupported() { } } -/** - * Enum representing the log level used in Aqua VM. - * Possible values: 'info', 'trace', 'debug', 'info', 'warn', 'error', 'off'; - */ -export type MarineLoglevel = LogLevel; - -export const marineLogLevelToEnvs = (marineLogLevel: MarineLoglevel | undefined) => - marineLogLevel ? { WASM_LOG: marineLogLevel } : undefined; - export const isString = (x: unknown): x is string => { return x !== null && typeof x === 'string'; }; @@ -185,3 +176,32 @@ export class ServiceError extends Error { Object.setPrototypeOf(this, ServiceError.prototype); } } + +export const marineLogFunction: LogFunction = (message) => { + const str = `[marine service "${message.service}"]: ${message.message}`; + + const nodeProcess = (globalThis as any).process ? (globalThis as any).process : undefined; + if (nodeProcess && nodeProcess.stderr) { + nodeProcess.stderr.write(str); + return; + } + + switch (message.level) { + case 'warn': + console.warn(str); + break; + + case 'error': + console.error(str); + break; + + case 'debug': + case 'trace': + case 'info': + console.log(str); + break; + } +}; + +export const controlModuleLoader = new WasmNpmLoader('@fluencelabs/marine-js', 'marine-js.wasm'); +export const avmModuleLoader = new WasmNpmLoader('@fluencelabs/avm', 'avm.wasm'); diff --git a/packages/core/js-peer/tsconfig.json b/packages/core/js-peer/tsconfig.json new file mode 100644 index 00000000..0d2020f2 --- /dev/null +++ b/packages/core/js-peer/tsconfig.json @@ -0,0 +1,21 @@ +{ + "compilerOptions": { + "outDir": "./dist/", + "baseUrl": ".", + "downlevelIteration": true, + "sourceMap": true, + "inlineSources": true, + "allowSyntheticDefaultImports": true, + "resolveJsonModule": true, + "target": "ES5", + "module": "commonjs", + "moduleResolution": "node", + "declaration": true, + "esModuleInterop": true, + "declarationMap": true, + "strict": true, + "skipLibCheck": true + }, + "exclude": ["node_modules", "dist", "bundle"], + "include": ["src/**/*"] +} diff --git a/packages/core/keypair/.gitignore b/packages/core/keypair/.gitignore new file mode 100644 index 00000000..1a59a95f --- /dev/null +++ b/packages/core/keypair/.gitignore @@ -0,0 +1,21 @@ +# Logs +logs +*.log +npm-debug.log* +yarn-debug.log* +yarn-error.log* +lerna-debug.log* + +# Compiled binary addons (https://nodejs.org/api/addons.html) +build/Release +bundle/ + +dist +esm +types + +# Dependency directories +node_modules/ +jspm_packages/ + +.idea diff --git a/packages/core/keypair/.npmignore b/packages/core/keypair/.npmignore new file mode 100644 index 00000000..1354879a --- /dev/null +++ b/packages/core/keypair/.npmignore @@ -0,0 +1,12 @@ +.idea +.gitignore +node_modules +types + +src/ + +tsconfig.json +webpack.config.js + +bundle +pkg \ No newline at end of file diff --git a/packages/core/keypair/.prettierrc.js b/packages/core/keypair/.prettierrc.js new file mode 100644 index 00000000..4e5ea887 --- /dev/null +++ b/packages/core/keypair/.prettierrc.js @@ -0,0 +1,8 @@ +module.exports = { + semi: true, + trailingComma: "all", + singleQuote: true, + printWidth: 120, + tabWidth: 4, + useTabs: false +}; diff --git a/packages/core/keypair/CONTRIBUTING.md b/packages/core/keypair/CONTRIBUTING.md new file mode 100644 index 00000000..0e3b264d --- /dev/null +++ b/packages/core/keypair/CONTRIBUTING.md @@ -0,0 +1,13 @@ +## Contribute Code + +You are welcome to contribute to Fluence. + +Things you need to know: + +1. You need to **agree to the Contributors License Agreement**. This is a common practice in all major Open Source projects. At the current moment we are unable to accept contributions made on behalf of a company. Only individual contributions will be accepted. +2. **Not all proposed contributions can be accepted**. Some features may e.g. just fit a third-party add-on better. The contribution must fit the overall direction of Fluence and really improve it. The more effort you invest, the better you should clarify in advance whether the contribution fits: the best way would be to just open an issue to discuss the contribution you plan to make. + +### Contributor License Agreement + +When you contribute, you have to be aware that your contribution is covered by **Apache License 2.0**, but might relicensed under few other software licenses mentioned in the **Contributor License Agreement**. +In particular you need to agree to the [Contributor License Agreement](https://gist.github.com/fluencelabs-org/3f4cbb3cc14c1c0fb9ad99d8f7316ed7). If you agree to its content, you simply have to click on the link posted by the CLA assistant as a comment to the pull request. Click it to check the CLA, then accept it on the following screen if you agree to it. CLA assistant will save this decision for upcoming contributions and will notify you if there is any change to the CLA in the meantime. diff --git a/packages/fluence-keypair/README.md b/packages/core/keypair/README.md similarity index 100% rename from packages/fluence-keypair/README.md rename to packages/core/keypair/README.md diff --git a/packages/fluence-keypair/package.json b/packages/core/keypair/package.json similarity index 90% rename from packages/fluence-keypair/package.json rename to packages/core/keypair/package.json index 3dc06e4f..05a32b48 100644 --- a/packages/fluence-keypair/package.json +++ b/packages/core/keypair/package.json @@ -17,9 +17,9 @@ "dependencies": { "peer-id": "0.16.0", "libp2p-crypto": "0.21.2", - "js-base64": "^3.7.2" + "js-base64": "3.7.2" }, "devDependencies": { - "typescript": "^4.6.4" + "typescript": "4.6.4" } } diff --git a/packages/fluence-keypair/src/index.ts b/packages/core/keypair/src/index.ts similarity index 100% rename from packages/fluence-keypair/src/index.ts rename to packages/core/keypair/src/index.ts diff --git a/packages/fluence-keypair/tsconfig.json b/packages/core/keypair/tsconfig.json similarity index 100% rename from packages/fluence-keypair/tsconfig.json rename to packages/core/keypair/tsconfig.json diff --git a/packages/fluence-interfaces/src/index.ts b/packages/fluence-interfaces/src/index.ts deleted file mode 100644 index 846b75f2..00000000 --- a/packages/fluence-interfaces/src/index.ts +++ /dev/null @@ -1,29 +0,0 @@ -/* - * Copyright 2020 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. - */ - -export type PeerIdB58 = string; - -export type ParticleHandler = (particle: string) => void; - -/** - * Base class for connectivity layer to Fluence Network - */ -export abstract class FluenceConnection { - abstract readonly relayPeerId: PeerIdB58 | null; - abstract connect(onIncomingParticle: ParticleHandler): Promise; - abstract disconnect(): Promise; - abstract sendParticle(nextPeerIds: PeerIdB58[], particle: string): Promise; -} diff --git a/packages/fluence-js/aqua/tests/marine-js-logging.aqua b/packages/fluence-js/aqua/tests/marine-js-logging.aqua deleted file mode 100644 index 9ca1ff92..00000000 --- a/packages/fluence-js/aqua/tests/marine-js-logging.aqua +++ /dev/null @@ -1,16 +0,0 @@ -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/packages/fluence-js/src/__test__/_aqua/marine-js-logging.ts b/packages/fluence-js/src/__test__/_aqua/marine-js-logging.ts deleted file mode 100644 index 96690aa2..00000000 --- a/packages/fluence-js/src/__test__/_aqua/marine-js-logging.ts +++ /dev/null @@ -1,168 +0,0 @@ -/** - * - * 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.7-362 - * - */ -import { FluencePeer } from '../../index'; -import type { CallParams$$ } from '../../internal/compilerSupport/v4'; -import { callFunction$$, registerService$$ } from '../../internal/compilerSupport/v4'; - -// 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/packages/fluence-js/src/__test__/_aqua/marine-js.ts b/packages/fluence-js/src/__test__/_aqua/marine-js.ts deleted file mode 100644 index 19afb8c2..00000000 --- a/packages/fluence-js/src/__test__/_aqua/marine-js.ts +++ /dev/null @@ -1,151 +0,0 @@ -/** - * - * 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.7-362 - * - */ -import { FluencePeer } from '../../index'; -import type { CallParams$$ } from '../../internal/compilerSupport/v4'; -import { callFunction$$, registerService$$ } from '../../internal/compilerSupport/v4'; - -// Services - -export interface GreetingDef { - greeting: (name: string, callParams: CallParams$$<'name'>) => string | Promise; - greeting_record: ( - callParams: CallParams$$, - ) => { 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; - -export function call(peer: FluencePeer, arg: string, config?: { ttl?: number }): Promise; - -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, - ); -} diff --git a/packages/fluence-js/src/__test__/_aqua/sig-tests.ts b/packages/fluence-js/src/__test__/_aqua/sig-tests.ts deleted file mode 100644 index 4beeb34a..00000000 --- a/packages/fluence-js/src/__test__/_aqua/sig-tests.ts +++ /dev/null @@ -1,264 +0,0 @@ -/** - * - * 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.7-362 - * - */ -import { FluencePeer } from '../../index'; -import type { CallParams$$ } from '../../internal/compilerSupport/v4'; -import { callFunction$$, registerService$$ } from '../../internal/compilerSupport/v4'; - -// Services - -export interface DataProviderDef { - provide_data: (callParams: CallParams$$) => number[] | Promise; -} -export function registerDataProvider(service: DataProviderDef): void; -export function registerDataProvider(serviceId: string, service: DataProviderDef): void; -export function registerDataProvider(peer: FluencePeer, service: DataProviderDef): void; -export function registerDataProvider(peer: FluencePeer, serviceId: string, service: DataProviderDef): void; - -export function registerDataProvider(...args: any) { - registerService$$(args, { - defaultServiceId: 'data', - functions: { - tag: 'labeledProduct', - fields: { - provide_data: { - tag: 'arrow', - domain: { - tag: 'nil', - }, - codomain: { - tag: 'unlabeledProduct', - items: [ - { - tag: 'array', - type: { - tag: 'scalar', - name: 'u8', - }, - }, - ], - }, - }, - }, - }, - }); -} - -export interface SigDef { - get_peer_id: (callParams: CallParams$$) => string | Promise; - sign: ( - data: number[], - callParams: CallParams$$<'data'>, - ) => - | { error: string | null; signature: number[] | null; success: boolean } - | Promise<{ error: string | null; signature: number[] | null; success: boolean }>; - verify: ( - signature: number[], - data: number[], - callParams: CallParams$$<'signature' | 'data'>, - ) => boolean | Promise; -} -export function registerSig(service: SigDef): void; -export function registerSig(serviceId: string, service: SigDef): void; -export function registerSig(peer: FluencePeer, service: SigDef): void; -export function registerSig(peer: FluencePeer, serviceId: string, service: SigDef): void; - -export function registerSig(...args: any) { - registerService$$(args, { - defaultServiceId: 'sig', - functions: { - tag: 'labeledProduct', - fields: { - get_peer_id: { - tag: 'arrow', - domain: { - tag: 'nil', - }, - codomain: { - tag: 'unlabeledProduct', - items: [ - { - tag: 'scalar', - name: 'string', - }, - ], - }, - }, - sign: { - tag: 'arrow', - domain: { - tag: 'labeledProduct', - fields: { - data: { - tag: 'array', - type: { - tag: 'scalar', - name: 'u8', - }, - }, - }, - }, - codomain: { - tag: 'unlabeledProduct', - items: [ - { - tag: 'struct', - name: 'SignResult', - fields: { - error: { - tag: 'option', - type: { - tag: 'scalar', - name: 'string', - }, - }, - signature: { - tag: 'option', - type: { - tag: 'array', - type: { - tag: 'scalar', - name: 'u8', - }, - }, - }, - success: { - tag: 'scalar', - name: 'bool', - }, - }, - }, - ], - }, - }, - verify: { - tag: 'arrow', - domain: { - tag: 'labeledProduct', - fields: { - signature: { - tag: 'array', - type: { - tag: 'scalar', - name: 'u8', - }, - }, - data: { - tag: 'array', - type: { - tag: 'scalar', - name: 'u8', - }, - }, - }, - }, - codomain: { - tag: 'unlabeledProduct', - items: [ - { - tag: 'scalar', - name: 'bool', - }, - ], - }, - }, - }, - }, - }); -} - -// Functions - -export type CallSigResult = { error: string | null; signature: number[] | null; success: boolean }; -export function callSig(sigId: string, config?: { ttl?: number }): Promise; - -export function callSig(peer: FluencePeer, sigId: string, config?: { ttl?: number }): Promise; - -export function callSig(...args: any) { - let script = ` - (xor - (seq - (seq - (seq - (seq - (call %init_peer_id% ("getDataSrv" "-relay-") [] -relay-) - (call %init_peer_id% ("getDataSrv" "sigId") [] sigId) - ) - (call %init_peer_id% ("data" "provide_data") [] data) - ) - (call %init_peer_id% (sigId "sign") [data] signature) - ) - (xor - (call %init_peer_id% ("callbackSrv" "response") [signature]) - (call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 1]) - ) - ) - (call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 2]) - ) - `; - return callFunction$$( - args, - { - functionName: 'callSig', - arrow: { - tag: 'arrow', - domain: { - tag: 'labeledProduct', - fields: { - sigId: { - tag: 'scalar', - name: 'string', - }, - }, - }, - codomain: { - tag: 'unlabeledProduct', - items: [ - { - tag: 'struct', - name: 'SignResult', - fields: { - error: { - tag: 'option', - type: { - tag: 'scalar', - name: 'string', - }, - }, - signature: { - tag: 'option', - type: { - tag: 'array', - type: { - tag: 'scalar', - name: 'u8', - }, - }, - }, - success: { - tag: 'scalar', - name: 'bool', - }, - }, - }, - ], - }, - }, - names: { - relay: '-relay-', - getDataSrv: 'getDataSrv', - callbackSrv: 'callbackSrv', - responseSrv: 'callbackSrv', - responseFnName: 'response', - errorHandlingSrv: 'errorHandlingSrv', - errorFnName: 'error', - }, - }, - script, - ); -} diff --git a/packages/fluence-js/src/__test__/_aqua/srv-tests.ts b/packages/fluence-js/src/__test__/_aqua/srv-tests.ts deleted file mode 100644 index e301b25c..00000000 --- a/packages/fluence-js/src/__test__/_aqua/srv-tests.ts +++ /dev/null @@ -1,341 +0,0 @@ -/** - * - * 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.7-362 - * - */ -import { FluencePeer } from '../../index'; -import { callFunction$$ } from '../../internal/compilerSupport/v4'; - -// Services - -// Functions - -export function happy_path(file_path: string, config?: { ttl?: number }): Promise; - -export function happy_path(peer: FluencePeer, file_path: string, config?: { ttl?: number }): Promise; - -export function happy_path(...args: any) { - let script = ` - (xor - (seq - (seq - (seq - (seq - (seq - (call %init_peer_id% ("getDataSrv" "-relay-") [] -relay-) - (call %init_peer_id% ("getDataSrv" "file_path") [] file_path) - ) - (call %init_peer_id% ("node_utils" "read_file") [file_path] file) - ) - (call %init_peer_id% ("single_module_srv" "create") [file.$.content.[0]!] created_service) - ) - (call %init_peer_id% (created_service.$.service_id.[0]! "greeting") ["test"] greeting) - ) - (xor - (call %init_peer_id% ("callbackSrv" "response") [greeting]) - (call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 1]) - ) - ) - (call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 2]) - ) - `; - return callFunction$$( - args, - { - functionName: 'happy_path', - arrow: { - tag: 'arrow', - domain: { - tag: 'labeledProduct', - fields: { - file_path: { - 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, - ); -} - -export function removing_non_exiting(config?: { ttl?: number }): Promise; - -export function removing_non_exiting(peer: FluencePeer, config?: { ttl?: number }): Promise; - -export function removing_non_exiting(...args: any) { - let script = ` - (xor - (seq - (seq - (call %init_peer_id% ("getDataSrv" "-relay-") [] -relay-) - (call %init_peer_id% ("single_module_srv" "remove") ["random_id"] e) - ) - (xor - (call %init_peer_id% ("callbackSrv" "response") [e.$.error.[0]!]) - (call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 1]) - ) - ) - (call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 2]) - ) - `; - return callFunction$$( - args, - { - functionName: 'removing_non_exiting', - arrow: { - tag: 'arrow', - domain: { - tag: 'labeledProduct', - fields: {}, - }, - codomain: { - tag: 'unlabeledProduct', - items: [ - { - tag: 'scalar', - name: 'string', - }, - ], - }, - }, - names: { - relay: '-relay-', - getDataSrv: 'getDataSrv', - callbackSrv: 'callbackSrv', - responseSrv: 'callbackSrv', - responseFnName: 'response', - errorHandlingSrv: 'errorHandlingSrv', - errorFnName: 'error', - }, - }, - script, - ); -} - -export function file_not_found(config?: { ttl?: number }): Promise; - -export function file_not_found(peer: FluencePeer, config?: { ttl?: number }): Promise; - -export function file_not_found(...args: any) { - let script = ` - (xor - (seq - (seq - (call %init_peer_id% ("getDataSrv" "-relay-") [] -relay-) - (call %init_peer_id% ("node_utils" "read_file") ["/random/incorrect/file"] e) - ) - (xor - (call %init_peer_id% ("callbackSrv" "response") [e.$.error.[0]!]) - (call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 1]) - ) - ) - (call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 2]) - ) - `; - return callFunction$$( - args, - { - functionName: 'file_not_found', - arrow: { - tag: 'arrow', - domain: { - tag: 'labeledProduct', - fields: {}, - }, - codomain: { - tag: 'unlabeledProduct', - items: [ - { - tag: 'scalar', - name: 'string', - }, - ], - }, - }, - names: { - relay: '-relay-', - getDataSrv: 'getDataSrv', - callbackSrv: 'callbackSrv', - responseSrv: 'callbackSrv', - responseFnName: 'response', - errorHandlingSrv: 'errorHandlingSrv', - errorFnName: 'error', - }, - }, - script, - ); -} - -export function service_removed(file_path: string, config?: { ttl?: number }): Promise; - -export function service_removed(peer: FluencePeer, file_path: string, config?: { ttl?: number }): Promise; - -export function service_removed(...args: any) { - let script = ` - (xor - (seq - (seq - (seq - (seq - (seq - (seq - (call %init_peer_id% ("getDataSrv" "-relay-") [] -relay-) - (call %init_peer_id% ("getDataSrv" "file_path") [] file_path) - ) - (call %init_peer_id% ("node_utils" "read_file") [file_path] file) - ) - (call %init_peer_id% ("single_module_srv" "create") [file.$.content.[0]!] created_service) - ) - (call %init_peer_id% ("single_module_srv" "remove") [created_service.$.service_id.[0]!]) - ) - (xor - (call %init_peer_id% (created_service.$.service_id.[0]! "greeting") ["test"] dontcare) - (null) - ) - ) - (xor - (call %init_peer_id% ("callbackSrv" "response") [%last_error%.$.message!]) - (call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 1]) - ) - ) - (call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 2]) - ) - `; - return callFunction$$( - args, - { - functionName: 'service_removed', - arrow: { - tag: 'arrow', - domain: { - tag: 'labeledProduct', - fields: { - file_path: { - 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, - ); -} - -export function list_services(file_path: string, config?: { ttl?: number }): Promise; - -export function list_services(peer: FluencePeer, file_path: string, config?: { ttl?: number }): Promise; - -export function list_services(...args: any) { - let script = ` - (xor - (seq - (seq - (seq - (seq - (seq - (seq - (seq - (call %init_peer_id% ("getDataSrv" "-relay-") [] -relay-) - (call %init_peer_id% ("getDataSrv" "file_path") [] file_path) - ) - (call %init_peer_id% ("node_utils" "read_file") [file_path] file) - ) - (call %init_peer_id% ("single_module_srv" "create") [file.$.content.[0]!]) - ) - (call %init_peer_id% ("single_module_srv" "create") [file.$.content.[0]!]) - ) - (call %init_peer_id% ("single_module_srv" "create") [file.$.content.[0]!]) - ) - (call %init_peer_id% ("single_module_srv" "list") [] list) - ) - (xor - (call %init_peer_id% ("callbackSrv" "response") [list]) - (call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 1]) - ) - ) - (call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 2]) - ) - `; - return callFunction$$( - args, - { - functionName: 'list_services', - arrow: { - tag: 'arrow', - domain: { - tag: 'labeledProduct', - fields: { - file_path: { - tag: 'scalar', - name: 'string', - }, - }, - }, - codomain: { - tag: 'unlabeledProduct', - items: [ - { - tag: 'array', - type: { - tag: 'scalar', - name: 'string', - }, - }, - ], - }, - }, - names: { - relay: '-relay-', - getDataSrv: 'getDataSrv', - callbackSrv: 'callbackSrv', - responseSrv: 'callbackSrv', - responseFnName: 'response', - errorHandlingSrv: 'errorHandlingSrv', - errorFnName: 'error', - }, - }, - script, - ); -} diff --git a/packages/fluence-js/src/__test__/integration/avm.spec.ts b/packages/fluence-js/src/__test__/integration/avm.spec.ts deleted file mode 100644 index 4947e168..00000000 --- a/packages/fluence-js/src/__test__/integration/avm.spec.ts +++ /dev/null @@ -1,162 +0,0 @@ -import { FluencePeer } from '../../index'; -import { handleTimeout } from '../../internal/utils'; -import { registerHandlersHelper } from '../util'; - -let peer: FluencePeer; - -describe('Avm spec', () => { - beforeEach(async () => { - peer = new FluencePeer(); - await peer.start(); - }); - - afterEach(async () => { - await peer.stop(); - }); - - it('Simple call', async () => { - const res = await new Promise((resolve, reject) => { - const script = ` - (call %init_peer_id% ("print" "print") ["1"]) - `; - const particle = peer.internals.createNewParticle(script); - - if (particle instanceof Error) { - return reject(particle.message); - } - - registerHandlersHelper(peer, particle, { - print: { - print: (args: Array>) => { - const [res] = args; - resolve(res); - }, - }, - }); - - peer.internals.initiateParticle(particle, handleTimeout(reject)); - }); - - expect(res).toBe('1'); - }); - - it('Par call', async () => { - const res = await new Promise((resolve, reject) => { - const res: any[] = []; - const script = ` - (seq - (par - (call %init_peer_id% ("print" "print") ["1"]) - (null) - ) - (call %init_peer_id% ("print" "print") ["2"]) - ) - `; - const particle = peer.internals.createNewParticle(script); - - if (particle instanceof Error) { - return reject(particle.message); - } - - registerHandlersHelper(peer, particle, { - print: { - print: (args: any) => { - res.push(args[0]); - if (res.length == 2) { - resolve(res); - } - }, - }, - }); - - peer.internals.initiateParticle(particle, handleTimeout(reject)); - }); - - expect(res).toStrictEqual(['1', '2']); - }); - - it('Timeout in par call: race', async () => { - const res = await new Promise((resolve, reject) => { - const script = ` - (seq - (call %init_peer_id% ("op" "identity") ["slow_result"] arg) - (seq - (par - (call %init_peer_id% ("peer" "timeout") [1000 arg] $result) - (call %init_peer_id% ("op" "identity") ["fast_result"] $result) - ) - (seq - (canon %init_peer_id% $result #result) - (call %init_peer_id% ("return" "return") [#result.$[0]]) - ) - ) - ) - `; - const particle = peer.internals.createNewParticle(script); - - if (particle instanceof Error) { - return reject(particle.message); - } - - registerHandlersHelper(peer, particle, { - return: { - return: (args: any) => { - resolve(args[0]); - }, - }, - }); - - peer.internals.initiateParticle(particle, handleTimeout(reject)); - }); - - expect(res).toBe('fast_result'); - }); - - it('Timeout in par call: wait', async () => { - const res = await new Promise((resolve, reject) => { - const script = ` - (seq - (call %init_peer_id% ("op" "identity") ["timeout_msg"] arg) - (seq - (seq - (par - (call %init_peer_id% ("peer" "timeout") [1000 arg] $ok_or_err) - (call "invalid_peer" ("op" "identity") ["never"] $ok_or_err) - ) - (xor - (seq - (canon %init_peer_id% $ok_or_err #ok_or_err) - (match #ok_or_err.$[0] "timeout_msg" - (ap "failed_with_timeout" $result) - ) - ) - (ap "impossible happened" $result) - ) - ) - (seq - (canon %init_peer_id% $result #result) - (call %init_peer_id% ("return" "return") [#result.$[0]]) - ) - ) - ) - `; - const particle = peer.internals.createNewParticle(script); - - if (particle instanceof Error) { - return reject(particle.message); - } - - registerHandlersHelper(peer, particle, { - return: { - return: (args: any) => { - resolve(args[0]); - }, - }, - }); - - peer.internals.initiateParticle(particle, handleTimeout(reject)); - }); - - expect(res).toBe('failed_with_timeout'); - }); -}); diff --git a/packages/fluence-js/src/__test__/integration/peer.spec.ts b/packages/fluence-js/src/__test__/integration/peer.spec.ts deleted file mode 100644 index d1f45dc2..00000000 --- a/packages/fluence-js/src/__test__/integration/peer.spec.ts +++ /dev/null @@ -1,419 +0,0 @@ -import { Multiaddr } from 'multiaddr'; - -import { nodes } from '../connection'; -import { FluencePeer } from '../../index'; -import { checkConnection, doNothing, handleTimeout } from '../../internal/utils'; -import { registerHandlersHelper } from '../util'; - -let peer: FluencePeer; - -describe('Typescript usage suite', () => { - afterEach(async () => { - if (peer) { - await peer.stop(); - } - }); - - beforeEach(() => { - peer = new FluencePeer(); - }); - - it('should perform test for FluencePeer class correctly', () => { - // arrange - const number = 1; - const object = { str: 'Hello!' }; - const undefinedVal = undefined; - - // act - const isPeerPeer = FluencePeer.isInstance(peer); - const isNumberPeer = FluencePeer.isInstance(number); - const isObjectPeer = FluencePeer.isInstance(object); - const isUndefinedPeer = FluencePeer.isInstance(undefinedVal); - - // act - expect(isPeerPeer).toBe(true); - expect(isNumberPeer).toBe(false); - expect(isObjectPeer).toBe(false); - expect(isUndefinedPeer).toBe(false); - }); - - describe('Should expose correct peer status', () => { - it('Should expose correct status for uninitialized peer', () => { - const status = peer.getStatus(); - - expect(status.isConnected).toBe(false); - expect(status.isInitialized).toBe(false); - expect(status.peerId).toBe(null); - expect(status.relayPeerId).toBe(null); - }); - - it('Should expose correct status for initialized but not connected peer', async () => { - // arrange - await peer.start(); - - // act - const status = peer.getStatus(); - - // assert - expect(status.isConnected).toBe(false); - expect(status.isInitialized).toBe(true); - expect(status.peerId).not.toBe(null); - expect(status.relayPeerId).toBe(null); - }); - - it('Should expose correct status for connected peer', async () => { - // arrange - await peer.start({ connectTo: nodes[0] }); - - // act - const status = peer.getStatus(); - - // assert - expect(status.isConnected).toBe(true); - expect(status.isInitialized).toBe(true); - expect(status.peerId).not.toBe(null); - expect(status.relayPeerId).not.toBe(null); - }); - }); - - it('should make a call through network', async () => { - // arrange - await peer.start({ connectTo: nodes[0] }); - - const result = await new Promise((resolve, reject) => { - const script = ` - (xor - (seq - (call %init_peer_id% ("load" "relay") [] init_relay) - (seq - (call init_relay ("op" "identity") ["hello world!"] result) - (call %init_peer_id% ("callback" "callback") [result]) - ) - ) - (seq - (call init_relay ("op" "identity") []) - (call %init_peer_id% ("callback" "error") [%last_error%]) - ) - )`; - const particle = peer.internals.createNewParticle(script); - - if (particle instanceof Error) { - return reject(particle.message); - } - - registerHandlersHelper(peer, particle, { - load: { - relay: () => { - return peer.getStatus().relayPeerId; - }, - }, - callback: { - callback: (args: any) => { - const [val] = args; - resolve(val); - }, - error: (args: any) => { - const [error] = args; - reject(error); - }, - }, - }); - - peer.internals.initiateParticle(particle, handleTimeout(reject)); - }); - - expect(result).toBe('hello world!'); - }); - - it('check connection should work', async function () { - await peer.start({ connectTo: nodes[0] }); - - const isConnected = await checkConnection(peer); - - expect(isConnected).toEqual(true); - }); - - it('check connection should work with ttl', async function () { - await peer.start({ connectTo: nodes[0] }); - - const isConnected = await checkConnection(peer, 10000); - - expect(isConnected).toEqual(true); - }); - - it('two clients should work inside the same time browser', async () => { - const peer1 = new FluencePeer(); - await peer1.start({ connectTo: nodes[0] }); - const peer2 = new FluencePeer(); - await peer2.start({ connectTo: nodes[0] }); - - const res = new Promise((resolve) => { - peer2.internals.regHandler.common('test', 'test', (req) => { - resolve(req.args[0]); - return { - result: {}, - retCode: 0, - }; - }); - }); - - const script = ` - (seq - (call "${peer1.getStatus().relayPeerId}" ("op" "identity") []) - (call "${peer2.getStatus().peerId}" ("test" "test") ["test"]) - ) - `; - const particle = peer1.internals.createNewParticle(script); - - if (particle instanceof Error) { - throw particle; - } - - peer1.internals.initiateParticle(particle, doNothing); - - expect(await res).toEqual('test'); - - await peer1.stop(); - await peer2.stop(); - }); - - describe('should make connection to network', () => { - it('address as string', async () => { - await peer.start({ connectTo: nodes[0].multiaddr }); - const isConnected = await checkConnection(peer); - - expect(isConnected).toBeTruthy(); - }); - - it('address as multiaddr', async () => { - await peer.start({ connectTo: new Multiaddr(nodes[0].multiaddr) }); - const isConnected = await checkConnection(peer); - - expect(isConnected).toBeTruthy(); - }); - - it('address as node', async () => { - await peer.start({ connectTo: nodes[0] }); - const isConnected = await checkConnection(peer); - - expect(isConnected).toBeTruthy(); - }); - - it('With connection options: dialTimeout', async () => { - await peer.start({ connectTo: nodes[0], dialTimeoutMs: 100000 }); - const isConnected = await checkConnection(peer); - - expect(isConnected).toBeTruthy(); - }); - - it('With connection options: skipCheckConnection', async () => { - await peer.start({ connectTo: nodes[0], skipCheckConnection: true }); - const isConnected = await checkConnection(peer); - - expect(isConnected).toBeTruthy(); - }); - - it('With connection options: checkConnectionTTL', async () => { - await peer.start({ connectTo: nodes[0], checkConnectionTimeoutMs: 1000 }); - const isConnected = await checkConnection(peer); - - expect(isConnected).toBeTruthy(); - }); - - it('With connection options: defaultTTL', async () => { - await peer.start({ connectTo: nodes[0], defaultTtlMs: 1 }); - const isConnected = await checkConnection(peer); - - expect(isConnected).toBeFalsy(); - }); - }); - - it('Should successfully call identity on local peer', async function () { - await peer.start(); - - const res = await new Promise((resolve, reject) => { - const script = ` - (seq - (call %init_peer_id% ("op" "identity") ["test"] res) - (call %init_peer_id% ("callback" "callback") [res]) - ) - `; - const particle = peer.internals.createNewParticle(script); - - if (particle instanceof Error) { - return reject(particle.message); - } - - registerHandlersHelper(peer, particle, { - callback: { - callback: async (args: any) => { - const [res] = args; - resolve(res); - }, - }, - }); - - peer.internals.initiateParticle(particle, handleTimeout(reject)); - }); - - expect(res).toBe('test'); - }); - - it('Should throw correct message when calling non existing local service', async function () { - await peer.start({ connectTo: nodes[0] }); - - const res = callIncorrectService(peer); - - await expect(res).rejects.toMatchObject({ - message: expect.stringContaining( - `No handler has been registered for serviceId='incorrect' fnName='incorrect' args='[]'\"'`, - ), - // instruction: 'call %init_peer_id% ("incorrect" "incorrect") [] res', - }); - }); - - it('Should not crash if undefined is passed as a variable', async () => { - await peer.start(); - - const res = await new Promise((resolve, reject) => { - const script = ` - (seq - (call %init_peer_id% ("load" "arg") [] arg) - (seq - (call %init_peer_id% ("op" "identity") [arg] res) - (call %init_peer_id% ("callback" "callback") [res]) - ) - )`; - const particle = peer.internals.createNewParticle(script); - - if (particle instanceof Error) { - return reject(particle.message); - } - - registerHandlersHelper(peer, particle, { - load: { - arg: () => undefined, - }, - callback: { - callback: (args: any) => { - const [val] = args; - resolve(val); - }, - error: (args: any) => { - const [error] = args; - reject(error); - }, - }, - }); - - peer.internals.initiateParticle(particle, handleTimeout(reject)); - }); - - expect(res).toBe(null); - }); - - it('Should not crash if an error ocurred in user-defined handler', async () => { - await peer.start(); - - const promise = new Promise((_resolve, reject) => { - const script = ` - (xor - (call %init_peer_id% ("load" "arg") [] arg) - (call %init_peer_id% ("callback" "error") [%last_error%]) - )`; - const particle = peer.internals.createNewParticle(script); - - if (particle instanceof Error) { - return reject(particle.message); - } - - registerHandlersHelper(peer, particle, { - load: { - arg: () => { - throw new Error('my super custom error message'); - }, - }, - callback: { - error: (args: any) => { - const [error] = args; - reject(error); - }, - }, - }); - - peer.internals.initiateParticle(particle, handleTimeout(reject)); - }); - - await expect(promise).rejects.toMatchObject({ - message: expect.stringContaining('my super custom error message'), - }); - }); - - it('Should return error if particle is created on a stopped peer', async () => { - await peer.stop(); - const particle = peer.internals.createNewParticle(`(null)`); - - expect(particle instanceof Error).toBe(true); - }); - - it.skip('Should throw correct error when the client tries to send a particle not to the relay', async () => { - await peer.start({ connectTo: nodes[0] }); - - const promise = new Promise((resolve, reject) => { - const script = ` - (xor - (call "incorrect_peer_id" ("any" "service") []) - (call %init_peer_id% ("callback" "error") [%last_error%]) - )`; - const particle = peer.internals.createNewParticle(script); - - if (particle instanceof Error) { - return reject(particle.message); - } - - registerHandlersHelper(peer, particle, { - callback: { - error: (args: any) => { - const [error] = args; - reject(error); - }, - }, - }); - - peer.internals.initiateParticle(particle, doNothing); - }); - - await expect(promise).rejects.toMatch( - 'Particle is expected to be sent to only the single peer (relay which client is connected to)', - ); - }); -}); - -async function callIncorrectService(peer: FluencePeer): Promise { - return new Promise((resolve, reject) => { - const script = ` - (xor - (call %init_peer_id% ("incorrect" "incorrect") [] res) - (call %init_peer_id% ("callback" "error") [%last_error%]) - )`; - const particle = peer.internals.createNewParticle(script); - - if (particle instanceof Error) { - return reject(particle.message); - } - - registerHandlersHelper(peer, particle, { - callback: { - callback: (args: any) => { - resolve(args); - }, - error: (args: any) => { - const [error] = args; - reject(error); - }, - }, - }); - - peer.internals.initiateParticle(particle, handleTimeout(reject)); - }); -} diff --git a/packages/fluence-js/src/__test__/integration/sigService.spec.ts b/packages/fluence-js/src/__test__/integration/sigService.spec.ts deleted file mode 100644 index 3fa6c9cc..00000000 --- a/packages/fluence-js/src/__test__/integration/sigService.spec.ts +++ /dev/null @@ -1,88 +0,0 @@ -import { allowServiceFn } from '../../internal/builtins/securityGuard'; -import { FluencePeer, KeyPair } from '../../index'; -import { Sig } from '../../services'; -import { registerSig, registerDataProvider, callSig } from '../_aqua/sig-tests'; - -let peer: FluencePeer; - -describe('Sig service test suite', () => { - afterEach(async () => { - if (peer) { - await peer.stop(); - } - }); - - beforeEach(async () => { - peer = new FluencePeer(); - await peer.start(); - }); - - it('Use custom sig service, success path', async () => { - const customKeyPair = await KeyPair.randomEd25519(); - const customSig = new Sig(customKeyPair); - const data = [1, 2, 3, 4, 5]; - - registerSig(peer, 'CustomSig', customSig); - - registerDataProvider(peer, { - provide_data: () => { - return data; - }, - }); - - customSig.securityGuard = allowServiceFn('data', 'provide_data'); - - const result = await callSig(peer, 'CustomSig'); - - expect(result.success).toBe(true); - const isSigCorrect = await customSig.verify(result.signature as number[], data); - expect(isSigCorrect).toBe(true); - }); - - it('Use custom sig service, fail path', async () => { - const customKeyPair = await KeyPair.randomEd25519(); - const customSig = new Sig(customKeyPair); - const data = [1, 2, 3, 4, 5]; - - registerSig(peer, 'CustomSig', customSig); - - registerDataProvider(peer, { - provide_data: () => { - return data; - }, - }); - - customSig.securityGuard = allowServiceFn('wrong', 'wrong'); - - const result = await callSig(peer, 'CustomSig'); - }); - - it('Default sig service should be resolvable by peer id', async () => { - const sig = peer.getServices().sig; - - const data = [1, 2, 3, 4, 5]; - registerDataProvider(peer, { - provide_data: () => { - return data; - }, - }); - - const callAsSigRes = await callSig(peer, 'sig'); - const callAsPeerIdRes = await callSig(peer, peer.getStatus().peerId as string); - - expect(callAsSigRes.success).toBe(false); - expect(callAsPeerIdRes.success).toBe(false); - - sig.securityGuard = () => true; - - const callAsSigResAfterGuardChange = await callSig(peer, 'sig'); - const callAsPeerIdResAfterGuardChange = await callSig(peer, peer.getStatus().peerId as string); - - expect(callAsSigResAfterGuardChange.success).toBe(true); - expect(callAsPeerIdResAfterGuardChange.success).toBe(true); - - const isValid = await sig.verify(callAsSigResAfterGuardChange.signature as number[], data); - - expect(isValid).toBe(true); - }); -}); diff --git a/packages/fluence-js/src/__test__/integration/srv.spec.ts b/packages/fluence-js/src/__test__/integration/srv.spec.ts deleted file mode 100644 index 03500513..00000000 --- a/packages/fluence-js/src/__test__/integration/srv.spec.ts +++ /dev/null @@ -1,73 +0,0 @@ -import { Fluence, FluencePeer, KeyPair, setLogLevel } from '../../index'; - -import fs from 'fs/promises'; -import path from 'path'; -import { happy_path, service_removed, file_not_found, list_services, removing_non_exiting } from '../_aqua/srv-tests'; - -let peer: FluencePeer; - -describe('Srv service test suite', () => { - afterEach(async () => { - if (peer) { - await peer.stop(); - } - }); - - beforeEach(async () => { - peer = new FluencePeer(); - await peer.start(); - }); - - it('Use custom srv service, success path', async () => { - // arrange - const wasm = path.join(__dirname, './greeting.wasm'); - - // act - const res = await happy_path(peer, wasm); - - // assert - expect(res).toBe('Hi, test'); - }); - - it('List deployed services', async () => { - // arrange - const wasm = path.join(__dirname, './greeting.wasm'); - - // act - const res = await list_services(peer, wasm); - - // assert - expect(res).toHaveLength(3); - }); - - it('Correct error for removed services', async () => { - // arrange - const wasm = path.join(__dirname, './greeting.wasm'); - - // act - const res = await service_removed(peer, wasm); - - // assert - expect(res).toMatch('No handler has been registered for serviceId'); - }); - - it('Correct error for file not found', async () => { - // arrange - - // act - const res = await file_not_found(peer); - - // assert - expect(res).toMatch("ENOENT: no such file or directory, open '/random/incorrect/file'"); - }); - - it('4', async () => { - // arrange - - // act - const res = await removing_non_exiting(peer); - - // assert - expect(res).toMatch('Service with id random_id not found'); - }); -}); diff --git a/packages/fluence-js/src/__test__/unit/compiler/v2.spec.ts b/packages/fluence-js/src/__test__/unit/compiler/v2.spec.ts deleted file mode 100644 index 8fed0956..00000000 --- a/packages/fluence-js/src/__test__/unit/compiler/v2.spec.ts +++ /dev/null @@ -1,37 +0,0 @@ -import each from 'jest-each'; - -import { Fluence, FluencePeer } from '../../..'; -import { forTests } from '../../../internal/compilerSupport/v2'; - -const peer = new FluencePeer(); -const cfg = { ttl: 1000 }; - -describe('Compiler support tests', () => { - each` - rawArgs | numArgs | expectedArgs | expectedConfig | isExpectedPeerDefault - ${[]} | ${0} | ${[]} | ${undefined} | ${true} - ${[cfg]} | ${0} | ${[]} | ${cfg} | ${true} - ${[peer]} | ${0} | ${[]} | ${undefined} | ${false} - ${[peer, cfg]} | ${0} | ${[]} | ${cfg} | ${false} - ${['a']} | ${1} | ${['a']} | ${undefined} | ${true} - ${['a', cfg]} | ${1} | ${['a']} | ${cfg} | ${true} - ${[peer, 'a']} | ${1} | ${['a']} | ${undefined} | ${false} - ${[peer, 'a', cfg]} | ${1} | ${['a']} | ${cfg} | ${false} -`.test( - // - 'raw rawArgs: $rawArgs, numArgs: $numArgs. expected args: $expectedArgs, config: $expectedConfig, default peer?: $isExpectedPeerDefault', - ({ rawArgs, numArgs, expectedArgs, expectedConfig, isExpectedPeerDefault }) => { - // arrange - const testFn = forTests.extractFunctionArgs; - - // act - const { peer, config, args } = testFn(rawArgs, numArgs); - const isActualPeerDefault = Fluence.getPeer() === peer; - - // assert - expect(config).toStrictEqual(expectedConfig); - expect(args).toStrictEqual(expectedArgs); - expect(isActualPeerDefault).toStrictEqual(isExpectedPeerDefault); - }, - ); -}); diff --git a/packages/fluence-js/src/__test__/util.ts b/packages/fluence-js/src/__test__/util.ts deleted file mode 100644 index 1c22e6b9..00000000 --- a/packages/fluence-js/src/__test__/util.ts +++ /dev/null @@ -1,15 +0,0 @@ -import { FluencePeer } from '../index'; -import { Particle } from '../internal/Particle'; -import { MakeServiceCall } from '../internal/utils'; - -export const registerHandlersHelper = ( - peer: FluencePeer, - particle: Particle, - handlers: Record>, -) => { - Object.entries(handlers).forEach(([serviceId, service]) => { - Object.entries(service).forEach(([fnName, fn]) => { - peer.internals.regHandler.forParticle(particle.id, serviceId, fnName, MakeServiceCall(fn)); - }); - }); -}; diff --git a/packages/fluence-js/src/internal/Buffer.ts b/packages/fluence-js/src/internal/Buffer.ts deleted file mode 100644 index 13528d81..00000000 --- a/packages/fluence-js/src/internal/Buffer.ts +++ /dev/null @@ -1,20 +0,0 @@ -/* - * 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'; - -export default isBrowser ? BufferPolyfill : Buffer; diff --git a/packages/fluence-js/src/internal/_aqua/node-utils.ts b/packages/fluence-js/src/internal/_aqua/node-utils.ts deleted file mode 100644 index 0723e283..00000000 --- a/packages/fluence-js/src/internal/_aqua/node-utils.ts +++ /dev/null @@ -1,80 +0,0 @@ -/** - * - * 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.7-362 - * - */ -import { FluencePeer } from '../..'; -import type { CallParams$$ } from '../../internal/compilerSupport/v4'; -import { registerService$$ } from '../../internal/compilerSupport/v4'; - -// Services - -export interface NodeUtilsDef { - read_file: ( - path: string, - callParams: CallParams$$<'path'>, - ) => - | { content: string | null; error: string | null; success: boolean } - | Promise<{ content: string | null; error: string | null; success: boolean }>; -} -export function registerNodeUtils(service: NodeUtilsDef): void; -export function registerNodeUtils(serviceId: string, service: NodeUtilsDef): void; -export function registerNodeUtils(peer: FluencePeer, service: NodeUtilsDef): void; -export function registerNodeUtils(peer: FluencePeer, serviceId: string, service: NodeUtilsDef): void; - -export function registerNodeUtils(...args: any) { - registerService$$(args, { - defaultServiceId: 'node_utils', - functions: { - tag: 'labeledProduct', - fields: { - read_file: { - tag: 'arrow', - domain: { - tag: 'labeledProduct', - fields: { - path: { - tag: 'scalar', - name: 'string', - }, - }, - }, - codomain: { - tag: 'unlabeledProduct', - items: [ - { - tag: 'struct', - name: 'ReadFileResult', - fields: { - content: { - tag: 'option', - type: { - tag: 'scalar', - name: 'string', - }, - }, - error: { - tag: 'option', - type: { - tag: 'scalar', - name: 'string', - }, - }, - success: { - tag: 'scalar', - name: 'bool', - }, - }, - }, - ], - }, - }, - }, - }, - }); -} - -// Functions diff --git a/packages/fluence-js/src/internal/_aqua/services.ts b/packages/fluence-js/src/internal/_aqua/services.ts deleted file mode 100644 index 89309c4f..00000000 --- a/packages/fluence-js/src/internal/_aqua/services.ts +++ /dev/null @@ -1,138 +0,0 @@ -/** - * - * 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.7-362 - * - */ -import { FluencePeer } from '../..'; -import type { CallParams$$ } from '../../internal/compilerSupport/v4'; -import { registerService$$ } from '../../internal/compilerSupport/v4'; - -// Services - -export interface SigDef { - get_peer_id: (callParams: CallParams$$) => string | Promise; - sign: ( - data: number[], - callParams: CallParams$$<'data'>, - ) => - | { error: string | null; signature: number[] | null; success: boolean } - | Promise<{ error: string | null; signature: number[] | null; success: boolean }>; - verify: ( - signature: number[], - data: number[], - callParams: CallParams$$<'signature' | 'data'>, - ) => boolean | Promise; -} -export function registerSig(service: SigDef): void; -export function registerSig(serviceId: string, service: SigDef): void; -export function registerSig(peer: FluencePeer, service: SigDef): void; -export function registerSig(peer: FluencePeer, serviceId: string, service: SigDef): void; - -export function registerSig(...args: any) { - registerService$$(args, { - defaultServiceId: 'sig', - functions: { - tag: 'labeledProduct', - fields: { - get_peer_id: { - tag: 'arrow', - domain: { - tag: 'nil', - }, - codomain: { - tag: 'unlabeledProduct', - items: [ - { - tag: 'scalar', - name: 'string', - }, - ], - }, - }, - sign: { - tag: 'arrow', - domain: { - tag: 'labeledProduct', - fields: { - data: { - tag: 'array', - type: { - tag: 'scalar', - name: 'u8', - }, - }, - }, - }, - codomain: { - tag: 'unlabeledProduct', - items: [ - { - tag: 'struct', - name: 'SignResult', - fields: { - error: { - tag: 'option', - type: { - tag: 'scalar', - name: 'string', - }, - }, - signature: { - tag: 'option', - type: { - tag: 'array', - type: { - tag: 'scalar', - name: 'u8', - }, - }, - }, - success: { - tag: 'scalar', - name: 'bool', - }, - }, - }, - ], - }, - }, - verify: { - tag: 'arrow', - domain: { - tag: 'labeledProduct', - fields: { - signature: { - tag: 'array', - type: { - tag: 'scalar', - name: 'u8', - }, - }, - data: { - tag: 'array', - type: { - tag: 'scalar', - name: 'u8', - }, - }, - }, - }, - codomain: { - tag: 'unlabeledProduct', - items: [ - { - tag: 'scalar', - name: 'bool', - }, - ], - }, - }, - }, - }, - }); -} - -// Functions diff --git a/packages/fluence-js/src/internal/_aqua/single-module-srv.ts b/packages/fluence-js/src/internal/_aqua/single-module-srv.ts deleted file mode 100644 index 9788fc75..00000000 --- a/packages/fluence-js/src/internal/_aqua/single-module-srv.ts +++ /dev/null @@ -1,137 +0,0 @@ -/** - * - * 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.7-362 - * - */ -import { FluencePeer } from '../..'; -import type { CallParams$$ } from '../../internal/compilerSupport/v4'; -import { registerService$$ } from '../../internal/compilerSupport/v4'; - -// Services - -export interface SrvDef { - create: ( - wasm_b64_content: string, - callParams: CallParams$$<'wasm_b64_content'>, - ) => - | { error: string | null; service_id: string | null; success: boolean } - | Promise<{ error: string | null; service_id: string | null; success: boolean }>; - list: (callParams: CallParams$$) => string[] | Promise; - remove: ( - service_id: string, - callParams: CallParams$$<'service_id'>, - ) => { error: string | null; success: boolean } | Promise<{ error: string | null; success: boolean }>; -} -export function registerSrv(service: SrvDef): void; -export function registerSrv(serviceId: string, service: SrvDef): void; -export function registerSrv(peer: FluencePeer, service: SrvDef): void; -export function registerSrv(peer: FluencePeer, serviceId: string, service: SrvDef): void; - -export function registerSrv(...args: any) { - registerService$$(args, { - defaultServiceId: 'single_module_srv', - functions: { - tag: 'labeledProduct', - fields: { - create: { - tag: 'arrow', - domain: { - tag: 'labeledProduct', - fields: { - wasm_b64_content: { - tag: 'scalar', - name: 'string', - }, - }, - }, - codomain: { - tag: 'unlabeledProduct', - items: [ - { - tag: 'struct', - name: 'ServiceCreationResult', - fields: { - error: { - tag: 'option', - type: { - tag: 'scalar', - name: 'string', - }, - }, - service_id: { - tag: 'option', - type: { - tag: 'scalar', - name: 'string', - }, - }, - success: { - tag: 'scalar', - name: 'bool', - }, - }, - }, - ], - }, - }, - list: { - tag: 'arrow', - domain: { - tag: 'nil', - }, - codomain: { - tag: 'unlabeledProduct', - items: [ - { - tag: 'array', - type: { - tag: 'scalar', - name: 'string', - }, - }, - ], - }, - }, - remove: { - tag: 'arrow', - domain: { - tag: 'labeledProduct', - fields: { - service_id: { - tag: 'scalar', - name: 'string', - }, - }, - }, - codomain: { - tag: 'unlabeledProduct', - items: [ - { - tag: 'struct', - name: 'RemoveResult', - fields: { - error: { - tag: 'option', - type: { - tag: 'scalar', - name: 'string', - }, - }, - success: { - tag: 'scalar', - name: 'bool', - }, - }, - }, - ], - }, - }, - }, - }, - }); -} - -// Functions diff --git a/packages/fluence-js/src/internal/compilerSupport/v2.ts b/packages/fluence-js/src/internal/compilerSupport/v2.ts deleted file mode 100644 index 26a8b27e..00000000 --- a/packages/fluence-js/src/internal/compilerSupport/v2.ts +++ /dev/null @@ -1,553 +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 { SecurityTetraplet } from '@fluencelabs/avm'; -import { match } from 'ts-pattern'; -import { CallParams, Fluence, FluencePeer } from '../../index'; -import { CallServiceData, GenericCallServiceHandler, CallServiceResult, ResultCodes } from '../commonTypes'; -import { Particle } from '../Particle'; - -export { FluencePeer } from '../FluencePeer'; -export { CallParams } from '../commonTypes'; - -/** - * Represents the Aqua Option type - */ -type OptionalType = { - /** - * Type descriptor. Used for pattern-matching - */ - tag: 'optional'; -}; - -/** - * Represents the void type for functions and callbacks with no return value - */ -type VoidType = { - /** - * Type descriptor. Used for pattern-matching - */ - tag: 'void'; -}; - -/** - * Represents all types other than Optional, Void, Callback and MultiReturn - */ -type PrimitiveType = { - /** - * Type descriptor. Used for pattern-matching - */ - tag: 'primitive'; -}; - -/** - * Represents callbacks used in Aqua function arguments (`func` instruction) - */ -type CallbackType = { - /** - * Type descriptor. Used for pattern-matching - */ - tag: 'callback'; - - /** - * Callback definition - */ - callback: CallbackDef; -}; - -/** - * Represents the return type for functions which return multiple values - */ -type MultiReturnType = { - /** - * Type descriptor. Used for pattern-matching - */ - tag: 'multiReturn'; - - /** - * The description of types of the return values: Array of either primitive or optional types - */ - returnItems: Array; -}; - -interface ArgDef { - /** - * The name of the argument in Aqua language - */ - name: string; - - /** - * The type of the argument - */ - argType: ArgType; -} - -interface CallbackDef { - /** - * Callback argument definitions: the list of ArgDefs - */ - argDefs: Array>; - - /** - * Definition of the return type of callback - */ - returnType: ReturnType; -} - -interface FunctionBodyDef - extends CallbackDef< - // force new line - OptionalType | PrimitiveType, - VoidType | OptionalType | PrimitiveType - > { - /** - * The name of the function in Aqua language - */ - functionName: string; -} - -/** - * Definition of function (`func` instruction) generated by the Aqua compiler - */ -interface FunctionCallDef - extends CallbackDef< - OptionalType | PrimitiveType | CallbackType, - VoidType | OptionalType | PrimitiveType | MultiReturnType - > { - /** - * The name of the function in Aqua language - */ - functionName: string; - - /** - * Names of the different entities used in generated air script - */ - names: { - /** - * The name of the relay variable - */ - relay: string; - - /** - * The name of the serviceId used load variables at the beginning of the script - */ - getDataSrv: string; - - /** - * The name of serviceId is used to execute callbacks for the current particle - */ - callbackSrv: string; - - /** - * The name of the serviceId which is called to propagate return value to the generated function caller - */ - responseSrv: string; - - /** - * The name of the functionName which is called to propagate return value to the generated function caller - */ - responseFnName: string; - - /** - * The name of the serviceId which is called to report errors to the generated function caller - */ - errorHandlingSrv: string; - - /** - * The name of the functionName which is called to report errors to the generated function caller - */ - errorFnName: string; - }; -} - -/** - * Definition of service registration function (`service` instruction) generated by the Aqua compiler - */ -interface ServiceDef { - /** - * Default service id. If the service has no default id the value should be undefined - */ - defaultServiceId?: string; - - /** - * List of functions which the service consists of - */ - functions: Array; -} - -/** - * Options to configure Aqua function execution - */ -export interface FnConfig { - /** - * Sets the TTL (time to live) for particle responsible for the function execution - * If the option is not set the default TTL from FluencePeer config is used - */ - ttl?: number; -} - -/** - * Convenience function to support Aqua `func` generation backend - * The compiler only need to generate a call the function and provide the corresponding definitions and the air script - * - * @param rawFnArgs - raw arguments passed by user to the generated function - * @param def - function definition generated by the Aqua compiler - * @param script - air script with function execution logic generated by the Aqua compiler - */ -export function callFunction(rawFnArgs: Array, def: FunctionCallDef, script: string) { - const { args, peer, config } = extractFunctionArgs(rawFnArgs, def.argDefs.length); - - if (args.length !== def.argDefs.length) { - throw new Error('Incorrect number of arguments. Expecting ${def.argDefs.length}'); - } - - const promise = new Promise((resolve, reject) => { - const particle = peer.internals.createNewParticle(script, config?.ttl); - - if (particle instanceof Error) { - return reject(particle.message); - } - - for (let i = 0; i < def.argDefs.length; i++) { - const argDef = def.argDefs[i]; - const arg = args[i]; - - const [serviceId, fnName, cb] = match(argDef.argType) - // for callback arguments we are registering particle-specific callback which executes the passed function - .with({ tag: 'callback' }, (callbackDef) => { - const fn = async (req: CallServiceData): Promise => { - const args = convertArgsFromReqToUserCall(req, callbackDef.callback.argDefs); - // arg is function at this point - const result = await arg.apply(null, args); - let res; - switch (callbackDef.callback.returnType.tag) { - case 'void': - res = {}; - break; - case 'primitive': - res = result; - break; - case 'optional': - res = tsToAquaOpt(result); - break; - } - return { - retCode: ResultCodes.success, - result: res, - }; - }; - return [def.names.callbackSrv, argDef.name, fn] as const; - }) - // for optional types we are converting value to array representation in air - .with({ tag: 'optional' }, () => { - const fn = (req: CallServiceData): CallServiceResult => { - // arg is optional at this point - const res = tsToAquaOpt(arg); - return { - retCode: ResultCodes.success, - result: res, - }; - }; - return [def.names.getDataSrv, argDef.name, fn] as const; - }) - // for primitive types wre are simply passing the value - .with({ tag: 'primitive' }, () => { - // arg is primitive at this point - const fn = (req: CallServiceData): CallServiceResult => ({ - retCode: ResultCodes.success, - result: arg, - }); - return [def.names.getDataSrv, argDef.name, fn] as const; - }) - .exhaustive(); - - // registering handlers for every argument of the function - peer.internals.regHandler.forParticle(particle.id, serviceId, fnName, cb); - } - - // registering handler for function response - peer.internals.regHandler.forParticle(particle.id, def.names.responseSrv, def.names.responseFnName, (req) => { - const userFunctionReturn = match(def.returnType) - .with({ tag: 'primitive' }, () => req.args[0]) - .with({ tag: 'optional' }, () => aquaOptToTs(req.args[0])) - .with({ tag: 'void' }, () => undefined) - .with({ tag: 'multiReturn' }, (mr) => { - return mr.returnItems.map((x, index) => { - return match(x) - .with({ tag: 'optional' }, () => aquaOptToTs(req.args[index])) - .with({ tag: 'primitive' }, () => req.args[index]) - .exhaustive(); - }); - }) - .exhaustive(); - - setTimeout(() => { - resolve(userFunctionReturn); - }, 0); - - return { - retCode: ResultCodes.success, - result: {}, - }; - }); - - // registering handler for injecting relay variable - peer.internals.regHandler.forParticle(particle.id, def.names.getDataSrv, def.names.relay, (req) => { - return { - retCode: ResultCodes.success, - result: peer.getStatus().relayPeerId, - }; - }); - - // registering handler for error reporting - peer.internals.regHandler.forParticle(particle.id, def.names.errorHandlingSrv, def.names.errorFnName, (req) => { - const [err, _] = req.args; - setTimeout(() => { - reject(err); - }, 0); - return { - retCode: ResultCodes.success, - result: {}, - }; - }); - - peer.internals.initiateParticle(particle, (stage) => { - // If function is void, then it's completed when one of the two conditions is met: - // 1. The particle is sent to the network (state 'sent') - // 2. All CallRequests are executed, e.g., all variable loading and local function calls are completed (state 'localWorkDone') - if (def.returnType.tag === 'void' && (stage.stage === 'sent' || stage.stage === 'localWorkDone')) { - resolve(undefined); - } - - if (stage.stage === 'sendingError') { - reject(`Could not send particle for ${def.functionName}: not connected (particle id: ${particle.id})`); - } - - if (stage.stage === 'expired') { - reject(`Request timed out after ${particle.ttl} for ${def.functionName} (particle id: ${particle.id})`); - } - - if (stage.stage === 'interpreterError') { - reject( - `Script interpretation failed for ${def.functionName}: ${stage.errorMessage} (particle id: ${particle.id})`, - ); - } - }); - }); - - return promise; -} - -/** - * Convenience function to support Aqua `service` generation backend - * The compiler only need to generate a call the function and provide the corresponding definitions and the air script - * - * @param args - raw arguments passed by user to the generated function - * @param def - service definition generated by the Aqua compiler - */ -export function registerService(args: any[], def: ServiceDef) { - const { peer, service, serviceId } = extractRegisterServiceArgs(args, def.defaultServiceId); - - if (!peer.getStatus().isInitialized) { - throw new Error( - 'Could not register the service because the peer is not initialized. Are you passing the wrong peer to the register function?', - ); - } - - // Checking for missing keys - const requiredKeys = def.functions.map((x) => x.functionName); - const incorrectServiceDefinitions = requiredKeys.filter((f) => !(f in service)); - if (!!incorrectServiceDefinitions.length) { - throw new Error( - `Error registering service ${serviceId}: missing functions: ` + - incorrectServiceDefinitions.map((d) => "'" + d + "'").join(', '), - ); - } - - for (let singleFunction of def.functions) { - // The function has type of (arg1, arg2, arg3, ... , callParams) => CallServiceResultType | void - // Account for the fact that user service might be defined as a class - .bind(...) - const userDefinedHandler = service[singleFunction.functionName].bind(service); - - peer.internals.regHandler.common(serviceId, singleFunction.functionName, async (req) => { - const args = convertArgsFromReqToUserCall(req, singleFunction.argDefs); - const rawResult = await userDefinedHandler.apply(null, args); - const result = match(singleFunction.returnType) - .with({ tag: 'primitive' }, () => rawResult) - .with({ tag: 'optional' }, () => tsToAquaOpt(rawResult)) - .with({ tag: 'void' }, () => ({})) - .exhaustive(); - - return { - retCode: ResultCodes.success, - result: result, - }; - }); - } -} - -/** - * Converts argument from ts representation (value | null) to air representation ([value] | []) - */ -const tsToAquaOpt = (arg: unknown | null): any => { - return arg === null || arg === undefined ? [] : [arg]; -}; - -/** - * Converts argument from air representation ([value] | []) to ts representation (value | null) - */ -const aquaOptToTs = (opt: Array) => { - return opt.length === 0 ? null : opt[0]; -}; - -/** - * Converts raw arguments which may contain optional types from air representation to ts representation - */ -const convertArgsFromReqToUserCall = (req: CallServiceData, argDefs: Array>) => { - if (req.args.length !== argDefs.length) { - throwForReq(req, `incorrect number of arguments, expected ${argDefs.length}`); - } - - const argsAccountedForOptional = req.args.map((x, index) => { - return match(argDefs[index].argType) - .with({ tag: 'optional' }, () => aquaOptToTs(x)) - .with({ tag: 'primitive' }, () => x) - .exhaustive(); - }); - - return [...argsAccountedForOptional, extractCallParams(req, argDefs)]; -}; - -/** - * Extracts Call Params from CallServiceData and forms tetraplets according to generated function definition - */ -const extractCallParams = ( - req: CallServiceData, - argDefs: Array>, -): CallParams => { - let tetraplets: { [key in string]: SecurityTetraplet[] } = {}; - for (let i = 0; i < req.args.length; i++) { - if (argDefs[i]) { - tetraplets[argDefs[i].name] = req.tetraplets[i]; - } - } - - const callParams = { - ...req.particleContext, - tetraplets, - }; - - return callParams; -}; - -/** - * Arguments could be passed in one these configurations: - * [...actualArgs] - * [peer, ...actualArgs] - * [...actualArgs, config] - * [peer, ...actualArgs, config] - * - * This function select the appropriate configuration and returns - * arguments in a structured way of: { peer, config, args } - */ -const extractFunctionArgs = ( - args: any[], - numberOfExpectedArgs: number, -): { - peer: FluencePeer; - config?: FnConfig; - args: any[]; -} => { - let peer: FluencePeer; - let structuredArgs: any[]; - let config: any; - if (FluencePeer.isInstance(args[0])) { - peer = args[0]; - structuredArgs = args.slice(1, numberOfExpectedArgs + 1); - config = args[numberOfExpectedArgs + 1]; - } else { - peer = Fluence.getPeer(); - structuredArgs = args.slice(0, numberOfExpectedArgs); - config = args[numberOfExpectedArgs]; - } - - return { - peer: peer, - config: config, - args: structuredArgs, - }; -}; - -/** - * Arguments could be passed in one these configurations: - * [serviceObject] - * [peer, serviceObject] - * [defaultId, serviceObject] - * [peer, defaultId, serviceObject] - * - * Where serviceObject is the raw object with function definitions passed by user - * - * This function select the appropriate configuration and returns - * arguments in a structured way of: { peer, serviceId, service } - */ -const extractRegisterServiceArgs = ( - args: any[], - defaultServiceId?: string, -): { peer: FluencePeer; serviceId: string; service: any } => { - let peer: FluencePeer; - let serviceId: any; - let service: any; - if (FluencePeer.isInstance(args[0])) { - peer = args[0]; - } else { - peer = Fluence.getPeer(); - } - - if (typeof args[0] === 'string') { - serviceId = args[0]; - } else if (typeof args[1] === 'string') { - serviceId = args[1]; - } else { - serviceId = defaultServiceId; - } - - // Figuring out which overload is the service. - // If the first argument is not Fluence Peer and it is an object, then it can only be the service def - // If the first argument is peer, we are checking further. The second argument might either be - // an object, that it must be the service object - // or a string, which is the service id. In that case the service is the third argument - if (!FluencePeer.isInstance(args[0]) && typeof args[0] === 'object') { - service = args[0]; - } else if (typeof args[1] === 'object') { - service = args[1]; - } else { - service = args[2]; - } - - return { - peer: peer, - serviceId: serviceId, - service: service, - }; -}; - -function throwForReq(req: CallServiceData, message: string) { - throw new Error(`${message}, serviceId='${req.serviceId}' fnName='${req.fnName}' args='${req.args}'`); -} - -export const forTests = { - extractFunctionArgs, -}; diff --git a/packages/fluence-js/src/internal/compilerSupport/v3.ts b/packages/fluence-js/src/internal/compilerSupport/v3.ts deleted file mode 100644 index e743584f..00000000 --- a/packages/fluence-js/src/internal/compilerSupport/v3.ts +++ /dev/null @@ -1,21 +0,0 @@ -/* - * 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. - */ - -export { FluencePeer } from '../FluencePeer'; -export { CallParams } from '../commonTypes'; -export * from './v3impl/interface'; -export * from './v3impl/callFunction'; -export * from './v3impl/registerService'; diff --git a/packages/fluence-js/src/internal/compilerSupport/v3impl/registerService.ts b/packages/fluence-js/src/internal/compilerSupport/v3impl/registerService.ts deleted file mode 100644 index 39deb88f..00000000 --- a/packages/fluence-js/src/internal/compilerSupport/v3impl/registerService.ts +++ /dev/null @@ -1,95 +0,0 @@ -import { FluencePeer } from '../../FluencePeer'; -import { Fluence } from '../../../index'; -import { ServiceDef } from './interface'; -import { registerGlobalService, userHandlerService } from './services'; - -/** - * Convenience function to support Aqua `service` generation backend - * The compiler only need to generate a call the function and provide the corresponding definitions and the air script - * - * @param args - raw arguments passed by user to the generated function - * @param def - service definition generated by the Aqua compiler - */ -export function registerService(args: any[], def: ServiceDef) { - const { peer, service, serviceId } = extractArgs(args, def.defaultServiceId); - - if (!peer.getStatus().isInitialized) { - throw new Error( - 'Could not register the service because the peer is not initialized. Are you passing the wrong peer to the register function?', - ); - } - - // Checking for missing keys - const requiredKeys = def.functions.tag === 'nil' ? [] : Object.keys(def.functions.fields); - const incorrectServiceDefinitions = requiredKeys.filter((f) => !(f in service)); - if (!!incorrectServiceDefinitions.length) { - throw new Error( - `Error registering service ${serviceId}: missing functions: ` + - incorrectServiceDefinitions.map((d) => "'" + d + "'").join(', '), - ); - } - - const singleFunctions = def.functions.tag === 'nil' ? [] : Object.entries(def.functions.fields); - for (let singleFunction of singleFunctions) { - let [name, type] = singleFunction; - // The function has type of (arg1, arg2, arg3, ... , callParams) => CallServiceResultType | void - // Account for the fact that user service might be defined as a class - .bind(...) - const userDefinedHandler = service[name].bind(service); - - const serviceDescription = userHandlerService(serviceId, singleFunction, userDefinedHandler); - registerGlobalService(peer, serviceDescription); - } -} - -/** - * Arguments could be passed in one these configurations: - * [serviceObject] - * [peer, serviceObject] - * [defaultId, serviceObject] - * [peer, defaultId, serviceObject] - * - * Where serviceObject is the raw object with function definitions passed by user - * - * This function select the appropriate configuration and returns - * arguments in a structured way of: { peer, serviceId, service } - */ -const extractArgs = ( - args: any[], - defaultServiceId?: string, -): { peer: FluencePeer; serviceId: string; service: any } => { - let peer: FluencePeer; - let serviceId: any; - let service: any; - if (FluencePeer.isInstance(args[0])) { - peer = args[0]; - } else { - peer = Fluence.getPeer(); - } - - if (typeof args[0] === 'string') { - serviceId = args[0]; - } else if (typeof args[1] === 'string') { - serviceId = args[1]; - } else { - serviceId = defaultServiceId; - } - - // Figuring out which overload is the service. - // If the first argument is not Fluence Peer and it is an object, then it can only be the service def - // If the first argument is peer, we are checking further. The second argument might either be - // an object, that it must be the service object - // or a string, which is the service id. In that case the service is the third argument - if (!FluencePeer.isInstance(args[0]) && typeof args[0] === 'object') { - service = args[0]; - } else if (typeof args[1] === 'object') { - service = args[1]; - } else { - service = args[2]; - } - - return { - peer: peer, - serviceId: serviceId, - service: service, - }; -}; diff --git a/packages/fluence-js/src/services.ts b/packages/fluence-js/src/services.ts deleted file mode 100644 index 74101cd0..00000000 --- a/packages/fluence-js/src/services.ts +++ /dev/null @@ -1,2 +0,0 @@ -export * from './internal/builtins/Sig'; -export { registerSig } from './internal/_aqua/services'; diff --git a/packages/marine/background-runner/.gitignore b/packages/marine/background-runner/.gitignore new file mode 100644 index 00000000..1a59a95f --- /dev/null +++ b/packages/marine/background-runner/.gitignore @@ -0,0 +1,21 @@ +# Logs +logs +*.log +npm-debug.log* +yarn-debug.log* +yarn-error.log* +lerna-debug.log* + +# Compiled binary addons (https://nodejs.org/api/addons.html) +build/Release +bundle/ + +dist +esm +types + +# Dependency directories +node_modules/ +jspm_packages/ + +.idea diff --git a/packages/marine/background-runner/.npmignore b/packages/marine/background-runner/.npmignore new file mode 100644 index 00000000..1354879a --- /dev/null +++ b/packages/marine/background-runner/.npmignore @@ -0,0 +1,12 @@ +.idea +.gitignore +node_modules +types + +src/ + +tsconfig.json +webpack.config.js + +bundle +pkg \ No newline at end of file diff --git a/packages/marine/background-runner/.prettierrc.js b/packages/marine/background-runner/.prettierrc.js new file mode 100644 index 00000000..4e5ea887 --- /dev/null +++ b/packages/marine/background-runner/.prettierrc.js @@ -0,0 +1,8 @@ +module.exports = { + semi: true, + trailingComma: "all", + singleQuote: true, + printWidth: 120, + tabWidth: 4, + useTabs: false +}; diff --git a/packages/marine/background-runner/CONTRIBUTING.md b/packages/marine/background-runner/CONTRIBUTING.md new file mode 100644 index 00000000..0e3b264d --- /dev/null +++ b/packages/marine/background-runner/CONTRIBUTING.md @@ -0,0 +1,13 @@ +## Contribute Code + +You are welcome to contribute to Fluence. + +Things you need to know: + +1. You need to **agree to the Contributors License Agreement**. This is a common practice in all major Open Source projects. At the current moment we are unable to accept contributions made on behalf of a company. Only individual contributions will be accepted. +2. **Not all proposed contributions can be accepted**. Some features may e.g. just fit a third-party add-on better. The contribution must fit the overall direction of Fluence and really improve it. The more effort you invest, the better you should clarify in advance whether the contribution fits: the best way would be to just open an issue to discuss the contribution you plan to make. + +### Contributor License Agreement + +When you contribute, you have to be aware that your contribution is covered by **Apache License 2.0**, but might relicensed under few other software licenses mentioned in the **Contributor License Agreement**. +In particular you need to agree to the [Contributor License Agreement](https://gist.github.com/fluencelabs-org/3f4cbb3cc14c1c0fb9ad99d8f7316ed7). If you agree to its content, you simply have to click on the link posted by the CLA assistant as a comment to the pull request. Click it to check the CLA, then accept it on the following screen if you agree to it. CLA assistant will save this decision for upcoming contributions and will notify you if there is any change to the CLA in the meantime. diff --git a/packages/marine/background-runner/README.md b/packages/marine/background-runner/README.md new file mode 100644 index 00000000..e5b162e4 --- /dev/null +++ b/packages/marine/background-runner/README.md @@ -0,0 +1,11 @@ +# MarineJS background runner + +This package is a part of FluenceJS, the official implementation of the Fluence Peer in typescript. See the [FluenceJS repo](https://github.com/fluencelabs/fluence-js) for more info + +## Contributing + +While the project is still in the early stages of development, you are welcome to track progress and contribute. As the project is undergoing rapid changes, interested contributors should contact the team before embarking on larger pieces of work. All contributors should consult with and agree to our [basic contributing rules](CONTRIBUTING.md). + +## License + +[Apache 2.0](LICENSE) diff --git a/packages/marine/background-runner/package.json b/packages/marine/background-runner/package.json new file mode 100644 index 00000000..a5477a0f --- /dev/null +++ b/packages/marine/background-runner/package.json @@ -0,0 +1,27 @@ +{ + "name": "@fluencelabs/marine.background-runner", + "version": "0.1.0", + "description": "MarineJS background runner", + "main": "./dist/index.js", + "typings": "./dist/index.d.ts", + "engines": { + "node": ">=10", + "pnpm": ">=3" + }, + "scripts": { + "build": "tsc" + }, + "repository": "https://github.com/fluencelabs/fluence-js", + "author": "Fluence Labs", + "license": "Apache-2.0", + "dependencies": { + "threads": "^1.7.0" + }, + "devDependencies": { + "@fluencelabs/marine.worker-script": "workspace:0.1.0", + "@fluencelabs/interfaces": "workspace:0.2.0", + "@fluencelabs/marine-js": "0.3.38", + "typescript": "^4.6.4", + "@types/node": "16.11.59" + } +} diff --git a/packages/marine/background-runner/src/index.ts b/packages/marine/background-runner/src/index.ts new file mode 100644 index 00000000..373881cd --- /dev/null +++ b/packages/marine/background-runner/src/index.ts @@ -0,0 +1,76 @@ +/* + * 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 { JSONArray, JSONObject, LogFunction, logLevelToEnv, LogLevel } from '@fluencelabs/marine-js'; +import type { IMarine, IWorkerLoader, IWasmLoader } from '@fluencelabs/interfaces'; +import type { MarineBackgroundInterface } from '@fluencelabs/marine.worker-script'; +import { spawn, Thread } from 'threads'; +import type { ModuleThread } from 'threads'; + +export class MarineBackgroundRunner implements IMarine { + private workerThread?: ModuleThread; + + constructor( + private workerLoader: IWorkerLoader, + private controlModuleLoader: IWasmLoader, + private logFunction: LogFunction, + ) {} + + async start(): Promise { + if (this.workerThread) { + return; + } + + await this.workerLoader.start(); + await this.controlModuleLoader.start(); + const worker = this.workerLoader.getValue(); + const wasm = this.controlModuleLoader.getValue(); + this.workerThread = await spawn(worker, { timeout: 99999999 }); + this.workerThread.onLogMessage().subscribe(this.logFunction); + await this.workerThread.init(wasm); + } + + createService(serviceModule: SharedArrayBuffer | Buffer, serviceId: string, logLevel?: LogLevel): Promise { + if (!this.workerThread) { + throw 'Worker is not initialized'; + } + + const env = logLevel ? logLevelToEnv(logLevel) : {}; + return this.workerThread.createService(serviceModule, serviceId, undefined, env); + } + + callService( + serviceId: string, + functionName: string, + args: JSONArray | JSONObject, + callParams: any, + ): Promise { + if (!this.workerThread) { + throw 'Worker is not initialized'; + } + + return this.workerThread.callService(serviceId, functionName, args, callParams); + } + + async stop(): Promise { + if (!this.workerThread) { + return; + } + + await this.workerThread.terminate(); + await Thread.terminate(this.workerThread); + } +} diff --git a/packages/marine/background-runner/tsconfig.json b/packages/marine/background-runner/tsconfig.json new file mode 100644 index 00000000..ef65b4cc --- /dev/null +++ b/packages/marine/background-runner/tsconfig.json @@ -0,0 +1,12 @@ +{ + "compilerOptions": { + "outDir": "./dist/", + "lib": ["ES2015", "dom"], + "target": "ES5", + "sourceMap": true, + "declaration": true, + "module": "commonjs" + }, + "exclude": ["node_modules", "dist"], + "include": ["src/**/*"] +} diff --git a/packages/marine/deps-loader.node/.gitignore b/packages/marine/deps-loader.node/.gitignore new file mode 100644 index 00000000..1a59a95f --- /dev/null +++ b/packages/marine/deps-loader.node/.gitignore @@ -0,0 +1,21 @@ +# Logs +logs +*.log +npm-debug.log* +yarn-debug.log* +yarn-error.log* +lerna-debug.log* + +# Compiled binary addons (https://nodejs.org/api/addons.html) +build/Release +bundle/ + +dist +esm +types + +# Dependency directories +node_modules/ +jspm_packages/ + +.idea diff --git a/packages/marine/deps-loader.node/.npmignore b/packages/marine/deps-loader.node/.npmignore new file mode 100644 index 00000000..1354879a --- /dev/null +++ b/packages/marine/deps-loader.node/.npmignore @@ -0,0 +1,12 @@ +.idea +.gitignore +node_modules +types + +src/ + +tsconfig.json +webpack.config.js + +bundle +pkg \ No newline at end of file diff --git a/packages/marine/deps-loader.node/.prettierrc.js b/packages/marine/deps-loader.node/.prettierrc.js new file mode 100644 index 00000000..4e5ea887 --- /dev/null +++ b/packages/marine/deps-loader.node/.prettierrc.js @@ -0,0 +1,8 @@ +module.exports = { + semi: true, + trailingComma: "all", + singleQuote: true, + printWidth: 120, + tabWidth: 4, + useTabs: false +}; diff --git a/packages/marine/deps-loader.node/CONTRIBUTING.md b/packages/marine/deps-loader.node/CONTRIBUTING.md new file mode 100644 index 00000000..0e3b264d --- /dev/null +++ b/packages/marine/deps-loader.node/CONTRIBUTING.md @@ -0,0 +1,13 @@ +## Contribute Code + +You are welcome to contribute to Fluence. + +Things you need to know: + +1. You need to **agree to the Contributors License Agreement**. This is a common practice in all major Open Source projects. At the current moment we are unable to accept contributions made on behalf of a company. Only individual contributions will be accepted. +2. **Not all proposed contributions can be accepted**. Some features may e.g. just fit a third-party add-on better. The contribution must fit the overall direction of Fluence and really improve it. The more effort you invest, the better you should clarify in advance whether the contribution fits: the best way would be to just open an issue to discuss the contribution you plan to make. + +### Contributor License Agreement + +When you contribute, you have to be aware that your contribution is covered by **Apache License 2.0**, but might relicensed under few other software licenses mentioned in the **Contributor License Agreement**. +In particular you need to agree to the [Contributor License Agreement](https://gist.github.com/fluencelabs-org/3f4cbb3cc14c1c0fb9ad99d8f7316ed7). If you agree to its content, you simply have to click on the link posted by the CLA assistant as a comment to the pull request. Click it to check the CLA, then accept it on the following screen if you agree to it. CLA assistant will save this decision for upcoming contributions and will notify you if there is any change to the CLA in the meantime. diff --git a/packages/marine/deps-loader.node/README.md b/packages/marine/deps-loader.node/README.md new file mode 100644 index 00000000..af675dba --- /dev/null +++ b/packages/marine/deps-loader.node/README.md @@ -0,0 +1,11 @@ +# MarineJS deps loader for nodejs + +This package is a part of FluenceJS, the official implementation of the Fluence Peer in typescript. See the [FluenceJS repo](https://github.com/fluencelabs/fluence-js) for more info + +## Contributing + +While the project is still in the early stages of development, you are welcome to track progress and contribute. As the project is undergoing rapid changes, interested contributors should contact the team before embarking on larger pieces of work. All contributors should consult with and agree to our [basic contributing rules](CONTRIBUTING.md). + +## License + +[Apache 2.0](LICENSE) diff --git a/packages/marine/deps-loader.node/package.json b/packages/marine/deps-loader.node/package.json new file mode 100644 index 00000000..aa011b4c --- /dev/null +++ b/packages/marine/deps-loader.node/package.json @@ -0,0 +1,31 @@ +{ + "name": "@fluencelabs/marine.deps-loader.node", + "version": "0.1.0", + "description": "MarineJS deps loader", + "main": "./dist/index.js", + "typings": "./dist/index.d.ts", + "engines": { + "node": ">=10", + "pnpm": ">=3" + }, + "scripts": { + "build": "tsc && ./postbuild.sh" + }, + "repository": "https://github.com/fluencelabs/fluence-js", + "author": "Fluence Labs", + "license": "Apache-2.0", + "dependencies": { + "@fluencelabs/interfaces": "workspace:0.2.0", + "js-base64": "3.7.3", + "buffer": "^6.0.3" + }, + "devDependencies": { + "@fluencelabs/marine.worker-script": "workspace:0.1.0", + "@types/node": "16.11.59", + "threads": "^1.7.0", + "ts-loader": "8.4.0", + "typescript": "^4.6.4", + "webpack": "5.75.0", + "webpack-cli": "5.0.1" + } +} diff --git a/packages/marine/deps-loader.node/postbuild.sh b/packages/marine/deps-loader.node/postbuild.sh new file mode 100755 index 00000000..7ff5b448 --- /dev/null +++ b/packages/marine/deps-loader.node/postbuild.sh @@ -0,0 +1,4 @@ +#!/bin/sh + +cp ./node_modules/@fluencelabs/marine.worker-script/dist/marine-js.b64.node.d.ts dist/ +cp ./node_modules/@fluencelabs/marine.worker-script/dist/marine-js.b64.node.js dist/ \ No newline at end of file diff --git a/packages/marine/deps-loader.node/src/index.ts b/packages/marine/deps-loader.node/src/index.ts new file mode 100644 index 00000000..c7cfdc0e --- /dev/null +++ b/packages/marine/deps-loader.node/src/index.ts @@ -0,0 +1,78 @@ +import { LazyLoader } from '@fluencelabs/interfaces'; +import { BlobWorker } from 'threads'; +import type { WorkerImplementation } from 'threads/dist/types/master'; +import { Buffer } from 'buffer'; +import fs from 'fs'; +import path from 'path'; +import { fromBase64 } from 'js-base64'; +// @ts-ignore +import b64script from './marine-js.b64.node'; + +const bufferToSharedArrayBuffer = (buffer: Buffer): SharedArrayBuffer => { + const sab = new SharedArrayBuffer(buffer.length); + const tmp = new Uint8Array(sab); + tmp.set(buffer, 0); + return sab; +}; + +/** + * Load wasm file from npm package. Only works in nodejs environment. + * The function returns SharedArrayBuffer compatible with FluenceAppService methods. + * @param source - object specifying the source of the file. Consist two fields: package name and file path. + * @returns SharedArrayBuffer with the wasm file + */ +export const loadWasmFromNpmPackage = async (source: { package: string; file: string }): Promise => { + const packagePath = require.resolve(source.package); + const filePath = path.join(path.dirname(packagePath), source.file); + return loadWasmFromFileSystem(filePath); +}; + +/** + * Load wasm file from the file system. Only works in nodejs environment. + * The functions returns SharedArrayBuffer compatible with FluenceAppService methods. + * @param filePath - path to the wasm file + * @returns SharedArrayBuffer with the wasm fileWorker + */ +export const loadWasmFromFileSystem = async (filePath: string): Promise => { + const buffer = await fs.promises.readFile(filePath); + return bufferToSharedArrayBuffer(buffer); +}; + +export class WasmFsLoader extends LazyLoader { + constructor(filePath: string) { + super(() => loadWasmFromFileSystem(filePath)); + } +} + +export class WasmNpmLoader extends LazyLoader { + constructor(pkg: string, file: string) { + super(() => loadWasmFromNpmPackage({ package: pkg, file: file })); + } +} + +export class FsWorkerLoader extends LazyLoader { + constructor(scriptPath: string) { + super(() => { + return Promise.resolve(new Worker(scriptPath)); + }); + } +} + +export class NpmWorkerLoader extends LazyLoader { + constructor(pkg: string, file: string) { + super(() => { + const packagePath = require.resolve(pkg); + const scriptPath = path.join(path.dirname(packagePath), file); + return new Worker(scriptPath); + }); + } +} + +export class InlinedWorkerLoader extends LazyLoader { + constructor() { + super(() => { + const script = fromBase64(b64script); + return Promise.resolve(BlobWorker.fromText(script)); + }); + } +} diff --git a/packages/marine/deps-loader.node/tsconfig.json b/packages/marine/deps-loader.node/tsconfig.json new file mode 100644 index 00000000..51d16836 --- /dev/null +++ b/packages/marine/deps-loader.node/tsconfig.json @@ -0,0 +1,17 @@ +{ + "compilerOptions": { + "lib": ["es2017", "dom"], + "outDir": "./dist/", + "target": "es6", + "module": "commonjs", + "allowJs": true, + "strict": true, + "esModuleInterop": true, + "skipLibCheck": true, + "forceConsistentCasingInFileNames": true, + "declaration": true, + "sourceMap": true + }, + "exclude": ["node_modules", "dist"], + "include": ["src/**/*"] +} diff --git a/packages/marine/deps-loader.web/.gitignore b/packages/marine/deps-loader.web/.gitignore new file mode 100644 index 00000000..1a59a95f --- /dev/null +++ b/packages/marine/deps-loader.web/.gitignore @@ -0,0 +1,21 @@ +# Logs +logs +*.log +npm-debug.log* +yarn-debug.log* +yarn-error.log* +lerna-debug.log* + +# Compiled binary addons (https://nodejs.org/api/addons.html) +build/Release +bundle/ + +dist +esm +types + +# Dependency directories +node_modules/ +jspm_packages/ + +.idea diff --git a/packages/marine/deps-loader.web/.npmignore b/packages/marine/deps-loader.web/.npmignore new file mode 100644 index 00000000..1354879a --- /dev/null +++ b/packages/marine/deps-loader.web/.npmignore @@ -0,0 +1,12 @@ +.idea +.gitignore +node_modules +types + +src/ + +tsconfig.json +webpack.config.js + +bundle +pkg \ No newline at end of file diff --git a/packages/marine/deps-loader.web/.prettierrc.js b/packages/marine/deps-loader.web/.prettierrc.js new file mode 100644 index 00000000..4e5ea887 --- /dev/null +++ b/packages/marine/deps-loader.web/.prettierrc.js @@ -0,0 +1,8 @@ +module.exports = { + semi: true, + trailingComma: "all", + singleQuote: true, + printWidth: 120, + tabWidth: 4, + useTabs: false +}; diff --git a/packages/marine/deps-loader.web/CONTRIBUTING.md b/packages/marine/deps-loader.web/CONTRIBUTING.md new file mode 100644 index 00000000..0e3b264d --- /dev/null +++ b/packages/marine/deps-loader.web/CONTRIBUTING.md @@ -0,0 +1,13 @@ +## Contribute Code + +You are welcome to contribute to Fluence. + +Things you need to know: + +1. You need to **agree to the Contributors License Agreement**. This is a common practice in all major Open Source projects. At the current moment we are unable to accept contributions made on behalf of a company. Only individual contributions will be accepted. +2. **Not all proposed contributions can be accepted**. Some features may e.g. just fit a third-party add-on better. The contribution must fit the overall direction of Fluence and really improve it. The more effort you invest, the better you should clarify in advance whether the contribution fits: the best way would be to just open an issue to discuss the contribution you plan to make. + +### Contributor License Agreement + +When you contribute, you have to be aware that your contribution is covered by **Apache License 2.0**, but might relicensed under few other software licenses mentioned in the **Contributor License Agreement**. +In particular you need to agree to the [Contributor License Agreement](https://gist.github.com/fluencelabs-org/3f4cbb3cc14c1c0fb9ad99d8f7316ed7). If you agree to its content, you simply have to click on the link posted by the CLA assistant as a comment to the pull request. Click it to check the CLA, then accept it on the following screen if you agree to it. CLA assistant will save this decision for upcoming contributions and will notify you if there is any change to the CLA in the meantime. diff --git a/packages/marine/deps-loader.web/README.md b/packages/marine/deps-loader.web/README.md new file mode 100644 index 00000000..46761d62 --- /dev/null +++ b/packages/marine/deps-loader.web/README.md @@ -0,0 +1,11 @@ +# MarineJS deps loader for web + +This package is a part of FluenceJS, the official implementation of the Fluence Peer in typescript. See the [FluenceJS repo](https://github.com/fluencelabs/fluence-js) for more info + +## Contributing + +While the project is still in the early stages of development, you are welcome to track progress and contribute. As the project is undergoing rapid changes, interested contributors should contact the team before embarking on larger pieces of work. All contributors should consult with and agree to our [basic contributing rules](CONTRIBUTING.md). + +## License + +[Apache 2.0](LICENSE) diff --git a/packages/marine/deps-loader.web/package.json b/packages/marine/deps-loader.web/package.json new file mode 100644 index 00000000..6a328043 --- /dev/null +++ b/packages/marine/deps-loader.web/package.json @@ -0,0 +1,30 @@ +{ + "name": "@fluencelabs/marine.deps-loader.web", + "version": "0.1.0", + "description": "MarineJS deps loader web", + "main": "./dist/index.js", + "typings": "./dist/index.d.ts", + "engines": { + "node": ">=10", + "pnpm": ">=3" + }, + "scripts": { + "build": "tsc && ./postbuild.sh" + }, + "repository": "https://github.com/fluencelabs/fluence-js", + "author": "Fluence Labs", + "license": "Apache-2.0", + "dependencies": { + "buffer": "^6.0.3", + "js-base64": "3.7.3", + "@fluencelabs/interfaces": "workspace:0.2.0" + }, + "devDependencies": { + "@fluencelabs/marine.worker-script": "workspace:0.1.0", + "typescript": "^4.6.4", + "threads": "^1.7.0", + "ts-loader": "8.4.0", + "webpack": "4.46.0", + "webpack-cli": "4.10.0" + } +} diff --git a/packages/marine/deps-loader.web/postbuild.sh b/packages/marine/deps-loader.web/postbuild.sh new file mode 100755 index 00000000..c06ffd4d --- /dev/null +++ b/packages/marine/deps-loader.web/postbuild.sh @@ -0,0 +1,4 @@ +#!/bin/sh + +cp ./node_modules/@fluencelabs/marine.worker-script/dist/marine-js.b64.web.d.ts dist/ +cp ./node_modules/@fluencelabs/marine.worker-script/dist/marine-js.b64.web.js dist/ \ No newline at end of file diff --git a/packages/marine/deps-loader.web/src/index.ts b/packages/marine/deps-loader.web/src/index.ts new file mode 100644 index 00000000..46bd1249 --- /dev/null +++ b/packages/marine/deps-loader.web/src/index.ts @@ -0,0 +1,54 @@ +import { BlobWorker } from 'threads'; +import { Buffer } from 'buffer'; +import { LazyLoader } from '@fluencelabs/interfaces'; +import type { WorkerImplementation } from 'threads/dist/types/master'; +import { fromBase64 } from 'js-base64'; +// @ts-ignore +import b64script from './marine-js.b64.web'; + +const bufferToSharedArrayBuffer = (buffer: Buffer): SharedArrayBuffer => { + const sab = new SharedArrayBuffer(buffer.length); + const tmp = new Uint8Array(sab); + tmp.set(buffer, 0); + return sab; +}; + +/** + * 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 https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/SharedArrayBuffer#security_requirements + * Filename is relative to current origin. + * @param filePath - path to the wasm file relative to current origin + * @returns Either SharedArrayBuffer or Buffer with the wasm file + */ +export const loadWasmFromServer = async (filePath: string): Promise => { + const fullUrl = window.location.origin + '/' + filePath; + const res = await fetch(fullUrl); + const ab = await res.arrayBuffer(); + new Uint8Array(ab); + const buffer = Buffer.from(ab); + + // only convert to shared buffers if necessary CORS headers have been set: + // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/SharedArrayBuffer#security_requirements + if (crossOriginIsolated) { + return bufferToSharedArrayBuffer(buffer); + } + + return buffer; +}; + +export class WasmWebLoader extends LazyLoader { + constructor(filePath: string) { + super(() => loadWasmFromServer(filePath)); + } +} + +export class InlinedWorkerLoader extends LazyLoader { + constructor() { + super(() => { + const script = fromBase64(b64script); + return Promise.resolve(BlobWorker.fromText(script)); + }); + } +} diff --git a/packages/marine/deps-loader.web/tsconfig.json b/packages/marine/deps-loader.web/tsconfig.json new file mode 100644 index 00000000..6a02a1b3 --- /dev/null +++ b/packages/marine/deps-loader.web/tsconfig.json @@ -0,0 +1,18 @@ +{ + "compilerOptions": { + "lib": ["es2017", "dom"], + "outDir": "./dist/", + "target": "es5", + "module": "commonjs", + "allowJs": true, + "strict": true, + "esModuleInterop": true, + "skipLibCheck": true, + "forceConsistentCasingInFileNames": true, + "declaration": true, + "declarationMap": false, + "sourceMap": false + }, + "exclude": ["node_modules", "dist"], + "include": ["src/**/*"] +} diff --git a/packages/marine/worker-script/.gitignore b/packages/marine/worker-script/.gitignore new file mode 100644 index 00000000..1a59a95f --- /dev/null +++ b/packages/marine/worker-script/.gitignore @@ -0,0 +1,21 @@ +# Logs +logs +*.log +npm-debug.log* +yarn-debug.log* +yarn-error.log* +lerna-debug.log* + +# Compiled binary addons (https://nodejs.org/api/addons.html) +build/Release +bundle/ + +dist +esm +types + +# Dependency directories +node_modules/ +jspm_packages/ + +.idea diff --git a/packages/marine/worker-script/.npmignore b/packages/marine/worker-script/.npmignore new file mode 100644 index 00000000..1354879a --- /dev/null +++ b/packages/marine/worker-script/.npmignore @@ -0,0 +1,12 @@ +.idea +.gitignore +node_modules +types + +src/ + +tsconfig.json +webpack.config.js + +bundle +pkg \ No newline at end of file diff --git a/packages/marine/worker-script/.prettierrc.js b/packages/marine/worker-script/.prettierrc.js new file mode 100644 index 00000000..4e5ea887 --- /dev/null +++ b/packages/marine/worker-script/.prettierrc.js @@ -0,0 +1,8 @@ +module.exports = { + semi: true, + trailingComma: "all", + singleQuote: true, + printWidth: 120, + tabWidth: 4, + useTabs: false +}; diff --git a/packages/marine/worker-script/CONTRIBUTING.md b/packages/marine/worker-script/CONTRIBUTING.md new file mode 100644 index 00000000..0e3b264d --- /dev/null +++ b/packages/marine/worker-script/CONTRIBUTING.md @@ -0,0 +1,13 @@ +## Contribute Code + +You are welcome to contribute to Fluence. + +Things you need to know: + +1. You need to **agree to the Contributors License Agreement**. This is a common practice in all major Open Source projects. At the current moment we are unable to accept contributions made on behalf of a company. Only individual contributions will be accepted. +2. **Not all proposed contributions can be accepted**. Some features may e.g. just fit a third-party add-on better. The contribution must fit the overall direction of Fluence and really improve it. The more effort you invest, the better you should clarify in advance whether the contribution fits: the best way would be to just open an issue to discuss the contribution you plan to make. + +### Contributor License Agreement + +When you contribute, you have to be aware that your contribution is covered by **Apache License 2.0**, but might relicensed under few other software licenses mentioned in the **Contributor License Agreement**. +In particular you need to agree to the [Contributor License Agreement](https://gist.github.com/fluencelabs-org/3f4cbb3cc14c1c0fb9ad99d8f7316ed7). If you agree to its content, you simply have to click on the link posted by the CLA assistant as a comment to the pull request. Click it to check the CLA, then accept it on the following screen if you agree to it. CLA assistant will save this decision for upcoming contributions and will notify you if there is any change to the CLA in the meantime. diff --git a/packages/marine/worker-script/README.md b/packages/marine/worker-script/README.md new file mode 100644 index 00000000..fbeaa388 --- /dev/null +++ b/packages/marine/worker-script/README.md @@ -0,0 +1,11 @@ +# MarineJS background worker script + +This package is a part of FluenceJS, the official implementation of the Fluence Peer in typescript. See the [FluenceJS repo](https://github.com/fluencelabs/fluence-js) for more info + +## Contributing + +While the project is still in the early stages of development, you are welcome to track progress and contribute. As the project is undergoing rapid changes, interested contributors should contact the team before embarking on larger pieces of work. All contributors should consult with and agree to our [basic contributing rules](CONTRIBUTING.md). + +## License + +[Apache 2.0](LICENSE) diff --git a/packages/marine/worker-script/build_b64.sh b/packages/marine/worker-script/build_b64.sh new file mode 100755 index 00000000..f5b86edc --- /dev/null +++ b/packages/marine/worker-script/build_b64.sh @@ -0,0 +1,36 @@ +#!/bin/sh + +## base64 on MacOS doesn't have -w option +if echo | base64 -w0 > /dev/null 2>&1; +then + BASE64_WEB=$(base64 -w0 ./dist/marine-js.web.js) + BASE64_NODE=$(base64 -w0 ./dist/marine-js.node.js) +else + BASE64_WEB=$(base64 ./dist/marine-js.web.js) + BASE64_NODE=$(base64 ./dist/marine-js.node.js) +fi + +cat << EOF > ./dist/marine-js.b64.web.js +"use strict"; +// auto-generated +Object.defineProperty(exports, "__esModule", { value: true }); +exports.default = "$BASE64_WEB"; +EOF + +cat << EOF > ./dist/marine-js.b64.node.js +"use strict"; +// auto-generated +Object.defineProperty(exports, "__esModule", { value: true }); +exports.default = "$BASE64_NODE"; +EOF + +cat << EOF > ./dist/marine-js.b64.node.d.ts +declare const _default: string; +export default _default; +EOF + +cat << EOF > ./dist/marine-js.b64.web.d.ts +declare const _default: string; +export default _default; +EOF + diff --git a/packages/marine/worker-script/package.json b/packages/marine/worker-script/package.json new file mode 100644 index 00000000..8e675fd2 --- /dev/null +++ b/packages/marine/worker-script/package.json @@ -0,0 +1,31 @@ +{ + "version": "0.1.0", + "name": "@fluencelabs/marine.worker-script", + "description": "MarineJS background worker script", + "main": "./dist/index.js", + "typings": "./dist/index.d.ts", + "engines": { + "node": ">=10", + "pnpm": ">=3" + }, + "scripts": { + "build": "tsc --emitDeclarationOnly && pnpm build:web && pnpm build:node && pnpm build:b64 ", + "build:b64": "./build_b64.sh", + "build:web": "webpack -c webpack.config.web.js", + "build:node": "webpack -c webpack.config.node.js" + }, + "repository": "https://github.com/fluencelabs/fluence-js", + "author": "Fluence Labs", + "license": "Apache-2.0", + "dependencies": { + "@fluencelabs/marine-js": "0.3.38", + "threads": "^1.7.0" + }, + "devDependencies": { + "@types/node": "16.11.59", + "ts-loader": "8.4.0", + "typescript": "^4.6.4", + "webpack": "5.75.0", + "webpack-cli": "5.0.1" + } +} diff --git a/packages/marine/worker-script/src/index.ts b/packages/marine/worker-script/src/index.ts new file mode 100644 index 00000000..0935ec72 --- /dev/null +++ b/packages/marine/worker-script/src/index.ts @@ -0,0 +1,82 @@ +/* + * 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 { MarineService } from '@fluencelabs/marine-js'; +import type { Env, MarineServiceConfig, JSONArray, JSONObject, LogMessage } from '@fluencelabs/marine-js'; +import { Observable, Subject } from 'threads/observable'; +import { expose } from 'threads'; + +let marineServices = new Map(); +let controlModule: WebAssembly.Module | undefined; + +const onLogMessage = new Subject(); + +const asArray = (buf: SharedArrayBuffer | Buffer) => { + return new Uint8Array(buf); +}; + +const toExpose = { + init: async (controlModuleWasm: SharedArrayBuffer | Buffer): Promise => { + controlModule = await WebAssembly.compile(asArray(controlModuleWasm)); + }, + + createService: async ( + wasm: SharedArrayBuffer | Buffer, + serviceId: string, + marineConfig?: MarineServiceConfig, + envs?: Env, + ): Promise => { + if (!controlModule) { + throw new Error('MarineJS is not initialized. To initialize call `init` function'); + } + + const service = await WebAssembly.compile(asArray(wasm)); + const srv = new MarineService( + controlModule, + service, + serviceId, + onLogMessage.next.bind(onLogMessage), + marineConfig, + envs, + ); + await srv.init(); + marineServices.set(serviceId, srv); + }, + + terminate: () => { + marineServices.forEach((val, key) => { + val.terminate(); + }); + onLogMessage.complete(); + }, + + callService: (serviceId: string, functionName: string, args: JSONArray | JSONObject, callParams: any): unknown => { + const srv = marineServices.get(serviceId); + if (!srv) { + throw new Error(`service with id=${serviceId} not found`); + } + + return srv.call(functionName, args, callParams); + }, + + onLogMessage(): Observable { + return Observable.from(onLogMessage); + }, +}; + +export type MarineBackgroundInterface = typeof toExpose; + +expose(toExpose); diff --git a/packages/marine/worker-script/tsconfig.json b/packages/marine/worker-script/tsconfig.json new file mode 100644 index 00000000..63fa4675 --- /dev/null +++ b/packages/marine/worker-script/tsconfig.json @@ -0,0 +1,18 @@ +{ + "compilerOptions": { + "lib": ["es2015", "dom"], + "outDir": "./dist/", + "target": "es5", + "module": "commonjs", + "allowJs": true, + "strict": true, + "esModuleInterop": true, + "skipLibCheck": true, + "forceConsistentCasingInFileNames": true, + "declaration": true, + "declarationMap": false, + "sourceMap": false + }, + "exclude": ["node_modules", "dist"], + "include": ["src"] +} diff --git a/packages/marine/worker-script/webpack.config.js b/packages/marine/worker-script/webpack.config.js new file mode 100644 index 00000000..5080c772 --- /dev/null +++ b/packages/marine/worker-script/webpack.config.js @@ -0,0 +1,47 @@ +// Generated using webpack-cli https://github.com/webpack/webpack-cli + +const path = require('path'); + +// const isProduction = true; +// uncomment to debug +const isProduction = false; + +const config = () => ({ + entry: './src/index.ts', + output: { + path: path.resolve('dist'), + }, + module: { + rules: [ + { + test: /\.(js|ts|tsx)$/i, + use: [ + // force new line + { + loader: 'ts-loader', + options: { + compilerOptions: { + declaration: false, + }, + }, + }, + ], + exclude: ['/node_modules/'], + }, + ], + }, + resolve: { + extensions: ['.tsx', '.ts', '.js'], + }, +}); + +module.exports = () => { + const res = config(); + if (isProduction) { + res.mode = 'production'; + } else { + res.mode = 'development'; + } + + return res; +}; diff --git a/packages/marine/worker-script/webpack.config.node.js b/packages/marine/worker-script/webpack.config.node.js new file mode 100644 index 00000000..509a4a58 --- /dev/null +++ b/packages/marine/worker-script/webpack.config.node.js @@ -0,0 +1,10 @@ +// Generated using webpack-cli https://github.com/webpack/webpack-cli + +const config = require('./webpack.config.js'); + +module.exports = () => { + const cfg = config(); + cfg.output.filename = 'marine-js.node.js'; + cfg.target = 'node'; + return cfg; +}; diff --git a/packages/marine/worker-script/webpack.config.web.js b/packages/marine/worker-script/webpack.config.web.js new file mode 100644 index 00000000..defb6f21 --- /dev/null +++ b/packages/marine/worker-script/webpack.config.web.js @@ -0,0 +1,10 @@ +// Generated using webpack-cli https://github.com/webpack/webpack-cli + +const config = require('./webpack.config.js'); + +module.exports = () => { + const cfg = config(); + cfg.output.filename = 'marine-js.web.js'; + cfg.target = 'web'; + return cfg; +}; diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 8f67663d..18cb9941 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -2,38 +2,146 @@ lockfileVersion: 5.4 importers: + packages/@tests/marine/node: + specifiers: + '@fluencelabs/avm': 0.32.1 + '@fluencelabs/marine.background-runner': workspace:0.1.0 + '@fluencelabs/marine.deps-loader.node': workspace:0.1.0 + '@types/jest': 28.1.0 + '@types/node': 16.11.59 + jest: 28.1.0 + ts-jest: 28.0.2 + typescript: ^4.0.0 + dependencies: + '@fluencelabs/avm': 0.32.1 + '@fluencelabs/marine.background-runner': link:../../../marine/background-runner + '@fluencelabs/marine.deps-loader.node': link:../../../marine/deps-loader.node + devDependencies: + '@types/jest': 28.1.0 + '@types/node': 16.11.59 + jest: 28.1.0_@types+node@16.11.59 + ts-jest: 28.0.2_qah6rulmyywoowvfc5owcdakum + typescript: 4.7.4 + packages/@tests/smoke: specifiers: '@fluencelabs/fluence': workspace:* - '@types/node': ^18.7.13 - ts-node: ^10.9.1 - typescript: ^4.6.4 + '@fluencelabs/js-client.node': workspace:* + '@types/node': 16.11.59 + ts-node: 10.9.1 + typescript: 4.6.4 dependencies: - '@fluencelabs/fluence': link:../../fluence-js - ts-node: 10.9.1_leegklmkepybzc4ng4qys4ftou + '@fluencelabs/fluence': link:../../client/fluence-js + '@fluencelabs/js-client.node': link:../../client/js-client.node + ts-node: 10.9.1_f4s53rsdbgkmxc2oaa23drhnsy devDependencies: - '@types/node': 18.7.14 - typescript: 4.7.4 + '@types/node': 16.11.59 + typescript: 4.6.4 - packages/fluence-connection: + packages/client/compiler-support: specifiers: - '@chainsafe/libp2p-noise': ^4.1.1 - '@fluencelabs/interfaces': workspace:0.1.0 - browser-or-node: 2.0.0 - buffer: ^6.0.3 - it-length-prefixed: 5.0.3 - it-pipe: 1.1.0 - libp2p: 0.36.2 - libp2p-interfaces: ^4.0.6 - libp2p-mplex: 0.10.7 - libp2p-websockets: 0.16.2 - loglevel: 1.8.1 - multiaddr: 10.0.1 - peer-id: 0.16.0 - typescript: ^4.6.4 + '@fluencelabs/js-peer': workspace:0.1.0 + '@types/jest': 28.1.0 + '@types/node': 16.11.59 + jest: 28.1.0 + ts-jest: 28.0.2 + ts-node: 10.9.1 + typescript: 4.6.4 dependencies: - '@chainsafe/libp2p-noise': 4.1.2 - '@fluencelabs/interfaces': link:../fluence-interfaces + '@fluencelabs/js-peer': link:../../core/js-peer + devDependencies: + '@types/jest': 28.1.0 + '@types/node': 16.11.59 + jest: 28.1.0_4echt27za7uk6ezjshmbxcfmgy + ts-jest: 28.0.2_vibqa5hxa5biq5fwuxzv5iobty + ts-node: 10.9.1_f4s53rsdbgkmxc2oaa23drhnsy + typescript: 4.6.4 + + packages/client/fluence-js: + specifiers: + '@fluencelabs/avm': 0.32.1 + '@fluencelabs/js-peer': workspace:0.1.0 + '@fluencelabs/keypair': workspace:0.2.0 + '@fluencelabs/marine-js': 0.3.38 + '@types/jest': 28.1.0 + '@types/node': 16.11.59 + jest: 28.1.0 + loglevel: 1.8.1 + ts-jest: 28.0.2 + ts-node: 10.9.1 + typescript: 4.6.4 + dependencies: + '@fluencelabs/avm': 0.32.1 + '@fluencelabs/js-peer': link:../../core/js-peer + '@fluencelabs/keypair': link:../../core/keypair + '@fluencelabs/marine-js': 0.3.38 + loglevel: 1.8.1 + devDependencies: + '@types/jest': 28.1.0 + '@types/node': 16.11.59 + jest: 28.1.0_4echt27za7uk6ezjshmbxcfmgy + ts-jest: 28.0.2_vibqa5hxa5biq5fwuxzv5iobty + ts-node: 10.9.1_f4s53rsdbgkmxc2oaa23drhnsy + typescript: 4.6.4 + + packages/client/js-client.node: + specifiers: + '@fluencelabs/js-peer': workspace:0.1.0 + '@fluencelabs/marine.background-runner': workspace:0.1.0 + '@fluencelabs/marine.deps-loader.node': workspace:0.1.0 + '@types/jest': 28.1.0 + '@types/node': 16.11.59 + jest: 28.1.0 + ts-jest: 28.0.2 + ts-node: 10.9.1 + typescript: 4.6.4 + dependencies: + '@fluencelabs/js-peer': link:../../core/js-peer + '@fluencelabs/marine.background-runner': link:../../marine/background-runner + '@fluencelabs/marine.deps-loader.node': link:../../marine/deps-loader.node + devDependencies: + '@types/jest': 28.1.0 + '@types/node': 16.11.59 + jest: 28.1.0_4echt27za7uk6ezjshmbxcfmgy + ts-jest: 28.0.2_vibqa5hxa5biq5fwuxzv5iobty + ts-node: 10.9.1_f4s53rsdbgkmxc2oaa23drhnsy + typescript: 4.6.4 + + packages/client/js-client.web: + specifiers: + '@fluencelabs/js-peer': workspace:0.1.0 + '@fluencelabs/marine.background-runner': workspace:0.1.0 + '@fluencelabs/marine.deps-loader.web': workspace:0.1.0 + '@types/jest': 28.1.0 + '@types/node': 16.11.59 + jest: 28.1.0 + ts-jest: 28.0.2 + ts-node: 10.9.1 + typescript: 4.6.4 + dependencies: + '@fluencelabs/js-peer': link:../../core/js-peer + '@fluencelabs/marine.background-runner': link:../../marine/background-runner + '@fluencelabs/marine.deps-loader.web': link:../../marine/deps-loader.web + devDependencies: + '@types/jest': 28.1.0 + '@types/node': 16.11.59 + jest: 28.1.0_4echt27za7uk6ezjshmbxcfmgy + ts-jest: 28.0.2_vibqa5hxa5biq5fwuxzv5iobty + ts-node: 10.9.1_f4s53rsdbgkmxc2oaa23drhnsy + typescript: 4.6.4 + + packages/client/tools: + specifiers: + '@types/node': 16.11.59 + typescript: 4.6.4 + devDependencies: + '@types/node': 16.11.59 + typescript: 4.6.4 + + packages/core/connection: + specifiers: + '@chainsafe/libp2p-noise': 4.1.1 + '@fluencelabs/interfaces': workspace:0.2.0 browser-or-node: 2.0.0 buffer: 6.0.3 it-length-prefixed: 5.0.3 @@ -45,58 +153,83 @@ importers: loglevel: 1.8.1 multiaddr: 10.0.1 peer-id: 0.16.0 + typescript: 4.6.4 + dependencies: + '@chainsafe/libp2p-noise': 4.1.1 + '@fluencelabs/interfaces': link:../interfaces + browser-or-node: 2.0.0 + buffer: 6.0.3 + it-length-prefixed: 5.0.3 + it-pipe: 1.1.0 + libp2p: 0.36.2_node-fetch@3.2.10 + libp2p-interfaces: 4.0.6_node-fetch@3.2.10 + libp2p-mplex: 0.10.7 + libp2p-websockets: 0.16.2_node-fetch@3.2.10 + loglevel: 1.8.1 + multiaddr: 10.0.1_node-fetch@3.2.10 + peer-id: 0.16.0 devDependencies: - typescript: 4.7.4 + typescript: 4.6.4 - packages/fluence-interfaces: + packages/core/interfaces: specifiers: - typescript: ^4.6.4 + '@fluencelabs/avm': 0.31.10 + '@fluencelabs/marine-js': 0.3.38 + '@types/node': 16.11.59 + threads: ^1.7.0 + typescript: 4.6.4 devDependencies: - typescript: 4.7.4 + '@fluencelabs/avm': 0.31.10 + '@fluencelabs/marine-js': 0.3.38 + '@types/node': 16.11.59 + threads: 1.7.0 + typescript: 4.6.4 - packages/fluence-js: + packages/core/js-peer: specifiers: '@fluencelabs/aqua': 0.7.7-362 + '@fluencelabs/aqua-api': 0.9.1-373 '@fluencelabs/aqua-lib': 0.6.0 - '@fluencelabs/avm': 0.31.10 + '@fluencelabs/avm': 0.32.1 '@fluencelabs/connection': workspace:0.2.0 - '@fluencelabs/fluence-network-environment': ^1.0.13 - '@fluencelabs/interfaces': workspace:0.1.0 + '@fluencelabs/fluence-network-environment': 1.0.13 + '@fluencelabs/interfaces': workspace:0.2.0 '@fluencelabs/keypair': workspace:0.2.0 - '@fluencelabs/marine-js': 0.3.37 - '@types/bs58': ^4.0.1 - '@types/jest': ^27.5.1 - '@types/platform': ^1.3.4 - '@types/uuid': ^8.3.4 + '@fluencelabs/marine-js': 0.3.38 + '@fluencelabs/marine.background-runner': workspace:0.1.0 + '@fluencelabs/marine.deps-loader.node': workspace:0.1.0 + '@types/bs58': 4.0.1 + '@types/jest': 28.1.0 + '@types/platform': 1.3.4 + '@types/uuid': 8.3.2 async: 3.2.4 base64-js: ^1.5.1 - browser-or-node: 2.0.0 bs58: 5.0.0 - buffer: ^6.0.3 + buffer: 6.0.3 cids: 1.1.9 - jest: ^28.1.0 - jest-each: ^28.1.3 - js-base64: ^3.7.2 + jest: 28.1.0 + jest-each: 28.1.3 + js-base64: 3.7.2 loglevel: 1.8.1 multiaddr: 10.0.1 multiformats: 9.9.0 peer-id: 0.16.0 - platform: ^1.3.6 - rxjs: ^7.5.5 - ts-jest: ^28.0.2 + platform: 1.3.6 + rxjs: 7.5.5 + ts-jest: 28.0.2 + ts-node: 10.9.1 ts-pattern: 3.3.3 - typedoc: ^0.22.15 - typescript: ^4.6.4 + typescript: 4.6.4 uuid: 8.3.2 dependencies: - '@fluencelabs/avm': 0.31.10 - '@fluencelabs/connection': link:../fluence-connection - '@fluencelabs/interfaces': link:../fluence-interfaces - '@fluencelabs/keypair': link:../fluence-keypair - '@fluencelabs/marine-js': 0.3.37_rl5xm3oiydas7snsul2pa47p2m + '@fluencelabs/avm': 0.32.1 + '@fluencelabs/connection': link:../connection + '@fluencelabs/interfaces': link:../interfaces + '@fluencelabs/keypair': link:../keypair + '@fluencelabs/marine-js': 0.3.38 + '@fluencelabs/marine.background-runner': link:../../marine/background-runner async: 3.2.4 base64-js: 1.5.1 - browser-or-node: 2.0.0 bs58: 5.0.0 buffer: 6.0.3 cids: 1.1.9 @@ -104,38 +237,124 @@ importers: multiformats: 9.9.0 peer-id: 0.16.0 platform: 1.3.6 - rxjs: 7.5.6 + rxjs: 7.5.5 ts-pattern: 3.3.3 uuid: 8.3.2 devDependencies: - '@fluencelabs/aqua': 0.7.7-362_rl5xm3oiydas7snsul2pa47p2m + '@fluencelabs/aqua': 0.7.7-362_i3yjj2scigfcyyfwxdhvpsnmxe + '@fluencelabs/aqua-api': 0.9.1-373 '@fluencelabs/aqua-lib': 0.6.0 '@fluencelabs/fluence-network-environment': 1.0.13 + '@fluencelabs/marine.deps-loader.node': link:../../marine/deps-loader.node '@types/bs58': 4.0.1 - '@types/jest': 27.5.2 + '@types/jest': 28.1.0 '@types/platform': 1.3.4 - '@types/uuid': 8.3.4 - jest: 28.1.3 + '@types/uuid': 8.3.2 + jest: 28.1.0_gsb7asu77en4txj3es3i65pxci jest-each: 28.1.3 js-base64: 3.7.2 - multiaddr: 10.0.1 - ts-jest: 28.0.8_wnrrwh7x4gcdskobbfqnvknnyi - typedoc: 0.22.18_typescript@4.7.4 - typescript: 4.7.4 + multiaddr: 10.0.1_node-fetch@3.2.10 + ts-jest: 28.0.2_vibqa5hxa5biq5fwuxzv5iobty + ts-node: 10.9.1_apbkdfxvcdmborgupeskcsfbo4 + typescript: 4.6.4 - packages/fluence-keypair: + packages/core/keypair: specifiers: - js-base64: ^3.7.2 + js-base64: 3.7.2 libp2p-crypto: 0.21.2 peer-id: 0.16.0 - typescript: ^4.6.4 + typescript: 4.6.4 dependencies: js-base64: 3.7.2 libp2p-crypto: 0.21.2 peer-id: 0.16.0 devDependencies: + typescript: 4.6.4 + + packages/marine/background-runner: + specifiers: + '@fluencelabs/interfaces': workspace:0.2.0 + '@fluencelabs/marine-js': 0.3.38 + '@fluencelabs/marine.worker-script': workspace:0.1.0 + '@types/node': 16.11.59 + threads: ^1.7.0 + typescript: ^4.6.4 + dependencies: + threads: 1.7.0 + devDependencies: + '@fluencelabs/interfaces': link:../../core/interfaces + '@fluencelabs/marine-js': 0.3.38 + '@fluencelabs/marine.worker-script': link:../worker-script + '@types/node': 16.11.59 typescript: 4.7.4 + packages/marine/deps-loader.node: + specifiers: + '@fluencelabs/interfaces': workspace:0.2.0 + '@fluencelabs/marine.worker-script': workspace:0.1.0 + '@types/node': 16.11.59 + buffer: ^6.0.3 + js-base64: 3.7.3 + threads: ^1.7.0 + ts-loader: 8.4.0 + typescript: ^4.6.4 + webpack: 5.75.0 + webpack-cli: 5.0.1 + dependencies: + '@fluencelabs/interfaces': link:../../core/interfaces + buffer: 6.0.3 + js-base64: 3.7.3 + devDependencies: + '@fluencelabs/marine.worker-script': link:../worker-script + '@types/node': 16.11.59 + threads: 1.7.0 + ts-loader: 8.4.0_l2co7ao223gzrfox7yaiyzd7wu + typescript: 4.7.4 + webpack: 5.75.0_webpack-cli@5.0.1 + webpack-cli: 5.0.1_webpack@5.75.0 + + packages/marine/deps-loader.web: + specifiers: + '@fluencelabs/interfaces': workspace:0.2.0 + '@fluencelabs/marine.worker-script': workspace:0.1.0 + buffer: ^6.0.3 + js-base64: 3.7.3 + threads: ^1.7.0 + ts-loader: 8.4.0 + typescript: ^4.6.4 + webpack: 4.46.0 + webpack-cli: 4.10.0 + dependencies: + '@fluencelabs/interfaces': link:../../core/interfaces + buffer: 6.0.3 + js-base64: 3.7.3 + devDependencies: + '@fluencelabs/marine.worker-script': link:../worker-script + threads: 1.7.0 + ts-loader: 8.4.0_hrl2l4xchpnd6hlkqocppvpxx4 + typescript: 4.7.4 + webpack: 4.46.0_webpack-cli@4.10.0 + webpack-cli: 4.10.0_webpack@4.46.0 + + packages/marine/worker-script: + specifiers: + '@fluencelabs/marine-js': 0.3.38 + '@types/node': 16.11.59 + threads: ^1.7.0 + ts-loader: 8.4.0 + typescript: ^4.6.4 + webpack: 5.75.0 + webpack-cli: 5.0.1 + dependencies: + '@fluencelabs/marine-js': 0.3.38 + threads: 1.7.0 + devDependencies: + '@types/node': 16.11.59 + ts-loader: 8.4.0_l2co7ao223gzrfox7yaiyzd7wu + typescript: 4.7.4 + webpack: 5.75.0_webpack-cli@5.0.1 + webpack-cli: 5.0.1_webpack@5.75.0 + packages: /@achingbrain/node-fetch/2.6.7: @@ -148,16 +367,19 @@ packages: dependencies: '@jridgewell/gen-mapping': 0.1.1 '@jridgewell/trace-mapping': 0.3.15 + dev: true /@babel/code-frame/7.18.6: resolution: {integrity: sha512-TDCmlK5eOvH+eH7cdAFlNXeVJqWIQ7gW9tY1GJIpUtFb6CmjVyq2VM3u71bOyR8CRihcCgMUYoDNyLXao3+70Q==} engines: {node: '>=6.9.0'} dependencies: '@babel/highlight': 7.18.6 + dev: true - /@babel/compat-data/7.18.13: - resolution: {integrity: sha512-5yUzC5LqyTFp2HLmDoxGQelcdYgSpP9xsnMWBphAscOdFrHSAVbLNzWiy32sVNDqJRDiJK6klfDnAgu6PAGSHw==} + /@babel/compat-data/7.20.10: + resolution: {integrity: sha512-sEnuDPpOJR/fcafHMjpcpGN5M2jbUGUHwmuWKM/YdPzeEDJg8bgmbcWQFUfE32MQjti1koACvoPVsDe8Uq+idg==} engines: {node: '>=6.9.0'} + dev: true /@babel/core/7.18.13: resolution: {integrity: sha512-ZisbOvRRusFktksHSG6pjj1CSvkPkcZq/KHD45LAkVP/oiHJkNBZWfpvlLmX8OtHDG8IuzsFlVRWo08w7Qxn0A==} @@ -165,14 +387,14 @@ packages: dependencies: '@ampproject/remapping': 2.2.0 '@babel/code-frame': 7.18.6 - '@babel/generator': 7.18.13 - '@babel/helper-compilation-targets': 7.18.9_@babel+core@7.18.13 - '@babel/helper-module-transforms': 7.18.9 + '@babel/generator': 7.20.7 + '@babel/helper-compilation-targets': 7.20.7_@babel+core@7.18.13 + '@babel/helper-module-transforms': 7.20.11 '@babel/helpers': 7.18.9 - '@babel/parser': 7.18.13 - '@babel/template': 7.18.10 - '@babel/traverse': 7.18.13 - '@babel/types': 7.18.13 + '@babel/parser': 7.20.7 + '@babel/template': 7.20.7 + '@babel/traverse': 7.20.10 + '@babel/types': 7.20.7 convert-source-map: 1.8.0 debug: 4.3.4 gensync: 1.0.0-beta.2 @@ -180,116 +402,135 @@ packages: semver: 6.3.0 transitivePeerDependencies: - supports-color + dev: true - /@babel/generator/7.18.13: - resolution: {integrity: sha512-CkPg8ySSPuHTYPJYo7IRALdqyjM9HCbt/3uOBEFbzyGVP6Mn8bwFPB0jX6982JVNBlYzM1nnPkfjuXSOPtQeEQ==} + /@babel/generator/7.20.7: + resolution: {integrity: sha512-7wqMOJq8doJMZmP4ApXTzLxSr7+oO2jroJURrVEp6XShrQUObV8Tq/D0NCcoYg2uHqUrjzO0zwBjoYzelxK+sw==} engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.18.13 + '@babel/types': 7.20.7 '@jridgewell/gen-mapping': 0.3.2 jsesc: 2.5.2 + dev: true - /@babel/helper-compilation-targets/7.18.9_@babel+core@7.18.13: - resolution: {integrity: sha512-tzLCyVmqUiFlcFoAPLA/gL9TeYrF61VLNtb+hvkuVaB5SUjW7jcfrglBIX1vUIoT7CLP3bBlIMeyEsIl2eFQNg==} + /@babel/helper-compilation-targets/7.20.7_@babel+core@7.18.13: + resolution: {integrity: sha512-4tGORmfQcrc+bvrjb5y3dG9Mx1IOZjsHqQVUz7XCNHO+iTmqxWnVg3KRygjGmpRLJGdQSKuvFinbIb0CnZwHAQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 dependencies: - '@babel/compat-data': 7.18.13 + '@babel/compat-data': 7.20.10 '@babel/core': 7.18.13 '@babel/helper-validator-option': 7.18.6 - browserslist: 4.21.3 + browserslist: 4.21.4 + lru-cache: 5.1.1 semver: 6.3.0 + dev: true /@babel/helper-environment-visitor/7.18.9: resolution: {integrity: sha512-3r/aACDJ3fhQ/EVgFy0hpj8oHyHpQc+LPtJoY9SzTThAsStm4Ptegq92vqKoE3vD706ZVFWITnMnxucw+S9Ipg==} engines: {node: '>=6.9.0'} + dev: true - /@babel/helper-function-name/7.18.9: - resolution: {integrity: sha512-fJgWlZt7nxGksJS9a0XdSaI4XvpExnNIgRP+rVefWh5U7BL8pPuir6SJUmFKRfjWQ51OtWSzwOxhaH/EBWWc0A==} + /@babel/helper-function-name/7.19.0: + resolution: {integrity: sha512-WAwHBINyrpqywkUH0nTnNgI5ina5TFn85HKS0pbPDfxFfhyR/aNQEn4hGi1P1JyT//I0t4OgXUlofzWILRvS5w==} engines: {node: '>=6.9.0'} dependencies: - '@babel/template': 7.18.10 - '@babel/types': 7.18.13 + '@babel/template': 7.20.7 + '@babel/types': 7.20.7 + dev: true /@babel/helper-hoist-variables/7.18.6: resolution: {integrity: sha512-UlJQPkFqFULIcyW5sbzgbkxn2FKRgwWiRexcuaR8RNJRy8+LLveqPjwZV/bwrLZCN0eUHD/x8D0heK1ozuoo6Q==} engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.18.13 + '@babel/types': 7.20.7 + dev: true /@babel/helper-module-imports/7.18.6: resolution: {integrity: sha512-0NFvs3VkuSYbFi1x2Vd6tKrywq+z/cLeYC/RJNFrIX/30Bf5aiGYbtvGXolEktzJH8o5E5KJ3tT+nkxuuZFVlA==} engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.18.13 + '@babel/types': 7.20.7 + dev: true - /@babel/helper-module-transforms/7.18.9: - resolution: {integrity: sha512-KYNqY0ICwfv19b31XzvmI/mfcylOzbLtowkw+mfvGPAQ3kfCnMLYbED3YecL5tPd8nAYFQFAd6JHp2LxZk/J1g==} + /@babel/helper-module-transforms/7.20.11: + resolution: {integrity: sha512-uRy78kN4psmji1s2QtbtcCSaj/LILFDp0f/ymhpQH5QY3nljUZCaNWz9X1dEj/8MBdBEFECs7yRhKn8i7NjZgg==} engines: {node: '>=6.9.0'} dependencies: '@babel/helper-environment-visitor': 7.18.9 '@babel/helper-module-imports': 7.18.6 - '@babel/helper-simple-access': 7.18.6 + '@babel/helper-simple-access': 7.20.2 '@babel/helper-split-export-declaration': 7.18.6 - '@babel/helper-validator-identifier': 7.18.6 - '@babel/template': 7.18.10 - '@babel/traverse': 7.18.13 - '@babel/types': 7.18.13 + '@babel/helper-validator-identifier': 7.19.1 + '@babel/template': 7.20.7 + '@babel/traverse': 7.20.10 + '@babel/types': 7.20.7 transitivePeerDependencies: - supports-color + dev: true - /@babel/helper-plugin-utils/7.18.9: - resolution: {integrity: sha512-aBXPT3bmtLryXaoJLyYPXPlSD4p1ld9aYeR+sJNOZjJJGiOpb+fKfh3NkcCu7J54nUJwCERPBExCCpyCOHnu/w==} + /@babel/helper-plugin-utils/7.20.2: + resolution: {integrity: sha512-8RvlJG2mj4huQ4pZ+rU9lqKi9ZKiRmuvGuM2HlWmkmgOhbs6zEAw6IEiJ5cQqGbDzGZOhwuOQNtZMi/ENLjZoQ==} engines: {node: '>=6.9.0'} + dev: true - /@babel/helper-simple-access/7.18.6: - resolution: {integrity: sha512-iNpIgTgyAvDQpDj76POqg+YEt8fPxx3yaNBg3S30dxNKm2SWfYhD0TGrK/Eu9wHpUW63VQU894TsTg+GLbUa1g==} + /@babel/helper-simple-access/7.20.2: + resolution: {integrity: sha512-+0woI/WPq59IrqDYbVGfshjT5Dmk/nnbdpcF8SnMhhXObpTq2KNBdLFRFrkVdbDOyUmHBCxzm5FHV1rACIkIbA==} engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.18.13 + '@babel/types': 7.20.7 + dev: true /@babel/helper-split-export-declaration/7.18.6: resolution: {integrity: sha512-bde1etTx6ZyTmobl9LLMMQsaizFVZrquTEHOqKeQESMKo4PlObf+8+JA25ZsIpZhT/WEd39+vOdLXAFG/nELpA==} engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.18.13 + '@babel/types': 7.20.7 + dev: true - /@babel/helper-string-parser/7.18.10: - resolution: {integrity: sha512-XtIfWmeNY3i4t7t4D2t02q50HvqHybPqW2ki1kosnvWCwuCMeo81Jf0gwr85jy/neUdg5XDdeFE/80DXiO+njw==} + /@babel/helper-string-parser/7.19.4: + resolution: {integrity: sha512-nHtDoQcuqFmwYNYPz3Rah5ph2p8PFeFCsZk9A/48dPc/rGocJ5J3hAAZ7pb76VWX3fZKu+uEr/FhH5jLx7umrw==} engines: {node: '>=6.9.0'} + dev: true - /@babel/helper-validator-identifier/7.18.6: - resolution: {integrity: sha512-MmetCkz9ej86nJQV+sFCxoGGrUbU3q02kgLciwkrt9QqEB7cP39oKEY0PakknEO0Gu20SskMRi+AYZ3b1TpN9g==} + /@babel/helper-validator-identifier/7.19.1: + resolution: {integrity: sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w==} engines: {node: '>=6.9.0'} + dev: true /@babel/helper-validator-option/7.18.6: resolution: {integrity: sha512-XO7gESt5ouv/LRJdrVjkShckw6STTaB7l9BrpBaAHDeF5YZT+01PCwmR0SJHnkW6i8OwW/EVWRShfi4j2x+KQw==} engines: {node: '>=6.9.0'} + dev: true /@babel/helpers/7.18.9: resolution: {integrity: sha512-Jf5a+rbrLoR4eNdUmnFu8cN5eNJT6qdTdOg5IHIzq87WwyRw9PwguLFOWYgktN/60IP4fgDUawJvs7PjQIzELQ==} engines: {node: '>=6.9.0'} dependencies: - '@babel/template': 7.18.10 - '@babel/traverse': 7.18.13 - '@babel/types': 7.18.13 + '@babel/template': 7.20.7 + '@babel/traverse': 7.20.10 + '@babel/types': 7.20.7 transitivePeerDependencies: - supports-color + dev: true /@babel/highlight/7.18.6: resolution: {integrity: sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g==} engines: {node: '>=6.9.0'} dependencies: - '@babel/helper-validator-identifier': 7.18.6 + '@babel/helper-validator-identifier': 7.19.1 chalk: 2.4.2 js-tokens: 4.0.0 + dev: true - /@babel/parser/7.18.13: - resolution: {integrity: sha512-dgXcIfMuQ0kgzLB2b9tRZs7TTFFaGM2AbtA4fJgUUYukzGH4jwsS7hzQHEGs67jdehpm22vkgKwvbU+aEflgwg==} + /@babel/parser/7.20.7: + resolution: {integrity: sha512-T3Z9oHybU+0vZlY9CiDSJQTD5ZapcW18ZctFMi0MOAl/4BjFF4ul7NVSARLdbGO5vDqy9eQiGTV0LtKfvCYvcg==} engines: {node: '>=6.0.0'} + hasBin: true dependencies: - '@babel/types': 7.18.13 + '@babel/types': 7.20.7 + dev: true /@babel/plugin-syntax-async-generators/7.8.4_@babel+core@7.18.13: resolution: {integrity: sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==} @@ -297,7 +538,8 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.18.13 - '@babel/helper-plugin-utils': 7.18.9 + '@babel/helper-plugin-utils': 7.20.2 + dev: true /@babel/plugin-syntax-bigint/7.8.3_@babel+core@7.18.13: resolution: {integrity: sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==} @@ -305,7 +547,8 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.18.13 - '@babel/helper-plugin-utils': 7.18.9 + '@babel/helper-plugin-utils': 7.20.2 + dev: true /@babel/plugin-syntax-class-properties/7.12.13_@babel+core@7.18.13: resolution: {integrity: sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==} @@ -313,7 +556,8 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.18.13 - '@babel/helper-plugin-utils': 7.18.9 + '@babel/helper-plugin-utils': 7.20.2 + dev: true /@babel/plugin-syntax-import-meta/7.10.4_@babel+core@7.18.13: resolution: {integrity: sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==} @@ -321,7 +565,8 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.18.13 - '@babel/helper-plugin-utils': 7.18.9 + '@babel/helper-plugin-utils': 7.20.2 + dev: true /@babel/plugin-syntax-json-strings/7.8.3_@babel+core@7.18.13: resolution: {integrity: sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==} @@ -329,7 +574,8 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.18.13 - '@babel/helper-plugin-utils': 7.18.9 + '@babel/helper-plugin-utils': 7.20.2 + dev: true /@babel/plugin-syntax-logical-assignment-operators/7.10.4_@babel+core@7.18.13: resolution: {integrity: sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==} @@ -337,7 +583,8 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.18.13 - '@babel/helper-plugin-utils': 7.18.9 + '@babel/helper-plugin-utils': 7.20.2 + dev: true /@babel/plugin-syntax-nullish-coalescing-operator/7.8.3_@babel+core@7.18.13: resolution: {integrity: sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==} @@ -345,7 +592,8 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.18.13 - '@babel/helper-plugin-utils': 7.18.9 + '@babel/helper-plugin-utils': 7.20.2 + dev: true /@babel/plugin-syntax-numeric-separator/7.10.4_@babel+core@7.18.13: resolution: {integrity: sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==} @@ -353,7 +601,8 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.18.13 - '@babel/helper-plugin-utils': 7.18.9 + '@babel/helper-plugin-utils': 7.20.2 + dev: true /@babel/plugin-syntax-object-rest-spread/7.8.3_@babel+core@7.18.13: resolution: {integrity: sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==} @@ -361,7 +610,8 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.18.13 - '@babel/helper-plugin-utils': 7.18.9 + '@babel/helper-plugin-utils': 7.20.2 + dev: true /@babel/plugin-syntax-optional-catch-binding/7.8.3_@babel+core@7.18.13: resolution: {integrity: sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==} @@ -369,7 +619,8 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.18.13 - '@babel/helper-plugin-utils': 7.18.9 + '@babel/helper-plugin-utils': 7.20.2 + dev: true /@babel/plugin-syntax-optional-chaining/7.8.3_@babel+core@7.18.13: resolution: {integrity: sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==} @@ -377,7 +628,8 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.18.13 - '@babel/helper-plugin-utils': 7.18.9 + '@babel/helper-plugin-utils': 7.20.2 + dev: true /@babel/plugin-syntax-top-level-await/7.14.5_@babel+core@7.18.13: resolution: {integrity: sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==} @@ -386,52 +638,80 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.18.13 - '@babel/helper-plugin-utils': 7.18.9 + '@babel/helper-plugin-utils': 7.20.2 + dev: true - /@babel/plugin-syntax-typescript/7.18.6_@babel+core@7.18.13: - resolution: {integrity: sha512-mAWAuq4rvOepWCBid55JuRNvpTNf2UGVgoz4JV0fXEKolsVZDzsa4NqCef758WZJj/GDu0gVGItjKFiClTAmZA==} + /@babel/plugin-syntax-typescript/7.20.0_@babel+core@7.18.13: + resolution: {integrity: sha512-rd9TkG+u1CExzS4SM1BlMEhMXwFLKVjOAFFCDx9PbX5ycJWDoWMcwdJH9RhkPu1dOgn5TrxLot/Gx6lWFuAUNQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.18.13 - '@babel/helper-plugin-utils': 7.18.9 + '@babel/helper-plugin-utils': 7.20.2 + dev: true - /@babel/template/7.18.10: - resolution: {integrity: sha512-TI+rCtooWHr3QJ27kJxfjutghu44DLnasDMwpDqCXVTal9RLp3RSYNh4NdBrRP2cQAoG9A8juOQl6P6oZG4JxA==} + /@babel/template/7.20.7: + resolution: {integrity: sha512-8SegXApWe6VoNw0r9JHpSteLKTpTiLZ4rMlGIm9JQ18KiCtyQiAMEazujAHrUS5flrcqYZa75ukev3P6QmUwUw==} engines: {node: '>=6.9.0'} dependencies: '@babel/code-frame': 7.18.6 - '@babel/parser': 7.18.13 - '@babel/types': 7.18.13 + '@babel/parser': 7.20.7 + '@babel/types': 7.20.7 + dev: true - /@babel/traverse/7.18.13: - resolution: {integrity: sha512-N6kt9X1jRMLPxxxPYWi7tgvJRH/rtoU+dbKAPDM44RFHiMH8igdsaSBgFeskhSl/kLWLDUvIh1RXCrTmg0/zvA==} + /@babel/traverse/7.20.10: + resolution: {integrity: sha512-oSf1juCgymrSez8NI4A2sr4+uB/mFd9MXplYGPEBnfAuWmmyeVcHa6xLPiaRBcXkcb/28bgxmQLTVwFKE1yfsg==} engines: {node: '>=6.9.0'} dependencies: '@babel/code-frame': 7.18.6 - '@babel/generator': 7.18.13 + '@babel/generator': 7.20.7 '@babel/helper-environment-visitor': 7.18.9 - '@babel/helper-function-name': 7.18.9 + '@babel/helper-function-name': 7.19.0 '@babel/helper-hoist-variables': 7.18.6 '@babel/helper-split-export-declaration': 7.18.6 - '@babel/parser': 7.18.13 - '@babel/types': 7.18.13 + '@babel/parser': 7.20.7 + '@babel/types': 7.20.7 debug: 4.3.4 globals: 11.12.0 transitivePeerDependencies: - supports-color + dev: true - /@babel/types/7.18.13: - resolution: {integrity: sha512-ePqfTihzW0W6XAU+aMw2ykilisStJfDnsejDCXRchCcMJ4O0+8DhPXf2YUbZ6wjBlsEmZwLK/sPweWtu8hcJYQ==} + /@babel/types/7.20.7: + resolution: {integrity: sha512-69OnhBxSSgK0OzTJai4kyPDiKTIe3j+ctaHdIGVbRahTLAT7L3R9oeXHC2aVSuGYt3cVnoAMDmOCgJ2yaiLMvg==} engines: {node: '>=6.9.0'} dependencies: - '@babel/helper-string-parser': 7.18.10 - '@babel/helper-validator-identifier': 7.18.6 + '@babel/helper-string-parser': 7.19.4 + '@babel/helper-validator-identifier': 7.19.1 to-fast-properties: 2.0.0 + dev: true /@bcoe/v8-coverage/0.2.3: resolution: {integrity: sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==} + dev: true + + /@chainsafe/libp2p-noise/4.1.1: + resolution: {integrity: sha512-/Fz86sZmnvRSf7FHxMPifzakxx9xK4KVYx6yi35KPZughop9ivJslUSCLhx/UqDHiuj3h9i04pVXET6nIjSJyQ==} + deprecated: critical bug fixex in >=4.1.2 + dependencies: + '@stablelib/chacha20poly1305': 1.0.1 + '@stablelib/hkdf': 1.0.1 + '@stablelib/sha256': 1.0.1 + '@stablelib/x25519': 1.0.3 + debug: 4.3.4 + it-buffer: 0.1.3 + it-length-prefixed: 5.0.3 + it-pair: 1.0.0 + it-pb-rpc: 0.1.13 + it-pipe: 1.1.0 + libp2p-crypto: 0.19.7 + peer-id: 0.15.4 + protobufjs: 6.11.3 + uint8arrays: 3.1.0 + transitivePeerDependencies: + - supports-color + dev: false /@chainsafe/libp2p-noise/4.1.2: resolution: {integrity: sha512-UvZLWvIS7bAz6M8XfsnC/NhT1c/lg8NNsME1hTvo21kRwyxNFpB8gEhId03Cb5B23oIaHhMySAHBcpuMiSxQ2w==} @@ -452,13 +732,22 @@ packages: uint8arrays: 3.1.0 transitivePeerDependencies: - supports-color + dev: true /@cspotcode/source-map-support/0.8.1: resolution: {integrity: sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==} engines: {node: '>=12'} dependencies: '@jridgewell/trace-mapping': 0.3.9 - dev: false + + /@discoveryjs/json-ext/0.5.7: + resolution: {integrity: sha512-dBVuXR082gk3jsFp7Rd/JI4kytwGHecnCoTtXFb7DB6CNHp4rg5k1bhg0nWdLGLnOV71lmDzGQaLMy8iPLY0pw==} + engines: {node: '>=10.0.0'} + dev: true + + /@fluencelabs/aqua-api/0.9.1-373: + resolution: {integrity: sha512-q0A2z/FXOlc9UKCQ/Kf00ig0VpgdJ9woITYSj1tnVo9X3kR71gSv4loCQmukJoqlVZXzfQ8r+spalwBerin89A==} + dev: true /@fluencelabs/aqua-ipfs/0.5.5: resolution: {integrity: sha512-TBSClVs2r3FhgxVFSDPXzJNP0/EqHbIaVSY9U6LTzBDUdZDItu8Yt+Rsjj4LX5X4kOwo94ADkYG0UG8nKC1L5A==} @@ -474,14 +763,15 @@ packages: resolution: {integrity: sha512-ifjtCM93KO3LhzPkMxqmXhwLmrg/scjOiyTihEVg7ns5N+BVzaK1eWzdOdqGdl9ZVoah43pdlQUepEo7VdRmsw==} dev: true - /@fluencelabs/aqua/0.7.7-362_rl5xm3oiydas7snsul2pa47p2m: + /@fluencelabs/aqua/0.7.7-362_i3yjj2scigfcyyfwxdhvpsnmxe: resolution: {integrity: sha512-CwvBc3wKQdvnDM4Zxj6yFE5MR2oeh+EZ++m2hLvENt7OWl3cnZVR4cJQkRxMMLVT0MxRwLiy97UIBwGsPqlSCA==} + hasBin: true dependencies: '@fluencelabs/aqua-ipfs': 0.5.5 '@fluencelabs/aqua-lib': 0.5.2 - '@fluencelabs/fluence': 0.26.3-snapshot-4_rl5xm3oiydas7snsul2pa47p2m + '@fluencelabs/fluence': 0.26.3-snapshot-4_i3yjj2scigfcyyfwxdhvpsnmxe '@fluencelabs/fluence-network-environment': 1.0.13 - ipfs-http-client: 50.1.2 + ipfs-http-client: 50.1.2_node-fetch@3.2.10 transitivePeerDependencies: - '@babel/core' - '@types/jest' @@ -489,6 +779,7 @@ packages: - bufferutil - esbuild - jest + - node-fetch - supports-color - typescript - utf-8-validate @@ -496,13 +787,17 @@ packages: /@fluencelabs/avm/0.31.10: resolution: {integrity: sha512-tkpjdHyRmsTwAEZCJt15//jXEgC2Nw2qFiD1NenvK127SlgKeuzQU9IMReUYY3dowb2IGeC578/uGMu96jHYKw==} - dev: false + dev: true /@fluencelabs/avm/0.31.4: resolution: {integrity: sha512-rApXdqk0NUX+Fyq9BJ1jQ7X//EfVrAg9wrjdd4K/tvo54Lgij0tY/IT+imwr/Eb4qgHgi1QMW4zT0AOlgKIKmw==} dev: true - /@fluencelabs/connection/0.2.0: + /@fluencelabs/avm/0.32.1: + resolution: {integrity: sha512-1wZfLkKj8fNpsX+vQucqcxwjg/xFB03D2L//p2Hld68g54X+VFsGcHHUqbvQjCZ/8EdaS801s0ldiJuzXF706A==} + dev: false + + /@fluencelabs/connection/0.2.0_node-fetch@3.2.10: resolution: {integrity: sha512-0jTRI1h/j/fR2VaLIlcIm6VoP3j2jL2lI6/OaYaOnwGXmI6CbZWHNeq9eaKWycT9B1vpN9wHu0Vi7vH3pFplhg==} engines: {node: '>=10', pnpm: '>=3'} dependencies: @@ -512,15 +807,16 @@ packages: buffer: 6.0.3 it-length-prefixed: 5.0.3 it-pipe: 1.1.0 - libp2p: 0.36.2 - libp2p-interfaces: 4.0.6 + libp2p: 0.36.2_node-fetch@3.2.10 + libp2p-interfaces: 4.0.6_node-fetch@3.2.10 libp2p-mplex: 0.10.7 - libp2p-websockets: 0.16.2 + libp2p-websockets: 0.16.2_node-fetch@3.2.10 loglevel: 1.8.0 - multiaddr: 10.0.1 + multiaddr: 10.0.1_node-fetch@3.2.10 peer-id: 0.16.0 transitivePeerDependencies: - bufferutil + - node-fetch - supports-color - utf-8-validate dev: true @@ -529,15 +825,16 @@ packages: resolution: {integrity: sha512-2pci3T0sUHE08jwEs1r/vHKVT4XUh/A3j/QJ0eIhddsxyIjEksjdn05X7DF6STD14CF8GgBVOJEPgav8qaUMpA==} dev: true - /@fluencelabs/fluence/0.26.3-snapshot-4_rl5xm3oiydas7snsul2pa47p2m: + /@fluencelabs/fluence/0.26.3-snapshot-4_i3yjj2scigfcyyfwxdhvpsnmxe: resolution: {integrity: sha512-M/iQhnViXfMaATj3gFPQXrZe9zSVcyN9F9A9hfJBUn0VLamhmbfeIoSZeheK8VGBxYbRGcrtoqLPTy1vJQVgVw==} engines: {node: '>=10', pnpm: '>=3'} + hasBin: true dependencies: '@fluencelabs/avm': 0.31.4 - '@fluencelabs/connection': 0.2.0 + '@fluencelabs/connection': 0.2.0_node-fetch@3.2.10 '@fluencelabs/interfaces': 0.1.0 '@fluencelabs/keypair': 0.2.0 - '@fluencelabs/marine-js': 0.3.18_rl5xm3oiydas7snsul2pa47p2m + '@fluencelabs/marine-js': 0.3.18_vibqa5hxa5biq5fwuxzv5iobty async: 3.2.3 base64-js: 1.5.1 browser-or-node: 2.0.0 @@ -558,6 +855,7 @@ packages: - bufferutil - esbuild - jest + - node-fetch - supports-color - typescript - utf-8-validate @@ -572,12 +870,12 @@ packages: resolution: {integrity: sha512-sNFvoeefSa0Xa/xzzLwWBXPMB4y/vHEFh3BaA6FCGNPwbtN0pje9rd8AOgSP9fjlTPpxy3TuBI+eAIzBk5b+SQ==} engines: {node: '>=10', pnpm: '>=3'} dependencies: - js-base64: 3.7.2 + js-base64: 3.7.3 libp2p-crypto: 0.21.2 peer-id: 0.16.0 dev: true - /@fluencelabs/marine-js/0.3.18_rl5xm3oiydas7snsul2pa47p2m: + /@fluencelabs/marine-js/0.3.18_vibqa5hxa5biq5fwuxzv5iobty: resolution: {integrity: sha512-aNuGtyY910kJvtRwfqmZKjVs+1l3LVWShv5xvkY04faHm65nX3sZLe8UHwughdja/4ixV1IFKlaTUgw2u3Sf5A==} dependencies: '@wasmer/wasi': 0.12.0 @@ -585,7 +883,7 @@ packages: browser-or-node: 2.0.0 buffer: 6.0.3 threads: 1.7.0 - ts-jest: 27.1.5_rl5xm3oiydas7snsul2pa47p2m + ts-jest: 27.1.5_vibqa5hxa5biq5fwuxzv5iobty transitivePeerDependencies: - '@babel/core' - '@types/jest' @@ -596,24 +894,11 @@ packages: - typescript dev: true - /@fluencelabs/marine-js/0.3.37_rl5xm3oiydas7snsul2pa47p2m: - resolution: {integrity: sha512-/Kpu3S+aDOfrOpKBAK1VeWSHKCoD36/dxtHEWHbj3Lsro0GB9zkoaZPHlFFL7rorCB+hyjAJqLDuBGI8f3l/qg==} + /@fluencelabs/marine-js/0.3.38: + resolution: {integrity: sha512-vP5w7be6vR0MZGkMpmmCvyVhABmVroPD9VAeCCDTuLhzqHMlDhm/cltU0B4kt9yijiNlh9CbY7dSZsCcspWPHw==} dependencies: '@wasmer/wasi': 0.12.0 '@wasmer/wasmfs': 0.12.0 - browser-or-node: 2.0.0 - buffer: 6.0.3 - threads: 1.7.0 - ts-jest: 27.1.5_rl5xm3oiydas7snsul2pa47p2m - transitivePeerDependencies: - - '@babel/core' - - '@types/jest' - - babel-jest - - esbuild - - jest - - supports-color - - typescript - dev: false /@istanbuljs/load-nyc-config/1.1.0: resolution: {integrity: sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==} @@ -624,21 +909,24 @@ packages: get-package-type: 0.1.0 js-yaml: 3.14.1 resolve-from: 5.0.0 + dev: true /@istanbuljs/schema/0.1.3: resolution: {integrity: sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==} engines: {node: '>=8'} + dev: true /@jest/console/28.1.3: resolution: {integrity: sha512-QPAkP5EwKdK/bxIr6C1I4Vs0rm2nHiANzj/Z5X2JQkrZo6IqvC4ldZ9K95tF0HdidhA8Bo6egxSzUFPYKcEXLw==} engines: {node: ^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0} dependencies: '@jest/types': 28.1.3 - '@types/node': 18.7.11 + '@types/node': 18.7.14 chalk: 4.1.2 jest-message-util: 28.1.3 jest-util: 28.1.3 slash: 3.0.0 + dev: true /@jest/core/28.1.3: resolution: {integrity: sha512-CIKBrlaKOzA7YG19BEqCw3SLIsEwjZkeJzf5bdooVnW4bH5cktqe3JX+G2YV1aK5vP8N9na1IGWFzYaTp6k6NA==} @@ -681,6 +969,50 @@ packages: transitivePeerDependencies: - supports-color - ts-node + dev: true + + /@jest/core/28.1.3_ts-node@10.9.1: + resolution: {integrity: sha512-CIKBrlaKOzA7YG19BEqCw3SLIsEwjZkeJzf5bdooVnW4bH5cktqe3JX+G2YV1aK5vP8N9na1IGWFzYaTp6k6NA==} + engines: {node: ^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0} + peerDependencies: + node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 + peerDependenciesMeta: + node-notifier: + optional: true + dependencies: + '@jest/console': 28.1.3 + '@jest/reporters': 28.1.3 + '@jest/test-result': 28.1.3 + '@jest/transform': 28.1.3 + '@jest/types': 28.1.3 + '@types/node': 18.7.14 + ansi-escapes: 4.3.2 + chalk: 4.1.2 + ci-info: 3.3.2 + exit: 0.1.2 + graceful-fs: 4.2.10 + jest-changed-files: 28.1.3 + jest-config: 28.1.3_gsb7asu77en4txj3es3i65pxci + jest-haste-map: 28.1.3 + jest-message-util: 28.1.3 + jest-regex-util: 28.0.2 + jest-resolve: 28.1.3 + jest-resolve-dependencies: 28.1.3 + jest-runner: 28.1.3 + jest-runtime: 28.1.3 + jest-snapshot: 28.1.3 + jest-util: 28.1.3 + jest-validate: 28.1.3 + jest-watcher: 28.1.3 + micromatch: 4.0.5 + pretty-format: 28.1.3 + rimraf: 3.0.2 + slash: 3.0.0 + strip-ansi: 6.0.1 + transitivePeerDependencies: + - supports-color + - ts-node + dev: true /@jest/environment/28.1.3: resolution: {integrity: sha512-1bf40cMFTEkKyEf585R9Iz1WayDjHoHqvts0XFYEqyKM3cFWDpeMoqKKTAF9LSYQModPUlh8FKptoM2YcMWAXA==} @@ -690,12 +1022,14 @@ packages: '@jest/types': 28.1.3 '@types/node': 18.7.14 jest-mock: 28.1.3 + dev: true /@jest/expect-utils/28.1.3: resolution: {integrity: sha512-wvbi9LUrHJLn3NlDW6wF2hvIMtd4JUl2QNVrjq+IBSHirgfrR3o9RnVtxzdEGO2n9JyIWwHnLfby5KzqBGg2YA==} engines: {node: ^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0} dependencies: jest-get-type: 28.0.2 + dev: true /@jest/expect/28.1.3: resolution: {integrity: sha512-lzc8CpUbSoE4dqT0U+g1qODQjBRHPpCPXissXD4mS9+sWQdmmpeJ9zSH1rS1HEkrsMN0fb7nKrJ9giAR1d3wBw==} @@ -705,6 +1039,7 @@ packages: jest-snapshot: 28.1.3 transitivePeerDependencies: - supports-color + dev: true /@jest/fake-timers/28.1.3: resolution: {integrity: sha512-D/wOkL2POHv52h+ok5Oj/1gOG9HSywdoPtFsRCUmlCILXNn5eIWmcnd3DIiWlJnpGvQtmajqBP95Ei0EimxfLw==} @@ -716,6 +1051,7 @@ packages: jest-message-util: 28.1.3 jest-mock: 28.1.3 jest-util: 28.1.3 + dev: true /@jest/globals/28.1.3: resolution: {integrity: sha512-XFU4P4phyryCXu1pbcqMO0GSQcYe1IsalYCDzRNyhetyeyxMcIxa11qPNDpVNLeretItNqEmYYQn1UYz/5x1NA==} @@ -726,6 +1062,7 @@ packages: '@jest/types': 28.1.3 transitivePeerDependencies: - supports-color + dev: true /@jest/reporters/28.1.3: resolution: {integrity: sha512-JuAy7wkxQZVNU/V6g9xKzCGC5LVXx9FDcABKsSXp5MiKPEE2144a/vXTEDoyzjUpZKfVwp08Wqg5A4WfTMAzjg==} @@ -763,12 +1100,14 @@ packages: v8-to-istanbul: 9.0.1 transitivePeerDependencies: - supports-color + dev: true /@jest/schemas/28.1.3: resolution: {integrity: sha512-/l/VWsdt/aBXgjshLWOFyFt3IVdYypu5y2Wn2rOO1un6nkqIn8SLXzgIMYXFyYsRWDyF5EthmKJMIdJvk08grg==} engines: {node: ^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0} dependencies: '@sinclair/typebox': 0.24.28 + dev: true /@jest/source-map/28.1.2: resolution: {integrity: sha512-cV8Lx3BeStJb8ipPHnqVw/IM2VCMWO3crWZzYodSIkxXnRcXJipCdx1JCK0K5MsJJouZQTH73mzf4vgxRaH9ww==} @@ -777,6 +1116,7 @@ packages: '@jridgewell/trace-mapping': 0.3.15 callsites: 3.1.0 graceful-fs: 4.2.10 + dev: true /@jest/test-result/28.1.3: resolution: {integrity: sha512-kZAkxnSE+FqE8YjW8gNuoVkkC9I7S1qmenl8sGcDOLropASP+BkcGKwhXoyqQuGOGeYY0y/ixjrd/iERpEXHNg==} @@ -786,6 +1126,7 @@ packages: '@jest/types': 28.1.3 '@types/istanbul-lib-coverage': 2.0.4 collect-v8-coverage: 1.0.1 + dev: true /@jest/test-sequencer/28.1.3: resolution: {integrity: sha512-NIMPEqqa59MWnDi1kvXXpYbqsfQmSJsIbnd85mdVGkiDfQ9WQQTXOLsvISUfonmnBT+w85WEgneCigEEdHDFxw==} @@ -795,6 +1136,7 @@ packages: graceful-fs: 4.2.10 jest-haste-map: 28.1.3 slash: 3.0.0 + dev: true /@jest/transform/28.1.3: resolution: {integrity: sha512-u5dT5di+oFI6hfcLOHGTAfmUxFRrjK+vnaP0kkVow9Md/M7V/MxqQMOz/VV25UZO8pzeA9PjfTpOu6BDuwSPQA==} @@ -817,6 +1159,7 @@ packages: write-file-atomic: 4.0.2 transitivePeerDependencies: - supports-color + dev: true /@jest/types/27.5.1: resolution: {integrity: sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==} @@ -827,6 +1170,7 @@ packages: '@types/node': 18.7.14 '@types/yargs': 16.0.4 chalk: 4.1.2 + dev: true /@jest/types/28.1.3: resolution: {integrity: sha512-RyjiyMUZrKz/c+zlMFO1pm70DcIlST8AeWTkoUdZevew44wcNZQHsEVOiCVtgVnlFFD82FPaXycys58cf2muVQ==} @@ -835,9 +1179,10 @@ packages: '@jest/schemas': 28.1.3 '@types/istanbul-lib-coverage': 2.0.4 '@types/istanbul-reports': 3.0.1 - '@types/node': 18.7.11 + '@types/node': 18.7.14 '@types/yargs': 17.0.11 chalk: 4.1.2 + dev: true /@jridgewell/gen-mapping/0.1.1: resolution: {integrity: sha512-sQXCasFk+U8lWYEe66WxRDOE9PjVz4vSM51fTu3Hw+ClTpUSQb718772vH3pyS5pShp6lvQM7SxgIDXXXmOX7w==} @@ -845,6 +1190,7 @@ packages: dependencies: '@jridgewell/set-array': 1.1.2 '@jridgewell/sourcemap-codec': 1.4.14 + dev: true /@jridgewell/gen-mapping/0.3.2: resolution: {integrity: sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==} @@ -853,6 +1199,7 @@ packages: '@jridgewell/set-array': 1.1.2 '@jridgewell/sourcemap-codec': 1.4.14 '@jridgewell/trace-mapping': 0.3.15 + dev: true /@jridgewell/resolve-uri/3.1.0: resolution: {integrity: sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==} @@ -861,6 +1208,14 @@ packages: /@jridgewell/set-array/1.1.2: resolution: {integrity: sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==} engines: {node: '>=6.0.0'} + dev: true + + /@jridgewell/source-map/0.3.2: + resolution: {integrity: sha512-m7O9o2uR8k2ObDysZYzdfhb08VuEml5oWGiosa1VdaPZ/A6QyPkAJuwN0Q1lhULOf6B7MtQmHENS743hWtCrgw==} + dependencies: + '@jridgewell/gen-mapping': 0.3.2 + '@jridgewell/trace-mapping': 0.3.15 + dev: true /@jridgewell/sourcemap-codec/1.4.14: resolution: {integrity: sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==} @@ -870,13 +1225,13 @@ packages: dependencies: '@jridgewell/resolve-uri': 3.1.0 '@jridgewell/sourcemap-codec': 1.4.14 + dev: true /@jridgewell/trace-mapping/0.3.9: resolution: {integrity: sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==} dependencies: '@jridgewell/resolve-uri': 3.1.0 '@jridgewell/sourcemap-codec': 1.4.14 - dev: false /@multiformats/base-x/4.0.1: resolution: {integrity: sha512-eMk0b9ReBbV23xXU693TAIrLyeO5iTgBZGSJfpqriG8UkYvr/hC9u9pyMlAakDNHWmbhMZCDs6KQO0jzKD8OTw==} @@ -922,16 +1277,19 @@ packages: /@sinclair/typebox/0.24.28: resolution: {integrity: sha512-dgJd3HLOkLmz4Bw50eZx/zJwtBq65nms3N9VBYu5LTjJ883oBFkTyXRlCB/ZGGwqYpJJHA5zW2Ibhl5ngITfow==} + dev: true /@sinonjs/commons/1.8.3: resolution: {integrity: sha512-xkNcLAn/wZaX14RPlwizcKicDk9G3F8m2nU3L7Ukm5zBgTwiT0wsoFAHx9Jq56fJA1z/7uKGtCRu16sOUCLIHQ==} dependencies: type-detect: 4.0.8 + dev: true /@sinonjs/fake-timers/9.1.2: resolution: {integrity: sha512-BPS4ynJW/o92PUR4wgriz2Ud5gpST5vz6GQfMixEDK0Z8ZCUv2M7SkBLykH56T++Xs+8ln9zTGbOvNGIe02/jw==} dependencies: '@sinonjs/commons': 1.8.3 + dev: true /@sovpro/delimited-stream/1.1.0: resolution: {integrity: sha512-kQpk267uxB19X3X2T1mvNMjyvIEonpNSHrMlK5ZaBU6aZxw7wPbpgKJOjHN3+/GPVpXgAV9soVT2oyHpLkLtyw==} @@ -1024,44 +1382,44 @@ packages: /@tsconfig/node10/1.0.9: resolution: {integrity: sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA==} - dev: false /@tsconfig/node12/1.0.11: resolution: {integrity: sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==} - dev: false /@tsconfig/node14/1.0.3: resolution: {integrity: sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==} - dev: false /@tsconfig/node16/1.0.3: resolution: {integrity: sha512-yOlFc+7UtL/89t2ZhjPvvB/DeAr3r+Dq58IgzsFkOAvVC6NMJXmCGjbptdXdR9qsX7pKcTL+s87FtYREi2dEEQ==} - dev: false /@types/babel__core/7.1.19: resolution: {integrity: sha512-WEOTgRsbYkvA/KCsDwVEGkd7WAr1e3g31VHQ8zy5gul/V1qKullU/BU5I68X5v7V3GnB9eotmom4v5a5gjxorw==} dependencies: - '@babel/parser': 7.18.13 - '@babel/types': 7.18.13 + '@babel/parser': 7.20.7 + '@babel/types': 7.20.7 '@types/babel__generator': 7.6.4 '@types/babel__template': 7.4.1 '@types/babel__traverse': 7.18.0 + dev: true /@types/babel__generator/7.6.4: resolution: {integrity: sha512-tFkciB9j2K755yrTALxD44McOrk+gfpIpvC3sxHjRawj6PfnQxrse4Clq5y/Rq+G3mrBurMax/lG8Qn2t9mSsg==} dependencies: - '@babel/types': 7.18.13 + '@babel/types': 7.20.7 + dev: true /@types/babel__template/7.4.1: resolution: {integrity: sha512-azBFKemX6kMg5Io+/rdGT0dkGreboUVR0Cdm3fz9QJWpaQGJRQXl7C+6hOTCZcMll7KFyEQpgbYI2lHdsS4U7g==} dependencies: - '@babel/parser': 7.18.13 - '@babel/types': 7.18.13 + '@babel/parser': 7.20.7 + '@babel/types': 7.20.7 + dev: true /@types/babel__traverse/7.18.0: resolution: {integrity: sha512-v4Vwdko+pgymgS+A2UIaJru93zQd85vIGWObM5ekZNdXCKtDYqATlEYnWgfo86Q6I1Lh0oXnksDnMU1cwmlPDw==} dependencies: - '@babel/types': 7.18.13 + '@babel/types': 7.20.7 + dev: true /@types/bs58/4.0.1: resolution: {integrity: sha512-yfAgiWgVLjFCmRv8zAcOIHywYATEwiTVccTLnRp6UxTNavT55M9d/uhK3T03St/+8/z/wW+CRjGKUNmEqoHHCA==} @@ -1069,29 +1427,56 @@ packages: base-x: 3.0.9 dev: true + /@types/eslint-scope/3.7.4: + resolution: {integrity: sha512-9K4zoImiZc3HlIp6AVUDE4CWYx22a+lhSZMYNpbjW04+YF0KWj4pJXnEMjdnFTiQibFFmElcsasJXDbdI/EPhA==} + dependencies: + '@types/eslint': 8.4.10 + '@types/estree': 0.0.51 + dev: true + + /@types/eslint/8.4.10: + resolution: {integrity: sha512-Sl/HOqN8NKPmhWo2VBEPm0nvHnu2LL3v9vKo8MEq0EtbJ4eVzGPl41VNPvn5E1i5poMk4/XD8UriLHpJvEP/Nw==} + dependencies: + '@types/estree': 0.0.51 + '@types/json-schema': 7.0.11 + dev: true + + /@types/estree/0.0.51: + resolution: {integrity: sha512-CuPgU6f3eT/XgKKPqKd/gLZV1Xmvf1a2R5POBOGQa6uv82xpls89HU5zKeVoyR8XzHd1RGNOlQlvUe3CFkjWNQ==} + dev: true + /@types/graceful-fs/4.1.5: resolution: {integrity: sha512-anKkLmZZ+xm4p8JWBf4hElkM4XR+EZeA2M9BAkkTldmcyDY4mbdIJnRghDJH3Ov5ooY7/UAoENtmdMSkaAd7Cw==} dependencies: '@types/node': 18.7.14 + dev: true /@types/istanbul-lib-coverage/2.0.4: resolution: {integrity: sha512-z/QT1XN4K4KYuslS23k62yDIDLwLFkzxOuMplDtObz0+y7VqJCaO2o+SPwHCvLFZh7xazvvoor2tA/hPz9ee7g==} + dev: true /@types/istanbul-lib-report/3.0.0: resolution: {integrity: sha512-plGgXAPfVKFoYfa9NpYDAkseG+g6Jr294RqeqcqDixSbU34MZVJRi/P+7Y8GDpzkEwLaGZZOpKIEmeVZNtKsrg==} dependencies: '@types/istanbul-lib-coverage': 2.0.4 + dev: true /@types/istanbul-reports/3.0.1: resolution: {integrity: sha512-c3mAZEuK0lvBp8tmuL74XRKn1+y2dcwOUpH7x4WrF6gk1GIgiluDRgMYQtw2OFcBvAJWlt6ASU3tSqxp0Uu0Aw==} dependencies: '@types/istanbul-lib-report': 3.0.0 + dev: true - /@types/jest/27.5.2: - resolution: {integrity: sha512-mpT8LJJ4CMeeahobofYWIjFo0xonRS/HfxnVEPMPFSQdGUt1uHCnoPT7Zhb+sjDU2wz0oKV0OLUR0WzrHNgfeA==} + /@types/jest/28.1.0: + resolution: {integrity: sha512-ITfF6JJIl9zbEi2k6NmhNE/BiDqfsI/ceqfvdaWaPbcrCpYyyRq4KtDQIWh6vQUru6SqwppODiom/Zhid+np6A==} dependencies: jest-matcher-utils: 27.5.1 pretty-format: 27.5.1 + dev: true + + /@types/json-schema/7.0.11: + resolution: {integrity: sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ==} + dev: true /@types/long/4.0.2: resolution: {integrity: sha512-MqTGEo5bj5t157U6fA/BiDynNkn0YknVdh48CMPkTSpFTVmvao5UQmm7uEF6xBEo7qIMAlY/JSleYaE6VOdpaA==} @@ -1099,8 +1484,8 @@ packages: /@types/minimatch/3.0.5: resolution: {integrity: sha512-Klz949h02Gz2uZCMGwDUSDS1YBlTdDDgbWHi+81l29tQALUtvz4rAYi5uoVhE5Lagoq6DeqAUlbrHvW/mXDgdQ==} - /@types/node/18.7.11: - resolution: {integrity: sha512-KZhFpSLlmK/sdocfSAjqPETTMd0ug6HIMIAwkwUpU79olnZdQtMxpQP+G1wDzCH7na+FltSIhbaZuKdwZ8RDrw==} + /@types/node/16.11.59: + resolution: {integrity: sha512-6u+36Dj3aDzhfBVUf/mfmc92OEdzQ2kx2jcXGdigfl70E/neV21ZHE6UCz4MDzTRcVqGAM27fk+DLXvyDsn3Jw==} /@types/node/18.7.14: resolution: {integrity: sha512-6bbDaETVi8oyIARulOE9qF1/Qdi/23z6emrUh0fNJRUmjznqrixD4MpGDdgOFk5Xb0m2H6Xu42JGdvAxaJR/wA==} @@ -1111,29 +1496,34 @@ packages: /@types/prettier/2.7.0: resolution: {integrity: sha512-RI1L7N4JnW5gQw2spvL7Sllfuf1SaHdrZpCHiBlCXjIlufi1SMNnbu2teze3/QE67Fg2tBlH7W+mi4hVNk4p0A==} + dev: true /@types/retry/0.12.0: resolution: {integrity: sha512-wWKOClTTiizcZhXnPY4wikVAwmdYHp8q6DmC+EJUzAMsycb7HB32Kh9RN4+0gExjmPmZSAQjgURXIGATPegAvA==} /@types/stack-utils/2.0.1: resolution: {integrity: sha512-Hl219/BT5fLAaz6NDkSuhzasy49dwQS/DSdu4MdggFB8zcXv7vflBI3xp7FEmkmdDkBUI2bPUNeMttp2knYdxw==} + dev: true - /@types/uuid/8.3.4: - resolution: {integrity: sha512-c/I8ZRb51j+pYGAu5CrFMRxqZ2ke4y2grEBO5AUjgSkSk+qT2Ea+OdWElz/OiMf5MNpn2b17kuVBwZLQJXzihw==} + /@types/uuid/8.3.2: + resolution: {integrity: sha512-u40ViizKDmdl5FhOXn9WQbulpigYCaiD5hD4KqR3xyQww6l3+0ND+A9TeFla8tFpqvR+UAkJdYb/8jdaQG4/nw==} dev: true /@types/yargs-parser/21.0.0: resolution: {integrity: sha512-iO9ZQHkZxHn4mSakYV0vFHAVDyEOIJQrV2uZ06HxEPcx+mt8swXoZHIbaaJ2crJYFfErySgktuTZ3BeLz+XmFA==} + dev: true /@types/yargs/16.0.4: resolution: {integrity: sha512-T8Yc9wt/5LbJyCaLiHPReJa0kApcIgJ7Bn735GjItUfh08Z1pJvu8QZqb9s+mMvKV6WUQRV7K2R46YbjMXTTJw==} dependencies: '@types/yargs-parser': 21.0.0 + dev: true /@types/yargs/17.0.11: resolution: {integrity: sha512-aB4y9UDUXTSMxmM4MH+YnuR0g5Cph3FLQBoWoMB21DSvFVAxRVEHEMx3TLh+zUZYMCQtKiqazz0Q4Rre31f/OA==} dependencies: '@types/yargs-parser': 21.0.0 + dev: true /@vascosantos/moving-average/1.1.0: resolution: {integrity: sha512-MVEJ4vWAPNbrGLjz7ITnHYg+YXZ6ijAqtH5/cHwSoCpbvuJ98aLXwFfPKAUfZpJMQR5uXB58UJajbY130IRF/w==} @@ -1153,6 +1543,315 @@ packages: pako: 1.0.11 tar-stream: 2.2.0 + /@webassemblyjs/ast/1.11.1: + resolution: {integrity: sha512-ukBh14qFLjxTQNTXocdyksN5QdM28S1CxHt2rdskFyL+xFV7VremuBLVbmCePj+URalXBENx/9Lm7lnhihtCSw==} + dependencies: + '@webassemblyjs/helper-numbers': 1.11.1 + '@webassemblyjs/helper-wasm-bytecode': 1.11.1 + dev: true + + /@webassemblyjs/ast/1.9.0: + resolution: {integrity: sha512-C6wW5L+b7ogSDVqymbkkvuW9kruN//YisMED04xzeBBqjHa2FYnmvOlS6Xj68xWQRgWvI9cIglsjFowH/RJyEA==} + dependencies: + '@webassemblyjs/helper-module-context': 1.9.0 + '@webassemblyjs/helper-wasm-bytecode': 1.9.0 + '@webassemblyjs/wast-parser': 1.9.0 + dev: true + + /@webassemblyjs/floating-point-hex-parser/1.11.1: + resolution: {integrity: sha512-iGRfyc5Bq+NnNuX8b5hwBrRjzf0ocrJPI6GWFodBFzmFnyvrQ83SHKhmilCU/8Jv67i4GJZBMhEzltxzcNagtQ==} + dev: true + + /@webassemblyjs/floating-point-hex-parser/1.9.0: + resolution: {integrity: sha512-TG5qcFsS8QB4g4MhrxK5TqfdNe7Ey/7YL/xN+36rRjl/BlGE/NcBvJcqsRgCP6Z92mRE+7N50pRIi8SmKUbcQA==} + dev: true + + /@webassemblyjs/helper-api-error/1.11.1: + resolution: {integrity: sha512-RlhS8CBCXfRUR/cwo2ho9bkheSXG0+NwooXcc3PAILALf2QLdFyj7KGsKRbVc95hZnhnERon4kW/D3SZpp6Tcg==} + dev: true + + /@webassemblyjs/helper-api-error/1.9.0: + resolution: {integrity: sha512-NcMLjoFMXpsASZFxJ5h2HZRcEhDkvnNFOAKneP5RbKRzaWJN36NC4jqQHKwStIhGXu5mUWlUUk7ygdtrO8lbmw==} + dev: true + + /@webassemblyjs/helper-buffer/1.11.1: + resolution: {integrity: sha512-gwikF65aDNeeXa8JxXa2BAk+REjSyhrNC9ZwdT0f8jc4dQQeDQ7G4m0f2QCLPJiMTTO6wfDmRmj/pW0PsUvIcA==} + dev: true + + /@webassemblyjs/helper-buffer/1.9.0: + resolution: {integrity: sha512-qZol43oqhq6yBPx7YM3m9Bv7WMV9Eevj6kMi6InKOuZxhw+q9hOkvq5e/PpKSiLfyetpaBnogSbNCfBwyB00CA==} + dev: true + + /@webassemblyjs/helper-code-frame/1.9.0: + resolution: {integrity: sha512-ERCYdJBkD9Vu4vtjUYe8LZruWuNIToYq/ME22igL+2vj2dQ2OOujIZr3MEFvfEaqKoVqpsFKAGsRdBSBjrIvZA==} + dependencies: + '@webassemblyjs/wast-printer': 1.9.0 + dev: true + + /@webassemblyjs/helper-fsm/1.9.0: + resolution: {integrity: sha512-OPRowhGbshCb5PxJ8LocpdX9Kl0uB4XsAjl6jH/dWKlk/mzsANvhwbiULsaiqT5GZGT9qinTICdj6PLuM5gslw==} + dev: true + + /@webassemblyjs/helper-module-context/1.9.0: + resolution: {integrity: sha512-MJCW8iGC08tMk2enck1aPW+BE5Cw8/7ph/VGZxwyvGbJwjktKkDK7vy7gAmMDx88D7mhDTCNKAW5tED+gZ0W8g==} + dependencies: + '@webassemblyjs/ast': 1.9.0 + dev: true + + /@webassemblyjs/helper-numbers/1.11.1: + resolution: {integrity: sha512-vDkbxiB8zfnPdNK9Rajcey5C0w+QJugEglN0of+kmO8l7lDb77AnlKYQF7aarZuCrv+l0UvqL+68gSDr3k9LPQ==} + dependencies: + '@webassemblyjs/floating-point-hex-parser': 1.11.1 + '@webassemblyjs/helper-api-error': 1.11.1 + '@xtuc/long': 4.2.2 + dev: true + + /@webassemblyjs/helper-wasm-bytecode/1.11.1: + resolution: {integrity: sha512-PvpoOGiJwXeTrSf/qfudJhwlvDQxFgelbMqtq52WWiXC6Xgg1IREdngmPN3bs4RoO83PnL/nFrxucXj1+BX62Q==} + dev: true + + /@webassemblyjs/helper-wasm-bytecode/1.9.0: + resolution: {integrity: sha512-R7FStIzyNcd7xKxCZH5lE0Bqy+hGTwS3LJjuv1ZVxd9O7eHCedSdrId/hMOd20I+v8wDXEn+bjfKDLzTepoaUw==} + dev: true + + /@webassemblyjs/helper-wasm-section/1.11.1: + resolution: {integrity: sha512-10P9No29rYX1j7F3EVPX3JvGPQPae+AomuSTPiF9eBQeChHI6iqjMIwR9JmOJXwpnn/oVGDk7I5IlskuMwU/pg==} + dependencies: + '@webassemblyjs/ast': 1.11.1 + '@webassemblyjs/helper-buffer': 1.11.1 + '@webassemblyjs/helper-wasm-bytecode': 1.11.1 + '@webassemblyjs/wasm-gen': 1.11.1 + dev: true + + /@webassemblyjs/helper-wasm-section/1.9.0: + resolution: {integrity: sha512-XnMB8l3ek4tvrKUUku+IVaXNHz2YsJyOOmz+MMkZvh8h1uSJpSen6vYnw3IoQ7WwEuAhL8Efjms1ZWjqh2agvw==} + dependencies: + '@webassemblyjs/ast': 1.9.0 + '@webassemblyjs/helper-buffer': 1.9.0 + '@webassemblyjs/helper-wasm-bytecode': 1.9.0 + '@webassemblyjs/wasm-gen': 1.9.0 + dev: true + + /@webassemblyjs/ieee754/1.11.1: + resolution: {integrity: sha512-hJ87QIPtAMKbFq6CGTkZYJivEwZDbQUgYd3qKSadTNOhVY7p+gfP6Sr0lLRVTaG1JjFj+r3YchoqRYxNH3M0GQ==} + dependencies: + '@xtuc/ieee754': 1.2.0 + dev: true + + /@webassemblyjs/ieee754/1.9.0: + resolution: {integrity: sha512-dcX8JuYU/gvymzIHc9DgxTzUUTLexWwt8uCTWP3otys596io0L5aW02Gb1RjYpx2+0Jus1h4ZFqjla7umFniTg==} + dependencies: + '@xtuc/ieee754': 1.2.0 + dev: true + + /@webassemblyjs/leb128/1.11.1: + resolution: {integrity: sha512-BJ2P0hNZ0u+Th1YZXJpzW6miwqQUGcIHT1G/sf72gLVD9DZ5AdYTqPNbHZh6K1M5VmKvFXwGSWZADz+qBWxeRw==} + dependencies: + '@xtuc/long': 4.2.2 + dev: true + + /@webassemblyjs/leb128/1.9.0: + resolution: {integrity: sha512-ENVzM5VwV1ojs9jam6vPys97B/S65YQtv/aanqnU7D8aSoHFX8GyhGg0CMfyKNIHBuAVjy3tlzd5QMMINa7wpw==} + dependencies: + '@xtuc/long': 4.2.2 + dev: true + + /@webassemblyjs/utf8/1.11.1: + resolution: {integrity: sha512-9kqcxAEdMhiwQkHpkNiorZzqpGrodQQ2IGrHHxCy+Ozng0ofyMA0lTqiLkVs1uzTRejX+/O0EOT7KxqVPuXosQ==} + dev: true + + /@webassemblyjs/utf8/1.9.0: + resolution: {integrity: sha512-GZbQlWtopBTP0u7cHrEx+73yZKrQoBMpwkGEIqlacljhXCkVM1kMQge/Mf+csMJAjEdSwhOyLAS0AoR3AG5P8w==} + dev: true + + /@webassemblyjs/wasm-edit/1.11.1: + resolution: {integrity: sha512-g+RsupUC1aTHfR8CDgnsVRVZFJqdkFHpsHMfJuWQzWU3tvnLC07UqHICfP+4XyL2tnr1amvl1Sdp06TnYCmVkA==} + dependencies: + '@webassemblyjs/ast': 1.11.1 + '@webassemblyjs/helper-buffer': 1.11.1 + '@webassemblyjs/helper-wasm-bytecode': 1.11.1 + '@webassemblyjs/helper-wasm-section': 1.11.1 + '@webassemblyjs/wasm-gen': 1.11.1 + '@webassemblyjs/wasm-opt': 1.11.1 + '@webassemblyjs/wasm-parser': 1.11.1 + '@webassemblyjs/wast-printer': 1.11.1 + dev: true + + /@webassemblyjs/wasm-edit/1.9.0: + resolution: {integrity: sha512-FgHzBm80uwz5M8WKnMTn6j/sVbqilPdQXTWraSjBwFXSYGirpkSWE2R9Qvz9tNiTKQvoKILpCuTjBKzOIm0nxw==} + dependencies: + '@webassemblyjs/ast': 1.9.0 + '@webassemblyjs/helper-buffer': 1.9.0 + '@webassemblyjs/helper-wasm-bytecode': 1.9.0 + '@webassemblyjs/helper-wasm-section': 1.9.0 + '@webassemblyjs/wasm-gen': 1.9.0 + '@webassemblyjs/wasm-opt': 1.9.0 + '@webassemblyjs/wasm-parser': 1.9.0 + '@webassemblyjs/wast-printer': 1.9.0 + dev: true + + /@webassemblyjs/wasm-gen/1.11.1: + resolution: {integrity: sha512-F7QqKXwwNlMmsulj6+O7r4mmtAlCWfO/0HdgOxSklZfQcDu0TpLiD1mRt/zF25Bk59FIjEuGAIyn5ei4yMfLhA==} + dependencies: + '@webassemblyjs/ast': 1.11.1 + '@webassemblyjs/helper-wasm-bytecode': 1.11.1 + '@webassemblyjs/ieee754': 1.11.1 + '@webassemblyjs/leb128': 1.11.1 + '@webassemblyjs/utf8': 1.11.1 + dev: true + + /@webassemblyjs/wasm-gen/1.9.0: + resolution: {integrity: sha512-cPE3o44YzOOHvlsb4+E9qSqjc9Qf9Na1OO/BHFy4OI91XDE14MjFN4lTMezzaIWdPqHnsTodGGNP+iRSYfGkjA==} + dependencies: + '@webassemblyjs/ast': 1.9.0 + '@webassemblyjs/helper-wasm-bytecode': 1.9.0 + '@webassemblyjs/ieee754': 1.9.0 + '@webassemblyjs/leb128': 1.9.0 + '@webassemblyjs/utf8': 1.9.0 + dev: true + + /@webassemblyjs/wasm-opt/1.11.1: + resolution: {integrity: sha512-VqnkNqnZlU5EB64pp1l7hdm3hmQw7Vgqa0KF/KCNO9sIpI6Fk6brDEiX+iCOYrvMuBWDws0NkTOxYEb85XQHHw==} + dependencies: + '@webassemblyjs/ast': 1.11.1 + '@webassemblyjs/helper-buffer': 1.11.1 + '@webassemblyjs/wasm-gen': 1.11.1 + '@webassemblyjs/wasm-parser': 1.11.1 + dev: true + + /@webassemblyjs/wasm-opt/1.9.0: + resolution: {integrity: sha512-Qkjgm6Anhm+OMbIL0iokO7meajkzQD71ioelnfPEj6r4eOFuqm4YC3VBPqXjFyyNwowzbMD+hizmprP/Fwkl2A==} + dependencies: + '@webassemblyjs/ast': 1.9.0 + '@webassemblyjs/helper-buffer': 1.9.0 + '@webassemblyjs/wasm-gen': 1.9.0 + '@webassemblyjs/wasm-parser': 1.9.0 + dev: true + + /@webassemblyjs/wasm-parser/1.11.1: + resolution: {integrity: sha512-rrBujw+dJu32gYB7/Lup6UhdkPx9S9SnobZzRVL7VcBH9Bt9bCBLEuX/YXOOtBsOZ4NQrRykKhffRWHvigQvOA==} + dependencies: + '@webassemblyjs/ast': 1.11.1 + '@webassemblyjs/helper-api-error': 1.11.1 + '@webassemblyjs/helper-wasm-bytecode': 1.11.1 + '@webassemblyjs/ieee754': 1.11.1 + '@webassemblyjs/leb128': 1.11.1 + '@webassemblyjs/utf8': 1.11.1 + dev: true + + /@webassemblyjs/wasm-parser/1.9.0: + resolution: {integrity: sha512-9+wkMowR2AmdSWQzsPEjFU7njh8HTO5MqO8vjwEHuM+AMHioNqSBONRdr0NQQ3dVQrzp0s8lTcYqzUdb7YgELA==} + dependencies: + '@webassemblyjs/ast': 1.9.0 + '@webassemblyjs/helper-api-error': 1.9.0 + '@webassemblyjs/helper-wasm-bytecode': 1.9.0 + '@webassemblyjs/ieee754': 1.9.0 + '@webassemblyjs/leb128': 1.9.0 + '@webassemblyjs/utf8': 1.9.0 + dev: true + + /@webassemblyjs/wast-parser/1.9.0: + resolution: {integrity: sha512-qsqSAP3QQ3LyZjNC/0jBJ/ToSxfYJ8kYyuiGvtn/8MK89VrNEfwj7BPQzJVHi0jGTRK2dGdJ5PRqhtjzoww+bw==} + dependencies: + '@webassemblyjs/ast': 1.9.0 + '@webassemblyjs/floating-point-hex-parser': 1.9.0 + '@webassemblyjs/helper-api-error': 1.9.0 + '@webassemblyjs/helper-code-frame': 1.9.0 + '@webassemblyjs/helper-fsm': 1.9.0 + '@xtuc/long': 4.2.2 + dev: true + + /@webassemblyjs/wast-printer/1.11.1: + resolution: {integrity: sha512-IQboUWM4eKzWW+N/jij2sRatKMh99QEelo3Eb2q0qXkvPRISAj8Qxtmw5itwqK+TTkBuUIE45AxYPToqPtL5gg==} + dependencies: + '@webassemblyjs/ast': 1.11.1 + '@xtuc/long': 4.2.2 + dev: true + + /@webassemblyjs/wast-printer/1.9.0: + resolution: {integrity: sha512-2J0nE95rHXHyQ24cWjMKJ1tqB/ds8z/cyeOZxJhcb+rW+SQASVjuznUSmdz5GpVJTzU8JkhYut0D3siFDD6wsA==} + dependencies: + '@webassemblyjs/ast': 1.9.0 + '@webassemblyjs/wast-parser': 1.9.0 + '@xtuc/long': 4.2.2 + dev: true + + /@webpack-cli/configtest/1.2.0_dfxgqfcw6epibhmjfd2ethbqbi: + resolution: {integrity: sha512-4FB8Tj6xyVkyqjj1OaTqCjXYULB9FMkqQ8yGrZjRDrYh0nOE+7Lhs45WioWQQMV+ceFlE368Ukhe6xdvJM9Egg==} + peerDependencies: + webpack: 4.x.x || 5.x.x + webpack-cli: 4.x.x + dependencies: + webpack: 4.46.0_webpack-cli@4.10.0 + webpack-cli: 4.10.0_webpack@4.46.0 + dev: true + + /@webpack-cli/configtest/2.0.1_rjsyjcrmk25kqsjzwkvj3a2evq: + resolution: {integrity: sha512-njsdJXJSiS2iNbQVS0eT8A/KPnmyH4pv1APj2K0d1wrZcBLw+yppxOy4CGqa0OxDJkzfL/XELDhD8rocnIwB5A==} + engines: {node: '>=14.15.0'} + peerDependencies: + webpack: 5.x.x + webpack-cli: 5.x.x + dependencies: + webpack: 5.75.0_webpack-cli@5.0.1 + webpack-cli: 5.0.1_webpack@5.75.0 + dev: true + + /@webpack-cli/info/1.5.0_webpack-cli@4.10.0: + resolution: {integrity: sha512-e8tSXZpw2hPl2uMJY6fsMswaok5FdlGNRTktvFk2sD8RjH0hE2+XistawJx1vmKteh4NmGmNUrp+Tb2w+udPcQ==} + peerDependencies: + webpack-cli: 4.x.x + dependencies: + envinfo: 7.8.1 + webpack-cli: 4.10.0_webpack@4.46.0 + dev: true + + /@webpack-cli/info/2.0.1_rjsyjcrmk25kqsjzwkvj3a2evq: + resolution: {integrity: sha512-fE1UEWTwsAxRhrJNikE7v4EotYflkEhBL7EbajfkPlf6E37/2QshOy/D48Mw8G5XMFlQtS6YV42vtbG9zBpIQA==} + engines: {node: '>=14.15.0'} + peerDependencies: + webpack: 5.x.x + webpack-cli: 5.x.x + dependencies: + webpack: 5.75.0_webpack-cli@5.0.1 + webpack-cli: 5.0.1_webpack@5.75.0 + dev: true + + /@webpack-cli/serve/1.7.0_webpack-cli@4.10.0: + resolution: {integrity: sha512-oxnCNGj88fL+xzV+dacXs44HcDwf1ovs3AuEzvP7mqXw7fQntqIhQ1BRmynh4qEKQSSSRSWVyXRjmTbZIX9V2Q==} + peerDependencies: + webpack-cli: 4.x.x + webpack-dev-server: '*' + peerDependenciesMeta: + webpack-dev-server: + optional: true + dependencies: + webpack-cli: 4.10.0_webpack@4.46.0 + dev: true + + /@webpack-cli/serve/2.0.1_rjsyjcrmk25kqsjzwkvj3a2evq: + resolution: {integrity: sha512-0G7tNyS+yW8TdgHwZKlDWYXFA6OJQnoLCQvYKkQP0Q2X205PSQ6RNUj0M+1OB/9gRQaUZ/ccYfaxd0nhaWKfjw==} + engines: {node: '>=14.15.0'} + peerDependencies: + webpack: 5.x.x + webpack-cli: 5.x.x + webpack-dev-server: '*' + peerDependenciesMeta: + webpack-dev-server: + optional: true + dependencies: + webpack: 5.75.0_webpack-cli@5.0.1 + webpack-cli: 5.0.1_webpack@5.75.0 + dev: true + + /@xtuc/ieee754/1.2.0: + resolution: {integrity: sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==} + dev: true + + /@xtuc/long/4.2.2: + resolution: {integrity: sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==} + dev: true + /abort-controller/3.0.0: resolution: {integrity: sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==} engines: {node: '>=6.5'} @@ -1165,15 +1864,28 @@ packages: dependencies: get-iterator: 1.0.2 + /acorn-import-assertions/1.8.0_acorn@8.8.0: + resolution: {integrity: sha512-m7VZ3jwz4eK6A4Vtt8Ew1/mNbP24u0FhdyfA7fSvnJR6LMdfOYnmuIrrJAgrYfYJ10F/otaHTtrtrtmHdMNzEw==} + peerDependencies: + acorn: ^8 + dependencies: + acorn: 8.8.0 + dev: true + /acorn-walk/8.2.0: resolution: {integrity: sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==} engines: {node: '>=0.4.0'} - dev: false + + /acorn/6.4.2: + resolution: {integrity: sha512-XtGIhXwF8YM8bJhGxG5kXgjkEuNGLTkoYqVE+KMR+aspr4KGYmKYg7yUe3KghyQ9yheNwLnjmzh/7+gfDBmHCQ==} + engines: {node: '>=0.4.0'} + hasBin: true + dev: true /acorn/8.8.0: resolution: {integrity: sha512-QOxyigPVrpZ2GXT+PFyZTl6TtOFc5egxHIP9IlQ+RbupQuX4RkT/Bee4/kQuC02Xkzg84JcT7oLYtDIQxp+v7w==} engines: {node: '>=0.4.0'} - dev: false + hasBin: true /aggregate-error/3.1.0: resolution: {integrity: sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==} @@ -1182,6 +1894,22 @@ packages: clean-stack: 2.2.0 indent-string: 4.0.0 + /ajv-errors/1.0.1_ajv@6.12.6: + resolution: {integrity: sha512-DCRfO/4nQ+89p/RK43i8Ezd41EqdGIU4ld7nGF8OQ14oc/we5rEntLCUa7+jrn3nn83BosfwZA0wb4pon2o8iQ==} + peerDependencies: + ajv: '>=5.0.0' + dependencies: + ajv: 6.12.6 + dev: true + + /ajv-keywords/3.5.2_ajv@6.12.6: + resolution: {integrity: sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==} + peerDependencies: + ajv: ^6.9.1 + dependencies: + ajv: 6.12.6 + dev: true + /ajv/6.12.6: resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==} dependencies: @@ -1195,52 +1923,92 @@ packages: engines: {node: '>=8'} dependencies: type-fest: 0.21.3 + dev: true /ansi-regex/5.0.1: resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} engines: {node: '>=8'} + dev: true /ansi-styles/3.2.1: resolution: {integrity: sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==} engines: {node: '>=4'} dependencies: color-convert: 1.9.3 + dev: true /ansi-styles/4.3.0: resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} engines: {node: '>=8'} dependencies: color-convert: 2.0.1 + dev: true /ansi-styles/5.2.0: resolution: {integrity: sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==} engines: {node: '>=10'} + dev: true /any-signal/2.1.2: resolution: {integrity: sha512-B+rDnWasMi/eWcajPcCWSlYc7muXOrcYrqgyzcdKisl2H/WTlQ0gip1KyQfr0ZlxJdsuWCj/LWwQm7fhyhRfIQ==} dependencies: abort-controller: 3.0.0 - native-abort-controller: 1.0.4 + native-abort-controller: 1.0.4_abort-controller@3.0.0 dev: true /any-signal/3.0.1: resolution: {integrity: sha512-xgZgJtKEa9YmDqXodIgl7Fl1C8yNXr8w6gXjqK3LW4GcEiYT+6AQfJSE/8SPsEpLLmcvbv8YU+qet94UewHxqg==} + /anymatch/2.0.0: + resolution: {integrity: sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==} + dependencies: + micromatch: 3.1.10 + normalize-path: 2.1.1 + transitivePeerDependencies: + - supports-color + dev: true + optional: true + /anymatch/3.1.2: resolution: {integrity: sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==} engines: {node: '>= 8'} dependencies: normalize-path: 3.0.0 picomatch: 2.3.1 + dev: true + + /aproba/1.2.0: + resolution: {integrity: sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==} + dev: true /arg/4.1.3: resolution: {integrity: sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==} - dev: false /argparse/1.0.10: resolution: {integrity: sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==} dependencies: sprintf-js: 1.0.3 + dev: true + + /arr-diff/4.0.0: + resolution: {integrity: sha512-YVIQ82gZPGBebQV/a8dar4AitzCQs0jjXwMPZllpXMaGjXPYVUawSxQrRsjhjupyVxEvbHgUmIhKVlND+j02kA==} + engines: {node: '>=0.10.0'} + dev: true + + /arr-flatten/1.1.0: + resolution: {integrity: sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==} + engines: {node: '>=0.10.0'} + dev: true + + /arr-union/3.1.0: + resolution: {integrity: sha512-sKpyeERZ02v1FeCZT8lrfJq5u6goHCtpTAzPwJYe7c8SPFOboNjNg1vz2L4VTn9T4PQxEx13TbXLmYUcS6Ug7Q==} + engines: {node: '>=0.10.0'} + dev: true + + /array-unique/0.3.2: + resolution: {integrity: sha512-SleRWjh9JUud2wH1hPs9rZBZ33H6T9HOiL0uwGnGx9FpE6wKGyfWugmbkEOIs6qWrZhg0LWeLziLrEwQJhs5mQ==} + engines: {node: '>=0.10.0'} + dev: true /asn1.js/5.4.1: resolution: {integrity: sha512-+I//4cYPccV8LdmBLiX8CYvf9Sp3vQsrqu2QNXRcrbiWvcx/UdlFiqUJJzxRQxgsZmvhXhn4cSKeSmoFjVdupA==} @@ -1259,6 +2027,23 @@ packages: resolution: {integrity: sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw==} engines: {node: '>=0.8'} + /assert/1.5.0: + resolution: {integrity: sha512-EDsgawzwoun2CZkCgtxJbv392v4nbk9XDD06zI+kQYoBM/3RBWLlEyJARDOmhAAosBjWACEkKL6S+lIZtcAubA==} + dependencies: + object-assign: 4.1.1 + util: 0.10.3 + dev: true + + /assign-symbols/1.0.0: + resolution: {integrity: sha512-Q+JC7Whu8HhmTdBph/Tq59IoRtoy6KAm5zzPv00WdujX82lbAL8K7WVjne7vdCsAmbF4AYaDOPyO3k0kl8qIrw==} + engines: {node: '>=0.10.0'} + dev: true + + /async-each/1.0.3: + resolution: {integrity: sha512-z/WhQ5FPySLdvREByI2vZiTWwCnF0moMJ1hK9YQwDTHKh6I7/uSckMetoRGb5UBZPC1z0jlw+n/XCgjeH7y1AQ==} + dev: true + optional: true + /async/3.2.3: resolution: {integrity: sha512-spZRyzKL5l5BZQrr/6m/SqFdBN0q3OCI0f9rjfBzCMBIP4p75P620rR3gTmaksNOhmzgdxcaxdNfMy6anrbM0g==} dev: true @@ -1269,6 +2054,12 @@ packages: /asynckit/0.4.0: resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==} + /atob/2.1.2: + resolution: {integrity: sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==} + engines: {node: '>= 4.5.0'} + hasBin: true + dev: true + /aws-sign2/0.7.0: resolution: {integrity: sha512-08kcGqnYf/YmjoRhfxyu+CLxBjUtHLXLXX/vUfx9l2LYzG3c1m61nrpyFUZI6zeS+Li/wWMMidD9KgrqtGq3mA==} @@ -1291,27 +2082,30 @@ packages: slash: 3.0.0 transitivePeerDependencies: - supports-color + dev: true /babel-plugin-istanbul/6.1.1: resolution: {integrity: sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==} engines: {node: '>=8'} dependencies: - '@babel/helper-plugin-utils': 7.18.9 + '@babel/helper-plugin-utils': 7.20.2 '@istanbuljs/load-nyc-config': 1.1.0 '@istanbuljs/schema': 0.1.3 istanbul-lib-instrument: 5.2.0 test-exclude: 6.0.0 transitivePeerDependencies: - supports-color + dev: true /babel-plugin-jest-hoist/28.1.3: resolution: {integrity: sha512-Ys3tUKAmfnkRUpPdpa98eYrAR0nV+sSFUZZEGuQ2EbFd1y4SOLtD5QDNHAq+bb9a+bbXvYQC4b+ID/THIMcU6Q==} engines: {node: ^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0} dependencies: - '@babel/template': 7.18.10 - '@babel/types': 7.18.13 + '@babel/template': 7.20.7 + '@babel/types': 7.20.7 '@types/babel__core': 7.1.19 '@types/babel__traverse': 7.18.0 + dev: true /babel-preset-current-node-syntax/1.0.1_@babel+core@7.18.13: resolution: {integrity: sha512-M7LQ0bxarkxQoN+vz5aJPsLBn77n8QgTFmo8WK0/44auK2xlCXrYcUxHFxgU7qW5Yzw/CjmLRK2uJzaCd7LvqQ==} @@ -1331,6 +2125,7 @@ packages: '@babel/plugin-syntax-optional-catch-binding': 7.8.3_@babel+core@7.18.13 '@babel/plugin-syntax-optional-chaining': 7.8.3_@babel+core@7.18.13 '@babel/plugin-syntax-top-level-await': 7.14.5_@babel+core@7.18.13 + dev: true /babel-preset-jest/28.1.3_@babel+core@7.18.13: resolution: {integrity: sha512-L+fupJvlWAHbQfn74coNX3zf60LXMJsezNvvx8eIh7iOR1luJ1poxYgQk1F8PYtNq/6QODDHCqsSnTFSWC491A==} @@ -1341,6 +2136,7 @@ packages: '@babel/core': 7.18.13 babel-plugin-jest-hoist: 28.1.3 babel-preset-current-node-syntax: 1.0.1_@babel+core@7.18.13 + dev: true /balanced-match/1.0.2: resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} @@ -1354,6 +2150,19 @@ packages: /base-x/4.0.0: resolution: {integrity: sha512-FuwxlW4H5kh37X/oW59pwTzzTKRzfrrQwhmyspRM7swOEZcHtDZSCt45U6oKgtuFE+WYPblePMVIPR4RZrh/hw==} + /base/0.11.2: + resolution: {integrity: sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==} + engines: {node: '>=0.10.0'} + dependencies: + cache-base: 1.0.1 + class-utils: 0.3.6 + component-emitter: 1.3.0 + define-property: 1.0.0 + isobject: 3.0.1 + mixin-deep: 1.3.2 + pascalcase: 0.1.1 + dev: true + /base64-js/1.5.1: resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==} @@ -1362,11 +2171,28 @@ packages: dependencies: tweetnacl: 0.14.5 + /big.js/5.2.2: + resolution: {integrity: sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==} + dev: true + /bignumber.js/9.1.0: resolution: {integrity: sha512-4LwHK4nfDOraBCtst+wOWIHbu1vhvAPJK8g8nROd4iuc3PSEjWif/qwbkh8jwCJz6yDBvtU4KPynETgrfh7y3A==} + /binary-extensions/1.13.1: + resolution: {integrity: sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw==} + engines: {node: '>=0.10.0'} + dev: true + optional: true + + /binary-extensions/2.2.0: + resolution: {integrity: sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==} + engines: {node: '>=8'} + dev: true + optional: true + /bindings/1.5.0: resolution: {integrity: sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==} + requiresBuild: true dependencies: file-uri-to-path: 1.0.0 @@ -1394,12 +2220,21 @@ packages: browser-readablestream-to-it: 1.0.3 dev: true + /bluebird/3.7.2: + resolution: {integrity: sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==} + dev: true + /bn.js/4.12.0: resolution: {integrity: sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==} + /bn.js/5.2.1: + resolution: {integrity: sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==} + dev: true + /borc/3.0.0: resolution: {integrity: sha512-ec4JmVC46kE0+layfnwM3l15O70MlFiEbmQHY/vpqIKiUtPVntv4BY4NVnz3N4vb21edV3mY97XVckFvYHWF9g==} engines: {node: '>=4'} + hasBin: true dependencies: bignumber.js: 9.1.0 buffer: 6.0.3 @@ -1416,10 +2251,22 @@ packages: balanced-match: 1.0.2 concat-map: 0.0.1 - /brace-expansion/2.0.1: - resolution: {integrity: sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==} + /braces/2.3.2: + resolution: {integrity: sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==} + engines: {node: '>=0.10.0'} dependencies: - balanced-match: 1.0.2 + arr-flatten: 1.1.0 + array-unique: 0.3.2 + extend-shallow: 2.0.1 + fill-range: 4.0.0 + isobject: 3.0.1 + repeat-element: 1.1.4 + snapdragon: 0.8.2 + snapdragon-node: 2.1.1 + split-string: 3.1.0 + to-regex: 3.0.2 + transitivePeerDependencies: + - supports-color dev: true /braces/3.0.2: @@ -1427,6 +2274,7 @@ packages: engines: {node: '>=8'} dependencies: fill-range: 7.0.1 + dev: true /brorand/1.1.0: resolution: {integrity: sha512-cKV8tMCEpQs4hK/ik71d6LrPOnpkpGBR0wzxqr68g2m/LB2GxVYQroAjMJZRVM1Y4BCjCKc3vAamxSzOY2RP+w==} @@ -1441,20 +2289,78 @@ packages: resolution: {integrity: sha512-+12sHB+Br8HIh6VAMVEG5r3UXCyESIgDW7kzk3BjIXa43DVqVwL7GC5TW3jeh+72dtcH99pPVpw0X8i0jt+/kw==} dev: true - /browserslist/4.21.3: - resolution: {integrity: sha512-898rgRXLAyRkM1GryrrBHGkqA5hlpkV5MhtZwg9QXeiyLUYs2k00Un05aX5l2/yJIOObYKOpS2JNo8nJDE7fWQ==} - engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} + /browserify-aes/1.2.0: + resolution: {integrity: sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==} dependencies: - caniuse-lite: 1.0.30001382 - electron-to-chromium: 1.4.227 + buffer-xor: 1.0.3 + cipher-base: 1.0.4 + create-hash: 1.2.0 + evp_bytestokey: 1.0.3 + inherits: 2.0.4 + safe-buffer: 5.2.1 + dev: true + + /browserify-cipher/1.0.1: + resolution: {integrity: sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w==} + dependencies: + browserify-aes: 1.2.0 + browserify-des: 1.0.2 + evp_bytestokey: 1.0.3 + dev: true + + /browserify-des/1.0.2: + resolution: {integrity: sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A==} + dependencies: + cipher-base: 1.0.4 + des.js: 1.0.1 + inherits: 2.0.4 + safe-buffer: 5.2.1 + dev: true + + /browserify-rsa/4.1.0: + resolution: {integrity: sha512-AdEER0Hkspgno2aR97SAf6vi0y0k8NuOpGnVH3O99rcA5Q6sh8QxcngtHuJ6uXwnfAXNM4Gn1Gb7/MV1+Ymbog==} + dependencies: + bn.js: 5.2.1 + randombytes: 2.1.0 + dev: true + + /browserify-sign/4.2.1: + resolution: {integrity: sha512-/vrA5fguVAKKAVTNJjgSm1tRQDHUU6DbwO9IROu/0WAzC8PKhucDSh18J0RMvVeHAn5puMd+QHC2erPRNf8lmg==} + dependencies: + bn.js: 5.2.1 + browserify-rsa: 4.1.0 + create-hash: 1.2.0 + create-hmac: 1.1.7 + elliptic: 6.5.4 + inherits: 2.0.4 + parse-asn1: 5.1.6 + readable-stream: 3.6.0 + safe-buffer: 5.2.1 + dev: true + + /browserify-zlib/0.2.0: + resolution: {integrity: sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA==} + dependencies: + pako: 1.0.11 + dev: true + + /browserslist/4.21.4: + resolution: {integrity: sha512-CBHJJdDmgjl3daYjN5Cp5kbTf1mUhZoS+beLklHIvkOWscs83YAhLlF3Wsh/lciQYAcbBJgTOD44VtG31ZM4Hw==} + engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} + hasBin: true + dependencies: + caniuse-lite: 1.0.30001441 + electron-to-chromium: 1.4.284 node-releases: 2.0.6 - update-browserslist-db: 1.0.5_browserslist@4.21.3 + update-browserslist-db: 1.0.10_browserslist@4.21.4 + dev: true /bs-logger/0.2.6: resolution: {integrity: sha512-pd8DCoxmbgc7hyPKOvxtqNcjYoOsABPQdcCUjGp3d42VR2CX1ORhk2A87oqqu5R1kk+76nsxZupkmyd+MVtCog==} engines: {node: '>= 6'} dependencies: fast-json-stable-stringify: 2.1.0 + dev: true /bs58/5.0.0: resolution: {integrity: sha512-r+ihvQJvahgYT50JD05dyJNKlmmSlMoOGwn1lCcEzanPglg7TxYjioQUYehQ9mAR/+hOSd2jRc/Z2y5UxBymvQ==} @@ -1465,12 +2371,26 @@ packages: resolution: {integrity: sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==} dependencies: node-int64: 0.4.0 + dev: true /buffer-es6/4.9.3: resolution: {integrity: sha512-Ibt+oXxhmeYJSsCkODPqNpPmyegefiD8rfutH1NYGhMZQhSp95Rz7haemgnJ6dxa6LT+JLLbtgOMORRluwKktw==} /buffer-from/1.1.2: resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==} + dev: true + + /buffer-xor/1.0.3: + resolution: {integrity: sha512-571s0T7nZWK6vB67HI5dyUF7wXiNcfaPPPTl6zYCNApANjIvYJTg7hlud/+cJpdAhS7dVzqMLmfhfHR3rAcOjQ==} + dev: true + + /buffer/4.9.2: + resolution: {integrity: sha512-xq+q3SRMOxGivLhBNaUdC64hDTQwejJ+H0T/NB1XMtTVEwNTrfFF3gAxiyW0Bu/xWEGhjVKgUcMhCrUy2+uCWg==} + dependencies: + base64-js: 1.5.1 + ieee754: 1.2.1 + isarray: 1.0.0 + dev: true /buffer/5.7.1: resolution: {integrity: sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==} @@ -1484,6 +2404,45 @@ packages: base64-js: 1.5.1 ieee754: 1.2.1 + /builtin-status-codes/3.0.0: + resolution: {integrity: sha512-HpGFw18DgFWlncDfjTa2rcQ4W88O1mC8e8yZ2AvQY5KDaktSTwo+KRf6nHK6FRI5FyRyb/5T6+TSxfP7QyGsmQ==} + dev: true + + /cacache/12.0.4: + resolution: {integrity: sha512-a0tMB40oefvuInr4Cwb3GerbL9xTj1D5yg0T5xrjGCGyfvbxseIXX7BAO/u/hIXdafzOI5JC3wDwHyf24buOAQ==} + dependencies: + bluebird: 3.7.2 + chownr: 1.1.4 + figgy-pudding: 3.5.2 + glob: 7.2.3 + graceful-fs: 4.2.10 + infer-owner: 1.0.4 + lru-cache: 5.1.1 + mississippi: 3.0.0 + mkdirp: 0.5.6 + move-concurrently: 1.0.1 + promise-inflight: 1.0.1_bluebird@3.7.2 + rimraf: 2.7.1 + ssri: 6.0.2 + unique-filename: 1.1.1 + y18n: 4.0.3 + dev: true + + /cache-base/1.0.1: + resolution: {integrity: sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==} + engines: {node: '>=0.10.0'} + dependencies: + collection-visit: 1.0.0 + component-emitter: 1.3.0 + get-value: 2.0.6 + has-value: 1.0.0 + isobject: 3.0.1 + set-value: 2.0.1 + to-object-path: 0.3.0 + union-value: 1.0.1 + unset-value: 1.0.0 + dev: true + /callsites/3.1.0: resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} engines: {node: '>=6'} @@ -1491,13 +2450,16 @@ packages: /camelcase/5.3.1: resolution: {integrity: sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==} engines: {node: '>=6'} + dev: true /camelcase/6.3.0: resolution: {integrity: sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==} engines: {node: '>=10'} + dev: true - /caniuse-lite/1.0.30001382: - resolution: {integrity: sha512-2rtJwDmSZ716Pxm1wCtbPvHtbDWAreTPxXbkc5RkKglow3Ig/4GNGazDI9/BVnXbG/wnv6r3B5FEbkfg9OcTGg==} + /caniuse-lite/1.0.30001441: + resolution: {integrity: sha512-OyxRR4Vof59I3yGWXws6i908EtGbMzVUi3ganaZQHmydk1iwDhRnvaPG2WaR0KcqrDFKrxVZHULT396LEPhXfg==} + dev: true /caseless/0.12.0: resolution: {integrity: sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw==} @@ -1509,6 +2471,7 @@ packages: ansi-styles: 3.2.1 escape-string-regexp: 1.0.5 supports-color: 5.5.0 + dev: true /chalk/4.1.2: resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} @@ -1516,29 +2479,99 @@ packages: dependencies: ansi-styles: 4.3.0 supports-color: 7.2.0 + dev: true /char-regex/1.0.2: resolution: {integrity: sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==} engines: {node: '>=10'} + dev: true + + /chokidar/2.1.8: + resolution: {integrity: sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg==} + deprecated: Chokidar 2 does not receive security updates since 2019. Upgrade to chokidar 3 with 15x fewer dependencies + dependencies: + anymatch: 2.0.0 + async-each: 1.0.3 + braces: 2.3.2 + glob-parent: 3.1.0 + inherits: 2.0.4 + is-binary-path: 1.0.1 + is-glob: 4.0.3 + normalize-path: 3.0.0 + path-is-absolute: 1.0.1 + readdirp: 2.2.1 + upath: 1.2.0 + optionalDependencies: + fsevents: 1.2.13 + transitivePeerDependencies: + - supports-color + dev: true + optional: true + + /chokidar/3.5.3: + resolution: {integrity: sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==} + engines: {node: '>= 8.10.0'} + requiresBuild: true + dependencies: + anymatch: 3.1.2 + braces: 3.0.2 + glob-parent: 5.1.2 + is-binary-path: 2.1.0 + is-glob: 4.0.3 + normalize-path: 3.0.0 + readdirp: 3.6.0 + optionalDependencies: + fsevents: 2.3.2 + dev: true + optional: true + + /chownr/1.1.4: + resolution: {integrity: sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==} + dev: true + + /chrome-trace-event/1.0.3: + resolution: {integrity: sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg==} + engines: {node: '>=6.0'} + dev: true /ci-info/3.3.2: resolution: {integrity: sha512-xmDt/QIAdeZ9+nfdPsaBCpMvHNLFiLdjj59qjqn+6iPe6YmHGQ35sBnQ8uslRBXFmXkiZQOJRjvQeoGppoTjjg==} + dev: true /cids/1.1.9: resolution: {integrity: sha512-l11hWRfugIcbGuTZwAM5PwpjPPjyb6UZOGwlHSnOBV5o07XhQ4gNpBN67FbODvpjyHtd+0Xs6KNvUcGBiDRsdg==} engines: {node: '>=4.0.0', npm: '>=3.0.0'} + deprecated: This module has been superseded by the multiformats module dependencies: multibase: 4.0.6 multicodec: 3.2.1 multihashes: 4.0.3 uint8arrays: 3.1.0 + /cipher-base/1.0.4: + resolution: {integrity: sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==} + dependencies: + inherits: 2.0.4 + safe-buffer: 5.2.1 + dev: true + /cjs-module-lexer/1.2.2: resolution: {integrity: sha512-cOU9usZw8/dXIXKtwa8pM0OTJQuJkxMN6w30csNRUerHfeQ5R6U3kkU/FtJeIf3M202OHfY2U8ccInBG7/xogA==} + dev: true /class-is/1.1.0: resolution: {integrity: sha512-rhjH9AG1fvabIDoGRVH587413LPjTZgmDF9fOFCbFJQV4yuocX1mHxxvXI4g3cGwbVY9wAYIoKlg1N79frJKQw==} + /class-utils/0.3.6: + resolution: {integrity: sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==} + engines: {node: '>=0.10.0'} + dependencies: + arr-union: 3.1.0 + define-property: 0.2.5 + isobject: 3.0.1 + static-extend: 0.1.2 + dev: true + /clean-stack/2.2.0: resolution: {integrity: sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==} engines: {node: '>=6'} @@ -1549,30 +2582,58 @@ packages: string-width: 4.2.3 strip-ansi: 6.0.1 wrap-ansi: 7.0.0 + dev: true + + /clone-deep/4.0.1: + resolution: {integrity: sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==} + engines: {node: '>=6'} + dependencies: + is-plain-object: 2.0.4 + kind-of: 6.0.3 + shallow-clone: 3.0.1 + dev: true /co/4.6.0: resolution: {integrity: sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==} engines: {iojs: '>= 1.0.0', node: '>= 0.12.0'} + dev: true /collect-v8-coverage/1.0.1: resolution: {integrity: sha512-iBPtljfCNcTKNAto0KEtDfZ3qzjJvqE3aTGZsbhjSBlorqpXJlaWWtPO35D+ZImoC3KWejX64o+yPGxhWSTzfg==} + dev: true + + /collection-visit/1.0.0: + resolution: {integrity: sha512-lNkKvzEeMBBjUGHZ+q6z9pSJla0KWAQPvtzhEV9+iGyQYG+pBpl7xKDhxoNSOZH2hhv0v5k0y2yAM4o4SjoSkw==} + engines: {node: '>=0.10.0'} + dependencies: + map-visit: 1.0.0 + object-visit: 1.0.1 + dev: true /color-convert/1.9.3: resolution: {integrity: sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==} dependencies: color-name: 1.1.3 + dev: true /color-convert/2.0.1: resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} engines: {node: '>=7.0.0'} dependencies: color-name: 1.1.4 + dev: true /color-name/1.1.3: resolution: {integrity: sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==} + dev: true /color-name/1.1.4: resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} + dev: true + + /colorette/2.0.19: + resolution: {integrity: sha512-3tlv/dIP7FWvj3BsbHrGLJ6l/oKh1O3TcgBqMn+yyCagOxc23fyzDS6HypQbgxWbkpDnf52p1LuR4eWDQ/K9WQ==} + dev: true /combined-stream/1.0.8: resolution: {integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==} @@ -1584,20 +2645,100 @@ packages: resolution: {integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==} dev: true + /commander/7.2.0: + resolution: {integrity: sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==} + engines: {node: '>= 10'} + dev: true + + /commander/9.4.1: + resolution: {integrity: sha512-5EEkTNyHNGFPD2H+c/dXXfQZYa/scCKasxWcXJaWnNJ99pnQN9Vnmqow+p+PlFPE63Q6mThaZws1T+HxfpgtPw==} + engines: {node: ^12.20.0 || >=14} + dev: true + + /commondir/1.0.1: + resolution: {integrity: sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==} + dev: true + + /component-emitter/1.3.0: + resolution: {integrity: sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==} + dev: true + /concat-map/0.0.1: resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} + /concat-stream/1.6.2: + resolution: {integrity: sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==} + engines: {'0': node >= 0.8} + dependencies: + buffer-from: 1.1.2 + inherits: 2.0.4 + readable-stream: 2.3.7 + typedarray: 0.0.6 + dev: true + + /console-browserify/1.2.0: + resolution: {integrity: sha512-ZMkYO/LkF17QvCPqM0gxw8yUzigAOZOSWSHg91FH6orS7vcEj5dVZTidN2fQ14yBSdg97RqhSNwLUXInd52OTA==} + dev: true + + /constants-browserify/1.0.0: + resolution: {integrity: sha512-xFxOwqIzR/e1k1gLiWEophSCMqXcwVHIH7akf7b/vxcUeGunlj3hvZaaqxwHsTgn+IndtkQJgSztIDWeumWJDQ==} + dev: true + /convert-source-map/1.8.0: resolution: {integrity: sha512-+OQdjP49zViI/6i7nIJpA8rAl4sV/JdPfU9nZs3VqOwGIgizICvuN2ru6fMd+4llL0tar18UYJXfZ/TWtmhUjA==} dependencies: safe-buffer: 5.1.2 + dev: true + + /copy-concurrently/1.0.5: + resolution: {integrity: sha512-f2domd9fsVDFtaFcbaRZuYXwtdmnzqbADSwhSWYxYB/Q8zsdUUFMXVRwXGDMWmbEzAn1kdRrtI1T/KTFOL4X2A==} + dependencies: + aproba: 1.2.0 + fs-write-stream-atomic: 1.0.10 + iferr: 0.1.5 + mkdirp: 0.5.6 + rimraf: 2.7.1 + run-queue: 1.0.3 + dev: true + + /copy-descriptor/0.1.1: + resolution: {integrity: sha512-XgZ0pFcakEUlbwQEVNg3+QAis1FyTL3Qel9FYy8pSkQqoG3PNoT0bOCQtOXcOkur21r2Eq2kI+IE+gsmAEVlYw==} + engines: {node: '>=0.10.0'} + dev: true /core-util-is/1.0.2: resolution: {integrity: sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ==} + /create-ecdh/4.0.4: + resolution: {integrity: sha512-mf+TCx8wWc9VpuxfP2ht0iSISLZnt0JgWlrOKZiNqyUZWnjIaCIVNQArMHnCZKfEYRg6IM7A+NeJoN8gf/Ws0A==} + dependencies: + bn.js: 4.12.0 + elliptic: 6.5.4 + dev: true + + /create-hash/1.2.0: + resolution: {integrity: sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==} + dependencies: + cipher-base: 1.0.4 + inherits: 2.0.4 + md5.js: 1.3.5 + ripemd160: 2.0.2 + sha.js: 2.4.11 + dev: true + + /create-hmac/1.1.7: + resolution: {integrity: sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==} + dependencies: + cipher-base: 1.0.4 + create-hash: 1.2.0 + inherits: 2.0.4 + ripemd160: 2.0.2 + safe-buffer: 5.2.1 + sha.js: 2.4.11 + dev: true + /create-require/1.1.1: resolution: {integrity: sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==} - dev: false /cross-spawn/7.0.3: resolution: {integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==} @@ -1607,6 +2748,26 @@ packages: shebang-command: 2.0.0 which: 2.0.2 + /crypto-browserify/3.12.0: + resolution: {integrity: sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg==} + dependencies: + browserify-cipher: 1.0.1 + browserify-sign: 4.2.1 + create-ecdh: 4.0.4 + create-hash: 1.2.0 + create-hmac: 1.1.7 + diffie-hellman: 5.0.3 + inherits: 2.0.4 + pbkdf2: 3.1.2 + public-encrypt: 4.0.3 + randombytes: 2.1.0 + randomfill: 1.0.4 + dev: true + + /cyclist/1.0.1: + resolution: {integrity: sha512-NJGVKPS81XejHcLhaLJS7plab0fK3slPh11mESeeDq2W4ZI5kUKK/LRRdVDvjJseojbPB7ZwjnyOybg3Igea/A==} + dev: true + /dashdash/1.14.1: resolution: {integrity: sha512-jRFi8UDGo6j+odZiEpjazZaWqEal3w/basFjQHQEwVtZJGDpxbH1MeYluwCS8Xq5wmLJooDlMgvVarmWfGM44g==} engines: {node: '>=0.10'} @@ -1635,6 +2796,17 @@ packages: transitivePeerDependencies: - supports-color + /debug/2.6.9: + resolution: {integrity: sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + dependencies: + ms: 2.0.0 + dev: true + /debug/4.3.4: resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==} engines: {node: '>=6.0'} @@ -1646,12 +2818,19 @@ packages: dependencies: ms: 2.1.2 + /decode-uri-component/0.2.0: + resolution: {integrity: sha512-hjf+xovcEn31w/EUYdTXQh/8smFL/dzYjohQGEIgjyNavaJfBY2p5F527Bo1VPATxv0VYTUC2bOcXvqFwk78Og==} + engines: {node: '>=0.10'} + dev: true + /dedent/0.7.0: resolution: {integrity: sha512-Q6fKUPqnAHAyhiUgFU7BUzLiv0kd8saH9al7tnu5Q/okj6dnupxyTgFIBjVzJATdfIAm9NAsvXNzjaKa+bxVyA==} + dev: true /deepmerge/4.2.2: resolution: {integrity: sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg==} engines: {node: '>=0.10.0'} + dev: true /default-gateway/6.0.3: resolution: {integrity: sha512-fwSOJsbbNzZ/CUFpqFBqYfYNLj1NbMPm8MMCIzHjC83iSJRBEGmDUxU+WP661BaBQImeC2yHwXtz+P/O9o+XEg==} @@ -1659,36 +2838,90 @@ packages: dependencies: execa: 5.1.1 + /define-property/0.2.5: + resolution: {integrity: sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==} + engines: {node: '>=0.10.0'} + dependencies: + is-descriptor: 0.1.6 + dev: true + + /define-property/1.0.0: + resolution: {integrity: sha512-cZTYKFWspt9jZsMscWo8sc/5lbPC9Q0N5nBLgb+Yd915iL3udB1uFgS3B8YCx66UVHq018DAVFoee7x+gxggeA==} + engines: {node: '>=0.10.0'} + dependencies: + is-descriptor: 1.0.2 + dev: true + + /define-property/2.0.2: + resolution: {integrity: sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==} + engines: {node: '>=0.10.0'} + dependencies: + is-descriptor: 1.0.2 + isobject: 3.0.1 + dev: true + /delayed-stream/1.0.0: resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==} engines: {node: '>=0.4.0'} + /des.js/1.0.1: + resolution: {integrity: sha512-Q0I4pfFrv2VPd34/vfLrFOoRmlYj3OV50i7fskps1jZWK1kApMWWT9G6RRUeYedLcBDIhnSDaUvJMb3AhUlaEA==} + dependencies: + inherits: 2.0.4 + minimalistic-assert: 1.0.1 + dev: true + /detect-newline/3.1.0: resolution: {integrity: sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==} engines: {node: '>=8'} + dev: true /diff-sequences/27.5.1: resolution: {integrity: sha512-k1gCAXAsNgLwEL+Y8Wvl+M6oEFj5bgazfZULpS5CneoPPXRaCCW7dm+q21Ky2VEE5X+VeRDBVg1Pcvvsr4TtNQ==} engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + dev: true /diff-sequences/28.1.1: resolution: {integrity: sha512-FU0iFaH/E23a+a718l8Qa/19bF9p06kgE0KipMOMadwa3SjnaElKzPaUC0vnibs6/B/9ni97s61mcejk8W1fQw==} engines: {node: ^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0} + dev: true /diff/4.0.2: resolution: {integrity: sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==} engines: {node: '>=0.3.1'} - dev: false - /dns-over-http-resolver/1.2.3: + /diffie-hellman/5.0.3: + resolution: {integrity: sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==} + dependencies: + bn.js: 4.12.0 + miller-rabin: 4.0.1 + randombytes: 2.1.0 + dev: true + + /dns-over-http-resolver/1.2.3_node-fetch@3.2.10: resolution: {integrity: sha512-miDiVSI6KSNbi4SVifzO/reD8rMnxgrlnkrlkugOLQpWQTe2qMdHsZp5DmfKjxNE+/T3VAAYLQUZMv9SMr6+AA==} dependencies: debug: 4.3.4 - native-fetch: 3.0.0 + native-fetch: 3.0.0_node-fetch@3.2.10 receptacle: 1.3.2 transitivePeerDependencies: + - node-fetch - supports-color + /domain-browser/1.2.0: + resolution: {integrity: sha512-jnjyiM6eRyZl2H+W8Q/zLMA481hzi0eszAaBUzIVnmYVDBbnLxVNnfu1HgEBvCbL+71FrxMl3E6lpKH7Ge3OXA==} + engines: {node: '>=0.4', npm: '>=1.2'} + dev: true + + /duplexify/3.7.1: + resolution: {integrity: sha512-07z8uv2wMyS51kKhD1KsdXJg5WQ6t93RneqRxUHnskXVtlYYkLqM0gqStQZ3pj073g687jPCHrqNfCzawLYh5g==} + dependencies: + end-of-stream: 1.4.4 + inherits: 2.0.4 + readable-stream: 2.3.7 + stream-shift: 1.0.1 + dev: true + /ecc-jsbn/0.1.2: resolution: {integrity: sha512-eh9O+hwRHNbG4BLTjEl3nw044CkGm5X6LoaCf7LPp7UU8Qrt47JYNi6nPX8xjW97TKGKm1ouctg0QSpZe9qrnw==} dependencies: @@ -1701,8 +2934,9 @@ packages: dependencies: encoding: 0.1.13 - /electron-to-chromium/1.4.227: - resolution: {integrity: sha512-I9VVajA3oswIJOUFg2PSBqrHLF5Y+ahIfjOV9+v6uYyBqFZutmPxA6fxocDUUmgwYevRWFu1VjLyVG3w45qa/g==} + /electron-to-chromium/1.4.284: + resolution: {integrity: sha512-M8WEXFuKXMYMVr45fo8mq0wUrrJHheiKZf6BArTKk9ZBYCKJEOU5H8cdWgDT+qCVZf7Na4lVUaZsA+h6uA9+PA==} + dev: true /elliptic/6.5.4: resolution: {integrity: sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ==} @@ -1718,9 +2952,16 @@ packages: /emittery/0.10.2: resolution: {integrity: sha512-aITqOwnLanpHLNXZJENbOgjUBeHocD+xsSJmNrjovKBW5HbSpW3d1pEls7GFQPUWXiwG9+0P4GtHfEqC/4M0Iw==} engines: {node: '>=12'} + dev: true /emoji-regex/8.0.0: resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} + dev: true + + /emojis-list/3.0.0: + resolution: {integrity: sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==} + engines: {node: '>= 4'} + dev: true /encoding/0.1.13: resolution: {integrity: sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==} @@ -1732,13 +2973,48 @@ packages: dependencies: once: 1.4.0 + /enhanced-resolve/4.5.0: + resolution: {integrity: sha512-Nv9m36S/vxpsI+Hc4/ZGRs0n9mXqSWGGq49zxb/cJfPAQMbUtttJAlNPS4AQzaBdw/pKskw5bMbekT/Y7W/Wlg==} + engines: {node: '>=6.9.0'} + dependencies: + graceful-fs: 4.2.10 + memory-fs: 0.5.0 + tapable: 1.1.3 + dev: true + + /enhanced-resolve/5.12.0: + resolution: {integrity: sha512-QHTXI/sZQmko1cbDoNAa3mJ5qhWUUNAq3vR0/YiD379fWQrcfuoX1+HW2S0MTt7XmoPLapdaDKUtelUSPic7hQ==} + engines: {node: '>=10.13.0'} + dependencies: + graceful-fs: 4.2.10 + tapable: 2.2.1 + dev: true + + /envinfo/7.8.1: + resolution: {integrity: sha512-/o+BXHmB7ocbHEAs6F2EnG0ogybVVUdkRunTT2glZU9XAaGmhqskrvKwqXuDfNjEO0LZKWdejEEpnq8aM0tOaw==} + engines: {node: '>=4'} + hasBin: true + dev: true + /err-code/3.0.1: resolution: {integrity: sha512-GiaH0KJUewYok+eeY05IIgjtAe4Yltygk9Wqp1V5yVWLdhf0hYZchRjNIT9bb0mSwRcIusT3cx7PJUf3zEIfUA==} + /errno/0.1.8: + resolution: {integrity: sha512-dJ6oBr5SQ1VSd9qkk7ByRgb/1SH4JZjCHSW/mr63/QcXO9zLVxvJ6Oy13nio03rxpSnVDDjFor75SjVeZWPW/A==} + hasBin: true + dependencies: + prr: 1.0.1 + dev: true + /error-ex/1.3.2: resolution: {integrity: sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==} dependencies: is-arrayish: 0.2.1 + dev: true + + /es-module-lexer/0.9.3: + resolution: {integrity: sha512-1HQ2M2sPtxwnvOvT1ZClHyQDiggdNjURWpY2we6aMKCQiUVxTmVs2UYPLIrD84sS+kMdUwfBSylbJPwNnBrnHQ==} + dev: true /es6-promisify/7.0.0: resolution: {integrity: sha512-ginqzK3J90Rd4/Yz7qRrqUeIpe3TwSXTPPZtPne7tGBPeAaQiU8qt4fpKApnxHcq1AwtUdHVg5P77x/yrggG8Q==} @@ -1747,14 +3023,33 @@ packages: /escalade/3.1.1: resolution: {integrity: sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==} engines: {node: '>=6'} + dev: true /escape-string-regexp/1.0.5: resolution: {integrity: sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==} engines: {node: '>=0.8.0'} + dev: true /escape-string-regexp/2.0.0: resolution: {integrity: sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==} engines: {node: '>=8'} + dev: true + + /eslint-scope/4.0.3: + resolution: {integrity: sha512-p7VutNr1O/QrxysMo3E45FjYDTeXBy0iTltPFNSqKAIfjDSXC+4dj+qfyuD8bfAXrW/y6lW3O76VaYNPKfpKrg==} + engines: {node: '>=4.0.0'} + dependencies: + esrecurse: 4.3.0 + estraverse: 4.3.0 + dev: true + + /eslint-scope/5.1.1: + resolution: {integrity: sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==} + engines: {node: '>=8.0.0'} + dependencies: + esrecurse: 4.3.0 + estraverse: 4.3.0 + dev: true /esm/3.2.25: resolution: {integrity: sha512-U1suiZ2oDVWv4zPO56S0NcR5QriEahGtdN2OR6FiOG4WJvcjBVFB0qI4+eKoWFH483PKGuLuu6V8Z4T5g63UVA==} @@ -1764,6 +3059,25 @@ packages: /esprima/4.0.1: resolution: {integrity: sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==} engines: {node: '>=4'} + hasBin: true + dev: true + + /esrecurse/4.3.0: + resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==} + engines: {node: '>=4.0'} + dependencies: + estraverse: 5.3.0 + dev: true + + /estraverse/4.3.0: + resolution: {integrity: sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==} + engines: {node: '>=4.0'} + dev: true + + /estraverse/5.3.0: + resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==} + engines: {node: '>=4.0'} + dev: true /event-iterator/2.0.0: resolution: {integrity: sha512-KGft0ldl31BZVV//jj+IAIGCxkvvUkkON+ScH6zfoX+l+omX6001ggyRSpI0Io2Hlro0ThXotswCtfzS8UkIiQ==} @@ -1780,6 +3094,13 @@ packages: resolution: {integrity: sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==} engines: {node: '>=0.8.x'} + /evp_bytestokey/1.0.3: + resolution: {integrity: sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==} + dependencies: + md5.js: 1.3.5 + safe-buffer: 5.2.1 + dev: true + /execa/5.1.1: resolution: {integrity: sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==} engines: {node: '>=10'} @@ -1797,6 +3118,22 @@ packages: /exit/0.1.2: resolution: {integrity: sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ==} engines: {node: '>= 0.8.0'} + dev: true + + /expand-brackets/2.1.4: + resolution: {integrity: sha512-w/ozOKR9Obk3qoWeY/WDi6MFta9AoMR+zud60mdnbniMcBxRuFJyDt2LdX/14A1UABeqk+Uk+LDfUpvoGKppZA==} + engines: {node: '>=0.10.0'} + dependencies: + debug: 2.6.9 + define-property: 0.2.5 + extend-shallow: 2.0.1 + posix-character-classes: 0.1.1 + regex-not: 1.0.2 + snapdragon: 0.8.2 + to-regex: 3.0.2 + transitivePeerDependencies: + - supports-color + dev: true /expect/28.1.3: resolution: {integrity: sha512-eEh0xn8HlsuOBxFgIss+2mX85VAS4Qy3OSkjV7rlBWljtA4oWH37glVGyOZSZvErDT/yBywZdPGwCXuTvSG85g==} @@ -1807,10 +3144,42 @@ packages: jest-matcher-utils: 28.1.3 jest-message-util: 28.1.3 jest-util: 28.1.3 + dev: true + + /extend-shallow/2.0.1: + resolution: {integrity: sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==} + engines: {node: '>=0.10.0'} + dependencies: + is-extendable: 0.1.1 + dev: true + + /extend-shallow/3.0.2: + resolution: {integrity: sha512-BwY5b5Ql4+qZoefgMj2NUmx+tehVTH/Kf4k1ZEtOHNFcm2wSxMRo992l6X3TIgni2eZVTZ85xMOjF31fwZAj6Q==} + engines: {node: '>=0.10.0'} + dependencies: + assign-symbols: 1.0.0 + is-extendable: 1.0.1 + dev: true /extend/3.0.2: resolution: {integrity: sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==} + /extglob/2.0.4: + resolution: {integrity: sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==} + engines: {node: '>=0.10.0'} + dependencies: + array-unique: 0.3.2 + define-property: 1.0.0 + expand-brackets: 2.1.4 + extend-shallow: 2.0.1 + fragment-cache: 0.2.1 + regex-not: 1.0.2 + snapdragon: 0.8.2 + to-regex: 3.0.2 + transitivePeerDependencies: + - supports-color + dev: true + /extsprintf/1.3.0: resolution: {integrity: sha512-11Ndz7Nv+mvAC1j0ktTa7fAb0vLyGGX+rMHNBYQviQDGU0Hw7lhctJANqbPhu9nV9/izT/IntTgZ7Im/9LJs9g==} engines: {'0': node >=0.6.0} @@ -1827,10 +3196,16 @@ packages: /fast-json-stable-stringify/2.1.0: resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==} + /fastest-levenshtein/1.0.16: + resolution: {integrity: sha512-eRnCtTTtGZFpQCwhJiUOuxPQWRXVKYDn0b2PeHfXL6/Zi53SLAzAHfVhVWK2AryC/WH05kGfxhFIPvTF0SXQzg==} + engines: {node: '>= 4.9.1'} + dev: true + /fb-watchman/2.0.1: resolution: {integrity: sha512-DkPJKQeY6kKwmuMretBhr7G6Vodr7bFwDYTXIkfG1gjvNpaxBTQV3PbXg6bR1c1UP4jPOX0jHUbbHANL9vRjVg==} dependencies: bser: 2.1.1 + dev: true /fetch-blob/3.2.0: resolution: {integrity: sha512-7yAQpD2UMJzLi1Dqv7qFYnPbaPx7ZfFK6PiIxQ4PfkGPyNyl2Ugx+a/umUonmKqjhM4DnfbMvdX6otXq83soQQ==} @@ -1839,14 +3214,46 @@ packages: node-domexception: 1.0.0 web-streams-polyfill: 3.2.1 + /figgy-pudding/3.5.2: + resolution: {integrity: sha512-0btnI/H8f2pavGMN8w40mlSKOfTK2SVJmBfBeVIj3kNw0swwgzyRq0d5TJVOwodFmtvpPeWPN/MCcfuWF0Ezbw==} + dev: true + /file-uri-to-path/1.0.0: resolution: {integrity: sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==} + requiresBuild: true + + /fill-range/4.0.0: + resolution: {integrity: sha512-VcpLTWqWDiTerugjj8e3+esbg+skS3M9e54UuR3iCeIDMXCLTsAH8hTSzDQU/X6/6t3eYkOKoZSef2PlU6U1XQ==} + engines: {node: '>=0.10.0'} + dependencies: + extend-shallow: 2.0.1 + is-number: 3.0.0 + repeat-string: 1.6.1 + to-regex-range: 2.1.1 + dev: true /fill-range/7.0.1: resolution: {integrity: sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==} engines: {node: '>=8'} dependencies: to-regex-range: 5.0.1 + dev: true + + /find-cache-dir/2.1.0: + resolution: {integrity: sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ==} + engines: {node: '>=6'} + dependencies: + commondir: 1.0.1 + make-dir: 2.1.0 + pkg-dir: 3.0.0 + dev: true + + /find-up/3.0.0: + resolution: {integrity: sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==} + engines: {node: '>=6'} + dependencies: + locate-path: 3.0.0 + dev: true /find-up/4.1.0: resolution: {integrity: sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==} @@ -1854,6 +3261,19 @@ packages: dependencies: locate-path: 5.0.0 path-exists: 4.0.0 + dev: true + + /flush-write-stream/1.1.1: + resolution: {integrity: sha512-3Z4XhFZ3992uIq0XOqb9AreonueSYphE6oYbpt5+3u06JWklbsPkNv3ZKkP9Bz/r+1MWCaMoSQ28P85+1Yc77w==} + dependencies: + inherits: 2.0.4 + readable-stream: 2.3.7 + dev: true + + /for-in/1.0.2: + resolution: {integrity: sha512-7EwmXrOjyL+ChxMhmG5lnW9MPt1aIeZEwKhQzoBUdTV0N3zuwWDZYVJatDvZ2OyzPUvdIAZDsCetk3coyMfcnQ==} + engines: {node: '>=0.10.0'} + dev: true /forever-agent/0.6.1: resolution: {integrity: sha512-j0KLYPhm6zeac4lz3oJ3o65qvgQCcPubiyotZrXqEaG4hNagNYO8qdlUrX5vwqv9ohqeT/Z3j6+yW067yWWdUw==} @@ -1881,32 +3301,72 @@ packages: dependencies: fetch-blob: 3.2.0 + /fragment-cache/0.2.1: + resolution: {integrity: sha512-GMBAbW9antB8iZRHLoGw0b3HANt57diZYFO/HL1JGIC1MjKrdmhxvrJbupnVvpys0zsz7yBApXdQyfepKly2kA==} + engines: {node: '>=0.10.0'} + dependencies: + map-cache: 0.2.2 + dev: true + + /from2/2.3.0: + resolution: {integrity: sha512-OMcX/4IC/uqEPVgGeyfN22LJk6AZrMkRZHxcHBMBvHScDGgwTm2GT2Wkgtocyd3JfZffjj2kYUDXXII0Fk9W0g==} + dependencies: + inherits: 2.0.4 + readable-stream: 2.3.7 + dev: true + /fs-constants/1.0.0: resolution: {integrity: sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==} /fs-monkey/0.3.3: resolution: {integrity: sha512-FNUvuTAJ3CqCQb5ELn+qCbGR/Zllhf2HtwsdAtBi59s1WeCjKMT81fHcSu7dwIskqGVK+MmOrb7VOBlq3/SItw==} + /fs-write-stream-atomic/1.0.10: + resolution: {integrity: sha512-gehEzmPn2nAwr39eay+x3X34Ra+M2QlVUTLhkXPjWdeO8RF9kszk116avgBJM3ZyNHgHXBNx+VmPaFC36k0PzA==} + dependencies: + graceful-fs: 4.2.10 + iferr: 0.1.5 + imurmurhash: 0.1.4 + readable-stream: 2.3.7 + dev: true + /fs.realpath/1.0.0: resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} + dev: true + + /fsevents/1.2.13: + resolution: {integrity: sha512-oWb1Z6mkHIskLzEJ/XWX0srkpkTQ7vaopMQkyaEIoq0fmtFVxOthb8cCxeT+p3ynTdkk/RZwbgG4brR5BeWECw==} + engines: {node: '>= 4.0'} + os: [darwin] + deprecated: fsevents 1 will break on node v14+ and could be using insecure binaries. Upgrade to fsevents 2. + requiresBuild: true + dependencies: + bindings: 1.5.0 + nan: 2.16.0 + dev: true + optional: true /fsevents/2.3.2: resolution: {integrity: sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==} engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} os: [darwin] requiresBuild: true + dev: true optional: true /function-bind/1.1.1: resolution: {integrity: sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==} + dev: true /gensync/1.0.0-beta.2: resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==} engines: {node: '>=6.9.0'} + dev: true /get-caller-file/2.0.5: resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==} engines: {node: 6.* || 8.* || >= 10.*} + dev: true /get-iterator/1.0.2: resolution: {integrity: sha512-v+dm9bNVfOYsY1OrhaCrmyOcYoSeVvbt+hHZ0Au+T+p1y+0Uyj9aMaGIeUTT6xdpRbWzDeYKvfOslPhggQMcsg==} @@ -1914,16 +3374,42 @@ packages: /get-package-type/0.1.0: resolution: {integrity: sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==} engines: {node: '>=8.0.0'} + dev: true /get-stream/6.0.1: resolution: {integrity: sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==} engines: {node: '>=10'} + /get-value/2.0.6: + resolution: {integrity: sha512-Ln0UQDlxH1BapMu3GPtf7CuYNwRZf2gwCuPqbyG6pB8WfmFpzqcy4xtAaAMUhnNqjMKTiCPZG2oMT3YSx8U2NA==} + engines: {node: '>=0.10.0'} + dev: true + /getpass/0.1.7: resolution: {integrity: sha512-0fzj9JxOLfJ+XGLhR8ze3unN0KZCgZwiSSDz168VERjK8Wl8kVSdcu2kspd4s4wtAa1y/qrVRiAA0WclVsu0ng==} dependencies: assert-plus: 1.0.0 + /glob-parent/3.1.0: + resolution: {integrity: sha512-E8Ak/2+dZY6fnzlR7+ueWvhsH1SjHr4jjss4YS/h4py44jY9MhK/VFdaZJAWDz6BbL21KeteKxFSFpq8OS5gVA==} + dependencies: + is-glob: 3.1.0 + path-dirname: 1.0.2 + dev: true + optional: true + + /glob-parent/5.1.2: + resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} + engines: {node: '>= 6'} + dependencies: + is-glob: 4.0.3 + dev: true + optional: true + + /glob-to-regexp/0.4.1: + resolution: {integrity: sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==} + dev: true + /glob/7.2.3: resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==} dependencies: @@ -1933,24 +3419,16 @@ packages: minimatch: 3.1.2 once: 1.4.0 path-is-absolute: 1.0.1 - - /glob/8.0.3: - resolution: {integrity: sha512-ull455NHSHI/Y1FqGaaYFaLGkNMMJbavMrEGFXG/PGrg6y7sutWHUHrz6gy6WEBH6akM1M414dWKCNs+IhKdiQ==} - engines: {node: '>=12'} - dependencies: - fs.realpath: 1.0.0 - inflight: 1.0.6 - inherits: 2.0.4 - minimatch: 5.1.0 - once: 1.4.0 dev: true /globals/11.12.0: resolution: {integrity: sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==} engines: {node: '>=4'} + dev: true /graceful-fs/4.2.10: resolution: {integrity: sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==} + dev: true /har-schema/2.0.0: resolution: {integrity: sha512-Oqluz6zhGX8cyRaTQlFMPw80bSJVG2x/cFb8ZPhUILGgHka9SsokCCOQgpveePerqidZOrT14ipqfJb7ILcW5Q==} @@ -1959,6 +3437,7 @@ packages: /har-validator/5.1.5: resolution: {integrity: sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w==} engines: {node: '>=6'} + deprecated: this library is no longer supported dependencies: ajv: 6.12.6 har-schema: 2.0.0 @@ -1966,16 +3445,59 @@ packages: /has-flag/3.0.0: resolution: {integrity: sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==} engines: {node: '>=4'} + dev: true /has-flag/4.0.0: resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} engines: {node: '>=8'} + dev: true + + /has-value/0.3.1: + resolution: {integrity: sha512-gpG936j8/MzaeID5Yif+577c17TxaDmhuyVgSwtnL/q8UUTySg8Mecb+8Cf1otgLoD7DDH75axp86ER7LFsf3Q==} + engines: {node: '>=0.10.0'} + dependencies: + get-value: 2.0.6 + has-values: 0.1.4 + isobject: 2.1.0 + dev: true + + /has-value/1.0.0: + resolution: {integrity: sha512-IBXk4GTsLYdQ7Rvt+GRBrFSVEkmuOUy4re0Xjd9kJSUQpnTrWR4/y9RpfexN9vkAPMFuQoeWKwqzPozRTlasGw==} + engines: {node: '>=0.10.0'} + dependencies: + get-value: 2.0.6 + has-values: 1.0.0 + isobject: 3.0.1 + dev: true + + /has-values/0.1.4: + resolution: {integrity: sha512-J8S0cEdWuQbqD9//tlZxiMuMNmxB8PlEwvYwuxsTmR1G5RXUePEX/SJn7aD0GMLieuZYSwNH0cQuJGwnYunXRQ==} + engines: {node: '>=0.10.0'} + dev: true + + /has-values/1.0.0: + resolution: {integrity: sha512-ODYZC64uqzmtfGMEAX/FvZiRyWLpAC3vYnNunURUnkGVTS+mI0smVsWaPydRBsE3g+ok7h960jChO8mFcWlHaQ==} + engines: {node: '>=0.10.0'} + dependencies: + is-number: 3.0.0 + kind-of: 4.0.0 + dev: true /has/1.0.3: resolution: {integrity: sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==} engines: {node: '>= 0.4.0'} dependencies: function-bind: 1.1.1 + dev: true + + /hash-base/3.1.0: + resolution: {integrity: sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA==} + engines: {node: '>=4'} + dependencies: + inherits: 2.0.4 + readable-stream: 3.6.0 + safe-buffer: 5.2.1 + dev: true /hash.js/1.1.7: resolution: {integrity: sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==} @@ -1995,6 +3517,7 @@ packages: /html-escaper/2.0.2: resolution: {integrity: sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==} + dev: true /http-signature/1.2.0: resolution: {integrity: sha512-CAbnr6Rz4CYQkLYUtSNXxQPUH2gK8f3iWexVlsnMeD+GjlsQ0Xsy1cOX+mN3dtxYomRy21CiOzU8Uhw6OwncEQ==} @@ -2004,6 +3527,10 @@ packages: jsprim: 1.4.2 sshpk: 1.17.0 + /https-browserify/1.0.0: + resolution: {integrity: sha512-J+FkSdyD+0mA0N+81tMotaRMfSL9SGi+xpD3T6YApKsc3bGSXJlfXri3VyFOeYkfLRQisDk1W+jIFFKBeUBbBg==} + dev: true + /human-signals/2.1.0: resolution: {integrity: sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==} engines: {node: '>=10.17.0'} @@ -2017,26 +3544,46 @@ packages: /ieee754/1.2.1: resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==} + /iferr/0.1.5: + resolution: {integrity: sha512-DUNFN5j7Tln0D+TxzloUjKB+CtVu6myn0JEFak6dG18mNt9YkQ6lzGCdafwofISZ1lLF3xRHJ98VKy9ynkcFaA==} + dev: true + /import-local/3.1.0: resolution: {integrity: sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg==} engines: {node: '>=8'} + hasBin: true dependencies: pkg-dir: 4.2.0 resolve-cwd: 3.0.0 + dev: true /imurmurhash/0.1.4: resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==} engines: {node: '>=0.8.19'} + dev: true /indent-string/4.0.0: resolution: {integrity: sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==} engines: {node: '>=8'} + /infer-owner/1.0.4: + resolution: {integrity: sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A==} + dev: true + /inflight/1.0.6: resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==} dependencies: once: 1.4.0 wrappy: 1.0.2 + dev: true + + /inherits/2.0.1: + resolution: {integrity: sha512-8nWq2nLTAwd02jTqJExUYFSD/fKq6VH9Y/oG2accc/kdI0V98Bag8d5a4gi3XHz73rDWa2PvTtvcWYquKqSENA==} + dev: true + + /inherits/2.0.3: + resolution: {integrity: sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==} + dev: true /inherits/2.0.4: resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} @@ -2065,6 +3612,7 @@ packages: /interface-ipld-format/1.0.1: resolution: {integrity: sha512-WV/ar+KQJVoQpqRDYdo7YPGYIUHJxCuOEhdvsRpzLqoOIVCqPKdMMYmsLL1nCRsF3yYNio+PAJbCKiv6drrEAg==} + deprecated: This module has been superseded by the multiformats module dependencies: cids: 1.1.9 multicodec: 3.2.1 @@ -2078,6 +3626,16 @@ packages: /interface-store/2.0.2: resolution: {integrity: sha512-rScRlhDcz6k199EkHqT8NpM87ebN89ICOzILoBHgaG36/WX50N32BnU/kpZgCGPLhARRAWUUX5/cyaIjt7Kipg==} + /interpret/2.2.0: + resolution: {integrity: sha512-Ju0Bz/cEia55xDwUWEa8+olFpCiQoypjnQySseKtmjNrnps3P+xfpUmGr90T7yjlVJmOtybRvPXhKMbHr+fWnw==} + engines: {node: '>= 0.10'} + dev: true + + /interpret/3.1.1: + resolution: {integrity: sha512-6xwYfHbajpoF0xLW+iwLkhwgvLoZDfjYfoFNu8ftMoXINzwuymNLd9u/KmwtdT2GbR+/Cz66otEGEVVUHX9QLQ==} + engines: {node: '>=10.13.0'} + dev: true + /ip-address/8.1.0: resolution: {integrity: sha512-Wz91gZKpNKoXtqvY8ScarKYwhXoK4r/b5QuT+uywe/azv0/nUCo7Bh0IRRI7F9DHR06kJNWtzMGLIbXavngbKA==} engines: {node: '>= 12'} @@ -2093,19 +3651,20 @@ packages: resolution: {integrity: sha512-1qTgH9NG+IIJ4yfKs2e6Pp1bZg8wbDbKHT21HrLIeYBTRLgMYKnMTPAuI3Lcs61nfx5h1xlXnbJtH1kX5/d/ng==} engines: {node: '>= 10'} - /ipfs-core-types/0.5.2: + /ipfs-core-types/0.5.2_node-fetch@3.2.10: resolution: {integrity: sha512-DOQeL+GFGYMTlnbdtMeBzvfVnyAalSgCfPr8XUCI+FVBZZWwzkt5jZZzGDmF87HVRrMR3FuVyBKZj772mcXKyQ==} dependencies: cids: 1.1.9 interface-datastore: 4.0.2 ipld-block: 0.11.1 - multiaddr: 9.0.2 + multiaddr: 9.0.2_node-fetch@3.2.10 multibase: 4.0.6 transitivePeerDependencies: + - node-fetch - supports-color dev: true - /ipfs-core-utils/0.8.3: + /ipfs-core-utils/0.8.3_node-fetch@3.2.10: resolution: {integrity: sha512-PY7PkCgCtVYtNOe1C3ew1+5D9NqXqizb886R/lyGWe+KsmWtBQkQIk0ZIDwKyHGvG2KA2QQeIDzdOmzBQBJtHQ==} dependencies: any-signal: 2.1.2 @@ -2113,22 +3672,23 @@ packages: browser-readablestream-to-it: 1.0.3 cids: 1.1.9 err-code: 3.0.1 - ipfs-core-types: 0.5.2 + ipfs-core-types: 0.5.2_node-fetch@3.2.10 ipfs-unixfs: 4.0.3 ipfs-utils: 8.1.6 it-all: 1.0.6 it-map: 1.0.6 it-peekable: 1.0.3 - multiaddr: 9.0.2 - multiaddr-to-uri: 7.0.0 + multiaddr: 9.0.2_node-fetch@3.2.10 + multiaddr-to-uri: 7.0.0_node-fetch@3.2.10 parse-duration: 1.0.2 timeout-abort-controller: 1.1.1 uint8arrays: 2.1.10 transitivePeerDependencies: + - node-fetch - supports-color dev: true - /ipfs-http-client/50.1.2: + /ipfs-http-client/50.1.2_node-fetch@3.2.10: resolution: {integrity: sha512-ZbJlED4wqwFXQFVB9FQDs20ygdq7O/zSq4AvO9KRAmkqUj2TsCWCteUz2fBMnGWLh2tExxeSl/rQbHbJptb8JQ==} engines: {node: '>=14.0.0', npm: '>=3.0.0'} dependencies: @@ -2137,8 +3697,8 @@ packages: cids: 1.1.9 debug: 4.3.4 form-data: 4.0.0 - ipfs-core-types: 0.5.2 - ipfs-core-utils: 0.8.3 + ipfs-core-types: 0.5.2_node-fetch@3.2.10 + ipfs-core-utils: 0.8.3_node-fetch@3.2.10 ipfs-unixfs: 4.0.3 ipfs-utils: 8.1.6 ipld-block: 0.11.1 @@ -2150,16 +3710,17 @@ packages: it-tar: 3.0.0 it-to-stream: 1.0.0 merge-options: 3.0.4 - multiaddr: 9.0.2 + multiaddr: 9.0.2_node-fetch@3.2.10 multibase: 4.0.6 multicodec: 3.2.1 multihashes: 4.0.3 nanoid: 3.3.4 - native-abort-controller: 1.0.4 + native-abort-controller: 1.0.4_abort-controller@3.0.0 parse-duration: 1.0.2 stream-to-it: 0.2.4 uint8arrays: 2.1.10 transitivePeerDependencies: + - node-fetch - supports-color dev: true @@ -2185,8 +3746,8 @@ packages: it-to-stream: 1.0.0 merge-options: 3.0.4 nanoid: 3.3.4 - native-abort-controller: 1.0.4 - native-fetch: 3.0.0 + native-abort-controller: 1.0.4_abort-controller@3.0.0 + native-fetch: 3.0.0_hmwa7nplpltavckpkeobtw6pv4 node-fetch: /@achingbrain/node-fetch/2.6.7 react-native-fetch-api: 2.0.0 stream-to-it: 0.2.4 @@ -2205,7 +3766,7 @@ packages: it-to-stream: 1.0.0 merge-options: 3.0.4 nanoid: 3.3.4 - native-fetch: 3.0.0 + native-fetch: 3.0.0_hmwa7nplpltavckpkeobtw6pv4 node-fetch: /@achingbrain/node-fetch/2.6.7 react-native-fetch-api: 2.0.0 stream-to-it: 0.2.4 @@ -2220,6 +3781,7 @@ packages: /ipld-dag-cbor/1.0.1: resolution: {integrity: sha512-PZh8rHnRETX5bj60i73W2oq6BXoZnIvYCBDwIffYVJgxMr7BEVd5PycAARBiT6daORJ/4zbqEFR5CcrjeCtm/A==} engines: {node: '>=6.0.0', npm: '>=3.0.0'} + deprecated: This module has been superseded by @ipld/dag-cbor and multiformats dependencies: borc: 3.0.0 cids: 1.1.9 @@ -2233,6 +3795,7 @@ packages: /ipld-dag-pb/0.22.3: resolution: {integrity: sha512-dfG5C5OVAR4FEP7Al2CrHWvAyIM7UhAQrjnOYOIxXGQz5NlEj6wGX0XQf6Ru6or1na6upvV3NQfstapQG8X2rg==} engines: {node: '>=6.0.0', npm: '>=3.0.0'} + deprecated: This module has been superseded by @ipld/dag-pb and multiformats dependencies: cids: 1.1.9 interface-ipld-format: 1.0.1 @@ -2245,6 +3808,7 @@ packages: /ipld-raw/7.0.1: resolution: {integrity: sha512-oaiy0Ot23NCnoBA7sLvPL9qFRC6JDB0IsdZL6rUeZJxzxabQuBLNGYXcqjQ8jlF0UPLEUSO+h8OJh2DZPzL2aQ==} + deprecated: This module has been superseded by the multiformats module dependencies: cids: 1.1.9 interface-ipld-format: 1.0.1 @@ -2252,8 +3816,43 @@ packages: multihashing-async: 2.1.4 dev: true + /is-accessor-descriptor/0.1.6: + resolution: {integrity: sha512-e1BM1qnDbMRG3ll2U9dSK0UMHuWOs3pY3AtcFsmvwPtKL3MML/Q86i+GilLfvqEs4GW+ExB91tQ3Ig9noDIZ+A==} + engines: {node: '>=0.10.0'} + dependencies: + kind-of: 3.2.2 + dev: true + + /is-accessor-descriptor/1.0.0: + resolution: {integrity: sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==} + engines: {node: '>=0.10.0'} + dependencies: + kind-of: 6.0.3 + dev: true + /is-arrayish/0.2.1: resolution: {integrity: sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==} + dev: true + + /is-binary-path/1.0.1: + resolution: {integrity: sha512-9fRVlXc0uCxEDj1nQzaWONSpbTfx0FmJfzHF7pwlI8DkWGoHBBea4Pg5Ky0ojwwxQmnSifgbKkI06Qv0Ljgj+Q==} + engines: {node: '>=0.10.0'} + dependencies: + binary-extensions: 1.13.1 + dev: true + optional: true + + /is-binary-path/2.1.0: + resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==} + engines: {node: '>=8'} + dependencies: + binary-extensions: 2.2.0 + dev: true + optional: true + + /is-buffer/1.1.6: + resolution: {integrity: sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==} + dev: true /is-buffer/2.0.5: resolution: {integrity: sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ==} @@ -2267,17 +3866,86 @@ packages: resolution: {integrity: sha512-Erxj2n/LDAZ7H8WNJXd9tw38GYM3dv8rk8Zcs+jJuxYTW7sozH+SS8NtrSjVL1/vpLvWi1hxy96IzjJ3EHTJJg==} dependencies: has: 1.0.3 + dev: true + + /is-data-descriptor/0.1.4: + resolution: {integrity: sha512-+w9D5ulSoBNlmw9OHn3U2v51SyoCd0he+bB3xMl62oijhrspxowjU+AIcDY0N3iEJbUEkB15IlMASQsxYigvXg==} + engines: {node: '>=0.10.0'} + dependencies: + kind-of: 3.2.2 + dev: true + + /is-data-descriptor/1.0.0: + resolution: {integrity: sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==} + engines: {node: '>=0.10.0'} + dependencies: + kind-of: 6.0.3 + dev: true + + /is-descriptor/0.1.6: + resolution: {integrity: sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==} + engines: {node: '>=0.10.0'} + dependencies: + is-accessor-descriptor: 0.1.6 + is-data-descriptor: 0.1.4 + kind-of: 5.1.0 + dev: true + + /is-descriptor/1.0.2: + resolution: {integrity: sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==} + engines: {node: '>=0.10.0'} + dependencies: + is-accessor-descriptor: 1.0.0 + is-data-descriptor: 1.0.0 + kind-of: 6.0.3 + dev: true /is-electron/2.2.1: resolution: {integrity: sha512-r8EEQQsqT+Gn0aXFx7lTFygYQhILLCB+wn0WCDL5LZRINeLH/Rvw1j2oKodELLXYNImQ3CRlVsY8wW4cGOsyuw==} + /is-extendable/0.1.1: + resolution: {integrity: sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==} + engines: {node: '>=0.10.0'} + dev: true + + /is-extendable/1.0.1: + resolution: {integrity: sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==} + engines: {node: '>=0.10.0'} + dependencies: + is-plain-object: 2.0.4 + dev: true + + /is-extglob/2.1.1: + resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} + engines: {node: '>=0.10.0'} + dev: true + optional: true + /is-fullwidth-code-point/3.0.0: resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} engines: {node: '>=8'} + dev: true /is-generator-fn/2.1.0: resolution: {integrity: sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==} engines: {node: '>=6'} + dev: true + + /is-glob/3.1.0: + resolution: {integrity: sha512-UFpDDrPgM6qpnFNI+rh/p3bUaq9hKLZN8bMUWzxmcnZVS3omf4IPK+BrewlnWjO1WmUsMYuSjKh4UJuV4+Lqmw==} + engines: {node: '>=0.10.0'} + dependencies: + is-extglob: 2.1.1 + dev: true + optional: true + + /is-glob/4.0.3: + resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} + engines: {node: '>=0.10.0'} + dependencies: + is-extglob: 2.1.1 + dev: true + optional: true /is-ip/3.1.0: resolution: {integrity: sha512-35vd5necO7IitFPjd/YBeqwWnyDWbuLH9ZXQdMfDA8TEo7pv5X8yfrvVO3xbJbLUlERCMvf6X0hTUamQxCYJ9Q==} @@ -2288,9 +3956,17 @@ packages: /is-loopback-addr/1.0.1: resolution: {integrity: sha512-DhWU/kqY7X2F6KrrVTu7mHlbd2Pbo4D1YkAzasBMjQs6lJAoefxaA6m6CpSX0K6pjt9D0b9PNFI5zduy/vzOYw==} + /is-number/3.0.0: + resolution: {integrity: sha512-4cboCqIpliH+mAvFNegjZQ4kgKc3ZUhQVr3HvWbSh5q3WH2v82ct+T2Y1hdU5Gdtorx/cLifQjqCbL7bpznLTg==} + engines: {node: '>=0.10.0'} + dependencies: + kind-of: 3.2.2 + dev: true + /is-number/7.0.0: resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} engines: {node: '>=0.12.0'} + dev: true /is-observable/2.1.0: resolution: {integrity: sha512-DailKdLb0WU+xX8K5w7VsJhapwHLZ9jjmazqCJq4X12CTgqq73TKnbRcnSLuXYPOoLQgV5IrD7ePiX/h1vnkBw==} @@ -2300,6 +3976,13 @@ packages: resolution: {integrity: sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==} engines: {node: '>=8'} + /is-plain-object/2.0.4: + resolution: {integrity: sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==} + engines: {node: '>=0.10.0'} + dependencies: + isobject: 3.0.1 + dev: true + /is-stream/2.0.1: resolution: {integrity: sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==} engines: {node: '>=8'} @@ -2307,6 +3990,20 @@ packages: /is-typedarray/1.0.0: resolution: {integrity: sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==} + /is-windows/1.0.2: + resolution: {integrity: sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==} + engines: {node: '>=0.10.0'} + dev: true + + /is-wsl/1.1.0: + resolution: {integrity: sha512-gfygJYZ2gLTDlmbWMI0CE2MwnFzSN/2SZfkMlItC4K/JBlsWVDB0bO6XhqcY13YXE7iMcAJnzTCJjPiTeJJ0Mw==} + engines: {node: '>=4'} + dev: true + + /isarray/1.0.0: + resolution: {integrity: sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==} + dev: true + /isexe/2.0.0: resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} @@ -2327,24 +4024,38 @@ packages: resolution: {integrity: sha512-9JPDgCN4B7QPkLtYAAOrEuAWvP9rWvR5offAr0/SeF046wIkglqH3VXgYYP6NcsKslH80UIVgmPqNe3j7tG2ng==} engines: {node: '>=12'} + /isobject/2.1.0: + resolution: {integrity: sha512-+OUdGJlgjOBZDfxnDjYYG6zp487z0JGNQq3cYQYg5f5hKR+syHMsaztzGeml/4kGG55CSpKSpWTY+jYGgsHLgA==} + engines: {node: '>=0.10.0'} + dependencies: + isarray: 1.0.0 + dev: true + + /isobject/3.0.1: + resolution: {integrity: sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==} + engines: {node: '>=0.10.0'} + dev: true + /isstream/0.1.2: resolution: {integrity: sha512-Yljz7ffyPbrLpLngrMtZ7NduUgVvi6wG9RJ9IUcyCd59YQ911PBJphODUcbOVbqYfxe1wuYf/LJ8PauMRwsM/g==} /istanbul-lib-coverage/3.2.0: resolution: {integrity: sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw==} engines: {node: '>=8'} + dev: true /istanbul-lib-instrument/5.2.0: resolution: {integrity: sha512-6Lthe1hqXHBNsqvgDzGO6l03XNeu3CrG4RqQ1KM9+l5+jNGpEJfIELx1NS3SEHmJQA8np/u+E4EPRKRiu6m19A==} engines: {node: '>=8'} dependencies: '@babel/core': 7.18.13 - '@babel/parser': 7.18.13 + '@babel/parser': 7.20.7 '@istanbuljs/schema': 0.1.3 istanbul-lib-coverage: 3.2.0 semver: 6.3.0 transitivePeerDependencies: - supports-color + dev: true /istanbul-lib-report/3.0.0: resolution: {integrity: sha512-wcdi+uAKzfiGT2abPpKZ0hSU1rGQjUQnLvtY5MpQ7QCTahD3VODhcu4wcfY1YtkGaDD5yuydOLINXsfbus9ROw==} @@ -2353,6 +4064,7 @@ packages: istanbul-lib-coverage: 3.2.0 make-dir: 3.1.0 supports-color: 7.2.0 + dev: true /istanbul-lib-source-maps/4.0.1: resolution: {integrity: sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==} @@ -2363,6 +4075,7 @@ packages: source-map: 0.6.1 transitivePeerDependencies: - supports-color + dev: true /istanbul-reports/3.1.5: resolution: {integrity: sha512-nUsEMa9pBt/NOHqbcbeJEgqIlY/K7rVWUX6Lql2orY5e9roQOthbR3vtY4zzf2orPELg80fnxxk9zUyPlgwD1w==} @@ -2370,6 +4083,7 @@ packages: dependencies: html-escaper: 2.0.2 istanbul-lib-report: 3.0.0 + dev: true /it-all/1.0.6: resolution: {integrity: sha512-3cmCc6Heqe3uWi3CVM/k51fa/XbMFpQVzFoDsV0IZNHSQDyAXl3c4MjHkFX5kF3922OGj7Myv1nSEUgRtcuM1A==} @@ -2512,6 +4226,7 @@ packages: dependencies: execa: 5.1.1 p-limit: 3.1.0 + dev: true /jest-circus/28.1.3: resolution: {integrity: sha512-cZ+eS5zc79MBwt+IhQhiEp0OeBddpc1n8MBo1nMB8A7oPMKEO+Sre+wHaLJexQUj9Ya/8NOBY0RESUgYjB6fow==} @@ -2538,8 +4253,37 @@ packages: stack-utils: 2.0.5 transitivePeerDependencies: - supports-color + dev: true - /jest-cli/28.1.3: + /jest-cli/28.1.3_4echt27za7uk6ezjshmbxcfmgy: + resolution: {integrity: sha512-roY3kvrv57Azn1yPgdTebPAXvdR2xfezaKKYzVxZ6It/5NCxzJym6tUI5P1zkdWhfUYkxEI9uZWcQdaFLo8mJQ==} + engines: {node: ^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0} + hasBin: true + peerDependencies: + node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 + peerDependenciesMeta: + node-notifier: + optional: true + dependencies: + '@jest/core': 28.1.3_ts-node@10.9.1 + '@jest/test-result': 28.1.3 + '@jest/types': 28.1.3 + chalk: 4.1.2 + exit: 0.1.2 + graceful-fs: 4.2.10 + import-local: 3.1.0 + jest-config: 28.1.3_4echt27za7uk6ezjshmbxcfmgy + jest-util: 28.1.3 + jest-validate: 28.1.3 + prompts: 2.4.2 + yargs: 17.5.1 + transitivePeerDependencies: + - '@types/node' + - supports-color + - ts-node + dev: true + + /jest-cli/28.1.3_@types+node@16.11.59: resolution: {integrity: sha512-roY3kvrv57Azn1yPgdTebPAXvdR2xfezaKKYzVxZ6It/5NCxzJym6tUI5P1zkdWhfUYkxEI9uZWcQdaFLo8mJQ==} engines: {node: ^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0} hasBin: true @@ -2556,7 +4300,7 @@ packages: exit: 0.1.2 graceful-fs: 4.2.10 import-local: 3.1.0 - jest-config: 28.1.3 + jest-config: 28.1.3_@types+node@16.11.59 jest-util: 28.1.3 jest-validate: 28.1.3 prompts: 2.4.2 @@ -2565,8 +4309,37 @@ packages: - '@types/node' - supports-color - ts-node + dev: true - /jest-config/28.1.3: + /jest-cli/28.1.3_gsb7asu77en4txj3es3i65pxci: + resolution: {integrity: sha512-roY3kvrv57Azn1yPgdTebPAXvdR2xfezaKKYzVxZ6It/5NCxzJym6tUI5P1zkdWhfUYkxEI9uZWcQdaFLo8mJQ==} + engines: {node: ^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0} + hasBin: true + peerDependencies: + node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 + peerDependenciesMeta: + node-notifier: + optional: true + dependencies: + '@jest/core': 28.1.3_ts-node@10.9.1 + '@jest/test-result': 28.1.3 + '@jest/types': 28.1.3 + chalk: 4.1.2 + exit: 0.1.2 + graceful-fs: 4.2.10 + import-local: 3.1.0 + jest-config: 28.1.3_gsb7asu77en4txj3es3i65pxci + jest-util: 28.1.3 + jest-validate: 28.1.3 + prompts: 2.4.2 + yargs: 17.5.1 + transitivePeerDependencies: + - '@types/node' + - supports-color + - ts-node + dev: true + + /jest-config/28.1.3_4echt27za7uk6ezjshmbxcfmgy: resolution: {integrity: sha512-MG3INjByJ0J4AsNBm7T3hsuxKQqFIiRo/AUqb1q9LRKI5UU6Aar9JHbr9Ivn1TVwfUD9KirRoM/T6u8XlcQPHQ==} engines: {node: ^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0} peerDependencies: @@ -2581,6 +4354,47 @@ packages: '@babel/core': 7.18.13 '@jest/test-sequencer': 28.1.3 '@jest/types': 28.1.3 + '@types/node': 16.11.59 + babel-jest: 28.1.3_@babel+core@7.18.13 + chalk: 4.1.2 + ci-info: 3.3.2 + deepmerge: 4.2.2 + glob: 7.2.3 + graceful-fs: 4.2.10 + jest-circus: 28.1.3 + jest-environment-node: 28.1.3 + jest-get-type: 28.0.2 + jest-regex-util: 28.0.2 + jest-resolve: 28.1.3 + jest-runner: 28.1.3 + jest-util: 28.1.3 + jest-validate: 28.1.3 + micromatch: 4.0.5 + parse-json: 5.2.0 + pretty-format: 28.1.3 + slash: 3.0.0 + strip-json-comments: 3.1.1 + ts-node: 10.9.1_f4s53rsdbgkmxc2oaa23drhnsy + transitivePeerDependencies: + - supports-color + dev: true + + /jest-config/28.1.3_@types+node@16.11.59: + resolution: {integrity: sha512-MG3INjByJ0J4AsNBm7T3hsuxKQqFIiRo/AUqb1q9LRKI5UU6Aar9JHbr9Ivn1TVwfUD9KirRoM/T6u8XlcQPHQ==} + engines: {node: ^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0} + peerDependencies: + '@types/node': '*' + ts-node: '>=9.0.0' + peerDependenciesMeta: + '@types/node': + optional: true + ts-node: + optional: true + dependencies: + '@babel/core': 7.18.13 + '@jest/test-sequencer': 28.1.3 + '@jest/types': 28.1.3 + '@types/node': 16.11.59 babel-jest: 28.1.3_@babel+core@7.18.13 chalk: 4.1.2 ci-info: 3.3.2 @@ -2602,6 +4416,7 @@ packages: strip-json-comments: 3.1.1 transitivePeerDependencies: - supports-color + dev: true /jest-config/28.1.3_@types+node@18.7.14: resolution: {integrity: sha512-MG3INjByJ0J4AsNBm7T3hsuxKQqFIiRo/AUqb1q9LRKI5UU6Aar9JHbr9Ivn1TVwfUD9KirRoM/T6u8XlcQPHQ==} @@ -2640,6 +4455,47 @@ packages: strip-json-comments: 3.1.1 transitivePeerDependencies: - supports-color + dev: true + + /jest-config/28.1.3_gsb7asu77en4txj3es3i65pxci: + resolution: {integrity: sha512-MG3INjByJ0J4AsNBm7T3hsuxKQqFIiRo/AUqb1q9LRKI5UU6Aar9JHbr9Ivn1TVwfUD9KirRoM/T6u8XlcQPHQ==} + engines: {node: ^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0} + peerDependencies: + '@types/node': '*' + ts-node: '>=9.0.0' + peerDependenciesMeta: + '@types/node': + optional: true + ts-node: + optional: true + dependencies: + '@babel/core': 7.18.13 + '@jest/test-sequencer': 28.1.3 + '@jest/types': 28.1.3 + '@types/node': 18.7.14 + babel-jest: 28.1.3_@babel+core@7.18.13 + chalk: 4.1.2 + ci-info: 3.3.2 + deepmerge: 4.2.2 + glob: 7.2.3 + graceful-fs: 4.2.10 + jest-circus: 28.1.3 + jest-environment-node: 28.1.3 + jest-get-type: 28.0.2 + jest-regex-util: 28.0.2 + jest-resolve: 28.1.3 + jest-runner: 28.1.3 + jest-util: 28.1.3 + jest-validate: 28.1.3 + micromatch: 4.0.5 + parse-json: 5.2.0 + pretty-format: 28.1.3 + slash: 3.0.0 + strip-json-comments: 3.1.1 + ts-node: 10.9.1_apbkdfxvcdmborgupeskcsfbo4 + transitivePeerDependencies: + - supports-color + dev: true /jest-diff/27.5.1: resolution: {integrity: sha512-m0NvkX55LDt9T4mctTEgnZk3fmEg3NRYutvMPWM/0iPnkFj2wIeF45O1718cMSOFO1vINkqmxqD8vE37uTEbqw==} @@ -2649,6 +4505,7 @@ packages: diff-sequences: 27.5.1 jest-get-type: 27.5.1 pretty-format: 27.5.1 + dev: true /jest-diff/28.1.3: resolution: {integrity: sha512-8RqP1B/OXzjjTWkqMX67iqgwBVJRgCyKD3L9nq+6ZqJMdvjE8RgHktqZ6jNrkdMT+dJuYNI3rhQpxaz7drJHfw==} @@ -2658,12 +4515,14 @@ packages: diff-sequences: 28.1.1 jest-get-type: 28.0.2 pretty-format: 28.1.3 + dev: true /jest-docblock/28.1.1: resolution: {integrity: sha512-3wayBVNiOYx0cwAbl9rwm5kKFP8yHH3d/fkEaL02NPTkDojPtheGB7HZSFY4wzX+DxyrvhXz0KSCVksmCknCuA==} engines: {node: ^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0} dependencies: detect-newline: 3.1.0 + dev: true /jest-each/28.1.3: resolution: {integrity: sha512-arT1z4sg2yABU5uogObVPvSlSMQlDA48owx07BDPAiasW0yYpYHYOo4HHLz9q0BVzDVU4hILFjzJw0So9aCL/g==} @@ -2674,6 +4533,7 @@ packages: jest-get-type: 28.0.2 jest-util: 28.1.3 pretty-format: 28.1.3 + dev: true /jest-environment-node/28.1.3: resolution: {integrity: sha512-ugP6XOhEpjAEhGYvp5Xj989ns5cB1K6ZdjBYuS30umT4CQEETaxSiPcZ/E1kFktX4GkrcM4qu07IIlDYX1gp+A==} @@ -2685,14 +4545,17 @@ packages: '@types/node': 18.7.14 jest-mock: 28.1.3 jest-util: 28.1.3 + dev: true /jest-get-type/27.5.1: resolution: {integrity: sha512-2KY95ksYSaK7DMBWQn6dQz3kqAf3BB64y2udeG+hv4KfSOb9qwcYQstTJc1KCbsix+wLZWZYN8t7nwX3GOBLRw==} engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + dev: true /jest-get-type/28.0.2: resolution: {integrity: sha512-ioj2w9/DxSYHfOm5lJKCdcAmPJzQXmbM/Url3rhlghrPvT3tt+7a/+oXc9azkKmLvoiXjtV83bEWqi+vs5nlPA==} engines: {node: ^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0} + dev: true /jest-haste-map/28.1.3: resolution: {integrity: sha512-3S+RQWDXccXDKSWnkHa/dPwt+2qwA8CJzR61w3FoYCvoo3Pn8tvGcysmMF0Bj0EX5RYvAI2EIvC57OmotfdtKA==} @@ -2711,6 +4574,7 @@ packages: walker: 1.0.8 optionalDependencies: fsevents: 2.3.2 + dev: true /jest-leak-detector/28.1.3: resolution: {integrity: sha512-WFVJhnQsiKtDEo5lG2mM0v40QWnBM+zMdHHyJs8AWZ7J0QZJS59MsyKeJHWhpBZBH32S48FOVvGyOFT1h0DlqA==} @@ -2718,6 +4582,7 @@ packages: dependencies: jest-get-type: 28.0.2 pretty-format: 28.1.3 + dev: true /jest-matcher-utils/27.5.1: resolution: {integrity: sha512-z2uTx/T6LBaCoNWNFWwChLBKYxTMcGBRjAt+2SbP929/Fflb9aa5LGma654Rz8z9HLxsrUaYzxE9T/EFIL/PAw==} @@ -2727,6 +4592,7 @@ packages: jest-diff: 27.5.1 jest-get-type: 27.5.1 pretty-format: 27.5.1 + dev: true /jest-matcher-utils/28.1.3: resolution: {integrity: sha512-kQeJ7qHemKfbzKoGjHHrRKH6atgxMk8Enkk2iPQ3XwO6oE/KYD8lMYOziCkeSB9G4adPM4nR1DE8Tf5JeWH6Bw==} @@ -2736,6 +4602,7 @@ packages: jest-diff: 28.1.3 jest-get-type: 28.0.2 pretty-format: 28.1.3 + dev: true /jest-message-util/28.1.3: resolution: {integrity: sha512-PFdn9Iewbt575zKPf1286Ht9EPoJmYT7P0kY+RibeYZ2XtOr53pDLEFoTWXbd1h4JiGiWpTBC84fc8xMXQMb7g==} @@ -2750,6 +4617,7 @@ packages: pretty-format: 28.1.3 slash: 3.0.0 stack-utils: 2.0.5 + dev: true /jest-mock/28.1.3: resolution: {integrity: sha512-o3J2jr6dMMWYVH4Lh/NKmDXdosrsJgi4AviS8oXLujcjpCMBb1FMsblDnOXKZKfSiHLxYub1eS0IHuRXsio9eA==} @@ -2757,19 +4625,24 @@ packages: dependencies: '@jest/types': 28.1.3 '@types/node': 18.7.14 + dev: true - /jest-pnp-resolver/1.2.2: + /jest-pnp-resolver/1.2.2_jest-resolve@28.1.3: resolution: {integrity: sha512-olV41bKSMm8BdnuMsewT4jqlZ8+3TCARAXjZGT9jcoSnrfUnRCqnMoF9XEeoWjbzObpqF9dRhHQj0Xb9QdF6/w==} engines: {node: '>=6'} + peerDependencies: + jest-resolve: '*' peerDependenciesMeta: jest-resolve: optional: true dependencies: jest-resolve: 28.1.3 + dev: true /jest-regex-util/28.0.2: resolution: {integrity: sha512-4s0IgyNIy0y9FK+cjoVYoxamT7Zeo7MhzqRGx7YDYmaQn1wucY9rotiGkBzzcMXTtjrCAP/f7f+E0F7+fxPNdw==} engines: {node: ^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0} + dev: true /jest-resolve-dependencies/28.1.3: resolution: {integrity: sha512-qa0QO2Q0XzQoNPouMbCc7Bvtsem8eQgVPNkwn9LnS+R2n8DaVDPL/U1gngC0LTl1RYXJU0uJa2BMC2DbTfFrHA==} @@ -2779,6 +4652,7 @@ packages: jest-snapshot: 28.1.3 transitivePeerDependencies: - supports-color + dev: true /jest-resolve/28.1.3: resolution: {integrity: sha512-Z1W3tTjE6QaNI90qo/BJpfnvpxtaFTFw5CDgwpyE/Kz8U/06N1Hjf4ia9quUhCh39qIGWF1ZuxFiBiJQwSEYKQ==} @@ -2787,12 +4661,13 @@ packages: chalk: 4.1.2 graceful-fs: 4.2.10 jest-haste-map: 28.1.3 - jest-pnp-resolver: 1.2.2 + jest-pnp-resolver: 1.2.2_jest-resolve@28.1.3 jest-util: 28.1.3 jest-validate: 28.1.3 resolve: 1.22.1 resolve.exports: 1.1.0 slash: 3.0.0 + dev: true /jest-runner/28.1.3: resolution: {integrity: sha512-GkMw4D/0USd62OVO0oEgjn23TM+YJa2U2Wu5zz9xsQB1MxWKDOlrnykPxnMsN0tnJllfLPinHTka61u0QhaxBA==} @@ -2821,6 +4696,7 @@ packages: source-map-support: 0.5.13 transitivePeerDependencies: - supports-color + dev: true /jest-runtime/28.1.3: resolution: {integrity: sha512-NU+881ScBQQLc1JHG5eJGU7Ui3kLKrmwCPPtYsJtBykixrM2OhVQlpMmFWJjMyDfdkGgBMNjXCGB/ebzsgNGQw==} @@ -2850,16 +4726,17 @@ packages: strip-bom: 4.0.0 transitivePeerDependencies: - supports-color + dev: true /jest-snapshot/28.1.3: resolution: {integrity: sha512-4lzMgtiNlc3DU/8lZfmqxN3AYD6GGLbl+72rdBpXvcV+whX7mDrREzkPdp2RnmfIiWBg1YbuFSkXduF2JcafJg==} engines: {node: ^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0} dependencies: '@babel/core': 7.18.13 - '@babel/generator': 7.18.13 - '@babel/plugin-syntax-typescript': 7.18.6_@babel+core@7.18.13 - '@babel/traverse': 7.18.13 - '@babel/types': 7.18.13 + '@babel/generator': 7.20.7 + '@babel/plugin-syntax-typescript': 7.20.0_@babel+core@7.18.13 + '@babel/traverse': 7.20.10 + '@babel/types': 7.20.7 '@jest/expect-utils': 28.1.3 '@jest/transform': 28.1.3 '@jest/types': 28.1.3 @@ -2877,9 +4754,10 @@ packages: jest-util: 28.1.3 natural-compare: 1.4.0 pretty-format: 28.1.3 - semver: 7.3.7 + semver: 7.3.8 transitivePeerDependencies: - supports-color + dev: true /jest-util/27.5.1: resolution: {integrity: sha512-Kv2o/8jNvX1MQ0KGtw480E/w4fBCDOnH6+6DmeKi6LZUIlKA5kwY0YNdlzaWTiVgxqAqik11QyxDOKk543aKXw==} @@ -2891,17 +4769,19 @@ packages: ci-info: 3.3.2 graceful-fs: 4.2.10 picomatch: 2.3.1 + dev: true /jest-util/28.1.3: resolution: {integrity: sha512-XdqfpHwpcSRko/C35uLYFM2emRAltIIKZiJ9eAmhjsj0CqZMa0p1ib0R5fWIqGhn1a103DebTbpqIaP1qCQ6tQ==} engines: {node: ^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0} dependencies: '@jest/types': 28.1.3 - '@types/node': 18.7.11 + '@types/node': 18.7.14 chalk: 4.1.2 ci-info: 3.3.2 graceful-fs: 4.2.10 picomatch: 2.3.1 + dev: true /jest-validate/28.1.3: resolution: {integrity: sha512-SZbOGBWEsaTxBGCOpsRWlXlvNkvTkY0XxRfh7zYmvd8uL5Qzyg0CHAXiXKROflh801quA6+/DsT4ODDthOC/OA==} @@ -2913,6 +4793,7 @@ packages: jest-get-type: 28.0.2 leven: 3.1.0 pretty-format: 28.1.3 + dev: true /jest-watcher/28.1.3: resolution: {integrity: sha512-t4qcqj9hze+jviFPUN3YAtAEeFnr/azITXQEMARf5cMwKY2SMBRnCQTXLixTl20OR6mLh9KLMrgVJgJISym+1g==} @@ -2920,23 +4801,53 @@ packages: dependencies: '@jest/test-result': 28.1.3 '@jest/types': 28.1.3 - '@types/node': 18.7.11 + '@types/node': 18.7.14 ansi-escapes: 4.3.2 chalk: 4.1.2 emittery: 0.10.2 jest-util: 28.1.3 string-length: 4.0.2 + dev: true + + /jest-worker/27.5.1: + resolution: {integrity: sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==} + engines: {node: '>= 10.13.0'} + dependencies: + '@types/node': 18.7.14 + merge-stream: 2.0.0 + supports-color: 8.1.1 + dev: true /jest-worker/28.1.3: resolution: {integrity: sha512-CqRA220YV/6jCo8VWvAt1KKx6eek1VIHMPeLEbpcfSfkEeWyBNppynM/o6q+Wmw+sOhos2ml34wZbSX3G13//g==} engines: {node: ^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0} dependencies: - '@types/node': 18.7.11 + '@types/node': 18.7.14 merge-stream: 2.0.0 supports-color: 8.1.1 + dev: true - /jest/28.1.3: - resolution: {integrity: sha512-N4GT5on8UkZgH0O5LUavMRV1EDEhNTL0KEfRmDIeZHSV7p2XgLoY9t9VDUgL6o+yfdgYHVxuz81G8oB9VG5uyA==} + /jest/28.1.0_4echt27za7uk6ezjshmbxcfmgy: + resolution: {integrity: sha512-TZR+tHxopPhzw3c3560IJXZWLNHgpcz1Zh0w5A65vynLGNcg/5pZ+VildAd7+XGOu6jd58XMY/HNn0IkZIXVXg==} + engines: {node: ^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0} + hasBin: true + peerDependencies: + node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 + peerDependenciesMeta: + node-notifier: + optional: true + dependencies: + '@jest/core': 28.1.3_ts-node@10.9.1 + import-local: 3.1.0 + jest-cli: 28.1.3_4echt27za7uk6ezjshmbxcfmgy + transitivePeerDependencies: + - '@types/node' + - supports-color + - ts-node + dev: true + + /jest/28.1.0_@types+node@16.11.59: + resolution: {integrity: sha512-TZR+tHxopPhzw3c3560IJXZWLNHgpcz1Zh0w5A65vynLGNcg/5pZ+VildAd7+XGOu6jd58XMY/HNn0IkZIXVXg==} engines: {node: ^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0} hasBin: true peerDependencies: @@ -2946,29 +4857,54 @@ packages: optional: true dependencies: '@jest/core': 28.1.3 - '@jest/types': 28.1.3 import-local: 3.1.0 - jest-cli: 28.1.3 + jest-cli: 28.1.3_@types+node@16.11.59 transitivePeerDependencies: - '@types/node' - supports-color - ts-node + dev: true + + /jest/28.1.0_gsb7asu77en4txj3es3i65pxci: + resolution: {integrity: sha512-TZR+tHxopPhzw3c3560IJXZWLNHgpcz1Zh0w5A65vynLGNcg/5pZ+VildAd7+XGOu6jd58XMY/HNn0IkZIXVXg==} + engines: {node: ^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0} + hasBin: true + peerDependencies: + node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 + peerDependenciesMeta: + node-notifier: + optional: true + dependencies: + '@jest/core': 28.1.3_ts-node@10.9.1 + import-local: 3.1.0 + jest-cli: 28.1.3_gsb7asu77en4txj3es3i65pxci + transitivePeerDependencies: + - '@types/node' + - supports-color + - ts-node + dev: true /js-base64/3.7.2: resolution: {integrity: sha512-NnRs6dsyqUXejqk/yv2aiXlAvOs56sLkX6nUdeaNezI5LFFLlsZjOThmwnrcwh5ZZRwZlCMnVAY3CvhIhoVEKQ==} + /js-base64/3.7.3: + resolution: {integrity: sha512-PAr6Xg2jvd7MCR6Ld9Jg3BmTcjYsHEBx1VlwEwULb/qowPf5VD9kEMagj23Gm7JRnSvE/Da/57nChZjnvL8v6A==} + /js-sha3/0.8.0: resolution: {integrity: sha512-gF1cRrHhIzNfToc802P800N8PpXS+evLLXfsVpowqmAFR9uwbi89WvXg2QspOmXL8QL86J4T1EpFu+yUkwJY3Q==} dev: true /js-tokens/4.0.0: resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} + dev: true /js-yaml/3.14.1: resolution: {integrity: sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==} + hasBin: true dependencies: argparse: 1.0.10 esprima: 4.0.1 + dev: true /jsbn/0.1.1: resolution: {integrity: sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg==} @@ -2979,9 +4915,16 @@ packages: /jsesc/2.5.2: resolution: {integrity: sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==} engines: {node: '>=4'} + hasBin: true + dev: true + + /json-parse-better-errors/1.0.2: + resolution: {integrity: sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==} + dev: true /json-parse-even-better-errors/2.3.1: resolution: {integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==} + dev: true /json-schema-traverse/0.4.1: resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==} @@ -2999,12 +4942,17 @@ packages: '@sovpro/delimited-stream': 1.1.0 dev: true + /json5/1.0.1: + resolution: {integrity: sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==} + hasBin: true + dependencies: + minimist: 1.2.6 + dev: true + /json5/2.2.1: resolution: {integrity: sha512-1hqLFMSrGHRHxav9q9gNjJ5EXznIxGVO09xQRrwplcS8qs28pZ8s8hupZAmqDwZUmVZ2Qb2jnyPOWcDH8m8dlA==} engines: {node: '>=6'} - - /jsonc-parser/3.1.0: - resolution: {integrity: sha512-DRf0QjnNeCUds3xTjKlQQ3DpJD51GvDjJfnxUVWg6PZTo2otSm+slzNAxU/35hF8/oJIKoG9slq30JYOsF2azg==} + hasBin: true dev: true /jsprim/1.4.2: @@ -3019,13 +4967,39 @@ packages: /keypair/1.0.4: resolution: {integrity: sha512-zwhgOhhniaL7oxMgUMKKw5219PWWABMO+dgMnzJOQ2/5L3XJtTJGhW2PEXlxXj9zaccdReZJZ83+4NPhVfNVDg==} + /kind-of/3.2.2: + resolution: {integrity: sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==} + engines: {node: '>=0.10.0'} + dependencies: + is-buffer: 1.1.6 + dev: true + + /kind-of/4.0.0: + resolution: {integrity: sha512-24XsCxmEbRwEDbz/qz3stgin8TTzZ1ESR56OMCN0ujYg+vRutNSiOj9bHH9u85DKgXguraugV5sFuvbD4FW/hw==} + engines: {node: '>=0.10.0'} + dependencies: + is-buffer: 1.1.6 + dev: true + + /kind-of/5.1.0: + resolution: {integrity: sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==} + engines: {node: '>=0.10.0'} + dev: true + + /kind-of/6.0.3: + resolution: {integrity: sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==} + engines: {node: '>=0.10.0'} + dev: true + /kleur/3.0.3: resolution: {integrity: sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==} engines: {node: '>=6'} + dev: true /leven/3.1.0: resolution: {integrity: sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==} engines: {node: '>=6'} + dev: true /libp2p-crypto/0.19.7: resolution: {integrity: sha512-Qb5o/3WFKF2j6mYSt4UBPyi2kbKl3jYV0podBJoJCw70DlpM5Xc+oh3fFY9ToSunu8aSQQ5GY8nutjXgX/uGRA==} @@ -3072,7 +5046,7 @@ packages: protobufjs: 6.11.3 uint8arrays: 3.1.0 - /libp2p-interfaces/4.0.6: + /libp2p-interfaces/4.0.6_node-fetch@3.2.10: resolution: {integrity: sha512-3KjzNEIWhi+VoOamLvgKKUE/xqwxSw/JYqsBnfMhAWVRvRtosROtVT03wci2XbuuowCYw+/hEX1xKJIR1w5n0A==} dependencies: abortable-iterator: 3.0.2 @@ -3082,13 +5056,14 @@ packages: it-pipe: 1.1.0 it-pushable: 1.4.2 libp2p-crypto: 0.21.2 - multiaddr: 10.0.1 + multiaddr: 10.0.1_node-fetch@3.2.10 multiformats: 9.9.0 p-queue: 6.6.2 peer-id: 0.16.0 protobufjs: 6.11.3 uint8arrays: 3.1.0 transitivePeerDependencies: + - node-fetch - supports-color /libp2p-mplex/0.10.7: @@ -3104,7 +5079,7 @@ packages: transitivePeerDependencies: - supports-color - /libp2p-utils/0.4.1: + /libp2p-utils/0.4.1_node-fetch@3.2.10: resolution: {integrity: sha512-kq/US2unamiyY+YwP47dO1uqpAdcbdYI2Fzi9JIEhjfPBaD1MR/uyQ/YP7ABthl3EaxAjIQYd1TVp85d6QKAtQ==} dependencies: abortable-iterator: 3.0.2 @@ -3112,12 +5087,13 @@ packages: err-code: 3.0.1 ip-address: 8.1.0 is-loopback-addr: 1.0.1 - multiaddr: 10.0.1 + multiaddr: 10.0.1_node-fetch@3.2.10 private-ip: 2.3.4 transitivePeerDependencies: + - node-fetch - supports-color - /libp2p-websockets/0.16.2: + /libp2p-websockets/0.16.2_node-fetch@3.2.10: resolution: {integrity: sha512-QGfo8jX1Ks16yi8C67CCyMW7k9cfCYiQ0lzKVJBud0fV3ymbMO2L8gzU6iXUUZTHILo8ka26zKhwQ4lmUMI+nA==} dependencies: abortable-iterator: 3.0.2 @@ -3126,18 +5102,19 @@ packages: err-code: 3.0.1 ipfs-utils: 9.0.7 it-ws: 4.0.0 - libp2p-utils: 0.4.1 - mafmt: 10.0.0 - multiaddr: 10.0.1 - multiaddr-to-uri: 8.0.0 + libp2p-utils: 0.4.1_node-fetch@3.2.10 + mafmt: 10.0.0_node-fetch@3.2.10 + multiaddr: 10.0.1_node-fetch@3.2.10 + multiaddr-to-uri: 8.0.0_node-fetch@3.2.10 p-defer: 3.0.0 p-timeout: 4.1.0 transitivePeerDependencies: - bufferutil + - node-fetch - supports-color - utf-8-validate - /libp2p/0.36.2: + /libp2p/0.36.2_node-fetch@3.2.10: resolution: {integrity: sha512-UpNYBMQVivMu56zoibdGitopv39uBBAybIBOEGWmFy/I2NnTVGUutLPrxo47AuN2kntYgo/TNJfW+PpswUgSaw==} engines: {node: '>=15.0.0'} dependencies: @@ -3168,13 +5145,13 @@ packages: it-sort: 1.0.1 it-take: 1.0.2 libp2p-crypto: 0.21.2 - libp2p-interfaces: 4.0.6 - libp2p-utils: 0.4.1 - mafmt: 10.0.0 + libp2p-interfaces: 4.0.6_node-fetch@3.2.10 + libp2p-utils: 0.4.1_node-fetch@3.2.10 + mafmt: 10.0.0_node-fetch@3.2.10 merge-options: 3.0.4 mortice: 2.0.1 - multiaddr: 10.0.1 - multiformats: 9.7.1 + multiaddr: 10.0.1_node-fetch@3.2.10 + multiformats: 9.9.0 multistream-select: 3.0.2 mutable-proxy: 1.0.0 nat-api: 0.3.1 @@ -3196,19 +5173,59 @@ packages: wherearewe: 1.0.2 xsalsa20: 1.2.0 transitivePeerDependencies: + - node-fetch - supports-color /lines-and-columns/1.2.4: resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} + dev: true + + /loader-runner/2.4.0: + resolution: {integrity: sha512-Jsmr89RcXGIwivFY21FcRrisYZfvLMTWx5kOLc+JTxtpBOG6xML0vzbc6SEQG2FO9/4Fc3wW4LVcB5DmGflaRw==} + engines: {node: '>=4.3.0 <5.0.0 || >=5.10'} + dev: true + + /loader-runner/4.3.0: + resolution: {integrity: sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==} + engines: {node: '>=6.11.5'} + dev: true + + /loader-utils/1.4.2: + resolution: {integrity: sha512-I5d00Pd/jwMD2QCduo657+YM/6L3KZu++pmX9VFncxaxvHcru9jx1lBaFft+r4Mt2jK0Yhp41XlRAihzPxHNCg==} + engines: {node: '>=4.0.0'} + dependencies: + big.js: 5.2.2 + emojis-list: 3.0.0 + json5: 1.0.1 + dev: true + + /loader-utils/2.0.4: + resolution: {integrity: sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw==} + engines: {node: '>=8.9.0'} + dependencies: + big.js: 5.2.2 + emojis-list: 3.0.0 + json5: 2.2.1 + dev: true + + /locate-path/3.0.0: + resolution: {integrity: sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==} + engines: {node: '>=6'} + dependencies: + p-locate: 3.0.0 + path-exists: 3.0.0 + dev: true /locate-path/5.0.0: resolution: {integrity: sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==} engines: {node: '>=8'} dependencies: p-locate: 4.1.0 + dev: true /lodash.memoize/4.1.2: resolution: {integrity: sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==} + dev: true /loglevel/1.8.0: resolution: {integrity: sha512-G6A/nJLRgWOuuwdNuA6koovfEV1YpqqAG4pRUlFaz3jj2QNZ8M4vBqnVA+HBTmU/AMNUtlOsMmSpF6NyOjztbA==} @@ -3223,28 +5240,41 @@ packages: /long/4.0.0: resolution: {integrity: sha512-XsP+KhQif4bjX1kbuSiySJFNAehNxgLb6hPRGJ9QsUr8ajHkuXGdrHmFUTUUXhDwVX2R5bY4JNZEwbUiMhV+MA==} + /lru-cache/5.1.1: + resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==} + dependencies: + yallist: 3.1.1 + dev: true + /lru-cache/6.0.0: resolution: {integrity: sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==} engines: {node: '>=10'} dependencies: yallist: 4.0.0 - - /lunr/2.3.9: - resolution: {integrity: sha512-zTU3DaZaF3Rt9rhN3uBMGQD3dD2/vFQqnvZCDv4dl5iOzq2IZQqTxu90r4E5J+nP70J3ilqVCrbho2eWaeW8Ow==} dev: true - /mafmt/10.0.0: + /mafmt/10.0.0_node-fetch@3.2.10: resolution: {integrity: sha512-K1bziJOXcnepfztu+2Xy9FLKVLaFMDuspmiyJIYRxnO0WOxFSV7XKSdMxMrVZxcvg1+YjlTIvSGTImUHU2k4Aw==} dependencies: - multiaddr: 10.0.1 + multiaddr: 10.0.1_node-fetch@3.2.10 transitivePeerDependencies: + - node-fetch - supports-color + /make-dir/2.1.0: + resolution: {integrity: sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==} + engines: {node: '>=6'} + dependencies: + pify: 4.0.1 + semver: 5.7.1 + dev: true + /make-dir/3.1.0: resolution: {integrity: sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==} engines: {node: '>=8'} dependencies: semver: 6.3.0 + dev: true /make-error/1.3.6: resolution: {integrity: sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==} @@ -3253,10 +5283,26 @@ packages: resolution: {integrity: sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==} dependencies: tmpl: 1.0.5 + dev: true - /marked/4.0.19: - resolution: {integrity: sha512-rgQF/OxOiLcvgUAj1Q1tAf4Bgxn5h5JZTp04Fx4XUkVhs7B+7YA9JEWJhJpoO8eJt8MkZMwqLCNeNqj1bCREZQ==} - engines: {node: '>= 12'} + /map-cache/0.2.2: + resolution: {integrity: sha512-8y/eV9QQZCiyn1SprXSrCmqJN0yNRATe+PO8ztwqrvrbdRLA3eYJF0yaR0YayLWkMbsQSKWS9N2gPcGEc4UsZg==} + engines: {node: '>=0.10.0'} + dev: true + + /map-visit/1.0.0: + resolution: {integrity: sha512-4y7uGv8bd2WdM9vpQsiQNo41Ln1NvhvDRuVt0k2JZQ+ezN2uaQes7lZeZ+QQUHOLQAtDaBJ+7wCbi+ab/KFs+w==} + engines: {node: '>=0.10.0'} + dependencies: + object-visit: 1.0.1 + dev: true + + /md5.js/1.3.5: + resolution: {integrity: sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==} + dependencies: + hash-base: 3.1.0 + inherits: 2.0.4 + safe-buffer: 5.2.1 dev: true /memfs/3.0.4: @@ -3265,6 +5311,21 @@ packages: fast-extend: 1.0.2 fs-monkey: 0.3.3 + /memory-fs/0.4.1: + resolution: {integrity: sha512-cda4JKCxReDXFXRqOHPQscuIYg1PvxbE2S2GP45rnwfEK+vZaXC8C1OFvdHIbgw0DLzowXGVoxLaAmlgRy14GQ==} + dependencies: + errno: 0.1.8 + readable-stream: 2.3.7 + dev: true + + /memory-fs/0.5.0: + resolution: {integrity: sha512-jA0rdU5KoQMC0e6ppoNRtpp6vjFq6+NY7r8hywnC7V+1Xj/MtHwGIbB1QaK/dunyjWteJzmkpd7ooeWg10T7GA==} + engines: {node: '>=4.3.0 <5.0.0 || >=5.10'} + dependencies: + errno: 0.1.8 + readable-stream: 2.3.7 + dev: true + /merge-options/3.0.4: resolution: {integrity: sha512-2Sug1+knBjkaMsMgf1ctR1Ujx+Ayku4EdJN4Z+C2+JzoeF7A3OZ9KM2GY0CpQS51NR61LTurMJrRKPhSs3ZRTQ==} engines: {node: '>=10'} @@ -3274,12 +5335,42 @@ packages: /merge-stream/2.0.0: resolution: {integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==} + /micromatch/3.1.10: + resolution: {integrity: sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==} + engines: {node: '>=0.10.0'} + dependencies: + arr-diff: 4.0.0 + array-unique: 0.3.2 + braces: 2.3.2 + define-property: 2.0.2 + extend-shallow: 3.0.2 + extglob: 2.0.4 + fragment-cache: 0.2.1 + kind-of: 6.0.3 + nanomatch: 1.2.13 + object.pick: 1.3.0 + regex-not: 1.0.2 + snapdragon: 0.8.2 + to-regex: 3.0.2 + transitivePeerDependencies: + - supports-color + dev: true + /micromatch/4.0.5: resolution: {integrity: sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==} engines: {node: '>=8.6'} dependencies: braces: 3.0.2 picomatch: 2.3.1 + dev: true + + /miller-rabin/4.0.1: + resolution: {integrity: sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==} + hasBin: true + dependencies: + bn.js: 4.12.0 + brorand: 1.1.0 + dev: true /mime-db/1.52.0: resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==} @@ -3306,16 +5397,40 @@ packages: dependencies: brace-expansion: 1.1.11 - /minimatch/5.1.0: - resolution: {integrity: sha512-9TPBGGak4nHfGZsPBohm9AWg6NoT7QTCehS3BIJABslyZbzxfV78QM2Y6+i741OPZIafFAaiiEMh5OyIrJPgtg==} - engines: {node: '>=10'} - dependencies: - brace-expansion: 2.0.1 - dev: true - /minimist/1.2.6: resolution: {integrity: sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==} + /mississippi/3.0.0: + resolution: {integrity: sha512-x471SsVjUtBRtcvd4BzKE9kFC+/2TeWgKCgw0bZcw1b9l2X3QX5vCWgF+KaZaYm87Ss//rHnWryupDrgLvmSkA==} + engines: {node: '>=4.0.0'} + dependencies: + concat-stream: 1.6.2 + duplexify: 3.7.1 + end-of-stream: 1.4.4 + flush-write-stream: 1.1.1 + from2: 2.3.0 + parallel-transform: 1.2.0 + pump: 3.0.0 + pumpify: 1.5.1 + stream-each: 1.2.3 + through2: 2.0.5 + dev: true + + /mixin-deep/1.3.2: + resolution: {integrity: sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==} + engines: {node: '>=0.10.0'} + dependencies: + for-in: 1.0.2 + is-extendable: 1.0.1 + dev: true + + /mkdirp/0.5.6: + resolution: {integrity: sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==} + hasBin: true + dependencies: + minimist: 1.2.6 + dev: true + /mortice/2.0.1: resolution: {integrity: sha512-9gsXmjq+5LZmXDIoyC/crf2i/7CUwDGSBEwSEsr1i/WfKmJ6DVt38B5kg6BE/WF/1/yfGJYiB1Wyiu423iI3nQ==} dependencies: @@ -3324,70 +5439,93 @@ packages: p-queue: 6.6.2 promise-timeout: 1.3.0 + /move-concurrently/1.0.1: + resolution: {integrity: sha512-hdrFxZOycD/g6A6SoI2bB5NA/5NEqD0569+S47WZhPvm46sD50ZHdYaFmnua5lndde9rCHGjmfK7Z8BuCt/PcQ==} + dependencies: + aproba: 1.2.0 + copy-concurrently: 1.0.5 + fs-write-stream-atomic: 1.0.10 + mkdirp: 0.5.6 + rimraf: 2.7.1 + run-queue: 1.0.3 + dev: true + + /ms/2.0.0: + resolution: {integrity: sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==} + dev: true + /ms/2.1.2: resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==} /ms/2.1.3: resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} - /multiaddr-to-uri/7.0.0: + /multiaddr-to-uri/7.0.0_node-fetch@3.2.10: resolution: {integrity: sha512-VbscDpLcbV0m25tJqfnZSfbjVUuNlPa4BbD5l/7me1t0lc3SWI0XAoO5E/PNJF0e1qUlbdq7yjVFEQjUT+9r0g==} + deprecated: This module is deprecated, please upgrade to @multiformats/multiaddr-to-uri dependencies: - multiaddr: 9.0.2 + multiaddr: 9.0.2_node-fetch@3.2.10 transitivePeerDependencies: + - node-fetch - supports-color dev: true - /multiaddr-to-uri/8.0.0: + /multiaddr-to-uri/8.0.0_node-fetch@3.2.10: resolution: {integrity: sha512-dq4p/vsOOUdVEd1J1gl+R2GFrXJQH8yjLtz4hodqdVbieg39LvBOdMQRdQnfbg5LSM/q1BYNVf5CBbwZFFqBgA==} + deprecated: This module is deprecated, please upgrade to @multiformats/multiaddr-to-uri dependencies: - multiaddr: 10.0.1 + multiaddr: 10.0.1_node-fetch@3.2.10 transitivePeerDependencies: + - node-fetch - supports-color - /multiaddr/10.0.1: + /multiaddr/10.0.1_node-fetch@3.2.10: resolution: {integrity: sha512-G5upNcGzEGuTHkzxezPrrD6CaIHR9uo+7MwqhNVcXTs33IInon4y7nMiGxl2CY5hG7chvYQUQhz5V52/Qe3cbg==} + deprecated: This module is deprecated, please upgrade to @multiformats/multiaddr dependencies: - dns-over-http-resolver: 1.2.3 + dns-over-http-resolver: 1.2.3_node-fetch@3.2.10 err-code: 3.0.1 is-ip: 3.1.0 - multiformats: 9.6.5 + multiformats: 9.9.0 uint8arrays: 3.1.0 varint: 6.0.0 transitivePeerDependencies: + - node-fetch - supports-color - /multiaddr/9.0.2: + /multiaddr/9.0.2_node-fetch@3.2.10: resolution: {integrity: sha512-YFaEb9t4yXSbaGksSEdg+Kn2U02s7w4wXUgyEMQmPxFJj7CfVHY10WOsScAX/rK6Soa15S1zXYadqH9TtlVreQ==} + deprecated: This module is deprecated, please upgrade to @multiformats/multiaddr dependencies: cids: 1.1.9 - dns-over-http-resolver: 1.2.3 + dns-over-http-resolver: 1.2.3_node-fetch@3.2.10 err-code: 3.0.1 is-ip: 3.1.0 multibase: 4.0.6 uint8arrays: 2.1.10 varint: 6.0.0 transitivePeerDependencies: + - node-fetch - supports-color dev: true /multibase/4.0.6: resolution: {integrity: sha512-x23pDe5+svdLz/k5JPGCVdfn7Q5mZVMBETiC+ORfO+sor9Sgs0smJzAjfTbM5tckeCqnaUuMYoz+k3RXMmJClQ==} engines: {node: '>=12.0.0', npm: '>=6.0.0'} + deprecated: This module has been superseded by the multiformats module dependencies: '@multiformats/base-x': 4.0.1 /multicodec/3.2.1: resolution: {integrity: sha512-+expTPftro8VAW8kfvcuNNNBgb9gPeNYV9dn+z1kJRWF2vih+/S79f2RVeIwmrJBUJ6NT9IUPWnZDQvegEh5pw==} + deprecated: This module has been superseded by the multiformats module dependencies: uint8arrays: 3.1.0 varint: 6.0.0 /multiformats/9.6.5: resolution: {integrity: sha512-vMwf/FUO+qAPvl3vlSZEgEVFY/AxeZq5yg761ScF3CZsXgmTi/HGkicUiNN0CI4PW8FiY2P0OLklOcmQjdQJhw==} - - /multiformats/9.7.1: - resolution: {integrity: sha512-TaVmGEBt0fhxiNJMGphBfB+oGvUxFs8KgGvgl8d3C+GWtrFcvXdJ2196eg+dYhmSFClmgFfSfJEklo+SZzdNuw==} + dev: true /multiformats/9.9.0: resolution: {integrity: sha512-HoMUjhH9T8DDBNT+6xzkrd9ga/XiBI4xLr58LJACwK6G3HTOPeMz4nB4KJs33L2BelrIJa7P0VuNaVF3hMYfjg==} @@ -3440,10 +5578,31 @@ packages: /nan/2.16.0: resolution: {integrity: sha512-UdAqHyFngu7TfQKsCBgAA6pWDkT8MAO7d0jyOecVhN5354xbLqdn8mV9Tat9gepAupm0bt2DbeaSC8vS52MuFA==} + requiresBuild: true /nanoid/3.3.4: resolution: {integrity: sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw==} engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} + hasBin: true + + /nanomatch/1.2.13: + resolution: {integrity: sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==} + engines: {node: '>=0.10.0'} + dependencies: + arr-diff: 4.0.0 + array-unique: 0.3.2 + define-property: 2.0.2 + extend-shallow: 3.0.2 + fragment-cache: 0.2.1 + is-windows: 1.0.2 + kind-of: 6.0.3 + object.pick: 1.3.0 + regex-not: 1.0.2 + snapdragon: 0.8.2 + to-regex: 3.0.2 + transitivePeerDependencies: + - supports-color + dev: true /nat-api/0.3.1: resolution: {integrity: sha512-5cyLugEkXnKSKSvVjKjxxPMLDnkwY3boZLbATWwiGJ4T/3UvIpiQmzb2RqtxxEFcVo/7PwsHPGN0MosopONO8Q==} @@ -3458,19 +5617,35 @@ packages: transitivePeerDependencies: - supports-color - /native-abort-controller/1.0.4: + /native-abort-controller/1.0.4_abort-controller@3.0.0: resolution: {integrity: sha512-zp8yev7nxczDJMoP6pDxyD20IU0T22eX8VwN2ztDccKvSZhRaV33yP1BGwKSZfXuqWUzsXopVFjBdau9OOAwMQ==} + peerDependencies: + abort-controller: '*' dependencies: abort-controller: 3.0.0 dev: true - /native-fetch/3.0.0: + /native-fetch/3.0.0_hmwa7nplpltavckpkeobtw6pv4: resolution: {integrity: sha512-G3Z7vx0IFb/FQ4JxvtqGABsOTIqRWvgQz6e+erkB+JJD6LrszQtMozEHI4EkmgZQvnGHrpLVzUWk7t4sJCIkVw==} + peerDependencies: + node-fetch: '*' + dependencies: + node-fetch: /@achingbrain/node-fetch/2.6.7 + + /native-fetch/3.0.0_node-fetch@3.2.10: + resolution: {integrity: sha512-G3Z7vx0IFb/FQ4JxvtqGABsOTIqRWvgQz6e+erkB+JJD6LrszQtMozEHI4EkmgZQvnGHrpLVzUWk7t4sJCIkVw==} + peerDependencies: + node-fetch: '*' dependencies: node-fetch: 3.2.10 /natural-compare/1.4.0: resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} + dev: true + + /neo-async/2.6.2: + resolution: {integrity: sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==} + dev: true /netmask/2.0.2: resolution: {integrity: sha512-dBpDMdxv9Irdq66304OLfEmQ9tbNRFnFTuZiLo+bD+r332bBmMJ8GBLXklIXXgxd3+v9+KUnZaUR5PJMa75Gsg==} @@ -3478,9 +5653,11 @@ packages: /noble-ed25519/1.2.6: resolution: {integrity: sha512-zfnWqg9FVMp8CnzUpAjbt1nDXpDjCvxYiCXdnW1mY8zQHw/6twUlkFm14VPdojVzc0kcd+i9zT79+26GcNbsuQ==} + deprecated: Switch to namespaced @noble/ed25519 for security and feature updates /noble-secp256k1/1.2.14: resolution: {integrity: sha512-GSCXyoZBUaaPwVWdYncMEmzlSUjF9J/YeEHpklYJCyg8wPuJP3NzDx0BkiwArzINkdX2HJHvUJhL6vVWPOQQcg==} + deprecated: Switch to namespaced @noble/secp256k1 for security and feature updates /node-addon-api/2.0.2: resolution: {integrity: sha512-Ntyt4AIXyaLIuMHF6IOoTakB3K+RWxwtsHNRxllEoA6vPwP9o4866g6YWDLUdnucilZhmkxiHwHr11gAENw+QA==} @@ -3507,16 +5684,56 @@ packages: /node-gyp-build/4.5.0: resolution: {integrity: sha512-2iGbaQBV+ITgCz76ZEjmhUKAKVf7xfY1sRl4UiKQspfZMH2h06SyhNsnSVy50cwkFQDGLyif6m/6uFXHkOZ6rg==} + hasBin: true /node-int64/0.4.0: resolution: {integrity: sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==} + dev: true + + /node-libs-browser/2.2.1: + resolution: {integrity: sha512-h/zcD8H9kaDZ9ALUWwlBUDo6TKF8a7qBSCSEGfjTVIYeqsioSKaAX+BN7NgiMGp6iSIXZ3PxgCu8KS3b71YK5Q==} + dependencies: + assert: 1.5.0 + browserify-zlib: 0.2.0 + buffer: 4.9.2 + console-browserify: 1.2.0 + constants-browserify: 1.0.0 + crypto-browserify: 3.12.0 + domain-browser: 1.2.0 + events: 3.3.0 + https-browserify: 1.0.0 + os-browserify: 0.3.0 + path-browserify: 0.0.1 + process: 0.11.10 + punycode: 1.4.1 + querystring-es3: 0.2.1 + readable-stream: 2.3.7 + stream-browserify: 2.0.2 + stream-http: 2.8.3 + string_decoder: 1.3.0 + timers-browserify: 2.0.12 + tty-browserify: 0.0.0 + url: 0.11.0 + util: 0.11.1 + vm-browserify: 1.1.2 + dev: true /node-releases/2.0.6: resolution: {integrity: sha512-PiVXnNuFm5+iYkLBNeq5211hvO38y63T0i2KKh2KnUs3RpzJ+JtODFjkD8yjLwnDkTYF1eKXheUwdssR+NRZdg==} + dev: true + + /normalize-path/2.1.1: + resolution: {integrity: sha512-3pKJwH184Xo/lnH6oyP1q2pMd7HcypqqmRs91/6/i2CGtWwIKGCkOOMTm/zXbgTEWHw1uNpNi/igc3ePOYHb6w==} + engines: {node: '>=0.10.0'} + dependencies: + remove-trailing-separator: 1.1.0 + dev: true + optional: true /normalize-path/3.0.0: resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} engines: {node: '>=0.10.0'} + dev: true /npm-run-path/4.0.1: resolution: {integrity: sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==} @@ -3527,6 +5744,34 @@ packages: /oauth-sign/0.9.0: resolution: {integrity: sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==} + /object-assign/4.1.1: + resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==} + engines: {node: '>=0.10.0'} + dev: true + + /object-copy/0.1.0: + resolution: {integrity: sha512-79LYn6VAb63zgtmAteVOWo9Vdj71ZVBy3Pbse+VqxDpEP83XuujMrGqHIwAXJ5I/aM0zU7dIyIAhifVTPrNItQ==} + engines: {node: '>=0.10.0'} + dependencies: + copy-descriptor: 0.1.1 + define-property: 0.2.5 + kind-of: 3.2.2 + dev: true + + /object-visit/1.0.1: + resolution: {integrity: sha512-GBaMwwAVK9qbQN3Scdo0OyvgPW7l3lnaVMj84uTOZlswkX0KpF6fyDBJhtTthf7pymztoN36/KEr1DyhF96zEA==} + engines: {node: '>=0.10.0'} + dependencies: + isobject: 3.0.1 + dev: true + + /object.pick/1.3.0: + resolution: {integrity: sha512-tqa/UMy/CCoYmj+H5qc07qvSL9dqcs/WZENZ1JbtWBlATP+iVOe778gE6MSijnyCnORzDuX6hU+LA4SZ09YjFQ==} + engines: {node: '>=0.10.0'} + dependencies: + isobject: 3.0.1 + dev: true + /observable-fns/0.6.1: resolution: {integrity: sha512-9gRK4+sRWzeN6AOewNBTLXir7Zl/i3GB6Yl26gK4flxz8BXVpD3kt8amREmWNb0mxYOGDotvE5a4N+PtGGKdkg==} @@ -3544,6 +5789,10 @@ packages: dependencies: mimic-fn: 2.1.0 + /os-browserify/0.3.0: + resolution: {integrity: sha512-gjcpUc3clBf9+210TRaDWbf+rZZZEshZ+DlXMRCeAjp0xhTrnQsKHypIy1J3d5hKdUzj69t708EHtU8P6bUn0A==} + dev: true + /p-any/3.0.0: resolution: {integrity: sha512-5rqbqfsRWNb0sukt0awwgJMlaep+8jV45S15SKKB34z4UuzjcofIfnriCBhWjZP2jbVtjt9yRl7buB6RlKsu9w==} engines: {node: '>=10'} @@ -3580,12 +5829,21 @@ packages: engines: {node: '>=10'} dependencies: yocto-queue: 0.1.0 + dev: true + + /p-locate/3.0.0: + resolution: {integrity: sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==} + engines: {node: '>=6'} + dependencies: + p-limit: 2.3.0 + dev: true /p-locate/4.1.0: resolution: {integrity: sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==} engines: {node: '>=8'} dependencies: p-limit: 2.3.0 + dev: true /p-queue/6.6.2: resolution: {integrity: sha512-RwFpb72c/BhQLEXIZ5K2e+AhgNVmIejGlTgiB9MzZ0e93GRvqZ7uSi0dvRF7/XIXDeNkra2fNHBxTyPDGySpjQ==} @@ -3636,6 +5894,24 @@ packages: /pako/1.0.11: resolution: {integrity: sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==} + /parallel-transform/1.2.0: + resolution: {integrity: sha512-P2vSmIu38uIlvdcU7fDkyrxj33gTUy/ABO5ZUbGowxNCopBq/OoD42bP4UmMrJoPyk4Uqf0mu3mtWBhHCZD8yg==} + dependencies: + cyclist: 1.0.1 + inherits: 2.0.4 + readable-stream: 2.3.7 + dev: true + + /parse-asn1/5.1.6: + resolution: {integrity: sha512-RnZRo1EPU6JBnra2vGHj0yhp6ebyjBZpmUCLHWiFhxlzvBCCpAuZ7elsBp1PVAbQN0/04VD/19rfzlBSwLstMw==} + dependencies: + asn1.js: 5.4.1 + browserify-aes: 1.2.0 + evp_bytestokey: 1.0.3 + pbkdf2: 3.1.2 + safe-buffer: 5.2.1 + dev: true + /parse-duration/1.0.2: resolution: {integrity: sha512-Dg27N6mfok+ow1a2rj/nRjtCfaKrHUZV2SJpEn/s8GaVUSlf4GGRCRP1c13Hj+wfPKVMrFDqLMLITkYKgKxyyg==} dev: true @@ -3648,17 +5924,39 @@ packages: error-ex: 1.3.2 json-parse-even-better-errors: 2.3.1 lines-and-columns: 1.2.4 + dev: true + + /pascalcase/0.1.1: + resolution: {integrity: sha512-XHXfu/yOQRy9vYOtUDVMN60OEJjW013GoObG1o+xwQTpB9eYJX/BjXMsdW13ZDPruFhYYn0AG22w0xgQMwl3Nw==} + engines: {node: '>=0.10.0'} + dev: true + + /path-browserify/0.0.1: + resolution: {integrity: sha512-BapA40NHICOS+USX9SN4tyhq+A2RrN/Ws5F0Z5aMHDp98Fl86lX8Oti8B7uN93L4Ifv4fHOEA+pQw87gmMO/lQ==} + dev: true /path-browserify/1.0.1: resolution: {integrity: sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==} + /path-dirname/1.0.2: + resolution: {integrity: sha512-ALzNPpyNq9AqXMBjeymIjFDAkAFH06mHJH/cSBHAgU0s4vfpBn6b2nf8tiRLvagKD8RbTpq2FKTBg7cl9l3c7Q==} + dev: true + optional: true + + /path-exists/3.0.0: + resolution: {integrity: sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==} + engines: {node: '>=4'} + dev: true + /path-exists/4.0.0: resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} engines: {node: '>=8'} + dev: true /path-is-absolute/1.0.1: resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==} engines: {node: '>=0.10.0'} + dev: true /path-key/3.1.1: resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} @@ -3666,10 +5964,23 @@ packages: /path-parse/1.0.7: resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} + dev: true + + /pbkdf2/3.1.2: + resolution: {integrity: sha512-iuh7L6jA7JEGu2WxDwtQP1ddOpaJNC4KlDEFfdQajSGgGPNi4OyDc2R7QnbY2bR9QjBVGwgvTdNJZoE7RaxUMA==} + engines: {node: '>=0.12'} + dependencies: + create-hash: 1.2.0 + create-hmac: 1.1.7 + ripemd160: 2.0.2 + safe-buffer: 5.2.1 + sha.js: 2.4.11 + dev: true /peer-id/0.15.4: resolution: {integrity: sha512-MDoBIMZYwQIAHaZQUwsIcvoFgdbIl5GtZMwSkXpIYvc5v0TSDv+u8WsTKrKt2Vv28tHFFDJQdVzu3T4qTPzK+w==} engines: {node: '>=14.0.0'} + hasBin: true dependencies: class-is: 1.1.0 libp2p-crypto: 0.20.0 @@ -3684,13 +5995,14 @@ packages: dependencies: class-is: 1.1.0 libp2p-crypto: 0.21.2 - multiformats: 9.7.1 + multiformats: 9.9.0 protobufjs: 6.11.3 uint8arrays: 3.1.0 /pem-jwk/2.0.0: resolution: {integrity: sha512-rFxu7rVoHgQ5H9YsP50dDWf0rHjreVA2z0yPiWr5WdH/UHb29hKtF7h6l8vNd1cbYR1t0QL+JKhW55a2ZV4KtA==} engines: {node: '>=5.10.0'} + hasBin: true dependencies: asn1.js: 5.4.1 @@ -3699,24 +6011,45 @@ packages: /picocolors/1.0.0: resolution: {integrity: sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==} + dev: true /picomatch/2.3.1: resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} engines: {node: '>=8.6'} + dev: true + + /pify/4.0.1: + resolution: {integrity: sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==} + engines: {node: '>=6'} + dev: true /pirates/4.0.5: resolution: {integrity: sha512-8V9+HQPupnaXMA23c5hvl69zXvTwTzyAYasnkb0Tts4XvO4CliqONMOnvlq26rkhLC3nWDFBJf73LU1e1VZLaQ==} engines: {node: '>= 6'} + dev: true + + /pkg-dir/3.0.0: + resolution: {integrity: sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==} + engines: {node: '>=6'} + dependencies: + find-up: 3.0.0 + dev: true /pkg-dir/4.2.0: resolution: {integrity: sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==} engines: {node: '>=8'} dependencies: find-up: 4.1.0 + dev: true /platform/1.3.6: resolution: {integrity: sha512-fnWVljUchTro6RiCFvCXBbNhJc2NijN7oIQxbwsyL0buWJPG85v81ehlHI9fXrJsMNgTofEoWIQeClKpgxFLrg==} + /posix-character-classes/0.1.1: + resolution: {integrity: sha512-xTgYBc3fuo7Yt7JbiuFxSYGToMoz8fLoE6TC9Wx1P/u+LfeThMOAqmuyECnlBaaJb+u1m9hHiXUEtwW4OzfUJg==} + engines: {node: '>=0.10.0'} + dev: true + /pretty-format/27.5.1: resolution: {integrity: sha512-Qb1gy5OrP5+zDf2Bvnzdl3jsTf1qXVMazbvCoKhtKqVs4/YK4ozX4gKQJJVyNe+cajNPn0KoC0MC3FUmaHWEmQ==} engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} @@ -3724,6 +6057,7 @@ packages: ansi-regex: 5.0.1 ansi-styles: 5.2.0 react-is: 17.0.2 + dev: true /pretty-format/28.1.3: resolution: {integrity: sha512-8gFb/To0OmxHR9+ZTb14Df2vNxdGCX8g1xWGUTqUw5TiZvcQf5sHKObd5UcPyLLyowNwDAMTF3XWOG1B6mxl1Q==} @@ -3733,6 +6067,7 @@ packages: ansi-regex: 5.0.1 ansi-styles: 5.2.0 react-is: 18.2.0 + dev: true /private-ip/2.3.4: resolution: {integrity: sha512-ts/YFVwfBeLq61f9+KsOhXW6RH0wvY0gU50R6QZYzgFhggyyLK6WDFeYdjfi/HMnBm2hecLvsR3PB3JcRxDk+A==} @@ -3742,6 +6077,26 @@ packages: is-ip: 3.1.0 netmask: 2.0.2 + /process-nextick-args/2.0.1: + resolution: {integrity: sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==} + dev: true + + /process/0.11.10: + resolution: {integrity: sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==} + engines: {node: '>= 0.6.0'} + dev: true + + /promise-inflight/1.0.1_bluebird@3.7.2: + resolution: {integrity: sha512-6zWPyEOFaQBJYcGMHBKTKJ3u6TBsnMFOIZSa6ce1e/ZrrsOlnHRHbabMjLiBYKp+n44X9eUI6VUPaukCXHuG4g==} + peerDependencies: + bluebird: '*' + peerDependenciesMeta: + bluebird: + optional: true + dependencies: + bluebird: 3.7.2 + dev: true + /promise-timeout/1.3.0: resolution: {integrity: sha512-5yANTE0tmi5++POym6OgtFmwfDvOXABD9oj/jLQr5GPEyuNEb7jH4wbbANJceJid49jwhi1RddxnhnEAb/doqg==} @@ -3751,9 +6106,11 @@ packages: dependencies: kleur: 3.0.3 sisteransi: 1.0.5 + dev: true /protobufjs/6.11.3: resolution: {integrity: sha512-xL96WDdCZYdU7Slin569tFX712BxsxslWwAfAhCYjQKGTq7dAU91Lomy6nLLhh/dyGhk/YH4TwTSRxTzhuHyZg==} + hasBin: true requiresBuild: true dependencies: '@protobufjs/aspromise': 1.1.2 @@ -3767,12 +6124,57 @@ packages: '@protobufjs/pool': 1.1.0 '@protobufjs/utf8': 1.1.0 '@types/long': 4.0.2 - '@types/node': 18.7.11 + '@types/node': 18.7.14 long: 4.0.0 + /prr/1.0.1: + resolution: {integrity: sha512-yPw4Sng1gWghHQWj0B3ZggWUm4qVbPwPFcRG8KyxiU7J2OHFSoEHKS+EZ3fv5l1t9CyCiop6l/ZYeWbrgoQejw==} + dev: true + /psl/1.9.0: resolution: {integrity: sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==} + /public-encrypt/4.0.3: + resolution: {integrity: sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q==} + dependencies: + bn.js: 4.12.0 + browserify-rsa: 4.1.0 + create-hash: 1.2.0 + parse-asn1: 5.1.6 + randombytes: 2.1.0 + safe-buffer: 5.2.1 + dev: true + + /pump/2.0.1: + resolution: {integrity: sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA==} + dependencies: + end-of-stream: 1.4.4 + once: 1.4.0 + dev: true + + /pump/3.0.0: + resolution: {integrity: sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==} + dependencies: + end-of-stream: 1.4.4 + once: 1.4.0 + dev: true + + /pumpify/1.5.1: + resolution: {integrity: sha512-oClZI37HvuUJJxSKKrC17bZ9Cu0ZYhEAGPsPUy9KlMUmv9dKX2o77RUmq7f3XjIxbwyGwYzbzQ1L2Ks8sIradQ==} + dependencies: + duplexify: 3.7.1 + inherits: 2.0.4 + pump: 2.0.1 + dev: true + + /punycode/1.3.2: + resolution: {integrity: sha512-RofWgt/7fL5wP1Y7fxE7/EmTLzQVnB0ycyibJ0OOHIlJqTNzglYFxVwETOcIoJqJmpDXJ9xImDv+Fq34F/d4Dw==} + dev: true + + /punycode/1.4.1: + resolution: {integrity: sha512-jmYNElW7yvO7TV33CjSmvSiE2yco3bV2czu/OzDKdMNVZQWfxCblURLhf+47syQRBntjfLdd/H0egrzIG+oaFQ==} + dev: true + /punycode/2.1.1: resolution: {integrity: sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==} engines: {node: '>=6'} @@ -3781,6 +6183,17 @@ packages: resolution: {integrity: sha512-qxXIEh4pCGfHICj1mAJQ2/2XVZkjCDTcEgfoSQxc/fYivUZxTkk7L3bDBJSoNrEzXI17oUO5Dp07ktqE5KzczA==} engines: {node: '>=0.6'} + /querystring-es3/0.2.1: + resolution: {integrity: sha512-773xhDQnZBMFobEiztv8LIl70ch5MSF/jUQVlhwFyBILqq96anmoctVIYz+ZRp0qbCKATTn6ev02M3r7Ga5vqA==} + engines: {node: '>=0.4.x'} + dev: true + + /querystring/0.2.0: + resolution: {integrity: sha512-X/xY82scca2tau62i9mDyU9K+I+djTMUsvwf7xnUX5GLvVzgJybOJf4Y6o9Zx3oJK/LSXg5tTZBjwzqVPaPO2g==} + engines: {node: '>=0.4.x'} + deprecated: The querystring API is considered Legacy. new code should use the URLSearchParams API instead. + dev: true + /randombytes/2.1.0: resolution: {integrity: sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==} dependencies: @@ -3794,15 +6207,29 @@ packages: /react-is/17.0.2: resolution: {integrity: sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==} + dev: true /react-is/18.2.0: resolution: {integrity: sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==} + dev: true /react-native-fetch-api/2.0.0: resolution: {integrity: sha512-GOA8tc1EVYLnHvma/TU9VTgLOyralO7eATRuCDchQveXW9Fr9vXygyq9iwqmM7YRZ8qRJfEt9xOS7OYMdJvRFw==} dependencies: p-defer: 3.0.0 + /readable-stream/2.3.7: + resolution: {integrity: sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==} + dependencies: + core-util-is: 1.0.2 + inherits: 2.0.4 + isarray: 1.0.0 + process-nextick-args: 2.0.1 + safe-buffer: 5.1.2 + string_decoder: 1.1.1 + util-deprecate: 1.0.2 + dev: true + /readable-stream/3.6.0: resolution: {integrity: sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==} engines: {node: '>= 6'} @@ -3811,14 +6238,72 @@ packages: string_decoder: 1.3.0 util-deprecate: 1.0.2 + /readdirp/2.2.1: + resolution: {integrity: sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ==} + engines: {node: '>=0.10'} + dependencies: + graceful-fs: 4.2.10 + micromatch: 3.1.10 + readable-stream: 2.3.7 + transitivePeerDependencies: + - supports-color + dev: true + optional: true + + /readdirp/3.6.0: + resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==} + engines: {node: '>=8.10.0'} + dependencies: + picomatch: 2.3.1 + dev: true + optional: true + /receptacle/1.3.2: resolution: {integrity: sha512-HrsFvqZZheusncQRiEE7GatOAETrARKV/lnfYicIm8lbvp/JQOdADOfhjBd2DajvoszEyxSM6RlAAIZgEoeu/A==} dependencies: ms: 2.1.3 + /rechoir/0.7.1: + resolution: {integrity: sha512-/njmZ8s1wVeR6pjTZ+0nCnv8SpZNRMT2D1RLOJQESlYFDBvwpTA4KWJpZ+sBJ4+vhjILRcK7JIFdGCdxEAAitg==} + engines: {node: '>= 0.10'} + dependencies: + resolve: 1.22.1 + dev: true + + /rechoir/0.8.0: + resolution: {integrity: sha512-/vxpCXddiX8NGfGO/mTafwjq4aFa/71pvamip0++IQk3zG8cbCj0fifNPrjjF1XMXUne91jL9OoxmdykoEtifQ==} + engines: {node: '>= 10.13.0'} + dependencies: + resolve: 1.22.1 + dev: true + + /regex-not/1.0.2: + resolution: {integrity: sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==} + engines: {node: '>=0.10.0'} + dependencies: + extend-shallow: 3.0.2 + safe-regex: 1.1.0 + dev: true + + /remove-trailing-separator/1.1.0: + resolution: {integrity: sha512-/hS+Y0u3aOfIETiaiirUFwDBDzmXPvO+jAfKTitUngIPzdKc6Z0LoFjM/CK5PL4C+eKwHohlHAb6H0VFfmmUsw==} + dev: true + optional: true + + /repeat-element/1.1.4: + resolution: {integrity: sha512-LFiNfRcSu7KK3evMyYOuCzv3L10TW7yC1G2/+StMjK8Y6Vqd2MG7r/Qjw4ghtuCOjFvlnms/iMmLqpvW/ES/WQ==} + engines: {node: '>=0.10.0'} + dev: true + + /repeat-string/1.6.1: + resolution: {integrity: sha512-PV0dzCYDNfRi1jCDbJzpW7jNNDRuCOG/jI5ctQcGKt/clZD+YcPS3yIlWuTJMmESC8aevCFmWJy5wjAFgNqN6w==} + engines: {node: '>=0.10'} + dev: true + /request/2.88.2: resolution: {integrity: sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==} engines: {node: '>= 6'} + deprecated: request has been deprecated, see https://github.com/request/request/issues/3142 dependencies: aws-sign2: 0.7.0 aws4: 1.11.0 @@ -3844,27 +6329,43 @@ packages: /require-directory/2.1.1: resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==} engines: {node: '>=0.10.0'} + dev: true /resolve-cwd/3.0.0: resolution: {integrity: sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==} engines: {node: '>=8'} dependencies: resolve-from: 5.0.0 + dev: true /resolve-from/5.0.0: resolution: {integrity: sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==} engines: {node: '>=8'} + dev: true + + /resolve-url/0.2.1: + resolution: {integrity: sha512-ZuF55hVUQaaczgOIwqWzkEcEidmlD/xl44x1UZnhOXcYuFN2S6+rcxpG+C1N3So0wvNI3DmJICUFfu2SxhBmvg==} + deprecated: https://github.com/lydell/resolve-url#deprecated + dev: true /resolve.exports/1.1.0: resolution: {integrity: sha512-J1l+Zxxp4XK3LUDZ9m60LRJF/mAe4z6a4xyabPHk7pvK5t35dACV32iIjJDFeWZFfZlO29w6SZ67knR0tHzJtQ==} engines: {node: '>=10'} + dev: true /resolve/1.22.1: resolution: {integrity: sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==} + hasBin: true dependencies: is-core-module: 2.10.0 path-parse: 1.0.7 supports-preserve-symlinks-flag: 1.0.0 + dev: true + + /ret/0.1.15: + resolution: {integrity: sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==} + engines: {node: '>=0.12'} + dev: true /retimer/2.0.0: resolution: {integrity: sha512-KLXY85WkEq2V2bKex/LOO1ViXVn2KGYe4PYysAdYdjmraYIUsVkXu8O4am+8+5UbaaGl1qho4aqAAPHNQ4GSbg==} @@ -3877,22 +6378,58 @@ packages: resolution: {integrity: sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg==} engines: {node: '>= 4'} - /rimraf/3.0.2: - resolution: {integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==} + /rimraf/2.7.1: + resolution: {integrity: sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==} + hasBin: true dependencies: glob: 7.2.3 + dev: true + + /rimraf/3.0.2: + resolution: {integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==} + hasBin: true + dependencies: + glob: 7.2.3 + dev: true + + /ripemd160/2.0.2: + resolution: {integrity: sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==} + dependencies: + hash-base: 3.1.0 + inherits: 2.0.4 + dev: true + + /run-queue/1.0.3: + resolution: {integrity: sha512-ntymy489o0/QQplUDnpYAYUsO50K9SBrIVaKCWDOJzYJts0f9WH9RFJkyagebkw5+y1oi00R7ynNW/d12GBumg==} + dependencies: + aproba: 1.2.0 + dev: true + + /rxjs/7.5.5: + resolution: {integrity: sha512-sy+H0pQofO95VDmFLzyaw9xNJU4KTRSwQIGM6+iG3SypAtCiLDzpeG8sJrNCWn2Up9km+KhkvTdbkrdy+yzZdw==} + dependencies: + tslib: 2.4.0 + dev: false /rxjs/7.5.6: resolution: {integrity: sha512-dnyv2/YsXhnm461G+R/Pe5bWP41Nm6LBXEYWI6eiFP4fiwx6WRI/CD0zbdVAudd9xwLEF2IDcKXLHit0FYjUzw==} dependencies: tslib: 2.4.0 + dev: true /safe-buffer/5.1.2: resolution: {integrity: sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==} + dev: true /safe-buffer/5.2.1: resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} + /safe-regex/1.1.0: + resolution: {integrity: sha512-aJXcif4xnaNUzvUuC5gcb46oTS7zvg4jpMTnuqtrEPlR3vFr4pxtdTwaF1Qs3Enjn9HK+ZlwQui+a7z0SywIzg==} + dependencies: + ret: 0.1.15 + dev: true + /safer-buffer/2.1.2: resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} @@ -3904,6 +6441,24 @@ packages: /sax/1.2.4: resolution: {integrity: sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==} + /schema-utils/1.0.0: + resolution: {integrity: sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==} + engines: {node: '>= 4'} + dependencies: + ajv: 6.12.6 + ajv-errors: 1.0.1_ajv@6.12.6 + ajv-keywords: 3.5.2_ajv@6.12.6 + dev: true + + /schema-utils/3.1.1: + resolution: {integrity: sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==} + engines: {node: '>= 10.13.0'} + dependencies: + '@types/json-schema': 7.0.11 + ajv: 6.12.6 + ajv-keywords: 3.5.2_ajv@6.12.6 + dev: true + /secp256k1/4.0.3: resolution: {integrity: sha512-NLZVf+ROMxwtEj3Xa562qgv2BK5e2WNmXPiOdVIPLgs6lyTzMvBq0aWTYMI5XCP9jZMVKOcqZLw/Wc4vDkuxhA==} engines: {node: '>=10.0.0'} @@ -3913,18 +6468,68 @@ packages: node-addon-api: 2.0.2 node-gyp-build: 4.5.0 + /semver/5.7.1: + resolution: {integrity: sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==} + hasBin: true + dev: true + /semver/6.3.0: resolution: {integrity: sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==} + hasBin: true + dev: true - /semver/7.3.7: - resolution: {integrity: sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==} + /semver/7.3.8: + resolution: {integrity: sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==} engines: {node: '>=10'} + hasBin: true dependencies: lru-cache: 6.0.0 + dev: true + + /serialize-javascript/4.0.0: + resolution: {integrity: sha512-GaNA54380uFefWghODBWEGisLZFj00nS5ACs6yHa9nLqlLpVLO8ChDGeKRjZnV4Nh4n0Qi7nhYZD/9fCPzEqkw==} + dependencies: + randombytes: 2.1.0 + dev: true + + /serialize-javascript/6.0.0: + resolution: {integrity: sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==} + dependencies: + randombytes: 2.1.0 + dev: true /set-delayed-interval/1.0.0: resolution: {integrity: sha512-29fhAwuZlLcuBnW/EwxvLcg2D3ELX+VBDNhnavs3YYkab72qmrcSeQNVdzl8EcPPahGQXhBM6MKdPLCQGMDakw==} + /set-value/2.0.1: + resolution: {integrity: sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw==} + engines: {node: '>=0.10.0'} + dependencies: + extend-shallow: 2.0.1 + is-extendable: 0.1.1 + is-plain-object: 2.0.4 + split-string: 3.1.0 + dev: true + + /setimmediate/1.0.5: + resolution: {integrity: sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==} + dev: true + + /sha.js/2.4.11: + resolution: {integrity: sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==} + hasBin: true + dependencies: + inherits: 2.0.4 + safe-buffer: 5.2.1 + dev: true + + /shallow-clone/3.0.1: + resolution: {integrity: sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==} + engines: {node: '>=8'} + dependencies: + kind-of: 6.0.3 + dev: true + /shebang-command/2.0.0: resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} engines: {node: '>=8'} @@ -3935,36 +6540,104 @@ packages: resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} engines: {node: '>=8'} - /shiki/0.10.1: - resolution: {integrity: sha512-VsY7QJVzU51j5o1+DguUd+6vmCmZ5v/6gYu4vyYAhzjuNQU6P/vmSy4uQaOhvje031qQMiW0d2BwgMH52vqMng==} - dependencies: - jsonc-parser: 3.1.0 - vscode-oniguruma: 1.6.2 - vscode-textmate: 5.2.0 - dev: true - /signal-exit/3.0.7: resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==} /sisteransi/1.0.5: resolution: {integrity: sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==} + dev: true /slash/3.0.0: resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==} engines: {node: '>=8'} + dev: true + + /snapdragon-node/2.1.1: + resolution: {integrity: sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==} + engines: {node: '>=0.10.0'} + dependencies: + define-property: 1.0.0 + isobject: 3.0.1 + snapdragon-util: 3.0.1 + dev: true + + /snapdragon-util/3.0.1: + resolution: {integrity: sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==} + engines: {node: '>=0.10.0'} + dependencies: + kind-of: 3.2.2 + dev: true + + /snapdragon/0.8.2: + resolution: {integrity: sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==} + engines: {node: '>=0.10.0'} + dependencies: + base: 0.11.2 + debug: 2.6.9 + define-property: 0.2.5 + extend-shallow: 2.0.1 + map-cache: 0.2.2 + source-map: 0.5.7 + source-map-resolve: 0.5.3 + use: 3.1.1 + transitivePeerDependencies: + - supports-color + dev: true + + /source-list-map/2.0.1: + resolution: {integrity: sha512-qnQ7gVMxGNxsiL4lEuJwe/To8UnK7fAnmbGEEH8RpLouuKbeEm0lhbQVFIrNSuB+G7tVrAlVsZgETT5nljf+Iw==} + dev: true + + /source-map-resolve/0.5.3: + resolution: {integrity: sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw==} + deprecated: See https://github.com/lydell/source-map-resolve#deprecated + dependencies: + atob: 2.1.2 + decode-uri-component: 0.2.0 + resolve-url: 0.2.1 + source-map-url: 0.4.1 + urix: 0.1.0 + dev: true /source-map-support/0.5.13: resolution: {integrity: sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w==} dependencies: buffer-from: 1.1.2 source-map: 0.6.1 + dev: true + + /source-map-support/0.5.21: + resolution: {integrity: sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==} + dependencies: + buffer-from: 1.1.2 + source-map: 0.6.1 + dev: true + + /source-map-url/0.4.1: + resolution: {integrity: sha512-cPiFOTLUKvJFIg4SKVScy4ilPPW6rFgMgfuZJPNoDuMs3nC1HbMUycBoJw77xFIp6z1UJQJOfx6C9GMH80DiTw==} + deprecated: See https://github.com/lydell/source-map-url#deprecated + dev: true + + /source-map/0.5.7: + resolution: {integrity: sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==} + engines: {node: '>=0.10.0'} + dev: true /source-map/0.6.1: resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==} engines: {node: '>=0.10.0'} + dev: true + + /split-string/3.1.0: + resolution: {integrity: sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==} + engines: {node: '>=0.10.0'} + dependencies: + extend-shallow: 3.0.2 + dev: true /sprintf-js/1.0.3: resolution: {integrity: sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==} + dev: true /sprintf-js/1.1.2: resolution: {integrity: sha512-VE0SOVEHCk7Qc8ulkWw3ntAzXuqf7S2lvwQaDLRnUeIEaKNQJzV6BwmLKhOqT61aGhfUMrXeaBk+oDGCzvhcug==} @@ -3972,6 +6645,7 @@ packages: /sshpk/1.17.0: resolution: {integrity: sha512-/9HIEs1ZXGhSPE8X6Ccm7Nam1z8KcoCqPdI7ecm1N33EzAetWahvQWVqLZtaZQ+IDKX4IyA2o0gBzqIMkAagHQ==} engines: {node: '>=0.10.0'} + hasBin: true dependencies: asn1: 0.2.6 assert-plus: 1.0.0 @@ -3983,8 +6657,15 @@ packages: safer-buffer: 2.1.2 tweetnacl: 0.14.5 + /ssri/6.0.2: + resolution: {integrity: sha512-cepbSq/neFK7xB6A50KHN0xHDotYzq58wWCa5LeWqnPrHG8GzfEjO/4O8kpmcGW+oaxkvhEJCWgbgNk4/ZV93Q==} + dependencies: + figgy-pudding: 3.5.2 + dev: true + /stable/0.1.8: resolution: {integrity: sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w==} + deprecated: 'Modern JS already guarantees Array#sort() is a stable sort, so this library is deprecated. See the compatibility table on MDN: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/sort#browser_compatibility' dev: true /stack-utils/2.0.5: @@ -3992,6 +6673,43 @@ packages: engines: {node: '>=10'} dependencies: escape-string-regexp: 2.0.0 + dev: true + + /static-extend/0.1.2: + resolution: {integrity: sha512-72E9+uLc27Mt718pMHt9VMNiAL4LMsmDbBva8mxWUCkT07fSzEGMYUCk0XWY6lp0j6RBAG4cJ3mWuZv2OE3s0g==} + engines: {node: '>=0.10.0'} + dependencies: + define-property: 0.2.5 + object-copy: 0.1.0 + dev: true + + /stream-browserify/2.0.2: + resolution: {integrity: sha512-nX6hmklHs/gr2FuxYDltq8fJA1GDlxKQCz8O/IM4atRqBH8OORmBNgfvW5gG10GT/qQ9u0CzIvr2X5Pkt6ntqg==} + dependencies: + inherits: 2.0.4 + readable-stream: 2.3.7 + dev: true + + /stream-each/1.2.3: + resolution: {integrity: sha512-vlMC2f8I2u/bZGqkdfLQW/13Zihpej/7PmSiMQsbYddxuTsJp8vRe2x2FvVExZg7FaOds43ROAuFJwPR4MTZLw==} + dependencies: + end-of-stream: 1.4.4 + stream-shift: 1.0.1 + dev: true + + /stream-http/2.8.3: + resolution: {integrity: sha512-+TSkfINHDo4J+ZobQLWiMouQYB+UVYFttRA94FpEzzJ7ZdqcL4uUUQ7WkdkI4DSozGmgBUE/a47L+38PenXhUw==} + dependencies: + builtin-status-codes: 3.0.0 + inherits: 2.0.4 + readable-stream: 2.3.7 + to-arraybuffer: 1.0.1 + xtend: 4.0.2 + dev: true + + /stream-shift/1.0.1: + resolution: {integrity: sha512-AiisoFqQ0vbGcZgQPY1cdP2I76glaVA/RauYR4G4thNFgkTqr90yXTo4LYX60Jl+sIlPNHHdGSwo01AvbKUSVQ==} + dev: true /stream-to-it/0.2.4: resolution: {integrity: sha512-4vEbkSs83OahpmBybNJXlJd7d6/RxzkkSdT3I0mnGt79Xd2Kk+e1JqbvAvsQfCeKj3aKb0QIWkyK3/n0j506vQ==} @@ -4008,6 +6726,7 @@ packages: dependencies: char-regex: 1.0.2 strip-ansi: 6.0.1 + dev: true /string-width/4.2.3: resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} @@ -4016,6 +6735,13 @@ packages: emoji-regex: 8.0.0 is-fullwidth-code-point: 3.0.0 strip-ansi: 6.0.1 + dev: true + + /string_decoder/1.1.1: + resolution: {integrity: sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==} + dependencies: + safe-buffer: 5.1.2 + dev: true /string_decoder/1.3.0: resolution: {integrity: sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==} @@ -4027,10 +6753,12 @@ packages: engines: {node: '>=8'} dependencies: ansi-regex: 5.0.1 + dev: true /strip-bom/4.0.0: resolution: {integrity: sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==} engines: {node: '>=8'} + dev: true /strip-final-newline/2.0.0: resolution: {integrity: sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==} @@ -4039,24 +6767,28 @@ packages: /strip-json-comments/3.1.1: resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} engines: {node: '>=8'} + dev: true /supports-color/5.5.0: resolution: {integrity: sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==} engines: {node: '>=4'} dependencies: has-flag: 3.0.0 + dev: true /supports-color/7.2.0: resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} engines: {node: '>=8'} dependencies: has-flag: 4.0.0 + dev: true /supports-color/8.1.1: resolution: {integrity: sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==} engines: {node: '>=10'} dependencies: has-flag: 4.0.0 + dev: true /supports-hyperlinks/2.2.0: resolution: {integrity: sha512-6sXEzV5+I5j8Bmq9/vUphGRM/RJNT9SCURJLjwfOg51heRtguGWDzcaBlgAzKhQa0EVNpPEKzQuBwZ8S8WaCeQ==} @@ -4064,10 +6796,22 @@ packages: dependencies: has-flag: 4.0.0 supports-color: 7.2.0 + dev: true /supports-preserve-symlinks-flag/1.0.0: resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} engines: {node: '>= 0.4'} + dev: true + + /tapable/1.1.3: + resolution: {integrity: sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA==} + engines: {node: '>=6'} + dev: true + + /tapable/2.2.1: + resolution: {integrity: sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==} + engines: {node: '>=6'} + dev: true /tar-stream/2.2.0: resolution: {integrity: sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==} @@ -4085,6 +6829,71 @@ packages: dependencies: ansi-escapes: 4.3.2 supports-hyperlinks: 2.2.0 + dev: true + + /terser-webpack-plugin/1.4.5_webpack@4.46.0: + resolution: {integrity: sha512-04Rfe496lN8EYruwi6oPQkG0vo8C+HT49X687FZnpPF0qMAIHONI6HEXYPKDOE8e5HjXTyKfqRd/agHtH0kOtw==} + engines: {node: '>= 6.9.0'} + peerDependencies: + webpack: ^4.0.0 + dependencies: + cacache: 12.0.4 + find-cache-dir: 2.1.0 + is-wsl: 1.1.0 + schema-utils: 1.0.0 + serialize-javascript: 4.0.0 + source-map: 0.6.1 + terser: 4.8.1 + webpack: 4.46.0_webpack-cli@4.10.0 + webpack-sources: 1.4.3 + worker-farm: 1.7.0 + dev: true + + /terser-webpack-plugin/5.3.6_webpack@5.75.0: + resolution: {integrity: sha512-kfLFk+PoLUQIbLmB1+PZDMRSZS99Mp+/MHqDNmMA6tOItzRt+Npe3E+fsMs5mfcM0wCtrrdU387UnV+vnSffXQ==} + engines: {node: '>= 10.13.0'} + peerDependencies: + '@swc/core': '*' + esbuild: '*' + uglify-js: '*' + webpack: ^5.1.0 + peerDependenciesMeta: + '@swc/core': + optional: true + esbuild: + optional: true + uglify-js: + optional: true + dependencies: + '@jridgewell/trace-mapping': 0.3.15 + jest-worker: 27.5.1 + schema-utils: 3.1.1 + serialize-javascript: 6.0.0 + terser: 5.16.1 + webpack: 5.75.0_webpack-cli@5.0.1 + dev: true + + /terser/4.8.1: + resolution: {integrity: sha512-4GnLC0x667eJG0ewJTa6z/yXrbLGv80D9Ru6HIpCQmO+Q4PfEtBFi0ObSckqwL6VyQv/7ENJieXHo2ANmdQwgw==} + engines: {node: '>=6.0.0'} + hasBin: true + dependencies: + acorn: 8.8.0 + commander: 2.20.3 + source-map: 0.6.1 + source-map-support: 0.5.13 + dev: true + + /terser/5.16.1: + resolution: {integrity: sha512-xvQfyfA1ayT0qdK47zskQgRZeWLoOQ8JQ6mIgRGVNwZKdQMU+5FkCBjmv4QjcrTzyZquRw2FVtlJSRUmMKQslw==} + engines: {node: '>=10'} + hasBin: true + dependencies: + '@jridgewell/source-map': 0.3.2 + acorn: 8.8.0 + commander: 2.20.3 + source-map-support: 0.5.21 + dev: true /test-exclude/6.0.0: resolution: {integrity: sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==} @@ -4093,6 +6902,7 @@ packages: '@istanbuljs/schema': 0.1.3 glob: 7.2.3 minimatch: 3.1.2 + dev: true /threads/1.7.0: resolution: {integrity: sha512-Mx5NBSHX3sQYR6iI9VYbgHKBLisyB+xROCBGjjWm1O9wb9vfLxdaGtmT/KCjUqMsSNW6nERzCW3T6H43LqjDZQ==} @@ -4106,6 +6916,13 @@ packages: transitivePeerDependencies: - supports-color + /through2/2.0.5: + resolution: {integrity: sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==} + dependencies: + readable-stream: 2.3.7 + xtend: 4.0.2 + dev: true + /timeout-abort-controller/1.1.1: resolution: {integrity: sha512-BsF9i3NAJag6T0ZEjki9j654zoafI2X6ayuNd6Tp8+Ul6Tr5s4jo973qFeiWrRSweqvskC+AHDKUmIW4b7pdhQ==} dependencies: @@ -4118,6 +6935,13 @@ packages: dependencies: retimer: 3.0.0 + /timers-browserify/2.0.12: + resolution: {integrity: sha512-9phl76Cqm6FhSX9Xe1ZUAMLtm1BLkKj2Qd5ApyWkXzsMRaA7dgr81kf4wJmQf/hAvg8EEyJxDo3du/0KlhPiKQ==} + engines: {node: '>=0.6.0'} + dependencies: + setimmediate: 1.0.5 + dev: true + /tiny-worker/2.3.0: resolution: {integrity: sha512-pJ70wq5EAqTAEl9IkGzA+fN0836rycEuz2Cn6yeZ6FRzlVS5IDOkFHpIoEsksPRQV34GDqXm65+OlnZqUSyK2g==} requiresBuild: true @@ -4127,16 +6951,48 @@ packages: /tmpl/1.0.5: resolution: {integrity: sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==} + dev: true + + /to-arraybuffer/1.0.1: + resolution: {integrity: sha512-okFlQcoGTi4LQBG/PgSYblw9VOyptsz2KJZqc6qtgGdes8VktzUQkj4BI2blit072iS8VODNcMA+tvnS9dnuMA==} + dev: true /to-fast-properties/2.0.0: resolution: {integrity: sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==} engines: {node: '>=4'} + dev: true + + /to-object-path/0.3.0: + resolution: {integrity: sha512-9mWHdnGRuh3onocaHzukyvCZhzvr6tiflAy/JRFXcJX0TjgfWA9pk9t8CMbzmBE4Jfw58pXbkngtBtqYxzNEyg==} + engines: {node: '>=0.10.0'} + dependencies: + kind-of: 3.2.2 + dev: true + + /to-regex-range/2.1.1: + resolution: {integrity: sha512-ZZWNfCjUokXXDGXFpZehJIkZqq91BcULFq/Pi7M5i4JnxXdhMKAK682z8bCW3o8Hj1wuuzoKcW3DfVzaP6VuNg==} + engines: {node: '>=0.10.0'} + dependencies: + is-number: 3.0.0 + repeat-string: 1.6.1 + dev: true /to-regex-range/5.0.1: resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} engines: {node: '>=8.0'} dependencies: is-number: 7.0.0 + dev: true + + /to-regex/3.0.2: + resolution: {integrity: sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==} + engines: {node: '>=0.10.0'} + dependencies: + define-property: 2.0.2 + extend-shallow: 3.0.2 + regex-not: 1.0.2 + safe-regex: 1.1.0 + dev: true /tough-cookie/2.5.0: resolution: {integrity: sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==} @@ -4150,7 +7006,7 @@ packages: dependencies: utf8-byte-length: 1.0.4 - /ts-jest/27.1.5_rl5xm3oiydas7snsul2pa47p2m: + /ts-jest/27.1.5_vibqa5hxa5biq5fwuxzv5iobty: resolution: {integrity: sha512-Xv6jBQPoBEvBq/5i2TeSG9tt/nqkbpcurrEG1b+2yfBrcJelOZF9Ml6dmyMh7bcW9JyFbRYpR5rxROSlBLTZHA==} engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} hasBin: true @@ -4171,26 +7027,26 @@ packages: esbuild: optional: true dependencies: - '@babel/core': 7.18.13 - '@types/jest': 27.5.2 + '@types/jest': 28.1.0 bs-logger: 0.2.6 fast-json-stable-stringify: 2.1.0 - jest: 28.1.3 + jest: 28.1.0_gsb7asu77en4txj3es3i65pxci jest-util: 27.5.1 json5: 2.2.1 lodash.memoize: 4.1.2 make-error: 1.3.6 - semver: 7.3.7 - typescript: 4.7.4 + semver: 7.3.8 + typescript: 4.6.4 yargs-parser: 20.2.9 + dev: true - /ts-jest/28.0.8_wnrrwh7x4gcdskobbfqnvknnyi: - resolution: {integrity: sha512-5FaG0lXmRPzApix8oFG8RKjAz4ehtm8yMKOTy5HX3fY6W8kmvOrmcY0hKDElW52FJov+clhUbrKAqofnj4mXTg==} + /ts-jest/28.0.2_qah6rulmyywoowvfc5owcdakum: + resolution: {integrity: sha512-IOZMb3D0gx6IHO9ywPgiQxJ3Zl4ECylEFwoVpENB55aTn5sdO0Ptyx/7noNBxAaUff708RqQL4XBNxxOVjY0vQ==} engines: {node: ^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0} hasBin: true peerDependencies: '@babel/core': '>=7.0.0-beta.0 <8' - '@jest/types': ^28.0.0 + '@types/jest': ^27.0.0 babel-jest: ^28.0.0 esbuild: '*' jest: ^28.0.0 @@ -4198,7 +7054,7 @@ packages: peerDependenciesMeta: '@babel/core': optional: true - '@jest/types': + '@types/jest': optional: true babel-jest: optional: true @@ -4206,19 +7062,86 @@ packages: optional: true dependencies: '@babel/core': 7.18.13 + '@types/jest': 28.1.0 bs-logger: 0.2.6 fast-json-stable-stringify: 2.1.0 - jest: 28.1.3 + jest: 28.1.0_@types+node@16.11.59 jest-util: 28.1.3 json5: 2.2.1 lodash.memoize: 4.1.2 make-error: 1.3.6 - semver: 7.3.7 + semver: 7.3.8 typescript: 4.7.4 - yargs-parser: 21.1.1 + yargs-parser: 20.2.9 dev: true - /ts-node/10.9.1_leegklmkepybzc4ng4qys4ftou: + /ts-jest/28.0.2_vibqa5hxa5biq5fwuxzv5iobty: + resolution: {integrity: sha512-IOZMb3D0gx6IHO9ywPgiQxJ3Zl4ECylEFwoVpENB55aTn5sdO0Ptyx/7noNBxAaUff708RqQL4XBNxxOVjY0vQ==} + engines: {node: ^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0} + hasBin: true + peerDependencies: + '@babel/core': '>=7.0.0-beta.0 <8' + '@types/jest': ^27.0.0 + babel-jest: ^28.0.0 + esbuild: '*' + jest: ^28.0.0 + typescript: '>=4.3' + peerDependenciesMeta: + '@babel/core': + optional: true + '@types/jest': + optional: true + babel-jest: + optional: true + esbuild: + optional: true + dependencies: + '@types/jest': 28.1.0 + bs-logger: 0.2.6 + fast-json-stable-stringify: 2.1.0 + jest: 28.1.0_gsb7asu77en4txj3es3i65pxci + jest-util: 28.1.3 + json5: 2.2.1 + lodash.memoize: 4.1.2 + make-error: 1.3.6 + semver: 7.3.8 + typescript: 4.6.4 + yargs-parser: 20.2.9 + dev: true + + /ts-loader/8.4.0_hrl2l4xchpnd6hlkqocppvpxx4: + resolution: {integrity: sha512-6nFY3IZ2//mrPc+ImY3hNWx1vCHyEhl6V+wLmL4CZcm6g1CqX7UKrkc6y0i4FwcfOhxyMPCfaEvh20f4r9GNpw==} + engines: {node: '>=10.0.0'} + peerDependencies: + typescript: '*' + webpack: '*' + dependencies: + chalk: 4.1.2 + enhanced-resolve: 4.5.0 + loader-utils: 2.0.4 + micromatch: 4.0.5 + semver: 7.3.8 + typescript: 4.7.4 + webpack: 4.46.0_webpack-cli@4.10.0 + dev: true + + /ts-loader/8.4.0_l2co7ao223gzrfox7yaiyzd7wu: + resolution: {integrity: sha512-6nFY3IZ2//mrPc+ImY3hNWx1vCHyEhl6V+wLmL4CZcm6g1CqX7UKrkc6y0i4FwcfOhxyMPCfaEvh20f4r9GNpw==} + engines: {node: '>=10.0.0'} + peerDependencies: + typescript: '*' + webpack: '*' + dependencies: + chalk: 4.1.2 + enhanced-resolve: 4.5.0 + loader-utils: 2.0.4 + micromatch: 4.0.5 + semver: 7.3.8 + typescript: 4.7.4 + webpack: 5.75.0_webpack-cli@5.0.1 + dev: true + + /ts-node/10.9.1_apbkdfxvcdmborgupeskcsfbo4: resolution: {integrity: sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw==} hasBin: true peerDependencies: @@ -4244,10 +7167,40 @@ packages: create-require: 1.1.1 diff: 4.0.2 make-error: 1.3.6 - typescript: 4.7.4 + typescript: 4.6.4 + v8-compile-cache-lib: 3.0.1 + yn: 3.1.1 + dev: true + + /ts-node/10.9.1_f4s53rsdbgkmxc2oaa23drhnsy: + resolution: {integrity: sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw==} + hasBin: true + peerDependencies: + '@swc/core': '>=1.2.50' + '@swc/wasm': '>=1.2.50' + '@types/node': '*' + typescript: '>=2.7' + peerDependenciesMeta: + '@swc/core': + optional: true + '@swc/wasm': + optional: true + dependencies: + '@cspotcode/source-map-support': 0.8.1 + '@tsconfig/node10': 1.0.9 + '@tsconfig/node12': 1.0.11 + '@tsconfig/node14': 1.0.3 + '@tsconfig/node16': 1.0.3 + '@types/node': 16.11.59 + acorn: 8.8.0 + acorn-walk: 8.2.0 + arg: 4.1.3 + create-require: 1.1.1 + diff: 4.0.2 + make-error: 1.3.6 + typescript: 4.6.4 v8-compile-cache-lib: 3.0.1 yn: 3.1.1 - dev: false /ts-pattern/3.3.3: resolution: {integrity: sha512-Z5EFi6g6wyX3uDFHqxF5W5c5h663oZg9O6aOiAT7fqNu0HPSfCxtHzrQ7SblTy738Mrg2Ezorky8H5aUOm8Pvg==} @@ -4255,6 +7208,10 @@ packages: /tslib/2.4.0: resolution: {integrity: sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ==} + /tty-browserify/0.0.0: + resolution: {integrity: sha512-JVa5ijo+j/sOoHGjw0sxw734b1LhBkQ3bvUGNdxnVXDCX81Yx7TFgnZygxrIIWn23hbfTaMYLwRmAxFyDuFmIw==} + dev: true + /tunnel-agent/0.6.0: resolution: {integrity: sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==} dependencies: @@ -4266,29 +7223,27 @@ packages: /type-detect/4.0.8: resolution: {integrity: sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==} engines: {node: '>=4'} + dev: true /type-fest/0.21.3: resolution: {integrity: sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==} engines: {node: '>=10'} - - /typedoc/0.22.18_typescript@4.7.4: - resolution: {integrity: sha512-NK9RlLhRUGMvc6Rw5USEYgT4DVAUFk7IF7Q6MYfpJ88KnTZP7EneEa4RcP+tX1auAcz7QT1Iy0bUSZBYYHdoyA==} - engines: {node: '>= 12.10.0'} - hasBin: true - peerDependencies: - typescript: 4.0.x || 4.1.x || 4.2.x || 4.3.x || 4.4.x || 4.5.x || 4.6.x || 4.7.x - dependencies: - glob: 8.0.3 - lunr: 2.3.9 - marked: 4.0.19 - minimatch: 5.1.0 - shiki: 0.10.1 - typescript: 4.7.4 dev: true + /typedarray/0.0.6: + resolution: {integrity: sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==} + dev: true + + /typescript/4.6.4: + resolution: {integrity: sha512-9ia/jWHIEbo49HfjrLGfKbZSuWo9iTMwXO+Ca3pRsSpbsMbc7/IU8NKdCZVRRBafVPGnoJeFL76ZOAA84I9fEg==} + engines: {node: '>=4.2.0'} + hasBin: true + /typescript/4.7.4: resolution: {integrity: sha512-C0WQT0gezHuw6AdY1M2jxUO83Rjf0HP7Sk1DtXj6j1EwkQNZrHAg2XPWlq62oqEhYvONq5pkC2Y9oPljWToLmQ==} engines: {node: '>=4.2.0'} + hasBin: true + dev: true /uint8arrays/2.1.10: resolution: {integrity: sha512-Q9/hhJa2836nQfEJSZTmr+pg9+cDJS9XEAp7N2Vg5MzL3bK/mkMVfjscRGYruP9jNda6MAdf4QD/y78gSzkp6A==} @@ -4301,24 +7256,73 @@ packages: dependencies: multiformats: 9.9.0 + /union-value/1.0.1: + resolution: {integrity: sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg==} + engines: {node: '>=0.10.0'} + dependencies: + arr-union: 3.1.0 + get-value: 2.0.6 + is-extendable: 0.1.1 + set-value: 2.0.1 + dev: true + + /unique-filename/1.1.1: + resolution: {integrity: sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ==} + dependencies: + unique-slug: 2.0.2 + dev: true + + /unique-slug/2.0.2: + resolution: {integrity: sha512-zoWr9ObaxALD3DOPfjPSqxt4fnZiWblxHIgeWqW8x7UqDzEtHEQLzji2cuJYQFCU6KmoJikOYAZlrTHHebjx2w==} + dependencies: + imurmurhash: 0.1.4 + dev: true + /unordered-array-remove/1.0.2: resolution: {integrity: sha512-45YsfD6svkgaCBNyvD+dFHm4qFX9g3wRSIVgWVPtm2OCnphvPxzJoe20ATsiNpNJrmzHifnxm+BN5F7gFT/4gw==} - /update-browserslist-db/1.0.5_browserslist@4.21.3: - resolution: {integrity: sha512-dteFFpCyvuDdr9S/ff1ISkKt/9YZxKjI9WlRR99c180GaztJtRa/fn18FdxGVKVsnPY7/a/FDN68mcvUmP4U7Q==} + /unset-value/1.0.0: + resolution: {integrity: sha512-PcA2tsuGSF9cnySLHTLSh2qrQiJ70mn+r+Glzxv2TWZblxsxCC52BDlZoPCsz7STd9pN7EZetkWZBAvk4cgZdQ==} + engines: {node: '>=0.10.0'} + dependencies: + has-value: 0.3.1 + isobject: 3.0.1 + dev: true + + /upath/1.2.0: + resolution: {integrity: sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg==} + engines: {node: '>=4'} + dev: true + optional: true + + /update-browserslist-db/1.0.10_browserslist@4.21.4: + resolution: {integrity: sha512-OztqDenkfFkbSG+tRxBeAnCVPckDBcvibKd35yDONx6OU8N7sqgwc7rCbkJ/WcYtVRZ4ba68d6byhC21GFh7sQ==} hasBin: true peerDependencies: browserslist: '>= 4.21.0' dependencies: - browserslist: 4.21.3 + browserslist: 4.21.4 escalade: 3.1.1 picocolors: 1.0.0 + dev: true /uri-js/4.4.1: resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} dependencies: punycode: 2.1.1 + /urix/0.1.0: + resolution: {integrity: sha512-Am1ousAhSLBeB9cG/7k7r2R0zj50uDRlZHPGbazid5s9rlF1F/QKYObEKSIunSjIOkJZqwRRLpvewjEkM7pSqg==} + deprecated: Please see https://github.com/lydell/urix#deprecated + dev: true + + /url/0.11.0: + resolution: {integrity: sha512-kbailJa29QrtXnxgq+DdCEGlbTeYM2eJUxsz6vjZavrCYPMIFHMKQmSKYAIuUK2i7hgPm28a8piX5NTUtM/LKQ==} + dependencies: + punycode: 1.3.2 + querystring: 0.2.0 + dev: true + /ursa-optional/0.10.2: resolution: {integrity: sha512-TKdwuLboBn7M34RcvVTuQyhvrA8gYKapuVdm0nBP0mnBc7oECOfUQZrY91cefL3/nm64ZyrejSRrhTVdX7NG/A==} engines: {node: '>=4'} @@ -4327,21 +7331,40 @@ packages: bindings: 1.5.0 nan: 2.16.0 + /use/3.1.1: + resolution: {integrity: sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==} + engines: {node: '>=0.10.0'} + dev: true + /utf8-byte-length/1.0.4: resolution: {integrity: sha512-4+wkEYLBbWxqTahEsWrhxepcoVOJ+1z5PGIjPZxRkytcdSUaNjIjBM7Xn8E+pdSuV7SzvWovBFA54FO0JSoqhA==} /util-deprecate/1.0.2: resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} + /util/0.10.3: + resolution: {integrity: sha512-5KiHfsmkqacuKjkRkdV7SsfDJ2EGiPsK92s2MhNSY0craxjTdKTtqKsJaCWp4LW33ZZ0OPUv1WO/TFvNQRiQxQ==} + dependencies: + inherits: 2.0.1 + dev: true + + /util/0.11.1: + resolution: {integrity: sha512-HShAsny+zS2TZfaXxD9tYj4HQGlBezXZMZuM/S5PKLLoZkShZiGk9o5CzukI1LVHZvjdvZ2Sj1aW/Ndn2NB/HQ==} + dependencies: + inherits: 2.0.3 + dev: true + /uuid/3.4.0: resolution: {integrity: sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==} + deprecated: Please upgrade to version 7 or higher. Older versions may use Math.random() in certain circumstances, which is known to be problematic. See https://v8.dev/blog/math-random for details. + hasBin: true /uuid/8.3.2: resolution: {integrity: sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==} + hasBin: true /v8-compile-cache-lib/3.0.1: resolution: {integrity: sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==} - dev: false /v8-to-istanbul/9.0.1: resolution: {integrity: sha512-74Y4LqY74kLE6IFyIjPtkSTWzUZmj8tdHT9Ii/26dvQ6K9Dl2NbEfj0XgU2sHCtKgt5VupqhlO/5aWuqS+IY1w==} @@ -4350,6 +7373,7 @@ packages: '@jridgewell/trace-mapping': 0.3.15 '@types/istanbul-lib-coverage': 2.0.4 convert-source-map: 1.8.0 + dev: true /varint/5.0.2: resolution: {integrity: sha512-lKxKYG6H03yCZUpAGOPOsMcGxd1RHCu1iKvEHYDPmTyq2HueGhD73ssNBqqQWfvYs04G9iUFRvmAVLW20Jw6ow==} @@ -4365,23 +7389,220 @@ packages: core-util-is: 1.0.2 extsprintf: 1.3.0 - /vscode-oniguruma/1.6.2: - resolution: {integrity: sha512-KH8+KKov5eS/9WhofZR8M8dMHWN2gTxjMsG4jd04YhpbPR91fUj7rYQ2/XjeHCJWbg7X++ApRIU9NUwM2vTvLA==} - dev: true - - /vscode-textmate/5.2.0: - resolution: {integrity: sha512-Uw5ooOQxRASHgu6C7GVvUxisKXfSgW4oFlO+aa+PAkgmH89O3CXxEEzNRNtHSqtXFTl0nAC1uYj0GMSH27uwtQ==} + /vm-browserify/1.1.2: + resolution: {integrity: sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ==} dev: true /walker/1.0.8: resolution: {integrity: sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==} dependencies: makeerror: 1.0.12 + dev: true + + /watchpack-chokidar2/2.0.1: + resolution: {integrity: sha512-nCFfBIPKr5Sh61s4LPpy1Wtfi0HE8isJ3d2Yb5/Ppw2P2B/3eVSEBjKfN0fmHJSK14+31KwMKmcrzs2GM4P0Ww==} + requiresBuild: true + dependencies: + chokidar: 2.1.8 + transitivePeerDependencies: + - supports-color + dev: true + optional: true + + /watchpack/1.7.5: + resolution: {integrity: sha512-9P3MWk6SrKjHsGkLT2KHXdQ/9SNkyoJbabxnKOoJepsvJjJG8uYTR3yTPxPQvNDI3w4Nz1xnE0TLHK4RIVe/MQ==} + dependencies: + graceful-fs: 4.2.10 + neo-async: 2.6.2 + optionalDependencies: + chokidar: 3.5.3 + watchpack-chokidar2: 2.0.1 + transitivePeerDependencies: + - supports-color + dev: true + + /watchpack/2.4.0: + resolution: {integrity: sha512-Lcvm7MGST/4fup+ifyKi2hjyIAwcdI4HRgtvTpIUxBRhB+RFtUh8XtDOxUfctVCnhVi+QQj49i91OyvzkJl6cg==} + engines: {node: '>=10.13.0'} + dependencies: + glob-to-regexp: 0.4.1 + graceful-fs: 4.2.10 + dev: true /web-streams-polyfill/3.2.1: resolution: {integrity: sha512-e0MO3wdXWKrLbL0DgGnUV7WHVuw9OUvL4hjgnPkIeEvESk74gAITi5G606JtZPp39cd8HA9VQzCIvA49LpPN5Q==} engines: {node: '>= 8'} + /webpack-cli/4.10.0_webpack@4.46.0: + resolution: {integrity: sha512-NLhDfH/h4O6UOy+0LSso42xvYypClINuMNBVVzX4vX98TmTaTUxwRbXdhucbFMd2qLaCTcLq/PdYrvi8onw90w==} + engines: {node: '>=10.13.0'} + hasBin: true + peerDependencies: + '@webpack-cli/generators': '*' + '@webpack-cli/migrate': '*' + webpack: 4.x.x || 5.x.x + webpack-bundle-analyzer: '*' + webpack-dev-server: '*' + peerDependenciesMeta: + '@webpack-cli/generators': + optional: true + '@webpack-cli/migrate': + optional: true + webpack-bundle-analyzer: + optional: true + webpack-dev-server: + optional: true + dependencies: + '@discoveryjs/json-ext': 0.5.7 + '@webpack-cli/configtest': 1.2.0_dfxgqfcw6epibhmjfd2ethbqbi + '@webpack-cli/info': 1.5.0_webpack-cli@4.10.0 + '@webpack-cli/serve': 1.7.0_webpack-cli@4.10.0 + colorette: 2.0.19 + commander: 7.2.0 + cross-spawn: 7.0.3 + fastest-levenshtein: 1.0.16 + import-local: 3.1.0 + interpret: 2.2.0 + rechoir: 0.7.1 + webpack: 4.46.0_webpack-cli@4.10.0 + webpack-merge: 5.8.0 + dev: true + + /webpack-cli/5.0.1_webpack@5.75.0: + resolution: {integrity: sha512-S3KVAyfwUqr0Mo/ur3NzIp6jnerNpo7GUO6so51mxLi1spqsA17YcMXy0WOIJtBSnj748lthxC6XLbNKh/ZC+A==} + engines: {node: '>=14.15.0'} + hasBin: true + peerDependencies: + '@webpack-cli/generators': '*' + webpack: 5.x.x + webpack-bundle-analyzer: '*' + webpack-dev-server: '*' + peerDependenciesMeta: + '@webpack-cli/generators': + optional: true + webpack-bundle-analyzer: + optional: true + webpack-dev-server: + optional: true + dependencies: + '@discoveryjs/json-ext': 0.5.7 + '@webpack-cli/configtest': 2.0.1_rjsyjcrmk25kqsjzwkvj3a2evq + '@webpack-cli/info': 2.0.1_rjsyjcrmk25kqsjzwkvj3a2evq + '@webpack-cli/serve': 2.0.1_rjsyjcrmk25kqsjzwkvj3a2evq + colorette: 2.0.19 + commander: 9.4.1 + cross-spawn: 7.0.3 + envinfo: 7.8.1 + fastest-levenshtein: 1.0.16 + import-local: 3.1.0 + interpret: 3.1.1 + rechoir: 0.8.0 + webpack: 5.75.0_webpack-cli@5.0.1 + webpack-merge: 5.8.0 + dev: true + + /webpack-merge/5.8.0: + resolution: {integrity: sha512-/SaI7xY0831XwP6kzuwhKWVKDP9t1QY1h65lAFLbZqMPIuYcD9QAW4u9STIbU9kaJbPBB/geU/gLr1wDjOhQ+Q==} + engines: {node: '>=10.0.0'} + dependencies: + clone-deep: 4.0.1 + wildcard: 2.0.0 + dev: true + + /webpack-sources/1.4.3: + resolution: {integrity: sha512-lgTS3Xhv1lCOKo7SA5TjKXMjpSM4sBjNV5+q2bqesbSPs5FjGmU6jjtBSkX9b4qW87vDIsCIlUPOEhbZrMdjeQ==} + dependencies: + source-list-map: 2.0.1 + source-map: 0.6.1 + dev: true + + /webpack-sources/3.2.3: + resolution: {integrity: sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==} + engines: {node: '>=10.13.0'} + dev: true + + /webpack/4.46.0_webpack-cli@4.10.0: + resolution: {integrity: sha512-6jJuJjg8znb/xRItk7bkT0+Q7AHCYjjFnvKIWQPkNIOyRqoCGvkOs0ipeQzrqz4l5FtN5ZI/ukEHroeX/o1/5Q==} + engines: {node: '>=6.11.5'} + hasBin: true + peerDependencies: + webpack-cli: '*' + webpack-command: '*' + peerDependenciesMeta: + webpack-cli: + optional: true + webpack-command: + optional: true + dependencies: + '@webassemblyjs/ast': 1.9.0 + '@webassemblyjs/helper-module-context': 1.9.0 + '@webassemblyjs/wasm-edit': 1.9.0 + '@webassemblyjs/wasm-parser': 1.9.0 + acorn: 6.4.2 + ajv: 6.12.6 + ajv-keywords: 3.5.2_ajv@6.12.6 + chrome-trace-event: 1.0.3 + enhanced-resolve: 4.5.0 + eslint-scope: 4.0.3 + json-parse-better-errors: 1.0.2 + loader-runner: 2.4.0 + loader-utils: 1.4.2 + memory-fs: 0.4.1 + micromatch: 3.1.10 + mkdirp: 0.5.6 + neo-async: 2.6.2 + node-libs-browser: 2.2.1 + schema-utils: 1.0.0 + tapable: 1.1.3 + terser-webpack-plugin: 1.4.5_webpack@4.46.0 + watchpack: 1.7.5 + webpack-cli: 4.10.0_webpack@4.46.0 + webpack-sources: 1.4.3 + transitivePeerDependencies: + - supports-color + dev: true + + /webpack/5.75.0_webpack-cli@5.0.1: + resolution: {integrity: sha512-piaIaoVJlqMsPtX/+3KTTO6jfvrSYgauFVdt8cr9LTHKmcq/AMd4mhzsiP7ZF/PGRNPGA8336jldh9l2Kt2ogQ==} + engines: {node: '>=10.13.0'} + hasBin: true + peerDependencies: + webpack-cli: '*' + peerDependenciesMeta: + webpack-cli: + optional: true + dependencies: + '@types/eslint-scope': 3.7.4 + '@types/estree': 0.0.51 + '@webassemblyjs/ast': 1.11.1 + '@webassemblyjs/wasm-edit': 1.11.1 + '@webassemblyjs/wasm-parser': 1.11.1 + acorn: 8.8.0 + acorn-import-assertions: 1.8.0_acorn@8.8.0 + browserslist: 4.21.4 + chrome-trace-event: 1.0.3 + enhanced-resolve: 5.12.0 + es-module-lexer: 0.9.3 + eslint-scope: 5.1.1 + events: 3.3.0 + glob-to-regexp: 0.4.1 + graceful-fs: 4.2.10 + json-parse-even-better-errors: 2.3.1 + loader-runner: 4.3.0 + mime-types: 2.1.35 + neo-async: 2.6.2 + schema-utils: 3.1.1 + tapable: 2.2.1 + terser-webpack-plugin: 5.3.6_webpack@5.75.0 + watchpack: 2.4.0 + webpack-cli: 5.0.1_webpack@5.75.0 + webpack-sources: 3.2.3 + transitivePeerDependencies: + - '@swc/core' + - esbuild + - uglify-js + dev: true + /wherearewe/1.0.2: resolution: {integrity: sha512-HyLZ7n1Yox+w1qWaFEgP/sMs5D7ka2UXmoVNaY0XzbEHLGljo4ScBchYm6cWRYNO33tmFX3Mgg4BiZkDOjihyw==} engines: {node: '>=16.0.0', npm: '>=7.0.0'} @@ -4391,9 +7612,20 @@ packages: /which/2.0.2: resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} engines: {node: '>= 8'} + hasBin: true dependencies: isexe: 2.0.0 + /wildcard/2.0.0: + resolution: {integrity: sha512-JcKqAHLPxcdb9KM49dufGXn2x3ssnfjbcaQdLlfZsL9rH9wgDQjUtDxbo8NE0F6SFvydeu1VhZe7hZuHsB2/pw==} + dev: true + + /worker-farm/1.7.0: + resolution: {integrity: sha512-rvw3QTZc8lAxyVrqcSGVm5yP/IJ2UcB3U0graE3LCFoZ0Yn2x4EoVSqJKdB/T5M+FLcRPjz4TDacRf3OCfNUzw==} + dependencies: + errno: 0.1.8 + dev: true + /wrap-ansi/7.0.0: resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==} engines: {node: '>=10'} @@ -4401,6 +7633,7 @@ packages: ansi-styles: 4.3.0 string-width: 4.2.3 strip-ansi: 6.0.1 + dev: true /wrappy/1.0.2: resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} @@ -4411,6 +7644,7 @@ packages: dependencies: imurmurhash: 0.1.4 signal-exit: 3.0.7 + dev: true /ws/7.5.9: resolution: {integrity: sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q==} @@ -4432,20 +7666,37 @@ packages: /xsalsa20/1.2.0: resolution: {integrity: sha512-FIr/DEeoHfj7ftfylnoFt3rAIRoWXpx2AoDfrT2qD2wtp7Dp+COajvs/Icb7uHqRW9m60f5iXZwdsJJO3kvb7w==} + /xtend/4.0.2: + resolution: {integrity: sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==} + engines: {node: '>=0.4'} + dev: true + + /y18n/4.0.3: + resolution: {integrity: sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==} + dev: true + /y18n/5.0.8: resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==} engines: {node: '>=10'} + dev: true + + /yallist/3.1.1: + resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==} + dev: true /yallist/4.0.0: resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==} + dev: true /yargs-parser/20.2.9: resolution: {integrity: sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==} engines: {node: '>=10'} + dev: true /yargs-parser/21.1.1: resolution: {integrity: sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==} engines: {node: '>=12'} + dev: true /yargs/17.5.1: resolution: {integrity: sha512-t6YAJcxDkNX7NFYiVtKvWUz8l+PaKTLiL63mJYWR2GnHq2gjEWISzsLp9wg3aY36dY1j+gfIEL3pIF+XlJJfbA==} @@ -4458,12 +7709,13 @@ packages: string-width: 4.2.3 y18n: 5.0.8 yargs-parser: 21.1.1 + dev: true /yn/3.1.1: resolution: {integrity: sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==} engines: {node: '>=6'} - dev: false /yocto-queue/0.1.0: resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} engines: {node: '>=10'} + dev: true diff --git a/typedoc.json b/typedoc.json deleted file mode 100644 index 7e0dce5b..00000000 --- a/typedoc.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "readme": "./typedoc.md", - "theme": "default", - "out": "docs", - "excludePrivate": true, - "entryPoints": ["packages/fluence-js/src/index.ts"] -} diff --git a/typedoc.md b/typedoc.md deleted file mode 100644 index 5916cd78..00000000 --- a/typedoc.md +++ /dev/null @@ -1,16 +0,0 @@ -# Fluence JS - -To start developing applications with Fluence JS refer to the official [documentation](https://fluence.dev/docs/build/fluence-js/) - -Fluence JS is an implementation of the Fluence protocol for JavaScript-based environments. It can connect browsers, Node.js applications, and so on to the Fluence p2p network. - -Similar to the [Rust Fluence Peer implementation](https://github.com/fluencelabs/fluence) it includes: - -- Peer-to-peer communication layer (via [js-libp2p](https://github.com/libp2p/js-libp2p)) -- [Aqua VM](https://github.com/fluencelabs/aquavm) -- Builtin services - -Fluence JS can call services and functions on the Fluence network, and expose new APIs to the p2p network directly from TypeScript and JavaScript. -[Aqua language](https://github.com/fluencelabs/aqua) uses Fluence JS as a compilation target, and they are designed to [work in tandem](https://fluence.dev/docs/build/fluence-js/in-depth#understanding-the-aqua-compiler-output). - -Fluence JS can be used with any framework of your choice \(or even without frameworks\).