1. const fs = require('fs');
  2. const zlib = require('zlib');
  3. /**
  4. * Decodes a file input for an isolated environment with rate limiting.
  5. *
  6. * @param {Buffer} fileData The file data as a Buffer.
  7. * @param {number} rateLimitMs The rate limit in milliseconds.
  8. * @returns {Promise<string>} A promise that resolves with the decoded string,
  9. * or rejects with an error.
  10. */
  11. async function decodeFile(fileData, rateLimitMs) {
  12. return new Promise((resolve, reject) => {
  13. // Rate limiting implementation
  14. let lastRequestTime = 0;
  15. const checkRateLimit = () => {
  16. const now = Date.now();
  17. if (now - lastRequestTime >= rateLimitMs) {
  18. lastRequestTime = now;
  19. } else {
  20. setTimeout(checkRateLimit, 10); // Check again later
  21. }
  22. };
  23. checkRateLimit();
  24. // Decode the file data
  25. zlib.gunzip(fileData, (err, buffer) => {
  26. if (err) {
  27. reject(err);
  28. return;
  29. }
  30. try {
  31. const decodedString = buffer.toString('utf8');
  32. resolve(decodedString);
  33. } catch (decodeError) {
  34. reject(decodeError);
  35. }
  36. });
  37. });
  38. }
  39. module.exports = decodeFile;

Add your comment