mirror of
https://github.com/status-im/js-waku.git
synced 2025-02-23 10:28:15 +00:00
Can use gossipsub to publish messages
This commit is contained in:
parent
be47223bae
commit
5e64708111
@ -1,7 +0,0 @@
|
|||||||
import test from 'ava';
|
|
||||||
|
|
||||||
import { asyncABC } from './async';
|
|
||||||
|
|
||||||
test('getABC', async (t) => {
|
|
||||||
t.deepEqual(await asyncABC(), ['a', 'b', 'c']);
|
|
||||||
});
|
|
@ -1,32 +0,0 @@
|
|||||||
/**
|
|
||||||
* A sample async function (to demo Typescript's es7 async/await down-leveling).
|
|
||||||
*
|
|
||||||
* ### Example (es imports)
|
|
||||||
* ```js
|
|
||||||
* import { asyncABC } from 'typescript-starter'
|
|
||||||
* console.log(await asyncABC())
|
|
||||||
* // => ['a','b','c']
|
|
||||||
* ```
|
|
||||||
*
|
|
||||||
* ### Example (commonjs)
|
|
||||||
* ```js
|
|
||||||
* var double = require('typescript-starter').asyncABC;
|
|
||||||
* asyncABC().then(console.log);
|
|
||||||
* // => ['a','b','c']
|
|
||||||
* ```
|
|
||||||
*
|
|
||||||
* @returns a Promise which should contain `['a','b','c']`
|
|
||||||
*/
|
|
||||||
export const asyncABC = async () => {
|
|
||||||
const somethingSlow = (index: 0 | 1 | 2) => {
|
|
||||||
const storage = 'abc'.charAt(index);
|
|
||||||
return new Promise<string>((resolve) =>
|
|
||||||
// later...
|
|
||||||
resolve(storage)
|
|
||||||
);
|
|
||||||
};
|
|
||||||
const a = await somethingSlow(0);
|
|
||||||
const b = await somethingSlow(1);
|
|
||||||
const c = await somethingSlow(2);
|
|
||||||
return [a, b, c];
|
|
||||||
};
|
|
51
src/lib/node.spec.ts
Normal file
51
src/lib/node.spec.ts
Normal file
@ -0,0 +1,51 @@
|
|||||||
|
import { TextDecoder, TextEncoder } from 'util';
|
||||||
|
|
||||||
|
import test from 'ava';
|
||||||
|
|
||||||
|
import { createNode } from './node';
|
||||||
|
|
||||||
|
function delay(ms: number)
|
||||||
|
{
|
||||||
|
return new Promise(resolve => setTimeout(resolve, ms));
|
||||||
|
}
|
||||||
|
|
||||||
|
test('Can publish message', async (t) => {
|
||||||
|
|
||||||
|
const topic = 'news'
|
||||||
|
|
||||||
|
const [node1, node2] = await Promise.all([
|
||||||
|
createNode(),
|
||||||
|
createNode()
|
||||||
|
])
|
||||||
|
|
||||||
|
// Add node's 2 data to the PeerStore
|
||||||
|
node1.peerStore.addressBook.set(node2.peerId, node2.multiaddrs)
|
||||||
|
await node1.dial(node2.peerId)
|
||||||
|
|
||||||
|
let node1Received = "";
|
||||||
|
|
||||||
|
node1.pubsub.on(topic, (msg) => {
|
||||||
|
node1Received = new TextDecoder().decode(msg.data);
|
||||||
|
console.log(`node1 received: ${node1Received}`)
|
||||||
|
|
||||||
|
})
|
||||||
|
|
||||||
|
await node1.pubsub.subscribe(topic)
|
||||||
|
|
||||||
|
// Will not receive own published messages by default
|
||||||
|
node2.pubsub.on(topic, (msg) => {
|
||||||
|
console.log(`node2 received: ${new TextDecoder().decode(msg.data)}`)
|
||||||
|
})
|
||||||
|
|
||||||
|
await node2.pubsub.subscribe(topic)
|
||||||
|
|
||||||
|
const message = 'Bird bird bird, bird is the word!';
|
||||||
|
|
||||||
|
await delay(1000);
|
||||||
|
|
||||||
|
await node2.pubsub.publish(topic, new TextEncoder().encode(message));
|
||||||
|
|
||||||
|
await delay(1000);
|
||||||
|
|
||||||
|
t.deepEqual(node1Received, message)
|
||||||
|
});
|
23
src/lib/node.ts
Normal file
23
src/lib/node.ts
Normal file
@ -0,0 +1,23 @@
|
|||||||
|
import Libp2p from 'libp2p';
|
||||||
|
import Gossipsub from 'libp2p-gossipsub';
|
||||||
|
import Mplex from 'libp2p-mplex';
|
||||||
|
import { NOISE } from 'libp2p-noise';
|
||||||
|
import TCP from 'libp2p-tcp';
|
||||||
|
|
||||||
|
export const createNode = async () => {
|
||||||
|
const node = await Libp2p.create({
|
||||||
|
addresses: {
|
||||||
|
listen: ['/ip4/0.0.0.0/tcp/0']
|
||||||
|
},
|
||||||
|
modules: {
|
||||||
|
transport: [TCP],
|
||||||
|
streamMuxer: [Mplex],
|
||||||
|
connEncryption: [NOISE],
|
||||||
|
// @ts-ignore: Type needs update
|
||||||
|
pubsub: Gossipsub
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
|
await node.start()
|
||||||
|
return node
|
||||||
|
}
|
@ -1,11 +0,0 @@
|
|||||||
import test from 'ava';
|
|
||||||
|
|
||||||
import { double, power } from './number';
|
|
||||||
|
|
||||||
test('double', (t) => {
|
|
||||||
t.is(double(2), 4);
|
|
||||||
});
|
|
||||||
|
|
||||||
test('power', (t) => {
|
|
||||||
t.is(power(2, 4), 16);
|
|
||||||
});
|
|
@ -1,51 +0,0 @@
|
|||||||
/**
|
|
||||||
* Multiplies a value by 2. (Also a full example of TypeDoc's functionality.)
|
|
||||||
*
|
|
||||||
* ### Example (es module)
|
|
||||||
* ```js
|
|
||||||
* import { double } from 'typescript-starter'
|
|
||||||
* console.log(double(4))
|
|
||||||
* // => 8
|
|
||||||
* ```
|
|
||||||
*
|
|
||||||
* ### Example (commonjs)
|
|
||||||
* ```js
|
|
||||||
* var double = require('typescript-starter').double;
|
|
||||||
* console.log(double(4))
|
|
||||||
* // => 8
|
|
||||||
* ```
|
|
||||||
*
|
|
||||||
* @param value - Comment describing the `value` parameter.
|
|
||||||
* @returns Comment describing the return type.
|
|
||||||
* @anotherNote Some other value.
|
|
||||||
*/
|
|
||||||
export const double = (value: number) => {
|
|
||||||
return value * 2;
|
|
||||||
};
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Raise the value of the first parameter to the power of the second using the
|
|
||||||
* es7 exponentiation operator (`**`).
|
|
||||||
*
|
|
||||||
* ### Example (es module)
|
|
||||||
* ```js
|
|
||||||
* import { power } from 'typescript-starter'
|
|
||||||
* console.log(power(2,3))
|
|
||||||
* // => 8
|
|
||||||
* ```
|
|
||||||
*
|
|
||||||
* ### Example (commonjs)
|
|
||||||
* ```js
|
|
||||||
* var power = require('typescript-starter').power;
|
|
||||||
* console.log(power(2,3))
|
|
||||||
* // => 8
|
|
||||||
* ```
|
|
||||||
* @param base - the base to exponentiate
|
|
||||||
* @param exponent - the power to which to raise the base
|
|
||||||
*/
|
|
||||||
export const power = (base: number, exponent: number) => {
|
|
||||||
/**
|
|
||||||
* This es7 exponentiation operator is transpiled by TypeScript
|
|
||||||
*/
|
|
||||||
return base ** exponent;
|
|
||||||
};
|
|
Loading…
x
Reference in New Issue
Block a user