diff --git a/examples/dogfooding/src/index.ts b/examples/dogfooding/src/index.ts index 87b94bc..3677558 100644 --- a/examples/dogfooding/src/index.ts +++ b/examples/dogfooding/src/index.ts @@ -2,29 +2,17 @@ import { createLightNode, DecodedMessage, LightNode, - utils, } from "@waku/sdk"; import { generateKeyPairFromSeed } from "@libp2p/crypto/keys"; import { fromString } from "uint8arrays"; import { Type, Field } from "protobufjs"; -import { - TelemetryClient, - TelemetryPushFilter, - TelemetryType, -} from "./telemetry_client"; import { generateRandomNumber, sha256, - buildExtraData, } from "./util"; const DEFAULT_CONTENT_TOPIC = "/js-waku-examples/1/message-ratio/utf8"; -const DEFAULT_PUBSUB_TOPIC = utils.contentTopicToPubsubTopic( - DEFAULT_CONTENT_TOPIC -); -const TELEMETRY_URL = - process.env.TELEMETRY_URL || "http://localhost:8080/waku-metrics"; const ProtoSequencedMessage = new Type("SequencedMessage") .add(new Field("hash", 1, "string")) @@ -33,7 +21,6 @@ const ProtoSequencedMessage = new Type("SequencedMessage") .add(new Field("sender", 4, "string")); const sequenceCompletedEvent = new CustomEvent("sequenceCompleted"); -const messageSentEvent = new CustomEvent("messageSent"); const messageReceivedEvent = new CustomEvent("messageReceived"); async function wakuNode(): Promise { @@ -67,7 +54,7 @@ async function wakuNode(): Promise { return node; } -export async function app(telemetryClient: TelemetryClient) { +export async function app() { const node = await wakuNode(); console.log("DEBUG: your peer ID is:", node.libp2p.peerId.toString()); @@ -80,31 +67,6 @@ export async function app(telemetryClient: TelemetryClient) { contentTopic: DEFAULT_CONTENT_TOPIC }); - node.libp2p.addEventListener("peer:discovery", async (event) => { - 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([ - { - type: TelemetryType.LIGHT_PUSH_FILTER, - protocol: "discovery", - timestamp, - createdAt: timestamp, - seenTimestamp: timestamp, - peerId, - contentTopic: DEFAULT_CONTENT_TOPIC, - pubsubTopic: DEFAULT_PUBSUB_TOPIC, - ephemeral: false, - messageHash: hash, - errorMessage: "", - extraData, - }, - ]); - }); - const startLightPushSequence = async ( numMessages: number, period: number = 3000 @@ -171,8 +133,6 @@ export async function app(telemetryClient: TelemetryClient) { return; } - const timestamp = Math.floor(new Date().getTime() / 1000); - const messageElement = document.createElement("div"); messageElement.textContent = `Message: ${decodedMessage.hash}`; document.dispatchEvent(messageReceivedEvent); @@ -189,10 +149,7 @@ export async function app(telemetryClient: TelemetryClient) { } (async () => { - const telemetryClient = new TelemetryClient(TELEMETRY_URL, 5000); - const { node, startLightPushSequence, startFilterSubscription } = await app( - telemetryClient - ); + const { startLightPushSequence, startFilterSubscription } = await app(); startFilterSubscription(); diff --git a/examples/dogfooding/src/telemetry_client.ts b/examples/dogfooding/src/telemetry_client.ts deleted file mode 100644 index 8025292..0000000 --- a/examples/dogfooding/src/telemetry_client.ts +++ /dev/null @@ -1,85 +0,0 @@ -export enum TelemetryType { - LIGHT_PUSH_FILTER = "LightPushFilter", -} - -interface TelemetryMessage { - type: string; - - timestamp: number; - contentTopic: string; - pubsubTopic: string; - peerId: string; - errorMessage: string; - extraData: string; -} - -export interface TelemetryPushFilter extends TelemetryMessage { - type: "LightPushFilter", - protocol: string; - ephemeral: boolean; - seenTimestamp: number; - createdAt: number; - messageHash: string; -} - -export class TelemetryClient { - constructor( - private readonly url: string, - private intervalPeriod: number = 5000 - ) {} - - private queue: TelemetryMessage[] = []; - private intervalId: NodeJS.Timeout | null = null; - private requestId = 0; - - public push(messages: T[]) { - this.queue.push(...messages); - } - - public async start() { - if (!this.intervalId) { - this.intervalId = setInterval(async () => { - if (this.queue.length > 0) { - const success = await this.send(this.queue); - if (success) { - console.log("Sent ", this.queue.length, " telemetry logs"); - this.queue = []; - } - } - }, this.intervalPeriod); - } - } - - public stop() { - if (this.intervalId) { - clearInterval(this.intervalId); - this.intervalId = null; - } - } - private async send(messages: T[]) { - if (!window.location.hostname.includes("lab.waku.org")) { - return; - } - - const telemetryRequests = messages.map((message) => ({ - id: ++this.requestId, - telemetryType: message.type.toString(), - telemetryData: message - })); - - try { - const res = await fetch(this.url, { - method: "POST", - body: JSON.stringify(telemetryRequests), - }); - if (res.status !== 201) { - console.log("DEBUG: Error sending messages to telemetry service: ", res.status, res.statusText, res.json); - return false - } - return true; - } catch (e) { - console.log("DEBUG: Error sending messages to telemetry service", e); - return false; - } - } -} diff --git a/examples/dogfooding/src/util.ts b/examples/dogfooding/src/util.ts index 9223e6e..ed17548 100644 --- a/examples/dogfooding/src/util.ts +++ b/examples/dogfooding/src/util.ts @@ -1,38 +1,12 @@ -import type { LightNode } from "@waku/sdk"; - export const generateRandomNumber = (): number => { - return Math.floor(Math.random() * 1000000); - }; - + return Math.floor(Math.random() * 1000000); +}; + export const sha256 = async (number: number | string ): Promise => { - const encoder = new TextEncoder(); - const data = encoder.encode(number.toString()); - const buffer = await crypto.subtle.digest("SHA-256", data); - return Array.from(new Uint8Array(buffer)) - .map((b) => b.toString(16).padStart(2, "0")) - .join(""); - }; - -const DEFAULT_EXTRA_DATA = { sdk: "0.0.29-rc" }; -export const DEFAULT_EXTRA_DATA_STR = JSON.stringify(DEFAULT_EXTRA_DATA); - -export const buildExtraData = async (node: LightNode, peerId: string): Promise => { - let extraData = { ...DEFAULT_EXTRA_DATA }; - const peer = (await node.libp2p.peerStore.all()).find(p => p.id.toString() === peerId); - - if (!peer || peerId === node.libp2p.peerId.toString()) { - return JSON.stringify(extraData); - } - - const websocket = peer - .addresses - .map(addr => addr.multiaddr.toString()) - .some(addr => addr.includes("ws") || addr.includes("wss")); - - return JSON.stringify({ - ...extraData, - peerId, - websocket, - enabledProtocols: peer.protocols, - }); + const encoder = new TextEncoder(); + const data = encoder.encode(number.toString()); + const buffer = await crypto.subtle.digest("SHA-256", data); + return Array.from(new Uint8Array(buffer)) + .map((b) => b.toString(16).padStart(2, "0")) + .join(""); }; \ No newline at end of file diff --git a/examples/dogfooding/webpack.config.js b/examples/dogfooding/webpack.config.js index cc7d368..6cc0d08 100644 --- a/examples/dogfooding/webpack.config.js +++ b/examples/dogfooding/webpack.config.js @@ -1,12 +1,12 @@ const CopyWebpackPlugin = require("copy-webpack-plugin"); const path = require("path"); -const webpack = require("webpack"); module.exports = { entry: "./src/index.ts", // Changed from index.js to index.ts output: { path: path.resolve(__dirname, "build"), filename: "index.js", + publicPath: process.env.NODE_ENV === 'production' ? '/dogfooding/' : '/' }, experiments: { asyncWebAssembly: true, @@ -31,9 +31,6 @@ module.exports = { plugins: [ new CopyWebpackPlugin({ patterns: ["index.html", "favicon.ico", "favicon.png", "manifest.json"], - }), - new webpack.DefinePlugin({ - 'process.env.TELEMETRY_URL': JSON.stringify(process.env.TELEMETRY_URL || "https://telemetry.status.im/waku-metrics") - }), + }) ], -}; +}; \ No newline at end of file