UNPKG

n8n

Version:

n8n Workflow Automation Tool

84 lines 3.3 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.TarPackageReader = void 0; const tar_1 = require("tar"); const bad_request_error_1 = require("../../../../errors/response-errors/bad-request.error"); const MANIFEST_PATH = 'manifest.json'; class TarPackageReader { constructor(buffer, maxUncompressedBytes) { this.buffer = buffer; this.maxUncompressedBytes = maxUncompressedBytes; this.entries = null; } async readManifest() { const entries = await this.load(); const manifest = entries.get(MANIFEST_PATH); if (!manifest) { throw new bad_request_error_1.BadRequestError('Package is missing manifest.json'); } try { return JSON.parse(manifest.toString('utf-8')); } catch { throw new bad_request_error_1.BadRequestError('Package manifest is not valid JSON'); } } async readFile(path) { const entries = await this.load(); const content = entries.get(path); if (!content) { throw new bad_request_error_1.BadRequestError(`Package does not contain entry: ${path}`); } return content; } async listEntries() { const entries = await this.load(); return Array.from(entries.keys()); } async load() { if (this.entries) return this.entries; this.entries = await this.parse(); return this.entries; } async parse() { const entries = new Map(); let totalUncompressedBytes = 0; return await new Promise((resolve, reject) => { const parser = new tar_1.Parser(); parser.on('entry', (entry) => { if (entry.type !== 'File') { entry.resume(); return; } const chunks = []; let entryBytes = 0; entry.on('data', (chunk) => { entryBytes += chunk.length; if (entryBytes > this.maxUncompressedBytes) { reject(new bad_request_error_1.BadRequestError(`Package entry "${entry.path}" exceeds the maximum allowed uncompressed size`)); return; } chunks.push(chunk); }); entry.on('end', () => { const content = Buffer.concat(chunks); totalUncompressedBytes += content.length; if (totalUncompressedBytes > this.maxUncompressedBytes) { reject(new bad_request_error_1.BadRequestError('Package exceeds the maximum allowed uncompressed size')); return; } entries.set(entry.path, content); }); entry.resume(); }); parser.on('error', (error) => { reject(new bad_request_error_1.BadRequestError(error instanceof Error ? error.message : 'Failed to read package archive')); }); parser.on('end', () => resolve(entries)); parser.end(this.buffer); }); } } exports.TarPackageReader = TarPackageReader; //# sourceMappingURL=tar-package-reader.js.map