diff --git a/README.md b/README.md index e76b26e..992c289 100644 --- a/README.md +++ b/README.md @@ -30,7 +30,7 @@ pubsub.unsub('some topic') // no longer interested pubsub.close() // cleanup ``` -[example.js](https://github.com/fsteff/hyperpubsub/blob/main/example.js) is a minimalistic demonstrator that uses the hyperspace [simulator](https://github.com/hypercore-protocol/hyperspace#simulator) for local tests. +[basic.js](./examples/basic.js) is a minimalistic demonstrator that uses the hyperspace [simulator](https://github.com/hypercore-protocol/hyperspace#simulator) for tests. If started twice you can see it exchanging "hello" messages. ## Private Messges @@ -54,6 +54,9 @@ pubsub.subPrivateMsg(publicKey, secretKey, (msg) => { pubsub2.pubPrivateMsg(publicKey, Buffer.from('hello', 'utf-8')) ``` +[private.js](./examples/private.js) is a minimalistic demonstrator for private messages (uses the simulator as well). +Start it once, copy the public key that's printed to the cli and pass it as argument to a second instance. + ## TODO - [ ] PEX is WIP - [ ] Hyperspace integration diff --git a/example.js b/examples/basic.js similarity index 79% rename from example.js rename to examples/basic.js index 0b54881..491b588 100644 --- a/example.js +++ b/examples/basic.js @@ -1,4 +1,4 @@ -const {PubSub} = require('.').debug() // call debug() if you want debugging messages printed to the cli +const {PubSub} = require('..').debug() // call debug() if you want debugging messages printed to the cli const simulator = require('hyperspace/simulator') simulator().then(async ({client}) => { diff --git a/examples/private.js b/examples/private.js new file mode 100644 index 0000000..d248ecd --- /dev/null +++ b/examples/private.js @@ -0,0 +1,34 @@ +const {PubSub} = require('..')//.debug() // call debug() if you want debugging messages printed to the cli +const simulator = require('hyperspace/simulator') +const sodium = require('sodium-universal') +const os = require('os') + +console.log('# HyperPubSub private message example') +console.log('# Usage: start this script on one device, copy the public key to the other and start the script on the other device with this key as argument') + +simulator().then(async ({client}) => { + const pubsub = new PubSub(client.network, {application: 'example app', onError: console.error}) + + const publicKey = Buffer.alloc(sodium.crypto_box_PUBLICKEYBYTES) + const secretKey = Buffer.alloc(sodium.crypto_box_SECRETKEYBYTES) + sodium.crypto_box_keypair(publicKey, secretKey) + console.log('Public Key is: ' + publicKey.toString('hex')) + + pubsub.subPrivateMsg(publicKey, secretKey, (msgBuf, app, peer) => { + console.log('received "' + msgBuf.toString('utf-8') + '" from ' + peer.remoteAddress) + }, true) + + if(process.argv.length > 2) { + const otherPubKey = Buffer.from(process.argv[2], 'hex') + const msg = Buffer.from('hello from ' + os.userInfo().username + ' @ ' + os.hostname, 'utf-8') + await pubsub.joinPublicKey(otherPubKey) + + send() + setInterval(send, 1000) + + function send() { + console.log('sending message: "' + msg.toString('utf-8')+'"') + pubsub.pubPrivateMsg(otherPubKey, msg) + } + } +}) diff --git a/package-lock.json b/package-lock.json index 5637922..6efe26f 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,13 +1,13 @@ { "name": "hyperpubsub", - "version": "1.1.0", + "version": "1.2.3", "lockfileVersion": 1, "requires": true, "dependencies": { "@corestore/networker": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@corestore/networker/-/networker-1.1.0.tgz", - "integrity": "sha512-Pj5Cfyfck1OJfVd4diO4UVo8qabW9O/wgDz5HeY6Okuan98KjMxrAJZG8MPk7I+mjRoYDFgFPVgssx9zv420Ag==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@corestore/networker/-/networker-1.2.0.tgz", + "integrity": "sha512-ErfgH7yuwh6C7Y4AYM6A+Vv0lYV2c3sx9NNzCkIOB8pgp1cPmht4T4ZbLu0GiVj1XJ67AOPI0nhYfi4DB/h2rA==", "dev": true, "requires": { "call-me-maybe": "^1.0.1", @@ -58,42 +58,6 @@ "level": "^6.0.1", "stream-collector": "^1.0.1", "subleveldown": "^5.0.0" - }, - "dependencies": { - "hyperspace": { - "version": "3.19.0", - "resolved": "https://registry.npmjs.org/hyperspace/-/hyperspace-3.19.0.tgz", - "integrity": "sha512-UF6OGzy3mjJ+XuWzjDN45NMD76WsFZoiq9F9TQpG6JGkbxbM1RXjMDG9JeqnjVg8nzylTwiNkskv7JvFmkR05Q==", - "dev": true, - "requires": { - "@corestore/networker": "^1.0.3", - "@hyperspace/client": "^1.14.0", - "@hyperspace/migration-tool": "^1.1.2", - "@hyperspace/rpc": "^1.8.0", - "corestore": "^5.7.3", - "hypercore": "^9.5.4", - "hypercore-cache": "^1.0.2", - "hypercore-default-storage": "^1.0.0", - "hypercore-protocol": "^8.0.7", - "hyperswarm": "^2.15.1", - "hypertrie": "^5.1.1", - "inspect-custom-symbol": "^1.1.1", - "minimist": "^1.2.5", - "nanoresource-promise": "^1.2.2", - "random-access-memory": "^3.1.1" - } - }, - "hyperswarm": { - "version": "2.15.3", - "resolved": "https://registry.npmjs.org/hyperswarm/-/hyperswarm-2.15.3.tgz", - "integrity": "sha512-bESly7s6X7cLMWCn4dsAVE/ttNbbB13o6jku2B7fV2wIV/g7NVC/yF7S3NiknGlftKn/uLU3fhMmbOfdBvQ5IA==", - "dev": true, - "requires": { - "@hyperswarm/network": "^2.0.0", - "shuffled-priority-queue": "^2.1.0", - "utp-native": "^2.1.7" - } - } } }, "@hyperspace/rpc": { @@ -152,6 +116,19 @@ "utp-native": "^2.2.1" } }, + "@hyperswarm/secret-stream": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/@hyperswarm/secret-stream/-/secret-stream-5.0.0.tgz", + "integrity": "sha512-YNI98llFGItCUbns8ejgs7uGUtUTpgzCZrZeiAlrMFVYDltpCaGo8t+N8reFEjZw8R0Mto4R2zRLCpTSlqaENw==", + "dev": true, + "requires": { + "noise-curve-ed": "^1.0.2", + "noise-handshake": "^2.1.0", + "sodium-secretstream": "^1.0.0", + "sodium-universal": "^3.0.4", + "streamx": "^2.10.2" + } + }, "@leichtgewicht/ip-codec": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/@leichtgewicht/ip-codec/-/ip-codec-2.0.3.tgz", @@ -229,6 +206,18 @@ "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", "dev": true }, + "bind-easy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/bind-easy/-/bind-easy-1.0.2.tgz", + "integrity": "sha512-X2ojT4x+zrzzSOJ215eyVhZ+KhqDDE+Egs/M8Nz4ELXcwumQL7dFRxgUNDf+75qicLdm+6sXoGcTuk8lcZulhw==", + "dev": true + }, + "bint8array": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/bint8array/-/bint8array-1.1.3.tgz", + "integrity": "sha512-1RCt3TnM06m4Dolu3BW8WYx7DH/idJrsfuh2/bnFuY9r8YXgEZQ8WMFf/6UnrXa6DjHUJhx/SnZwnM5LV9QdOA==", + "dev": true + }, "bitfield-rle": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/bitfield-rle/-/bitfield-rle-2.2.1.tgz", @@ -288,6 +277,12 @@ } } }, + "bogon": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/bogon/-/bogon-1.0.0.tgz", + "integrity": "sha512-mXxtlBtnW8koqFWPUBtKJm97vBSKZRpOvxvMRVun33qQXwMNfQzq9eTcQzKzqEoNUhNqF9t8rDc/wakKCcHMTg==", + "dev": true + }, "brace-expansion": { "version": "1.1.11", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", @@ -331,9 +326,9 @@ "dev": true }, "buffer-from": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz", - "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==", + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", "dev": true }, "buffer-json": { @@ -431,9 +426,9 @@ "dev": true }, "compact-encoding": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/compact-encoding/-/compact-encoding-2.3.0.tgz", - "integrity": "sha512-5klu6SXxHqD1t2EfkaDw392xktdSw/LhztzsjP5WWszc2xP7fdQEtckKfWLZ3FnGuf7laf6trsA0BaXMe6vxsQ==", + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/compact-encoding/-/compact-encoding-2.4.1.tgz", + "integrity": "sha512-d11ZW2wH7c7zQOEiFcTpHQNuJxArd4lgM5cCHzRXu2UkGQSnbbZUpv7RGKM/oFeRDd+m3lxADaUZ2SdV84NAgA==", "dev": true }, "concat-map": { @@ -443,9 +438,9 @@ "dev": true }, "core-util-is": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", - "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", + "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==", "dev": true }, "corestore": { @@ -862,9 +857,9 @@ } }, "hypercore": { - "version": "9.10.0", - "resolved": "https://registry.npmjs.org/hypercore/-/hypercore-9.10.0.tgz", - "integrity": "sha512-vMaUNcYvtiiXbnjjhj3YbBK/KZEofXfrajiJxJ8rlWVXSyh2fIJcyxTJewfh58IW5bVYNrBPui/CpPyBZiXuZQ==", + "version": "9.12.0", + "resolved": "https://registry.npmjs.org/hypercore/-/hypercore-9.12.0.tgz", + "integrity": "sha512-wIlM4Iwl618NcmsY+1O/X08Cx/bY6ti3LXmQhRnPZFGQPqAeX0x53hASckW082IIAVWzXD3zcmREw5yEINzb4w==", "dev": true, "requires": { "abstract-extension": "^3.0.1", @@ -957,7 +952,7 @@ } }, "hyperspace": { - "version": "git+https://github.com/fsteff/hyperspace.git#02fe4b75442be936ebf6bf76ffc761a55a10bcdb", + "version": "git+https://github.com/fsteff/hyperspace.git#a13b147bceebfb3d00b4c275bb6c95df24938d4a", "from": "git+https://github.com/fsteff/hyperspace.git", "dev": true, "requires": { @@ -966,64 +961,70 @@ "@hyperspace/migration-tool": "^1.1.2", "@hyperspace/rpc": "^1.8.0", "corestore": "^5.7.3", - "hypercore": "^9.5.4", + "hypercore": "^9.12.0", "hypercore-cache": "^1.0.2", "hypercore-default-storage": "^1.0.0", "hypercore-protocol": "^8.0.7", - "hyperswarm": "^3.0.0-beta3", - "hypertrie": "^5.1.1", + "hyperswarm": "^3.0.0-rc.0", + "hypertrie": "^5.1.2", "inspect-custom-symbol": "^1.1.1", "minimist": "^1.2.5", "nanoresource-promise": "^1.2.2", "random-access-memory": "^3.1.1" + } + }, + "hyperswarm": { + "version": "3.0.0-rc.0", + "resolved": "https://registry.npmjs.org/hyperswarm/-/hyperswarm-3.0.0-rc.0.tgz", + "integrity": "sha512-NUNpMMI4D1+Dbvwi2xUSD8aCm0UbT8iE2s4CfUIbjtt5PXSBST0u+NI9AJp6Vu9eU1VHqT5M/8tYo4Pyizkl4A==", + "dev": true, + "requires": { + "@hyperswarm/dht": "^5.0.0-rc.12", + "shuffled-priority-queue": "^2.1.0" }, "dependencies": { "@hyperswarm/dht": { - "version": "5.0.0-rc.5", - "resolved": "https://registry.npmjs.org/@hyperswarm/dht/-/dht-5.0.0-rc.5.tgz", - "integrity": "sha512-/vVc/sKf9oZSE58NKpzLcaeV6GRDuP+ZLECtgjD0sXbW2obe8UsyE3QnWbOaU2WvTtDT8Rsoa73JDJL6ZA0HFA==", + "version": "5.0.0-rc.12", + "resolved": "https://registry.npmjs.org/@hyperswarm/dht/-/dht-5.0.0-rc.12.tgz", + "integrity": "sha512-bNVj/Uwf6YeFzWBYzKuganDbD00/bJ9br23dTSN/TIIlb0xemPTiFFR7U2lzVdRiwQZgMBz2tJz6zJ0fR041Jw==", "dev": true, "requires": { - "compact-encoding": "^2.1.0", - "dht-rpc": "^5.0.0-rc.6", - "noise-protocol": "^3.0.1", - "noise-secret-stream": "^3.0.1", + "@hyperswarm/secret-stream": "^5.0.0", + "bind-easy": "^1.0.1", + "bogon": "^1.0.0", + "compact-encoding": "^2.4.1", + "dht-rpc": "^5.0.0-rc.7", + "noise-curve-ed": "^1.0.2", + "noise-handshake": "^2.1.0", "record-cache": "^1.1.1", + "safety-catch": "^1.0.1", "sodium-universal": "^3.0.4", - "utp-native": "^2.4.0", + "utp-native": "^2.5.3", "xache": "^1.0.0" } }, "dht-rpc": { - "version": "5.0.0-rc.6", - "resolved": "https://registry.npmjs.org/dht-rpc/-/dht-rpc-5.0.0-rc.6.tgz", - "integrity": "sha512-9UOBv4EQqqppgvCb1gU9ciklkZCNQB3g07zDU4LQtqlu7YqANB0PgsgUSTdHIcwtI/oY8i4hiSsEB+mO2H8MKw==", + "version": "5.0.0-rc.7", + "resolved": "https://registry.npmjs.org/dht-rpc/-/dht-rpc-5.0.0-rc.7.tgz", + "integrity": "sha512-gI4lssyCih4ADu1xOZ8Y3EXM3oN5V8O3attel4wuAQREJdOUCH4X1aaN0LoNM77apFJYefYOU/Stz77RNIs4bw==", "dev": true, "requires": { + "bind-easy": "^1.0.0", "compact-encoding": "^2.1.0", "fast-fifo": "^1.0.0", "kademlia-routing-table": "^1.0.0", + "nat-sampler": "^1.0.1", "sodium-universal": "^3.0.4", "streamx": "^2.10.3", "time-ordered-set": "^1.0.2" } - }, - "hyperswarm": { - "version": "3.0.0-beta3", - "resolved": "https://registry.npmjs.org/hyperswarm/-/hyperswarm-3.0.0-beta3.tgz", - "integrity": "sha512-UrRbewMvscIbywVjmEXJtNF7kdKANu5Oz8dmeCixSPmR0GZ16n7aUrPy3wS4wrMim9FgLDXmW/kMa1x1bAAneg==", - "dev": true, - "requires": { - "@hyperswarm/dht": "^5.0.0-rc.5", - "shuffled-priority-queue": "^2.1.0" - } } } }, "hypertrie": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/hypertrie/-/hypertrie-5.1.1.tgz", - "integrity": "sha512-6PjBRPsTH+hqhMpjt1QmxXMFW6XaHNXkjxH1KrL1bp8Fpz7SPOvBNSaQVttvAP6GRzDKkeLraG4q3yJiSL4IhQ==", + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/hypertrie/-/hypertrie-5.1.2.tgz", + "integrity": "sha512-kdzigFUWrCX5NTFvi28q5o3P7faP3QliAQpMfKRSrP5jtitqPfhTgXwstcxS+Vj7mP93R+unZlPYiwu6N9whzA==", "dev": true, "requires": { "array-lru": "^1.1.1", @@ -1413,9 +1414,9 @@ "dev": true }, "multicast-dns": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/multicast-dns/-/multicast-dns-7.2.3.tgz", - "integrity": "sha512-TzxgGSLRLB7tqAlzjgd2x2ZE0cDsGFq4rs9W4yE5xp+7hlRXeUQGtXZsTGfGw2FwWB45rfe8DtXMYBpZGMLUng==", + "version": "7.2.4", + "resolved": "https://registry.npmjs.org/multicast-dns/-/multicast-dns-7.2.4.tgz", + "integrity": "sha512-XkCYOU+rr2Ft3LI6w4ye51M3VK31qJXFIxu0XLw169PtKG0Zx47OrXeVW/GCYOfpC9s1yyyf1S+L8/4LY0J9Zw==", "dev": true, "requires": { "dns-packet": "^5.2.2", @@ -1505,11 +1506,39 @@ "integrity": "sha512-A0xLykHtARfueITVDernsAWdtIMbOJgKgcluwENp3AlsKN/PloyO10HtmoqnFAQAcxPkgZN7wdfPfEd0zNGxbg==", "dev": true }, + "nat-sampler": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/nat-sampler/-/nat-sampler-1.0.1.tgz", + "integrity": "sha512-yQvyNN7xbqR8crTKk3U8gRgpcV1Az+vfCEijiHu9oHHsnIl8n3x+yXNHl42M6L3czGynAVoOT9TqBfS87gDdcw==", + "dev": true + }, "node-gyp-build": { "version": "4.2.3", "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.2.3.tgz", "integrity": "sha512-MN6ZpzmfNCRM+3t57PTJHgHyw/h4OWnZ6mR8P5j/uZtqQr46RRuDE/P+g3n0YR/AiYXeWixZZzaip77gdICfRg==" }, + "noise-curve-ed": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/noise-curve-ed/-/noise-curve-ed-1.0.2.tgz", + "integrity": "sha512-oUaibvHZ2RVsbv4k2VHCH6vL9dQBaGt7bHHlf/aSFSwzi2/GMcOWknvb739bdbTq3YD1wOyvzH1LpJZribnrKA==", + "dev": true, + "requires": { + "nanoassert": "^2.0.0", + "sodium-native": "^3.2.1" + } + }, + "noise-handshake": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/noise-handshake/-/noise-handshake-2.1.0.tgz", + "integrity": "sha512-OGj+M+/vQCJ1wlIXHKKPN3mxreLMSlXsuppXa3MJyxq/l2v1maOniQSNzqKIU29qQxr2/qqwbgh01Qok+y14ww==", + "dev": true, + "requires": { + "bint8array": "^1.1.3", + "hmac-blake2b": "^2.0.0", + "nanoassert": "^2.0.0", + "sodium-universal": "^3.0.4" + } + }, "noise-protocol": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/noise-protocol/-/noise-protocol-3.0.1.tgz", @@ -1522,18 +1551,6 @@ "sodium-universal": "^3.0.2" } }, - "noise-secret-stream": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/noise-secret-stream/-/noise-secret-stream-3.1.1.tgz", - "integrity": "sha512-dP2Z7BgVj4LPEnDPYI6iXAEdUbQrB3bLc2LjQdmXJIBNjoiYVH5d/DawXQI4ZLmRgeqRMt7EDzT+Ffn8ouG3vw==", - "dev": true, - "requires": { - "noise-protocol": "^3.0.1", - "sodium-secretstream": "^1.0.0", - "sodium-universal": "^3.0.4", - "streamx": "^2.10.2" - } - }, "object-inspect": { "version": "1.9.0", "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.9.0.tgz", @@ -1654,6 +1671,12 @@ "once": "^1.3.1" } }, + "queue-tick": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/queue-tick/-/queue-tick-1.0.0.tgz", + "integrity": "sha512-ULWhjjE8BmiICGn3G8+1L9wFpERNxkf8ysxkAer4+TFdRefDaXOCV5m92aMB9FtBVmn/8sETXLXY6BfW7hyaWQ==", + "dev": true + }, "random-access-file": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/random-access-file/-/random-access-file-2.2.0.tgz", @@ -1768,6 +1791,12 @@ "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", "dev": true }, + "safety-catch": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/safety-catch/-/safety-catch-1.0.1.tgz", + "integrity": "sha512-LmPpHuNn2nDbHf7t5xGcPRBsXUnCC1NTiEDQqZfC+okR+E6R3ihHjYiUv7qoa96VnJA52WkqRWJoEN8dSY6TCg==", + "dev": true + }, "sha256-universal": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/sha256-universal/-/sha256-universal-1.1.0.tgz", @@ -1840,9 +1869,9 @@ } }, "simple-hypercore-protocol": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/simple-hypercore-protocol/-/simple-hypercore-protocol-2.1.1.tgz", - "integrity": "sha512-xKuomRCfDDf+r6PDOD3RD88cjOLcbJ0E3Iz9Z+daB4Sq3FVv6efKYsOytgzTfSZMzkszF9EpYHGIILdVI669qA==", + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/simple-hypercore-protocol/-/simple-hypercore-protocol-2.1.2.tgz", + "integrity": "sha512-zCwEMw/Evd5iDPkVEjO+1T3OJqbuDukJSuZtMZ7A7Wfn0RxmaJFbwngfUnDNyQFbPMxiINNxGBMD85fFJF8ghA==", "dev": true, "requires": { "hypercore-crypto": "^2.1.0", @@ -1961,12 +1990,13 @@ } }, "streamx": { - "version": "2.10.3", - "resolved": "https://registry.npmjs.org/streamx/-/streamx-2.10.3.tgz", - "integrity": "sha512-Ss4rEDWlTAUrIqaQsX6tNBNANHxSmbyrA5PlCji0a6xdJtVzfkEMLLrkVW5OSyr4TshiSb1WA2TqMGMUpGnouQ==", + "version": "2.11.3", + "resolved": "https://registry.npmjs.org/streamx/-/streamx-2.11.3.tgz", + "integrity": "sha512-NhcjG/xi33S4O2LRXZnBg7TLhnlE7RKWTeUx3N08K/89PKZ6MehEtSE+aToT5f2Cer2ArX9FwUhVfZbsUjnvrw==", "dev": true, "requires": { - "fast-fifo": "^1.0.0" + "fast-fifo": "^1.0.0", + "queue-tick": "^1.0.0" } }, "string.prototype.trim": { diff --git a/package.json b/package.json index 222ecc1..a3cc12f 100644 --- a/package.json +++ b/package.json @@ -23,9 +23,9 @@ }, "homepage": "https://github.com/fsteff/hyperpubsub#readme", "devDependencies": { + "hyperspace": "git+https://github.com/fsteff/hyperspace.git", "protocol-buffers": "^4.2.0", "tape": "^5.0.1", - "hyperspace": "git+https://github.com/fsteff/hyperspace.git", "tmp-promise": "^3.0.2" }, "dependencies": {