diff --git a/packages/browser-tests/src/server.ts b/packages/browser-tests/src/server.ts index a912b39b20..3772f419e9 100644 --- a/packages/browser-tests/src/server.ts +++ b/packages/browser-tests/src/server.ts @@ -7,7 +7,7 @@ import { Logger } from "@waku/utils"; import wakuRouter from "./routes/waku.js"; import { initBrowser, getPage, closeBrowser } from "./browser/index.js"; -import { DEFAULT_CLUSTER_ID, DEFAULT_NUM_SHARDS } from "@waku/interfaces"; +import { DEFAULT_CLUSTER_ID, DEFAULT_NUM_SHARDS, Protocols } from "@waku/interfaces"; const log = new Logger("server"); const app = express(); @@ -144,7 +144,7 @@ async function startServer(port: number = 3000): Promise { try { await getPage()?.evaluate(() => - window.wakuApi.waitForPeers?.(5000, ["lightpush"] as any), + window.wakuApi.waitForPeers?.(5000, [Protocols.LightPush]), ); log.info("Auto-start completed with bootstrap peers"); } catch (peerError) { diff --git a/packages/browser-tests/src/utils/endpoint-handler.ts b/packages/browser-tests/src/utils/endpoint-handler.ts index 2318777be9..be1caacc22 100644 --- a/packages/browser-tests/src/utils/endpoint-handler.ts +++ b/packages/browser-tests/src/utils/endpoint-handler.ts @@ -78,7 +78,8 @@ export function createEndpointHandler( throw new Error("window.wakuApi is not available"); } - const method = (testWindow.wakuApi as any)[methodName]; + const wakuApi = testWindow.wakuApi as unknown as Record; + const method = wakuApi[methodName]; if (typeof method !== "function") { throw new Error(`window.wakuApi.${methodName} is not a function`); } diff --git a/packages/browser-tests/tests/utils/container-helpers.ts b/packages/browser-tests/tests/utils/container-helpers.ts index c643ce8374..d65686a544 100644 --- a/packages/browser-tests/tests/utils/container-helpers.ts +++ b/packages/browser-tests/tests/utils/container-helpers.ts @@ -117,9 +117,10 @@ export async function stopContainer(container: StartedTestContainer): Promise { await verifyNetworkFormation([lightPushNode, relayNode]); // Return ServiceNodesFleet-compatible object + // Note: We're returning a partial ServiceNodesFleet for testing purposes return { nodes: [lightPushNode, relayNode], - messageCollector: null as any // Not needed for these tests - } as any; + messageCollector: null + } as ServiceNodesFleet; } /** @@ -97,8 +98,10 @@ export async function getDockerAccessibleMultiaddr(node: ServiceNode): Promise { await Promise.all(nodes.map(node => node.stop())); log.info("Nwaku nodes stopped successfully"); } catch (error) { - log.warn("Nwaku nodes stop had issues:", (error as any).message); + const message = error instanceof Error ? error.message : String(error); + log.warn("Nwaku nodes stop had issues:", message); } } diff --git a/packages/browser-tests/web/index.ts b/packages/browser-tests/web/index.ts index 5834dd0781..e17f4ffd51 100644 --- a/packages/browser-tests/web/index.ts +++ b/packages/browser-tests/web/index.ts @@ -11,9 +11,11 @@ import { DEFAULT_NUM_SHARDS, ShardId, StaticSharding, + ShardInfo, } from "@waku/interfaces"; import { bootstrap } from "@libp2p/bootstrap"; import { EnrDecoder, TransportProtocol } from "@waku/enr"; +import type { Multiaddr } from "@multiformats/multiaddr"; import type { ITestBrowser } from "../types/global.js"; import { Logger, StaticShardingRoutingInfo } from "@waku/utils"; @@ -78,7 +80,7 @@ export class WakuHeadless { lightpushNode?: string | null, enrBootstrap?: string | null, ) { - this.waku = null as unknown as LightNode; + this.waku = null; this.networkConfig = this.buildNetworkConfig(networkConfig); log.info("Network config on construction:", this.networkConfig); this.lightpushNode = lightpushNode || null; @@ -118,11 +120,11 @@ export class WakuHeadless { } private buildNetworkConfig( - providedConfig?: Partial, + providedConfig?: Partial | Partial, ): NetworkConfig { const clusterId = providedConfig?.clusterId ?? DEFAULT_CLUSTER_ID; - const staticShards = (providedConfig as any)?.shards; + const staticShards = (providedConfig as Partial)?.shards; if ( staticShards && Array.isArray(staticShards) && @@ -135,7 +137,7 @@ export class WakuHeadless { } const numShardsInCluster = - (providedConfig as any)?.numShardsInCluster ?? DEFAULT_NUM_SHARDS; + (providedConfig as Partial)?.numShardsInCluster ?? DEFAULT_NUM_SHARDS; log.info( "Using auto sharding with num shards in cluster:", numShardsInCluster, @@ -374,7 +376,7 @@ export class WakuHeadless { const addrs = this.waku.libp2p.getMultiaddrs(); return { peerId: this.waku.libp2p.peerId.toString(), - multiaddrs: addrs.map((a: any) => a.toString()), + multiaddrs: addrs.map((a: Multiaddr) => a.toString()), peers: [], }; } @@ -400,10 +402,19 @@ export class WakuHeadless { } catch (error) { log.error("Error initializing WakuHeadless:", error); const testWindow = window as ITestBrowser; + // Create a stub wakuApi that will reject all method calls testWindow.wakuApi = { - start: () => - Promise.reject(new Error("WakuHeadless failed to initialize")), - error: error, - } as any; + waku: null, + networkConfig: { clusterId: 0, numShardsInCluster: 0 }, + lightpushNode: null, + enrBootstrap: null, + error, + createWakuNode: () => Promise.reject(new Error("WakuHeadless failed to initialize")), + startNode: () => Promise.reject(new Error("WakuHeadless failed to initialize")), + stopNode: () => Promise.reject(new Error("WakuHeadless failed to initialize")), + pushMessageV3: () => Promise.reject(new Error("WakuHeadless failed to initialize")), + waitForPeers: () => Promise.reject(new Error("WakuHeadless failed to initialize")), + getPeerInfo: () => { throw new Error("WakuHeadless failed to initialize"); }, + } as unknown as WakuHeadless; } })();