Thanks for getting back to me! Appreciated!
Too bad. You would have at least on user/client right away if you;d build one 
Just started building one myself though as there is probably no alternative. Is there a community of plug-in developers that have a nice instruction about how to get a plugin up and running within the Bubble environment?
Cheers!
function(properties, context) {
const JSZip = require("jszip");
const zip = new JSZip();
// 1. Parse inputs
var folderData = JSON.parse(properties.folder_structure);
var outputFileName = properties.output_file_name || "output.zip";
// 2. Add files/folders to ZIP (same as before)
function addToZip(currentZipFolder, data) { ... }
addToZip(zip, folderData);
// 3. Generate & upload
return zip.generateAsync({ type: "nodebuffer" })
.then(function(buffer) {
return context.uploadFile(buffer, outputFileName);
})
.then(function(fileUrl) {
// 4. Optionally update the Thing
if (properties.thing_to_connect) {
// The unique ID is often at _id
var thingId = properties.thing_to_connect.get("_id");
var thingType = properties.thing_to_connect.get("_type");
// or you can pass it as a separate text input if needed
// Build the data we want to patch on the Thing
// For example, if your Thing has a "my_zip_file" field that is a "file" type:
var dataToPatch = {
"my_zip_file": fileUrl
};
// 5. Make an API call to Bubble's Data API to update the Thing
// - We must do this asynchronously
return context.async(function(callback) {
// Example path: "/obj/[DataType]/[UniqueID]"
context.request({
uri: "/obj/" + thingType + "/" + thingId,
method: "PATCH",
body: dataToPatch
}, function(err, res, body) {
if (err) {
callback(err);
} else {
// once the patch is done, callback returning the file info
callback(null, {
zip_file_url: fileUrl,
zip_file: {
filename: outputFileName,
private: true,
url: fileUrl
}
});
}
});
});
}
else {
// If there's no Thing, just return the file
return {
zip_file_url: fileUrl,
zip_file: {
filename: outputFileName,
private: true,
url: fileUrl
}
};
}
})
.catch(function(error) {
throw new Error("Error generating ZIP file: " + error.message);
});
}