From f430b725d2379fad4dae4cf9f972e54a9a10d1d8 Mon Sep 17 00:00:00 2001 From: folex <0xdxdy@gmail.com> Date: Fri, 30 Apr 2021 17:15:30 +0300 Subject: [PATCH] Aqua HLL + AppConfig (#5) * Switch to app.config based deployment * Rewrite user online status checks to peer is_connected api * Rewrite fluentpad into aquamarine --- .gitattributes | 1 + app/.gitignore | 1 + app/app.config.json | 36 + app/app.config.with_storage.json | 42 + app/remove_disconnected.air | 17 + app/set_tetraplet.air | 7 + build.sh | 20 + client/.gitignore | 2 + client/aqua/app.aqua | 77 + client/aqua/common.aqua | 3 + client/aqua/fluent-pad.aqua | 19 + client/aqua/history.aqua | 21 + client/aqua/user-list.aqua | 24 + client/package-lock.json | 1878 +++++++++++++---- client/package.json | 111 +- client/src/app.json | 56 + client/src/app/api.ts | 292 --- client/src/app/constants.ts | 26 +- client/src/app/sync.ts | 2 +- client/src/aqua/app.ts | 636 ++++++ client/src/components/App.tsx | 35 +- client/src/components/CollaborativeEditor.tsx | 18 +- client/src/components/UserList.tsx | 88 +- client/src/components/util.tsx | 10 + client/src/index.tsx | 2 +- deploy_docker.sh | 5 + package-lock.json | 3 + services/artifacts/history.json | 1 - services/artifacts/user-list.json | 1 - services/build.sh | 21 - services/history-inmemory/Cargo.lock | 12 +- services/user-list-inmemory/Cargo.lock | 14 +- services/user-list-inmemory/Cargo.toml | 4 +- 33 files changed, 2639 insertions(+), 846 deletions(-) create mode 100644 .gitattributes create mode 100644 app/.gitignore create mode 100644 app/app.config.json create mode 100644 app/app.config.with_storage.json create mode 100644 app/remove_disconnected.air create mode 100644 app/set_tetraplet.air create mode 100644 build.sh create mode 100644 client/aqua/app.aqua create mode 100644 client/aqua/common.aqua create mode 100644 client/aqua/fluent-pad.aqua create mode 100644 client/aqua/history.aqua create mode 100644 client/aqua/user-list.aqua create mode 100644 client/src/app.json delete mode 100644 client/src/app/api.ts create mode 100644 client/src/aqua/app.ts create mode 100644 deploy_docker.sh create mode 100644 package-lock.json delete mode 100644 services/artifacts/history.json delete mode 100644 services/artifacts/user-list.json delete mode 100755 services/build.sh diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 0000000..f321eeb --- /dev/null +++ b/.gitattributes @@ -0,0 +1 @@ +*.sh text=auto eol=lf \ No newline at end of file diff --git a/app/.gitignore b/app/.gitignore new file mode 100644 index 0000000..917660a --- /dev/null +++ b/app/.gitignore @@ -0,0 +1 @@ +*.wasm \ No newline at end of file diff --git a/app/app.config.json b/app/app.config.json new file mode 100644 index 0000000..d920dc2 --- /dev/null +++ b/app/app.config.json @@ -0,0 +1,36 @@ +{ + "services": { + "history": { + "dependencies": ["history_inmemory"], + "node": "12D3KooWKEprYXUXqoV5xSBeyqrWLpQLLH4PXfvVkDJtmcqmh5V3" + }, + "user_list": { + "dependencies": ["user_list_inmemory"], + "node": "12D3KooWKEprYXUXqoV5xSBeyqrWLpQLLH4PXfvVkDJtmcqmh5V3" + } + }, + "modules": { + "history_inmemory": { + "file": "history.wasm", + "config": { + "preopened_files": ["/tmp"], + "mapped_dirs": { "history": "/tmp" } + } + }, + "user_list_inmemory": { + "file": "user_list.wasm", + "config": {} + } + }, + "scripts": { + "set_tetraplet": { + "file": "set_tetraplet.air", + "variables": { + "function": "is_authenticated", + "json_path": "$.is_authenticated" + }, + "node": "12D3KooWKEprYXUXqoV5xSBeyqrWLpQLLH4PXfvVkDJtmcqmh5V3" + } + }, + "script_storage": {} +} diff --git a/app/app.config.with_storage.json b/app/app.config.with_storage.json new file mode 100644 index 0000000..2dac68b --- /dev/null +++ b/app/app.config.with_storage.json @@ -0,0 +1,42 @@ +{ + "services": { + "history": { + "dependencies": ["history_inmemory"], + "node": "12D3KooWKEprYXUXqoV5xSBeyqrWLpQLLH4PXfvVkDJtmcqmh5V3" + }, + "user_list": { + "dependencies": ["user_list_inmemory"], + "node": "12D3KooWKEprYXUXqoV5xSBeyqrWLpQLLH4PXfvVkDJtmcqmh5V3" + } + }, + "modules": { + "history_inmemory": { + "file": "history.wasm", + "config": { + "preopened_files": ["/tmp"], + "mapped_dirs": { "history": "/tmp" } + } + }, + "user_list_inmemory": { + "file": "user_list.wasm", + "config": {} + } + }, + "scripts": { + "set_tetraplet": { + "file": "set_tetraplet.air", + "variables": { + "function": "is_authenticated", + "json_path": "$.[\"is_authenticated\"]" + }, + "node": "12D3KooWKEprYXUXqoV5xSBeyqrWLpQLLH4PXfvVkDJtmcqmh5V3" + } + }, + "script_storage": { + "remove_disconnected": { + "file": "remove_disconnected.air", + "interval": 10, + "node": "12D3KooWKEprYXUXqoV5xSBeyqrWLpQLLH4PXfvVkDJtmcqmh5V3" + } + } +} diff --git a/app/remove_disconnected.air b/app/remove_disconnected.air new file mode 100644 index 0000000..4e2a4bf --- /dev/null +++ b/app/remove_disconnected.air @@ -0,0 +1,17 @@ +(seq + (call %init_peer_id% ({{user_list}} "is_authenticated") [] token) + (seq + (call %init_peer_id% ({{user_list}} "get_users") [] all_users) + (fold all_users.$.users! u + (par + (seq + (call u.$.relay_id! ("peer" "is_connected") [u.$.peer_id!] is_connected) + (match is_connected false + (call %init_peer_id% ({{user_list}} "leave") [u.$.peer_id!]) + ) + ) + (next u) + ) + ) + ) +) \ No newline at end of file diff --git a/app/set_tetraplet.air b/app/set_tetraplet.air new file mode 100644 index 0000000..68ef494 --- /dev/null +++ b/app/set_tetraplet.air @@ -0,0 +1,7 @@ +(seq + (call init_relay ("op" "identity") []) + (seq + (call history__node (history "set_tetraplet") [user_list__node user_list function json_path] auth_result) + (call %init_peer_id% (returnService "run") [auth_result]) + ) +) diff --git a/build.sh b/build.sh new file mode 100644 index 0000000..7181dac --- /dev/null +++ b/build.sh @@ -0,0 +1,20 @@ +#!/bin/sh + +( + cd services/user-list-inmemory + cargo update + fce build --release +) + +( + cd services/history-inmemory + cargo update + fce build --release +) + +rm -f app/user_list.wasm +rm -f app/history.wasm + +cp services/user-list-inmemory/target/wasm32-wasi/release/user_list.wasm app/ +cp services/history-inmemory/target/wasm32-wasi/release/history.wasm app/ + diff --git a/client/.gitignore b/client/.gitignore index c34006c..d06ca0b 100644 --- a/client/.gitignore +++ b/client/.gitignore @@ -22,3 +22,5 @@ npm-debug.log* yarn-debug.log* yarn-error.log* .eslintcache + +*.jar \ No newline at end of file diff --git a/client/aqua/app.aqua b/client/aqua/app.aqua new file mode 100644 index 0000000..3189c9e --- /dev/null +++ b/client/aqua/app.aqua @@ -0,0 +1,77 @@ +import "@fluencelabs/aqua-lib/builtin.aqua" +import "fluent-pad.aqua" +import "history.aqua" + + +func join(user: User) -> EmptyServiceResult: + app <- AppConfig.getApp() + on app.user_list.peer_id: + UserList app.user_list.service_id + res <- UserList.join(user) + <- res + +func getUserList() -> []User: + app <- AppConfig.getApp() + on app.user_list.peer_id: + UserList app.user_list.service_id + allUsers <- UserList.get_users() + <- allUsers.users + +func initAfterJoin(me: User) -> []User: + allUsers <- getUserList() + for user <- allUsers par: + on user.relay_id: + isOnline <- Peer.is_connected(user.peer_id) + if isOnline: + on user.peer_id via user.relay_id: + FluentPad.notifyUserAdded(me, true) + else: + Op.identity() + par FluentPad.notifyUserAdded(user, isOnline) + <- allUsers + + +func updateOnlineStatuses(): + allUsers <- getUserList() + for user <- allUsers par: + on user.peer_id via user.relay_id: + isOnline <- Peer.is_connected(user.peer_id) + FluentPad.notifyOnline(user.peer_id, isOnline) + +func leave(): + app <- AppConfig.getApp() + on app.user_list.peer_id: + UserList app.user_list.service_id + res <- UserList.leave(%init_peer_id%) + allUsers <- getUserList() + for user <- allUsers par: + on user.peer_id via user.relay_id: + FluentPad.notifyUserRemoved(%init_peer_id%) + +func auth() -> AuthResult: + app <- AppConfig.getApp() + on app.user_list.peer_id: + UserList app.user_list.service_id + res <- UserList.is_authenticated() + <- res + +func getHistory() -> GetEntriesServiceResult: + app <- AppConfig.getApp() + authRes <- auth() + on app.history.peer_id: + History app.history.service_id + res <- History.get_all(authRes.is_authenticated) + <- res + +func addEntry(entry: string, init_peer_id: PeerId) -> AddServiceResult: + app <- AppConfig.getApp() + authRes <- auth() + on app.history.peer_id: + History app.history.service_id + res <- History.add(entry, authRes.is_authenticated) + allUsers <- getUserList() + for user <- allUsers par: + if user.peer_id != init_peer_id: + on user.peer_id via user.relay_id: + FluentPad.notifyTextUpdate(entry, authRes.is_authenticated) + <- res diff --git a/client/aqua/common.aqua b/client/aqua/common.aqua new file mode 100644 index 0000000..79298a3 --- /dev/null +++ b/client/aqua/common.aqua @@ -0,0 +1,3 @@ +data EmptyServiceResult: + ret_code: s32 + err_msg: string diff --git a/client/aqua/fluent-pad.aqua b/client/aqua/fluent-pad.aqua new file mode 100644 index 0000000..349d554 --- /dev/null +++ b/client/aqua/fluent-pad.aqua @@ -0,0 +1,19 @@ +import "@fluencelabs/aqua-lib/builtin.aqua" +import "user-list.aqua" + +data ServiceInstance: + peer_id: PeerId + service_id: string + +data App: + history: ServiceInstance + user_list: ServiceInstance + +service FluentPad("fluence/fluent-pad"): + notifyOnline(userPeerId: string, isOnline: bool) + notifyUserAdded(currentUser: User, isOnline: bool) + notifyUserRemoved(userPeerId: PeerId) + notifyTextUpdate(changes: string, isAuthorized: bool) + +service AppConfig("fluence/get-config"): + getApp: -> App diff --git a/client/aqua/history.aqua b/client/aqua/history.aqua new file mode 100644 index 0000000..828fda1 --- /dev/null +++ b/client/aqua/history.aqua @@ -0,0 +1,21 @@ +import "common.aqua" + +data AddServiceResult: + ret_code: s32 + err_msg: string + entry_id: u64 + +data HistoryEntry: + id: u64 + body: string + +data GetEntriesServiceResult: + ret_code: s32 + err_msg: string + entries: []HistoryEntry + +service History: + get_all: bool -> GetEntriesServiceResult + get_last: u64, bool -> GetEntriesServiceResult + add: string, bool -> AddServiceResult + set_tetraplet: string, string, string, string -> EmptyServiceResult diff --git a/client/aqua/user-list.aqua b/client/aqua/user-list.aqua new file mode 100644 index 0000000..0414c9c --- /dev/null +++ b/client/aqua/user-list.aqua @@ -0,0 +1,24 @@ +import "@fluencelabs/aqua-lib/builtin.aqua" +import "common.aqua" + +data User: + peer_id: PeerId + relay_id: PeerId + name: string + +data GetUsersServiceResult: + users: []User + ret_code: s32 + err_msg: string + +data AuthResult: + ret_code: s32 + err_msg: string + is_authenticated: bool + +service UserList: + is_authenticated: -> AuthResult + get_users: -> GetUsersServiceResult + join: User -> EmptyServiceResult + leave: string -> EmptyServiceResult -- user peerId + is_exists: string -> () -- user peerId diff --git a/client/package-lock.json b/client/package-lock.json index 6a37ccc..6b95343 100644 --- a/client/package-lock.json +++ b/client/package-lock.json @@ -1200,29 +1200,43 @@ } } }, + "@fluencelabs/aqua-cli": { + "version": "0.1.1-94", + "resolved": "https://registry.npmjs.org/@fluencelabs/aqua-cli/-/aqua-cli-0.1.1-94.tgz", + "integrity": "sha512-PPtFFrTOTKB8nwJ0hJX2MSRLCkM1CNi2/vEQ9yks/x2S9/knjNcq+t3pjrmRxH5YSye47GTlMMzVIKLfcRL1sg==", + "dev": true + }, + "@fluencelabs/aqua-lib": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/@fluencelabs/aqua-lib/-/aqua-lib-0.1.1.tgz", + "integrity": "sha512-NAecxJIu2Z53mNJJI2Q5fT26wbgmaUrnXdHXLGLMIFLubsA5ksN48nUSGs6hpc33r9BF0HBcwBg/sz4mZf389g==", + "dev": true + }, "@fluencelabs/aquamarine-interpreter": { - "version": "0.7.2", - "resolved": "https://registry.npmjs.org/@fluencelabs/aquamarine-interpreter/-/aquamarine-interpreter-0.7.2.tgz", - "integrity": "sha512-4LrcpeG0ONb3/kTFgt1QNERn9e7aAJBJgqbqNnx81NqFFngTi2xypKIuyPOttcxSdZTH5mpbwwn3JKFimvOvNA==" + "version": "0.8.2", + "resolved": "https://registry.npmjs.org/@fluencelabs/aquamarine-interpreter/-/aquamarine-interpreter-0.8.2.tgz", + "integrity": "sha512-WYn3fO3dy/ZTS2DnjpEv59RAFTuPosO65jejb/2QRAbZId4KiaCxma0yvFC6P0j2qoAxCDTRdbKrNZGXzjddYQ==" }, "@fluencelabs/fluence": { - "version": "0.9.31", - "resolved": "https://registry.npmjs.org/@fluencelabs/fluence/-/fluence-0.9.31.tgz", - "integrity": "sha512-E6BlktOgQh7IZWGtYb+cByBvhNdwsdBT/2T8YcT08AihKRdvEnZjttk6CdFwLkzYBLri6sxfSlL8al1gP4J+MQ==", + "version": "0.9.43", + "resolved": "https://registry.npmjs.org/@fluencelabs/fluence/-/fluence-0.9.43.tgz", + "integrity": "sha512-7n+BM1IOLqdF8xZBqybjwUC1jeyQfuzrrMeAVfXvaS5gNuB6sz9fJiknqOZNiOZkQG2KfG3YLO5V6kM9QNupeQ==", "requires": { - "@fluencelabs/aquamarine-interpreter": "0.7.2", + "@fluencelabs/aquamarine-interpreter": "0.8.2", "async": "3.2.0", "base64-js": "1.3.1", "bs58": "4.0.1", "cids": "0.8.1", "it-length-prefixed": "3.0.1", "it-pipe": "1.1.0", - "libp2p": "0.28.3", - "libp2p-mplex": "0.9.5", - "libp2p-secio": "0.12.5", - "libp2p-websockets": "0.13.6", + "libp2p": "0.30.10", + "libp2p-crypto": "0.19.0", + "libp2p-mplex": "0.10.2", + "libp2p-noise": "2.0.5", + "libp2p-websockets": "0.15.3", "loglevel": "1.7.0", - "peer-id": "0.13.12", + "multiaddr": "8.1.2", + "peer-id": "0.14.3", "uuid": "8.3.0" } }, @@ -1744,6 +1758,104 @@ } } }, + "@motrix/nat-api": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/@motrix/nat-api/-/nat-api-0.3.1.tgz", + "integrity": "sha512-mUsW8BlSK4bE5kjC5H4oQPjnXXuiRtE2V26tzW/AOroXl5CuhMEr9EDrr+wUFvDHlDwK4B0uSOBa8yILr6AfbQ==", + "requires": { + "async": "^3.2.0", + "debug": "^4.1.1", + "default-gateway": "^6.0.1", + "request": "^2.88.2", + "unordered-array-remove": "^1.0.2", + "xml2js": "^0.4.23" + }, + "dependencies": { + "cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "requires": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + } + }, + "default-gateway": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/default-gateway/-/default-gateway-6.0.3.tgz", + "integrity": "sha512-fwSOJsbbNzZ/CUFpqFBqYfYNLj1NbMPm8MMCIzHjC83iSJRBEGmDUxU+WP661BaBQImeC2yHwXtz+P/O9o+XEg==", + "requires": { + "execa": "^5.0.0" + } + }, + "execa": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-5.0.0.tgz", + "integrity": "sha512-ov6w/2LCiuyO4RLYGdpFGjkcs0wMTgGE8PrkTHikeUy5iJekXyPIKUjifk5CsE0pt7sMCrMZ3YNqoCj6idQOnQ==", + "requires": { + "cross-spawn": "^7.0.3", + "get-stream": "^6.0.0", + "human-signals": "^2.1.0", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^4.0.1", + "onetime": "^5.1.2", + "signal-exit": "^3.0.3", + "strip-final-newline": "^2.0.0" + } + }, + "get-stream": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", + "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==" + }, + "human-signals": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", + "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==" + }, + "is-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.0.tgz", + "integrity": "sha512-XCoy+WlUr7d1+Z8GgSuXmpuUFC9fOhRXglJMx+dwLKTkL44Cjd4W1Z5P+BQZpr+cR93aGP4S/s7Ftw6Nd/kiEw==" + }, + "npm-run-path": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", + "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", + "requires": { + "path-key": "^3.0.0" + } + }, + "path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==" + }, + "shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "requires": { + "shebang-regex": "^3.0.0" + } + }, + "shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==" + }, + "which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "requires": { + "isexe": "^2.0.0" + } + } + } + }, "@multiformats/base-x": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/@multiformats/base-x/-/base-x-4.0.1.tgz", @@ -1807,6 +1919,60 @@ } } }, + "@protobufjs/aspromise": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@protobufjs/aspromise/-/aspromise-1.1.2.tgz", + "integrity": "sha1-m4sMxmPWaafY9vXQiToU00jzD78=" + }, + "@protobufjs/base64": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@protobufjs/base64/-/base64-1.1.2.tgz", + "integrity": "sha512-AZkcAA5vnN/v4PDqKyMR5lx7hZttPDgClv83E//FMNhR2TMcLUhfRUBHCmSl0oi9zMgDDqRUJkSxO3wm85+XLg==" + }, + "@protobufjs/codegen": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@protobufjs/codegen/-/codegen-2.0.4.tgz", + "integrity": "sha512-YyFaikqM5sH0ziFZCN3xDC7zeGaB/d0IUb9CATugHWbd1FRFwWwt4ld4OYMPWu5a3Xe01mGAULCdqhMlPl29Jg==" + }, + "@protobufjs/eventemitter": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@protobufjs/eventemitter/-/eventemitter-1.1.0.tgz", + "integrity": "sha1-NVy8mLr61ZePntCV85diHx0Ga3A=" + }, + "@protobufjs/fetch": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@protobufjs/fetch/-/fetch-1.1.0.tgz", + "integrity": "sha1-upn7WYYUr2VwDBYZ/wbUVLDYTEU=", + "requires": { + "@protobufjs/aspromise": "^1.1.1", + "@protobufjs/inquire": "^1.1.0" + } + }, + "@protobufjs/float": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@protobufjs/float/-/float-1.0.2.tgz", + "integrity": "sha1-Xp4avctz/Ap8uLKR33jIy9l7h9E=" + }, + "@protobufjs/inquire": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@protobufjs/inquire/-/inquire-1.1.0.tgz", + "integrity": "sha1-/yAOPnzyQp4tyvwRQIKOjMY48Ik=" + }, + "@protobufjs/path": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@protobufjs/path/-/path-1.1.2.tgz", + "integrity": "sha1-bMKyDFya1q0NzP0hynZz2Nf79o0=" + }, + "@protobufjs/pool": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@protobufjs/pool/-/pool-1.1.0.tgz", + "integrity": "sha1-Cf0V8tbTq/qbZbw2ZQbWrXhG/1Q=" + }, + "@protobufjs/utf8": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@protobufjs/utf8/-/utf8-1.1.0.tgz", + "integrity": "sha1-p3c2C1s5oaLlEG+OhY8v0tBgxXA=" + }, "@rollup/plugin-node-resolve": { "version": "7.1.3", "resolved": "https://registry.npmjs.org/@rollup/plugin-node-resolve/-/plugin-node-resolve-7.1.3.tgz", @@ -2196,6 +2362,11 @@ "integrity": "sha512-oVfRvqHV/V6D1yifJbVRU3TMp8OT6o6BG+U9MkwuJ3U8/CsDHvalRpsxBqivn71ztOFZBTfJMvETbqHiaNSj7Q==", "dev": true }, + "@types/long": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@types/long/-/long-4.0.1.tgz", + "integrity": "sha512-5tXH6Bx/kNGd3MgffdmP4dy2Z+G4eaXw0SE81Tq3BNadtnMR5/ySMzX4SLEzHJzSmPNn4HIdpQsBvXMUykr58w==" + }, "@types/minimatch": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.3.tgz", @@ -2256,6 +2427,11 @@ "@types/node": "*" } }, + "@types/retry": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/@types/retry/-/retry-0.12.0.tgz", + "integrity": "sha512-wWKOClTTiizcZhXnPY4wikVAwmdYHp8q6DmC+EJUzAMsycb7HB32Kh9RN4+0gExjmPmZSAQjgURXIGATPegAvA==" + }, "@types/source-list-map": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/@types/source-list-map/-/source-list-map-0.1.2.tgz", @@ -2778,11 +2954,12 @@ } }, "any-signal": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/any-signal/-/any-signal-1.2.0.tgz", - "integrity": "sha512-Cl08k4xItix3jvu4cxO/dt2rQ6iUAjO66pTyRMub+WL1VXeAyZydCpD8GqWTPKfdL28U0R0UucmQVsUsBnvCmQ==", + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/any-signal/-/any-signal-2.1.2.tgz", + "integrity": "sha512-B+rDnWasMi/eWcajPcCWSlYc7muXOrcYrqgyzcdKisl2H/WTlQ0gip1KyQfr0ZlxJdsuWCj/LWwQm7fhyhRfIQ==", "requires": { - "abort-controller": "^3.0.0" + "abort-controller": "^3.0.0", + "native-abort-controller": "^1.0.3" } }, "anymatch": { @@ -2886,6 +3063,11 @@ "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz", "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=" }, + "array-filter": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/array-filter/-/array-filter-1.0.0.tgz", + "integrity": "sha1-uveeYubvTCpMC4MSMtr/7CUfnYM=" + }, "array-find-index": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/array-find-index/-/array-find-index-1.0.2.tgz", @@ -3089,6 +3271,14 @@ "postcss-value-parser": "^4.1.0" } }, + "available-typed-arrays": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.2.tgz", + "integrity": "sha512-XWX3OX8Onv97LMk/ftVyBibpGwY5a8SmuxZPzeOxqmuEqUCOM9ZE+uIaD1VNJ5QnvU2UQusvmKbuM1FR8QWGfQ==", + "requires": { + "array-filter": "^1.0.0" + } + }, "aws-sign2": { "version": "0.7.0", "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", @@ -3568,6 +3758,15 @@ "tweetnacl": "^0.14.3" } }, + "bcrypto": { + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/bcrypto/-/bcrypto-5.4.0.tgz", + "integrity": "sha512-KDX2CR29o6ZoqpQndcCxFZAtYA1jDMnXU3jmCfzP44g++Cu7AHHtZN/JbrN/MXAg9SLvtQ8XISG+eVD9zH1+Jg==", + "requires": { + "bufio": "~1.0.7", + "loady": "~0.0.5" + } + }, "bfj": { "version": "7.0.2", "resolved": "https://registry.npmjs.org/bfj/-/bfj-7.0.2.tgz", @@ -3856,6 +4055,11 @@ "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz", "integrity": "sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk=" }, + "bufio": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/bufio/-/bufio-1.0.7.tgz", + "integrity": "sha512-bd1dDQhiC+bEbEfg56IdBv7faWa6OipMs/AFFFvtFnB3wAYjlwQpQRZ0pm6ZkgtfL0pILRXhKxOiQj6UzoMR7A==" + }, "builtin-modules": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-3.2.0.tgz", @@ -4054,9 +4258,9 @@ "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=" }, "chai": { - "version": "4.3.3", - "resolved": "https://registry.npmjs.org/chai/-/chai-4.3.3.tgz", - "integrity": "sha512-MPSLOZwxxnA0DhLE84klnGPojWFK5KuhP7/j5dTsxpr2S3XlkqJP5WbyYl1gCTWvG2Z5N+HD4F472WsbEZL6Pw==", + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/chai/-/chai-4.3.4.tgz", + "integrity": "sha512-yS5H68VYOCtN1cjfwumDSuzn/9c+yza4f3reKXlE5rUg7SFcCEy90gJvydNgOYtblyf4Zi6jIWRnXOgErta0KA==", "requires": { "assertion-error": "^1.1.0", "check-error": "^1.0.2", @@ -5378,6 +5582,16 @@ "resolved": "https://registry.npmjs.org/dns-equal/-/dns-equal-1.0.0.tgz", "integrity": "sha1-s55/HabrCnW6nBcySzR1PEfgZU0=" }, + "dns-over-http-resolver": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/dns-over-http-resolver/-/dns-over-http-resolver-1.2.2.tgz", + "integrity": "sha512-4J7LoLl26mczU6LdWlhvNM51aWXHJmTz6iDUrGz1sqiAgNb6HzBc/huvkgqS6bYfbCzvlOKW/bGkugReliac0A==", + "requires": { + "debug": "^4.2.0", + "native-fetch": "^3.0.0", + "receptacle": "^1.3.2" + } + }, "dns-packet": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/dns-packet/-/dns-packet-1.3.1.tgz", @@ -5584,6 +5798,14 @@ "resolved": "https://registry.npmjs.org/ejs/-/ejs-2.7.4.tgz", "integrity": "sha512-7vmuyh5+kuUyJKePhQfRQBhXV5Ce+RnaeeQArKu1EAMpL3WbgMt5WG6uQZpEVvYSSsxMXRKOewtDk9RaTKXRlA==" }, + "electron-fetch": { + "version": "1.7.3", + "resolved": "https://registry.npmjs.org/electron-fetch/-/electron-fetch-1.7.3.tgz", + "integrity": "sha512-1AVMaxrHXTTMqd7EK0MGWusdqNr07Rpj8Th6bG4at0oNgIi/1LBwa9CjT/0Zy+M0k/tSJPS04nFxHj0SXDVgVw==", + "requires": { + "encoding": "^0.1.13" + } + }, "electron-to-chromium": { "version": "1.3.636", "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.636.tgz", @@ -5623,6 +5845,24 @@ "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=" }, + "encoding": { + "version": "0.1.13", + "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.13.tgz", + "integrity": "sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==", + "requires": { + "iconv-lite": "^0.6.2" + }, + "dependencies": { + "iconv-lite": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.2.tgz", + "integrity": "sha512-2y91h5OpQlolefMPmUlivelittSWy0rP+oYVpn6A7GwVHNE8AWzoYOBNmlwks3LobaJxgHCYZAnyNo2GgpNRNQ==", + "requires": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + } + } + } + }, "end-of-stream": { "version": "1.4.4", "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", @@ -5775,6 +6015,11 @@ "es6-symbol": "^3.1.1" } }, + "es6-promisify": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/es6-promisify/-/es6-promisify-6.1.1.tgz", + "integrity": "sha512-HBL8I3mIki5C1Cc9QjKUenHtnG0A5/xA8Q/AllRcfiwl2CZFXGK7ddBiCoRwAix4i2KxcQfjtIVcrVbB3vbmwg==" + }, "es6-symbol": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.3.tgz", @@ -7046,6 +7291,11 @@ "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=" }, + "foreach": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/foreach/-/foreach-2.0.5.tgz", + "integrity": "sha1-C+4AUBiusmDQo6865ljdATbsG5k=" + }, "forever-agent": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", @@ -7608,6 +7858,11 @@ } } }, + "has-bigints": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.1.tgz", + "integrity": "sha512-LSBS2LjbNBTf6287JEbEzvJgftkF5qFkmCo9hDRpAzKhUOlJ+hx8dd4USs00SgsUNwc4617J9ki5YtEClM2ffA==" + }, "has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", @@ -8228,18 +8483,23 @@ "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==" }, "interface-datastore": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/interface-datastore/-/interface-datastore-1.0.4.tgz", - "integrity": "sha512-nIOP/mVwDUc7OenayUyFQB3D6c3SxDG5opTPeSrhA0jS5q0XWkf8Nz2GtNBm3wkeSKUM6iXt6LwIOCH/+jFXIQ==", + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/interface-datastore/-/interface-datastore-3.0.6.tgz", + "integrity": "sha512-ruF9CVmtKCNfzCZYW6YeEKDRDbgFaiKGrSWof19BVCv6Qx/WrL1jRV4sCQUHCaXwJI7FCFknhw++PGafWCXvfw==", "requires": { - "buffer": "^5.5.0", - "class-is": "^1.1.0", - "err-code": "^2.0.1", - "ipfs-utils": "^2.2.2", - "iso-random-stream": "^1.1.1", + "err-code": "^3.0.1", + "ipfs-utils": "^6.0.0", + "iso-random-stream": "^2.0.0", "it-all": "^1.0.2", "it-drain": "^1.0.1", "nanoid": "^3.0.2" + }, + "dependencies": { + "err-code": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/err-code/-/err-code-3.0.1.tgz", + "integrity": "sha512-GiaH0KJUewYok+eeY05IIgjtAe4Yltygk9Wqp1V5yVWLdhf0hYZchRjNIT9bb0mSwRcIusT3cx7PJUf3zEIfUA==" + } } }, "internal-ip": { @@ -8287,16 +8547,11 @@ "integrity": "sha1-vd7XARQpCCjAoDnnLvJfWq7ENUo=" }, "ip-address": { - "version": "6.4.0", - "resolved": "https://registry.npmjs.org/ip-address/-/ip-address-6.4.0.tgz", - "integrity": "sha512-c5uxc2WUTuRBVHT/6r4m7HIr/DfV0bF6DvLH3iZGSK8wp8iMwwZSgIq2do0asFf8q9ECug0SE+6+1ACMe4sorA==", + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/ip-address/-/ip-address-7.1.0.tgz", + "integrity": "sha512-V9pWC/VJf2lsXqP7IWJ+pe3P1/HCYGBMZrrnT62niLGjAfCbeiwXMUxaeHvnVlz19O27pvXP4azs+Pj/A0x+SQ==", "requires": { "jsbn": "1.1.0", - "lodash.find": "4.6.0", - "lodash.max": "4.0.1", - "lodash.merge": "4.6.2", - "lodash.padstart": "4.6.1", - "lodash.repeat": "4.1.0", "sprintf-js": "1.1.2" } }, @@ -8311,23 +8566,42 @@ "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==" }, "ipfs-utils": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/ipfs-utils/-/ipfs-utils-2.4.0.tgz", - "integrity": "sha512-0RH8rMIEhrXyrbh87V8SQC6E6/5EJs+YionqZGAXnVoTzkpFhxC3x3FlsxwZ9s72yaieGP1Mx1tRYgfCFM/mJg==", + "version": "6.0.7", + "resolved": "https://registry.npmjs.org/ipfs-utils/-/ipfs-utils-6.0.7.tgz", + "integrity": "sha512-VlFDyRuCSOKXPOXb68nXSUVEPA+eXbdS7LT22k4aZvFNIoB2OtysDEt8lal93UOB/QS0Gy+6DUoxj1wJ37SIxQ==", "requires": { "abort-controller": "^3.0.0", - "any-signal": "^1.1.0", - "buffer": "^5.6.0", - "err-code": "^2.0.0", + "any-signal": "^2.1.0", + "buffer": "^6.0.1", + "electron-fetch": "^1.7.2", + "err-code": "^3.0.1", "fs-extra": "^9.0.1", "is-electron": "^2.2.0", - "iso-url": "^0.4.7", - "it-glob": "0.0.8", - "it-to-stream": "^0.1.2", - "merge-options": "^2.0.0", - "nanoid": "^3.1.3", - "node-fetch": "^2.6.0", - "stream-to-it": "^0.2.0" + "iso-url": "^1.0.0", + "it-glob": "~0.0.11", + "it-to-stream": "^1.0.0", + "merge-options": "^3.0.4", + "nanoid": "^3.1.20", + "native-abort-controller": "^1.0.3", + "native-fetch": "^3.0.0", + "node-fetch": "^2.6.1", + "stream-to-it": "^0.2.2" + }, + "dependencies": { + "buffer": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", + "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", + "requires": { + "base64-js": "^1.3.1", + "ieee754": "^1.2.1" + } + }, + "err-code": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/err-code/-/err-code-3.0.1.tgz", + "integrity": "sha512-GiaH0KJUewYok+eeY05IIgjtAe4Yltygk9Wqp1V5yVWLdhf0hYZchRjNIT9bb0mSwRcIusT3cx7PJUf3zEIfUA==" + } } }, "is-absolute-url": { @@ -8371,6 +8645,11 @@ "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=" }, + "is-bigint": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.1.tgz", + "integrity": "sha512-J0ELF4yHFxHy0cmSxZuheDOz2luOdVvqjwmEcj8H/L1JHeuEDSDbeRP+Dk9kFVk5RTFzbucJ2Kb9F7ixY2QaCg==" + }, "is-binary-path": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", @@ -8380,6 +8659,14 @@ "binary-extensions": "^2.0.0" } }, + "is-boolean-object": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.0.tgz", + "integrity": "sha512-a7Uprx8UtD+HWdyYwnD1+ExtTgqQtD2k/1yJgtXP6wnMm8byhkoTZRl+95LLThpzNZJ5aEvi46cdH+ayMFRwmA==", + "requires": { + "call-bind": "^1.0.0" + } + }, "is-buffer": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.5.tgz", @@ -8507,6 +8794,11 @@ "resolved": "https://registry.npmjs.org/is-generator-fn/-/is-generator-fn-2.1.0.tgz", "integrity": "sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==" }, + "is-generator-function": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.0.8.tgz", + "integrity": "sha512-2Omr/twNtufVZFr1GhxjOMFPAj2sjc/dKaIqBhvo4qciXfJmITGH6ZGd8eZYNHza8t1y0e01AuqRhJwfWp26WQ==" + }, "is-glob": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", @@ -8523,6 +8815,11 @@ "ip-regex": "^4.0.0" } }, + "is-loopback-addr": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-loopback-addr/-/is-loopback-addr-1.0.1.tgz", + "integrity": "sha512-DhWU/kqY7X2F6KrrVTu7mHlbd2Pbo4D1YkAzasBMjQs6lJAoefxaA6m6CpSX0K6pjt9D0b9PNFI5zduy/vzOYw==" + }, "is-module": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-module/-/is-module-1.0.0.tgz", @@ -8538,6 +8835,11 @@ "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==" }, + "is-number-object": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.4.tgz", + "integrity": "sha512-zohwelOAur+5uXtk8O3GPQ1eAcu4ZX3UwxQhUlfFFMNpUd83gXgjbhJh6HmB6LUNV/ieOLQuDwJO3dWJosUeMw==" + }, "is-obj": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-2.0.0.tgz", @@ -8631,6 +8933,101 @@ "has-symbols": "^1.0.1" } }, + "is-typed-array": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.5.tgz", + "integrity": "sha512-S+GRDgJlR3PyEbsX/Fobd9cqpZBuvUS+8asRqYDMLCb2qMzt1oz5m5oxQCxOgUDxiWsOVNi4yaF+/uvdlHlYug==", + "requires": { + "available-typed-arrays": "^1.0.2", + "call-bind": "^1.0.2", + "es-abstract": "^1.18.0-next.2", + "foreach": "^2.0.5", + "has-symbols": "^1.0.1" + }, + "dependencies": { + "call-bind": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", + "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", + "requires": { + "function-bind": "^1.1.1", + "get-intrinsic": "^1.0.2" + } + }, + "es-abstract": { + "version": "1.18.0", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.18.0.tgz", + "integrity": "sha512-LJzK7MrQa8TS0ja2w3YNLzUgJCGPdPOV1yVvezjNnS89D+VR08+Szt2mz3YB2Dck/+w5tfIq/RoUAFqJJGM2yw==", + "requires": { + "call-bind": "^1.0.2", + "es-to-primitive": "^1.2.1", + "function-bind": "^1.1.1", + "get-intrinsic": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.2", + "is-callable": "^1.2.3", + "is-negative-zero": "^2.0.1", + "is-regex": "^1.1.2", + "is-string": "^1.0.5", + "object-inspect": "^1.9.0", + "object-keys": "^1.1.1", + "object.assign": "^4.1.2", + "string.prototype.trimend": "^1.0.4", + "string.prototype.trimstart": "^1.0.4", + "unbox-primitive": "^1.0.0" + }, + "dependencies": { + "get-intrinsic": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.1.tgz", + "integrity": "sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q==", + "requires": { + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.1" + } + }, + "has-symbols": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.2.tgz", + "integrity": "sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw==" + } + } + }, + "is-callable": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.3.tgz", + "integrity": "sha512-J1DcMe8UYTBSrKezuIUTUwjXsho29693unXM2YhJUTR2txK/eG47bvNa/wipPFmZFgr/N6f1GA66dv0mEyTIyQ==" + }, + "is-regex": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.2.tgz", + "integrity": "sha512-axvdhb5pdhEVThqJzYXwMlVuZwC+FF2DpcOhTS+y/8jVq4trxyPgfcwIxIKiyeuLlSQYKkmUaPQJ8ZE4yNKXDg==", + "requires": { + "call-bind": "^1.0.2", + "has-symbols": "^1.0.1" + } + }, + "string.prototype.trimend": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.4.tgz", + "integrity": "sha512-y9xCjw1P23Awk8EvTpcyL2NIr1j7wJ39f+k6lvRnSMz+mz9CGz9NYPelDk42kOz6+ql8xjfK8oYzy3jAP5QU5A==", + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3" + } + }, + "string.prototype.trimstart": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.4.tgz", + "integrity": "sha512-jh6e984OBfvxS50tdY2nRZnoC5/mLFKOREQfw8t5yytkoUsJRNxvI/E39qu1sD0OtWI3OC0XgKSmcWwziwYuZw==", + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3" + } + } + } + }, "is-typedarray": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", @@ -8665,18 +9062,25 @@ "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=" }, "iso-random-stream": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/iso-random-stream/-/iso-random-stream-1.1.1.tgz", - "integrity": "sha512-YEt/7xOwTdu4KXIgtdgGFkiLUsBaddbnkmHyaFdjJYIcD7V4gpQHPvYC5tyh3kA0PQ01y9lWm1ruVdf8Mqzovg==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/iso-random-stream/-/iso-random-stream-2.0.0.tgz", + "integrity": "sha512-lGuIu104KfBV9ubYTSaE3GeAr6I69iggXxBHbTBc5u/XKlwlWl0LCytnkIZissaKqvxablwRD9B3ktVnmIUnEg==", "requires": { - "buffer": "^5.4.3", + "events": "^3.3.0", "readable-stream": "^3.4.0" + }, + "dependencies": { + "events": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", + "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==" + } } }, "iso-url": { - "version": "0.4.7", - "resolved": "https://registry.npmjs.org/iso-url/-/iso-url-0.4.7.tgz", - "integrity": "sha512-27fFRDnPAMnHGLq36bWTpKET+eiXct3ENlCcdcMdk+mjXrb2kw3mhBUg1B7ewAC0kVzlOPhADzQgz1SE6Tglog==" + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/iso-url/-/iso-url-1.1.5.tgz", + "integrity": "sha512-+3JqoKdBTGmyv9vOkS6b9iHhvK34UajfTibrH/1HOK8TI7K2VsM0qOCd+aJdWKtSOA8g3PqZfcwDmnR0p3klqQ==" }, "isobject": { "version": "3.0.1", @@ -8761,12 +9165,33 @@ "integrity": "sha512-ygD4kA4vp8fi+Y+NBgEKt6W06xSbv6Ub/0V8d1r3uCyJ9Izwa1UspkIOlqY9fOee0Z1w3WRo1+VWyAU4DgtufA==" }, "it-buffer": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/it-buffer/-/it-buffer-0.1.2.tgz", - "integrity": "sha512-NOJ3ogSNq3Y2c75ZDcPs9qlgitWyCkUQdmgqqMw+/LMmHZqwWQw7OBDodonz250nJ4EEBXkRQ+pIwz1sL9Zuyg==", + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/it-buffer/-/it-buffer-0.1.3.tgz", + "integrity": "sha512-9a2/9SYVwG7bcn3tpRDR4bXbtuMLXnDK48KVC+GXiQg97ZOOdWz2nIITBsOQ19b+gj01Rw8RNwtiLDLI8P8oiQ==", "requires": { - "bl": "^4.0.2", - "buffer": "^5.5.0" + "bl": "^5.0.0", + "buffer": "^6.0.3" + }, + "dependencies": { + "bl": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/bl/-/bl-5.0.0.tgz", + "integrity": "sha512-8vxFNZ0pflFfi0WXA3WQXlj6CaMEwsmh63I1CNp0q+wWv8sD0ARx1KovSQd0l2GkwrMIOyedq0EF1FxI+RCZLQ==", + "requires": { + "buffer": "^6.0.3", + "inherits": "^2.0.4", + "readable-stream": "^3.4.0" + } + }, + "buffer": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", + "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", + "requires": { + "base64-js": "^1.3.1", + "ieee754": "^1.2.1" + } + } } }, "it-drain": { @@ -8774,38 +9199,23 @@ "resolved": "https://registry.npmjs.org/it-drain/-/it-drain-1.0.4.tgz", "integrity": "sha512-coB7mcyZ4lWBQKoQGJuqM+P94pvpn2T3KY27vcVWPqeB1WmoysRC76VZnzAqrBWzpWcoEJMjZ+fsMBslxNaWfQ==" }, + "it-filter": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/it-filter/-/it-filter-1.0.2.tgz", + "integrity": "sha512-rxFUyPCrhk7WrNxD8msU10iEPhQmROoqwuyWmQUYY1PtopwUGBYyra9EYG2nRZADYeuT83cohKWmKCWPzpeyiw==" + }, + "it-first": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/it-first/-/it-first-1.0.6.tgz", + "integrity": "sha512-wiI02c+G1BVuu0jz30Nsr1/et0cpSRulKUusN8HDZXxuX4MdUzfMp2P4JUk+a49Wr1kHitRLrnnh3+UzJ6neaQ==" + }, "it-glob": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/it-glob/-/it-glob-0.0.8.tgz", - "integrity": "sha512-PmIAgb64aJPM6wwT1UTlNDAJnNgdGrvr0vRr3AYCngcUuq1KaAovuz0dQAmUkaXudDG3EQzc7OttuLW9DaL3YQ==", + "version": "0.0.11", + "resolved": "https://registry.npmjs.org/it-glob/-/it-glob-0.0.11.tgz", + "integrity": "sha512-p02iVYsvOPU7cW4sV9BC62Kz6Mz2aUTJz/cKWDeFqc05kzB3WgSq8OobZabVA/K4boSm6q+s0xOZ8xiArLSoXQ==", "requires": { - "fs-extra": "^8.1.0", + "fs-extra": "^9.0.1", "minimatch": "^3.0.4" - }, - "dependencies": { - "fs-extra": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", - "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", - "requires": { - "graceful-fs": "^4.2.0", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" - } - }, - "jsonfile": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", - "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=", - "requires": { - "graceful-fs": "^4.1.6" - } - }, - "universalify": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", - "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==" - } } }, "it-goodbye": { @@ -8836,6 +9246,19 @@ "varint": "^5.0.0" } }, + "it-map": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/it-map/-/it-map-1.0.5.tgz", + "integrity": "sha512-EElupuWhHVStUgUY+OfTJIS2MZed96lDrAXzJUuqiiqLnIKoBRqtX1ZG2oR0bGDsSppmz83MtzCeKLZ9TVAUxQ==" + }, + "it-merge": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/it-merge/-/it-merge-1.0.0.tgz", + "integrity": "sha512-bs40LMjG/9JMOcJ7pgyGLoOeWBpw28ZoMmZIk/1NCa5SUxd4elXCuadAr2qSjPiHz2GxrqoWGFAP7SePGddatw==", + "requires": { + "it-pushable": "^1.4.0" + } + }, "it-pair": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/it-pair/-/it-pair-1.0.0.tgz", @@ -8845,25 +9268,66 @@ } }, "it-pb-rpc": { - "version": "0.1.9", - "resolved": "https://registry.npmjs.org/it-pb-rpc/-/it-pb-rpc-0.1.9.tgz", - "integrity": "sha512-IMPXz+a+lUEclV5qIlT/1WAjCMIZyqQtMRaKaL8cwgvH2P5LtMJlrbNZr3b4VEONK1H6mqAV1upfMTSSBSrOqA==", + "version": "0.1.11", + "resolved": "https://registry.npmjs.org/it-pb-rpc/-/it-pb-rpc-0.1.11.tgz", + "integrity": "sha512-1Yvae7LNHNM/WzxWT7OyHqwpA7DZoGos22JioMZ5H6i9iExQf71NHE0phHKEfkJdWLo7SRqPLLbqs2zaeKCwPA==", "requires": { - "is-buffer": "^2.0.4", - "it-handshake": "^1.0.2", - "it-length-prefixed": "^3.1.0" + "is-buffer": "^2.0.5", + "it-handshake": "^2.0.0", + "it-length-prefixed": "^5.0.2" }, "dependencies": { - "it-length-prefixed": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/it-length-prefixed/-/it-length-prefixed-3.1.0.tgz", - "integrity": "sha512-E5GwT6qfZEwh3/XThyYwgjKJ4/hxvTC9kdbj3gxXDeUDKtC7+K2T647sPeX7xDEWqunsnoQyvOrjoHPegaT3uw==", + "bl": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/bl/-/bl-5.0.0.tgz", + "integrity": "sha512-8vxFNZ0pflFfi0WXA3WQXlj6CaMEwsmh63I1CNp0q+wWv8sD0ARx1KovSQd0l2GkwrMIOyedq0EF1FxI+RCZLQ==", "requires": { - "@types/bl": "^2.1.0", - "bl": "^4.0.2", - "buffer": "^5.5.0", - "varint": "^5.0.0" + "buffer": "^6.0.3", + "inherits": "^2.0.4", + "readable-stream": "^3.4.0" } + }, + "buffer": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", + "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", + "requires": { + "base64-js": "^1.3.1", + "ieee754": "^1.2.1" + } + }, + "it-handshake": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/it-handshake/-/it-handshake-2.0.0.tgz", + "integrity": "sha512-K4q+mz8aLlCK3vTjtgNdHC9c/JbuOATsfogarjMsLcBZC5vYfKbX3Gq3AWcCdjIsIrPqzTlhPKSxl64LJkrt2w==", + "requires": { + "it-pushable": "^1.4.0", + "it-reader": "^3.0.0", + "p-defer": "^3.0.0" + } + }, + "it-length-prefixed": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/it-length-prefixed/-/it-length-prefixed-5.0.2.tgz", + "integrity": "sha512-SqAURaKKsjYbROIdTjW3UtqGrdZo1SHnkbeYYp7JwC5P0IIy7r4C0xNkmK2Va/fBmvXA++hMdDON9+2zesQlUA==", + "requires": { + "bl": "^5.0.0", + "buffer": "^6.0.3", + "varint": "^6.0.0" + } + }, + "it-reader": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/it-reader/-/it-reader-3.0.0.tgz", + "integrity": "sha512-NxR40odATeaBmSefn6Xn43DplYvn2KtEKQzn4jrTRuPYXMky5M4e+KQ7aTJh0k0vkytLyeenGO1I1GXlGm4laQ==", + "requires": { + "bl": "^5.0.0" + } + }, + "varint": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/varint/-/varint-6.0.0.tgz", + "integrity": "sha512-cXEIW6cfr15lFv563k4GuVuW/fiwjknytD37jIOLSdSWuOI6WnO/oKwmP2FQTU2l01LP8/M5TSAJpzUaGe3uWg==" } } }, @@ -8897,17 +9361,33 @@ "bl": "^4.0.0" } }, + "it-take": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/it-take/-/it-take-1.0.0.tgz", + "integrity": "sha512-zfr2iAtekTGhHVWzCqqqgDnHhmzdzfCW92L0GvbaSFlvc3n2Ep/sponzmlNl2Kg39N5Py+02v+Aypc+i2c+9og==" + }, "it-to-stream": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/it-to-stream/-/it-to-stream-0.1.2.tgz", - "integrity": "sha512-DTB5TJRZG3untmZehcaFN0kGWl2bNv7tnJRgQHAO9QEt8jfvVRrebZtnD5NZd4SCj4WVPjl0LSrugNWE/UaZRQ==", + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/it-to-stream/-/it-to-stream-1.0.0.tgz", + "integrity": "sha512-pLULMZMAB/+vbdvbZtebC0nWBTbG581lk6w8P7DfIIIKUfa8FbY7Oi0FxZcFPbxvISs7A9E+cMpLDBc1XhpAOA==", "requires": { - "buffer": "^5.6.0", + "buffer": "^6.0.3", "fast-fifo": "^1.0.0", "get-iterator": "^1.0.2", "p-defer": "^3.0.0", "p-fifo": "^1.0.0", "readable-stream": "^3.6.0" + }, + "dependencies": { + "buffer": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", + "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", + "requires": { + "base64-js": "^1.3.1", + "ieee754": "^1.2.1" + } + } } }, "it-ws": { @@ -10409,14 +10889,14 @@ } }, "just-extend": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/just-extend/-/just-extend-4.1.1.tgz", - "integrity": "sha512-aWgeGFW67BP3e5181Ep1Fv2v8z//iBJfrvyTnq8wG86vEESwmonn1zPBJ0VfmT9CJq2FIT0VsETtrNFm2a+SHA==" + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/just-extend/-/just-extend-4.2.1.tgz", + "integrity": "sha512-g3UB796vUFIY90VIv/WX3L2c8CS2MdWUww3CNrYmqza1Fg0DURc2K/O4YrnklBdQarSJ/y8JnJYDGc+1iumQjg==" }, "keypair": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/keypair/-/keypair-1.0.2.tgz", - "integrity": "sha512-7zRr8fKOWp/N8xfZyZV6WG1CUvKNiNahSDI4vjJnPJD60lHtIg62dpv60yCgcM2PP8QKv4S2UkZl+8MsYmQRpw==" + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/keypair/-/keypair-1.0.3.tgz", + "integrity": "sha512-0wjZ2z/SfZZq01+3/8jYLd8aEShSa+aat1zyPGQY3IuKoEAp6DJGvu2zt6snELrQU9jbCkIlCyNOD7RdQbHhkQ==" }, "killable": { "version": "1.0.1", @@ -10470,255 +10950,547 @@ } }, "libp2p": { - "version": "0.28.3", - "resolved": "https://registry.npmjs.org/libp2p/-/libp2p-0.28.3.tgz", - "integrity": "sha512-vN+5Em6+9hI04f9/X9uP1kWXz+pOW4C2piR/J/E0AZNQJmW5wVb2yX+4jd9D2GBSYLunWGZgHVx7O1FHs1HZnQ==", + "version": "0.30.10", + "resolved": "https://registry.npmjs.org/libp2p/-/libp2p-0.30.10.tgz", + "integrity": "sha512-TdFLG4CF7/tLF1ypwNM8+q1YshW3+hYWDWYo6IA5Zyhg2MFDPdsUqaX4JLG0EiYHQvVcrUQF8B7rL49YbDHE7Q==", "requires": { + "@motrix/nat-api": "^0.3.1", "abort-controller": "^3.0.0", - "aggregate-error": "^3.0.1", - "any-signal": "^1.1.0", - "bignumber.js": "^9.0.0", + "aggregate-error": "^3.1.0", + "any-signal": "^2.1.1", + "bignumber.js": "^9.0.1", + "cids": "^1.1.5", "class-is": "^1.1.0", - "debug": "^4.1.1", + "debug": "^4.3.1", "err-code": "^2.0.0", - "events": "^3.1.0", + "es6-promisify": "^6.1.1", + "events": "^3.2.0", "hashlru": "^2.3.0", - "interface-datastore": "^1.0.4", - "ipfs-utils": "^2.2.0", - "it-all": "^1.0.1", + "interface-datastore": "^3.0.3", + "ipfs-utils": "^6.0.0", + "it-all": "^1.0.4", "it-buffer": "^0.1.2", - "it-handshake": "^1.0.1", - "it-length-prefixed": "^3.0.1", + "it-drain": "^1.0.3", + "it-filter": "^1.0.1", + "it-first": "^1.0.4", + "it-handshake": "^1.0.2", + "it-length-prefixed": "^3.1.0", + "it-map": "^1.0.4", + "it-merge": "1.0.0", "it-pipe": "^1.1.0", "it-protocol-buffers": "^0.2.0", - "libp2p-crypto": "^0.17.6", - "libp2p-interfaces": "^0.3.0", - "libp2p-utils": "^0.1.2", - "mafmt": "^7.0.0", - "merge-options": "^2.0.0", + "it-take": "1.0.0", + "libp2p-crypto": "^0.19.0", + "libp2p-interfaces": "^0.8.1", + "libp2p-utils": "^0.2.2", + "mafmt": "^8.0.0", + "merge-options": "^3.0.4", "moving-average": "^1.0.0", - "multiaddr": "^7.4.3", - "multistream-select": "^0.15.0", + "multiaddr": "^8.1.0", + "multicodec": "^2.1.0", + "multihashing-async": "^2.0.1", + "multistream-select": "^1.0.0", "mutable-proxy": "^1.0.0", - "node-forge": "^0.9.1", + "node-forge": "^0.10.0", "p-any": "^3.0.0", "p-fifo": "^1.0.0", + "p-retry": "^4.2.0", "p-settle": "^4.0.1", - "peer-id": "^0.13.11", - "protons": "^1.0.1", + "peer-id": "^0.14.2", + "private-ip": "^2.0.0", + "protons": "^2.0.0", "retimer": "^2.0.0", "sanitize-filename": "^1.6.3", - "streaming-iterables": "^4.1.0", - "timeout-abort-controller": "^1.0.0", + "set-delayed-interval": "^1.0.0", + "streaming-iterables": "^5.0.2", + "timeout-abort-controller": "^1.1.1", + "varint": "^6.0.0", "xsalsa20": "^1.0.2" + }, + "dependencies": { + "cids": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/cids/-/cids-1.1.6.tgz", + "integrity": "sha512-5P+Jas2bVpjiHibp/SOwKY+v7JhAjTChaAZN+vCIrsWXn/JZV0frX22Vp5zZgEyJRPco79pX+yNQ2S3LkRukHQ==", + "requires": { + "multibase": "^4.0.1", + "multicodec": "^3.0.1", + "multihashes": "^4.0.1", + "uint8arrays": "^2.1.3" + }, + "dependencies": { + "multicodec": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/multicodec/-/multicodec-3.0.1.tgz", + "integrity": "sha512-Y6j3wiPojvkF/z6KFIGt84KdJdP2oILEdzc/3YbD3qQ3EerhqtYlfsZTPPNVoCCxNZZdzIpCKrdYFSav17sIrQ==", + "requires": { + "uint8arrays": "^2.1.3", + "varint": "^5.0.2" + } + }, + "varint": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/varint/-/varint-5.0.2.tgz", + "integrity": "sha512-lKxKYG6H03yCZUpAGOPOsMcGxd1RHCu1iKvEHYDPmTyq2HueGhD73ssNBqqQWfvYs04G9iUFRvmAVLW20Jw6ow==" + } + } + }, + "it-length-prefixed": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/it-length-prefixed/-/it-length-prefixed-3.1.0.tgz", + "integrity": "sha512-E5GwT6qfZEwh3/XThyYwgjKJ4/hxvTC9kdbj3gxXDeUDKtC7+K2T647sPeX7xDEWqunsnoQyvOrjoHPegaT3uw==", + "requires": { + "@types/bl": "^2.1.0", + "bl": "^4.0.2", + "buffer": "^5.5.0", + "varint": "^5.0.0" + }, + "dependencies": { + "varint": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/varint/-/varint-5.0.2.tgz", + "integrity": "sha512-lKxKYG6H03yCZUpAGOPOsMcGxd1RHCu1iKvEHYDPmTyq2HueGhD73ssNBqqQWfvYs04G9iUFRvmAVLW20Jw6ow==" + } + } + }, + "multibase": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/multibase/-/multibase-4.0.4.tgz", + "integrity": "sha512-8/JmrdSGzlw6KTgAJCOqUBSGd1V6186i/X8dDCGy/lbCKrQ+1QB6f3HE+wPr7Tpdj4U3gutaj9jG2rNX6UpiJg==", + "requires": { + "@multiformats/base-x": "^4.0.1" + } + }, + "multicodec": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/multicodec/-/multicodec-2.1.3.tgz", + "integrity": "sha512-0tOH2Gtio39uO41o+2xl9UhRkCWxU5ZmZSbFCh/OjGzkWJI8e6lkN/s4Mj1YfyWoBod+2+S3W+6wO6nhkwN8pA==", + "requires": { + "uint8arrays": "1.1.0", + "varint": "^6.0.0" + }, + "dependencies": { + "multibase": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/multibase/-/multibase-3.1.2.tgz", + "integrity": "sha512-bpklWHs70LO3smJUHOjcnzGceJJvn9ui0Vau6Za0B/GBepaXswmW8Ufea0uD9pROf/qCQ4N4lZ3sf3U+SNf0tw==", + "requires": { + "@multiformats/base-x": "^4.0.1", + "web-encoding": "^1.0.6" + } + }, + "uint8arrays": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/uint8arrays/-/uint8arrays-1.1.0.tgz", + "integrity": "sha512-cLdlZ6jnFczsKf5IH1gPHTtcHtPGho5r4CvctohmQjw8K7Q3gFdfIGHxSTdTaCKrL4w09SsPRJTqRS0drYeszA==", + "requires": { + "multibase": "^3.0.0", + "web-encoding": "^1.0.2" + } + } + } + }, + "multihashes": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/multihashes/-/multihashes-4.0.2.tgz", + "integrity": "sha512-xpx++1iZr4ZQHjN1mcrXS6904R36LWLxX/CBifczjtmrtCXEX623DMWOF1eiNSg+pFpiZDFVBgou/4v6ayCHSQ==", + "requires": { + "multibase": "^4.0.1", + "uint8arrays": "^2.1.3", + "varint": "^5.0.2" + }, + "dependencies": { + "varint": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/varint/-/varint-5.0.2.tgz", + "integrity": "sha512-lKxKYG6H03yCZUpAGOPOsMcGxd1RHCu1iKvEHYDPmTyq2HueGhD73ssNBqqQWfvYs04G9iUFRvmAVLW20Jw6ow==" + } + } + }, + "p-retry": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/p-retry/-/p-retry-4.5.0.tgz", + "integrity": "sha512-5Hwh4aVQSu6BEP+w2zKlVXtFAaYQe1qWuVADSgoeVlLjwe/Q/AMSoRR4MDeaAfu8llT+YNbEijWu/YF3m6avkg==", + "requires": { + "@types/retry": "^0.12.0", + "retry": "^0.12.0" + } + }, + "varint": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/varint/-/varint-6.0.0.tgz", + "integrity": "sha512-cXEIW6cfr15lFv563k4GuVuW/fiwjknytD37jIOLSdSWuOI6WnO/oKwmP2FQTU2l01LP8/M5TSAJpzUaGe3uWg==" + } } }, "libp2p-crypto": { - "version": "0.17.9", - "resolved": "https://registry.npmjs.org/libp2p-crypto/-/libp2p-crypto-0.17.9.tgz", - "integrity": "sha512-nH3vTfQ4UqhZ1SORTP7HOsmFdJBs604Qy0Xi3IFFtU6ofYt+rFAZ2QNgo4MH1ZTT38/LEM374N9K7yzj1IQm0g==", + "version": "0.19.0", + "resolved": "https://registry.npmjs.org/libp2p-crypto/-/libp2p-crypto-0.19.0.tgz", + "integrity": "sha512-w4tduG32px1i6TwekYZBSvizZTvDdMReZkE4DhUkf9IQ8WSqSo98K+6IZaYYM6PzWd5arbcAQQcFCRalJu9Ytw==", "requires": { - "buffer": "^5.5.0", "err-code": "^2.0.0", "is-typedarray": "^1.0.0", "iso-random-stream": "^1.1.0", "keypair": "^1.0.1", - "multibase": "^1.0.1", - "multicodec": "^1.0.4", - "multihashing-async": "^0.8.1", - "node-forge": "^0.9.1", + "multibase": "^3.0.0", + "multicodec": "^2.0.0", + "multihashing-async": "^2.0.1", + "node-forge": "^0.10.0", "pem-jwk": "^2.0.0", - "protons": "^1.2.1", + "protons": "^2.0.0", "secp256k1": "^4.0.0", - "uint8arrays": "^1.0.0", + "uint8arrays": "^1.1.0", "ursa-optional": "^0.10.1" }, "dependencies": { - "multibase": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/multibase/-/multibase-1.0.1.tgz", - "integrity": "sha512-KcCxpBVY8fdVKu4dJMAahq4F/2Z/9xqEjIiR7PiMe7LRGeorFn2NLmicN6nLBCqQvft6MG2Lc9X5P0IdyvnxEw==", + "buffer": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", + "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", "requires": { - "base-x": "^3.0.8", - "buffer": "^5.5.0" + "base64-js": "^1.3.1", + "ieee754": "^1.2.1" } + }, + "iso-random-stream": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/iso-random-stream/-/iso-random-stream-1.1.2.tgz", + "integrity": "sha512-7y0tsBBgQs544iTYjyrMp5xvgrbYR8b+plQq1Bryp+03p0LssrxC9C1M0oHv4QESDt7d95c74XvMk/yawKqX+A==", + "requires": { + "buffer": "^6.0.3", + "readable-stream": "^3.4.0" + } + }, + "multibase": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/multibase/-/multibase-3.1.2.tgz", + "integrity": "sha512-bpklWHs70LO3smJUHOjcnzGceJJvn9ui0Vau6Za0B/GBepaXswmW8Ufea0uD9pROf/qCQ4N4lZ3sf3U+SNf0tw==", + "requires": { + "@multiformats/base-x": "^4.0.1", + "web-encoding": "^1.0.6" + } + }, + "multicodec": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/multicodec/-/multicodec-2.1.3.tgz", + "integrity": "sha512-0tOH2Gtio39uO41o+2xl9UhRkCWxU5ZmZSbFCh/OjGzkWJI8e6lkN/s4Mj1YfyWoBod+2+S3W+6wO6nhkwN8pA==", + "requires": { + "uint8arrays": "1.1.0", + "varint": "^6.0.0" + } + }, + "uint8arrays": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/uint8arrays/-/uint8arrays-1.1.0.tgz", + "integrity": "sha512-cLdlZ6jnFczsKf5IH1gPHTtcHtPGho5r4CvctohmQjw8K7Q3gFdfIGHxSTdTaCKrL4w09SsPRJTqRS0drYeszA==", + "requires": { + "multibase": "^3.0.0", + "web-encoding": "^1.0.2" + } + }, + "varint": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/varint/-/varint-6.0.0.tgz", + "integrity": "sha512-cXEIW6cfr15lFv563k4GuVuW/fiwjknytD37jIOLSdSWuOI6WnO/oKwmP2FQTU2l01LP8/M5TSAJpzUaGe3uWg==" } } }, "libp2p-interfaces": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/libp2p-interfaces/-/libp2p-interfaces-0.3.2.tgz", - "integrity": "sha512-EZviUYO5d4T/mYwDFMC/tVvLiS95+Ui8agn/DovsnUhlYPojLJJNapEJYFqFbgKqP+dxpMVMZ5CyJXD334qsuA==", + "version": "0.8.4", + "resolved": "https://registry.npmjs.org/libp2p-interfaces/-/libp2p-interfaces-0.8.4.tgz", + "integrity": "sha512-LaPkXVhqgAcFwqsyqGSZNAjgXSa2V+skOfIKE2UtQHaduwLct2KpFDOmvhRHTWHfRHwI9bSCskDB7xWGNTwZsQ==", "requires": { + "@types/bl": "^2.1.0", "abort-controller": "^3.0.0", "abortable-iterator": "^3.0.0", - "buffer": "^5.6.0", "chai": "^4.2.0", "chai-checkmark": "^1.0.1", - "class-is": "^1.1.0", - "delay": "^4.3.0", + "debug": "^4.3.1", + "delay": "^4.4.0", "detect-node": "^2.0.4", "dirty-chai": "^2.0.1", - "err-code": "^2.0.0", - "it-goodbye": "^2.0.1", + "err-code": "^2.0.3", + "it-goodbye": "^2.0.2", + "it-length-prefixed": "^3.1.0", "it-pair": "^1.0.0", "it-pipe": "^1.1.0", - "libp2p-tcp": "^0.14.5", - "multiaddr": "^7.5.0", + "it-pushable": "^1.4.0", + "libp2p-crypto": "^0.19.0", + "libp2p-tcp": "^0.15.0", + "multiaddr": "^8.1.2", + "multibase": "^3.1.1", + "multihashes": "^3.1.1", "p-defer": "^3.0.0", - "p-limit": "^2.3.0", - "p-wait-for": "^3.1.0", - "peer-id": "^0.13.13", - "sinon": "^9.0.2", - "streaming-iterables": "^5.0.2" + "p-limit": "^3.1.0", + "p-wait-for": "^3.2.0", + "peer-id": "^0.14.2", + "protons": "^2.0.0", + "sinon": "^9.2.4", + "streaming-iterables": "^5.0.4", + "uint8arrays": "^2.0.5" }, "dependencies": { - "multibase": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/multibase/-/multibase-1.0.1.tgz", - "integrity": "sha512-KcCxpBVY8fdVKu4dJMAahq4F/2Z/9xqEjIiR7PiMe7LRGeorFn2NLmicN6nLBCqQvft6MG2Lc9X5P0IdyvnxEw==", + "it-length-prefixed": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/it-length-prefixed/-/it-length-prefixed-3.1.0.tgz", + "integrity": "sha512-E5GwT6qfZEwh3/XThyYwgjKJ4/hxvTC9kdbj3gxXDeUDKtC7+K2T647sPeX7xDEWqunsnoQyvOrjoHPegaT3uw==", "requires": { - "base-x": "^3.0.8", - "buffer": "^5.5.0" - } - }, - "multihashes": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/multihashes/-/multihashes-1.0.1.tgz", - "integrity": "sha512-S27Tepg4i8atNiFaU5ZOm3+gl3KQlUanLs/jWcBxQHFttgq+5x1OgbQmf2d8axJ/48zYGBd/wT9d723USMFduw==", - "requires": { - "buffer": "^5.6.0", - "multibase": "^1.0.1", + "@types/bl": "^2.1.0", + "bl": "^4.0.2", + "buffer": "^5.5.0", "varint": "^5.0.0" } }, - "peer-id": { - "version": "0.13.13", - "resolved": "https://registry.npmjs.org/peer-id/-/peer-id-0.13.13.tgz", - "integrity": "sha512-5FpBXN6PDTcHs51gkHWPf0OIQZAO3Z10i6lWc+GaoxTU4bQHtsoKFnhxoXo5Ze04JblpzIrtowkluLSCLP1WYg==", + "multibase": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/multibase/-/multibase-3.1.2.tgz", + "integrity": "sha512-bpklWHs70LO3smJUHOjcnzGceJJvn9ui0Vau6Za0B/GBepaXswmW8Ufea0uD9pROf/qCQ4N4lZ3sf3U+SNf0tw==", "requires": { - "buffer": "^5.5.0", - "cids": "^0.8.0", - "class-is": "^1.1.0", - "libp2p-crypto": "^0.17.7", - "minimist": "^1.2.5", - "multihashes": "^1.0.1", - "protons": "^1.0.2" + "@multiformats/base-x": "^4.0.1", + "web-encoding": "^1.0.6" } }, - "streaming-iterables": { - "version": "5.0.4", - "resolved": "https://registry.npmjs.org/streaming-iterables/-/streaming-iterables-5.0.4.tgz", - "integrity": "sha512-nEs6hBGIPsVz6uq6pscGGKfoPDQWrDQW0b0UHurtSDysekfKLmkPg7FQVRE2sj3Rad6yUo9E1sGTxOWyYsHQ/g==" + "multihashes": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/multihashes/-/multihashes-3.1.2.tgz", + "integrity": "sha512-AP4IoV/YzkNrfbQKZE3OMPibrmy350OmCd6cJkwyM8oExaXIlOY4UnOOVSQtAEuq/LR01XfXKCESidzZvSwHCQ==", + "requires": { + "multibase": "^3.1.0", + "uint8arrays": "^2.0.5", + "varint": "^6.0.0" + }, + "dependencies": { + "varint": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/varint/-/varint-6.0.0.tgz", + "integrity": "sha512-cXEIW6cfr15lFv563k4GuVuW/fiwjknytD37jIOLSdSWuOI6WnO/oKwmP2FQTU2l01LP8/M5TSAJpzUaGe3uWg==" + } + } + }, + "p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "requires": { + "yocto-queue": "^0.1.0" + } } } }, "libp2p-mplex": { - "version": "0.9.5", - "resolved": "https://registry.npmjs.org/libp2p-mplex/-/libp2p-mplex-0.9.5.tgz", - "integrity": "sha512-3YHtuhE5GWtWzsvz3zIwZMLHxMcwpPnI2HgT/FZzvi8kYF00Y6psZtzC9p+yDiu9deeq5ZlmcbKzKA36k8VoSQ==", + "version": "0.10.2", + "resolved": "https://registry.npmjs.org/libp2p-mplex/-/libp2p-mplex-0.10.2.tgz", + "integrity": "sha512-fNdlPTts2MmGalPTYdQtzeGeuM73je9mP+2OvB6Gdn5vP9LeutUzUV4wvD9ISDVi8Gru5BzCsIBiS3WjxQqjdw==", "requires": { "abort-controller": "^3.0.0", "abortable-iterator": "^3.0.0", "bl": "^4.0.0", - "buffer": "^5.5.0", - "debug": "^4.1.1", - "it-pipe": "^1.0.1", - "it-pushable": "^1.3.1", - "varint": "^5.0.0" - } - }, - "libp2p-secio": { - "version": "0.12.5", - "resolved": "https://registry.npmjs.org/libp2p-secio/-/libp2p-secio-0.12.5.tgz", - "integrity": "sha512-S4/i7Bye/utt7FBmJS97XNLALAzvKmKLuqnwpUn3lWI1ns+Hx+tWu5lMFIobJu1BNvxapzCHkkq8H5jqqdzlRQ==", - "requires": { - "bl": "^4.0.0", - "debug": "^4.1.1", - "it-length-prefixed": "^3.0.1", - "it-pair": "^1.0.0", - "it-pb-rpc": "^0.1.4", + "debug": "^4.3.1", + "err-code": "^2.0.3", "it-pipe": "^1.1.0", - "libp2p-crypto": "^0.17.3", - "libp2p-interfaces": "^0.2.1", - "multiaddr": "^7.2.1", - "multihashing-async": "^0.8.0", - "peer-id": "^0.13.6", - "protons": "^1.0.2" + "it-pushable": "^1.4.1", + "varint": "^6.0.0" }, "dependencies": { - "libp2p-interfaces": { - "version": "0.2.8", - "resolved": "https://registry.npmjs.org/libp2p-interfaces/-/libp2p-interfaces-0.2.8.tgz", - "integrity": "sha512-Uzjlzbjk7Bx9giSU2z3qbQv/N8iV9ARL7GV5g9UNCXEYV+lPx0CUX8egnUlxf7/EMjUTz1PsSsf8C7nOZDbVJQ==", + "varint": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/varint/-/varint-6.0.0.tgz", + "integrity": "sha512-cXEIW6cfr15lFv563k4GuVuW/fiwjknytD37jIOLSdSWuOI6WnO/oKwmP2FQTU2l01LP8/M5TSAJpzUaGe3uWg==" + } + } + }, + "libp2p-noise": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/libp2p-noise/-/libp2p-noise-2.0.5.tgz", + "integrity": "sha512-hmR1Y4bJ6hxEO+1aIF1HeJrUNh9NHUbH8gUTtMqpIe7zfdggGau9XKMY0InbafBPFF/WxeIOJDKZiQV4qy2fFg==", + "requires": { + "bcrypto": "^5.4.0", + "debug": "^4.3.1", + "it-buffer": "^0.1.1", + "it-length-prefixed": "^3.0.0", + "it-pair": "^1.0.0", + "it-pb-rpc": "^0.1.9", + "it-pipe": "^1.1.0", + "libp2p-crypto": "^0.19.0", + "peer-id": "^0.14.3", + "protobufjs": "^6.10.1", + "uint8arrays": "^2.0.5" + } + }, + "libp2p-tcp": { + "version": "0.15.4", + "resolved": "https://registry.npmjs.org/libp2p-tcp/-/libp2p-tcp-0.15.4.tgz", + "integrity": "sha512-MqXIlqV7t9z0A1Ww9Omd2XIlndcYOAh5R6kWRZ8Vo/CITazKUC5ZGNoj23hq/aEPaX8p5XmJs2BKESg/OuhGhQ==", + "requires": { + "abortable-iterator": "^3.0.0", + "class-is": "^1.1.0", + "debug": "^4.3.1", + "err-code": "^3.0.1", + "libp2p-utils": "^0.3.0", + "mafmt": "^9.0.0", + "multiaddr": "^9.0.1", + "stream-to-it": "^0.2.2" + }, + "dependencies": { + "cids": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/cids/-/cids-1.1.6.tgz", + "integrity": "sha512-5P+Jas2bVpjiHibp/SOwKY+v7JhAjTChaAZN+vCIrsWXn/JZV0frX22Vp5zZgEyJRPco79pX+yNQ2S3LkRukHQ==", + "requires": { + "multibase": "^4.0.1", + "multicodec": "^3.0.1", + "multihashes": "^4.0.1", + "uint8arrays": "^2.1.3" + } + }, + "err-code": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/err-code/-/err-code-3.0.1.tgz", + "integrity": "sha512-GiaH0KJUewYok+eeY05IIgjtAe4Yltygk9Wqp1V5yVWLdhf0hYZchRjNIT9bb0mSwRcIusT3cx7PJUf3zEIfUA==" + }, + "libp2p-utils": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/libp2p-utils/-/libp2p-utils-0.3.1.tgz", + "integrity": "sha512-LOVfww7a6Rhtoupl3z1ABuTEli5whY3VLTB9QntsOIwbOcX9GfmjuhqYbEDht9lVPAQl+rCUWbfDMvK121ryUg==", "requires": { - "abort-controller": "^3.0.0", "abortable-iterator": "^3.0.0", - "buffer": "^5.6.0", - "chai": "^4.2.0", - "chai-checkmark": "^1.0.1", - "class-is": "^1.1.0", - "detect-node": "^2.0.4", - "dirty-chai": "^2.0.1", - "err-code": "^2.0.0", - "it-goodbye": "^2.0.1", - "it-pair": "^1.0.0", - "it-pipe": "^1.0.1", - "libp2p-tcp": "^0.14.1", - "multiaddr": "^7.4.3", - "p-limit": "^2.3.0", - "p-wait-for": "^3.1.0", - "peer-id": "^0.13.11", - "peer-info": "^0.17.0", - "sinon": "^9.0.2", - "streaming-iterables": "^4.1.0" + "debug": "^4.3.0", + "err-code": "^3.0.1", + "ip-address": "^7.1.0", + "is-loopback-addr": "^1.0.0", + "multiaddr": "^9.0.1", + "private-ip": "^2.1.1" + } + }, + "mafmt": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/mafmt/-/mafmt-9.0.0.tgz", + "integrity": "sha512-BwKL6FJxc6R85K6gFE/pX7MVyCp0NkM2DJHg0RatxVgDlK4g9kqtfXQUt2iReSmTcgZss/Q/Bdfa2KTg4KyC+g==", + "requires": { + "multiaddr": "^9.0.1" + } + }, + "multiaddr": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/multiaddr/-/multiaddr-9.0.1.tgz", + "integrity": "sha512-fubxMjVoRPcz3GYBb63Z6ADCY6BoqezbnL2o8owDcfYqhwW61oFtIlsZGiNKIVC2Fk1Od5rf/3z34QSGJFT/uA==", + "requires": { + "cids": "^1.0.0", + "dns-over-http-resolver": "^1.0.0", + "err-code": "^3.0.1", + "is-ip": "^3.1.0", + "multibase": "^4.0.2", + "uint8arrays": "^2.1.3", + "varint": "^6.0.0" + } + }, + "multibase": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/multibase/-/multibase-4.0.4.tgz", + "integrity": "sha512-8/JmrdSGzlw6KTgAJCOqUBSGd1V6186i/X8dDCGy/lbCKrQ+1QB6f3HE+wPr7Tpdj4U3gutaj9jG2rNX6UpiJg==", + "requires": { + "@multiformats/base-x": "^4.0.1" + } + }, + "multicodec": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/multicodec/-/multicodec-3.0.1.tgz", + "integrity": "sha512-Y6j3wiPojvkF/z6KFIGt84KdJdP2oILEdzc/3YbD3qQ3EerhqtYlfsZTPPNVoCCxNZZdzIpCKrdYFSav17sIrQ==", + "requires": { + "uint8arrays": "^2.1.3", + "varint": "^5.0.2" + }, + "dependencies": { + "varint": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/varint/-/varint-5.0.2.tgz", + "integrity": "sha512-lKxKYG6H03yCZUpAGOPOsMcGxd1RHCu1iKvEHYDPmTyq2HueGhD73ssNBqqQWfvYs04G9iUFRvmAVLW20Jw6ow==" + } + } + }, + "multihashes": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/multihashes/-/multihashes-4.0.2.tgz", + "integrity": "sha512-xpx++1iZr4ZQHjN1mcrXS6904R36LWLxX/CBifczjtmrtCXEX623DMWOF1eiNSg+pFpiZDFVBgou/4v6ayCHSQ==", + "requires": { + "multibase": "^4.0.1", + "uint8arrays": "^2.1.3", + "varint": "^5.0.2" + }, + "dependencies": { + "varint": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/varint/-/varint-5.0.2.tgz", + "integrity": "sha512-lKxKYG6H03yCZUpAGOPOsMcGxd1RHCu1iKvEHYDPmTyq2HueGhD73ssNBqqQWfvYs04G9iUFRvmAVLW20Jw6ow==" + } + } + }, + "varint": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/varint/-/varint-6.0.0.tgz", + "integrity": "sha512-cXEIW6cfr15lFv563k4GuVuW/fiwjknytD37jIOLSdSWuOI6WnO/oKwmP2FQTU2l01LP8/M5TSAJpzUaGe3uWg==" + } + } + }, + "libp2p-utils": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/libp2p-utils/-/libp2p-utils-0.2.3.tgz", + "integrity": "sha512-9BoMCgvJF7LJ+JVMaHtqfCqhZN4i/sx0DrY6lf9U0Rq9uUgQ9qTai2O9LXcfr1LOS3OMMeRLsKk25MMgsf7W3w==", + "requires": { + "abortable-iterator": "^3.0.0", + "debug": "^4.2.0", + "err-code": "^2.0.3", + "ip-address": "^6.1.0", + "is-loopback-addr": "^1.0.0", + "multiaddr": "^8.0.0", + "private-ip": "^2.1.1" + }, + "dependencies": { + "ip-address": { + "version": "6.4.0", + "resolved": "https://registry.npmjs.org/ip-address/-/ip-address-6.4.0.tgz", + "integrity": "sha512-c5uxc2WUTuRBVHT/6r4m7HIr/DfV0bF6DvLH3iZGSK8wp8iMwwZSgIq2do0asFf8q9ECug0SE+6+1ACMe4sorA==", + "requires": { + "jsbn": "1.1.0", + "lodash.find": "4.6.0", + "lodash.max": "4.0.1", + "lodash.merge": "4.6.2", + "lodash.padstart": "4.6.1", + "lodash.repeat": "4.1.0", + "sprintf-js": "1.1.2" } } } }, - "libp2p-tcp": { - "version": "0.14.6", - "resolved": "https://registry.npmjs.org/libp2p-tcp/-/libp2p-tcp-0.14.6.tgz", - "integrity": "sha512-DeOdaH5QGVMKZflJmZq3dSWROxzD/YU1MFDxfi+DT4JVMcxfVMd+SpVEPMyk2wyA28H4AdGIRsH78yPjlFIyZQ==", - "requires": { - "abortable-iterator": "^3.0.0", - "class-is": "^1.1.0", - "debug": "^4.1.1", - "err-code": "^2.0.0", - "libp2p-utils": "^0.1.2", - "mafmt": "^7.1.0", - "multiaddr": "^7.5.0", - "stream-to-it": "^0.2.2" - } - }, - "libp2p-utils": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/libp2p-utils/-/libp2p-utils-0.1.3.tgz", - "integrity": "sha512-ApiQu45O+wTArSuAA8I0FR+CRf9lqoVTR1iGqSPx57x3iCzAtf3uKEOFxUDkgdWCnhpo04VKr2TLzxEYvkxd/w==", - "requires": { - "abortable-iterator": "^3.0.0", - "debug": "^4.1.1", - "err-code": "^2.0.3", - "ip-address": "^6.1.0", - "multiaddr": "^7.5.0" - } - }, "libp2p-websockets": { - "version": "0.13.6", - "resolved": "https://registry.npmjs.org/libp2p-websockets/-/libp2p-websockets-0.13.6.tgz", - "integrity": "sha512-3M2Fht4QtwIOrIxESJIFqsltmLGB2FQhtZXD4SxnLhBADqe3CYyrad+zsDjQRXlXU7u08l9lWM5gHWDtmqX7Aw==", + "version": "0.15.3", + "resolved": "https://registry.npmjs.org/libp2p-websockets/-/libp2p-websockets-0.15.3.tgz", + "integrity": "sha512-GbrdacmtqE4rdb8+UnarRlMvnUwfO4T4ABCMAGkVkwb7faAIA5S3bfCYnTAxRV1nvESAk6KwR+4JSkGM+A7j5w==", "requires": { "abortable-iterator": "^3.0.0", - "buffer": "^5.5.0", "class-is": "^1.1.0", - "debug": "^4.1.1", - "err-code": "^2.0.0", - "it-ws": "^3.0.0", - "libp2p-utils": "~0.1.0", - "mafmt": "^7.0.0", - "multiaddr": "^7.1.0", - "multiaddr-to-uri": "^5.0.0", - "p-timeout": "^3.2.0" + "debug": "^4.2.0", + "err-code": "^3.0.1", + "ipfs-utils": "^6.0.1", + "it-ws": "^3.0.2", + "libp2p-utils": "^0.2.1", + "mafmt": "^8.0.1", + "multiaddr": "^8.1.1", + "multiaddr-to-uri": "^6.0.0", + "p-defer": "^3.0.0", + "p-timeout": "^4.1.0" + }, + "dependencies": { + "err-code": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/err-code/-/err-code-3.0.1.tgz", + "integrity": "sha512-GiaH0KJUewYok+eeY05IIgjtAe4Yltygk9Wqp1V5yVWLdhf0hYZchRjNIT9bb0mSwRcIusT3cx7PJUf3zEIfUA==" + }, + "p-timeout": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-4.1.0.tgz", + "integrity": "sha512-+/wmHtzJuWii1sXn3HCuH/FTwGhrp4tmJTxSKJbfS+vkipci6osxXM5mY0jUiRzWKMTgUT8l7HFbeSwZAynqHw==" + } } }, "lines-and-columns": { @@ -10753,6 +11525,11 @@ "json5": "^2.1.2" } }, + "loady": { + "version": "0.0.5", + "resolved": "https://registry.npmjs.org/loady/-/loady-0.0.5.tgz", + "integrity": "sha512-uxKD2HIj042/HBx77NBcmEPsD+hxCgAtjEWlYNScuUjIsh/62Uyu39GOR68TBR68v+jqDL9zfftCWoUo4y03sQ==" + }, "locate-path": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", @@ -10846,6 +11623,11 @@ "resolved": "https://registry.npmjs.org/loglevel/-/loglevel-1.7.0.tgz", "integrity": "sha512-i2sY04nal5jDcagM3FMfG++T69GEEM8CYuOfeOIvmXzOIcwE9a/CJPR0MFM97pYMj/u10lzz7/zd7+qwhrBTqQ==" }, + "long": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/long/-/long-4.0.0.tgz", + "integrity": "sha512-XsP+KhQif4bjX1kbuSiySJFNAehNxgLb6hPRGJ9QsUr8ajHkuXGdrHmFUTUUXhDwVX2R5bY4JNZEwbUiMhV+MA==" + }, "loose-envify": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", @@ -10893,11 +11675,11 @@ "integrity": "sha1-wNjq82BZ9wV5bh40SBHPTEmNOiY=" }, "mafmt": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/mafmt/-/mafmt-7.1.0.tgz", - "integrity": "sha512-vpeo9S+hepT3k2h5iFxzEHvvR0GPBx9uKaErmnRzYNcaKb03DgOArjEMlgG4a9LcuZZ89a3I8xbeto487n26eA==", + "version": "8.0.4", + "resolved": "https://registry.npmjs.org/mafmt/-/mafmt-8.0.4.tgz", + "integrity": "sha512-wwZ5+PU0vQw10kwQRyZin1Z0dqVOp0BnYlX1xvXHS2fmLwrrQCfU1+3tlW5MRcihUwGz1virnVhbRAU1biKfiw==", "requires": { - "multiaddr": "^7.3.0" + "multiaddr": "^8.0.0" } }, "magic-string": { @@ -11063,11 +11845,11 @@ "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=" }, "merge-options": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/merge-options/-/merge-options-2.0.0.tgz", - "integrity": "sha512-S7xYIeWHl2ZUKF7SDeBhGg6rfv5bKxVBdk95s/I7wVF8d+hjLSztJ/B271cnUiF6CAFduEQ5Zn3HYwAjT16DlQ==", + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/merge-options/-/merge-options-3.0.4.tgz", + "integrity": "sha512-2Sug1+knBjkaMsMgf1ctR1Ujx+Ayku4EdJN4Z+C2+JzoeF7A3OZ9KM2GY0CpQS51NR61LTurMJrRKPhSs3ZRTQ==", "requires": { - "is-plain-obj": "^2.0.0" + "is-plain-obj": "^2.1.0" } }, "merge-stream": { @@ -11313,9 +12095,9 @@ } }, "moving-average": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/moving-average/-/moving-average-1.0.0.tgz", - "integrity": "sha512-97cgMz0U2zciiDp4xRl/n+MYgrm9l7UiYbtsBLPr0rhw6KH3m4LyK2w4d96V6+UwKo+ph7KtQSoL2qgnqZVgvA==" + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/moving-average/-/moving-average-1.0.1.tgz", + "integrity": "sha512-Hl3aUJqu/7LMslHM6mz9Sk1mpFwe4jW5QcmJgukcUGFILBcQW5L9ot8BUVRSuUaW3o/1Twrwmu7w2NTGvw76cA==" }, "ms": { "version": "2.1.2", @@ -11323,24 +12105,130 @@ "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" }, "multiaddr": { - "version": "7.5.0", - "resolved": "https://registry.npmjs.org/multiaddr/-/multiaddr-7.5.0.tgz", - "integrity": "sha512-GvhHsIGDULh06jyb6ev+VfREH9evJCFIRnh3jUt9iEZ6XDbyoisZRFEI9bMvK/AiR6y66y6P+eoBw9mBYMhMvw==", + "version": "8.1.2", + "resolved": "https://registry.npmjs.org/multiaddr/-/multiaddr-8.1.2.tgz", + "integrity": "sha512-r13IzW8+Sv9zab9Gt8RPMIN2WkptIPq99EpAzg4IbJ/zTELhiEwXWr9bAmEatSCI4j/LSA6ESJzvz95JZ+ZYXQ==", "requires": { - "buffer": "^5.5.0", - "cids": "~0.8.0", + "cids": "^1.0.0", "class-is": "^1.1.0", + "dns-over-http-resolver": "^1.0.0", + "err-code": "^2.0.3", "is-ip": "^3.1.0", - "multibase": "^0.7.0", + "multibase": "^3.0.0", + "uint8arrays": "^1.1.0", "varint": "^5.0.0" + }, + "dependencies": { + "cids": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/cids/-/cids-1.1.6.tgz", + "integrity": "sha512-5P+Jas2bVpjiHibp/SOwKY+v7JhAjTChaAZN+vCIrsWXn/JZV0frX22Vp5zZgEyJRPco79pX+yNQ2S3LkRukHQ==", + "requires": { + "multibase": "^4.0.1", + "multicodec": "^3.0.1", + "multihashes": "^4.0.1", + "uint8arrays": "^2.1.3" + }, + "dependencies": { + "multibase": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/multibase/-/multibase-4.0.4.tgz", + "integrity": "sha512-8/JmrdSGzlw6KTgAJCOqUBSGd1V6186i/X8dDCGy/lbCKrQ+1QB6f3HE+wPr7Tpdj4U3gutaj9jG2rNX6UpiJg==", + "requires": { + "@multiformats/base-x": "^4.0.1" + } + }, + "uint8arrays": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/uint8arrays/-/uint8arrays-2.1.5.tgz", + "integrity": "sha512-CSR7AO+4AHUeSOnZ/NBNCElDeWfRh9bXtOck27083kc7SznmmHIhNEkEOCQOn0wvrIMjS3IH0TNLR16vuc46mA==", + "requires": { + "multibase": "^4.0.1" + } + } + } + }, + "multibase": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/multibase/-/multibase-3.1.2.tgz", + "integrity": "sha512-bpklWHs70LO3smJUHOjcnzGceJJvn9ui0Vau6Za0B/GBepaXswmW8Ufea0uD9pROf/qCQ4N4lZ3sf3U+SNf0tw==", + "requires": { + "@multiformats/base-x": "^4.0.1", + "web-encoding": "^1.0.6" + } + }, + "multicodec": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/multicodec/-/multicodec-3.0.1.tgz", + "integrity": "sha512-Y6j3wiPojvkF/z6KFIGt84KdJdP2oILEdzc/3YbD3qQ3EerhqtYlfsZTPPNVoCCxNZZdzIpCKrdYFSav17sIrQ==", + "requires": { + "uint8arrays": "^2.1.3", + "varint": "^5.0.2" + }, + "dependencies": { + "multibase": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/multibase/-/multibase-4.0.4.tgz", + "integrity": "sha512-8/JmrdSGzlw6KTgAJCOqUBSGd1V6186i/X8dDCGy/lbCKrQ+1QB6f3HE+wPr7Tpdj4U3gutaj9jG2rNX6UpiJg==", + "requires": { + "@multiformats/base-x": "^4.0.1" + } + }, + "uint8arrays": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/uint8arrays/-/uint8arrays-2.1.5.tgz", + "integrity": "sha512-CSR7AO+4AHUeSOnZ/NBNCElDeWfRh9bXtOck27083kc7SznmmHIhNEkEOCQOn0wvrIMjS3IH0TNLR16vuc46mA==", + "requires": { + "multibase": "^4.0.1" + } + } + } + }, + "multihashes": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/multihashes/-/multihashes-4.0.2.tgz", + "integrity": "sha512-xpx++1iZr4ZQHjN1mcrXS6904R36LWLxX/CBifczjtmrtCXEX623DMWOF1eiNSg+pFpiZDFVBgou/4v6ayCHSQ==", + "requires": { + "multibase": "^4.0.1", + "uint8arrays": "^2.1.3", + "varint": "^5.0.2" + }, + "dependencies": { + "multibase": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/multibase/-/multibase-4.0.4.tgz", + "integrity": "sha512-8/JmrdSGzlw6KTgAJCOqUBSGd1V6186i/X8dDCGy/lbCKrQ+1QB6f3HE+wPr7Tpdj4U3gutaj9jG2rNX6UpiJg==", + "requires": { + "@multiformats/base-x": "^4.0.1" + } + }, + "uint8arrays": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/uint8arrays/-/uint8arrays-2.1.5.tgz", + "integrity": "sha512-CSR7AO+4AHUeSOnZ/NBNCElDeWfRh9bXtOck27083kc7SznmmHIhNEkEOCQOn0wvrIMjS3IH0TNLR16vuc46mA==", + "requires": { + "multibase": "^4.0.1" + } + } + } + }, + "uint8arrays": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/uint8arrays/-/uint8arrays-1.1.0.tgz", + "integrity": "sha512-cLdlZ6jnFczsKf5IH1gPHTtcHtPGho5r4CvctohmQjw8K7Q3gFdfIGHxSTdTaCKrL4w09SsPRJTqRS0drYeszA==", + "requires": { + "multibase": "^3.0.0", + "web-encoding": "^1.0.2" + } + } } }, "multiaddr-to-uri": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/multiaddr-to-uri/-/multiaddr-to-uri-5.1.0.tgz", - "integrity": "sha512-rIlMLkw3yk3RJmf2hxYYzeqPXz4Vx7C4M/hg7BVWhmksDW0rDVNMEyoVb0H1A+sh3deHOh5EAFK87XcW+mFimA==", + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/multiaddr-to-uri/-/multiaddr-to-uri-6.0.0.tgz", + "integrity": "sha512-OjpkVHOXEmIKMO8WChzzQ7aZQcSQX8squxmvtDbRpy7/QNmJ3Z7jv6qyD74C28QtaeNie8O8ngW2AkeiMmKP7A==", "requires": { - "multiaddr": "^7.2.1" + "multiaddr": "^8.0.0" } }, "multibase": { @@ -11386,54 +12274,77 @@ } }, "multihashing-async": { - "version": "0.8.2", - "resolved": "https://registry.npmjs.org/multihashing-async/-/multihashing-async-0.8.2.tgz", - "integrity": "sha512-2lKa1autuCy8x7KIEj9aVNbAb3aIMRFYIwN7mq/zD4pxgNIVgGlm+f6GKY4880EOF2Y3GktHYssRy7TAJQ2DyQ==", + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/multihashing-async/-/multihashing-async-2.1.2.tgz", + "integrity": "sha512-FTPNnWWxwIK5dXXmTFhySSF8Fkdqf7vzqpV09+RWsmfUhrsL/b3Arg3+bRrBnXTtjxm3JRGI3wSAtQHL0QCxhQ==", "requires": { "blakejs": "^1.1.0", - "buffer": "^5.4.3", - "err-code": "^2.0.0", + "err-code": "^3.0.0", "js-sha3": "^0.8.0", - "multihashes": "^1.0.1", - "murmurhash3js-revisited": "^3.0.0" + "multihashes": "^4.0.1", + "murmurhash3js-revisited": "^3.0.0", + "uint8arrays": "^2.1.3" }, "dependencies": { + "err-code": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/err-code/-/err-code-3.0.1.tgz", + "integrity": "sha512-GiaH0KJUewYok+eeY05IIgjtAe4Yltygk9Wqp1V5yVWLdhf0hYZchRjNIT9bb0mSwRcIusT3cx7PJUf3zEIfUA==" + }, "multibase": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/multibase/-/multibase-1.0.1.tgz", - "integrity": "sha512-KcCxpBVY8fdVKu4dJMAahq4F/2Z/9xqEjIiR7PiMe7LRGeorFn2NLmicN6nLBCqQvft6MG2Lc9X5P0IdyvnxEw==", + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/multibase/-/multibase-4.0.4.tgz", + "integrity": "sha512-8/JmrdSGzlw6KTgAJCOqUBSGd1V6186i/X8dDCGy/lbCKrQ+1QB6f3HE+wPr7Tpdj4U3gutaj9jG2rNX6UpiJg==", "requires": { - "base-x": "^3.0.8", - "buffer": "^5.5.0" + "@multiformats/base-x": "^4.0.1" } }, "multihashes": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/multihashes/-/multihashes-1.0.1.tgz", - "integrity": "sha512-S27Tepg4i8atNiFaU5ZOm3+gl3KQlUanLs/jWcBxQHFttgq+5x1OgbQmf2d8axJ/48zYGBd/wT9d723USMFduw==", + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/multihashes/-/multihashes-4.0.2.tgz", + "integrity": "sha512-xpx++1iZr4ZQHjN1mcrXS6904R36LWLxX/CBifczjtmrtCXEX623DMWOF1eiNSg+pFpiZDFVBgou/4v6ayCHSQ==", "requires": { - "buffer": "^5.6.0", - "multibase": "^1.0.1", - "varint": "^5.0.0" + "multibase": "^4.0.1", + "uint8arrays": "^2.1.3", + "varint": "^5.0.2" } } } }, "multistream-select": { - "version": "0.15.2", - "resolved": "https://registry.npmjs.org/multistream-select/-/multistream-select-0.15.2.tgz", - "integrity": "sha512-uoINaq+/9AkiUnyz0/bAZGqHUeWfRICuL9kqUnfuLPKwEr08HH0nbZFBsgfxP+1zzg22kabw8caNztE8ZSPncg==", + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/multistream-select/-/multistream-select-1.0.0.tgz", + "integrity": "sha512-82riQ+qZ0RPY+KbRdeeKKQnFSBCVpUbZ15EniGU2nfwM8NdrpPIeUYXFw4a/pyprcNeRfMgLlG9aCh874p8nJg==", "requires": { "bl": "^4.0.0", - "buffer": "^5.2.1", "debug": "^4.1.1", "err-code": "^2.0.0", - "it-handshake": "^1.0.0", + "it-handshake": "^1.0.2", "it-length-prefixed": "^3.0.0", "it-pipe": "^1.0.1", - "it-pushable": "^1.3.1", "it-reader": "^2.0.0", - "p-defer": "^3.0.0" + "p-defer": "^3.0.0", + "uint8arrays": "^1.1.0" + }, + "dependencies": { + "multibase": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/multibase/-/multibase-3.1.2.tgz", + "integrity": "sha512-bpklWHs70LO3smJUHOjcnzGceJJvn9ui0Vau6Za0B/GBepaXswmW8Ufea0uD9pROf/qCQ4N4lZ3sf3U+SNf0tw==", + "requires": { + "@multiformats/base-x": "^4.0.1", + "web-encoding": "^1.0.6" + } + }, + "uint8arrays": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/uint8arrays/-/uint8arrays-1.1.0.tgz", + "integrity": "sha512-cLdlZ6jnFczsKf5IH1gPHTtcHtPGho5r4CvctohmQjw8K7Q3gFdfIGHxSTdTaCKrL4w09SsPRJTqRS0drYeszA==", + "requires": { + "multibase": "^3.0.0", + "web-encoding": "^1.0.2" + } + } } }, "murmurhash3js-revisited": { @@ -11474,6 +12385,16 @@ "to-regex": "^3.0.1" } }, + "native-abort-controller": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/native-abort-controller/-/native-abort-controller-1.0.3.tgz", + "integrity": "sha512-fd5LY5q06mHKZPD5FmMrn7Lkd2H018oBGKNOAdLpctBDEPFKsfJ1nX9ke+XRa8PEJJpjqrpQkGjq2IZ27QNmYA==" + }, + "native-fetch": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/native-fetch/-/native-fetch-3.0.0.tgz", + "integrity": "sha512-G3Z7vx0IFb/FQ4JxvtqGABsOTIqRWvgQz6e+erkB+JJD6LrszQtMozEHI4EkmgZQvnGHrpLVzUWk7t4sJCIkVw==" + }, "native-url": { "version": "0.2.6", "resolved": "https://registry.npmjs.org/native-url/-/native-url-0.2.6.tgz", @@ -11497,6 +12418,11 @@ "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==" }, + "netmask": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/netmask/-/netmask-2.0.2.tgz", + "integrity": "sha512-dBpDMdxv9Irdq66304OLfEmQ9tbNRFnFTuZiLo+bD+r332bBmMJ8GBLXklIXXgxd3+v9+KUnZaUR5PJMa75Gsg==" + }, "next-tick": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.0.0.tgz", @@ -11546,9 +12472,9 @@ "integrity": "sha512-V4aYg89jEoVRxRb2fJdAg8FHvI7cEyYdVAh94HH0UIK8oJxUfkjlDQN9RbMx+bEjP7+ggMiFRprSti032Oipxw==" }, "node-forge": { - "version": "0.9.2", - "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-0.9.2.tgz", - "integrity": "sha512-naKSScof4Wn+aoHU6HBsifh92Zeicm1GDQKd1vp3Y/kOi8ub0DozCa9KpvYNCXslFHYRmLNiqRopGdTGwNLpNw==" + "version": "0.10.0", + "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-0.10.0.tgz", + "integrity": "sha512-PPmu8eEeG9saEUvI97fm4OYxXVB6bFvyNTyiUOBichBpFG8A1Ljw3bY62+5oOjDEMHRnd0Y7HQ+x7uzxOzC6JA==" }, "node-gyp": { "version": "3.8.0", @@ -12110,9 +13036,9 @@ } }, "p-cancelable": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-2.0.0.tgz", - "integrity": "sha512-wvPXDmbMmu2ksjkB4Z3nZWTSkJEb9lqVdMaCKpZUGJG9TMiNp9XcbG3fn9fPKjem04fJMJnXoyFPk2FmgiaiNg==" + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-2.1.0.tgz", + "integrity": "sha512-HAZyB3ZodPo+BDpb4/Iu7Jv4P6cSazBz9ZM0ChhEXp70scx834aWCEjQRwgt41UzzejUAPdbqqONfRWTPYrPAQ==" }, "p-defer": { "version": "3.0.0", @@ -12412,28 +13338,85 @@ } }, "peer-id": { - "version": "0.13.12", - "resolved": "https://registry.npmjs.org/peer-id/-/peer-id-0.13.12.tgz", - "integrity": "sha512-kiXu62BdJNeOzqpasMiauTFlDsQmevGWftHrMlUA68FMKWeMAtHFJTDGzaMXwPyH3l1MJM+SYb3APxNLGeZP6A==", + "version": "0.14.3", + "resolved": "https://registry.npmjs.org/peer-id/-/peer-id-0.14.3.tgz", + "integrity": "sha512-3ug6gDFWPuzihjjhMC0G/EEyaJaM9JCKPZqvPhwnsbhIUbutbS/MMF8Mb+TdDE1IksOXgCKNmohSZBJ/gFijOg==", "requires": { - "buffer": "^5.5.0", - "cids": "^0.8.0", + "cids": "^1.1.5", "class-is": "^1.1.0", - "libp2p-crypto": "~0.17.3", + "libp2p-crypto": "^0.19.0", "minimist": "^1.2.5", - "multihashes": "~0.4.15", - "protons": "^1.0.2" - } - }, - "peer-info": { - "version": "0.17.5", - "resolved": "https://registry.npmjs.org/peer-info/-/peer-info-0.17.5.tgz", - "integrity": "sha512-ebbbnvdCnb0onWuW+QNXO4KvLPuQ+kih3zezhov2uxHqA6VLbtzMUyQ06IHtwYLr50AYYWyBOSn17g4zEBsFpw==", - "requires": { - "mafmt": "^7.1.0", - "multiaddr": "^7.3.0", - "peer-id": "~0.13.2", - "unique-by": "^1.0.0" + "multihashes": "^3.1.1", + "protons": "^2.0.0", + "uint8arrays": "^2.0.5" + }, + "dependencies": { + "cids": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/cids/-/cids-1.1.6.tgz", + "integrity": "sha512-5P+Jas2bVpjiHibp/SOwKY+v7JhAjTChaAZN+vCIrsWXn/JZV0frX22Vp5zZgEyJRPco79pX+yNQ2S3LkRukHQ==", + "requires": { + "multibase": "^4.0.1", + "multicodec": "^3.0.1", + "multihashes": "^4.0.1", + "uint8arrays": "^2.1.3" + }, + "dependencies": { + "multihashes": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/multihashes/-/multihashes-4.0.2.tgz", + "integrity": "sha512-xpx++1iZr4ZQHjN1mcrXS6904R36LWLxX/CBifczjtmrtCXEX623DMWOF1eiNSg+pFpiZDFVBgou/4v6ayCHSQ==", + "requires": { + "multibase": "^4.0.1", + "uint8arrays": "^2.1.3", + "varint": "^5.0.2" + } + } + } + }, + "multibase": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/multibase/-/multibase-4.0.4.tgz", + "integrity": "sha512-8/JmrdSGzlw6KTgAJCOqUBSGd1V6186i/X8dDCGy/lbCKrQ+1QB6f3HE+wPr7Tpdj4U3gutaj9jG2rNX6UpiJg==", + "requires": { + "@multiformats/base-x": "^4.0.1" + } + }, + "multicodec": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/multicodec/-/multicodec-3.0.1.tgz", + "integrity": "sha512-Y6j3wiPojvkF/z6KFIGt84KdJdP2oILEdzc/3YbD3qQ3EerhqtYlfsZTPPNVoCCxNZZdzIpCKrdYFSav17sIrQ==", + "requires": { + "uint8arrays": "^2.1.3", + "varint": "^5.0.2" + } + }, + "multihashes": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/multihashes/-/multihashes-3.1.2.tgz", + "integrity": "sha512-AP4IoV/YzkNrfbQKZE3OMPibrmy350OmCd6cJkwyM8oExaXIlOY4UnOOVSQtAEuq/LR01XfXKCESidzZvSwHCQ==", + "requires": { + "multibase": "^3.1.0", + "uint8arrays": "^2.0.5", + "varint": "^6.0.0" + }, + "dependencies": { + "multibase": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/multibase/-/multibase-3.1.2.tgz", + "integrity": "sha512-bpklWHs70LO3smJUHOjcnzGceJJvn9ui0Vau6Za0B/GBepaXswmW8Ufea0uD9pROf/qCQ4N4lZ3sf3U+SNf0tw==", + "requires": { + "@multiformats/base-x": "^4.0.1", + "web-encoding": "^1.0.6" + } + }, + "varint": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/varint/-/varint-6.0.0.tgz", + "integrity": "sha512-cXEIW6cfr15lFv563k4GuVuW/fiwjknytD37jIOLSdSWuOI6WnO/oKwmP2FQTU2l01LP8/M5TSAJpzUaGe3uWg==" + } + } + } } }, "pem-jwk": { @@ -13625,6 +14608,15 @@ "react-is": "^17.0.1" } }, + "private-ip": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/private-ip/-/private-ip-2.2.1.tgz", + "integrity": "sha512-jN1WT/br/VNW9xEcwHr6DjtOKxQ5qOIqmh7o+co2TWgq56pZJw99iO3UT1tWdfgsQiyK9FqG4ji3ykwpjFqITA==", + "requires": { + "ip-regex": "^4.3.0", + "netmask": "^2.0.2" + } + }, "process": { "version": "0.11.10", "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", @@ -13679,19 +14671,46 @@ } } }, + "protobufjs": { + "version": "6.10.2", + "resolved": "https://registry.npmjs.org/protobufjs/-/protobufjs-6.10.2.tgz", + "integrity": "sha512-27yj+04uF6ya9l+qfpH187aqEzfCF4+Uit0I9ZBQVqK09hk/SQzKa2MUqUpXaVa7LOFRg1TSSr3lVxGOk6c0SQ==", + "requires": { + "@protobufjs/aspromise": "^1.1.2", + "@protobufjs/base64": "^1.1.2", + "@protobufjs/codegen": "^2.0.4", + "@protobufjs/eventemitter": "^1.1.0", + "@protobufjs/fetch": "^1.1.0", + "@protobufjs/float": "^1.0.2", + "@protobufjs/inquire": "^1.1.0", + "@protobufjs/path": "^1.1.2", + "@protobufjs/pool": "^1.1.0", + "@protobufjs/utf8": "^1.1.0", + "@types/long": "^4.0.1", + "@types/node": "^13.7.0", + "long": "^4.0.0" + }, + "dependencies": { + "@types/node": { + "version": "13.13.50", + "resolved": "https://registry.npmjs.org/@types/node/-/node-13.13.50.tgz", + "integrity": "sha512-y7kkh+hX/0jZNxMyBR/6asG0QMSaPSzgeVK63dhWHl4QAXCQB8lExXmzLL6SzmOgKHydtawpMnNhlDbv7DXPEA==" + } + } + }, "protocol-buffers-schema": { "version": "3.5.1", "resolved": "https://registry.npmjs.org/protocol-buffers-schema/-/protocol-buffers-schema-3.5.1.tgz", "integrity": "sha512-YVCvdhxWNDP8/nJDyXLuM+UFsuPk4+1PB7WGPVDzm3HTHbzFLxQYeW2iZpS4mmnXrQJGBzt230t/BbEb7PrQaw==" }, "protons": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/protons/-/protons-1.2.1.tgz", - "integrity": "sha512-2oqDyc/SN+tNcJf8XxrXhYL7sQn2/OMl8mSdD7NVGsWjMEmAbks4eDVnCyf0vAoRbBWyWTEXWk4D8XfuKVl3zg==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/protons/-/protons-2.0.1.tgz", + "integrity": "sha512-FlmPorLEeCEDPu+uIn0Qardgiy5XqVA4IyNTz9wb9c0e2U7BEXdRcIbx64r09o4Abtf+4B7mkTtMbsIXMxZzKw==", "requires": { - "buffer": "^5.5.0", "protocol-buffers-schema": "^3.3.1", "signed-varint": "^2.0.1", + "uint8arrays": "^2.1.3", "varint": "^5.0.0" } }, @@ -14224,6 +15243,14 @@ "picomatch": "^2.2.1" } }, + "receptacle": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/receptacle/-/receptacle-1.3.2.tgz", + "integrity": "sha512-HrsFvqZZheusncQRiEE7GatOAETrARKV/lnfYicIm8lbvp/JQOdADOfhjBd2DajvoszEyxSM6RlAAIZgEoeu/A==", + "requires": { + "ms": "^2.1.1" + } + }, "recursive-readdir": { "version": "2.2.2", "resolved": "https://registry.npmjs.org/recursive-readdir/-/recursive-readdir-2.2.2.tgz", @@ -15213,6 +16240,11 @@ "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=" }, + "set-delayed-interval": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/set-delayed-interval/-/set-delayed-interval-1.0.0.tgz", + "integrity": "sha512-29fhAwuZlLcuBnW/EwxvLcg2D3ELX+VBDNhnavs3YYkab72qmrcSeQNVdzl8EcPPahGQXhBM6MKdPLCQGMDakw==" + }, "set-value": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.1.tgz", @@ -15893,17 +16925,17 @@ "integrity": "sha512-AiisoFqQ0vbGcZgQPY1cdP2I76glaVA/RauYR4G4thNFgkTqr90yXTo4LYX60Jl+sIlPNHHdGSwo01AvbKUSVQ==" }, "stream-to-it": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/stream-to-it/-/stream-to-it-0.2.2.tgz", - "integrity": "sha512-waULBmQpVdr6TkDzci6t1P7dIaSZ0bHC1TaPXDUeJC5PpSK7U3T0H0Zeo/LWUnd6mnhXOmGGDKAkjUCHw5IOng==", + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/stream-to-it/-/stream-to-it-0.2.3.tgz", + "integrity": "sha512-xaK9EjPtLox5rrC7YLSBXSanTtUJN/lzJlMFvy9VaROmnyvy0U/X6m2uMhXPJRn3g3M9uOSIzTszW7BPiWSg9w==", "requires": { "get-iterator": "^1.0.2" } }, "streaming-iterables": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/streaming-iterables/-/streaming-iterables-4.1.2.tgz", - "integrity": "sha512-IzhmKnQ2thkNMUcaGsjedrxdAoXPhtIFn8hUlmSqSqafa2p0QmZudu6ImG7ckvPNfazpMfr6Ef8cxUWyIyxpxA==" + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/streaming-iterables/-/streaming-iterables-5.0.4.tgz", + "integrity": "sha512-nEs6hBGIPsVz6uq6pscGGKfoPDQWrDQW0b0UHurtSDysekfKLmkPg7FQVRE2sj3Rad6yUo9E1sGTxOWyYsHQ/g==" }, "strict-uri-encode": { "version": "1.1.0", @@ -16747,25 +17779,41 @@ "integrity": "sha512-B3ZIOf1IKeH2ixgHhj6la6xdwR9QrLC5d1VKeCSY4tvkqhF2eqd9O7txNlS0PO3GrBAFIdr3L1ndNwteUbZLYg==" }, "uint8arrays": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/uint8arrays/-/uint8arrays-1.1.0.tgz", - "integrity": "sha512-cLdlZ6jnFczsKf5IH1gPHTtcHtPGho5r4CvctohmQjw8K7Q3gFdfIGHxSTdTaCKrL4w09SsPRJTqRS0drYeszA==", + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/uint8arrays/-/uint8arrays-2.1.5.tgz", + "integrity": "sha512-CSR7AO+4AHUeSOnZ/NBNCElDeWfRh9bXtOck27083kc7SznmmHIhNEkEOCQOn0wvrIMjS3IH0TNLR16vuc46mA==", "requires": { - "multibase": "^3.0.0", - "web-encoding": "^1.0.2" + "multibase": "^4.0.1" }, "dependencies": { "multibase": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/multibase/-/multibase-3.1.2.tgz", - "integrity": "sha512-bpklWHs70LO3smJUHOjcnzGceJJvn9ui0Vau6Za0B/GBepaXswmW8Ufea0uD9pROf/qCQ4N4lZ3sf3U+SNf0tw==", + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/multibase/-/multibase-4.0.4.tgz", + "integrity": "sha512-8/JmrdSGzlw6KTgAJCOqUBSGd1V6186i/X8dDCGy/lbCKrQ+1QB6f3HE+wPr7Tpdj4U3gutaj9jG2rNX6UpiJg==", "requires": { - "@multiformats/base-x": "^4.0.1", - "web-encoding": "^1.0.6" + "@multiformats/base-x": "^4.0.1" } } } }, + "unbox-primitive": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.1.tgz", + "integrity": "sha512-tZU/3NqK3dA5gpE1KtyiJUrEB0lxnGkMFHptJ7q6ewdZ8s12QrODwNbhIJStmJkd1QDXa1NRA8aF2A1zk/Ypyw==", + "requires": { + "function-bind": "^1.1.1", + "has-bigints": "^1.0.1", + "has-symbols": "^1.0.2", + "which-boxed-primitive": "^1.0.2" + }, + "dependencies": { + "has-symbols": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.2.tgz", + "integrity": "sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw==" + } + } + }, "unicode-canonical-property-names-ecmascript": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-1.0.4.tgz", @@ -16811,11 +17859,6 @@ "resolved": "https://registry.npmjs.org/uniqs/-/uniqs-2.0.0.tgz", "integrity": "sha1-/+3ks2slKQaW5uFl1KWe25mOawI=" }, - "unique-by": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unique-by/-/unique-by-1.0.0.tgz", - "integrity": "sha1-UiDIa6e8Vy+3E610ZRRwy2RCEr0=" - }, "unique-filename": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-1.1.1.tgz", @@ -16845,6 +17888,11 @@ "resolved": "https://registry.npmjs.org/universalify/-/universalify-1.0.0.tgz", "integrity": "sha512-rb6X1W158d7pRQBg5gkR8uPaSfiids68LTJQYOtEUhoJUWBdaQHsuT/EUduxXYxcrt4r5PJ4fuHW1MHT6p0qug==" }, + "unordered-array-remove": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/unordered-array-remove/-/unordered-array-remove-1.0.2.tgz", + "integrity": "sha1-xUbo+I4xegzyZEyX7LV9umbSUO8=" + }, "unpipe": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", @@ -17405,11 +18453,27 @@ } }, "web-encoding": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/web-encoding/-/web-encoding-1.1.0.tgz", - "integrity": "sha512-KzYonGdJnZB3qvhK8hKca5qXk/wp+hgwGNTY1TnqtF2CzDzpN8szOC3ejhX9+wbhCq3vQs/TjM8BykS1kor0lQ==", + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/web-encoding/-/web-encoding-1.1.5.tgz", + "integrity": "sha512-HYLeVCdJ0+lBYV2FvNZmv3HJ2Nt0QYXqZojk3d9FJOLkwnuhzM9tmamh8d7HPM8QqjKH8DeHkFTx+CFlWpZZDA==", "requires": { - "@zxing/text-encoding": "0.9.0" + "@zxing/text-encoding": "0.9.0", + "util": "^0.12.3" + }, + "dependencies": { + "util": { + "version": "0.12.3", + "resolved": "https://registry.npmjs.org/util/-/util-0.12.3.tgz", + "integrity": "sha512-I8XkoQwE+fPQEhy9v012V+TSdH2kp9ts29i20TaaDUXsg7x/onePbhFJUExBfv/2ay1ZOp/Vsm3nDlmnFGSAog==", + "requires": { + "inherits": "^2.0.3", + "is-arguments": "^1.0.4", + "is-generator-function": "^1.0.7", + "is-typed-array": "^1.1.3", + "safe-buffer": "^5.1.2", + "which-typed-array": "^1.1.2" + } + } } }, "web-vitals": { @@ -18134,11 +19198,37 @@ "isexe": "^2.0.0" } }, + "which-boxed-primitive": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", + "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", + "requires": { + "is-bigint": "^1.0.1", + "is-boolean-object": "^1.1.0", + "is-number-object": "^1.0.4", + "is-string": "^1.0.5", + "is-symbol": "^1.0.3" + } + }, "which-module": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=" }, + "which-typed-array": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.4.tgz", + "integrity": "sha512-49E0SpUe90cjpoc7BOJwyPHRqSAd12c10Qm2amdEZrJPCY2NDxaW01zHITrem+rnETY3dwrbH3UUrUwagfCYDA==", + "requires": { + "available-typed-arrays": "^1.0.2", + "call-bind": "^1.0.0", + "es-abstract": "^1.18.0-next.1", + "foreach": "^2.0.5", + "function-bind": "^1.1.1", + "has-symbols": "^1.0.1", + "is-typed-array": "^1.1.3" + } + }, "wide-align": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.3.tgz", @@ -18452,6 +19542,20 @@ "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-3.0.0.tgz", "integrity": "sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw==" }, + "xml2js": { + "version": "0.4.23", + "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.4.23.tgz", + "integrity": "sha512-ySPiMjM0+pLDftHgXY4By0uswI3SPKLDw/i3UXbnO8M/p28zqexCUoPmQFrYD+/1BzhGJSs2i1ERWKJAtiLrug==", + "requires": { + "sax": ">=0.6.0", + "xmlbuilder": "~11.0.0" + } + }, + "xmlbuilder": { + "version": "11.0.1", + "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-11.0.1.tgz", + "integrity": "sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA==" + }, "xmlchars": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/xmlchars/-/xmlchars-2.2.0.tgz", diff --git a/client/package.json b/client/package.json index 686e80b..ac01a98 100644 --- a/client/package.json +++ b/client/package.json @@ -1,57 +1,60 @@ { - "name": "fluent-pad", - "version": "0.1.0", - "private": true, - "dependencies": { - "@fluencelabs/fluence": "0.9.31", - "@fluencelabs/fluence-network-environment": "1.0.8", - "@testing-library/jest-dom": "^5.11.9", - "@testing-library/react": "^11.2.5", - "@testing-library/user-event": "^12.6.3", - "@types/jest": "^26.0.19", - "@types/node": "^12.19.16", - "@types/react": "^16.14.3", - "@types/react-dom": "^16.9.10", - "automerge": "^0.14.2", - "diff-match-patch": "^1.0.5", - "lodash": "^4.17.20", - "node-sass": "^4.14.1", - "react": "^17.0.1", - "react-dom": "^17.0.1", - "react-scripts": "4.0.1", - "react-toastify": "^7.0.3", - "typescript": "^4.1.3", - "web-vitals": "^0.2.4" - }, - "scripts": { - "start": "react-scripts start", - "build": "react-scripts build", - "test": "react-scripts test", - "eject": "react-scripts eject" - }, - "eslintConfig": { - "parser": "@typescript-eslint/parser", - "parserOptions": { - "ecmaVersion": 12 + "name": "fluent-pad", + "version": "0.1.0", + "private": true, + "dependencies": { + "@fluencelabs/fluence": "^0.9.43", + "@fluencelabs/fluence-network-environment": "1.0.8", + "@testing-library/jest-dom": "^5.11.9", + "@testing-library/react": "^11.2.5", + "@testing-library/user-event": "^12.6.3", + "@types/jest": "^26.0.19", + "@types/node": "^12.19.16", + "@types/react": "^16.14.3", + "@types/react-dom": "^16.9.10", + "automerge": "^0.14.2", + "diff-match-patch": "^1.0.5", + "lodash": "^4.17.20", + "node-sass": "^4.14.1", + "react": "^17.0.1", + "react-dom": "^17.0.1", + "react-scripts": "4.0.1", + "react-toastify": "^7.0.3", + "typescript": "^4.1.3", + "web-vitals": "^0.2.4" }, - "extends": [ - "react-app", - "react-app/jest" - ] - }, - "browserslist": { - "production": [ - ">0.2%", - "not dead", - "not op_mini all" - ], - "development": [ - "last 1 chrome version", - "last 1 firefox version", - "last 1 safari version" - ] - }, - "devDependencies": { - "@types/lodash": "^4.14.168" - } + "scripts": { + "start": "react-scripts start", + "build": "react-scripts build", + "test": "react-scripts test", + "eject": "react-scripts eject", + "compile-aqua": "aqua-cli -i ./aqua/ -o ./src/aqua/" + }, + "eslintConfig": { + "parser": "@typescript-eslint/parser", + "parserOptions": { + "ecmaVersion": 12 + }, + "extends": [ + "react-app", + "react-app/jest" + ] + }, + "browserslist": { + "production": [ + ">0.2%", + "not dead", + "not op_mini all" + ], + "development": [ + "last 1 chrome version", + "last 1 firefox version", + "last 1 safari version" + ] + }, + "devDependencies": { + "@fluencelabs/aqua-cli": "^0.1.1-94", + "@fluencelabs/aqua-lib": "0.1.1", + "@types/lodash": "^4.14.168" + } } diff --git a/client/src/app.json b/client/src/app.json new file mode 100644 index 0000000..9cbab72 --- /dev/null +++ b/client/src/app.json @@ -0,0 +1,56 @@ +{ + "services": { + "history": { + "dependencies": [ + "history_inmemory" + ], + "node": "12D3KooWKEprYXUXqoV5xSBeyqrWLpQLLH4PXfvVkDJtmcqmh5V3", + "hashDependencies": [ + "hash:6ee648216089b876a34353f485f1bf19dd863b861f0d798a0ac0cb65cc3b4e2f" + ], + "blueprint_id": "5df598924434974291d98c6d72e0922f2e8cbd7f7f291ca44f1b2f8e198f421b", + "id": "afed8e34-f399-4e55-9d1f-c5c58296ad7a" + }, + "user_list": { + "dependencies": [ + "user_list_inmemory" + ], + "node": "12D3KooWKEprYXUXqoV5xSBeyqrWLpQLLH4PXfvVkDJtmcqmh5V3", + "hashDependencies": [ + "hash:691ebcd74409bd931a9a68d0e0001f8d9d4b8482c8aaac3184e28c2a322e5a82" + ], + "blueprint_id": "d46fb511eb5a5dcea7b5a6777e04f95d48cbbe9fde040bd6bd69b4d9cd8fbb88", + "id": "5622f669-3699-430f-9f4e-a1cb117cc0e2" + } + }, + "modules": { + "history_inmemory": { + "file": "history.wasm", + "config": { + "preopened_files": [ + "/tmp" + ], + "mapped_dirs": { + "history": "/tmp" + } + }, + "hash": "6ee648216089b876a34353f485f1bf19dd863b861f0d798a0ac0cb65cc3b4e2f" + }, + "user_list_inmemory": { + "file": "user_list.wasm", + "config": {}, + "hash": "691ebcd74409bd931a9a68d0e0001f8d9d4b8482c8aaac3184e28c2a322e5a82" + } + }, + "scripts": { + "set_tetraplet": { + "file": "set_tetraplet.air", + "variables": { + "function": "is_authenticated", + "json_path": "$.is_authenticated" + }, + "node": "12D3KooWKEprYXUXqoV5xSBeyqrWLpQLLH4PXfvVkDJtmcqmh5V3" + } + }, + "script_storage": {} +} \ No newline at end of file diff --git a/client/src/app/api.ts b/client/src/app/api.ts deleted file mode 100644 index 16d0aa0..0000000 --- a/client/src/app/api.ts +++ /dev/null @@ -1,292 +0,0 @@ -import { FluenceClient, Particle, sendParticle, sendParticleAsFetch } from '@fluencelabs/fluence'; - -import { - fluentPadServiceId, - historyNodePeerId, - historyServiceId, - notifyOnlineFnName, - notifyTextUpdateFnName, - notifyUserAddedFnName, - notifyUserRemovedFnName, - userListNodePeerId, - userListServiceId, -} from './constants'; - -export interface ServiceResult { - ret_code: number; - err_msg: string; -} - -export interface User { - peer_id: string; - relay_id: string; - name: string; -} - -export interface Entry { - id: number; - body: string; -} - -interface GetUsersResult extends ServiceResult { - users: Array; -} - -interface GetEntriesResult extends ServiceResult { - entries: Entry[]; -} - -const throwIfError = (result: ServiceResult) => { - if (result.ret_code !== 0) { - throw new Error(result.err_msg); - } -}; - -export const updateOnlineStatuses = async (client: FluenceClient) => { - const particle = new Particle( - ` - (seq - (call myRelay ("op" "identity") []) - (seq - (call userlistNode (userlist "get_users") [] allUsers) - (fold allUsers.$.users! u - (par - (seq - (call u.$.relay_id! ("op" "identity") []) - (seq - (call u.$.peer_id! ("op" "identity") []) - (seq - (call u.$.relay_id! ("op" "identity") []) - (seq - (call myRelay ("op" "identity") []) - (call myPeerId (fluentPadServiceId notifyOnline) [u.$.peer_id!]) - ) - ) - ) - ) - (next u) - ) - ) - ) - ) - `, - { - userlistNode: userListNodePeerId, - userlist: userListServiceId, - myRelay: client.relayPeerId, - myPeerId: client.selfPeerId, - fluentPadServiceId: fluentPadServiceId, - notifyOnline: notifyOnlineFnName, - }, - ); - - sendParticle(client, particle); -}; - -export const notifySelfAdded = (client: FluenceClient, name: string) => { - const particle = new Particle( - ` - (seq - (call myRelay ("op" "identity") []) - (seq - (call userlistNode (userlist "get_users") [] allUsers) - (fold allUsers.$.users! u - (par - (seq - (call u.$.relay_id! ("op" "identity") []) - (call u.$.peer_id! (fluentPadServiceId notifyUserAdded) [myUser setOnline]) - ) - (next u) - ) - ) - ) - ) - `, - { - userlistNode: userListNodePeerId, - userlist: userListServiceId, - myRelay: client.relayPeerId, - myPeerId: client.selfPeerId, - fluentPadServiceId: fluentPadServiceId, - notifyUserAdded: notifyUserAddedFnName, - myUser: [ - { - name: name, - peer_id: client.selfPeerId, - relay_id: client.relayPeerId, - }, - ], - setOnline: true, - }, - ); - - sendParticle(client, particle); -}; - -export const getUserList = async (client: FluenceClient) => { - const particle = new Particle( - ` - (seq - (call myRelay ("op" "identity") []) - (seq - (call userlistNode (userlist "get_users") [] allUsers) - (seq - (call myRelay ("op" "identity") []) - (call myPeerId (fluentPadServiceId notifyUserAdded) [allUsers.$.users!]) - ) - ) - ) - `, - { - userlistNode: userListNodePeerId, - userlist: userListServiceId, - myRelay: client.relayPeerId, - myPeerId: client.selfPeerId, - fluentPadServiceId: fluentPadServiceId, - notifyUserAdded: notifyUserAddedFnName, - immediately: true, - }, - ); - - await sendParticle(client, particle); -}; - -export const join = async (client: FluenceClient, nickName: string) => { - const particle = new Particle( - ` - (seq - (call myRelay ("op" "identity") []) - (seq - (call userlistNode (userlist "join") [user] result) - (seq - (call myRelay ("op" "identity") []) - (call myPeerId ("_callback" "join") [result]) - ) - ) - ) - `, - { - myRelay: client.relayPeerId, - myPeerId: client.selfPeerId, - user: { - name: nickName, - peer_id: client.selfPeerId, - relay_id: client.relayPeerId, - }, - userlist: userListServiceId, - userlistNode: userListNodePeerId, - }, - ); - - const [result] = await sendParticleAsFetch<[ServiceResult]>(client, particle, 'join'); - throwIfError(result); -}; - -export const leave = async (client: FluenceClient) => { - const particle = new Particle( - ` - (seq - (call myRelay ("op" "identity") []) - (seq - (call userlistNode (userlist "leave") [myPeerId]) - (seq - (call userlistNode (userlist "get_users") [] allUsers) - (fold allUsers.$.users! u - (par - (seq - (call u.$.relay_id! ("op" "identity") []) - (call u.$.peer_id! (fluentPadServiceId notifyUserRemoved) [myPeerId]) - ) - (next u) - ) - ) - ) - ) - ) - `, - { - userlistNode: userListNodePeerId, - userlist: userListServiceId, - myRelay: client.relayPeerId, - myPeerId: client.selfPeerId, - fluentPadServiceId: fluentPadServiceId, - notifyUserRemoved: notifyUserRemovedFnName, - }, - ); - - await sendParticle(client, particle); -}; - -export const getHistory = async (client: FluenceClient) => { - const particle = new Particle( - ` - (seq - (call myRelay ("op" "identity") []) - (seq - (call userlistNode (userlist "is_authenticated") [] token) - (seq - (call historyNode (history "get_all") [token.$.["is_authenticated"]] entries) - (seq - (call myRelay ("op" "identity") []) - (call myPeerId ("_callback" "get_history") [entries]) - ) - ) - ) - ) - `, - { - myRelay: client.relayPeerId, - myPeerId: client.selfPeerId, - userlist: userListServiceId, - history: historyServiceId, - userlistNode: userListNodePeerId, - historyNode: historyNodePeerId, - }, - ); - - const [result] = await sendParticleAsFetch<[GetEntriesResult]>(client, particle, 'get_history'); - throwIfError(result); - return result.entries; -}; - -export const addEntry = async (client: FluenceClient, entry: string) => { - const particle = new Particle( - ` - (seq - (call myRelay ("op" "identity") []) - (seq - (call userlistNode (userlist "is_authenticated") [] token) - (seq - (call userlistNode (userlist "get_users") [] allUsers) - (seq - (call historyNode (history "add") [entry token.$.["is_authenticated"]]) - (fold allUsers.$.users! u - (par - (seq - (call u.$.relay_id! ("op" "identity") []) - (call u.$.peer_id! (fluentPadServiceId notifyTextUpdate) [myPeerId entry token.$.["is_authenticated"]]) - ) - (next u) - ) - ) - ) - ) - ) - ) - `, - - { - userlistNode: userListNodePeerId, - historyNode: historyNodePeerId, - entry: entry, - userlist: userListServiceId, - history: historyServiceId, - myRelay: client.relayPeerId, - myPeerId: client.selfPeerId, - fluentPadServiceId: fluentPadServiceId, - notifyTextUpdate: notifyTextUpdateFnName, - }, - ); - - await sendParticle(client, particle); -}; diff --git a/client/src/app/constants.ts b/client/src/app/constants.ts index 9c641dd..b7b56c0 100644 --- a/client/src/app/constants.ts +++ b/client/src/app/constants.ts @@ -1,5 +1,4 @@ - - +import config from 'src/app.json'; import { testNet } from '@fluencelabs/fluence-network-environment'; export const fluentPadServiceId = 'fluence/fluent-pad'; @@ -9,10 +8,23 @@ export const notifyUserAddedFnName = 'notifyUserAdded'; export const notifyUserRemovedFnName = 'notifyUserRemoved'; export const notifyTextUpdateFnName = 'notifyTextUpdate'; -export const historyServiceId = '64ea579e-b863-4a42-b80c-e7b5ec1ab7fa'; -export const userListServiceId = '91041afe-0c3c-451a-9003-6bb92a570aae'; +export const userList = { + peer_id: config.services.user_list.node, + service_id: config.services.user_list.id, +}; -export const userListNodePeerId = testNet[3].peerId; -export const historyNodePeerId = testNet[3].peerId; +export const history = { + peer_id: config.services.history.node, + service_id: config.services.history.id, +}; -export const relayNode = testNet[0]; +export const fluentPadApp = { + user_list: userList, + history: history, +}; + +// export const relayNode = testNet[0]; +export const relayNode = { + multiaddr: '/ip4/127.0.0.1/tcp/4310/ws/p2p/12D3KooWKEprYXUXqoV5xSBeyqrWLpQLLH4PXfvVkDJtmcqmh5V3', + peerId: '12D3KooWKEprYXUXqoV5xSBeyqrWLpQLLH4PXfvVkDJtmcqmh5V3', +}; diff --git a/client/src/app/sync.ts b/client/src/app/sync.ts index 960c0e9..4d7aa94 100644 --- a/client/src/app/sync.ts +++ b/client/src/app/sync.ts @@ -44,7 +44,7 @@ export class SyncClient { const msg = JSON.parse(changes); this.connection.receiveMsg(msg); } catch (e) { - console.log('Couldnt receive message', changes); + console.error('Couldnt receive message', changes); } } diff --git a/client/src/aqua/app.ts b/client/src/aqua/app.ts new file mode 100644 index 0000000..7189117 --- /dev/null +++ b/client/src/aqua/app.ts @@ -0,0 +1,636 @@ +/** + * + * 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 + * + */ +import { FluenceClient, PeerIdB58 } from '@fluencelabs/fluence'; +import { RequestFlowBuilder } from '@fluencelabs/fluence/dist/api.unstable'; + +export async function join( + client: FluenceClient, + user: { name: string; peer_id: string; relay_id: string }, +): Promise<{ err_msg: string; ret_code: number }> { + let request; + const promise = new Promise<{ err_msg: string; ret_code: number }>((resolve, reject) => { + request = new RequestFlowBuilder() + .disableInjections() + .withRawScript( + ` +(xor + (seq + (seq + (seq + (seq + (call %init_peer_id% ("getDataSrv" "relay") [] relay) + (call %init_peer_id% ("getDataSrv" "user") [] user) + ) + (seq + (call %init_peer_id% ("fluence/get-config" "getApp") [] app) + (seq + (call relay ("op" "identity") []) + (call app.$.user_list.peer_id! (app.$.user_list.service_id! "join") [user] res) + ) + ) + ) + (call relay ("op" "identity") []) + ) + (call %init_peer_id% ("callbackSrv" "response") [res]) + ) + (call %init_peer_id% ("errorHandlingSrv" "error") [%last_error%]) +) + + `, + ) + .configHandler((h) => { + h.on('getDataSrv', 'relay', () => { + return client.relayPeerId!; + }); + h.on('getRelayService', 'hasRelay', () => { + // Not Used + return client.relayPeerId !== undefined; + }); + h.on('getDataSrv', 'user', () => { + return user; + }); + h.onEvent('callbackSrv', 'response', (args) => { + const [res] = args; + resolve(res); + }); + + h.onEvent('errorHandlingSrv', 'error', (args) => { + // assuming error is the single argument + const [err] = args; + reject(err); + }); + }) + .handleScriptError(reject) + .handleTimeout(() => { + reject('Request timed out for join'); + }) + .build(); + }); + await client.initiateFlow(request); + return promise; +} + +export async function getUserList( + client: FluenceClient, +): Promise<{ name: string; peer_id: string; relay_id: string }[]> { + let request; + const promise = new Promise<{ name: string; peer_id: string; relay_id: string }[]>((resolve, reject) => { + request = new RequestFlowBuilder() + .disableInjections() + .withRawScript( + ` +(xor + (seq + (seq + (seq + (call %init_peer_id% ("getDataSrv" "relay") [] relay) + (seq + (call %init_peer_id% ("fluence/get-config" "getApp") [] app) + (seq + (call relay ("op" "identity") []) + (call app.$.user_list.peer_id! (app.$.user_list.service_id! "get_users") [] allUsers) + ) + ) + ) + (call relay ("op" "identity") []) + ) + (call %init_peer_id% ("callbackSrv" "response") [allUsers.$.users!]) + ) + (call %init_peer_id% ("errorHandlingSrv" "error") [%last_error%]) +) + + `, + ) + .configHandler((h) => { + h.on('getDataSrv', 'relay', () => { + return client.relayPeerId!; + }); + h.on('getRelayService', 'hasRelay', () => { + // Not Used + return client.relayPeerId !== undefined; + }); + + h.onEvent('callbackSrv', 'response', (args) => { + const [res] = args; + resolve(res); + }); + + h.onEvent('errorHandlingSrv', 'error', (args) => { + // assuming error is the single argument + const [err] = args; + reject(err); + }); + }) + .handleScriptError(reject) + .handleTimeout(() => { + reject('Request timed out for getUserList'); + }) + .build(); + }); + await client.initiateFlow(request); + return promise; +} + +export async function initAfterJoin( + client: FluenceClient, + me: { name: string; peer_id: string; relay_id: string }, +): Promise<{ name: string; peer_id: string; relay_id: string }[]> { + let request; + const promise = new Promise<{ name: string; peer_id: string; relay_id: string }[]>((resolve, reject) => { + request = new RequestFlowBuilder() + .disableInjections() + .withRawScript( + ` +(xor + (seq + (seq + (seq + (call %init_peer_id% ("getDataSrv" "relay") [] relay) + (call %init_peer_id% ("getDataSrv" "me") [] me) + ) + (seq + (seq + (seq + (call %init_peer_id% ("fluence/get-config" "getApp") [] app) + (seq + (call relay ("op" "identity") []) + (call app.$.user_list.peer_id! (app.$.user_list.service_id! "get_users") [] allUsers) + ) + ) + (call relay ("op" "identity") []) + ) + (fold allUsers.$.users! user + (par + (seq + (seq + (seq + (call relay ("op" "identity") []) + (call user.$.relay_id! ("peer" "is_connected") [user.$.peer_id!] isOnline) + ) + (call relay ("op" "identity") []) + ) + (par + (xor + (match isOnline true + (seq + (seq + (call relay ("op" "identity") []) + (call user.$.relay_id! ("op" "identity") []) + ) + (call user.$.peer_id! ("fluence/fluent-pad" "notifyUserAdded") [me true]) + ) + ) + (call %init_peer_id% ("op" "identity") []) + ) + (call %init_peer_id% ("fluence/fluent-pad" "notifyUserAdded") [user isOnline]) + ) + ) + (next user) + ) + ) + ) + ) + (call %init_peer_id% ("callbackSrv" "response") [allUsers]) + ) + (call %init_peer_id% ("errorHandlingSrv" "error") [%last_error%]) +) + + `, + ) + .configHandler((h) => { + h.on('getDataSrv', 'relay', () => { + return client.relayPeerId!; + }); + h.on('getRelayService', 'hasRelay', () => { + // Not Used + return client.relayPeerId !== undefined; + }); + h.on('getDataSrv', 'me', () => { + return me; + }); + h.onEvent('callbackSrv', 'response', (args) => { + const [res] = args; + resolve(res); + }); + + h.onEvent('errorHandlingSrv', 'error', (args) => { + // assuming error is the single argument + const [err] = args; + reject(err); + }); + }) + .handleScriptError(reject) + .handleTimeout(() => { + reject('Request timed out for initAfterJoin'); + }) + .build(); + }); + await client.initiateFlow(request); + return promise; +} + +export async function updateOnlineStatuses(client: FluenceClient): Promise { + let request; + const promise = new Promise((resolve, reject) => { + request = new RequestFlowBuilder() + .disableInjections() + .withRawScript( + ` +(xor + (seq + (call %init_peer_id% ("getDataSrv" "relay") [] relay) + (seq + (seq + (seq + (call %init_peer_id% ("fluence/get-config" "getApp") [] app) + (seq + (call relay ("op" "identity") []) + (call app.$.user_list.peer_id! (app.$.user_list.service_id! "get_users") [] allUsers) + ) + ) + (call relay ("op" "identity") []) + ) + (fold allUsers.$.users! user + (par + (seq + (seq + (seq + (seq + (seq + (call relay ("op" "identity") []) + (call user.$.relay_id! ("op" "identity") []) + ) + (call user.$.peer_id! ("peer" "is_connected") [user.$.peer_id!] isOnline) + ) + (call user.$.relay_id! ("op" "identity") []) + ) + (call relay ("op" "identity") []) + ) + (call %init_peer_id% ("fluence/fluent-pad" "notifyOnline") [user.$.peer_id! isOnline]) + ) + (next user) + ) + ) + ) + ) + (call %init_peer_id% ("errorHandlingSrv" "error") [%last_error%]) +) + + `, + ) + .configHandler((h) => { + h.on('getDataSrv', 'relay', () => { + return client.relayPeerId!; + }); + h.on('getRelayService', 'hasRelay', () => { + // Not Used + return client.relayPeerId !== undefined; + }); + + h.onEvent('errorHandlingSrv', 'error', (args) => { + // assuming error is the single argument + const [err] = args; + reject(err); + }); + }) + .handleScriptError(reject) + .handleTimeout(() => { + reject('Request timed out for updateOnlineStatuses'); + }) + .build(); + }); + await client.initiateFlow(request); + return Promise.race([promise, Promise.resolve()]); +} + +export async function leave(client: FluenceClient): Promise { + let request; + const promise = new Promise((resolve, reject) => { + request = new RequestFlowBuilder() + .disableInjections() + .withRawScript( + ` +(xor + (seq + (call %init_peer_id% ("getDataSrv" "relay") [] relay) + (seq + (seq + (seq + (seq + (seq + (call %init_peer_id% ("fluence/get-config" "getApp") [] app) + (seq + (call relay ("op" "identity") []) + (call app.$.user_list.peer_id! (app.$.user_list.service_id! "leave") [%init_peer_id%] res) + ) + ) + (call relay ("op" "identity") []) + ) + (seq + (call %init_peer_id% ("fluence/get-config" "getApp") [] app0) + (seq + (call relay ("op" "identity") []) + (call app0.$.user_list.peer_id! (app0.$.user_list.service_id! "get_users") [] allUsers) + ) + ) + ) + (call relay ("op" "identity") []) + ) + (fold allUsers.$.users! user + (par + (seq + (seq + (call relay ("op" "identity") []) + (call user.$.relay_id! ("op" "identity") []) + ) + (call user.$.peer_id! ("fluence/fluent-pad" "notifyUserRemoved") [%init_peer_id%]) + ) + (next user) + ) + ) + ) + ) + (call %init_peer_id% ("errorHandlingSrv" "error") [%last_error%]) +) + + `, + ) + .configHandler((h) => { + h.on('getDataSrv', 'relay', () => { + return client.relayPeerId!; + }); + h.on('getRelayService', 'hasRelay', () => { + // Not Used + return client.relayPeerId !== undefined; + }); + + h.onEvent('errorHandlingSrv', 'error', (args) => { + // assuming error is the single argument + const [err] = args; + reject(err); + }); + }) + .handleScriptError(reject) + .handleTimeout(() => { + reject('Request timed out for leave'); + }) + .build(); + }); + await client.initiateFlow(request); + return Promise.race([promise, Promise.resolve()]); +} + +export async function auth( + client: FluenceClient, +): Promise<{ err_msg: string; is_authenticated: boolean; ret_code: number }> { + let request; + const promise = new Promise<{ err_msg: string; is_authenticated: boolean; ret_code: number }>((resolve, reject) => { + request = new RequestFlowBuilder() + .disableInjections() + .withRawScript( + ` +(xor + (seq + (seq + (seq + (call %init_peer_id% ("getDataSrv" "relay") [] relay) + (seq + (call %init_peer_id% ("fluence/get-config" "getApp") [] app) + (seq + (call relay ("op" "identity") []) + (call app.$.user_list.peer_id! (app.$.user_list.service_id! "is_authenticated") [] res) + ) + ) + ) + (call relay ("op" "identity") []) + ) + (call %init_peer_id% ("callbackSrv" "response") [res]) + ) + (call %init_peer_id% ("errorHandlingSrv" "error") [%last_error%]) +) + + `, + ) + .configHandler((h) => { + h.on('getDataSrv', 'relay', () => { + return client.relayPeerId!; + }); + h.on('getRelayService', 'hasRelay', () => { + // Not Used + return client.relayPeerId !== undefined; + }); + + h.onEvent('callbackSrv', 'response', (args) => { + const [res] = args; + resolve(res); + }); + + h.onEvent('errorHandlingSrv', 'error', (args) => { + // assuming error is the single argument + const [err] = args; + reject(err); + }); + }) + .handleScriptError(reject) + .handleTimeout(() => { + reject('Request timed out for auth'); + }) + .build(); + }); + await client.initiateFlow(request); + return promise; +} + +export async function getHistory( + client: FluenceClient, +): Promise<{ entries: { body: string; id: number }[]; err_msg: string; ret_code: number }> { + let request; + const promise = new Promise<{ entries: { body: string; id: number }[]; err_msg: string; ret_code: number }>( + (resolve, reject) => { + request = new RequestFlowBuilder() + .disableInjections() + .withRawScript( + ` +(xor + (seq + (seq + (seq + (call %init_peer_id% ("getDataSrv" "relay") [] relay) + (seq + (seq + (seq + (call %init_peer_id% ("fluence/get-config" "getApp") [] app) + (seq + (call %init_peer_id% ("fluence/get-config" "getApp") [] app0) + (seq + (call relay ("op" "identity") []) + (call app0.$.user_list.peer_id! (app0.$.user_list.service_id! "is_authenticated") [] res0) + ) + ) + ) + (call relay ("op" "identity") []) + ) + (seq + (call relay ("op" "identity") []) + (call app.$.history.peer_id! (app.$.history.service_id! "get_all") [res0.$.is_authenticated!] res) + ) + ) + ) + (call relay ("op" "identity") []) + ) + (call %init_peer_id% ("callbackSrv" "response") [res]) + ) + (call %init_peer_id% ("errorHandlingSrv" "error") [%last_error%]) +) + + `, + ) + .configHandler((h) => { + h.on('getDataSrv', 'relay', () => { + return client.relayPeerId!; + }); + h.on('getRelayService', 'hasRelay', () => { + // Not Used + return client.relayPeerId !== undefined; + }); + + h.onEvent('callbackSrv', 'response', (args) => { + const [res] = args; + resolve(res); + }); + + h.onEvent('errorHandlingSrv', 'error', (args) => { + // assuming error is the single argument + const [err] = args; + reject(err); + }); + }) + .handleScriptError(reject) + .handleTimeout(() => { + reject('Request timed out for getHistory'); + }) + .build(); + }, + ); + await client.initiateFlow(request); + return promise; +} + +export async function addEntry( + client: FluenceClient, + entry: string, + init_peer_id: string, +): Promise<{ entry_id: number; err_msg: string; ret_code: number }> { + let request; + const promise = new Promise<{ entry_id: number; err_msg: string; ret_code: number }>((resolve, reject) => { + request = new RequestFlowBuilder() + .disableInjections() + .withRawScript( + ` +(xor + (seq + (seq + (seq + (seq + (call %init_peer_id% ("getDataSrv" "relay") [] relay) + (call %init_peer_id% ("getDataSrv" "entry") [] entry) + ) + (call %init_peer_id% ("getDataSrv" "init_peer_id") [] init_peer_id) + ) + (seq + (seq + (seq + (seq + (seq + (seq + (seq + (call %init_peer_id% ("fluence/get-config" "getApp") [] app) + (seq + (call %init_peer_id% ("fluence/get-config" "getApp") [] app0) + (seq + (call relay ("op" "identity") []) + (call app0.$.user_list.peer_id! (app0.$.user_list.service_id! "is_authenticated") [] res0) + ) + ) + ) + (call relay ("op" "identity") []) + ) + (seq + (call relay ("op" "identity") []) + (call app.$.history.peer_id! (app.$.history.service_id! "add") [entry res0.$.is_authenticated!] res) + ) + ) + (call relay ("op" "identity") []) + ) + (seq + (call %init_peer_id% ("fluence/get-config" "getApp") [] app1) + (seq + (call relay ("op" "identity") []) + (call app1.$.user_list.peer_id! (app1.$.user_list.service_id! "get_users") [] allUsers) + ) + ) + ) + (call relay ("op" "identity") []) + ) + (fold allUsers.$.users! user + (par + (mismatch user.$.peer_id! init_peer_id + (seq + (seq + (call relay ("op" "identity") []) + (call user.$.relay_id! ("op" "identity") []) + ) + (call user.$.peer_id! ("fluence/fluent-pad" "notifyTextUpdate") [entry res0.$.is_authenticated!]) + ) + ) + (next user) + ) + ) + ) + ) + (call %init_peer_id% ("callbackSrv" "response") [res]) + ) + (call %init_peer_id% ("errorHandlingSrv" "error") [%last_error%]) +) + + `, + ) + .configHandler((h) => { + h.on('getDataSrv', 'relay', () => { + return client.relayPeerId!; + }); + h.on('getRelayService', 'hasRelay', () => { + // Not Used + return client.relayPeerId !== undefined; + }); + h.on('getDataSrv', 'entry', () => { + return entry; + }); + h.on('getDataSrv', 'init_peer_id', () => { + return init_peer_id; + }); + h.onEvent('callbackSrv', 'response', (args) => { + const [res] = args; + resolve(res); + }); + + h.onEvent('errorHandlingSrv', 'error', (args) => { + // assuming error is the single argument + const [err] = args; + reject(err); + }); + }) + .handleScriptError(reject) + .handleTimeout(() => { + reject('Request timed out for addEntry'); + }) + .build(); + }); + await client.initiateFlow(request); + return promise; +} diff --git a/client/src/components/App.tsx b/client/src/components/App.tsx index 3763ede..52999bd 100644 --- a/client/src/components/App.tsx +++ b/client/src/components/App.tsx @@ -5,11 +5,24 @@ import './App.scss'; import { FluenceClientContext } from '../app/FluenceClientContext'; import { UserList } from './UserList'; -import * as api from 'src/app/api'; import { CollaborativeEditor } from './CollaborativeEditor'; -import { relayNode } from 'src/app/constants'; -import { withErrorHandlingAsync } from './util'; -import { toast } from 'react-toastify'; +import { fluentPadApp, relayNode } from 'src/app/constants'; +import { CheckResponse, withErrorHandlingAsync } from './util'; +import { join, leave } from 'src/aqua/app'; + +const createClientEx = async (relay) => { + const client = await createClient(relay); + client.aquaCallHandler.on('fluence/get-config', 'getApp', () => { + return fluentPadApp; + }); + client.aquaCallHandler.on('fluence/get-config', 'get_init_peer_id', () => { + return client.selfPeerId; + }); + client.aquaCallHandler.on('fluence/get-config', 'get_init_relay', () => { + return client.relayPeerId!; + }); + return client; +}; const App = () => { const [client, setClient] = useState(null); @@ -17,7 +30,7 @@ const App = () => { const [nickName, setNickName] = useState(''); useEffect(() => { - createClient(relayNode) + createClientEx(relayNode) .then((client) => setClient(client)) .catch((err) => console.log('Client initialization failed', err)); }, []); @@ -28,8 +41,14 @@ const App = () => { } await withErrorHandlingAsync(async () => { - await api.join(client, nickName); - setIsInRoom(true); + const res = await join(client, { + peer_id: client.selfPeerId, + relay_id: client.relayPeerId!, + name: nickName, + }); + if (CheckResponse(res)) { + setIsInRoom(true); + } }); }; @@ -39,7 +58,7 @@ const App = () => { } await withErrorHandlingAsync(async () => { - await api.leave(client); + await leave(client); setIsInRoom(false); }); }; diff --git a/client/src/components/CollaborativeEditor.tsx b/client/src/components/CollaborativeEditor.tsx index 103aa22..8751250 100644 --- a/client/src/components/CollaborativeEditor.tsx +++ b/client/src/components/CollaborativeEditor.tsx @@ -5,8 +5,8 @@ import { PeerIdB58, subscribeToEvent } from '@fluencelabs/fluence'; import { fluentPadServiceId, notifyTextUpdateFnName } from 'src/app/constants'; import { useFluenceClient } from '../app/FluenceClientContext'; import { getUpdatedDocFromText, initDoc, SyncClient } from '../app/sync'; -import * as api from 'src/app/api'; import { withErrorHandlingAsync } from './util'; +import { addEntry, getHistory } from 'src/aqua/app'; const broadcastUpdates = _.debounce((text: string, syncClient: SyncClient) => { let doc = syncClient.getDoc(); @@ -28,15 +28,17 @@ export const CollaborativeEditor = () => { syncClient.handleSendChanges = (changes: string) => { withErrorHandlingAsync(async () => { - await api.addEntry(client, changes); + const res = await addEntry(client, changes, client.selfPeerId); + if (res.ret_code !== 0) { + throw new Error( + `Failed to add message to history service, code=${res.ret_code}, message=${res.err_msg}`, + ); + } }); }; const unsub = subscribeToEvent(client, fluentPadServiceId, notifyTextUpdateFnName, (args, tetraplets) => { - const [authorPeerId, changes, isAuthorized] = args as [PeerIdB58, string, boolean]; - if (authorPeerId === client.selfPeerId) { - return; - } + const [changes, isAuthorized] = args as [string, boolean]; if (changes) { syncClient.receiveChanges(changes); @@ -47,8 +49,8 @@ export const CollaborativeEditor = () => { // don't block withErrorHandlingAsync(async () => { - const res = await api.getHistory(client); - for (let e of res) { + const res = await getHistory(client); + for (let e of res.entries) { syncClient.receiveChanges(e.body); } diff --git a/client/src/components/UserList.tsx b/client/src/components/UserList.tsx index 2f12fae..425fa26 100644 --- a/client/src/components/UserList.tsx +++ b/client/src/components/UserList.tsx @@ -6,64 +6,61 @@ import { notifyUserRemovedFnName, } from 'src/app/constants'; import { useFluenceClient } from '../app/FluenceClientContext'; -import * as api from 'src/app/api'; import { PeerIdB58, subscribeToEvent } from '@fluencelabs/fluence'; import { withErrorHandlingAsync } from './util'; +import { initAfterJoin, updateOnlineStatuses } from 'src/aqua/app'; interface User { id: PeerIdB58; name: string; isOnline: boolean; - shouldBecomeOnline: boolean; } -const turnUserAsOfflineCandidate = (u: User): User => { - return { - ...u, - isOnline: u.shouldBecomeOnline, - shouldBecomeOnline: false, - }; -}; +interface ApiUser { + name: string; + peer_id: string; + relay_id: string; +} -const refreshTimeoutMs = 2000; +const refreshOnlineStatusTimeoutMs = 10000; export const UserList = (props: { selfName: string }) => { const client = useFluenceClient()!; const [users, setUsers] = useState>(new Map()); + const updateOnlineStatus = (user, onlineStatus) => { + setUsers((prev) => { + const result = new Map(prev); + const u = result.get(user); + if (u) { + result.set(user, { ...u, isOnline: onlineStatus }); + } + return result; + }); + }; + useEffect(() => { const listRefreshTimer = setInterval(() => { - setUsers((prev) => { - const newUsers = Array.from(prev).map( - ([key, user]) => [key, turnUserAsOfflineCandidate(user)] as const, - ); - return new Map(newUsers); - }); - - // don't block withErrorHandlingAsync(async () => { - await api.updateOnlineStatuses(client); + // await updateOnlineStatuses(client); }); - }, refreshTimeoutMs); + }, refreshOnlineStatusTimeoutMs); const unsub1 = subscribeToEvent(client, fluentPadServiceId, notifyUserAddedFnName, (args, _) => { - const [users, setOnline] = args as [api.User[], boolean]; + const [user, isOnline] = args as [ApiUser, boolean]; setUsers((prev) => { + const u = user; const result = new Map(prev); - for (let u of users) { - if (result.has(u.peer_id)) { - continue; - } - - const isCurrentUser = u.peer_id === client.selfPeerId; - - result.set(u.peer_id, { - name: u.name, - id: u.peer_id, - isOnline: isCurrentUser || setOnline, - shouldBecomeOnline: isCurrentUser || setOnline, - }); + if (result.has(u.peer_id)) { + return result; } + + result.set(u.peer_id, { + name: u.name, + id: u.peer_id, + isOnline: isOnline, + }); + return result; }); }); @@ -78,26 +75,17 @@ export const UserList = (props: { selfName: string }) => { }); const unsub3 = subscribeToEvent(client, fluentPadServiceId, notifyOnlineFnName, (args, _) => { - const [userOnline] = args as [PeerIdB58[]]; - setUsers((prev) => { - const result = new Map(prev); - - for (let u of userOnline) { - const toSetOnline = result.get(u); - if (toSetOnline) { - toSetOnline.shouldBecomeOnline = true; - toSetOnline.isOnline = true; - } - } - - return result; - }); + const [user, onlineStatus] = args as [PeerIdB58, boolean]; + updateOnlineStatus(user, onlineStatus); }); // don't block withErrorHandlingAsync(async () => { - await api.getUserList(client); - await api.notifySelfAdded(client, props.selfName); + await initAfterJoin(client, { + name: props.selfName, + peer_id: client.selfPeerId, + relay_id: client.relayPeerId!, + }); }); return () => { diff --git a/client/src/components/util.tsx b/client/src/components/util.tsx index e4a9ab0..006656f 100644 --- a/client/src/components/util.tsx +++ b/client/src/components/util.tsx @@ -1,5 +1,15 @@ import { toast } from 'react-toastify'; +export const CheckResponse = (response: { err_msg: string; ret_code: number }): boolean => { + if (response.ret_code !== 0) { + console.error(response.err_msg); + toast.error('Something went wrong: ' + response.err_msg); + return false; + } + + return true; +}; + export const withErrorHandling = (fn: () => void): void => { try { fn(); diff --git a/client/src/index.tsx b/client/src/index.tsx index e333b11..5093883 100644 --- a/client/src/index.tsx +++ b/client/src/index.tsx @@ -6,7 +6,7 @@ import { setLogLevel } from '@fluencelabs/fluence'; import { ToastContainer } from 'react-toastify'; import 'react-toastify/dist/ReactToastify.css'; -setLogLevel('INFO'); +setLogLevel('trace'); ReactDOM.render( diff --git a/deploy_docker.sh b/deploy_docker.sh new file mode 100644 index 0000000..f1fce39 --- /dev/null +++ b/deploy_docker.sh @@ -0,0 +1,5 @@ +#!/bin/sh + +docker kill fluence_node +docker run -d --rm --name fluence_node -e RUST_LOG="info" -p 1210:1210 -p 4310:4310 fluencelabs/fluence -t 1210 -w 4310 -k gKdiCSUr1TFGFEgu2t8Ch1XEUsrN5A2UfBLjSZvfci9SPR3NvZpACfcpPGC3eY4zma1pk7UvYv5zb1VjvPHwCjj +fldist deploy_app --env local -s Fs6nQaGEsM5EgnprUbUtoLYWhUC8o6QK1gseP9pfhzUm -i app/app.config.json -o client/src/app.json diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 0000000..48e341a --- /dev/null +++ b/package-lock.json @@ -0,0 +1,3 @@ +{ + "lockfileVersion": 1 +} diff --git a/services/artifacts/history.json b/services/artifacts/history.json deleted file mode 100644 index e22ec98..0000000 --- a/services/artifacts/history.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"history"} diff --git a/services/artifacts/user-list.json b/services/artifacts/user-list.json deleted file mode 100644 index d28a06f..0000000 --- a/services/artifacts/user-list.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"user-list"} diff --git a/services/build.sh b/services/build.sh deleted file mode 100755 index d2a57c2..0000000 --- a/services/build.sh +++ /dev/null @@ -1,21 +0,0 @@ -#!/bin/sh - -( - cd user-list-inmemory - cargo update - fce build --release -) -( - cd history-inmemory - cargo update - fce build --release -) - -rm -f artifacts/user-list.wasm -rm -f artifacts/history.wasm -mkdir -p artifacts -cp user-list-inmemory/target/wasm32-wasi/release/user-list.wasm artifacts/ -echo '{"name":"user-list"}' > artifacts/user-list.json -cp history-inmemory/target/wasm32-wasi/release/history.wasm artifacts/ -echo '{"name":"history"}' > artifacts/history.json - diff --git a/services/history-inmemory/Cargo.lock b/services/history-inmemory/Cargo.lock index 098ce8e..1521be1 100644 --- a/services/history-inmemory/Cargo.lock +++ b/services/history-inmemory/Cargo.lock @@ -4,9 +4,9 @@ version = 3 [[package]] name = "anyhow" -version = "1.0.38" +version = "1.0.39" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "afddf7f520a80dbf76e6f50a35bca42a2331ef227a28b3b6dc5c2e2338d114b1" +checksum = "81cddc5f91628367664cc7c69714ff08deee8a3efc54623011c772544d7b2767" [[package]] name = "bitflags" @@ -112,9 +112,9 @@ checksum = "dd25036021b0de88a0aff6b850051563c6516d0bf53f8638938edbb9de732736" [[package]] name = "libc" -version = "0.2.87" +version = "0.2.91" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "265d751d31d6780a3f956bb5b8022feba2d94eeee5a84ba64f4212eedca42213" +checksum = "8916b1f6ca17130ec6568feccee27c156ad12037880833a3b842a823236502e7" [[package]] name = "lock_api" @@ -243,9 +243,9 @@ checksum = "fe0f37c9e8f3c5a4a66ad655a93c74daac4ad00c441533bf5c6e7990bb42604e" [[package]] name = "syn" -version = "1.0.61" +version = "1.0.64" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ed22b90a0e734a23a7610f4283ac9e5acfb96cbb30dfefa540d66f866f1c09c5" +checksum = "3fd9d1e9976102a03c542daa2eff1b43f9d72306342f3f8b3ed5fb8908195d6f" dependencies = [ "proc-macro2", "quote", diff --git a/services/user-list-inmemory/Cargo.lock b/services/user-list-inmemory/Cargo.lock index 7fa6387..c54cb3a 100644 --- a/services/user-list-inmemory/Cargo.lock +++ b/services/user-list-inmemory/Cargo.lock @@ -4,9 +4,9 @@ version = 3 [[package]] name = "anyhow" -version = "1.0.38" +version = "1.0.39" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "afddf7f520a80dbf76e6f50a35bca42a2331ef227a28b3b6dc5c2e2338d114b1" +checksum = "81cddc5f91628367664cc7c69714ff08deee8a3efc54623011c772544d7b2767" [[package]] name = "bitflags" @@ -98,9 +98,9 @@ checksum = "dd25036021b0de88a0aff6b850051563c6516d0bf53f8638938edbb9de732736" [[package]] name = "libc" -version = "0.2.87" +version = "0.2.91" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "265d751d31d6780a3f956bb5b8022feba2d94eeee5a84ba64f4212eedca42213" +checksum = "8916b1f6ca17130ec6568feccee27c156ad12037880833a3b842a823236502e7" [[package]] name = "lock_api" @@ -229,9 +229,9 @@ checksum = "fe0f37c9e8f3c5a4a66ad655a93c74daac4ad00c441533bf5c6e7990bb42604e" [[package]] name = "syn" -version = "1.0.61" +version = "1.0.64" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ed22b90a0e734a23a7610f4283ac9e5acfb96cbb30dfefa540d66f866f1c09c5" +checksum = "3fd9d1e9976102a03c542daa2eff1b43f9d72306342f3f8b3ed5fb8908195d6f" dependencies = [ "proc-macro2", "quote", @@ -245,7 +245,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f7fe0bb3479651439c9112f72b6c505038574c9fbb575ed1bf3b797fa39dd564" [[package]] -name = "user-list" +name = "user_list" version = "0.1.0" dependencies = [ "anyhow", diff --git a/services/user-list-inmemory/Cargo.toml b/services/user-list-inmemory/Cargo.toml index 150a71e..d8b91d6 100644 --- a/services/user-list-inmemory/Cargo.toml +++ b/services/user-list-inmemory/Cargo.toml @@ -1,11 +1,11 @@ [package] -name = "user-list" +name = "user_list" version = "0.1.0" authors = ["Fluence Labs"] edition = "2018" [[bin]] -name = "user-list" +name = "user_list" path = "src/main.rs" [dependencies]