async _handleFileRequest(stream, filePath, requestPath) {
		let fileStream = null;
		
		try {
			// Get file stats to include metadata
			const stats = fs.statSync(filePath);
			
			// Send metadata response first
			const metadata = {
				type: 'file',
				size: stats.size,
				lastModified: stats.mtime.toISOString()
			};
			// Open the file for reading with proper error handling
			fileStream = fs.createReadStream(filePath, {
				highWaterMark: 64 * 1024 // 64KB chunks for better performance
			});
			
			logT('p2p', `Streaming file ${requestPath} (${stats.size} bytes)`);
			
			// Set up error handler
			fileStream.on('error', async (err) => {
				logTE('p2p', 'Error reading file:', err);
				try {
					await stream.abort(err);
				} catch (abortErr) {
					logTE('p2p', 'Error aborting stream:', abortErr);
				}
			});

			// Create a generator function that yields metadata first, then file chunks
			const sender = async function* () {
				// First yield the metadata as a JSON buffer
				yield Buffer.from(JSON.stringify(metadata));
				
				// Then stream all file chunks
				for await (const chunk of fileStream) {
					yield chunk;
				}
			};
			
			// Send the stream data to the peer
			await stream.sink(sender());
		} catch (err) {
			logTE('p2p', 'Error streaming file:', err);
			await stream.abort(err);
		} finally {
			// Ensure file stream is properly closed
			if (fileStream) {
				fileStream.destroy();
			}
		}
	}
Handle a file request
@param {Object} stream - Stream to send through
@param {string} filePath - File path on disk
@param {string} requestPath - File path in request
@returns {Promise<void>}
@private