feat: track discovery and improve websocket tracking (#91)
This commit is contained in:
parent
671347d42f
commit
8962b975ee
File diff suppressed because it is too large
Load Diff
|
@ -12,6 +12,7 @@
|
||||||
"protobufjs": "^7.3.0"
|
"protobufjs": "^7.3.0"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
|
"@libp2p/interface": "^1.7.0",
|
||||||
"@types/node": "^20.12.11",
|
"@types/node": "^20.12.11",
|
||||||
"copy-webpack-plugin": "^11.0.0",
|
"copy-webpack-plugin": "^11.0.0",
|
||||||
"eslint": "^8",
|
"eslint": "^8",
|
||||||
|
|
|
@ -51,6 +51,32 @@ export async function app(telemetryClient: TelemetryClient) {
|
||||||
contentTopic: DEFAULT_CONTENT_TOPIC,
|
contentTopic: DEFAULT_CONTENT_TOPIC,
|
||||||
});
|
});
|
||||||
|
|
||||||
|
node.libp2p.addEventListener("peer:discovery", async (event) => {
|
||||||
|
const peerId = node.libp2p.peerId.toString();
|
||||||
|
const discoveredPeerId = event.detail.id.toString();
|
||||||
|
|
||||||
|
const timestamp = Math.floor(new Date().getTime() / 1000);
|
||||||
|
const extraData = await buildExtraData(node, discoveredPeerId);
|
||||||
|
const hash = await sha256(`${peerId}-${discoveredPeerId}-${timestamp}`);
|
||||||
|
|
||||||
|
telemetryClient.push<TelemetryPushFilter>([
|
||||||
|
{
|
||||||
|
type: TelemetryType.LIGHT_PUSH_FILTER,
|
||||||
|
protocol: "discovery",
|
||||||
|
timestamp,
|
||||||
|
createdAt: timestamp,
|
||||||
|
seenTimestamp: timestamp,
|
||||||
|
peerId: peerId,
|
||||||
|
contentTopic: DEFAULT_CONTENT_TOPIC,
|
||||||
|
pubsubTopic: DEFAULT_PUBSUB_TOPIC,
|
||||||
|
ephemeral: false,
|
||||||
|
messageHash: hash,
|
||||||
|
errorMessage: "",
|
||||||
|
extraData,
|
||||||
|
},
|
||||||
|
]);
|
||||||
|
});
|
||||||
|
|
||||||
const startLightPushSequence = async (
|
const startLightPushSequence = async (
|
||||||
numMessages: number,
|
numMessages: number,
|
||||||
period: number = 3000
|
period: number = 3000
|
||||||
|
@ -176,7 +202,7 @@ export async function app(telemetryClient: TelemetryClient) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
const extraData = await buildExtraData(node, peerId);
|
const extraData = await buildExtraData(node, decodedMessage.sender);
|
||||||
const timestamp = Math.floor(new Date().getTime() / 1000);
|
const timestamp = Math.floor(new Date().getTime() / 1000);
|
||||||
telemetryClient.push<TelemetryPushFilter>([
|
telemetryClient.push<TelemetryPushFilter>([
|
||||||
{
|
{
|
||||||
|
@ -196,7 +222,7 @@ export async function app(telemetryClient: TelemetryClient) {
|
||||||
]);
|
]);
|
||||||
|
|
||||||
const messageElement = document.createElement("div");
|
const messageElement = document.createElement("div");
|
||||||
messageElement.textContent = `Message: ${decodedMessage.hash} ${decodedMessage.index} of ${decodedMessage.total}`;
|
messageElement.textContent = `Message: ${decodedMessage.seqHash} ${decodedMessage.index} of ${decodedMessage.total}`;
|
||||||
messagesReceived.appendChild(messageElement);
|
messagesReceived.appendChild(messageElement);
|
||||||
messagesReceived.appendChild(document.createElement("br"));
|
messagesReceived.appendChild(document.createElement("br"));
|
||||||
|
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
import { peerIdFromString } from "@libp2p/peer-id";
|
import { peerIdFromString } from "@libp2p/peer-id";
|
||||||
import type { Waku } from "@waku/interfaces";
|
import { Peer } from "@libp2p/interface";
|
||||||
|
import type { LightNode } from "@waku/sdk";
|
||||||
|
|
||||||
export const generateRandomNumber = (): number => {
|
export const generateRandomNumber = (): number => {
|
||||||
return Math.floor(Math.random() * 1000000);
|
return Math.floor(Math.random() * 1000000);
|
||||||
|
@ -17,17 +18,23 @@ export const sha256 = async (number: number | string ): Promise<string> => {
|
||||||
const DEFAULT_EXTRA_DATA = { sdk: "0.0.28" };
|
const DEFAULT_EXTRA_DATA = { sdk: "0.0.28" };
|
||||||
export const DEFAULT_EXTRA_DATA_STR = JSON.stringify(DEFAULT_EXTRA_DATA);
|
export const DEFAULT_EXTRA_DATA_STR = JSON.stringify(DEFAULT_EXTRA_DATA);
|
||||||
|
|
||||||
export const buildExtraData = async (node: Waku, peerId: string): Promise<string> => {
|
export const buildExtraData = async (node: LightNode, peerId: string): Promise<string> => {
|
||||||
const peer = await node.libp2p.peerStore.get(peerIdFromString(peerId));
|
let extraData = { ...DEFAULT_EXTRA_DATA };
|
||||||
const hasWebsockes = peer
|
const peer: Peer = await node.libp2p.peerStore.get(peerIdFromString(peerId));
|
||||||
|
|
||||||
|
if (!peer || peerId === node.libp2p.peerId.toString()) {
|
||||||
|
return JSON.stringify(extraData);
|
||||||
|
}
|
||||||
|
|
||||||
|
const websocket = peer
|
||||||
.addresses
|
.addresses
|
||||||
.map(addr => addr.multiaddr.toString())
|
.map(addr => addr.multiaddr.toString())
|
||||||
.some(addr => addr.includes("ws") || addr.includes("wss"));
|
.some(addr => addr.includes("ws") || addr.includes("wss"));
|
||||||
|
|
||||||
return JSON.stringify({
|
return JSON.stringify({
|
||||||
...DEFAULT_EXTRA_DATA,
|
...extraData,
|
||||||
peerId,
|
peerId,
|
||||||
hasWebsockes,
|
websocket,
|
||||||
enabledProtocols: peer.protocols,
|
enabledProtocols: peer.protocols,
|
||||||
});
|
});
|
||||||
};
|
};
|
Loading…
Reference in New Issue