nodered-grist/node-red-grist/document-export.js
2023-12-28 20:33:32 +01:00

39 lines
No EOL
1.6 KiB
JavaScript

const fetch = (...args) => import('node-fetch').then(({ default: fetch }) => fetch(...args));
module.exports = function (RED) {
function DocumentExportNode(config) {
RED.nodes.createNode(this, config);
let node = this;
this.document = RED.nodes.getNode(config.document);
this.server = RED.nodes.getNode(config.server);
this.format = config.format
node.on('input', async function (msg, send, done) {
const protocol = this.server.tlsEnabled === true ? "https" : "http";
const url = protocol + "://" + this.server.hostname + ":" + this.server.port;
var requestUrl;
switch (this.format) {
case "excel": requestUrl = `${url}/api/docs/${this.document.docid}/download`
break;
case "sqlite": requestUrl = `${url}/api/docs/${this.document.docid}/download/xlsx`
break;
default:
done("Unsupported format " + this.format);
}
fetch(requestUrl, {
headers: {
'authorization': `Bearer ${this.server.apiKey}`
}
}).then(async (response) => {
const blob = await response.blob()
const arrayBuffer = await blob.arrayBuffer();
const buffer = Buffer.from(arrayBuffer);
node.send({ ...msg, payload: buffer })
}).catch(reason => done(reason, "Failed to perform grist request to " + url));
});
}
RED.nodes.registerType("grist-document-export", DocumentExportNode);
}