_handlePubSubMessage(evt) {
		try {
			const { data, topic, from } = evt.detail;
			const message = JSON.parse(Buffer.from(data).toString());
			
			// Check if this is an init message or if the peer is verified
			const isInitMessage = topic === `${this.protocol}/init`;
			const isPeerVerified = !this.peers.has(from) || this.peers.get(from)[this.protocolName];
			
			// Only process message if it's an init message or the peer is verified
			if (!isInitMessage && !isPeerVerified) {
				logT('p2p', `Ignoring message from unverified peer ${from} on topic ${topic}`);
				return;
			}
			
			const messageData = message.data || message;

			// Check if this is a response to a request
			if (message.id && message.isResponse && this.responseHandlers.has(message.id)) {
				const handler = this.responseHandlers.get(message.id);
				handler(messageData, from);
				
				// Remove one-time handlers
				if (!handler.permanent) {
					this.responseHandlers.delete(message.id);
				}
				return;
			}
			
			// Handle topic-specific messages
			if (this.topicHandlers.has(topic)) {
				const handlerConfig = this.topicHandlers.get(topic);
				
				// Skip if pubsub is disabled for this handler
				if (!handlerConfig.pubsub) {
					return;
				}
				
				// For request-response pattern, include the ability to reply
				const respond = (responseData) => {
					this.sendToPeer(from, topic, {
						data: responseData,
						id: message.id,
						isResponse: true
					});
				};
				
				handlerConfig.handler(messageData, from, respond);
			}
		} catch (err) {
			logTE('p2p', 'Error handling pubsub message:', err);
		}
	}
Handle incoming pubsub messages
@param {Event} evt - Message event